[{"data":1,"prerenderedAt":173147},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch04-html-tu-xiang-yu-lian-jie":3,"wiki-doc-nav":222},{"id":4,"title":5,"body":6,"description":214,"extension":215,"meta":216,"navigation":217,"path":218,"seo":219,"stem":220,"__hash__":221},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":8,"toc":204},"minimark",[9,13,18,22,29,36,42,48,51,54,57,60,63,66,69,73,76,79,82,88,94,100,110,114,120,126,129,132,138,144,150,153,156,160,163,173,179,183,192,196,199],[10,11,5],"h1",{"id":12},"_4-html图像与链接",[14,15,17],"h2",{"id":16},"_41-图像标签","4.1 图像标签",[19,20,21],"p",{},"（1）标签",[19,23,24,28],{},[25,26,27],"code",{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,30,31,32,35],{},"src是",[25,33,34],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,37,38,39],{},"alt:文本，替换文本。图像不能显示的文字 ",[25,40,41],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,43,44,45],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[25,46,47],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,49,50],{},"width:像素，设置图像的宽度",[19,52,53],{},"height:像素，设置图像的高度",[19,55,56],{},"border：像素，设置图像的边框粗细",[19,58,59],{},"（2）图像标签属性的注意点：",[19,61,62],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,64,65],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,67,68],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,70,72],{"id":71},"_42-路径注意要点","4.2 路径注意要点：",[19,74,75],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,77,78],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,80,81],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,83,84,85],{},"①同一级路径：图像文件位于HTML文件同一级，如",[25,86,87],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,89,90,91],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[25,92,93],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,95,96,97],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[25,98,99],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,101,102,103,109],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[104,105,106],"a",{"href":106,"rel":107},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[108],"nofollow","\"",[14,111,113],{"id":112},"_43-超链接标签","4.3 超链接标签",[19,115,116,119],{},[25,117,118],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,121,122,123],{},"①语法格式：",[25,124,125],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127,128],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,130,131],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,133,134,135],{},"③链接分类：外部链接：",[25,136,137],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,139,140,141],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[25,142,143],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,145,146,147],{},"空链接：如果当时没有确定链接目标时，",[25,148,149],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,151,152],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,154,155],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,157,159],{"id":158},"_44-锚点链接","4.4 锚点链接",[19,161,162],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,164,165,166,169,170],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[25,167,168],{},"\u003Ca href=\"#two\">","第二级",[25,171,172],{},"\u003C\u002Fa>",[19,174,175,176],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[25,177,178],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,180,182],{"id":181},"_45-注释标签","4.5 注释标签",[19,184,185,188,189],{},[25,186,187],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[25,190,191],{},"ctrl+\u002F",[14,193,195],{"id":194},"_46-特殊字符","4.6 特殊字符",[19,197,198],{},"可以实现添加多个空格",[200,201],"img",{"style":202,"src":203},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":205,"searchDepth":206,"depth":206,"links":207},"",2,[208,209,210,211,212,213],{"id":16,"depth":206,"text":17},{"id":71,"depth":206,"text":72},{"id":112,"depth":206,"text":113},{"id":158,"depth":206,"text":159},{"id":181,"depth":206,"text":182},{"id":194,"depth":206,"text":195},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":5,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",[223,5335,6443,7863,10852,12203,13692,14781,23544,23556,24154,24180,24304,24545,24610,24628,24641,24688,24812,24981,25180,25360,25565,25701,25796,25833,25846,26156,26897,27605,27626,28646,30277,30428,30441,30453,30754,50566,50581,50598,50631,53503,76851,92996,93017,93130,93251,94021,94684,95045,95083,95189,95289,95332,95358,95419,97073,97174,97199,97690,98190,99270,99553,100295,100797,100809,102825,104489,105992,107690,109607,111526,113548,117018,117450,117913,118662,121606,121954,121976,122332,125639,125651,126054,126077,126224,126391,126523,126824,127381,128038,129969,131567,132216,133710,135141,136376,138070,139822,142232,142348,143283,143494,144379,145614,145842,145855,147010,149422,151790,155111,157588,159232,161009,163022,166074,168254,170781,172975],{"id":224,"title":225,"body":226,"description":205,"extension":215,"meta":5330,"navigation":217,"path":5331,"seo":5332,"stem":5333,"__hash__":5334},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":227,"toc":5302},[228,231,235,238,242,255,259,264,267,270,273,276,279,313,317,320,323,326,329,382,386,405,407,421,424,432,435,1296,1303,1320,1324,1415,1419,1425,1514,1518,1556,1560,1624,1628,1632,1638,1649,1653,1658,1662,1667,1671,1676,1680,1684,1689,1959,1964,2102,2107,2364,2367,2375,2379,2384,2487,2490,2796,2805,2906,2909,2912,2915,2918,3178,3183,3323,3326,3505,3508,3636,3639,3791,3795,3800,3803,3814,3822,3825,3932,3936,3940,3945,3995,4000,4005,4029,4034,4087,4090,4095,4272,4277,4562,4567,4964,4968,4973,5030,5035,5043,5046,5186,5189,5298],[10,229,225],{"id":230},"_1基础入门",[14,232,234],{"id":233},"_11注释","1.1注释",[19,236,237],{},"\u002F\u002F或者\u002F* *\u002F",[14,239,241],{"id":240},"_12命名","1.2命名",[243,244,245,249,252],"ol",{},[246,247,248],"li",{},"字母数字下划线",[246,250,251],{},"开头必须是字母或_",[246,253,254],{},"不能使用关键词",[14,256,258],{"id":257},"_13数据类型","1.3数据类型",[260,261,263],"h3",{"id":262},"_131整形","1.3.1整形",[19,265,266],{},"short 短整形 2",[19,268,269],{},"int 整形 4",[19,271,272],{},"long 长整形 win4 linux32位4 linux64位8",[19,274,275],{},"long long 长长整形 8",[19,277,278],{},"利用sizeof可以求数据类型占用的内存空间大小",[280,281,285],"pre",{"className":282,"code":283,"language":284,"meta":205,"style":205},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[25,286,287,306],{"__ignoreMap":205},[288,289,292,296,300,303],"span",{"class":290,"line":291},"line",1,[288,293,295],{"class":294},"szBVR","sizeof",[288,297,299],{"class":298},"sVt8B","(",[288,301,302],{"class":294},"int",[288,304,305],{"class":298},")\n",[288,307,308,310],{"class":290,"line":206},[288,309,295],{"class":294},[288,311,312],{"class":298},"(num)\n",[260,314,316],{"id":315},"_132浮点型","1.3.2浮点型",[19,318,319],{},"float 单精度 4节 7位有效数字",[19,321,322],{},"double 双精度 8节 15-16有效数字",[19,324,325],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,327,328],{},"注意点：",[280,330,332],{"className":282,"code":331,"language":284,"meta":205,"style":205},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[25,333,334,359],{"__ignoreMap":205},[288,335,336,339,342,345,349,352,355],{"class":290,"line":291},[288,337,338],{"class":294},"float",[288,340,341],{"class":298}," f1",[288,343,344],{"class":294},"=",[288,346,348],{"class":347},"sj4cs","3.14",[288,350,351],{"class":294},"f",[288,353,354],{"class":298},";",[288,356,358],{"class":357},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[288,360,361,363,366,368,371,374,377,379],{"class":290,"line":206},[288,362,338],{"class":294},[288,364,365],{"class":298}," f2",[288,367,344],{"class":294},[288,369,370],{"class":347},"3",[288,372,373],{"class":294},"e",[288,375,376],{"class":347},"2",[288,378,354],{"class":298},[288,380,381],{"class":357}," \u002F\u002F科学记数法\n",[260,383,385],{"id":384},"_133字符型","1.3.3字符型",[280,387,389],{"className":282,"code":388,"language":284,"meta":205,"style":205},"char ch='a'\n",[25,390,391],{"__ignoreMap":205},[288,392,393,396,399,401],{"class":290,"line":291},[288,394,395],{"class":294},"char",[288,397,398],{"class":298}," ch",[288,400,344],{"class":294},[288,402,404],{"class":403},"sZZnC","'a'\n",[19,406,328],{},[243,408,409,412,415,418],{},[246,410,411],{},"在显示字符型变量时，只能单引号，双引号x",[246,413,414],{},"单引号内只能一个字符，不能字符串",[246,416,417],{},"c和c++字符型变量只占用一个字符",[246,419,420],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,422,423],{},"ASCII码大致由以下两部分组成：",[243,425,426,429],{},[246,427,428],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[246,430,431],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,433,434],{},"ASCII码表格：",[436,437,438,482],"table",{},[439,440,441],"thead",{},[442,443,444,452,457,461,466,470,474,478],"tr",{},[445,446,447,451],"th",{},[448,449,450],"strong",{},"ASCII","值",[445,453,454],{},[448,455,456],{},"控制字符",[445,458,459,451],{},[448,460,450],{},[445,462,463],{},[448,464,465],{},"字符",[445,467,468,451],{},[448,469,450],{},[445,471,472],{},[448,473,465],{},[445,475,476,451],{},[448,477,450],{},[445,479,480],{},[448,481,465],{},[483,484,485,512,537,561,586,612,637,662,688,713,739,765,791,816,842,868,894,918,943,968,993,1018,1043,1068,1093,1118,1143,1169,1194,1219,1244,1270],"tbody",{},[442,486,487,491,494,497,500,503,506,509],{},[488,489,490],"td",{},"0",[488,492,493],{},"NUT",[488,495,496],{},"32",[488,498,499],{},"(space)",[488,501,502],{},"64",[488,504,505],{},"@",[488,507,508],{},"96",[488,510,511],{},"、",[442,513,514,517,520,523,526,529,532,535],{},[488,515,516],{},"1",[488,518,519],{},"SOH",[488,521,522],{},"33",[488,524,525],{},"!",[488,527,528],{},"65",[488,530,531],{},"A",[488,533,534],{},"97",[488,536,104],{},[442,538,539,541,544,547,549,552,555,558],{},[488,540,376],{},[488,542,543],{},"STX",[488,545,546],{},"34",[488,548,109],{},[488,550,551],{},"66",[488,553,554],{},"B",[488,556,557],{},"98",[488,559,560],{},"b",[442,562,563,565,568,571,574,577,580,583],{},[488,564,370],{},[488,566,567],{},"ETX",[488,569,570],{},"35",[488,572,573],{},"#",[488,575,576],{},"67",[488,578,579],{},"C",[488,581,582],{},"99",[488,584,585],{},"c",[442,587,588,591,594,597,600,603,606,609],{},[488,589,590],{},"4",[488,592,593],{},"EOT",[488,595,596],{},"36",[488,598,599],{},"$",[488,601,602],{},"68",[488,604,605],{},"D",[488,607,608],{},"100",[488,610,611],{},"d",[442,613,614,617,620,623,626,629,632,635],{},[488,615,616],{},"5",[488,618,619],{},"ENQ",[488,621,622],{},"37",[488,624,625],{},"%",[488,627,628],{},"69",[488,630,631],{},"E",[488,633,634],{},"101",[488,636,373],{},[442,638,639,642,645,648,651,654,657,660],{},[488,640,641],{},"6",[488,643,644],{},"ACK",[488,646,647],{},"38",[488,649,650],{},"&",[488,652,653],{},"70",[488,655,656],{},"F",[488,658,659],{},"102",[488,661,351],{},[442,663,664,667,670,673,676,679,682,685],{},[488,665,666],{},"7",[488,668,669],{},"BEL",[488,671,672],{},"39",[488,674,675],{},",",[488,677,678],{},"71",[488,680,681],{},"G",[488,683,684],{},"103",[488,686,687],{},"g",[442,689,690,693,696,699,701,704,707,710],{},[488,691,692],{},"8",[488,694,695],{},"BS",[488,697,698],{},"40",[488,700,299],{},[488,702,703],{},"72",[488,705,706],{},"H",[488,708,709],{},"104",[488,711,712],{},"h",[442,714,715,718,721,724,727,730,733,736],{},[488,716,717],{},"9",[488,719,720],{},"HT",[488,722,723],{},"41",[488,725,726],{},")",[488,728,729],{},"73",[488,731,732],{},"I",[488,734,735],{},"105",[488,737,738],{},"i",[442,740,741,744,747,750,753,756,759,762],{},[488,742,743],{},"10",[488,745,746],{},"LF",[488,748,749],{},"42",[488,751,752],{},"*",[488,754,755],{},"74",[488,757,758],{},"J",[488,760,761],{},"106",[488,763,764],{},"j",[442,766,767,770,773,776,779,782,785,788],{},[488,768,769],{},"11",[488,771,772],{},"VT",[488,774,775],{},"43",[488,777,778],{},"+",[488,780,781],{},"75",[488,783,784],{},"K",[488,786,787],{},"107",[488,789,790],{},"k",[442,792,793,796,799,802,804,807,810,813],{},[488,794,795],{},"12",[488,797,798],{},"FF",[488,800,801],{},"44",[488,803,675],{},[488,805,806],{},"76",[488,808,809],{},"L",[488,811,812],{},"108",[488,814,815],{},"l",[442,817,818,821,824,827,830,833,836,839],{},[488,819,820],{},"13",[488,822,823],{},"CR",[488,825,826],{},"45",[488,828,829],{},"-",[488,831,832],{},"77",[488,834,835],{},"M",[488,837,838],{},"109",[488,840,841],{},"m",[442,843,844,847,850,853,856,859,862,865],{},[488,845,846],{},"14",[488,848,849],{},"SO",[488,851,852],{},"46",[488,854,855],{},".",[488,857,858],{},"78",[488,860,861],{},"N",[488,863,864],{},"110",[488,866,867],{},"n",[442,869,870,873,876,879,882,885,888,891],{},[488,871,872],{},"15",[488,874,875],{},"SI",[488,877,878],{},"47",[488,880,881],{},"\u002F",[488,883,884],{},"79",[488,886,887],{},"O",[488,889,890],{},"111",[488,892,893],{},"o",[442,895,896,899,902,905,907,910,913,916],{},[488,897,898],{},"16",[488,900,901],{},"DLE",[488,903,904],{},"48",[488,906,490],{},[488,908,909],{},"80",[488,911,912],{},"P",[488,914,915],{},"112",[488,917,19],{},[442,919,920,923,926,929,931,934,937,940],{},[488,921,922],{},"17",[488,924,925],{},"DCI",[488,927,928],{},"49",[488,930,516],{},[488,932,933],{},"81",[488,935,936],{},"Q",[488,938,939],{},"113",[488,941,942],{},"q",[442,944,945,948,951,954,956,959,962,965],{},[488,946,947],{},"18",[488,949,950],{},"DC2",[488,952,953],{},"50",[488,955,376],{},[488,957,958],{},"82",[488,960,961],{},"R",[488,963,964],{},"114",[488,966,967],{},"r",[442,969,970,973,976,979,981,984,987,990],{},[488,971,972],{},"19",[488,974,975],{},"DC3",[488,977,978],{},"51",[488,980,370],{},[488,982,983],{},"83",[488,985,986],{},"S",[488,988,989],{},"115",[488,991,992],{},"s",[442,994,995,998,1001,1004,1006,1009,1012,1015],{},[488,996,997],{},"20",[488,999,1000],{},"DC4",[488,1002,1003],{},"52",[488,1005,590],{},[488,1007,1008],{},"84",[488,1010,1011],{},"T",[488,1013,1014],{},"116",[488,1016,1017],{},"t",[442,1019,1020,1023,1026,1029,1031,1034,1037,1040],{},[488,1021,1022],{},"21",[488,1024,1025],{},"NAK",[488,1027,1028],{},"53",[488,1030,616],{},[488,1032,1033],{},"85",[488,1035,1036],{},"U",[488,1038,1039],{},"117",[488,1041,1042],{},"u",[442,1044,1045,1048,1051,1054,1056,1059,1062,1065],{},[488,1046,1047],{},"22",[488,1049,1050],{},"SYN",[488,1052,1053],{},"54",[488,1055,641],{},[488,1057,1058],{},"86",[488,1060,1061],{},"V",[488,1063,1064],{},"118",[488,1066,1067],{},"v",[442,1069,1070,1073,1076,1079,1081,1084,1087,1090],{},[488,1071,1072],{},"23",[488,1074,1075],{},"TB",[488,1077,1078],{},"55",[488,1080,666],{},[488,1082,1083],{},"87",[488,1085,1086],{},"W",[488,1088,1089],{},"119",[488,1091,1092],{},"w",[442,1094,1095,1098,1101,1104,1106,1109,1112,1115],{},[488,1096,1097],{},"24",[488,1099,1100],{},"CAN",[488,1102,1103],{},"56",[488,1105,692],{},[488,1107,1108],{},"88",[488,1110,1111],{},"X",[488,1113,1114],{},"120",[488,1116,1117],{},"x",[442,1119,1120,1123,1126,1129,1131,1134,1137,1140],{},[488,1121,1122],{},"25",[488,1124,1125],{},"EM",[488,1127,1128],{},"57",[488,1130,717],{},[488,1132,1133],{},"89",[488,1135,1136],{},"Y",[488,1138,1139],{},"121",[488,1141,1142],{},"y",[442,1144,1145,1148,1151,1154,1157,1160,1163,1166],{},[488,1146,1147],{},"26",[488,1149,1150],{},"SUB",[488,1152,1153],{},"58",[488,1155,1156],{},":",[488,1158,1159],{},"90",[488,1161,1162],{},"Z",[488,1164,1165],{},"122",[488,1167,1168],{},"z",[442,1170,1171,1174,1177,1180,1182,1185,1188,1191],{},[488,1172,1173],{},"27",[488,1175,1176],{},"ESC",[488,1178,1179],{},"59",[488,1181,354],{},[488,1183,1184],{},"91",[488,1186,1187],{},"[",[488,1189,1190],{},"123",[488,1192,1193],{},"{",[442,1195,1196,1199,1202,1205,1208,1211,1213,1216],{},[488,1197,1198],{},"28",[488,1200,1201],{},"FS",[488,1203,1204],{},"60",[488,1206,1207],{},"\u003C",[488,1209,1210],{},"92",[488,1212,881],{},[488,1214,1215],{},"124",[488,1217,1218],{},"|",[442,1220,1221,1224,1227,1230,1232,1235,1238,1241],{},[488,1222,1223],{},"29",[488,1225,1226],{},"GS",[488,1228,1229],{},"61",[488,1231,344],{},[488,1233,1234],{},"93",[488,1236,1237],{},"]",[488,1239,1240],{},"125",[488,1242,1243],{},"}",[442,1245,1246,1249,1252,1255,1258,1261,1264,1267],{},[488,1247,1248],{},"30",[488,1250,1251],{},"RS",[488,1253,1254],{},"62",[488,1256,1257],{},">",[488,1259,1260],{},"94",[488,1262,1263],{},"^",[488,1265,1266],{},"126",[488,1268,1269],{},"`",[442,1271,1272,1275,1278,1281,1284,1287,1290,1293],{},[488,1273,1274],{},"31",[488,1276,1277],{},"US",[488,1279,1280],{},"63",[488,1282,1283],{},"?",[488,1285,1286],{},"95",[488,1288,1289],{},"_",[488,1291,1292],{},"127",[488,1294,1295],{},"DEL",[19,1297,1298,1299,1302],{},"ASCII 码大致由以下",[448,1300,1301],{},"两部分组","成：",[1304,1305,1306,1313],"ul",{},[246,1307,1308,1309,1312],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[448,1310,1311],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[246,1314,1315,1316,1319],{},"ASCII 打印字符：数字 ",[448,1317,1318],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[260,1321,1323],{"id":1322},"_134转义字符","1.3.4转义字符",[280,1325,1327],{"className":282,"code":1326,"language":284,"meta":205,"style":205},"\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",[25,1328,1329,1334,1350,1365,1371,1385,1391],{"__ignoreMap":205},[288,1330,1331],{"class":290,"line":291},[288,1332,1333],{"class":357},"\u002F\u002F换行符\n",[288,1335,1336,1339,1342,1345,1347],{"class":290,"line":206},[288,1337,1338],{"class":298},"cout ",[288,1340,1341],{"class":294},"\u003C\u003C",[288,1343,1344],{"class":403},"\"hello world\u002Fn\"",[288,1346,354],{"class":298},[288,1348,1349],{"class":357}," \u002F\u002F就等同于如下：\n",[288,1351,1353,1355,1357,1360,1362],{"class":290,"line":1352},3,[288,1354,1338],{"class":298},[288,1356,1341],{"class":294},[288,1358,1359],{"class":403},"\"hello world\"",[288,1361,1341],{"class":294},[288,1363,1364],{"class":298},"endl;\n",[288,1366,1368],{"class":290,"line":1367},4,[288,1369,1370],{"class":357},"\u002F\u002F反斜杠\n",[288,1372,1374,1376,1378,1381,1383],{"class":290,"line":1373},5,[288,1375,1338],{"class":298},[288,1377,1341],{"class":294},[288,1379,1380],{"class":403},"\"\u002F\u002F\"",[288,1382,1341],{"class":294},[288,1384,1364],{"class":298},[288,1386,1388],{"class":290,"line":1387},6,[288,1389,1390],{"class":357},"\u002F\u002F水平制表符\n",[288,1392,1394,1396,1398,1401,1404,1407,1409,1412],{"class":290,"line":1393},7,[288,1395,1338],{"class":298},[288,1397,1341],{"class":294},[288,1399,1400],{"class":403},"\"aaaa",[288,1402,1403],{"class":347},"\\t",[288,1405,1406],{"class":403},"helloworld\"",[288,1408,1341],{"class":294},[288,1410,1411],{"class":298},"endl;",[288,1413,1414],{"class":357}," \u002F\u002F输出窗口时有对齐效果\n",[260,1416,1418],{"id":1417},"_135字符串型","1.3.5字符串型",[19,1420,1421,1422,1424],{},"char 变量名",[288,1423],{},"=\"字符串值\"",[280,1426,1428],{"className":282,"code":1427,"language":284,"meta":205,"style":205},"\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",[25,1429,1430,1435,1440,1445,1450,1464,1477,1482,1488,1500],{"__ignoreMap":205},[288,1431,1432],{"class":290,"line":291},[288,1433,1434],{"class":357},"\u002F\u002Fc风格字符串\n",[288,1436,1437],{"class":290,"line":206},[288,1438,1439],{"class":357},"\u002F\u002F注意事项：\n",[288,1441,1442],{"class":290,"line":1352},[288,1443,1444],{"class":357},"\u002F\u002F1.char字符串名[]\n",[288,1446,1447],{"class":290,"line":1367},[288,1448,1449],{"class":357},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[288,1451,1452,1454,1457,1459,1461],{"class":290,"line":1373},[288,1453,395],{"class":294},[288,1455,1456],{"class":298}," str[]",[288,1458,344],{"class":294},[288,1460,1359],{"class":403},[288,1462,1463],{"class":298},";\n",[288,1465,1466,1468,1470,1473,1475],{"class":290,"line":1387},[288,1467,1338],{"class":298},[288,1469,1341],{"class":294},[288,1471,1472],{"class":298},"str",[288,1474,1341],{"class":294},[288,1476,1364],{"class":298},[288,1478,1479],{"class":290,"line":1393},[288,1480,1481],{"class":357},"\u002F\u002Fc++风格字符串\n",[288,1483,1485],{"class":290,"line":1484},8,[288,1486,1487],{"class":357},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[288,1489,1491,1494,1496,1498],{"class":290,"line":1490},9,[288,1492,1493],{"class":298},"string str2",[288,1495,344],{"class":294},[288,1497,1359],{"class":403},[288,1499,1463],{"class":298},[288,1501,1503,1505,1507,1510,1512],{"class":290,"line":1502},10,[288,1504,1338],{"class":298},[288,1506,1341],{"class":294},[288,1508,1509],{"class":298},"str2",[288,1511,1341],{"class":294},[288,1513,1364],{"class":298},[260,1515,1517],{"id":1516},"_136布尔类型bool","1.3.6布尔类型bool",[280,1519,1521],{"className":282,"code":1520,"language":284,"meta":205,"style":205},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[25,1522,1523,1538],{"__ignoreMap":205},[288,1524,1525,1528,1531,1533,1536],{"class":290,"line":291},[288,1526,1527],{"class":294},"bool",[288,1529,1530],{"class":298}," flag",[288,1532,344],{"class":294},[288,1534,1535],{"class":347},"true",[288,1537,1463],{"class":298},[288,1539,1540,1543,1546,1549,1551,1553],{"class":290,"line":206},[288,1541,1542],{"class":298},"cout",[288,1544,1545],{"class":294},"\u003C\u003Csizeof",[288,1547,1548],{"class":298},"(flag)",[288,1550,1341],{"class":294},[288,1552,1411],{"class":298},[288,1554,1555],{"class":357}," \u002F\u002F查看布尔占内存空间\n",[14,1557,1559],{"id":1558},"_14键盘输入cin","1.4键盘输入cin",[280,1561,1563],{"className":282,"code":1562,"language":284,"meta":205,"style":205},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[25,1564,1565,1578,1595,1606],{"__ignoreMap":205},[288,1566,1567,1569,1572,1574,1576],{"class":290,"line":291},[288,1568,302],{"class":294},[288,1570,1571],{"class":298}," a",[288,1573,344],{"class":294},[288,1575,490],{"class":347},[288,1577,1463],{"class":298},[288,1579,1580,1582,1584,1587,1589,1591,1593],{"class":290,"line":206},[288,1581,1542],{"class":298},[288,1583,1341],{"class":294},[288,1585,1586],{"class":403},"\"请给整型变量a赋值\"",[288,1588,1341],{"class":294},[288,1590,104],{"class":298},[288,1592,1341],{"class":294},[288,1594,1364],{"class":298},[288,1596,1597,1600,1603],{"class":290,"line":1352},[288,1598,1599],{"class":298},"cin ",[288,1601,1602],{"class":294},">>",[288,1604,1605],{"class":298}," a;\n",[288,1607,1608,1610,1612,1615,1618,1620,1622],{"class":290,"line":1367},[288,1609,1338],{"class":298},[288,1611,1341],{"class":294},[288,1613,1614],{"class":403}," \"整型变量a=\"",[288,1616,1617],{"class":294}," \u003C\u003C",[288,1619,104],{"class":298},[288,1621,1341],{"class":294},[288,1623,1364],{"class":298},[14,1625,1627],{"id":1626},"_15运算符","1.5运算符",[260,1629,1631],{"id":1630},"_151算术运算符","1.5.1算术运算符",[19,1633,1634,1637],{},[200,1635],{"alt":205,"src":1636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[243,1639,1640,1643,1646],{},[246,1641,1642],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[246,1644,1645],{},"两个小数不可以做取模运算",[246,1647,1648],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[260,1650,1652],{"id":1651},"_152赋值运算符","1.5.2赋值运算符",[19,1654,1655],{},[200,1656],{"alt":205,"src":1657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[260,1659,1661],{"id":1660},"_153比较运算符","1.5.3比较运算符",[19,1663,1664],{},[200,1665],{"alt":205,"src":1666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[260,1668,1670],{"id":1669},"_154逻辑运算符","1.5.4逻辑运算符",[19,1672,1673],{},[200,1674],{"alt":205,"src":1675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1677,1679],{"id":1678},"_16程序流程结构","1.6程序流程结构",[260,1681,1683],{"id":1682},"_161选择结构","1.6.1选择结构",[243,1685,1686],{},[246,1687,1688],{},"if语句\n单行、多行、多条件if语句",[280,1690,1692],{"className":282,"code":1691,"language":284,"meta":205,"style":205},"\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",[25,1693,1694,1699,1714,1719,1733,1738,1743,1752,1765,1769,1782,1787,1793,1798,1812,1817,1823,1844,1849,1863,1868,1897,1902,1919,1924,1929,1934,1948,1953],{"__ignoreMap":205},[288,1695,1696],{"class":290,"line":291},[288,1697,1698],{"class":357},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[288,1700,1701,1704,1707,1709,1712],{"class":290,"line":206},[288,1702,1703],{"class":294},"if",[288,1705,1706],{"class":298},"(score",[288,1708,1257],{"class":294},[288,1710,1711],{"class":347},"600",[288,1713,305],{"class":298},[288,1715,1716],{"class":290,"line":1352},[288,1717,1718],{"class":298},"{\n",[288,1720,1721,1724,1726,1729,1731],{"class":290,"line":1367},[288,1722,1723],{"class":298},"    cout",[288,1725,1341],{"class":294},[288,1727,1728],{"class":403},"'这是单行if语句'",[288,1730,1341],{"class":294},[288,1732,1364],{"class":298},[288,1734,1735],{"class":290,"line":1373},[288,1736,1737],{"class":298},"}\n",[288,1739,1740],{"class":290,"line":1387},[288,1741,1742],{"class":357},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[288,1744,1745,1747,1749],{"class":290,"line":1393},[288,1746,1599],{"class":298},[288,1748,1602],{"class":294},[288,1750,1751],{"class":298}," score\n",[288,1753,1754,1756,1758,1761,1763],{"class":290,"line":1484},[288,1755,1703],{"class":294},[288,1757,1706],{"class":298},[288,1759,1760],{"class":294},"\u003C=",[288,1762,1711],{"class":347},[288,1764,305],{"class":298},[288,1766,1767],{"class":290,"line":1490},[288,1768,1718],{"class":298},[288,1770,1771,1773,1775,1778,1780],{"class":290,"line":1502},[288,1772,1723],{"class":298},[288,1774,1602],{"class":294},[288,1776,1777],{"class":403},"\"小于等于600\"",[288,1779,1341],{"class":294},[288,1781,1364],{"class":298},[288,1783,1785],{"class":290,"line":1784},11,[288,1786,1737],{"class":298},[288,1788,1790],{"class":290,"line":1789},12,[288,1791,1792],{"class":294},"else\n",[288,1794,1796],{"class":290,"line":1795},13,[288,1797,1718],{"class":298},[288,1799,1801,1803,1805,1808,1810],{"class":290,"line":1800},14,[288,1802,1723],{"class":298},[288,1804,1602],{"class":294},[288,1806,1807],{"class":403},"\"大于600\"",[288,1809,1602],{"class":294},[288,1811,1364],{"class":298},[288,1813,1815],{"class":290,"line":1814},15,[288,1816,1737],{"class":298},[288,1818,1820],{"class":290,"line":1819},16,[288,1821,1822],{"class":357},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[288,1824,1826,1828,1831,1833,1835,1838,1840,1842],{"class":290,"line":1825},17,[288,1827,1703],{"class":294},[288,1829,1830],{"class":298}," (",[288,1832,490],{"class":347},[288,1834,1207],{"class":294},[288,1836,1837],{"class":298},"num",[288,1839,1207],{"class":294},[288,1841,608],{"class":347},[288,1843,305],{"class":298},[288,1845,1847],{"class":290,"line":1846},18,[288,1848,1718],{"class":298},[288,1850,1852,1854,1856,1859,1861],{"class":290,"line":1851},19,[288,1853,1723],{"class":298},[288,1855,1341],{"class":294},[288,1857,1858],{"class":403},"\"小于100\"",[288,1860,1341],{"class":294},[288,1862,1364],{"class":298},[288,1864,1866],{"class":290,"line":1865},20,[288,1867,1737],{"class":298},[288,1869,1871,1874,1877,1880,1883,1885,1888,1890,1892,1895],{"class":290,"line":1870},21,[288,1872,1873],{"class":294},"else",[288,1875,1876],{"class":294}," if",[288,1878,1879],{"class":298}," (nmu",[288,1881,1882],{"class":294},">=",[288,1884,608],{"class":347},[288,1886,1887],{"class":294},"&&",[288,1889,1837],{"class":298},[288,1891,1207],{"class":294},[288,1893,1894],{"class":347},"200",[288,1896,305],{"class":298},[288,1898,1900],{"class":290,"line":1899},22,[288,1901,1718],{"class":298},[288,1903,1905,1907,1909,1912,1914,1916],{"class":290,"line":1904},23,[288,1906,1723],{"class":298},[288,1908,1341],{"class":294},[288,1910,1911],{"class":403},"\"不小于100且小于200\"",[288,1913,1341],{"class":294},[288,1915,1411],{"class":298},[288,1917,1918],{"class":357}," \u002F\u002F可以无限else if,python中是elif：\n",[288,1920,1922],{"class":290,"line":1921},24,[288,1923,1737],{"class":298},[288,1925,1927],{"class":290,"line":1926},25,[288,1928,1792],{"class":294},[288,1930,1932],{"class":290,"line":1931},26,[288,1933,1718],{"class":298},[288,1935,1937,1939,1941,1944,1946],{"class":290,"line":1936},27,[288,1938,1723],{"class":298},[288,1940,1341],{"class":294},[288,1942,1943],{"class":403},"\"不小于200\"",[288,1945,1341],{"class":294},[288,1947,1364],{"class":298},[288,1949,1951],{"class":290,"line":1950},28,[288,1952,1737],{"class":298},[288,1954,1956],{"class":290,"line":1955},29,[288,1957,1958],{"class":357},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[243,1960,1961],{"start":206},[246,1962,1963],{},"三目运算符",[280,1965,1967],{"className":282,"code":1966,"language":284,"meta":205,"style":205},"\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",[25,1968,1969,1974,1979,2005,2027,2044,2049,2072,2087],{"__ignoreMap":205},[288,1970,1971],{"class":290,"line":291},[288,1972,1973],{"class":357},"\u002F\u002F创建三个变量a,b,c\n",[288,1975,1976],{"class":290,"line":206},[288,1977,1978],{"class":357},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[288,1980,1981,1983,1985,1987,1989,1992,1994,1996,1999,2001,2003],{"class":290,"line":1352},[288,1982,302],{"class":294},[288,1984,1571],{"class":298},[288,1986,344],{"class":294},[288,1988,997],{"class":347},[288,1990,1991],{"class":298},",b",[288,1993,344],{"class":294},[288,1995,743],{"class":347},[288,1997,1998],{"class":298},",c",[288,2000,344],{"class":294},[288,2002,490],{"class":347},[288,2004,1463],{"class":298},[288,2006,2007,2009,2011,2014,2016,2018,2020,2022,2024],{"class":290,"line":1367},[288,2008,585],{"class":298},[288,2010,344],{"class":294},[288,2012,2013],{"class":298},"(a",[288,2015,1257],{"class":294},[288,2017,560],{"class":298},[288,2019,1283],{"class":294},[288,2021,104],{"class":298},[288,2023,1156],{"class":294},[288,2025,2026],{"class":298},"b)\n",[288,2028,2029,2031,2033,2036,2038,2040,2042],{"class":290,"line":1373},[288,2030,1542],{"class":298},[288,2032,1341],{"class":294},[288,2034,2035],{"class":403},"\"c=\"",[288,2037,1341],{"class":294},[288,2039,585],{"class":298},[288,2041,1341],{"class":294},[288,2043,1364],{"class":298},[288,2045,2046],{"class":290,"line":1387},[288,2047,2048],{"class":357},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[288,2050,2051,2053,2055,2057,2059,2061,2063,2066,2068,2070],{"class":290,"line":1393},[288,2052,2013],{"class":298},[288,2054,1257],{"class":294},[288,2056,560],{"class":298},[288,2058,1283],{"class":294},[288,2060,104],{"class":298},[288,2062,1156],{"class":294},[288,2064,2065],{"class":298},"b)",[288,2067,344],{"class":294},[288,2069,608],{"class":347},[288,2071,1463],{"class":298},[288,2073,2074,2076,2078,2080,2082,2084],{"class":290,"line":1484},[288,2075,1542],{"class":298},[288,2077,1341],{"class":294},[288,2079,104],{"class":298},[288,2081,1341],{"class":294},[288,2083,1411],{"class":298},[288,2085,2086],{"class":357}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[288,2088,2089,2091,2093,2095,2097,2099],{"class":290,"line":1490},[288,2090,1542],{"class":298},[288,2092,1341],{"class":294},[288,2094,560],{"class":298},[288,2096,1341],{"class":294},[288,2098,1411],{"class":298},[288,2100,2101],{"class":357}," \u002F\u002F10   a>b,b还是原值\n",[243,2103,2104],{"start":1352},[246,2105,2106],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[280,2108,2110],{"className":282,"code":2109,"language":284,"meta":205,"style":205},"\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",[25,2111,2112,2117,2125,2139,2149,2153,2167,2180,2190,2198,2203,2228,2249,2271,2292,2314,2335,2355,2360],{"__ignoreMap":205},[288,2113,2114],{"class":290,"line":291},[288,2115,2116],{"class":357},"\u002F\u002F案例-电影打分\n",[288,2118,2119,2122],{"class":290,"line":206},[288,2120,2121],{"class":294},"#include",[288,2123,2124],{"class":403},"\u003Ciostream>\n",[288,2126,2127,2130,2133,2137],{"class":290,"line":1352},[288,2128,2129],{"class":294},"using",[288,2131,2132],{"class":294}," namespace",[288,2134,2136],{"class":2135},"sScJk"," std",[288,2138,1463],{"class":298},[288,2140,2141,2143,2146],{"class":290,"line":1367},[288,2142,302],{"class":294},[288,2144,2145],{"class":2135}," main",[288,2147,2148],{"class":298},"()\n",[288,2150,2151],{"class":290,"line":1373},[288,2152,1718],{"class":298},[288,2154,2155,2158,2161,2163,2165],{"class":290,"line":1387},[288,2156,2157],{"class":294},"    int",[288,2159,2160],{"class":298}," score",[288,2162,344],{"class":294},[288,2164,490],{"class":347},[288,2166,1463],{"class":298},[288,2168,2169,2171,2173,2176,2178],{"class":290,"line":1393},[288,2170,1723],{"class":298},[288,2172,1341],{"class":294},[288,2174,2175],{"class":403},"\"电影打分：\"",[288,2177,1341],{"class":294},[288,2179,1364],{"class":298},[288,2181,2182,2185,2187],{"class":290,"line":1484},[288,2183,2184],{"class":298},"    cin",[288,2186,1602],{"class":294},[288,2188,2189],{"class":298},"score;\n",[288,2191,2192,2195],{"class":290,"line":1490},[288,2193,2194],{"class":294},"    switch",[288,2196,2197],{"class":298},"(score)\n",[288,2199,2200],{"class":290,"line":1502},[288,2201,2202],{"class":298},"    {\n",[288,2204,2205,2208,2211,2214,2216,2219,2221,2223,2226],{"class":290,"line":1784},[288,2206,2207],{"class":294},"        case",[288,2209,2210],{"class":347}," 10",[288,2212,2213],{"class":298},":cout",[288,2215,1341],{"class":294},[288,2217,2218],{"class":403},"\"经典\"",[288,2220,1341],{"class":294},[288,2222,1411],{"class":298},[288,2224,2225],{"class":294},"break",[288,2227,1463],{"class":298},[288,2229,2230,2232,2235,2237,2239,2241,2243,2245,2247],{"class":290,"line":1789},[288,2231,2207],{"class":294},[288,2233,2234],{"class":347}," 9",[288,2236,2213],{"class":298},[288,2238,1341],{"class":294},[288,2240,2218],{"class":403},[288,2242,1341],{"class":294},[288,2244,1411],{"class":298},[288,2246,2225],{"class":294},[288,2248,1463],{"class":298},[288,2250,2251,2253,2256,2258,2260,2263,2265,2267,2269],{"class":290,"line":1795},[288,2252,2207],{"class":294},[288,2254,2255],{"class":347}," 8",[288,2257,2213],{"class":298},[288,2259,1341],{"class":294},[288,2261,2262],{"class":403},"\"非常好\"",[288,2264,1341],{"class":294},[288,2266,1411],{"class":298},[288,2268,2225],{"class":294},[288,2270,1463],{"class":298},[288,2272,2273,2275,2278,2280,2282,2284,2286,2288,2290],{"class":290,"line":1800},[288,2274,2207],{"class":294},[288,2276,2277],{"class":347}," 7",[288,2279,2213],{"class":298},[288,2281,1341],{"class":294},[288,2283,2262],{"class":403},[288,2285,1341],{"class":294},[288,2287,1411],{"class":298},[288,2289,2225],{"class":294},[288,2291,1463],{"class":298},[288,2293,2294,2296,2299,2301,2303,2306,2308,2310,2312],{"class":290,"line":1814},[288,2295,2207],{"class":294},[288,2297,2298],{"class":347}," 6",[288,2300,2213],{"class":298},[288,2302,1341],{"class":294},[288,2304,2305],{"class":403},"\"一般\"",[288,2307,1341],{"class":294},[288,2309,1411],{"class":298},[288,2311,2225],{"class":294},[288,2313,1463],{"class":298},[288,2315,2316,2318,2321,2323,2325,2327,2329,2331,2333],{"class":290,"line":1819},[288,2317,2207],{"class":294},[288,2319,2320],{"class":347}," 5",[288,2322,2213],{"class":298},[288,2324,1341],{"class":294},[288,2326,2305],{"class":403},[288,2328,1341],{"class":294},[288,2330,1411],{"class":298},[288,2332,2225],{"class":294},[288,2334,1463],{"class":298},[288,2336,2337,2340,2342,2344,2347,2349,2351,2353],{"class":290,"line":1825},[288,2338,2339],{"class":294},"        default",[288,2341,2213],{"class":298},[288,2343,1341],{"class":294},[288,2345,2346],{"class":403},"\"烂片\"",[288,2348,1341],{"class":294},[288,2350,1411],{"class":298},[288,2352,2225],{"class":294},[288,2354,1463],{"class":298},[288,2356,2357],{"class":290,"line":1846},[288,2358,2359],{"class":298},"    }\n",[288,2361,2362],{"class":290,"line":1851},[288,2363,1737],{"class":298},[19,2365,2366],{},"if和switch区别：",[1304,2368,2369,2372],{},[246,2370,2371],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[246,2373,2374],{},"switch优点：结构清晰，执行效率高",[260,2376,2378],{"id":2377},"_162循环结构","1.6.2循环结构",[243,2380,2381],{},[246,2382,2383],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[280,2385,2387],{"className":282,"code":2386,"language":284,"meta":205,"style":205},"\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",[25,2388,2389,2394,2402,2406,2419,2433,2437,2457,2467,2471,2483],{"__ignoreMap":205},[288,2390,2391],{"class":290,"line":291},[288,2392,2393],{"class":357},"\u002F\u002F打印0-9数字\n",[288,2395,2396,2398,2400],{"class":290,"line":206},[288,2397,302],{"class":294},[288,2399,2145],{"class":2135},[288,2401,2148],{"class":298},[288,2403,2404],{"class":290,"line":1352},[288,2405,1718],{"class":298},[288,2407,2408,2410,2413,2415,2417],{"class":290,"line":1367},[288,2409,2157],{"class":294},[288,2411,2412],{"class":298}," num",[288,2414,344],{"class":294},[288,2416,490],{"class":347},[288,2418,1463],{"class":298},[288,2420,2421,2424,2427,2429,2431],{"class":290,"line":1373},[288,2422,2423],{"class":294},"    while",[288,2425,2426],{"class":298},"(num",[288,2428,1207],{"class":294},[288,2430,743],{"class":347},[288,2432,305],{"class":298},[288,2434,2435],{"class":290,"line":1387},[288,2436,2202],{"class":298},[288,2438,2439,2442,2445,2447,2449,2451,2454],{"class":290,"line":1393},[288,2440,2441],{"class":2135},"       std",[288,2443,2444],{"class":298},"::cout",[288,2446,1341],{"class":294},[288,2448,1837],{"class":298},[288,2450,1341],{"class":294},[288,2452,2453],{"class":2135},"std",[288,2455,2456],{"class":298},"::endl;\n",[288,2458,2459,2462,2465],{"class":290,"line":1484},[288,2460,2461],{"class":298},"        num",[288,2463,2464],{"class":294},"++",[288,2466,1463],{"class":298},[288,2468,2469],{"class":290,"line":1490},[288,2470,2359],{"class":298},[288,2472,2473,2476,2478,2481],{"class":290,"line":1502},[288,2474,2475],{"class":2135},"    system",[288,2477,299],{"class":298},[288,2479,2480],{"class":403},"\"pause\"",[288,2482,305],{"class":298},[288,2484,2485],{"class":290,"line":1784},[288,2486,1737],{"class":298},[19,2488,2489],{},"注意：写好循环条件，避免死循环情况",[280,2491,2493],{"className":282,"code":2492,"language":284,"meta":205,"style":205},"\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",[25,2494,2495,2500,2507,2514,2524,2532,2536,2541,2568,2573,2578,2586,2613,2618,2623,2636,2646,2650,2660,2665,2678,2683,2697,2702,2717,2721,2734,2738,2743,2747,2761,2769,2774,2780,2786,2791],{"__ignoreMap":205},[288,2496,2497],{"class":290,"line":291},[288,2498,2499],{"class":357},"\u002F\u002F循环结构-猜数字\n",[288,2501,2502,2504],{"class":290,"line":206},[288,2503,2121],{"class":294},[288,2505,2506],{"class":403}," \u003Ciostream>\n",[288,2508,2509,2511],{"class":290,"line":1352},[288,2510,2121],{"class":294},[288,2512,2513],{"class":403}," \u003Cctime>\n",[288,2515,2516,2518,2520,2522],{"class":290,"line":1367},[288,2517,2129],{"class":294},[288,2519,2132],{"class":294},[288,2521,2136],{"class":2135},[288,2523,1463],{"class":298},[288,2525,2526,2528,2530],{"class":290,"line":1373},[288,2527,302],{"class":294},[288,2529,2145],{"class":2135},[288,2531,2148],{"class":298},[288,2533,2534],{"class":290,"line":1387},[288,2535,1718],{"class":298},[288,2537,2538],{"class":290,"line":1393},[288,2539,2540],{"class":357},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[288,2542,2543,2546,2549,2552,2555,2557,2560,2562,2565],{"class":290,"line":1484},[288,2544,2545],{"class":2135},"    srand",[288,2547,2548],{"class":298},"((",[288,2550,2551],{"class":294},"unsigned",[288,2553,2554],{"class":294}," int",[288,2556,726],{"class":298},[288,2558,2559],{"class":2135},"time",[288,2561,299],{"class":298},[288,2563,2564],{"class":347},"NULL",[288,2566,2567],{"class":298},"));\n",[288,2569,2570],{"class":290,"line":1490},[288,2571,2572],{"emptyLinePlaceholder":217},"\n",[288,2574,2575],{"class":290,"line":1502},[288,2576,2577],{"class":357},"    \u002F\u002F1.系统生成随机数\n",[288,2579,2580,2583],{"class":290,"line":1784},[288,2581,2582],{"class":357},"    \u002F\u002Frand()%100",[288,2584,2585],{"class":357}," \u002F\u002F生成0-99的随机数\n",[288,2587,2588,2590,2592,2594,2597,2600,2602,2604,2606,2608,2610],{"class":290,"line":1789},[288,2589,2157],{"class":294},[288,2591,2412],{"class":298},[288,2593,344],{"class":294},[288,2595,2596],{"class":2135},"rand",[288,2598,2599],{"class":298},"()",[288,2601,625],{"class":294},[288,2603,608],{"class":347},[288,2605,778],{"class":294},[288,2607,516],{"class":347},[288,2609,354],{"class":298},[288,2611,2612],{"class":357}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[288,2614,2615],{"class":290,"line":1795},[288,2616,2617],{"class":357},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[288,2619,2620],{"class":290,"line":1800},[288,2621,2622],{"class":357},"    \u002F\u002F2.玩家猜测\n",[288,2624,2625,2627,2630,2632,2634],{"class":290,"line":1814},[288,2626,2157],{"class":294},[288,2628,2629],{"class":298}," val",[288,2631,344],{"class":294},[288,2633,490],{"class":347},[288,2635,1463],{"class":298},[288,2637,2638,2640,2642,2644],{"class":290,"line":1819},[288,2639,2423],{"class":294},[288,2641,1830],{"class":298},[288,2643,516],{"class":347},[288,2645,305],{"class":298},[288,2647,2648],{"class":290,"line":1825},[288,2649,2202],{"class":298},[288,2651,2652,2655,2657],{"class":290,"line":1846},[288,2653,2654],{"class":298},"        cin",[288,2656,1602],{"class":294},[288,2658,2659],{"class":298},"val;\n",[288,2661,2662],{"class":290,"line":1851},[288,2663,2664],{"class":357},"        \u002F\u002F3.判断玩家猜测\n",[288,2666,2667,2670,2673,2675],{"class":290,"line":1865},[288,2668,2669],{"class":294},"        if",[288,2671,2672],{"class":298},"(val",[288,2674,1207],{"class":294},[288,2676,2677],{"class":298},"num) \n",[288,2679,2680],{"class":290,"line":1870},[288,2681,2682],{"class":298},"        {\n",[288,2684,2685,2688,2690,2693,2695],{"class":290,"line":1899},[288,2686,2687],{"class":298},"            cout",[288,2689,1341],{"class":294},[288,2691,2692],{"class":403},"\"猜小了！\"",[288,2694,1341],{"class":294},[288,2696,1364],{"class":298},[288,2698,2699],{"class":290,"line":1904},[288,2700,2701],{"class":298},"        }\n",[288,2703,2704,2707,2709,2712,2714],{"class":290,"line":1921},[288,2705,2706],{"class":294},"        else",[288,2708,1876],{"class":294},[288,2710,2711],{"class":298}," (val",[288,2713,1257],{"class":294},[288,2715,2716],{"class":298},"num)\n",[288,2718,2719],{"class":290,"line":1926},[288,2720,2682],{"class":298},[288,2722,2723,2725,2727,2730,2732],{"class":290,"line":1931},[288,2724,2687],{"class":298},[288,2726,1341],{"class":294},[288,2728,2729],{"class":403},"\"猜大了！\"",[288,2731,1341],{"class":294},[288,2733,1364],{"class":298},[288,2735,2736],{"class":290,"line":1936},[288,2737,2701],{"class":298},[288,2739,2740],{"class":290,"line":1950},[288,2741,2742],{"class":294},"        else\n",[288,2744,2745],{"class":290,"line":1955},[288,2746,2682],{"class":298},[288,2748,2750,2752,2754,2757,2759],{"class":290,"line":2749},30,[288,2751,2687],{"class":298},[288,2753,1341],{"class":294},[288,2755,2756],{"class":403},"\"猜对了！\"",[288,2758,1341],{"class":294},[288,2760,1364],{"class":298},[288,2762,2764,2767],{"class":290,"line":2763},31,[288,2765,2766],{"class":294},"            break",[288,2768,1463],{"class":298},[288,2770,2772],{"class":290,"line":2771},32,[288,2773,2701],{"class":298},[288,2775,2777],{"class":290,"line":2776},33,[288,2778,2779],{"class":357},"        \u002F\u002F猜对 退出游戏\n",[288,2781,2783],{"class":290,"line":2782},34,[288,2784,2785],{"class":357},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[288,2787,2789],{"class":290,"line":2788},35,[288,2790,2359],{"class":298},[288,2792,2794],{"class":290,"line":2793},36,[288,2795,1737],{"class":298},[243,2797,2798],{"start":206},[246,2799,2800,2801,2804],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[448,2802,2803],{},"do...while会先执行一次循环语句","，在判断循环语句",[280,2806,2808],{"className":282,"code":2807,"language":284,"meta":205,"style":205},"\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",[25,2809,2810,2815,2823,2827,2839,2847,2851,2868,2875,2879,2892,2902],{"__ignoreMap":205},[288,2811,2812],{"class":290,"line":291},[288,2813,2814],{"class":357},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[288,2816,2817,2819,2821],{"class":290,"line":206},[288,2818,302],{"class":294},[288,2820,2145],{"class":2135},[288,2822,2148],{"class":298},[288,2824,2825],{"class":290,"line":1352},[288,2826,1718],{"class":298},[288,2828,2829,2831,2833,2835,2837],{"class":290,"line":1367},[288,2830,2157],{"class":294},[288,2832,2412],{"class":298},[288,2834,344],{"class":294},[288,2836,490],{"class":347},[288,2838,1463],{"class":298},[288,2840,2841,2844],{"class":290,"line":1373},[288,2842,2843],{"class":294},"    do",[288,2845,2846],{"class":298}," \n",[288,2848,2849],{"class":290,"line":1387},[288,2850,2202],{"class":298},[288,2852,2853,2856,2858,2860,2862,2864,2866],{"class":290,"line":1393},[288,2854,2855],{"class":2135},"        std",[288,2857,2444],{"class":298},[288,2859,1341],{"class":294},[288,2861,1837],{"class":298},[288,2863,1341],{"class":294},[288,2865,2453],{"class":2135},[288,2867,2456],{"class":298},[288,2869,2870,2872],{"class":290,"line":1484},[288,2871,2461],{"class":298},[288,2873,2874],{"class":294},"++\n",[288,2876,2877],{"class":290,"line":1490},[288,2878,2359],{"class":298},[288,2880,2881,2883,2885,2887,2889],{"class":290,"line":1502},[288,2882,2423],{"class":294},[288,2884,2426],{"class":298},[288,2886,1207],{"class":294},[288,2888,743],{"class":347},[288,2890,2891],{"class":298},");\n",[288,2893,2894,2896,2898,2900],{"class":290,"line":1784},[288,2895,2475],{"class":2135},[288,2897,299],{"class":298},[288,2899,2480],{"class":403},[288,2901,2891],{"class":298},[288,2903,2904],{"class":290,"line":1789},[288,2905,1737],{"class":298},[19,2907,2908],{},"案例-水仙花数",[19,2910,2911],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2913,2914],{},"例如：1^3+5^3+3^3=153",[19,2916,2917],{},"请用do...while语句，求出所有3位数的水仙花数",[280,2919,2921],{"className":282,"code":2920,"language":284,"meta":205,"style":205},"#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",[25,2922,2923,2929,2939,2947,2951,2956,2968,2974,2978,2983,2999,3015,3031,3046,3065,3080,3128,3132,3144,3148,3156,3160,3174],{"__ignoreMap":205},[288,2924,2925,2927],{"class":290,"line":291},[288,2926,2121],{"class":294},[288,2928,2506],{"class":403},[288,2930,2931,2933,2935,2937],{"class":290,"line":206},[288,2932,2129],{"class":294},[288,2934,2132],{"class":294},[288,2936,2136],{"class":2135},[288,2938,1463],{"class":298},[288,2940,2941,2943,2945],{"class":290,"line":1352},[288,2942,302],{"class":294},[288,2944,2145],{"class":2135},[288,2946,2148],{"class":298},[288,2948,2949],{"class":290,"line":1367},[288,2950,1718],{"class":298},[288,2952,2953],{"class":290,"line":1373},[288,2954,2955],{"class":357},"    \u002F\u002F1.先打印所有三位数字\n",[288,2957,2958,2960,2962,2964,2966],{"class":290,"line":1387},[288,2959,2157],{"class":294},[288,2961,2412],{"class":298},[288,2963,344],{"class":294},[288,2965,608],{"class":347},[288,2967,1463],{"class":298},[288,2969,2970,2972],{"class":290,"line":1393},[288,2971,2843],{"class":294},[288,2973,2846],{"class":298},[288,2975,2976],{"class":290,"line":1484},[288,2977,2202],{"class":298},[288,2979,2980],{"class":290,"line":1490},[288,2981,2982],{"class":357},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[288,2984,2985,2988,2990,2992,2994,2996],{"class":290,"line":1502},[288,2986,2987],{"class":294},"        int",[288,2989,1571],{"class":298},[288,2991,344],{"class":294},[288,2993,490],{"class":347},[288,2995,354],{"class":298},[288,2997,2998],{"class":357}," \u002F\u002F个位\n",[288,3000,3001,3003,3006,3008,3010,3012],{"class":290,"line":1784},[288,3002,2987],{"class":294},[288,3004,3005],{"class":298}," b",[288,3007,344],{"class":294},[288,3009,490],{"class":347},[288,3011,354],{"class":298},[288,3013,3014],{"class":357}," \u002F\u002F十位\n",[288,3016,3017,3019,3022,3024,3026,3028],{"class":290,"line":1789},[288,3018,2987],{"class":294},[288,3020,3021],{"class":298}," c",[288,3023,344],{"class":294},[288,3025,490],{"class":347},[288,3027,354],{"class":298},[288,3029,3030],{"class":357}," \u002F\u002F百位\n",[288,3032,3033,3036,3038,3040,3042,3044],{"class":290,"line":1795},[288,3034,3035],{"class":298},"        a",[288,3037,344],{"class":294},[288,3039,1837],{"class":298},[288,3041,625],{"class":294},[288,3043,743],{"class":347},[288,3045,1463],{"class":298},[288,3047,3048,3051,3053,3055,3057,3059,3061,3063],{"class":290,"line":1800},[288,3049,3050],{"class":298},"        b",[288,3052,344],{"class":294},[288,3054,1837],{"class":298},[288,3056,881],{"class":294},[288,3058,743],{"class":347},[288,3060,625],{"class":294},[288,3062,743],{"class":347},[288,3064,1463],{"class":298},[288,3066,3067,3070,3072,3074,3076,3078],{"class":290,"line":1814},[288,3068,3069],{"class":298},"        c",[288,3071,344],{"class":294},[288,3073,1837],{"class":298},[288,3075,881],{"class":294},[288,3077,608],{"class":347},[288,3079,1463],{"class":298},[288,3081,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3119,3122,3125],{"class":290,"line":1819},[288,3083,2669],{"class":294},[288,3085,2013],{"class":298},[288,3087,752],{"class":294},[288,3089,104],{"class":298},[288,3091,752],{"class":294},[288,3093,104],{"class":298},[288,3095,778],{"class":294},[288,3097,560],{"class":298},[288,3099,752],{"class":294},[288,3101,560],{"class":298},[288,3103,752],{"class":294},[288,3105,560],{"class":298},[288,3107,778],{"class":294},[288,3109,585],{"class":298},[288,3111,752],{"class":294},[288,3113,585],{"class":298},[288,3115,752],{"class":294},[288,3117,3118],{"class":298},"c ",[288,3120,3121],{"class":294},"==",[288,3123,3124],{"class":298}," num)",[288,3126,3127],{"class":357}," \u002F\u002F如果是水仙花数，才打印\n",[288,3129,3130],{"class":290,"line":1825},[288,3131,2682],{"class":298},[288,3133,3134,3136,3138,3140,3142],{"class":290,"line":1846},[288,3135,2687],{"class":298},[288,3137,1341],{"class":294},[288,3139,1837],{"class":298},[288,3141,1341],{"class":294},[288,3143,1364],{"class":298},[288,3145,3146],{"class":290,"line":1851},[288,3147,2701],{"class":298},[288,3149,3150,3152,3154],{"class":290,"line":1865},[288,3151,2461],{"class":298},[288,3153,2464],{"class":294},[288,3155,1463],{"class":298},[288,3157,3158],{"class":290,"line":1870},[288,3159,2359],{"class":298},[288,3161,3162,3164,3167,3169,3172],{"class":290,"line":1899},[288,3163,2423],{"class":294},[288,3165,3166],{"class":298}," (num ",[288,3168,1207],{"class":294},[288,3170,3171],{"class":347}," 1000",[288,3173,2891],{"class":298},[288,3175,3176],{"class":290,"line":1904},[288,3177,1737],{"class":298},[243,3179,3180],{"start":1352},[246,3181,3182],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[280,3184,3186],{"className":282,"code":3185,"language":284,"meta":205,"style":205},"\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",[25,3187,3188,3193,3222,3226,3238,3242,3247,3258,3265,3269,3283,3287,3294,3298,3310,3319],{"__ignoreMap":205},[288,3189,3190],{"class":290,"line":291},[288,3191,3192],{"class":357},"\u002F\u002F从数字0-9打印\n",[288,3194,3195,3198,3200,3202,3205,3207,3209,3212,3214,3216,3218,3220],{"class":290,"line":206},[288,3196,3197],{"class":294},"for",[288,3199,299],{"class":298},[288,3201,302],{"class":294},[288,3203,3204],{"class":298}," i",[288,3206,344],{"class":294},[288,3208,490],{"class":347},[288,3210,3211],{"class":298},";i",[288,3213,1207],{"class":294},[288,3215,743],{"class":347},[288,3217,3211],{"class":298},[288,3219,2464],{"class":294},[288,3221,305],{"class":298},[288,3223,3224],{"class":290,"line":1352},[288,3225,1718],{"class":298},[288,3227,3228,3230,3232,3234,3236],{"class":290,"line":1367},[288,3229,1723],{"class":298},[288,3231,1341],{"class":294},[288,3233,738],{"class":298},[288,3235,1341],{"class":294},[288,3237,1364],{"class":298},[288,3239,3240],{"class":290,"line":1373},[288,3241,1737],{"class":298},[288,3243,3244],{"class":290,"line":1387},[288,3245,3246],{"class":357},"\u002F\u002F上式可以进行拆分\n",[288,3248,3249,3251,3253,3255],{"class":290,"line":1393},[288,3250,302],{"class":294},[288,3252,3204],{"class":298},[288,3254,344],{"class":294},[288,3256,3257],{"class":347},"0\n",[288,3259,3260,3262],{"class":290,"line":1484},[288,3261,3197],{"class":294},[288,3263,3264],{"class":298},"(;;;)\n",[288,3266,3267],{"class":290,"line":1490},[288,3268,1718],{"class":298},[288,3270,3271,3274,3277,3279,3281],{"class":290,"line":1502},[288,3272,3273],{"class":294},"    if",[288,3275,3276],{"class":298},"(i",[288,3278,1882],{"class":294},[288,3280,743],{"class":347},[288,3282,305],{"class":298},[288,3284,3285],{"class":290,"line":1784},[288,3286,2202],{"class":298},[288,3288,3289,3292],{"class":290,"line":1789},[288,3290,3291],{"class":294},"        break",[288,3293,1463],{"class":298},[288,3295,3296],{"class":290,"line":1795},[288,3297,2359],{"class":298},[288,3299,3300,3302,3304,3306,3308],{"class":290,"line":1800},[288,3301,1723],{"class":298},[288,3303,1341],{"class":294},[288,3305,738],{"class":298},[288,3307,1341],{"class":294},[288,3309,1364],{"class":298},[288,3311,3312,3315,3317],{"class":290,"line":1814},[288,3313,3314],{"class":298},"    i",[288,3316,2464],{"class":294},[288,3318,1463],{"class":298},[288,3320,3321],{"class":290,"line":1819},[288,3322,1737],{"class":298},[19,3324,3325],{},"小练习",[280,3327,3329],{"className":282,"code":3328,"language":284,"meta":205,"style":205},"#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",[25,3330,3331,3337,3347,3355,3359,3364,3369,3397,3401,3406,3411,3452,3456,3469,3473,3477,3481,3493,3497,3501],{"__ignoreMap":205},[288,3332,3333,3335],{"class":290,"line":291},[288,3334,2121],{"class":294},[288,3336,2124],{"class":403},[288,3338,3339,3341,3343,3345],{"class":290,"line":206},[288,3340,2129],{"class":294},[288,3342,2132],{"class":294},[288,3344,2136],{"class":2135},[288,3346,1463],{"class":298},[288,3348,3349,3351,3353],{"class":290,"line":1352},[288,3350,302],{"class":294},[288,3352,2145],{"class":2135},[288,3354,2148],{"class":298},[288,3356,3357],{"class":290,"line":1367},[288,3358,1718],{"class":298},[288,3360,3361],{"class":290,"line":1373},[288,3362,3363],{"class":357},"    \u002F\u002F敲桌子案例\n",[288,3365,3366],{"class":290,"line":1387},[288,3367,3368],{"class":357},"    \u002F\u002F1.先输出1-100的数字\n",[288,3370,3371,3374,3376,3378,3380,3382,3384,3387,3389,3391,3393,3395],{"class":290,"line":1393},[288,3372,3373],{"class":294},"    for",[288,3375,299],{"class":298},[288,3377,302],{"class":294},[288,3379,3204],{"class":298},[288,3381,344],{"class":294},[288,3383,516],{"class":347},[288,3385,3386],{"class":298},"; i",[288,3388,1760],{"class":294},[288,3390,608],{"class":347},[288,3392,3386],{"class":298},[288,3394,2464],{"class":294},[288,3396,305],{"class":298},[288,3398,3399],{"class":290,"line":1484},[288,3400,2202],{"class":298},[288,3402,3403],{"class":290,"line":1490},[288,3404,3405],{"class":357},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[288,3407,3408],{"class":290,"line":1502},[288,3409,3410],{"class":357},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[288,3412,3413,3415,3417,3419,3421,3423,3425,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450],{"class":290,"line":1784},[288,3414,2669],{"class":294},[288,3416,3276],{"class":298},[288,3418,625],{"class":294},[288,3420,666],{"class":347},[288,3422,3121],{"class":294},[288,3424,490],{"class":347},[288,3426,3427],{"class":294}," ||",[288,3429,3204],{"class":298},[288,3431,625],{"class":294},[288,3433,743],{"class":347},[288,3435,3121],{"class":294},[288,3437,666],{"class":347},[288,3439,3427],{"class":294},[288,3441,3204],{"class":298},[288,3443,881],{"class":294},[288,3445,743],{"class":347},[288,3447,3121],{"class":294},[288,3449,666],{"class":347},[288,3451,305],{"class":298},[288,3453,3454],{"class":290,"line":1789},[288,3455,2682],{"class":298},[288,3457,3458,3460,3462,3465,3467],{"class":290,"line":1795},[288,3459,2687],{"class":298},[288,3461,1341],{"class":294},[288,3463,3464],{"class":403},"\"敲桌子\"",[288,3466,1341],{"class":294},[288,3468,1364],{"class":298},[288,3470,3471],{"class":290,"line":1800},[288,3472,2701],{"class":298},[288,3474,3475],{"class":290,"line":1814},[288,3476,2742],{"class":294},[288,3478,3479],{"class":290,"line":1819},[288,3480,2682],{"class":298},[288,3482,3483,3485,3487,3489,3491],{"class":290,"line":1825},[288,3484,2687],{"class":298},[288,3486,1341],{"class":294},[288,3488,738],{"class":298},[288,3490,1341],{"class":294},[288,3492,1364],{"class":298},[288,3494,3495],{"class":290,"line":1846},[288,3496,2701],{"class":298},[288,3498,3499],{"class":290,"line":1851},[288,3500,2359],{"class":298},[288,3502,3503],{"class":290,"line":1865},[288,3504,1737],{"class":298},[19,3506,3507],{},"嵌套实现星图",[280,3509,3511],{"className":282,"code":3510,"language":284,"meta":205,"style":205},"#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",[25,3512,3513,3519,3529,3537,3541,3567,3571,3600,3604,3615,3619,3628,3632],{"__ignoreMap":205},[288,3514,3515,3517],{"class":290,"line":291},[288,3516,2121],{"class":294},[288,3518,2124],{"class":403},[288,3520,3521,3523,3525,3527],{"class":290,"line":206},[288,3522,2129],{"class":294},[288,3524,2132],{"class":294},[288,3526,2136],{"class":2135},[288,3528,1463],{"class":298},[288,3530,3531,3533,3535],{"class":290,"line":1352},[288,3532,302],{"class":294},[288,3534,2145],{"class":2135},[288,3536,2148],{"class":298},[288,3538,3539],{"class":290,"line":1367},[288,3540,1718],{"class":298},[288,3542,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565],{"class":290,"line":1373},[288,3544,3373],{"class":294},[288,3546,1830],{"class":298},[288,3548,302],{"class":294},[288,3550,3204],{"class":298},[288,3552,344],{"class":294},[288,3554,490],{"class":347},[288,3556,3211],{"class":298},[288,3558,1207],{"class":294},[288,3560,743],{"class":347},[288,3562,3211],{"class":298},[288,3564,2464],{"class":294},[288,3566,305],{"class":298},[288,3568,3569],{"class":290,"line":1387},[288,3570,2202],{"class":298},[288,3572,3573,3576,3578,3580,3583,3585,3587,3590,3592,3594,3596,3598],{"class":290,"line":1393},[288,3574,3575],{"class":294},"        for",[288,3577,1830],{"class":298},[288,3579,302],{"class":294},[288,3581,3582],{"class":298}," j",[288,3584,344],{"class":294},[288,3586,490],{"class":347},[288,3588,3589],{"class":298},";j",[288,3591,1207],{"class":294},[288,3593,743],{"class":347},[288,3595,3589],{"class":298},[288,3597,2464],{"class":294},[288,3599,305],{"class":298},[288,3601,3602],{"class":290,"line":1484},[288,3603,2682],{"class":298},[288,3605,3606,3608,3610,3613],{"class":290,"line":1490},[288,3607,2687],{"class":298},[288,3609,1341],{"class":294},[288,3611,3612],{"class":403},"\"*\"",[288,3614,1463],{"class":298},[288,3616,3617],{"class":290,"line":1502},[288,3618,2701],{"class":298},[288,3620,3621,3624,3626],{"class":290,"line":1784},[288,3622,3623],{"class":298},"        cout",[288,3625,1341],{"class":294},[288,3627,1364],{"class":298},[288,3629,3630],{"class":290,"line":1789},[288,3631,2359],{"class":298},[288,3633,3634],{"class":290,"line":1795},[288,3635,1737],{"class":298},[19,3637,3638],{},"乘法口诀表",[280,3640,3642],{"className":282,"code":3641,"language":284,"meta":205,"style":205},"#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",[25,3643,3644,3650,3660,3668,3672,3698,3702,3727,3731,3771,3775,3783,3787],{"__ignoreMap":205},[288,3645,3646,3648],{"class":290,"line":291},[288,3647,2121],{"class":294},[288,3649,2506],{"class":403},[288,3651,3652,3654,3656,3658],{"class":290,"line":206},[288,3653,2129],{"class":294},[288,3655,2132],{"class":294},[288,3657,2136],{"class":2135},[288,3659,1463],{"class":298},[288,3661,3662,3664,3666],{"class":290,"line":1352},[288,3663,302],{"class":294},[288,3665,2145],{"class":2135},[288,3667,2148],{"class":298},[288,3669,3670],{"class":290,"line":1367},[288,3671,1718],{"class":298},[288,3673,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696],{"class":290,"line":1373},[288,3675,3373],{"class":294},[288,3677,299],{"class":298},[288,3679,302],{"class":294},[288,3681,3204],{"class":298},[288,3683,344],{"class":294},[288,3685,516],{"class":347},[288,3687,3211],{"class":298},[288,3689,1207],{"class":294},[288,3691,743],{"class":347},[288,3693,3211],{"class":298},[288,3695,2464],{"class":294},[288,3697,305],{"class":298},[288,3699,3700],{"class":290,"line":1387},[288,3701,2202],{"class":298},[288,3703,3704,3706,3708,3710,3712,3714,3716,3718,3720,3723,3725],{"class":290,"line":1393},[288,3705,3575],{"class":294},[288,3707,299],{"class":298},[288,3709,302],{"class":294},[288,3711,3582],{"class":298},[288,3713,344],{"class":294},[288,3715,516],{"class":347},[288,3717,3589],{"class":298},[288,3719,1760],{"class":294},[288,3721,3722],{"class":298},"i;j",[288,3724,2464],{"class":294},[288,3726,305],{"class":298},[288,3728,3729],{"class":290,"line":1484},[288,3730,2682],{"class":298},[288,3732,3733,3735,3737,3739,3741,3743,3745,3747,3749,3752,3754,3756,3758,3760,3762,3765,3767,3769],{"class":290,"line":1490},[288,3734,2687],{"class":298},[288,3736,1341],{"class":294},[288,3738,764],{"class":298},[288,3740,1341],{"class":294},[288,3742,3612],{"class":403},[288,3744,1341],{"class":294},[288,3746,738],{"class":298},[288,3748,1341],{"class":294},[288,3750,3751],{"class":403},"\"=\"",[288,3753,1341],{"class":294},[288,3755,738],{"class":298},[288,3757,752],{"class":294},[288,3759,764],{"class":298},[288,3761,1341],{"class":294},[288,3763,3764],{"class":403},"'",[288,3766,1403],{"class":347},[288,3768,3764],{"class":403},[288,3770,1463],{"class":298},[288,3772,3773],{"class":290,"line":1502},[288,3774,2701],{"class":298},[288,3776,3777,3779,3781],{"class":290,"line":1784},[288,3778,3623],{"class":298},[288,3780,1341],{"class":294},[288,3782,1364],{"class":298},[288,3784,3785],{"class":290,"line":1789},[288,3786,2359],{"class":298},[288,3788,3789],{"class":290,"line":1795},[288,3790,1737],{"class":298},[260,3792,3794],{"id":3793},"_163跳出语句","1.6.3跳出语句",[243,3796,3797],{},[246,3798,3799],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3801,3802],{},"break使用时机：",[1304,3804,3805,3808,3811],{},[246,3806,3807],{},"出现在switch条件语句中，作用是终止case并跳出switch",[246,3809,3810],{},"出现在循环结构中，作用是跳出当前的循环结构",[246,3812,3813],{},"出现在嵌套循环中，跳出最近的内层循环语句",[243,3815,3816,3819],{"start":206},[246,3817,3818],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[246,3820,3821],{},"goto语句\n语法：goto 标记;",[19,3823,3824],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[280,3826,3828],{"className":282,"code":3827,"language":284,"meta":205,"style":205},"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",[25,3829,3830,3838,3842,3855,3865,3878,3891,3904,3912,3928],{"__ignoreMap":205},[288,3831,3832,3834,3836],{"class":290,"line":291},[288,3833,302],{"class":294},[288,3835,2145],{"class":2135},[288,3837,2148],{"class":298},[288,3839,3840],{"class":290,"line":206},[288,3841,1718],{"class":298},[288,3843,3844,3846,3848,3851,3853],{"class":290,"line":1352},[288,3845,1723],{"class":298},[288,3847,1341],{"class":294},[288,3849,3850],{"class":403},"\"1\"",[288,3852,1341],{"class":294},[288,3854,1364],{"class":298},[288,3856,3857,3860,3863],{"class":290,"line":1367},[288,3858,3859],{"class":294},"    goto",[288,3861,3862],{"class":2135}," FLAG",[288,3864,1463],{"class":298},[288,3866,3867,3869,3871,3874,3876],{"class":290,"line":1373},[288,3868,1723],{"class":298},[288,3870,1341],{"class":294},[288,3872,3873],{"class":403},"\"2\"",[288,3875,1341],{"class":294},[288,3877,1364],{"class":298},[288,3879,3880,3882,3884,3887,3889],{"class":290,"line":1387},[288,3881,1723],{"class":298},[288,3883,1341],{"class":294},[288,3885,3886],{"class":403},"\"3\"",[288,3888,1341],{"class":294},[288,3890,1364],{"class":298},[288,3892,3893,3895,3897,3900,3902],{"class":290,"line":1393},[288,3894,1723],{"class":298},[288,3896,1341],{"class":294},[288,3898,3899],{"class":403},"\"4\"",[288,3901,1341],{"class":294},[288,3903,1364],{"class":298},[288,3905,3906,3909],{"class":290,"line":1484},[288,3907,3908],{"class":2135},"    FLAG",[288,3910,3911],{"class":298},":\n",[288,3913,3914,3916,3918,3921,3923,3925],{"class":290,"line":1490},[288,3915,1723],{"class":298},[288,3917,1341],{"class":294},[288,3919,3920],{"class":403},"\"5\"",[288,3922,1341],{"class":294},[288,3924,1411],{"class":298},[288,3926,3927],{"class":357},"\u002F\u002F跳过了2,3,4,直接到5\n",[288,3929,3930],{"class":290,"line":1502},[288,3931,1737],{"class":298},[14,3933,3935],{"id":3934},"_17数组","1.7数组",[260,3937,3939],{"id":3938},"_171一维数组","1.7.1一维数组",[243,3941,3942],{},[246,3943,3944],{},"一维数组定义方式",[436,3946,3947,3957],{},[439,3948,3949],{},[442,3950,3951,3954],{},[445,3952,3953],{},"方式",[445,3955,3956],{},"注意事项",[483,3958,3959,3973,3983],{},[442,3960,3961,3967],{},[488,3962,3963,3964,354],{},"数据类型 数组名",[288,3965,3966],{},"数组长度",[488,3968,3969,3970,3972],{},"这种方式是先定义再arr",[288,3971,738],{},"赋值",[442,3974,3975,3980],{},[488,3976,3963,3977,3979],{},[288,3978,3966],{},"={值1,值2....};",[488,3981,3982],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[442,3984,3985,3989],{},[488,3986,3963,3987,3979],{},[288,3988],{},[488,3990,3991,3992,3994],{},"int arr",[288,3993],{},";这是不正确的，按照这样的方式定义必须有初始长度",[243,3996,3997],{"start":206},[246,3998,3999],{},"一维数组数组名\n用途：",[1304,4001,4002],{},[246,4003,4004],{},"1.可以统计整个数组在内存中的长度：",[280,4006,4008],{"className":282,"code":4007,"language":284,"meta":205,"style":205},"sizeof(arr);\nsizeof(arr[0]);\n",[25,4009,4010,4017],{"__ignoreMap":205},[288,4011,4012,4014],{"class":290,"line":291},[288,4013,295],{"class":294},[288,4015,4016],{"class":298},"(arr);\n",[288,4018,4019,4021,4024,4026],{"class":290,"line":206},[288,4020,295],{"class":294},[288,4022,4023],{"class":298},"(arr[",[288,4025,490],{"class":347},[288,4027,4028],{"class":298},"]);\n",[1304,4030,4031],{},[246,4032,4033],{},"2.可以获取数组在内存中的首地址:",[280,4035,4037],{"className":282,"code":4036,"language":284,"meta":205,"style":205},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[25,4038,4039,4044,4057,4062],{"__ignoreMap":205},[288,4040,4041],{"class":290,"line":291},[288,4042,4043],{"class":357},"\u002F\u002F查看16进制的首地址\n",[288,4045,4046,4048,4050,4053,4055],{"class":290,"line":206},[288,4047,1542],{"class":298},[288,4049,1341],{"class":294},[288,4051,4052],{"class":298},"arr",[288,4054,1341],{"class":294},[288,4056,1364],{"class":298},[288,4058,4059],{"class":290,"line":1352},[288,4060,4061],{"class":357},"\u002F\u002F看10进制数\n",[288,4063,4064,4066,4068,4070,4072,4074,4076,4079,4081,4083,4085],{"class":290,"line":1367},[288,4065,1542],{"class":298},[288,4067,1341],{"class":294},[288,4069,299],{"class":298},[288,4071,302],{"class":294},[288,4073,726],{"class":298},[288,4075,650],{"class":294},[288,4077,4078],{"class":298},"arr[",[288,4080,490],{"class":347},[288,4082,1237],{"class":298},[288,4084,1341],{"class":294},[288,4086,1364],{"class":298},[19,4088,4089],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1304,4091,4092],{},[246,4093,4094],{},"1️⃣五只小猪称体重",[280,4096,4098],{"className":282,"code":4097,"language":284,"meta":205,"style":205},"#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",[25,4099,4100,4106,4116,4124,4128,4168,4181,4207,4211,4223,4227,4237,4241,4245,4258,4268],{"__ignoreMap":205},[288,4101,4102,4104],{"class":290,"line":291},[288,4103,2121],{"class":294},[288,4105,2124],{"class":403},[288,4107,4108,4110,4112,4114],{"class":290,"line":206},[288,4109,2129],{"class":294},[288,4111,2132],{"class":294},[288,4113,2136],{"class":2135},[288,4115,1463],{"class":298},[288,4117,4118,4120,4122],{"class":290,"line":1352},[288,4119,302],{"class":294},[288,4121,2145],{"class":2135},[288,4123,2148],{"class":298},[288,4125,4126],{"class":290,"line":1367},[288,4127,1718],{"class":298},[288,4129,4130,4132,4135,4137,4139,4141,4143,4146,4148,4151,4153,4155,4157,4160,4162,4165],{"class":290,"line":1373},[288,4131,2157],{"class":294},[288,4133,4134],{"class":298}," arr[",[288,4136,616],{"class":347},[288,4138,1237],{"class":298},[288,4140,344],{"class":294},[288,4142,1193],{"class":298},[288,4144,4145],{"class":347},"300",[288,4147,675],{"class":298},[288,4149,4150],{"class":347},"350",[288,4152,675],{"class":298},[288,4154,1894],{"class":347},[288,4156,675],{"class":298},[288,4158,4159],{"class":347},"400",[288,4161,675],{"class":298},[288,4163,4164],{"class":347},"250",[288,4166,4167],{"class":298},"};\n",[288,4169,4170,4172,4175,4177,4179],{"class":290,"line":1387},[288,4171,2157],{"class":294},[288,4173,4174],{"class":298}," tmp",[288,4176,344],{"class":294},[288,4178,490],{"class":347},[288,4180,1463],{"class":298},[288,4182,4183,4185,4187,4189,4191,4193,4195,4197,4199,4201,4203,4205],{"class":290,"line":1393},[288,4184,3373],{"class":294},[288,4186,1830],{"class":298},[288,4188,302],{"class":294},[288,4190,3204],{"class":298},[288,4192,344],{"class":294},[288,4194,490],{"class":347},[288,4196,3211],{"class":298},[288,4198,1207],{"class":294},[288,4200,616],{"class":347},[288,4202,3211],{"class":298},[288,4204,2464],{"class":294},[288,4206,305],{"class":298},[288,4208,4209],{"class":290,"line":1484},[288,4210,2202],{"class":298},[288,4212,4213,4215,4218,4220],{"class":290,"line":1490},[288,4214,2669],{"class":294},[288,4216,4217],{"class":298},"(tmp",[288,4219,1207],{"class":294},[288,4221,4222],{"class":298},"arr[i])\n",[288,4224,4225],{"class":290,"line":1502},[288,4226,2682],{"class":298},[288,4228,4229,4232,4234],{"class":290,"line":1784},[288,4230,4231],{"class":298},"            tmp",[288,4233,344],{"class":294},[288,4235,4236],{"class":298},"arr[i];\n",[288,4238,4239],{"class":290,"line":1789},[288,4240,2701],{"class":298},[288,4242,4243],{"class":290,"line":1795},[288,4244,2359],{"class":298},[288,4246,4247,4249,4251,4254,4256],{"class":290,"line":1800},[288,4248,1723],{"class":298},[288,4250,1341],{"class":294},[288,4252,4253],{"class":298},"tmp",[288,4255,1341],{"class":294},[288,4257,1364],{"class":298},[288,4259,4260,4263,4266],{"class":290,"line":1814},[288,4261,4262],{"class":294},"    return",[288,4264,4265],{"class":347}," 0",[288,4267,1463],{"class":298},[288,4269,4270],{"class":290,"line":1819},[288,4271,1737],{"class":298},[1304,4273,4274],{},[246,4275,4276],{},"2️⃣数组元素逆置",[280,4278,4280],{"className":282,"code":4279,"language":284,"meta":205,"style":205},"\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",[25,4281,4282,4287,4293,4303,4311,4315,4350,4366,4398,4411,4416,4421,4433,4443,4453,4458,4467,4477,4482,4487,4514,4518,4534,4538,4549,4558],{"__ignoreMap":205},[288,4283,4284],{"class":290,"line":291},[288,4285,4286],{"class":357},"\u002F\u002F元素逆置\n",[288,4288,4289,4291],{"class":290,"line":206},[288,4290,2121],{"class":294},[288,4292,2124],{"class":403},[288,4294,4295,4297,4299,4301],{"class":290,"line":1352},[288,4296,2129],{"class":294},[288,4298,2132],{"class":294},[288,4300,2136],{"class":2135},[288,4302,1463],{"class":298},[288,4304,4305,4307,4309],{"class":290,"line":1367},[288,4306,302],{"class":294},[288,4308,2145],{"class":2135},[288,4310,2148],{"class":298},[288,4312,4313],{"class":290,"line":1373},[288,4314,1718],{"class":298},[288,4316,4317,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348],{"class":290,"line":1387},[288,4318,4319],{"class":294},"   int",[288,4321,4134],{"class":298},[288,4323,616],{"class":347},[288,4325,1237],{"class":298},[288,4327,344],{"class":294},[288,4329,1193],{"class":298},[288,4331,516],{"class":347},[288,4333,675],{"class":298},[288,4335,376],{"class":347},[288,4337,675],{"class":298},[288,4339,370],{"class":347},[288,4341,675],{"class":298},[288,4343,590],{"class":347},[288,4345,675],{"class":298},[288,4347,616],{"class":347},[288,4349,4167],{"class":298},[288,4351,4352,4354,4357,4359,4361,4363],{"class":290,"line":1393},[288,4353,4319],{"class":294},[288,4355,4356],{"class":298}," start",[288,4358,344],{"class":294},[288,4360,490],{"class":347},[288,4362,354],{"class":298},[288,4364,4365],{"class":357},"\u002F\u002F起始下标\n",[288,4367,4368,4370,4373,4376,4379,4382,4384,4386,4389,4391,4393,4395],{"class":290,"line":1484},[288,4369,4319],{"class":294},[288,4371,4372],{"class":298}," end",[288,4374,4375],{"class":294},"=sizeof",[288,4377,4378],{"class":298},"(arr)",[288,4380,4381],{"class":294},"\u002Fsizeof",[288,4383,4023],{"class":298},[288,4385,490],{"class":347},[288,4387,4388],{"class":298},"])",[288,4390,829],{"class":294},[288,4392,516],{"class":347},[288,4394,354],{"class":298},[288,4396,4397],{"class":357},"\u002F\u002F结束下标\n",[288,4399,4400,4403,4406,4408],{"class":290,"line":1490},[288,4401,4402],{"class":294},"   while",[288,4404,4405],{"class":298}," (start",[288,4407,1207],{"class":294},[288,4409,4410],{"class":298},"end)\n",[288,4412,4413],{"class":290,"line":1502},[288,4414,4415],{"class":298},"   {\n",[288,4417,4418],{"class":290,"line":1784},[288,4419,4420],{"class":357},"    \u002F\u002F实现元素互换代码\n",[288,4422,4423,4425,4428,4430],{"class":290,"line":1789},[288,4424,2157],{"class":294},[288,4426,4427],{"class":298}," temp",[288,4429,344],{"class":294},[288,4431,4432],{"class":298},"arr[start];\n",[288,4434,4435,4438,4440],{"class":290,"line":1795},[288,4436,4437],{"class":298},"    arr[start]",[288,4439,344],{"class":294},[288,4441,4442],{"class":298},"arr[end];\n",[288,4444,4445,4448,4450],{"class":290,"line":1800},[288,4446,4447],{"class":298},"    arr[end]",[288,4449,344],{"class":294},[288,4451,4452],{"class":298},"temp;\n",[288,4454,4455],{"class":290,"line":1814},[288,4456,4457],{"class":357},"    \u002F\u002F下标更新\n",[288,4459,4460,4463,4465],{"class":290,"line":1819},[288,4461,4462],{"class":298},"    start",[288,4464,2464],{"class":294},[288,4466,1463],{"class":298},[288,4468,4469,4472,4475],{"class":290,"line":1825},[288,4470,4471],{"class":298},"    end",[288,4473,4474],{"class":294},"--",[288,4476,1463],{"class":298},[288,4478,4479],{"class":290,"line":1846},[288,4480,4481],{"class":298},"   }\n",[288,4483,4484],{"class":290,"line":1851},[288,4485,4486],{"class":357},"   \u002F\u002F输出逆置后的数组\n",[288,4488,4489,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512],{"class":290,"line":1865},[288,4490,4491],{"class":294},"   for",[288,4493,1830],{"class":298},[288,4495,302],{"class":294},[288,4497,3204],{"class":298},[288,4499,344],{"class":294},[288,4501,490],{"class":347},[288,4503,3211],{"class":298},[288,4505,1207],{"class":294},[288,4507,616],{"class":347},[288,4509,3211],{"class":298},[288,4511,2464],{"class":294},[288,4513,305],{"class":298},[288,4515,4516],{"class":290,"line":1870},[288,4517,4415],{"class":298},[288,4519,4520,4522,4524,4527,4529,4532],{"class":290,"line":1899},[288,4521,1723],{"class":298},[288,4523,1341],{"class":294},[288,4525,4526],{"class":298},"arr[i]",[288,4528,1341],{"class":294},[288,4530,4531],{"class":403},"\" \"",[288,4533,1463],{"class":298},[288,4535,4536],{"class":290,"line":1904},[288,4537,4481],{"class":298},[288,4539,4540,4543,4545,4547],{"class":290,"line":1921},[288,4541,4542],{"class":2135},"   system",[288,4544,299],{"class":298},[288,4546,2480],{"class":403},[288,4548,2891],{"class":298},[288,4550,4551,4554,4556],{"class":290,"line":1926},[288,4552,4553],{"class":294},"   return",[288,4555,4265],{"class":347},[288,4557,1463],{"class":298},[288,4559,4560],{"class":290,"line":1931},[288,4561,1737],{"class":298},[1304,4563,4564],{},[246,4565,4566],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[280,4568,4570],{"className":282,"code":4569,"language":284,"meta":205,"style":205},"\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",[25,4571,4572,4577,4583,4593,4601,4605,4657,4670,4696,4700,4714,4718,4723,4728,4758,4762,4767,4801,4805,4810,4830,4835,4847,4863,4878,4883,4887,4891,4904,4930,4934,4948,4952,4960],{"__ignoreMap":205},[288,4573,4574],{"class":290,"line":291},[288,4575,4576],{"class":357},"\u002F\u002F冒泡排序,升序\n",[288,4578,4579,4581],{"class":290,"line":206},[288,4580,2121],{"class":294},[288,4582,2124],{"class":403},[288,4584,4585,4587,4589,4591],{"class":290,"line":1352},[288,4586,2129],{"class":294},[288,4588,2132],{"class":294},[288,4590,2136],{"class":2135},[288,4592,1463],{"class":298},[288,4594,4595,4597,4599],{"class":290,"line":1367},[288,4596,302],{"class":294},[288,4598,2145],{"class":2135},[288,4600,2148],{"class":298},[288,4602,4603],{"class":290,"line":1373},[288,4604,1718],{"class":298},[288,4606,4607,4609,4611,4613,4616,4618,4621,4623,4625,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655],{"class":290,"line":1387},[288,4608,2157],{"class":294},[288,4610,4134],{"class":298},[288,4612,717],{"class":347},[288,4614,4615],{"class":298},"] ",[288,4617,344],{"class":294},[288,4619,4620],{"class":298}," {",[288,4622,590],{"class":347},[288,4624,675],{"class":298},[288,4626,376],{"class":347},[288,4628,675],{"class":298},[288,4630,692],{"class":347},[288,4632,675],{"class":298},[288,4634,490],{"class":347},[288,4636,675],{"class":298},[288,4638,616],{"class":347},[288,4640,675],{"class":298},[288,4642,666],{"class":347},[288,4644,675],{"class":298},[288,4646,516],{"class":347},[288,4648,675],{"class":298},[288,4650,370],{"class":347},[288,4652,675],{"class":298},[288,4654,717],{"class":347},[288,4656,4167],{"class":298},[288,4658,4659,4661,4663,4666,4668],{"class":290,"line":1393},[288,4660,1723],{"class":298},[288,4662,1341],{"class":294},[288,4664,4665],{"class":403},"\"排序前：\"",[288,4667,1341],{"class":294},[288,4669,1364],{"class":298},[288,4671,4672,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694],{"class":290,"line":1484},[288,4673,3373],{"class":294},[288,4675,1830],{"class":298},[288,4677,302],{"class":294},[288,4679,3204],{"class":298},[288,4681,344],{"class":294},[288,4683,490],{"class":347},[288,4685,3211],{"class":298},[288,4687,1207],{"class":294},[288,4689,717],{"class":347},[288,4691,3211],{"class":298},[288,4693,2464],{"class":294},[288,4695,305],{"class":298},[288,4697,4698],{"class":290,"line":1490},[288,4699,2202],{"class":298},[288,4701,4702,4704,4706,4708,4710,4712],{"class":290,"line":1502},[288,4703,3623],{"class":298},[288,4705,1341],{"class":294},[288,4707,4526],{"class":298},[288,4709,1341],{"class":294},[288,4711,4531],{"class":403},[288,4713,1463],{"class":298},[288,4715,4716],{"class":290,"line":1784},[288,4717,2359],{"class":298},[288,4719,4720],{"class":290,"line":1789},[288,4721,4722],{"class":357},"    \u002F\u002F开始冒泡排序\n",[288,4724,4725],{"class":290,"line":1795},[288,4726,4727],{"class":357},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[288,4729,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756],{"class":290,"line":1800},[288,4731,3373],{"class":294},[288,4733,1830],{"class":298},[288,4735,302],{"class":294},[288,4737,3204],{"class":298},[288,4739,344],{"class":294},[288,4741,490],{"class":347},[288,4743,3211],{"class":298},[288,4745,1207],{"class":294},[288,4747,717],{"class":347},[288,4749,829],{"class":294},[288,4751,516],{"class":347},[288,4753,3211],{"class":298},[288,4755,2464],{"class":294},[288,4757,305],{"class":298},[288,4759,4760],{"class":290,"line":1814},[288,4761,2202],{"class":298},[288,4763,4764],{"class":290,"line":1819},[288,4765,4766],{"class":357},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[288,4768,4769,4771,4773,4775,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799],{"class":290,"line":1825},[288,4770,3575],{"class":294},[288,4772,1830],{"class":298},[288,4774,302],{"class":294},[288,4776,3582],{"class":298},[288,4778,344],{"class":294},[288,4780,490],{"class":347},[288,4782,3589],{"class":298},[288,4784,1207],{"class":294},[288,4786,717],{"class":347},[288,4788,829],{"class":294},[288,4790,738],{"class":298},[288,4792,829],{"class":294},[288,4794,516],{"class":347},[288,4796,3589],{"class":298},[288,4798,2464],{"class":294},[288,4800,305],{"class":298},[288,4802,4803],{"class":290,"line":1846},[288,4804,2682],{"class":298},[288,4806,4807],{"class":290,"line":1851},[288,4808,4809],{"class":357},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[288,4811,4812,4815,4818,4820,4823,4825,4827],{"class":290,"line":1865},[288,4813,4814],{"class":294},"            if",[288,4816,4817],{"class":298},"(arr[j]",[288,4819,1257],{"class":294},[288,4821,4822],{"class":298},"arr[j",[288,4824,778],{"class":294},[288,4826,516],{"class":347},[288,4828,4829],{"class":298},"])\n",[288,4831,4832],{"class":290,"line":1870},[288,4833,4834],{"class":298},"            {\n",[288,4836,4837,4840,4842,4844],{"class":290,"line":1899},[288,4838,4839],{"class":294},"                int",[288,4841,4427],{"class":298},[288,4843,344],{"class":294},[288,4845,4846],{"class":298},"arr[j];\n",[288,4848,4849,4852,4854,4856,4858,4860],{"class":290,"line":1904},[288,4850,4851],{"class":298},"                arr[j]",[288,4853,344],{"class":294},[288,4855,4822],{"class":298},[288,4857,778],{"class":294},[288,4859,516],{"class":347},[288,4861,4862],{"class":298},"];\n",[288,4864,4865,4868,4870,4872,4874,4876],{"class":290,"line":1921},[288,4866,4867],{"class":298},"                arr[j",[288,4869,778],{"class":294},[288,4871,516],{"class":347},[288,4873,1237],{"class":298},[288,4875,344],{"class":294},[288,4877,4452],{"class":298},[288,4879,4880],{"class":290,"line":1926},[288,4881,4882],{"class":298},"            }\n",[288,4884,4885],{"class":290,"line":1931},[288,4886,2701],{"class":298},[288,4888,4889],{"class":290,"line":1936},[288,4890,2359],{"class":298},[288,4892,4893,4895,4897,4900,4902],{"class":290,"line":1950},[288,4894,1723],{"class":298},[288,4896,1341],{"class":294},[288,4898,4899],{"class":403},"\"排序后：\"",[288,4901,1341],{"class":294},[288,4903,1364],{"class":298},[288,4905,4906,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926,4928],{"class":290,"line":1955},[288,4907,3373],{"class":294},[288,4909,1830],{"class":298},[288,4911,302],{"class":294},[288,4913,3204],{"class":298},[288,4915,344],{"class":294},[288,4917,490],{"class":347},[288,4919,3211],{"class":298},[288,4921,1207],{"class":294},[288,4923,717],{"class":347},[288,4925,3211],{"class":298},[288,4927,2464],{"class":294},[288,4929,305],{"class":298},[288,4931,4932],{"class":290,"line":2749},[288,4933,2202],{"class":298},[288,4935,4936,4938,4940,4942,4944,4946],{"class":290,"line":2763},[288,4937,3623],{"class":298},[288,4939,1341],{"class":294},[288,4941,4526],{"class":298},[288,4943,1341],{"class":294},[288,4945,4531],{"class":403},[288,4947,1463],{"class":298},[288,4949,4950],{"class":290,"line":2771},[288,4951,2359],{"class":298},[288,4953,4954,4956,4958],{"class":290,"line":2776},[288,4955,4262],{"class":294},[288,4957,4265],{"class":347},[288,4959,1463],{"class":298},[288,4961,4962],{"class":290,"line":2782},[288,4963,1737],{"class":298},[260,4965,4967],{"id":4966},"_172二维数组","1.7.2二维数组",[243,4969,4970],{},[246,4971,4972],{},"二维数组的四种定义方式",[436,4974,4975,4984],{},[439,4976,4977],{},[442,4978,4979,4982],{},[445,4980,4981],{},"序号",[445,4983,3953],{},[483,4985,4986,4996,5005,5014,5023],{},[442,4987,4988,4990],{},[488,4989,516],{},[488,4991,4992,4993,354],{},"数据类型 数组名[行数]",[288,4994,4995],{},"列数",[442,4997,4998,5000],{},[488,4999,376],{},[488,5001,4992,5002,5004],{},[288,5003,4995],{},"={ {数据1,数据2}，{数据3，数据4}... }",[442,5006,5007,5009],{},[488,5008,370],{},[488,5010,4992,5011,5013],{},[288,5012,4995],{},"={数据1,数据2,数据3...}",[442,5015,5016,5018],{},[488,5017,590],{},[488,5019,5020,5021,5013],{},"数据类型 数组名[]",[288,5022,4995],{},[442,5024,5025,5028],{},[488,5026,5027],{},"注意：不能只省略列数",[488,5029],{},[243,5031,5032],{"start":206},[246,5033,5034],{},"二维数组数组名",[1304,5036,5037,5040],{},[246,5038,5039],{},"1.查看二维数组所占内存空间",[246,5041,5042],{},"2.获取二维数组首地址",[19,5044,5045],{},"已知二维数组，求二维数组的行数与列数",[280,5047,5049],{"className":282,"code":5048,"language":284,"meta":205,"style":205},"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",[25,5050,5051,5059,5063,5081,5085,5103,5119,5124,5149,5182],{"__ignoreMap":205},[288,5052,5053,5055,5057],{"class":290,"line":291},[288,5054,302],{"class":294},[288,5056,2145],{"class":2135},[288,5058,2148],{"class":298},[288,5060,5061],{"class":290,"line":206},[288,5062,1718],{"class":298},[288,5064,5065,5067,5069,5071,5074,5076,5078],{"class":290,"line":1352},[288,5066,2157],{"class":294},[288,5068,4134],{"class":298},[288,5070,376],{"class":347},[288,5072,5073],{"class":298},"][",[288,5075,370],{"class":347},[288,5077,1237],{"class":298},[288,5079,5080],{"class":294},"=\n",[288,5082,5083],{"class":290,"line":1367},[288,5084,2202],{"class":298},[288,5086,5087,5090,5092,5094,5096,5098,5100],{"class":290,"line":1373},[288,5088,5089],{"class":298},"        {",[288,5091,516],{"class":347},[288,5093,675],{"class":298},[288,5095,376],{"class":347},[288,5097,675],{"class":298},[288,5099,370],{"class":347},[288,5101,5102],{"class":298},"},\n",[288,5104,5105,5107,5109,5111,5113,5115,5117],{"class":290,"line":1387},[288,5106,5089],{"class":298},[288,5108,590],{"class":347},[288,5110,675],{"class":298},[288,5112,616],{"class":347},[288,5114,675],{"class":298},[288,5116,641],{"class":347},[288,5118,1737],{"class":298},[288,5120,5121],{"class":290,"line":1393},[288,5122,5123],{"class":298},"    };\n",[288,5125,5126,5128,5130,5133,5135,5137,5139,5141,5143,5145,5147],{"class":290,"line":1484},[288,5127,1723],{"class":298},[288,5129,1341],{"class":294},[288,5131,5132],{"class":403},"\"二维数组的行数\"",[288,5134,1545],{"class":294},[288,5136,4378],{"class":298},[288,5138,4381],{"class":294},[288,5140,4023],{"class":298},[288,5142,490],{"class":347},[288,5144,4388],{"class":298},[288,5146,1341],{"class":294},[288,5148,1364],{"class":298},[288,5150,5151,5153,5155,5158,5160,5162,5164,5166,5168,5170,5172,5174,5176,5178,5180],{"class":290,"line":1490},[288,5152,1723],{"class":298},[288,5154,1341],{"class":294},[288,5156,5157],{"class":403},"\"二维数组的列数\"",[288,5159,1545],{"class":294},[288,5161,4023],{"class":298},[288,5163,490],{"class":347},[288,5165,4388],{"class":298},[288,5167,4381],{"class":294},[288,5169,4023],{"class":298},[288,5171,490],{"class":347},[288,5173,5073],{"class":298},[288,5175,490],{"class":347},[288,5177,4388],{"class":298},[288,5179,1341],{"class":294},[288,5181,1364],{"class":298},[288,5183,5184],{"class":290,"line":1502},[288,5185,1737],{"class":298},[19,5187,5188],{},"查看二维数组首地址",[280,5190,5192],{"className":282,"code":5191,"language":284,"meta":205,"style":205},"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",[25,5193,5194,5211,5237,5262],{"__ignoreMap":205},[288,5195,5196,5198,5200,5203,5205,5207,5209],{"class":290,"line":291},[288,5197,1542],{"class":298},[288,5199,1341],{"class":294},[288,5201,5202],{"class":403},"\"二维数组首地址：\"",[288,5204,1341],{"class":294},[288,5206,4052],{"class":298},[288,5208,1341],{"class":294},[288,5210,1364],{"class":298},[288,5212,5213,5215,5217,5220,5222,5224,5226,5229,5231,5233,5235],{"class":290,"line":206},[288,5214,1542],{"class":298},[288,5216,1341],{"class":294},[288,5218,5219],{"class":403},"\"二维数组第一行的首地址：\"",[288,5221,1341],{"class":294},[288,5223,299],{"class":298},[288,5225,302],{"class":294},[288,5227,5228],{"class":298},")arr[",[288,5230,490],{"class":347},[288,5232,1237],{"class":298},[288,5234,1341],{"class":294},[288,5236,1364],{"class":298},[288,5238,5239,5241,5243,5246,5248,5250,5252,5254,5256,5258,5260],{"class":290,"line":1352},[288,5240,1542],{"class":298},[288,5242,1341],{"class":294},[288,5244,5245],{"class":403},"\"二维数组第二行的首地址：\"",[288,5247,1341],{"class":294},[288,5249,299],{"class":298},[288,5251,302],{"class":294},[288,5253,5228],{"class":298},[288,5255,516],{"class":347},[288,5257,1237],{"class":298},[288,5259,1341],{"class":294},[288,5261,1364],{"class":298},[288,5263,5264,5266,5268,5271,5273,5275,5277,5279,5281,5283,5285,5287,5289,5291,5293,5295],{"class":290,"line":1367},[288,5265,1542],{"class":298},[288,5267,1341],{"class":294},[288,5269,5270],{"class":403},"\"二维数组第一个元素的首地址:\"",[288,5272,1341],{"class":294},[288,5274,299],{"class":298},[288,5276,302],{"class":294},[288,5278,726],{"class":298},[288,5280,650],{"class":294},[288,5282,4078],{"class":298},[288,5284,490],{"class":347},[288,5286,5073],{"class":298},[288,5288,490],{"class":347},[288,5290,1237],{"class":298},[288,5292,1341],{"class":294},[288,5294,1411],{"class":298},[288,5296,5297],{"class":357},"\u002F\u002F对于数，要加取址符\n",[5299,5300,5301],"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":205,"searchDepth":206,"depth":206,"links":5303},[5304,5305,5306,5314,5315,5321,5326],{"id":233,"depth":206,"text":234},{"id":240,"depth":206,"text":241},{"id":257,"depth":206,"text":258,"children":5307},[5308,5309,5310,5311,5312,5313],{"id":262,"depth":1352,"text":263},{"id":315,"depth":1352,"text":316},{"id":384,"depth":1352,"text":385},{"id":1322,"depth":1352,"text":1323},{"id":1417,"depth":1352,"text":1418},{"id":1516,"depth":1352,"text":1517},{"id":1558,"depth":206,"text":1559},{"id":1626,"depth":206,"text":1627,"children":5316},[5317,5318,5319,5320],{"id":1630,"depth":1352,"text":1631},{"id":1651,"depth":1352,"text":1652},{"id":1660,"depth":1352,"text":1661},{"id":1669,"depth":1352,"text":1670},{"id":1678,"depth":206,"text":1679,"children":5322},[5323,5324,5325],{"id":1682,"depth":1352,"text":1683},{"id":2377,"depth":1352,"text":2378},{"id":3793,"depth":1352,"text":3794},{"id":3934,"depth":206,"text":3935,"children":5327},[5328,5329],{"id":3938,"depth":1352,"text":3939},{"id":4966,"depth":1352,"text":4967},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":225,"description":205},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5336,"title":5337,"body":5338,"description":205,"extension":215,"meta":6438,"navigation":217,"path":6439,"seo":6440,"stem":6441,"__hash__":6442},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5339,"toc":6430},[5340,5343,5347,5355,5363,5366,5432,5436,5439,5515,5519,5522,5525,5528,5741,5745,5750,5814,5819,5886,5891,5982,5985,6090,6094,6097,6103,6247,6251,6254,6268,6271,6316,6319,6427],[10,5341,5337],{"id":5342},"_2函数",[14,5344,5346],{"id":5345},"_21函数概述","2.1函数概述",[243,5348,5349,5352],{},[246,5350,5351],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[246,5353,5354],{},"语法：",[280,5356,5361],{"className":5357,"code":5359,"language":5360,"meta":205},[5358],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[25,5362,5359],{"__ignoreMap":205},[19,5364,5365],{},"小案例",[280,5367,5369],{"className":282,"code":5368,"language":284,"meta":205,"style":205},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[25,5370,5371,5376,5400,5404,5421,5428],{"__ignoreMap":205},[288,5372,5373],{"class":290,"line":291},[288,5374,5375],{"class":357},"\u002F\u002Fnum1,num2形参\n",[288,5377,5378,5380,5383,5385,5387,5391,5393,5395,5398],{"class":290,"line":206},[288,5379,302],{"class":294},[288,5381,5382],{"class":2135}," add",[288,5384,299],{"class":298},[288,5386,302],{"class":294},[288,5388,5390],{"class":5389},"s4XuR"," num1",[288,5392,675],{"class":298},[288,5394,302],{"class":294},[288,5396,5397],{"class":5389}," num2",[288,5399,305],{"class":298},[288,5401,5402],{"class":290,"line":1352},[288,5403,1718],{"class":298},[288,5405,5406,5408,5411,5413,5416,5418],{"class":290,"line":1367},[288,5407,2157],{"class":294},[288,5409,5410],{"class":298}," sum",[288,5412,344],{"class":294},[288,5414,5415],{"class":298},"num1",[288,5417,778],{"class":294},[288,5419,5420],{"class":298},"num2;\n",[288,5422,5423,5425],{"class":290,"line":1373},[288,5424,4262],{"class":294},[288,5426,5427],{"class":298}," sum;\n",[288,5429,5430],{"class":290,"line":1387},[288,5431,1737],{"class":298},[14,5433,5435],{"id":5434},"_22函数调用","2.2函数调用",[19,5437,5438],{},"调用刚刚写的求和函数",[280,5440,5442],{"className":282,"code":5441,"language":284,"meta":205,"style":205},"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",[25,5443,5444,5452,5456,5461,5473,5485,5494,5499,5511],{"__ignoreMap":205},[288,5445,5446,5448,5450],{"class":290,"line":291},[288,5447,302],{"class":294},[288,5449,2145],{"class":2135},[288,5451,2148],{"class":298},[288,5453,5454],{"class":290,"line":206},[288,5455,1718],{"class":298},[288,5457,5458],{"class":290,"line":1352},[288,5459,5460],{"class":357},"    \u002F\u002Fa,b实参\n",[288,5462,5463,5465,5467,5469,5471],{"class":290,"line":1367},[288,5464,2157],{"class":294},[288,5466,1571],{"class":298},[288,5468,344],{"class":294},[288,5470,490],{"class":347},[288,5472,1463],{"class":298},[288,5474,5475,5477,5479,5481,5483],{"class":290,"line":1373},[288,5476,2157],{"class":294},[288,5478,3005],{"class":298},[288,5480,344],{"class":294},[288,5482,490],{"class":347},[288,5484,1463],{"class":298},[288,5486,5487,5489,5491],{"class":290,"line":1387},[288,5488,2184],{"class":298},[288,5490,1602],{"class":294},[288,5492,5493],{"class":298},"a,b;\n",[288,5495,5496],{"class":290,"line":1393},[288,5497,5498],{"class":357},"    \u002F\u002F调用函数时，实参值传给了形参\n",[288,5500,5501,5503,5505,5508],{"class":290,"line":1484},[288,5502,1723],{"class":298},[288,5504,1341],{"class":294},[288,5506,5507],{"class":2135},"add",[288,5509,5510],{"class":298},"(a,b);\n",[288,5512,5513],{"class":290,"line":1490},[288,5514,1737],{"class":298},[14,5516,5518],{"id":5517},"_23值传递","2.3值传递",[19,5520,5521],{},"值传递就是函数调用时实参将数值传给形参",[19,5523,5524],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5526,5527],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[280,5529,5531],{"className":282,"code":5530,"language":284,"meta":205,"style":205},"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",[25,5532,5533,5555,5559,5572,5589,5607,5618,5627,5636,5649,5665,5681,5690,5694,5702,5706,5718,5730,5737],{"__ignoreMap":205},[288,5534,5535,5538,5541,5543,5545,5547,5549,5551,5553],{"class":290,"line":291},[288,5536,5537],{"class":294},"void",[288,5539,5540],{"class":2135}," swap",[288,5542,299],{"class":298},[288,5544,302],{"class":294},[288,5546,5390],{"class":5389},[288,5548,675],{"class":298},[288,5550,302],{"class":294},[288,5552,5397],{"class":5389},[288,5554,305],{"class":298},[288,5556,5557],{"class":290,"line":206},[288,5558,1718],{"class":298},[288,5560,5561,5563,5565,5568,5570],{"class":290,"line":1352},[288,5562,1723],{"class":298},[288,5564,1341],{"class":294},[288,5566,5567],{"class":403},"\"交换前：\"",[288,5569,1341],{"class":294},[288,5571,1364],{"class":298},[288,5573,5574,5576,5578,5581,5583,5585,5587],{"class":290,"line":1367},[288,5575,1723],{"class":298},[288,5577,1341],{"class":294},[288,5579,5580],{"class":403},"\"num1=\"",[288,5582,1341],{"class":294},[288,5584,5415],{"class":298},[288,5586,1341],{"class":294},[288,5588,1364],{"class":298},[288,5590,5591,5593,5595,5598,5600,5603,5605],{"class":290,"line":1373},[288,5592,1723],{"class":298},[288,5594,1341],{"class":294},[288,5596,5597],{"class":403},"\"num2=\"",[288,5599,1341],{"class":294},[288,5601,5602],{"class":298},"num2",[288,5604,1341],{"class":294},[288,5606,1364],{"class":298},[288,5608,5609,5611,5613,5615],{"class":290,"line":1387},[288,5610,2157],{"class":294},[288,5612,4427],{"class":298},[288,5614,344],{"class":294},[288,5616,5617],{"class":298},"num1;\n",[288,5619,5620,5623,5625],{"class":290,"line":1393},[288,5621,5622],{"class":298},"    num1",[288,5624,344],{"class":294},[288,5626,5420],{"class":298},[288,5628,5629,5632,5634],{"class":290,"line":1484},[288,5630,5631],{"class":298},"    num2",[288,5633,344],{"class":294},[288,5635,4452],{"class":298},[288,5637,5638,5640,5642,5645,5647],{"class":290,"line":1490},[288,5639,1723],{"class":298},[288,5641,1341],{"class":294},[288,5643,5644],{"class":403},"\"交换后：\"",[288,5646,1341],{"class":294},[288,5648,1364],{"class":298},[288,5650,5651,5653,5655,5657,5659,5661,5663],{"class":290,"line":1502},[288,5652,1723],{"class":298},[288,5654,1341],{"class":294},[288,5656,5580],{"class":403},[288,5658,1341],{"class":294},[288,5660,5415],{"class":298},[288,5662,1341],{"class":294},[288,5664,1364],{"class":298},[288,5666,5667,5669,5671,5673,5675,5677,5679],{"class":290,"line":1784},[288,5668,1723],{"class":298},[288,5670,1341],{"class":294},[288,5672,5597],{"class":403},[288,5674,1341],{"class":294},[288,5676,5602],{"class":298},[288,5678,1341],{"class":294},[288,5680,1364],{"class":298},[288,5682,5683,5685,5687],{"class":290,"line":1789},[288,5684,4262],{"class":294},[288,5686,354],{"class":298},[288,5688,5689],{"class":357},"\u002F\u002F或者不写\n",[288,5691,5692],{"class":290,"line":1795},[288,5693,1737],{"class":298},[288,5695,5696,5698,5700],{"class":290,"line":1800},[288,5697,302],{"class":294},[288,5699,2145],{"class":2135},[288,5701,2148],{"class":298},[288,5703,5704],{"class":290,"line":1814},[288,5705,1718],{"class":298},[288,5707,5708,5710,5712,5714,5716],{"class":290,"line":1819},[288,5709,2157],{"class":294},[288,5711,1571],{"class":298},[288,5713,344],{"class":294},[288,5715,743],{"class":347},[288,5717,1463],{"class":298},[288,5719,5720,5722,5724,5726,5728],{"class":290,"line":1825},[288,5721,2157],{"class":294},[288,5723,3005],{"class":298},[288,5725,344],{"class":294},[288,5727,997],{"class":347},[288,5729,1463],{"class":298},[288,5731,5732,5735],{"class":290,"line":1846},[288,5733,5734],{"class":2135},"    swap",[288,5736,5510],{"class":298},[288,5738,5739],{"class":290,"line":1851},[288,5740,1737],{"class":298},[14,5742,5744],{"id":5743},"_24函数的常见形式","2.4函数的常见形式",[243,5746,5747],{},[246,5748,5749],{},"无参无返",[280,5751,5753],{"className":282,"code":5752,"language":284,"meta":205,"style":205},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[25,5754,5755,5764,5768,5781,5785,5793,5797,5802,5810],{"__ignoreMap":205},[288,5756,5757,5759,5762],{"class":290,"line":291},[288,5758,5537],{"class":294},[288,5760,5761],{"class":2135}," test01",[288,5763,2148],{"class":298},[288,5765,5766],{"class":290,"line":206},[288,5767,1718],{"class":298},[288,5769,5770,5772,5774,5777,5779],{"class":290,"line":1352},[288,5771,1723],{"class":298},[288,5773,1341],{"class":294},[288,5775,5776],{"class":403},"\"你好\"",[288,5778,1341],{"class":294},[288,5780,1364],{"class":298},[288,5782,5783],{"class":290,"line":1367},[288,5784,1737],{"class":298},[288,5786,5787,5789,5791],{"class":290,"line":1373},[288,5788,302],{"class":294},[288,5790,2145],{"class":2135},[288,5792,2148],{"class":298},[288,5794,5795],{"class":290,"line":1387},[288,5796,1718],{"class":298},[288,5798,5799],{"class":290,"line":1393},[288,5800,5801],{"class":357},"    \u002F\u002F函数调用\n",[288,5803,5804,5807],{"class":290,"line":1484},[288,5805,5806],{"class":2135},"    test01",[288,5808,5809],{"class":298},"();\n",[288,5811,5812],{"class":290,"line":1490},[288,5813,1737],{"class":298},[243,5815,5816],{"start":206},[246,5817,5818],{},"有参无返",[280,5820,5822],{"className":282,"code":5821,"language":284,"meta":205,"style":205},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[25,5823,5824,5839,5843,5855,5859,5867,5871,5882],{"__ignoreMap":205},[288,5825,5826,5828,5831,5833,5835,5837],{"class":290,"line":291},[288,5827,5537],{"class":294},[288,5829,5830],{"class":2135}," test02",[288,5832,299],{"class":298},[288,5834,302],{"class":294},[288,5836,1571],{"class":5389},[288,5838,305],{"class":298},[288,5840,5841],{"class":290,"line":206},[288,5842,1718],{"class":298},[288,5844,5845,5847,5849,5851,5853],{"class":290,"line":1352},[288,5846,1723],{"class":298},[288,5848,1341],{"class":294},[288,5850,5776],{"class":403},[288,5852,1341],{"class":294},[288,5854,1364],{"class":298},[288,5856,5857],{"class":290,"line":1367},[288,5858,1737],{"class":298},[288,5860,5861,5863,5865],{"class":290,"line":1373},[288,5862,302],{"class":294},[288,5864,2145],{"class":2135},[288,5866,2148],{"class":298},[288,5868,5869],{"class":290,"line":1387},[288,5870,1718],{"class":298},[288,5872,5873,5876,5878,5880],{"class":290,"line":1393},[288,5874,5875],{"class":2135},"    test02",[288,5877,299],{"class":298},[288,5879,608],{"class":347},[288,5881,2891],{"class":298},[288,5883,5884],{"class":290,"line":1484},[288,5885,1737],{"class":298},[243,5887,5888],{"start":1352},[246,5889,5890],{},"无参有返",[280,5892,5894],{"className":282,"code":5893,"language":284,"meta":205,"style":205},"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",[25,5895,5896,5905,5909,5921,5930,5934,5942,5946,5959,5978],{"__ignoreMap":205},[288,5897,5898,5900,5903],{"class":290,"line":291},[288,5899,302],{"class":294},[288,5901,5902],{"class":2135}," test03",[288,5904,2148],{"class":298},[288,5906,5907],{"class":290,"line":206},[288,5908,1718],{"class":298},[288,5910,5911,5913,5915,5917,5919],{"class":290,"line":1352},[288,5912,1723],{"class":298},[288,5914,1341],{"class":294},[288,5916,5776],{"class":403},[288,5918,1341],{"class":294},[288,5920,1364],{"class":298},[288,5922,5923,5925,5928],{"class":290,"line":1367},[288,5924,4262],{"class":294},[288,5926,5927],{"class":347}," 100",[288,5929,1463],{"class":298},[288,5931,5932],{"class":290,"line":1373},[288,5933,1737],{"class":298},[288,5935,5936,5938,5940],{"class":290,"line":1387},[288,5937,302],{"class":294},[288,5939,2145],{"class":2135},[288,5941,2148],{"class":298},[288,5943,5944],{"class":290,"line":1393},[288,5945,1718],{"class":298},[288,5947,5948,5950,5952,5954,5957],{"class":290,"line":1484},[288,5949,2157],{"class":294},[288,5951,5390],{"class":298},[288,5953,344],{"class":294},[288,5955,5956],{"class":2135},"test03",[288,5958,5809],{"class":298},[288,5960,5961,5963,5965,5967,5969,5971,5973,5975],{"class":290,"line":1490},[288,5962,1723],{"class":298},[288,5964,1341],{"class":294},[288,5966,5580],{"class":403},[288,5968,1341],{"class":294},[288,5970,5415],{"class":298},[288,5972,1341],{"class":294},[288,5974,1411],{"class":298},[288,5976,5977],{"class":357}," \u002F\u002F100\n",[288,5979,5980],{"class":290,"line":1502},[288,5981,1737],{"class":298},[19,5983,5984],{},"4.有参有返",[280,5986,5988],{"className":282,"code":5987,"language":284,"meta":205,"style":205},"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",[25,5989,5990,6005,6009,6022,6028,6032,6041,6045,6057,6071,6086],{"__ignoreMap":205},[288,5991,5992,5994,5997,5999,6001,6003],{"class":290,"line":291},[288,5993,302],{"class":294},[288,5995,5996],{"class":2135}," test04",[288,5998,299],{"class":298},[288,6000,302],{"class":294},[288,6002,1571],{"class":5389},[288,6004,305],{"class":298},[288,6006,6007],{"class":290,"line":206},[288,6008,1718],{"class":298},[288,6010,6011,6013,6015,6018,6020],{"class":290,"line":1352},[288,6012,1723],{"class":298},[288,6014,1341],{"class":294},[288,6016,6017],{"class":403},"\"hello\"",[288,6019,1341],{"class":294},[288,6021,1364],{"class":298},[288,6023,6024,6026],{"class":290,"line":1367},[288,6025,4262],{"class":294},[288,6027,1605],{"class":298},[288,6029,6030],{"class":290,"line":1373},[288,6031,1737],{"class":298},[288,6033,6034,6036,6039],{"class":290,"line":1387},[288,6035,302],{"class":294},[288,6037,6038],{"class":2135}," mian",[288,6040,2148],{"class":298},[288,6042,6043],{"class":290,"line":1393},[288,6044,1718],{"class":298},[288,6046,6047,6049,6051,6053,6055],{"class":290,"line":1484},[288,6048,2157],{"class":294},[288,6050,3005],{"class":298},[288,6052,344],{"class":294},[288,6054,516],{"class":347},[288,6056,1463],{"class":298},[288,6058,6059,6061,6063,6065,6068],{"class":290,"line":1490},[288,6060,2157],{"class":294},[288,6062,3021],{"class":298},[288,6064,344],{"class":294},[288,6066,6067],{"class":2135},"test04",[288,6069,6070],{"class":298},"(b);\n",[288,6072,6073,6075,6077,6079,6081,6083],{"class":290,"line":1502},[288,6074,1723],{"class":298},[288,6076,1341],{"class":294},[288,6078,585],{"class":298},[288,6080,1341],{"class":294},[288,6082,1411],{"class":298},[288,6084,6085],{"class":357}," \u002F\u002F1\n",[288,6087,6088],{"class":290,"line":1784},[288,6089,1737],{"class":298},[14,6091,6093],{"id":6092},"_25函数的声明","2.5函数的声明",[19,6095,6096],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6098,6099,6100],{},"函数的",[448,6101,6102],{},"声明可以多次，但是函数的定义只能有一次",[280,6104,6106],{"className":282,"code":6105,"language":284,"meta":205,"style":205},"\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",[25,6107,6108,6113,6118,6143,6152,6156,6168,6180,6196,6200,6220,6224,6243],{"__ignoreMap":205},[288,6109,6110],{"class":290,"line":291},[288,6111,6112],{"class":357},"\u002F\u002F函数声明\n",[288,6114,6115],{"class":290,"line":206},[288,6116,6117],{"class":357},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[288,6119,6120,6122,6125,6127,6129,6131,6133,6135,6137,6140],{"class":290,"line":1352},[288,6121,302],{"class":294},[288,6123,6124],{"class":2135}," max",[288,6126,299],{"class":298},[288,6128,302],{"class":294},[288,6130,1571],{"class":5389},[288,6132,675],{"class":298},[288,6134,302],{"class":294},[288,6136,3005],{"class":5389},[288,6138,6139],{"class":298},");",[288,6141,6142],{"class":357},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[288,6144,6145,6147,6149],{"class":290,"line":1367},[288,6146,302],{"class":294},[288,6148,2145],{"class":2135},[288,6150,6151],{"class":298},"() \n",[288,6153,6154],{"class":290,"line":1373},[288,6155,1718],{"class":298},[288,6157,6158,6160,6162,6164,6166],{"class":290,"line":1387},[288,6159,2157],{"class":294},[288,6161,1571],{"class":298},[288,6163,344],{"class":294},[288,6165,743],{"class":347},[288,6167,1463],{"class":298},[288,6169,6170,6172,6174,6176,6178],{"class":290,"line":1393},[288,6171,2157],{"class":294},[288,6173,3005],{"class":298},[288,6175,344],{"class":294},[288,6177,997],{"class":347},[288,6179,1463],{"class":298},[288,6181,6182,6184,6186,6189,6192,6194],{"class":290,"line":1484},[288,6183,1723],{"class":298},[288,6185,1341],{"class":294},[288,6187,6188],{"class":2135},"max",[288,6190,6191],{"class":298},"(a,b)",[288,6193,1341],{"class":294},[288,6195,1364],{"class":298},[288,6197,6198],{"class":290,"line":1490},[288,6199,1737],{"class":298},[288,6201,6202,6204,6206,6208,6210,6212,6214,6216,6218],{"class":290,"line":1502},[288,6203,302],{"class":294},[288,6205,6124],{"class":2135},[288,6207,299],{"class":298},[288,6209,302],{"class":294},[288,6211,1571],{"class":5389},[288,6213,675],{"class":298},[288,6215,302],{"class":294},[288,6217,3005],{"class":5389},[288,6219,305],{"class":298},[288,6221,6222],{"class":290,"line":1784},[288,6223,1718],{"class":298},[288,6225,6226,6228,6230,6232,6234,6236,6238,6240],{"class":290,"line":1789},[288,6227,4262],{"class":294},[288,6229,1571],{"class":298},[288,6231,1257],{"class":294},[288,6233,560],{"class":298},[288,6235,1283],{"class":294},[288,6237,104],{"class":298},[288,6239,1156],{"class":294},[288,6241,6242],{"class":298},"b;\n",[288,6244,6245],{"class":290,"line":1795},[288,6246,1737],{"class":298},[14,6248,6250],{"id":6249},"_26函数的分文件编写","2.6函数的分文件编写",[19,6252,6253],{},"4个步骤：",[1304,6255,6256,6259,6262,6265],{},[246,6257,6258],{},"1.创建后缀名为.h的头文件",[246,6260,6261],{},"2.创建后缀名为.cpp的源文件",[246,6263,6264],{},"3.在头文件中写函数的定义",[246,6266,6267],{},"4.在源文件中写函数的定义\n示例：",[19,6269,6270],{},"头文件：swap.h",[280,6272,6274],{"className":282,"code":6273,"language":284,"meta":205,"style":205},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[25,6275,6276,6282,6292,6296],{"__ignoreMap":205},[288,6277,6278,6280],{"class":290,"line":291},[288,6279,2121],{"class":294},[288,6281,2124],{"class":403},[288,6283,6284,6286,6288,6290],{"class":290,"line":206},[288,6285,2129],{"class":294},[288,6287,2132],{"class":294},[288,6289,2136],{"class":2135},[288,6291,1463],{"class":298},[288,6293,6294],{"class":290,"line":1352},[288,6295,6112],{"class":357},[288,6297,6298,6300,6302,6304,6306,6308,6310,6312,6314],{"class":290,"line":1367},[288,6299,5537],{"class":294},[288,6301,5540],{"class":2135},[288,6303,299],{"class":298},[288,6305,302],{"class":294},[288,6307,1571],{"class":5389},[288,6309,675],{"class":298},[288,6311,302],{"class":294},[288,6313,3005],{"class":5389},[288,6315,2891],{"class":298},[19,6317,6318],{},"源文件：swap.cpp",[280,6320,6322],{"className":282,"code":6321,"language":284,"meta":205,"style":205},"#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",[25,6323,6324,6331,6336,6356,6360,6371,6380,6389,6406,6423],{"__ignoreMap":205},[288,6325,6326,6328],{"class":290,"line":291},[288,6327,2121],{"class":294},[288,6329,6330],{"class":403}," \"swap.h\"\n",[288,6332,6333],{"class":290,"line":206},[288,6334,6335],{"class":357},"\u002F\u002F函数的定义\n",[288,6337,6338,6340,6342,6344,6346,6348,6350,6352,6354],{"class":290,"line":1352},[288,6339,5537],{"class":294},[288,6341,5540],{"class":2135},[288,6343,299],{"class":298},[288,6345,302],{"class":294},[288,6347,1571],{"class":5389},[288,6349,675],{"class":298},[288,6351,302],{"class":294},[288,6353,3005],{"class":5389},[288,6355,305],{"class":298},[288,6357,6358],{"class":290,"line":1367},[288,6359,1718],{"class":298},[288,6361,6362,6364,6366,6368],{"class":290,"line":1373},[288,6363,2157],{"class":294},[288,6365,4427],{"class":298},[288,6367,344],{"class":294},[288,6369,6370],{"class":298},"a;\n",[288,6372,6373,6376,6378],{"class":290,"line":1387},[288,6374,6375],{"class":298},"    a",[288,6377,344],{"class":294},[288,6379,6242],{"class":298},[288,6381,6382,6385,6387],{"class":290,"line":1393},[288,6383,6384],{"class":298},"    b",[288,6386,344],{"class":294},[288,6388,4452],{"class":298},[288,6390,6391,6393,6395,6398,6400,6402,6404],{"class":290,"line":1484},[288,6392,1723],{"class":298},[288,6394,1341],{"class":294},[288,6396,6397],{"class":403},"\"a=\"",[288,6399,1341],{"class":294},[288,6401,104],{"class":298},[288,6403,1341],{"class":294},[288,6405,1364],{"class":298},[288,6407,6408,6410,6412,6415,6417,6419,6421],{"class":290,"line":1490},[288,6409,1723],{"class":298},[288,6411,1341],{"class":294},[288,6413,6414],{"class":403},"\"b=\"",[288,6416,1341],{"class":294},[288,6418,560],{"class":298},[288,6420,1341],{"class":294},[288,6422,1364],{"class":298},[288,6424,6425],{"class":290,"line":1502},[288,6426,1737],{"class":298},[5299,6428,6429],{},"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":205,"searchDepth":206,"depth":206,"links":6431},[6432,6433,6434,6435,6436,6437],{"id":5345,"depth":206,"text":5346},{"id":5434,"depth":206,"text":5435},{"id":5517,"depth":206,"text":5518},{"id":5743,"depth":206,"text":5744},{"id":6092,"depth":206,"text":6093},{"id":6249,"depth":206,"text":6250},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5337,"description":205},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6444,"title":6445,"body":6446,"description":6453,"extension":215,"meta":7858,"navigation":217,"path":7859,"seo":7860,"stem":7861,"__hash__":7862},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6447,"toc":7848},[6448,6451,6454,6458,6620,6624,6627,6630,6633,6636,6776,6780,6783,6786,6789,6854,6858,6863,6930,6933,6937,6940,6951,6956,6976,6979,6984,7003,7006,7010,7029,7032,7036,7271,7275,7278,7281,7284,7446,7449,7453,7456,7462,7845],[10,6449,6445],{"id":6450},"_3指针",[19,6452,6453],{},"通过指针保存一个地址，指针就是个地址",[14,6455,6457],{"id":6456},"_31定义指针","3.1定义指针",[280,6459,6461],{"className":282,"code":6460,"language":284,"meta":205,"style":205},"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",[25,6462,6463,6471,6475,6480,6492,6497,6505,6515,6533,6553,6557,6562,6567,6572,6586,6602,6616],{"__ignoreMap":205},[288,6464,6465,6467,6469],{"class":290,"line":291},[288,6466,302],{"class":294},[288,6468,2145],{"class":2135},[288,6470,2148],{"class":298},[288,6472,6473],{"class":290,"line":206},[288,6474,1718],{"class":298},[288,6476,6477],{"class":290,"line":1352},[288,6478,6479],{"class":357},"    \u002F\u002F1.定义指针\n",[288,6481,6482,6484,6486,6488,6490],{"class":290,"line":1367},[288,6483,2157],{"class":294},[288,6485,1571],{"class":298},[288,6487,344],{"class":294},[288,6489,743],{"class":347},[288,6491,1463],{"class":298},[288,6493,6494],{"class":290,"line":1373},[288,6495,6496],{"class":357},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[288,6498,6499,6502],{"class":290,"line":1387},[288,6500,6501],{"class":294},"    int*",[288,6503,6504],{"class":298},"p;\n",[288,6506,6507,6510,6513],{"class":290,"line":1393},[288,6508,6509],{"class":298},"    p",[288,6511,6512],{"class":294},"=&",[288,6514,6370],{"class":298},[288,6516,6517,6519,6521,6524,6527,6529,6531],{"class":290,"line":1484},[288,6518,1723],{"class":298},[288,6520,1341],{"class":294},[288,6522,6523],{"class":403},"\"a的地址为：\"",[288,6525,6526],{"class":294},"\u003C\u003C&",[288,6528,104],{"class":298},[288,6530,1341],{"class":294},[288,6532,1364],{"class":298},[288,6534,6535,6537,6539,6542,6544,6546,6548,6550],{"class":290,"line":1490},[288,6536,1723],{"class":298},[288,6538,1341],{"class":294},[288,6540,6541],{"class":403},"\"指针p为：\"",[288,6543,1341],{"class":294},[288,6545,19],{"class":298},[288,6547,1341],{"class":294},[288,6549,1411],{"class":298},[288,6551,6552],{"class":357},"\u002F\u002F指针p表示的就是a的地址\n",[288,6554,6555],{"class":290,"line":1502},[288,6556,2572],{"emptyLinePlaceholder":217},[288,6558,6559],{"class":290,"line":1784},[288,6560,6561],{"class":357},"    \u002F\u002F2.使用指针\n",[288,6563,6564],{"class":290,"line":1789},[288,6565,6566],{"class":357},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[288,6568,6569],{"class":290,"line":1795},[288,6570,6571],{"class":357},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[288,6573,6574,6577,6579,6581,6584],{"class":290,"line":1800},[288,6575,6576],{"class":294},"    *",[288,6578,19],{"class":298},[288,6580,344],{"class":294},[288,6582,6583],{"class":347},"1000",[288,6585,1463],{"class":298},[288,6587,6588,6590,6593,6595,6597,6599],{"class":290,"line":1814},[288,6589,1723],{"class":298},[288,6591,6592],{"class":294},"\u003C\u003C*",[288,6594,19],{"class":298},[288,6596,1341],{"class":294},[288,6598,1411],{"class":298},[288,6600,6601],{"class":357},"\u002F\u002F1000\n",[288,6603,6604,6606,6608,6610,6612,6614],{"class":290,"line":1819},[288,6605,1723],{"class":298},[288,6607,1341],{"class":294},[288,6609,104],{"class":298},[288,6611,1341],{"class":294},[288,6613,1411],{"class":298},[288,6615,6601],{"class":357},[288,6617,6618],{"class":290,"line":1825},[288,6619,1737],{"class":298},[14,6621,6623],{"id":6622},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6625,6626],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6628,6629],{},"在32位操作系统下：占用4个字节空间",[19,6631,6632],{},"在64位操作系统下：占用8个字节空间",[19,6634,6635],{},"上方是不管啥数据类型的",[280,6637,6639],{"className":282,"code":6638,"language":284,"meta":205,"style":205},"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",[25,6640,6641,6649,6653,6658,6670,6675,6680,6685,6698,6720,6746,6772],{"__ignoreMap":205},[288,6642,6643,6645,6647],{"class":290,"line":291},[288,6644,302],{"class":294},[288,6646,2145],{"class":2135},[288,6648,2148],{"class":298},[288,6650,6651],{"class":290,"line":206},[288,6652,1718],{"class":298},[288,6654,6655],{"class":290,"line":1352},[288,6656,6657],{"class":357},"    \u002F\u002F指针所占内存空间\n",[288,6659,6660,6662,6664,6666,6668],{"class":290,"line":1367},[288,6661,2157],{"class":294},[288,6663,1571],{"class":298},[288,6665,344],{"class":294},[288,6667,743],{"class":347},[288,6669,1463],{"class":298},[288,6671,6672],{"class":290,"line":1373},[288,6673,6674],{"class":357},"    \u002F\u002Fint *p;\n",[288,6676,6677],{"class":290,"line":1387},[288,6678,6679],{"class":357},"    \u002F\u002Fp=&a;\n",[288,6681,6682],{"class":290,"line":1393},[288,6683,6684],{"class":357},"    \u002F\u002F上述可以写为以下：\n",[288,6686,6687,6689,6692,6694,6696],{"class":290,"line":1484},[288,6688,2157],{"class":294},[288,6690,6691],{"class":294}," *",[288,6693,19],{"class":298},[288,6695,6512],{"class":294},[288,6697,6370],{"class":298},[288,6699,6700,6703,6705,6708,6710,6713,6715,6717],{"class":290,"line":1490},[288,6701,6702],{"class":298},"    cout ",[288,6704,1341],{"class":294},[288,6706,6707],{"class":403},"\"sizeof(int *)\"",[288,6709,1545],{"class":294},[288,6711,6712],{"class":298},"(p)",[288,6714,1341],{"class":294},[288,6716,1411],{"class":298},[288,6718,6719],{"class":357},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[288,6721,6722,6724,6726,6728,6730,6732,6734,6736,6738,6740,6743],{"class":290,"line":1502},[288,6723,6702],{"class":298},[288,6725,1341],{"class":294},[288,6727,6707],{"class":403},[288,6729,1545],{"class":294},[288,6731,299],{"class":298},[288,6733,302],{"class":294},[288,6735,6691],{"class":294},[288,6737,726],{"class":298},[288,6739,1341],{"class":294},[288,6741,6742],{"class":298},"endl",[288,6744,6745],{"class":357},"  \u002F\u002F4字节(32位的话)\n",[288,6747,6748,6750,6752,6755,6757,6759,6761,6763,6765,6767,6769],{"class":290,"line":1784},[288,6749,6702],{"class":298},[288,6751,1341],{"class":294},[288,6753,6754],{"class":403},"\"sizeof(char *)\"",[288,6756,1545],{"class":294},[288,6758,299],{"class":298},[288,6760,395],{"class":294},[288,6762,6691],{"class":294},[288,6764,726],{"class":298},[288,6766,1341],{"class":294},[288,6768,1411],{"class":298},[288,6770,6771],{"class":357}," \u002F\u002F4字节(32位的话)\n",[288,6773,6774],{"class":290,"line":1789},[288,6775,1737],{"class":298},[14,6777,6779],{"id":6778},"_33空指针","3.3空指针",[19,6781,6782],{},"空指针：指针变量指向内存中编号为0的空间",[19,6784,6785],{},"用途：初始化指针变量",[19,6787,6788],{},"注意：空指针指向的内存是不可以访问的",[280,6790,6792],{"className":282,"code":6791,"language":284,"meta":205,"style":205},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[25,6793,6794,6802,6806,6811,6825,6830,6845,6850],{"__ignoreMap":205},[288,6795,6796,6798,6800],{"class":290,"line":291},[288,6797,302],{"class":294},[288,6799,2145],{"class":2135},[288,6801,2148],{"class":298},[288,6803,6804],{"class":290,"line":206},[288,6805,1718],{"class":298},[288,6807,6808],{"class":290,"line":1352},[288,6809,6810],{"class":357},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[288,6812,6813,6815,6817,6819,6821,6823],{"class":290,"line":1367},[288,6814,2157],{"class":294},[288,6816,6691],{"class":294},[288,6818,19],{"class":298},[288,6820,344],{"class":294},[288,6822,2564],{"class":347},[288,6824,1463],{"class":298},[288,6826,6827],{"class":290,"line":1373},[288,6828,6829],{"class":357},"    \u002F\u002F2.空指针不能进行访问\n",[288,6831,6832,6834,6836,6838,6840,6842],{"class":290,"line":1387},[288,6833,6576],{"class":294},[288,6835,19],{"class":298},[288,6837,344],{"class":294},[288,6839,608],{"class":347},[288,6841,354],{"class":298},[288,6843,6844],{"class":357},"\u002F\u002F直接报错，压根不能访问\n",[288,6846,6847],{"class":290,"line":1393},[288,6848,6849],{"class":357},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[288,6851,6852],{"class":290,"line":1484},[288,6853,1737],{"class":298},[14,6855,6857],{"id":6856},"_34野指针","3.4野指针",[19,6859,6860],{},[448,6861,6862],{},"指针变量指向非法的内存空间",[280,6864,6866],{"className":282,"code":6865,"language":284,"meta":205,"style":205},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[25,6867,6868,6876,6880,6909,6914,6926],{"__ignoreMap":205},[288,6869,6870,6872,6874],{"class":290,"line":291},[288,6871,302],{"class":294},[288,6873,2145],{"class":2135},[288,6875,2148],{"class":298},[288,6877,6878],{"class":290,"line":206},[288,6879,1718],{"class":298},[288,6881,6882,6884,6886,6888,6890,6892,6894,6896,6898,6901,6904,6906],{"class":290,"line":1352},[288,6883,2157],{"class":294},[288,6885,6691],{"class":294},[288,6887,19],{"class":298},[288,6889,344],{"class":294},[288,6891,299],{"class":298},[288,6893,302],{"class":294},[288,6895,6691],{"class":294},[288,6897,726],{"class":298},[288,6899,6900],{"class":294},"0x",[288,6902,6903],{"class":347},"1100",[288,6905,354],{"class":298},[288,6907,6908],{"class":357}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[288,6910,6911],{"class":290,"line":1367},[288,6912,6913],{"class":357},"    \u002F\u002F访问野指针报错\n",[288,6915,6916,6918,6920,6922,6924],{"class":290,"line":1373},[288,6917,1723],{"class":298},[288,6919,6592],{"class":294},[288,6921,19],{"class":298},[288,6923,1341],{"class":294},[288,6925,1364],{"class":298},[288,6927,6928],{"class":290,"line":1387},[288,6929,1737],{"class":298},[19,6931,6932],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6934,6936],{"id":6935},"_35const修饰指针","3.5const修饰指针",[19,6938,6939],{},"三种情况：",[1304,6941,6942,6945,6948],{},[246,6943,6944],{},"const修饰指针 常量指针",[246,6946,6947],{},"const修饰常量 指针常量",[246,6949,6950],{},"const即修饰指针，又修饰常量",[243,6952,6953],{},[246,6954,6955],{},"常量指针",[280,6957,6959],{"className":282,"code":6958,"language":284,"meta":205,"style":205},"const int *p=&a;\n",[25,6960,6961],{"__ignoreMap":205},[288,6962,6963,6966,6968,6970,6972,6974],{"class":290,"line":291},[288,6964,6965],{"class":294},"const",[288,6967,2554],{"class":294},[288,6969,6691],{"class":294},[288,6971,19],{"class":298},[288,6973,6512],{"class":294},[288,6975,6370],{"class":298},[19,6977,6978],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[243,6980,6981],{"start":206},[246,6982,6983],{},"指针常量",[280,6985,6987],{"className":282,"code":6986,"language":284,"meta":205,"style":205},"int *const p=&a;\n",[25,6988,6989],{"__ignoreMap":205},[288,6990,6991,6993,6996,6999,7001],{"class":290,"line":291},[288,6992,302],{"class":294},[288,6994,6995],{"class":294}," *const",[288,6997,6998],{"class":298}," p",[288,7000,6512],{"class":294},[288,7002,6370],{"class":298},[19,7004,7005],{},"指针的指向不可以改，指针指向的值可以改",[243,7007,7008],{"start":1352},[246,7009,6950],{},[280,7011,7013],{"className":282,"code":7012,"language":284,"meta":205,"style":205},"const int *const p=&a;\n",[25,7014,7015],{"__ignoreMap":205},[288,7016,7017,7019,7021,7023,7025,7027],{"class":290,"line":291},[288,7018,6965],{"class":294},[288,7020,2554],{"class":294},[288,7022,6995],{"class":294},[288,7024,6998],{"class":298},[288,7026,6512],{"class":294},[288,7028,6370],{"class":298},[19,7030,7031],{},"指针的指向和指针指向的值都不可以改变",[14,7033,7035],{"id":7034},"_36指针和数组","3.6指针和数组",[280,7037,7039],{"className":282,"code":7038,"language":284,"meta":205,"style":205},"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",[25,7040,7041,7049,7053,7058,7112,7133,7149,7165,7176,7193,7198,7212,7238,7242,7254,7263,7267],{"__ignoreMap":205},[288,7042,7043,7045,7047],{"class":290,"line":291},[288,7044,302],{"class":294},[288,7046,2145],{"class":2135},[288,7048,2148],{"class":298},[288,7050,7051],{"class":290,"line":206},[288,7052,1718],{"class":298},[288,7054,7055],{"class":290,"line":1352},[288,7056,7057],{"class":357},"    \u002F\u002F利用指针访问数组中的元素\n",[288,7059,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090,7092,7094,7096,7098,7100,7102,7104,7106,7108,7110],{"class":290,"line":1367},[288,7061,2157],{"class":294},[288,7063,4134],{"class":298},[288,7065,743],{"class":347},[288,7067,1237],{"class":298},[288,7069,344],{"class":294},[288,7071,1193],{"class":298},[288,7073,516],{"class":347},[288,7075,675],{"class":298},[288,7077,376],{"class":347},[288,7079,675],{"class":298},[288,7081,370],{"class":347},[288,7083,675],{"class":298},[288,7085,590],{"class":347},[288,7087,675],{"class":298},[288,7089,616],{"class":347},[288,7091,675],{"class":298},[288,7093,641],{"class":347},[288,7095,675],{"class":298},[288,7097,666],{"class":347},[288,7099,675],{"class":298},[288,7101,692],{"class":347},[288,7103,675],{"class":298},[288,7105,717],{"class":347},[288,7107,675],{"class":298},[288,7109,743],{"class":347},[288,7111,4167],{"class":298},[288,7113,7114,7116,7118,7121,7123,7125,7127,7129,7131],{"class":290,"line":1373},[288,7115,1723],{"class":298},[288,7117,1341],{"class":294},[288,7119,7120],{"class":403},"\"数组的第一个元素为：\"",[288,7122,1341],{"class":294},[288,7124,4078],{"class":298},[288,7126,490],{"class":347},[288,7128,1237],{"class":298},[288,7130,1341],{"class":294},[288,7132,1364],{"class":298},[288,7134,7135,7137,7139,7141,7143,7146],{"class":290,"line":1387},[288,7136,2157],{"class":294},[288,7138,6691],{"class":294},[288,7140,19],{"class":298},[288,7142,344],{"class":294},[288,7144,7145],{"class":298},"arr;",[288,7147,7148],{"class":357},"\u002F\u002F注意数才要加取地址符号&\n",[288,7150,7151,7153,7155,7157,7159,7161,7163],{"class":290,"line":1393},[288,7152,1723],{"class":298},[288,7154,1341],{"class":294},[288,7156,7120],{"class":403},[288,7158,6592],{"class":294},[288,7160,19],{"class":298},[288,7162,1341],{"class":294},[288,7164,1364],{"class":298},[288,7166,7167,7169,7171,7173],{"class":290,"line":1484},[288,7168,6509],{"class":298},[288,7170,2464],{"class":294},[288,7172,354],{"class":298},[288,7174,7175],{"class":357}," \u002F\u002F让指针向后偏移4个字节\n",[288,7177,7178,7180,7182,7185,7187,7189,7191],{"class":290,"line":1490},[288,7179,1723],{"class":298},[288,7181,1341],{"class":294},[288,7183,7184],{"class":403},"\"数组的第二个元素为：\"",[288,7186,6592],{"class":294},[288,7188,19],{"class":298},[288,7190,1341],{"class":294},[288,7192,1364],{"class":298},[288,7194,7195],{"class":290,"line":1502},[288,7196,7197],{"class":357},"    \u002F\u002F利用指针遍历数组\n",[288,7199,7200,7202,7204,7207,7209],{"class":290,"line":1784},[288,7201,2157],{"class":294},[288,7203,6691],{"class":294},[288,7205,7206],{"class":298},"p2",[288,7208,344],{"class":294},[288,7210,7211],{"class":298},"arr;\n",[288,7213,7214,7216,7218,7220,7222,7224,7226,7228,7230,7232,7234,7236],{"class":290,"line":1789},[288,7215,3373],{"class":294},[288,7217,1830],{"class":298},[288,7219,302],{"class":294},[288,7221,3204],{"class":298},[288,7223,344],{"class":294},[288,7225,490],{"class":347},[288,7227,3211],{"class":298},[288,7229,1207],{"class":294},[288,7231,743],{"class":347},[288,7233,3211],{"class":298},[288,7235,2464],{"class":294},[288,7237,305],{"class":298},[288,7239,7240],{"class":290,"line":1795},[288,7241,2202],{"class":298},[288,7243,7244,7246,7248,7250,7252],{"class":290,"line":1800},[288,7245,3623],{"class":298},[288,7247,6592],{"class":294},[288,7249,7206],{"class":298},[288,7251,1341],{"class":294},[288,7253,1364],{"class":298},[288,7255,7256,7259,7261],{"class":290,"line":1814},[288,7257,7258],{"class":298},"        p2",[288,7260,2464],{"class":294},[288,7262,1463],{"class":298},[288,7264,7265],{"class":290,"line":1819},[288,7266,2359],{"class":298},[288,7268,7269],{"class":290,"line":1825},[288,7270,1737],{"class":298},[14,7272,7274],{"id":7273},"_37指针和函数","3.7指针和函数",[19,7276,7277],{},"利用指针做函数参数，可以修改实参的值",[19,7279,7280],{},"值传递：只改变形参，不改变实参",[19,7282,7283],{},"地址传递：",[280,7285,7287],{"className":282,"code":7286,"language":284,"meta":205,"style":205},"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",[25,7288,7289,7314,7318,7330,7341,7351,7355,7363,7367,7379,7391,7396,7412,7427,7442],{"__ignoreMap":205},[288,7290,7291,7293,7295,7297,7299,7301,7304,7306,7308,7310,7312],{"class":290,"line":291},[288,7292,5537],{"class":294},[288,7294,5540],{"class":2135},[288,7296,299],{"class":298},[288,7298,302],{"class":294},[288,7300,6691],{"class":294},[288,7302,7303],{"class":5389},"p1",[288,7305,675],{"class":298},[288,7307,302],{"class":294},[288,7309,6691],{"class":294},[288,7311,7206],{"class":5389},[288,7313,305],{"class":298},[288,7315,7316],{"class":290,"line":206},[288,7317,1718],{"class":298},[288,7319,7320,7322,7324,7327],{"class":290,"line":1352},[288,7321,2157],{"class":294},[288,7323,4427],{"class":298},[288,7325,7326],{"class":294},"=*",[288,7328,7329],{"class":298},"p1;\n",[288,7331,7332,7334,7336,7338],{"class":290,"line":1367},[288,7333,6576],{"class":294},[288,7335,7303],{"class":298},[288,7337,7326],{"class":294},[288,7339,7340],{"class":298},"p2;\n",[288,7342,7343,7345,7347,7349],{"class":290,"line":1373},[288,7344,6576],{"class":294},[288,7346,7206],{"class":298},[288,7348,344],{"class":294},[288,7350,4452],{"class":298},[288,7352,7353],{"class":290,"line":1387},[288,7354,1737],{"class":298},[288,7356,7357,7359,7361],{"class":290,"line":1393},[288,7358,302],{"class":294},[288,7360,2145],{"class":2135},[288,7362,2148],{"class":298},[288,7364,7365],{"class":290,"line":1484},[288,7366,1718],{"class":298},[288,7368,7369,7371,7373,7375,7377],{"class":290,"line":1490},[288,7370,2157],{"class":294},[288,7372,1571],{"class":298},[288,7374,344],{"class":294},[288,7376,743],{"class":347},[288,7378,1463],{"class":298},[288,7380,7381,7383,7385,7387,7389],{"class":290,"line":1502},[288,7382,2157],{"class":294},[288,7384,3005],{"class":298},[288,7386,344],{"class":294},[288,7388,997],{"class":347},[288,7390,1463],{"class":298},[288,7392,7393],{"class":290,"line":1784},[288,7394,7395],{"class":357},"    \u002F\u002F地址传递\n",[288,7397,7398,7400,7402,7404,7407,7409],{"class":290,"line":1789},[288,7399,5734],{"class":2135},[288,7401,299],{"class":298},[288,7403,650],{"class":294},[288,7405,7406],{"class":298},"a,",[288,7408,650],{"class":294},[288,7410,7411],{"class":298},"b);\n",[288,7413,7414,7416,7418,7420,7422,7424],{"class":290,"line":1795},[288,7415,1723],{"class":298},[288,7417,1341],{"class":294},[288,7419,104],{"class":298},[288,7421,1341],{"class":294},[288,7423,1411],{"class":298},[288,7425,7426],{"class":357},"\u002F\u002F20\n",[288,7428,7429,7431,7433,7435,7437,7439],{"class":290,"line":1800},[288,7430,1723],{"class":298},[288,7432,1341],{"class":294},[288,7434,560],{"class":298},[288,7436,1341],{"class":294},[288,7438,1411],{"class":298},[288,7440,7441],{"class":357},"\u002F\u002F10\n",[288,7443,7444],{"class":290,"line":1814},[288,7445,1737],{"class":298},[19,7447,7448],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7450,7452],{"id":7451},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7454,7455],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7457,7458,7459,7461],{},"例如数组：int arr",[288,7460,743],{},"={4,3,6,9,1,2,10,8,7,5}",[280,7463,7465],{"className":282,"code":7464,"language":284,"meta":205,"style":205},"#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",[25,7466,7467,7473,7483,7507,7511,7542,7546,7580,7584,7602,7606,7617,7632,7647,7651,7655,7659,7663,7667,7675,7679,7684,7738,7750,7762,7767,7775,7779,7784,7809,7813,7828,7837,7841],{"__ignoreMap":205},[288,7468,7469,7471],{"class":290,"line":291},[288,7470,2121],{"class":294},[288,7472,2124],{"class":403},[288,7474,7475,7477,7479,7481],{"class":290,"line":206},[288,7476,2129],{"class":294},[288,7478,2132],{"class":294},[288,7480,2136],{"class":2135},[288,7482,1463],{"class":298},[288,7484,7485,7487,7490,7492,7494,7496,7498,7500,7502,7505],{"class":290,"line":1352},[288,7486,5537],{"class":294},[288,7488,7489],{"class":2135}," bubbleSort",[288,7491,299],{"class":298},[288,7493,302],{"class":294},[288,7495,6691],{"class":294},[288,7497,19],{"class":5389},[288,7499,675],{"class":298},[288,7501,302],{"class":294},[288,7503,7504],{"class":5389}," len",[288,7506,305],{"class":298},[288,7508,7509],{"class":290,"line":1367},[288,7510,1718],{"class":298},[288,7512,7513,7515,7517,7519,7521,7523,7525,7527,7529,7532,7534,7536,7538,7540],{"class":290,"line":1373},[288,7514,3373],{"class":294},[288,7516,299],{"class":298},[288,7518,302],{"class":294},[288,7520,3204],{"class":298},[288,7522,344],{"class":294},[288,7524,490],{"class":347},[288,7526,3211],{"class":298},[288,7528,1207],{"class":294},[288,7530,7531],{"class":298},"len",[288,7533,829],{"class":294},[288,7535,516],{"class":347},[288,7537,3211],{"class":298},[288,7539,2464],{"class":294},[288,7541,305],{"class":298},[288,7543,7544],{"class":290,"line":1387},[288,7545,2202],{"class":298},[288,7547,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578],{"class":290,"line":1393},[288,7549,3575],{"class":294},[288,7551,299],{"class":298},[288,7553,302],{"class":294},[288,7555,3582],{"class":298},[288,7557,344],{"class":294},[288,7559,490],{"class":347},[288,7561,3589],{"class":298},[288,7563,1207],{"class":294},[288,7565,7531],{"class":298},[288,7567,829],{"class":294},[288,7569,738],{"class":298},[288,7571,829],{"class":294},[288,7573,516],{"class":347},[288,7575,3589],{"class":298},[288,7577,2464],{"class":294},[288,7579,305],{"class":298},[288,7581,7582],{"class":290,"line":1484},[288,7583,2682],{"class":298},[288,7585,7586,7588,7591,7593,7596,7598,7600],{"class":290,"line":1490},[288,7587,4814],{"class":294},[288,7589,7590],{"class":298},"(p[j]",[288,7592,1257],{"class":294},[288,7594,7595],{"class":298},"p[j",[288,7597,778],{"class":294},[288,7599,516],{"class":347},[288,7601,4829],{"class":298},[288,7603,7604],{"class":290,"line":1502},[288,7605,4834],{"class":298},[288,7607,7608,7610,7612,7614],{"class":290,"line":1784},[288,7609,4839],{"class":294},[288,7611,4427],{"class":298},[288,7613,344],{"class":294},[288,7615,7616],{"class":298},"p[j];\n",[288,7618,7619,7622,7624,7626,7628,7630],{"class":290,"line":1789},[288,7620,7621],{"class":298},"                p[j]",[288,7623,344],{"class":294},[288,7625,7595],{"class":298},[288,7627,778],{"class":294},[288,7629,516],{"class":347},[288,7631,4862],{"class":298},[288,7633,7634,7637,7639,7641,7643,7645],{"class":290,"line":1795},[288,7635,7636],{"class":298},"                p[j",[288,7638,778],{"class":294},[288,7640,516],{"class":347},[288,7642,1237],{"class":298},[288,7644,344],{"class":294},[288,7646,4452],{"class":298},[288,7648,7649],{"class":290,"line":1800},[288,7650,4882],{"class":298},[288,7652,7653],{"class":290,"line":1814},[288,7654,2701],{"class":298},[288,7656,7657],{"class":290,"line":1819},[288,7658,2359],{"class":298},[288,7660,7661],{"class":290,"line":1825},[288,7662,1737],{"class":298},[288,7664,7665],{"class":290,"line":1846},[288,7666,2572],{"emptyLinePlaceholder":217},[288,7668,7669,7671,7673],{"class":290,"line":1851},[288,7670,302],{"class":294},[288,7672,2145],{"class":2135},[288,7674,2148],{"class":298},[288,7676,7677],{"class":290,"line":1865},[288,7678,1718],{"class":298},[288,7680,7681],{"class":290,"line":1870},[288,7682,7683],{"class":357},"    \u002F\u002F 1.创建数组\n",[288,7685,7686,7688,7690,7692,7694,7696,7698,7700,7702,7704,7706,7708,7710,7712,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732,7734,7736],{"class":290,"line":1899},[288,7687,2157],{"class":294},[288,7689,4134],{"class":298},[288,7691,743],{"class":347},[288,7693,1237],{"class":298},[288,7695,344],{"class":294},[288,7697,1193],{"class":298},[288,7699,590],{"class":347},[288,7701,675],{"class":298},[288,7703,370],{"class":347},[288,7705,675],{"class":298},[288,7707,641],{"class":347},[288,7709,675],{"class":298},[288,7711,717],{"class":347},[288,7713,675],{"class":298},[288,7715,516],{"class":347},[288,7717,675],{"class":298},[288,7719,376],{"class":347},[288,7721,675],{"class":298},[288,7723,743],{"class":347},[288,7725,675],{"class":298},[288,7727,692],{"class":347},[288,7729,675],{"class":298},[288,7731,666],{"class":347},[288,7733,675],{"class":298},[288,7735,616],{"class":347},[288,7737,4167],{"class":298},[288,7739,7740,7742,7744,7746,7748],{"class":290,"line":1904},[288,7741,2157],{"class":294},[288,7743,7504],{"class":298},[288,7745,344],{"class":294},[288,7747,743],{"class":347},[288,7749,1463],{"class":298},[288,7751,7752,7754,7756,7758,7760],{"class":290,"line":1921},[288,7753,2157],{"class":294},[288,7755,6691],{"class":294},[288,7757,19],{"class":298},[288,7759,344],{"class":294},[288,7761,7211],{"class":298},[288,7763,7764],{"class":290,"line":1926},[288,7765,7766],{"class":357},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[288,7768,7769,7772],{"class":290,"line":1931},[288,7770,7771],{"class":2135},"    bubbleSort",[288,7773,7774],{"class":298},"(p,len);\n",[288,7776,7777],{"class":290,"line":1936},[288,7778,2572],{"emptyLinePlaceholder":217},[288,7780,7781],{"class":290,"line":1950},[288,7782,7783],{"class":357},"    \u002F\u002F 3.打印排序后的数组\n",[288,7785,7786,7788,7790,7792,7794,7796,7798,7800,7802,7805,7807],{"class":290,"line":1955},[288,7787,3373],{"class":294},[288,7789,1830],{"class":298},[288,7791,302],{"class":294},[288,7793,3204],{"class":298},[288,7795,344],{"class":294},[288,7797,490],{"class":347},[288,7799,3386],{"class":298},[288,7801,1207],{"class":294},[288,7803,7804],{"class":298},"len; i",[288,7806,2464],{"class":294},[288,7808,305],{"class":298},[288,7810,7811],{"class":290,"line":2749},[288,7812,2202],{"class":298},[288,7814,7815,7817,7819,7821,7823,7826],{"class":290,"line":2763},[288,7816,3623],{"class":298},[288,7818,6592],{"class":294},[288,7820,19],{"class":298},[288,7822,1341],{"class":294},[288,7824,7825],{"class":403},"\"\"",[288,7827,1463],{"class":298},[288,7829,7830,7833,7835],{"class":290,"line":2771},[288,7831,7832],{"class":298},"        p",[288,7834,2464],{"class":294},[288,7836,1463],{"class":298},[288,7838,7839],{"class":290,"line":2776},[288,7840,2359],{"class":298},[288,7842,7843],{"class":290,"line":2782},[288,7844,1737],{"class":298},[5299,7846,7847],{},"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":205,"searchDepth":206,"depth":206,"links":7849},[7850,7851,7852,7853,7854,7855,7856,7857],{"id":6456,"depth":206,"text":6457},{"id":6622,"depth":206,"text":6623},{"id":6778,"depth":206,"text":6779},{"id":6856,"depth":206,"text":6857},{"id":6935,"depth":206,"text":6936},{"id":7034,"depth":206,"text":7035},{"id":7273,"depth":206,"text":7274},{"id":7451,"depth":206,"text":7452},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6445,"description":6453},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7864,"title":7865,"body":7866,"description":7873,"extension":215,"meta":10847,"navigation":217,"path":10848,"seo":10849,"stem":10850,"__hash__":10851},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7867,"toc":10838},[7868,7871,7874,7878,7881,7884,7895,8233,8236,8240,8243,8250,8505,8509,8512,8515,8670,8674,8677,8680,8886,8890,8893,9196,9199,9207,9211,9214,9365,9367,9378,9435,9439,9444,10101,10109,10112,10206,10209,10829,10835],[10,7869,7865],{"id":7870},"_4结构体",[19,7872,7873],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7875,7877],{"id":7876},"_41结构体定义与使用","4.1结构体定义与使用",[19,7879,7880],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7882,7883],{},"通过结构体创建变量的方式：",[1304,7885,7886,7889,7892],{},[246,7887,7888],{},"struct 结构体名 变量名",[246,7890,7891],{},"struct 结构体名 变量名={成员1值，成员2值...}",[246,7893,7894],{},"定义结构体时顺便创建变量",[280,7896,7898],{"className":282,"code":7897,"language":284,"meta":205,"style":205},"#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",[25,7899,7900,7906,7916,7923,7928,7936,7940,7945,7949,7954,7959,7964,7971,7976,7983,7987,7994,7998,8002,8006,8010,8014,8018,8024,8028,8034,8042,8050,8054,8059,8064,8075,8080,8092,8103,8114,8119,8143,8148,8154,8181,8186,8192,8204,8216,8228],{"__ignoreMap":205},[288,7901,7902,7904],{"class":290,"line":291},[288,7903,2121],{"class":294},[288,7905,2124],{"class":403},[288,7907,7908,7910,7912,7914],{"class":290,"line":206},[288,7909,2129],{"class":294},[288,7911,2132],{"class":294},[288,7913,2136],{"class":2135},[288,7915,1463],{"class":298},[288,7917,7918,7920],{"class":290,"line":1352},[288,7919,2121],{"class":294},[288,7921,7922],{"class":403},"\u003Cstring>\n",[288,7924,7925],{"class":290,"line":1367},[288,7926,7927],{"class":357},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[288,7929,7930,7933],{"class":290,"line":1373},[288,7931,7932],{"class":294},"struct",[288,7934,7935],{"class":2135}," Student\n",[288,7937,7938],{"class":290,"line":1387},[288,7939,1718],{"class":298},[288,7941,7942],{"class":290,"line":1393},[288,7943,7944],{"class":357},"    \u002F\u002F成员列表\n",[288,7946,7947],{"class":290,"line":1484},[288,7948,2572],{"emptyLinePlaceholder":217},[288,7950,7951],{"class":290,"line":1490},[288,7952,7953],{"class":357},"    \u002F\u002F姓名\n",[288,7955,7956],{"class":290,"line":1502},[288,7957,7958],{"class":298},"    string name;\n",[288,7960,7961],{"class":290,"line":1784},[288,7962,7963],{"class":357},"    \u002F\u002F年龄\n",[288,7965,7966,7968],{"class":290,"line":1789},[288,7967,2157],{"class":294},[288,7969,7970],{"class":298}," age;\n",[288,7972,7973],{"class":290,"line":1795},[288,7974,7975],{"class":357},"    \u002F\u002F分数\n",[288,7977,7978,7980],{"class":290,"line":1800},[288,7979,2157],{"class":294},[288,7981,7982],{"class":298}," score;\n",[288,7984,7985],{"class":290,"line":1814},[288,7986,4167],{"class":298},[288,7988,7989,7991],{"class":290,"line":1819},[288,7990,7932],{"class":294},[288,7992,7993],{"class":2135}," School\n",[288,7995,7996],{"class":290,"line":1825},[288,7997,1718],{"class":298},[288,7999,8000],{"class":290,"line":1846},[288,8001,7944],{"class":357},[288,8003,8004],{"class":290,"line":1851},[288,8005,2572],{"emptyLinePlaceholder":217},[288,8007,8008],{"class":290,"line":1865},[288,8009,7953],{"class":357},[288,8011,8012],{"class":290,"line":1870},[288,8013,7958],{"class":298},[288,8015,8016],{"class":290,"line":1899},[288,8017,7963],{"class":357},[288,8019,8020,8022],{"class":290,"line":1904},[288,8021,2157],{"class":294},[288,8023,7970],{"class":298},[288,8025,8026],{"class":290,"line":1921},[288,8027,7975],{"class":357},[288,8029,8030,8032],{"class":290,"line":1926},[288,8031,2157],{"class":294},[288,8033,7982],{"class":298},[288,8035,8036,8039],{"class":290,"line":1931},[288,8037,8038],{"class":298},"} s3;",[288,8040,8041],{"class":357}," \u002F\u002F创建结构体时就创建了变量\n",[288,8043,8044,8046,8048],{"class":290,"line":1936},[288,8045,302],{"class":294},[288,8047,2145],{"class":2135},[288,8049,2148],{"class":298},[288,8051,8052],{"class":290,"line":1950},[288,8053,1718],{"class":298},[288,8055,8056],{"class":290,"line":1955},[288,8057,8058],{"class":357},"    \u002F\u002F2.通过学生类型创建具体学生\n",[288,8060,8061],{"class":290,"line":2749},[288,8062,8063],{"class":357},"    \u002F\u002F2.1 struct Student s1;\n",[288,8065,8066,8069,8072],{"class":290,"line":2763},[288,8067,8068],{"class":294},"    struct",[288,8070,8071],{"class":2135}," Student",[288,8073,8074],{"class":298}," s1;\n",[288,8076,8077],{"class":290,"line":2771},[288,8078,8079],{"class":357},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[288,8081,8082,8085,8087,8090],{"class":290,"line":2776},[288,8083,8084],{"class":298},"    s1.name",[288,8086,344],{"class":294},[288,8088,8089],{"class":403},"\"张三\"",[288,8091,1463],{"class":298},[288,8093,8094,8097,8099,8101],{"class":290,"line":2782},[288,8095,8096],{"class":298},"    s1.age",[288,8098,344],{"class":294},[288,8100,947],{"class":347},[288,8102,1463],{"class":298},[288,8104,8105,8108,8110,8112],{"class":290,"line":2788},[288,8106,8107],{"class":298},"    s1.score",[288,8109,344],{"class":294},[288,8111,551],{"class":347},[288,8113,1463],{"class":298},[288,8115,8116],{"class":290,"line":2793},[288,8117,8118],{"class":357},"    \u002F\u002F输出结果\n",[288,8120,8122,8124,8126,8129,8131,8134,8136,8139,8141],{"class":290,"line":8121},37,[288,8123,1723],{"class":298},[288,8125,1341],{"class":294},[288,8127,8128],{"class":298},"s1.name",[288,8130,1341],{"class":294},[288,8132,8133],{"class":298},"s1.age",[288,8135,1341],{"class":294},[288,8137,8138],{"class":298},"s1.score",[288,8140,1341],{"class":294},[288,8142,1364],{"class":298},[288,8144,8146],{"class":290,"line":8145},38,[288,8147,2572],{"emptyLinePlaceholder":217},[288,8149,8151],{"class":290,"line":8150},39,[288,8152,8153],{"class":357},"    \u002F\u002F2.2 struct Student s2={...}\n",[288,8155,8157,8159,8161,8164,8166,8168,8171,8173,8175,8177,8179],{"class":290,"line":8156},40,[288,8158,8068],{"class":294},[288,8160,8071],{"class":2135},[288,8162,8163],{"class":298}," s2",[288,8165,344],{"class":294},[288,8167,1193],{"class":298},[288,8169,8170],{"class":403},"\"王五\"",[288,8172,675],{"class":298},[288,8174,947],{"class":347},[288,8176,675],{"class":298},[288,8178,551],{"class":347},[288,8180,4167],{"class":298},[288,8182,8184],{"class":290,"line":8183},41,[288,8185,2572],{"emptyLinePlaceholder":217},[288,8187,8189],{"class":290,"line":8188},42,[288,8190,8191],{"class":357},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[288,8193,8195,8198,8200,8202],{"class":290,"line":8194},43,[288,8196,8197],{"class":298},"    s3.name",[288,8199,344],{"class":294},[288,8201,3850],{"class":403},[288,8203,1463],{"class":298},[288,8205,8207,8210,8212,8214],{"class":290,"line":8206},44,[288,8208,8209],{"class":298},"    s3.age",[288,8211,344],{"class":294},[288,8213,947],{"class":347},[288,8215,1463],{"class":298},[288,8217,8219,8222,8224,8226],{"class":290,"line":8218},45,[288,8220,8221],{"class":298},"    s3.score",[288,8223,344],{"class":294},[288,8225,997],{"class":347},[288,8227,1463],{"class":298},[288,8229,8231],{"class":290,"line":8230},46,[288,8232,1737],{"class":298},[19,8234,8235],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8237,8239],{"id":8238},"_42结构体数组","4.2结构体数组",[19,8241,8242],{},"将自定义的结构体放入到数组中方便维护",[19,8244,8245,8246,8249],{},"语法：struct 结构体名 数组名",[288,8247,8248],{},"元素个数","={ {}，{},...{} };",[280,8251,8253],{"className":282,"code":8252,"language":284,"meta":205,"style":205},"#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",[25,8254,8255,8261,8271,8277,8282,8288,8292,8296,8302,8308,8312,8316,8324,8328,8333,8348,8352,8368,8384,8388,8393,8409,8424,8439,8444,8470,8474,8497,8501],{"__ignoreMap":205},[288,8256,8257,8259],{"class":290,"line":291},[288,8258,2121],{"class":294},[288,8260,2124],{"class":403},[288,8262,8263,8265,8267,8269],{"class":290,"line":206},[288,8264,2129],{"class":294},[288,8266,2132],{"class":294},[288,8268,2136],{"class":2135},[288,8270,1463],{"class":298},[288,8272,8273,8275],{"class":290,"line":1352},[288,8274,2121],{"class":294},[288,8276,7922],{"class":403},[288,8278,8279],{"class":290,"line":1367},[288,8280,8281],{"class":357},"\u002F\u002F1.定义结构体\n",[288,8283,8284,8286],{"class":290,"line":1373},[288,8285,7932],{"class":294},[288,8287,7935],{"class":2135},[288,8289,8290],{"class":290,"line":1387},[288,8291,1718],{"class":298},[288,8293,8294],{"class":290,"line":1393},[288,8295,7958],{"class":298},[288,8297,8298,8300],{"class":290,"line":1484},[288,8299,2157],{"class":294},[288,8301,7970],{"class":298},[288,8303,8304,8306],{"class":290,"line":1490},[288,8305,2157],{"class":294},[288,8307,7982],{"class":298},[288,8309,8310],{"class":290,"line":1502},[288,8311,2572],{"emptyLinePlaceholder":217},[288,8313,8314],{"class":290,"line":1784},[288,8315,4167],{"class":298},[288,8317,8318,8320,8322],{"class":290,"line":1789},[288,8319,302],{"class":294},[288,8321,2145],{"class":2135},[288,8323,2148],{"class":298},[288,8325,8326],{"class":290,"line":1795},[288,8327,1718],{"class":298},[288,8329,8330],{"class":290,"line":1800},[288,8331,8332],{"class":357},"    \u002F\u002F2.创建结构体数组\n",[288,8334,8335,8337,8339,8342,8344,8346],{"class":290,"line":1814},[288,8336,8068],{"class":294},[288,8338,8071],{"class":2135},[288,8340,8341],{"class":298}," stuArray[",[288,8343,376],{"class":347},[288,8345,1237],{"class":298},[288,8347,5080],{"class":294},[288,8349,8350],{"class":290,"line":1819},[288,8351,2202],{"class":298},[288,8353,8354,8356,8358,8360,8362,8364,8366],{"class":290,"line":1825},[288,8355,5089],{"class":298},[288,8357,8089],{"class":403},[288,8359,675],{"class":298},[288,8361,947],{"class":347},[288,8363,675],{"class":298},[288,8365,608],{"class":347},[288,8367,5102],{"class":298},[288,8369,8370,8372,8374,8376,8378,8380,8382],{"class":290,"line":1846},[288,8371,5089],{"class":298},[288,8373,3850],{"class":403},[288,8375,675],{"class":298},[288,8377,872],{"class":347},[288,8379,675],{"class":298},[288,8381,872],{"class":347},[288,8383,1737],{"class":298},[288,8385,8386],{"class":290,"line":1851},[288,8387,2359],{"class":298},[288,8389,8390],{"class":290,"line":1865},[288,8391,8392],{"class":357},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[288,8394,8395,8398,8400,8403,8405,8407],{"class":290,"line":1870},[288,8396,8397],{"class":298},"    stuArray[",[288,8399,516],{"class":347},[288,8401,8402],{"class":298},"].name",[288,8404,344],{"class":294},[288,8406,3873],{"class":403},[288,8408,1463],{"class":298},[288,8410,8411,8413,8415,8418,8420,8422],{"class":290,"line":1899},[288,8412,8397],{"class":298},[288,8414,516],{"class":347},[288,8416,8417],{"class":298},"].age",[288,8419,344],{"class":294},[288,8421,376],{"class":347},[288,8423,1463],{"class":298},[288,8425,8426,8428,8430,8433,8435,8437],{"class":290,"line":1904},[288,8427,8397],{"class":298},[288,8429,516],{"class":347},[288,8431,8432],{"class":298},"].score",[288,8434,344],{"class":294},[288,8436,376],{"class":347},[288,8438,1463],{"class":298},[288,8440,8441],{"class":290,"line":1921},[288,8442,8443],{"class":357},"    \u002F\u002F4.遍历结构体数组\n",[288,8445,8446,8448,8450,8452,8454,8456,8458,8460,8462,8464,8466,8468],{"class":290,"line":1926},[288,8447,3373],{"class":294},[288,8449,1830],{"class":298},[288,8451,302],{"class":294},[288,8453,3204],{"class":298},[288,8455,344],{"class":294},[288,8457,490],{"class":347},[288,8459,3211],{"class":298},[288,8461,1207],{"class":294},[288,8463,376],{"class":347},[288,8465,3211],{"class":298},[288,8467,2464],{"class":294},[288,8469,305],{"class":298},[288,8471,8472],{"class":290,"line":1931},[288,8473,2202],{"class":298},[288,8475,8476,8478,8480,8483,8485,8488,8490,8493,8495],{"class":290,"line":1936},[288,8477,3623],{"class":298},[288,8479,1341],{"class":294},[288,8481,8482],{"class":298},"stuArray[i].name",[288,8484,1341],{"class":294},[288,8486,8487],{"class":298},"stuArray[i].age",[288,8489,1341],{"class":294},[288,8491,8492],{"class":298},"stuArray[i].score",[288,8494,1341],{"class":294},[288,8496,1364],{"class":298},[288,8498,8499],{"class":290,"line":1950},[288,8500,2359],{"class":298},[288,8502,8503],{"class":290,"line":1955},[288,8504,1737],{"class":298},[14,8506,8508],{"id":8507},"_43结构体指针","4.3结构体指针",[19,8510,8511],{},"作用：通过指针访问结构体中的成员",[19,8513,8514],{},"利用操作符->可以通过结构体指针访问结构体属性",[280,8516,8518],{"className":282,"code":8517,"language":284,"meta":205,"style":205},"#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",[25,8519,8520,8526,8536,8542,8546,8552,8556,8560,8566,8572,8576,8584,8588,8593,8618,8623,8638,8643,8666],{"__ignoreMap":205},[288,8521,8522,8524],{"class":290,"line":291},[288,8523,2121],{"class":294},[288,8525,2124],{"class":403},[288,8527,8528,8530,8532,8534],{"class":290,"line":206},[288,8529,2129],{"class":294},[288,8531,2132],{"class":294},[288,8533,2136],{"class":2135},[288,8535,1463],{"class":298},[288,8537,8538,8540],{"class":290,"line":1352},[288,8539,2121],{"class":294},[288,8541,7922],{"class":403},[288,8543,8544],{"class":290,"line":1367},[288,8545,8281],{"class":357},[288,8547,8548,8550],{"class":290,"line":1373},[288,8549,7932],{"class":294},[288,8551,7935],{"class":2135},[288,8553,8554],{"class":290,"line":1387},[288,8555,1718],{"class":298},[288,8557,8558],{"class":290,"line":1393},[288,8559,7958],{"class":298},[288,8561,8562,8564],{"class":290,"line":1484},[288,8563,2157],{"class":294},[288,8565,7970],{"class":298},[288,8567,8568,8570],{"class":290,"line":1490},[288,8569,2157],{"class":294},[288,8571,7982],{"class":298},[288,8573,8574],{"class":290,"line":1502},[288,8575,4167],{"class":298},[288,8577,8578,8580,8582],{"class":290,"line":1784},[288,8579,302],{"class":294},[288,8581,2145],{"class":2135},[288,8583,2148],{"class":298},[288,8585,8586],{"class":290,"line":1789},[288,8587,1718],{"class":298},[288,8589,8590],{"class":290,"line":1795},[288,8591,8592],{"class":357},"    \u002F\u002F创建学生结构体变量\n",[288,8594,8595,8597,8599,8602,8604,8606,8608,8610,8612,8614,8616],{"class":290,"line":1800},[288,8596,8068],{"class":294},[288,8598,8071],{"class":2135},[288,8600,8601],{"class":298}," s",[288,8603,344],{"class":294},[288,8605,1193],{"class":298},[288,8607,8089],{"class":403},[288,8609,675],{"class":298},[288,8611,947],{"class":347},[288,8613,675],{"class":298},[288,8615,1894],{"class":347},[288,8617,4167],{"class":298},[288,8619,8620],{"class":290,"line":1814},[288,8621,8622],{"class":357},"    \u002F\u002F通过指针指向结构体变量\n",[288,8624,8625,8627,8629,8631,8633,8635],{"class":290,"line":1819},[288,8626,8068],{"class":294},[288,8628,8071],{"class":2135},[288,8630,6691],{"class":294},[288,8632,19],{"class":298},[288,8634,6512],{"class":294},[288,8636,8637],{"class":298},"s\n",[288,8639,8640],{"class":290,"line":1825},[288,8641,8642],{"class":357},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[288,8644,8645,8647,8649,8652,8654,8657,8659,8662,8664],{"class":290,"line":1846},[288,8646,1723],{"class":298},[288,8648,1341],{"class":294},[288,8650,8651],{"class":298},"p->name",[288,8653,1341],{"class":294},[288,8655,8656],{"class":298},"p->age",[288,8658,1341],{"class":294},[288,8660,8661],{"class":298},"p->score",[288,8663,1341],{"class":294},[288,8665,1364],{"class":298},[288,8667,8668],{"class":290,"line":1851},[288,8669,1737],{"class":298},[14,8671,8673],{"id":8672},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8675,8676],{},"作用：结构体中的成员可以是另一个结构体",[19,8678,8679],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[280,8681,8683],{"className":282,"code":8682,"language":284,"meta":205,"style":205},"#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",[25,8684,8685,8691,8701,8707,8712,8720,8724,8728,8734,8740,8744,8749,8756,8760,8767,8771,8777,8782,8786,8794,8798,8803,8808,8813,8824,8836,8847,8860,8871,8882],{"__ignoreMap":205},[288,8686,8687,8689],{"class":290,"line":291},[288,8688,2121],{"class":294},[288,8690,2124],{"class":403},[288,8692,8693,8695,8697,8699],{"class":290,"line":206},[288,8694,2129],{"class":294},[288,8696,2132],{"class":294},[288,8698,2136],{"class":2135},[288,8700,1463],{"class":298},[288,8702,8703,8705],{"class":290,"line":1352},[288,8704,2121],{"class":294},[288,8706,7922],{"class":403},[288,8708,8709],{"class":290,"line":1367},[288,8710,8711],{"class":357},"\u002F\u002F定义学生结构体\n",[288,8713,8714,8716,8718],{"class":290,"line":1373},[288,8715,7932],{"class":294},[288,8717,8071],{"class":2135},[288,8719,2846],{"class":298},[288,8721,8722],{"class":290,"line":1387},[288,8723,1718],{"class":298},[288,8725,8726],{"class":290,"line":1393},[288,8727,7958],{"class":298},[288,8729,8730,8732],{"class":290,"line":1484},[288,8731,2157],{"class":294},[288,8733,7970],{"class":298},[288,8735,8736,8738],{"class":290,"line":1490},[288,8737,2157],{"class":294},[288,8739,7982],{"class":298},[288,8741,8742],{"class":290,"line":1502},[288,8743,1737],{"class":298},[288,8745,8746],{"class":290,"line":1784},[288,8747,8748],{"class":357},"\u002F\u002F定义老师结构体\n",[288,8750,8751,8753],{"class":290,"line":1789},[288,8752,7932],{"class":294},[288,8754,8755],{"class":2135}," Teacher\n",[288,8757,8758],{"class":290,"line":1795},[288,8759,1718],{"class":298},[288,8761,8762,8764],{"class":290,"line":1800},[288,8763,2157],{"class":294},[288,8765,8766],{"class":298}," id;\n",[288,8768,8769],{"class":290,"line":1814},[288,8770,7958],{"class":298},[288,8772,8773,8775],{"class":290,"line":1819},[288,8774,2157],{"class":294},[288,8776,7970],{"class":298},[288,8778,8779],{"class":290,"line":1825},[288,8780,8781],{"class":298},"    Student stu;\n",[288,8783,8784],{"class":290,"line":1846},[288,8785,1737],{"class":298},[288,8787,8788,8790,8792],{"class":290,"line":1851},[288,8789,302],{"class":294},[288,8791,2145],{"class":2135},[288,8793,6151],{"class":298},[288,8795,8796],{"class":290,"line":1865},[288,8797,1718],{"class":298},[288,8799,8800],{"class":290,"line":1870},[288,8801,8802],{"class":357},"    \u002F\u002F结构体嵌套结构体\n",[288,8804,8805],{"class":290,"line":1899},[288,8806,8807],{"class":357},"    \u002F\u002F创建老师\n",[288,8809,8810],{"class":290,"line":1904},[288,8811,8812],{"class":298},"    Teacher t;\n",[288,8814,8815,8818,8820,8822],{"class":290,"line":1921},[288,8816,8817],{"class":298},"    t.id",[288,8819,344],{"class":294},[288,8821,608],{"class":347},[288,8823,1463],{"class":298},[288,8825,8826,8829,8831,8834],{"class":290,"line":1926},[288,8827,8828],{"class":298},"    t.name",[288,8830,344],{"class":294},[288,8832,8833],{"class":403},"\"老王\"",[288,8835,1463],{"class":298},[288,8837,8838,8841,8843,8845],{"class":290,"line":1931},[288,8839,8840],{"class":298},"    t.age",[288,8842,344],{"class":294},[288,8844,947],{"class":347},[288,8846,1463],{"class":298},[288,8848,8849,8852,8854,8857],{"class":290,"line":1936},[288,8850,8851],{"class":298},"    t.stu.name",[288,8853,344],{"class":294},[288,8855,8856],{"class":403},"\"小王\"",[288,8858,8859],{"class":298},"；\n",[288,8861,8862,8865,8867,8869],{"class":290,"line":1950},[288,8863,8864],{"class":298},"    t.stu.age",[288,8866,344],{"class":294},[288,8868,997],{"class":347},[288,8870,1463],{"class":298},[288,8872,8873,8876,8878,8880],{"class":290,"line":1955},[288,8874,8875],{"class":298},"    t.stu.score",[288,8877,344],{"class":294},[288,8879,641],{"class":347},[288,8881,1463],{"class":298},[288,8883,8884],{"class":290,"line":2749},[288,8885,1737],{"class":298},[14,8887,8889],{"id":8888},"_45结构体做函数参数","4.5结构体做函数参数",[19,8891,8892],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[280,8894,8896],{"className":282,"code":8895,"language":284,"meta":205,"style":205},"#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",[25,8897,8898,8904,8914,8920,8926,8930,8934,8940,8946,8950,8955,8960,8977,8981,9014,9018,9023,9042,9046,9077,9081,9089,9093,9102,9114,9126,9138,9151,9159,9172,9184,9192],{"__ignoreMap":205},[288,8899,8900,8902],{"class":290,"line":291},[288,8901,2121],{"class":294},[288,8903,2124],{"class":403},[288,8905,8906,8908,8910,8912],{"class":290,"line":206},[288,8907,2129],{"class":294},[288,8909,2132],{"class":294},[288,8911,2136],{"class":2135},[288,8913,1463],{"class":298},[288,8915,8916,8918],{"class":290,"line":1352},[288,8917,2121],{"class":294},[288,8919,7922],{"class":403},[288,8921,8922,8924],{"class":290,"line":1367},[288,8923,7932],{"class":294},[288,8925,7935],{"class":2135},[288,8927,8928],{"class":290,"line":1373},[288,8929,1718],{"class":298},[288,8931,8932],{"class":290,"line":1387},[288,8933,7958],{"class":298},[288,8935,8936,8938],{"class":290,"line":1393},[288,8937,2157],{"class":294},[288,8939,7970],{"class":298},[288,8941,8942,8944],{"class":290,"line":1484},[288,8943,2157],{"class":294},[288,8945,7982],{"class":298},[288,8947,8948],{"class":290,"line":1490},[288,8949,4167],{"class":298},[288,8951,8952],{"class":290,"line":1502},[288,8953,8954],{"class":357},"\u002F\u002F打印学生信息的函数\n",[288,8956,8957],{"class":290,"line":1784},[288,8958,8959],{"class":357},"\u002F\u002F值传递\n",[288,8961,8962,8964,8967,8969,8971,8973,8975],{"class":290,"line":1789},[288,8963,5537],{"class":294},[288,8965,8966],{"class":2135}," printStudent1",[288,8968,299],{"class":298},[288,8970,7932],{"class":294},[288,8972,8071],{"class":2135},[288,8974,8601],{"class":5389},[288,8976,305],{"class":298},[288,8978,8979],{"class":290,"line":1795},[288,8980,1718],{"class":298},[288,8982,8983,8985,8987,8990,8992,8995,8997,9000,9002,9004,9006,9009,9011],{"class":290,"line":1800},[288,8984,6702],{"class":298},[288,8986,1341],{"class":294},[288,8988,8989],{"class":298}," s.name ",[288,8991,1341],{"class":294},[288,8993,8994],{"class":403}," \" \"",[288,8996,1617],{"class":294},[288,8998,8999],{"class":298}," s.age ",[288,9001,1341],{"class":294},[288,9003,8994],{"class":403},[288,9005,1617],{"class":294},[288,9007,9008],{"class":298}," s.score ",[288,9010,1341],{"class":294},[288,9012,9013],{"class":298}," endl;\n",[288,9015,9016],{"class":290,"line":1814},[288,9017,1737],{"class":298},[288,9019,9020],{"class":290,"line":1819},[288,9021,9022],{"class":357},"\u002F\u002F地址传递\n",[288,9024,9025,9027,9030,9032,9034,9036,9038,9040],{"class":290,"line":1825},[288,9026,5537],{"class":294},[288,9028,9029],{"class":2135}," printStudent2",[288,9031,299],{"class":298},[288,9033,7932],{"class":294},[288,9035,8071],{"class":2135},[288,9037,6691],{"class":294},[288,9039,992],{"class":5389},[288,9041,305],{"class":298},[288,9043,9044],{"class":290,"line":1846},[288,9045,1718],{"class":298},[288,9047,9048,9050,9052,9055,9057,9059,9061,9064,9066,9068,9070,9073,9075],{"class":290,"line":1851},[288,9049,6702],{"class":298},[288,9051,1341],{"class":294},[288,9053,9054],{"class":298}," s->name ",[288,9056,1341],{"class":294},[288,9058,8994],{"class":403},[288,9060,1617],{"class":294},[288,9062,9063],{"class":298}," s->age ",[288,9065,1341],{"class":294},[288,9067,8994],{"class":403},[288,9069,1617],{"class":294},[288,9071,9072],{"class":298}," s->score ",[288,9074,1341],{"class":294},[288,9076,9013],{"class":298},[288,9078,9079],{"class":290,"line":1865},[288,9080,1737],{"class":298},[288,9082,9083,9085,9087],{"class":290,"line":1870},[288,9084,302],{"class":294},[288,9086,2145],{"class":2135},[288,9088,2148],{"class":298},[288,9090,9091],{"class":290,"line":1899},[288,9092,1718],{"class":298},[288,9094,9095,9097,9099],{"class":290,"line":1904},[288,9096,8068],{"class":294},[288,9098,8071],{"class":2135},[288,9100,9101],{"class":298}," s;\n",[288,9103,9104,9107,9109,9112],{"class":290,"line":1921},[288,9105,9106],{"class":298},"    s.name ",[288,9108,344],{"class":294},[288,9110,9111],{"class":403}," \"张三\"",[288,9113,1463],{"class":298},[288,9115,9116,9119,9121,9124],{"class":290,"line":1926},[288,9117,9118],{"class":298},"    s.age ",[288,9120,344],{"class":294},[288,9122,9123],{"class":347}," 20",[288,9125,1463],{"class":298},[288,9127,9128,9131,9133,9136],{"class":290,"line":1931},[288,9129,9130],{"class":298},"    s.score ",[288,9132,344],{"class":294},[288,9134,9135],{"class":347}," 85",[288,9137,1463],{"class":298},[288,9139,9140,9142,9144,9147,9149],{"class":290,"line":1936},[288,9141,1723],{"class":298},[288,9143,1341],{"class":294},[288,9145,9146],{"class":403},"\"值传递:\"",[288,9148,1341],{"class":294},[288,9150,1364],{"class":298},[288,9152,9153,9156],{"class":290,"line":1950},[288,9154,9155],{"class":2135},"    printStudent1",[288,9157,9158],{"class":298},"(s);\n",[288,9160,9161,9163,9165,9168,9170],{"class":290,"line":1955},[288,9162,1723],{"class":298},[288,9164,1341],{"class":294},[288,9166,9167],{"class":403},"\"地址传递:\"",[288,9169,1341],{"class":294},[288,9171,1364],{"class":298},[288,9173,9174,9177,9179,9181],{"class":290,"line":2749},[288,9175,9176],{"class":2135},"    printStudent2",[288,9178,299],{"class":298},[288,9180,650],{"class":294},[288,9182,9183],{"class":298},"s); \n",[288,9185,9186,9188,9190],{"class":290,"line":2763},[288,9187,4262],{"class":294},[288,9189,4265],{"class":347},[288,9191,1463],{"class":298},[288,9193,9194],{"class":290,"line":2771},[288,9195,1737],{"class":298},[19,9197,9198],{},"注意：",[1304,9200,9201,9204],{},[246,9202,9203],{},"1.先定义结构体，不要在函数中写结构体的定义",[246,9205,9206],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9208,9210],{"id":9209},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9212,9213],{},"用const防止误操作",[280,9215,9217],{"className":282,"code":9216,"language":284,"meta":205,"style":205},"#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",[25,9218,9219,9225,9235,9241,9246,9250,9254,9260,9266,9270,9286,9290,9313,9317,9325,9329,9350,9357,9361],{"__ignoreMap":205},[288,9220,9221,9223],{"class":290,"line":291},[288,9222,2121],{"class":294},[288,9224,2124],{"class":403},[288,9226,9227,9229,9231,9233],{"class":290,"line":206},[288,9228,2129],{"class":294},[288,9230,2132],{"class":294},[288,9232,2136],{"class":2135},[288,9234,1463],{"class":298},[288,9236,9237,9239],{"class":290,"line":1352},[288,9238,2121],{"class":294},[288,9240,7922],{"class":403},[288,9242,9243],{"class":290,"line":1367},[288,9244,9245],{"class":298},"sctuct Student\n",[288,9247,9248],{"class":290,"line":1373},[288,9249,1718],{"class":298},[288,9251,9252],{"class":290,"line":1387},[288,9253,7958],{"class":298},[288,9255,9256,9258],{"class":290,"line":1393},[288,9257,2157],{"class":294},[288,9259,7970],{"class":298},[288,9261,9262,9264],{"class":290,"line":1484},[288,9263,2157],{"class":294},[288,9265,7982],{"class":298},[288,9267,9268],{"class":290,"line":1490},[288,9269,4167],{"class":298},[288,9271,9272,9274,9277,9279,9282,9284],{"class":290,"line":1502},[288,9273,5537],{"class":294},[288,9275,9276],{"class":2135}," printStudents",[288,9278,299],{"class":298},[288,9280,9281],{"class":2135},"student",[288,9283,8601],{"class":5389},[288,9285,305],{"class":298},[288,9287,9288],{"class":290,"line":1784},[288,9289,1718],{"class":298},[288,9291,9292,9294,9296,9299,9301,9304,9306,9309,9311],{"class":290,"line":1789},[288,9293,1723],{"class":298},[288,9295,1341],{"class":294},[288,9297,9298],{"class":298},"s.name",[288,9300,1341],{"class":294},[288,9302,9303],{"class":298},"s.age",[288,9305,1341],{"class":294},[288,9307,9308],{"class":298},"s.score",[288,9310,1341],{"class":294},[288,9312,1364],{"class":298},[288,9314,9315],{"class":290,"line":1795},[288,9316,1737],{"class":298},[288,9318,9319,9321,9323],{"class":290,"line":1800},[288,9320,302],{"class":294},[288,9322,2145],{"class":2135},[288,9324,6151],{"class":298},[288,9326,9327],{"class":290,"line":1814},[288,9328,1718],{"class":298},[288,9330,9331,9334,9336,9338,9340,9342,9344,9346,9348],{"class":290,"line":1819},[288,9332,9333],{"class":298},"    Student s",[288,9335,344],{"class":294},[288,9337,1193],{"class":298},[288,9339,8089],{"class":403},[288,9341,675],{"class":298},[288,9343,947],{"class":347},[288,9345,675],{"class":298},[288,9347,947],{"class":347},[288,9349,4167],{"class":298},[288,9351,9352,9355],{"class":290,"line":1825},[288,9353,9354],{"class":2135},"    printStudent",[288,9356,9158],{"class":298},[288,9358,9359],{"class":290,"line":1846},[288,9360,2572],{"emptyLinePlaceholder":217},[288,9362,9363],{"class":290,"line":1851},[288,9364,1737],{"class":298},[19,9366,9198],{},[1304,9368,9369,9372,9375],{},[246,9370,9371],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[246,9373,9374],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[246,9376,9377],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[280,9379,9381],{"className":282,"code":9380,"language":284,"meta":205,"style":205},"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",[25,9382,9383,9402,9406,9411,9431],{"__ignoreMap":205},[288,9384,9385,9387,9389,9391,9393,9396,9398,9400],{"class":290,"line":291},[288,9386,5537],{"class":294},[288,9388,9276],{"class":2135},[288,9390,299],{"class":298},[288,9392,6965],{"class":294},[288,9394,9395],{"class":2135}," student",[288,9397,6691],{"class":294},[288,9399,992],{"class":5389},[288,9401,305],{"class":298},[288,9403,9404],{"class":290,"line":206},[288,9405,1718],{"class":298},[288,9407,9408],{"class":290,"line":1352},[288,9409,9410],{"class":357},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[288,9412,9413,9415,9417,9419,9421,9423,9425,9427,9429],{"class":290,"line":1367},[288,9414,1723],{"class":298},[288,9416,1341],{"class":294},[288,9418,9298],{"class":298},[288,9420,1341],{"class":294},[288,9422,9303],{"class":298},[288,9424,1341],{"class":294},[288,9426,9308],{"class":298},[288,9428,1341],{"class":294},[288,9430,1364],{"class":298},[288,9432,9433],{"class":290,"line":1373},[288,9434,1737],{"class":298},[14,9436,9438],{"id":9437},"_47案例","4.7案例",[243,9440,9441],{},[246,9442,9443],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[280,9445,9447],{"className":282,"code":9446,"language":284,"meta":205,"style":205},"#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",[25,9448,9449,9455,9465,9471,9478,9482,9488,9492,9497,9503,9509,9513,9517,9523,9527,9532,9537,9550,9554,9559,9585,9589,9601,9628,9632,9644,9654,9658,9663,9692,9696,9708,9717,9744,9755,9765,9769,9773,9777,9782,9806,9810,9834,9838,9857,9883,9887,9912,9935,9959,9964,9969,9974,9983,9988,9994,10015,10021,10035,10041,10068,10077,10083,10091,10096],{"__ignoreMap":205},[288,9450,9451,9453],{"class":290,"line":291},[288,9452,2121],{"class":294},[288,9454,2124],{"class":403},[288,9456,9457,9459,9461,9463],{"class":290,"line":206},[288,9458,2129],{"class":294},[288,9460,2132],{"class":294},[288,9462,2136],{"class":2135},[288,9464,1463],{"class":298},[288,9466,9467,9469],{"class":290,"line":1352},[288,9468,2121],{"class":294},[288,9470,7922],{"class":403},[288,9472,9473,9475],{"class":290,"line":1367},[288,9474,2121],{"class":294},[288,9476,9477],{"class":403},"\u003Cctime>\n",[288,9479,9480],{"class":290,"line":1373},[288,9481,8711],{"class":357},[288,9483,9484,9486],{"class":290,"line":1387},[288,9485,7932],{"class":294},[288,9487,7935],{"class":2135},[288,9489,9490],{"class":290,"line":1393},[288,9491,1718],{"class":298},[288,9493,9494],{"class":290,"line":1484},[288,9495,9496],{"class":298},"    string sName;\n",[288,9498,9499,9501],{"class":290,"line":1490},[288,9500,2157],{"class":294},[288,9502,7970],{"class":298},[288,9504,9505,9507],{"class":290,"line":1502},[288,9506,2157],{"class":294},[288,9508,7982],{"class":298},[288,9510,9511],{"class":290,"line":1784},[288,9512,4167],{"class":298},[288,9514,9515],{"class":290,"line":1789},[288,9516,8748],{"class":357},[288,9518,9519,9521],{"class":290,"line":1795},[288,9520,7932],{"class":294},[288,9522,8755],{"class":2135},[288,9524,9525],{"class":290,"line":1800},[288,9526,1718],{"class":298},[288,9528,9529],{"class":290,"line":1814},[288,9530,9531],{"class":298},"    string tName;\n",[288,9533,9534],{"class":290,"line":1819},[288,9535,9536],{"class":357},"    \u002F\u002F学生数组\n",[288,9538,9539,9541,9543,9546,9548],{"class":290,"line":1825},[288,9540,8068],{"class":294},[288,9542,8071],{"class":2135},[288,9544,9545],{"class":298}," sArray[",[288,9547,616],{"class":347},[288,9549,4862],{"class":298},[288,9551,9552],{"class":290,"line":1846},[288,9553,4167],{"class":298},[288,9555,9556],{"class":290,"line":1851},[288,9557,9558],{"class":357},"\u002F\u002F给老师和学生赋值的函数\n",[288,9560,9561,9563,9566,9568,9570,9573,9576,9579,9581,9583],{"class":290,"line":1865},[288,9562,5537],{"class":294},[288,9564,9565],{"class":2135}," allocateSpace",[288,9567,299],{"class":298},[288,9569,7932],{"class":294},[288,9571,9572],{"class":2135}," Teacher",[288,9574,9575],{"class":5389}," tArray",[288,9577,9578],{"class":298},"[],",[288,9580,302],{"class":294},[288,9582,7504],{"class":5389},[288,9584,305],{"class":298},[288,9586,9587],{"class":290,"line":1870},[288,9588,1718],{"class":298},[288,9590,9591,9594,9596,9599],{"class":290,"line":1899},[288,9592,9593],{"class":298},"    string nameSeed",[288,9595,344],{"class":294},[288,9597,9598],{"class":403},"\"ABCDE\"",[288,9600,1463],{"class":298},[288,9602,9603,9605,9607,9609,9612,9614,9616,9619,9621,9624,9626],{"class":290,"line":1904},[288,9604,3373],{"class":294},[288,9606,1830],{"class":298},[288,9608,302],{"class":294},[288,9610,9611],{"class":298}," i ",[288,9613,344],{"class":294},[288,9615,4265],{"class":347},[288,9617,9618],{"class":298},"; i ",[288,9620,1207],{"class":294},[288,9622,9623],{"class":298}," len; i",[288,9625,2464],{"class":294},[288,9627,305],{"class":298},[288,9629,9630],{"class":290,"line":1921},[288,9631,2202],{"class":298},[288,9633,9634,9637,9639,9642],{"class":290,"line":1926},[288,9635,9636],{"class":298},"        tArray[i].tName ",[288,9638,344],{"class":294},[288,9640,9641],{"class":403}," \"Teacher_\"",[288,9643,1463],{"class":298},[288,9645,9646,9648,9651],{"class":290,"line":1931},[288,9647,9636],{"class":298},[288,9649,9650],{"class":294},"+=",[288,9652,9653],{"class":298},"nameSeed[i];\n",[288,9655,9656],{"class":290,"line":1936},[288,9657,2572],{"emptyLinePlaceholder":217},[288,9659,9660],{"class":290,"line":1950},[288,9661,9662],{"class":357},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[288,9664,9665,9667,9669,9671,9674,9676,9678,9681,9683,9685,9688,9690],{"class":290,"line":1955},[288,9666,3575],{"class":294},[288,9668,1830],{"class":298},[288,9670,302],{"class":294},[288,9672,9673],{"class":298}," j ",[288,9675,344],{"class":294},[288,9677,4265],{"class":347},[288,9679,9680],{"class":298},"; j ",[288,9682,1207],{"class":294},[288,9684,2320],{"class":347},[288,9686,9687],{"class":298},"; j",[288,9689,2464],{"class":294},[288,9691,305],{"class":298},[288,9693,9694],{"class":290,"line":2749},[288,9695,2682],{"class":298},[288,9697,9698,9701,9703,9706],{"class":290,"line":2763},[288,9699,9700],{"class":298},"            tArray[i].sArray[j].sName ",[288,9702,344],{"class":294},[288,9704,9705],{"class":403}," \"Student_\"",[288,9707,1463],{"class":298},[288,9709,9710,9712,9714],{"class":290,"line":2771},[288,9711,9700],{"class":298},[288,9713,9650],{"class":294},[288,9715,9716],{"class":298}," nameSeed[j];\n",[288,9718,9719,9722,9725,9727,9729,9731,9733,9735,9737,9739,9741],{"class":290,"line":2776},[288,9720,9721],{"class":294},"            int",[288,9723,9724],{"class":298}," random",[288,9726,344],{"class":294},[288,9728,2596],{"class":2135},[288,9730,2599],{"class":298},[288,9732,625],{"class":294},[288,9734,1204],{"class":347},[288,9736,778],{"class":294},[288,9738,698],{"class":347},[288,9740,354],{"class":298},[288,9742,9743],{"class":357},"\u002F\u002F40~99\n",[288,9745,9746,9749,9751,9753],{"class":290,"line":2782},[288,9747,9748],{"class":298},"            tArray[i].sArray[j].age ",[288,9750,344],{"class":294},[288,9752,9123],{"class":347},[288,9754,1463],{"class":298},[288,9756,9757,9760,9762],{"class":290,"line":2788},[288,9758,9759],{"class":298},"            tArray[i].sArray[j].score ",[288,9761,344],{"class":294},[288,9763,9764],{"class":298}," random;\n",[288,9766,9767],{"class":290,"line":2793},[288,9768,2701],{"class":298},[288,9770,9771],{"class":290,"line":8121},[288,9772,2359],{"class":298},[288,9774,9775],{"class":290,"line":8145},[288,9776,1737],{"class":298},[288,9778,9779],{"class":290,"line":8150},[288,9780,9781],{"class":357},"\u002F\u002F打印所有信息的函数\n",[288,9783,9784,9786,9789,9791,9793,9795,9797,9800,9802,9804],{"class":290,"line":8156},[288,9785,5537],{"class":294},[288,9787,9788],{"class":2135}," printInfo",[288,9790,299],{"class":298},[288,9792,7932],{"class":294},[288,9794,9572],{"class":2135},[288,9796,9575],{"class":5389},[288,9798,9799],{"class":298},"[], ",[288,9801,302],{"class":294},[288,9803,7504],{"class":5389},[288,9805,305],{"class":298},[288,9807,9808],{"class":290,"line":8183},[288,9809,1718],{"class":298},[288,9811,9812,9814,9816,9818,9820,9822,9824,9826,9828,9830,9832],{"class":290,"line":8188},[288,9813,3373],{"class":294},[288,9815,1830],{"class":298},[288,9817,302],{"class":294},[288,9819,9611],{"class":298},[288,9821,344],{"class":294},[288,9823,4265],{"class":347},[288,9825,9618],{"class":298},[288,9827,1207],{"class":294},[288,9829,9623],{"class":298},[288,9831,2464],{"class":294},[288,9833,305],{"class":298},[288,9835,9836],{"class":290,"line":8194},[288,9837,2202],{"class":298},[288,9839,9840,9843,9845,9848,9850,9853,9855],{"class":290,"line":8206},[288,9841,9842],{"class":298},"        cout ",[288,9844,1341],{"class":294},[288,9846,9847],{"class":403}," \"Teacher: \"",[288,9849,1617],{"class":294},[288,9851,9852],{"class":298}," tArray[i].tName ",[288,9854,1341],{"class":294},[288,9856,9013],{"class":298},[288,9858,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881],{"class":290,"line":8218},[288,9860,3575],{"class":294},[288,9862,1830],{"class":298},[288,9864,302],{"class":294},[288,9866,9673],{"class":298},[288,9868,344],{"class":294},[288,9870,4265],{"class":347},[288,9872,9680],{"class":298},[288,9874,1207],{"class":294},[288,9876,2320],{"class":347},[288,9878,9687],{"class":298},[288,9880,2464],{"class":294},[288,9882,305],{"class":298},[288,9884,9885],{"class":290,"line":8230},[288,9886,2682],{"class":298},[288,9888,9890,9893,9895,9898,9900,9903,9905,9908,9910],{"class":290,"line":9889},47,[288,9891,9892],{"class":298},"            cout ",[288,9894,1341],{"class":294},[288,9896,9897],{"class":403}," \"",[288,9899,1403],{"class":347},[288,9901,9902],{"class":403},"Student: \"",[288,9904,1617],{"class":294},[288,9906,9907],{"class":298}," tArray[i].sArray[j].sName",[288,9909,1341],{"class":294},[288,9911,1364],{"class":298},[288,9913,9915,9917,9919,9921,9923,9926,9928,9931,9933],{"class":290,"line":9914},48,[288,9916,9892],{"class":298},[288,9918,1341],{"class":294},[288,9920,9897],{"class":403},[288,9922,1403],{"class":347},[288,9924,9925],{"class":403},"Age: \"",[288,9927,1617],{"class":294},[288,9929,9930],{"class":298}," tArray[i].sArray[j].age ",[288,9932,1341],{"class":294},[288,9934,9013],{"class":298},[288,9936,9938,9940,9942,9944,9946,9949,9951,9954,9956],{"class":290,"line":9937},49,[288,9939,9892],{"class":298},[288,9941,1341],{"class":294},[288,9943,9897],{"class":403},[288,9945,1403],{"class":347},[288,9947,9948],{"class":403},"Score: \"",[288,9950,1617],{"class":294},[288,9952,9953],{"class":298}," tArray[i].sArray[j].score ",[288,9955,1341],{"class":294},[288,9957,9958],{"class":298}," endl;   \n",[288,9960,9962],{"class":290,"line":9961},50,[288,9963,2701],{"class":298},[288,9965,9967],{"class":290,"line":9966},51,[288,9968,2359],{"class":298},[288,9970,9972],{"class":290,"line":9971},52,[288,9973,1737],{"class":298},[288,9975,9977,9979,9981],{"class":290,"line":9976},53,[288,9978,302],{"class":294},[288,9980,2145],{"class":2135},[288,9982,2148],{"class":298},[288,9984,9986],{"class":290,"line":9985},54,[288,9987,1718],{"class":298},[288,9989,9991],{"class":290,"line":9990},55,[288,9992,9993],{"class":357},"    \u002F\u002F随机数种子\n",[288,9995,9997,9999,10001,10003,10005,10007,10009,10011,10013],{"class":290,"line":9996},56,[288,9998,2545],{"class":2135},[288,10000,2548],{"class":298},[288,10002,2551],{"class":294},[288,10004,2554],{"class":294},[288,10006,726],{"class":298},[288,10008,2559],{"class":2135},[288,10010,299],{"class":298},[288,10012,2564],{"class":347},[288,10014,2567],{"class":298},[288,10016,10018],{"class":290,"line":10017},57,[288,10019,10020],{"class":357},"    \u002F\u002F1.创建3名老师的数组\n",[288,10022,10024,10026,10028,10031,10033],{"class":290,"line":10023},58,[288,10025,8068],{"class":294},[288,10027,9572],{"class":2135},[288,10029,10030],{"class":298}," tArray[",[288,10032,370],{"class":347},[288,10034,4862],{"class":298},[288,10036,10038],{"class":290,"line":10037},59,[288,10039,10040],{"class":357},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[288,10042,10044,10046,10049,10051,10054,10057,10059,10061,10064,10066],{"class":290,"line":10043},60,[288,10045,2157],{"class":294},[288,10047,10048],{"class":298}," len ",[288,10050,344],{"class":294},[288,10052,10053],{"class":294}," sizeof",[288,10055,10056],{"class":298},"(tArray) ",[288,10058,881],{"class":294},[288,10060,10053],{"class":294},[288,10062,10063],{"class":298},"(tArray[",[288,10065,490],{"class":347},[288,10067,4028],{"class":298},[288,10069,10071,10074],{"class":290,"line":10070},61,[288,10072,10073],{"class":2135},"    allocateSpace",[288,10075,10076],{"class":298},"(tArray, len);\n",[288,10078,10080],{"class":290,"line":10079},62,[288,10081,10082],{"class":357},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[288,10084,10086,10089],{"class":290,"line":10085},63,[288,10087,10088],{"class":2135},"    printInfo",[288,10090,10076],{"class":298},[288,10092,10094],{"class":290,"line":10093},64,[288,10095,2572],{"emptyLinePlaceholder":217},[288,10097,10099],{"class":290,"line":10098},65,[288,10100,1737],{"class":298},[243,10102,10103],{"start":206},[246,10104,10105,10108],{},[448,10106,10107],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10110,10111],{},"五名英雄信息如下：",[280,10113,10117],{"className":10114,"code":10115,"language":10116,"meta":205,"style":205},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[25,10118,10119,10137,10154,10171,10188],{"__ignoreMap":205},[288,10120,10121,10123,10126,10128,10130,10132,10135],{"class":290,"line":291},[288,10122,5089],{"class":298},[288,10124,10125],{"class":403},"\"刘备\"",[288,10127,675],{"class":298},[288,10129,1072],{"class":347},[288,10131,675],{"class":298},[288,10133,10134],{"class":403},"\"男\"",[288,10136,5102],{"class":298},[288,10138,10139,10141,10144,10146,10148,10150,10152],{"class":290,"line":206},[288,10140,5089],{"class":298},[288,10142,10143],{"class":403},"\"关羽\"",[288,10145,675],{"class":298},[288,10147,1047],{"class":347},[288,10149,675],{"class":298},[288,10151,10134],{"class":403},[288,10153,5102],{"class":298},[288,10155,10156,10158,10161,10163,10165,10167,10169],{"class":290,"line":1352},[288,10157,5089],{"class":298},[288,10159,10160],{"class":403},"\"张飞\"",[288,10162,675],{"class":298},[288,10164,997],{"class":347},[288,10166,675],{"class":298},[288,10168,10134],{"class":403},[288,10170,5102],{"class":298},[288,10172,10173,10175,10178,10180,10182,10184,10186],{"class":290,"line":1367},[288,10174,5089],{"class":298},[288,10176,10177],{"class":403},"\"赵云\"",[288,10179,675],{"class":298},[288,10181,1022],{"class":347},[288,10183,675],{"class":298},[288,10185,10134],{"class":403},[288,10187,5102],{"class":298},[288,10189,10190,10192,10195,10197,10199,10201,10204],{"class":290,"line":1373},[288,10191,5089],{"class":298},[288,10193,10194],{"class":403},"\"貂蝉\"",[288,10196,675],{"class":298},[288,10198,972],{"class":347},[288,10200,675],{"class":298},[288,10202,10203],{"class":403},"\"女\"",[288,10205,5102],{"class":298},[19,10207,10208],{},"代码：",[280,10210,10212],{"className":282,"code":10211,"language":284,"meta":205,"style":205},"#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",[25,10213,10214,10220,10230,10236,10243,10247,10251,10257,10262,10266,10271,10294,10298,10323,10327,10360,10365,10394,10399,10414,10440,10460,10465,10470,10474,10478,10483,10505,10509,10533,10537,10599,10603,10607,10615,10619,10624,10635,10639,10655,10671,10687,10703,10719,10723,10743,10765,10770,10783,10790,10795,10801,10806,10819,10825],{"__ignoreMap":205},[288,10215,10216,10218],{"class":290,"line":291},[288,10217,2121],{"class":294},[288,10219,2124],{"class":403},[288,10221,10222,10224,10226,10228],{"class":290,"line":206},[288,10223,2129],{"class":294},[288,10225,2132],{"class":294},[288,10227,2136],{"class":2135},[288,10229,1463],{"class":298},[288,10231,10232,10234],{"class":290,"line":1352},[288,10233,2121],{"class":294},[288,10235,7922],{"class":403},[288,10237,10238,10240],{"class":290,"line":1367},[288,10239,7932],{"class":294},[288,10241,10242],{"class":2135}," Sanguo\n",[288,10244,10245],{"class":290,"line":1373},[288,10246,1718],{"class":298},[288,10248,10249],{"class":290,"line":1387},[288,10250,7958],{"class":298},[288,10252,10253,10255],{"class":290,"line":1393},[288,10254,2157],{"class":294},[288,10256,7970],{"class":298},[288,10258,10259],{"class":290,"line":1484},[288,10260,10261],{"class":298},"    string gender;\n",[288,10263,10264],{"class":290,"line":1490},[288,10265,4167],{"class":298},[288,10267,10268],{"class":290,"line":1502},[288,10269,10270],{"class":357},"\u002F\u002F定义排序函数\n",[288,10272,10273,10275,10277,10279,10282,10284,10286,10288,10290,10292],{"class":290,"line":1784},[288,10274,5537],{"class":294},[288,10276,7489],{"class":2135},[288,10278,299],{"class":298},[288,10280,10281],{"class":2135},"Sanguo",[288,10283,6691],{"class":294},[288,10285,992],{"class":5389},[288,10287,675],{"class":298},[288,10289,302],{"class":294},[288,10291,7504],{"class":5389},[288,10293,305],{"class":298},[288,10295,10296],{"class":290,"line":1789},[288,10297,1718],{"class":298},[288,10299,10300,10302,10304,10306,10308,10310,10312,10314,10316,10319,10321],{"class":290,"line":1795},[288,10301,3373],{"class":294},[288,10303,299],{"class":298},[288,10305,302],{"class":294},[288,10307,3204],{"class":298},[288,10309,344],{"class":294},[288,10311,490],{"class":347},[288,10313,3211],{"class":298},[288,10315,1207],{"class":294},[288,10317,10318],{"class":298},"len;i",[288,10320,2464],{"class":294},[288,10322,305],{"class":298},[288,10324,10325],{"class":290,"line":1800},[288,10326,2202],{"class":298},[288,10328,10329,10332,10334,10336,10338,10340,10342,10344,10346,10348,10350,10352,10354,10356,10358],{"class":290,"line":1814},[288,10330,10331],{"class":294},"     for",[288,10333,1830],{"class":298},[288,10335,302],{"class":294},[288,10337,3582],{"class":298},[288,10339,344],{"class":294},[288,10341,490],{"class":347},[288,10343,3589],{"class":298},[288,10345,1207],{"class":294},[288,10347,7531],{"class":298},[288,10349,829],{"class":294},[288,10351,516],{"class":347},[288,10353,829],{"class":294},[288,10355,3722],{"class":298},[288,10357,2464],{"class":294},[288,10359,305],{"class":298},[288,10361,10362],{"class":290,"line":1819},[288,10363,10364],{"class":298},"     {\n",[288,10366,10367,10370,10373,10375,10378,10380,10383,10385,10387,10389,10391],{"class":290,"line":1825},[288,10368,10369],{"class":294},"         if",[288,10371,10372],{"class":298}," ((s",[288,10374,778],{"class":294},[288,10376,10377],{"class":298},"j)->age ",[288,10379,1257],{"class":294},[288,10381,10382],{"class":298}," (s",[288,10384,778],{"class":294},[288,10386,764],{"class":298},[288,10388,778],{"class":294},[288,10390,516],{"class":347},[288,10392,10393],{"class":298},")->age)\n",[288,10395,10396],{"class":290,"line":1846},[288,10397,10398],{"class":298},"         {\n",[288,10400,10401,10404,10406,10409,10411],{"class":290,"line":1851},[288,10402,10403],{"class":298},"             Sanguo temp",[288,10405,7326],{"class":294},[288,10407,10408],{"class":298},"(s",[288,10410,778],{"class":294},[288,10412,10413],{"class":298},"j);\n",[288,10415,10416,10419,10421,10423,10426,10428,10430,10432,10434,10436,10438],{"class":290,"line":1865},[288,10417,10418],{"class":294},"             *",[288,10420,10408],{"class":298},[288,10422,778],{"class":294},[288,10424,10425],{"class":298},"j)",[288,10427,7326],{"class":294},[288,10429,10408],{"class":298},[288,10431,778],{"class":294},[288,10433,764],{"class":298},[288,10435,778],{"class":294},[288,10437,516],{"class":347},[288,10439,2891],{"class":298},[288,10441,10442,10444,10446,10448,10450,10452,10454,10456,10458],{"class":290,"line":1870},[288,10443,10418],{"class":294},[288,10445,10408],{"class":298},[288,10447,778],{"class":294},[288,10449,764],{"class":298},[288,10451,778],{"class":294},[288,10453,516],{"class":347},[288,10455,726],{"class":298},[288,10457,344],{"class":294},[288,10459,4452],{"class":298},[288,10461,10462],{"class":290,"line":1899},[288,10463,10464],{"class":298},"         }\n",[288,10466,10467],{"class":290,"line":1904},[288,10468,10469],{"class":298},"     }\n",[288,10471,10472],{"class":290,"line":1921},[288,10473,2359],{"class":298},[288,10475,10476],{"class":290,"line":1926},[288,10477,1737],{"class":298},[288,10479,10480],{"class":290,"line":1931},[288,10481,10482],{"class":357},"\u002F\u002F定义打印函数\n",[288,10484,10485,10487,10489,10491,10493,10495,10497,10499,10501,10503],{"class":290,"line":1936},[288,10486,5537],{"class":294},[288,10488,9788],{"class":2135},[288,10490,299],{"class":298},[288,10492,10281],{"class":2135},[288,10494,6691],{"class":294},[288,10496,992],{"class":5389},[288,10498,675],{"class":298},[288,10500,302],{"class":294},[288,10502,7504],{"class":5389},[288,10504,305],{"class":298},[288,10506,10507],{"class":290,"line":1950},[288,10508,1718],{"class":298},[288,10510,10511,10513,10515,10517,10519,10521,10523,10525,10527,10529,10531],{"class":290,"line":1955},[288,10512,3373],{"class":294},[288,10514,1830],{"class":298},[288,10516,302],{"class":294},[288,10518,3204],{"class":298},[288,10520,344],{"class":294},[288,10522,490],{"class":347},[288,10524,3211],{"class":298},[288,10526,1207],{"class":294},[288,10528,10318],{"class":298},[288,10530,2464],{"class":294},[288,10532,305],{"class":298},[288,10534,10535],{"class":290,"line":2749},[288,10536,2202],{"class":298},[288,10538,10539,10541,10543,10545,10547,10550,10552,10554,10556,10559,10561,10563,10565,10568,10570,10572,10574,10577,10579,10581,10583,10586,10588,10590,10592,10595,10597],{"class":290,"line":2763},[288,10540,3623],{"class":298},[288,10542,1341],{"class":294},[288,10544,109],{"class":403},[288,10546,1403],{"class":347},[288,10548,10549],{"class":403},"姓名：\"",[288,10551,1341],{"class":294},[288,10553,10408],{"class":298},[288,10555,778],{"class":294},[288,10557,10558],{"class":298},"i)->name",[288,10560,1341],{"class":294},[288,10562,109],{"class":403},[288,10564,1403],{"class":347},[288,10566,10567],{"class":403},"年龄：\"",[288,10569,1341],{"class":294},[288,10571,10408],{"class":298},[288,10573,778],{"class":294},[288,10575,10576],{"class":298},"i)->age",[288,10578,1341],{"class":294},[288,10580,109],{"class":403},[288,10582,1403],{"class":347},[288,10584,10585],{"class":403},"性别：\"",[288,10587,1341],{"class":294},[288,10589,10408],{"class":298},[288,10591,778],{"class":294},[288,10593,10594],{"class":298},"i)->gender",[288,10596,1341],{"class":294},[288,10598,1364],{"class":298},[288,10600,10601],{"class":290,"line":2771},[288,10602,2359],{"class":298},[288,10604,10605],{"class":290,"line":2776},[288,10606,1737],{"class":298},[288,10608,10609,10611,10613],{"class":290,"line":2782},[288,10610,302],{"class":294},[288,10612,2145],{"class":2135},[288,10614,2148],{"class":298},[288,10616,10617],{"class":290,"line":2788},[288,10618,1718],{"class":298},[288,10620,10621],{"class":290,"line":2793},[288,10622,10623],{"class":357},"    \u002F\u002F定义结构体变量\n",[288,10625,10626,10629,10631,10633],{"class":290,"line":8121},[288,10627,10628],{"class":298},"    Sanguo s1[",[288,10630,616],{"class":347},[288,10632,1237],{"class":298},[288,10634,5080],{"class":294},[288,10636,10637],{"class":290,"line":8145},[288,10638,2202],{"class":298},[288,10640,10641,10643,10645,10647,10649,10651,10653],{"class":290,"line":8150},[288,10642,5089],{"class":298},[288,10644,10125],{"class":403},[288,10646,675],{"class":298},[288,10648,1072],{"class":347},[288,10650,675],{"class":298},[288,10652,10134],{"class":403},[288,10654,5102],{"class":298},[288,10656,10657,10659,10661,10663,10665,10667,10669],{"class":290,"line":8156},[288,10658,5089],{"class":298},[288,10660,10143],{"class":403},[288,10662,675],{"class":298},[288,10664,1047],{"class":347},[288,10666,675],{"class":298},[288,10668,10134],{"class":403},[288,10670,5102],{"class":298},[288,10672,10673,10675,10677,10679,10681,10683,10685],{"class":290,"line":8183},[288,10674,5089],{"class":298},[288,10676,10160],{"class":403},[288,10678,675],{"class":298},[288,10680,997],{"class":347},[288,10682,675],{"class":298},[288,10684,10134],{"class":403},[288,10686,5102],{"class":298},[288,10688,10689,10691,10693,10695,10697,10699,10701],{"class":290,"line":8188},[288,10690,5089],{"class":298},[288,10692,10177],{"class":403},[288,10694,675],{"class":298},[288,10696,1022],{"class":347},[288,10698,675],{"class":298},[288,10700,10134],{"class":403},[288,10702,5102],{"class":298},[288,10704,10705,10707,10709,10711,10713,10715,10717],{"class":290,"line":8194},[288,10706,5089],{"class":298},[288,10708,10194],{"class":403},[288,10710,675],{"class":298},[288,10712,972],{"class":347},[288,10714,675],{"class":298},[288,10716,10203],{"class":403},[288,10718,5102],{"class":298},[288,10720,10721],{"class":290,"line":8206},[288,10722,5123],{"class":298},[288,10724,10725,10727,10729,10731,10734,10736,10739,10741],{"class":290,"line":8218},[288,10726,2157],{"class":294},[288,10728,7504],{"class":298},[288,10730,4375],{"class":294},[288,10732,10733],{"class":298},"(s1)",[288,10735,4381],{"class":294},[288,10737,10738],{"class":298},"(s1[",[288,10740,490],{"class":347},[288,10742,4028],{"class":298},[288,10744,10745,10748,10750,10753,10755,10758,10761,10763],{"class":290,"line":8230},[288,10746,10747],{"class":298},"    Sanguo ",[288,10749,752],{"class":294},[288,10751,10752],{"class":298},"s ",[288,10754,344],{"class":294},[288,10756,10757],{"class":294}," &",[288,10759,10760],{"class":298},"s1[",[288,10762,490],{"class":347},[288,10764,4862],{"class":298},[288,10766,10767],{"class":290,"line":9889},[288,10768,10769],{"class":357},"    \u002F\u002F排序前：\n",[288,10771,10772,10774,10776,10779,10781],{"class":290,"line":9914},[288,10773,6702],{"class":298},[288,10775,1341],{"class":294},[288,10777,10778],{"class":403}," \"排序前：\"",[288,10780,1617],{"class":294},[288,10782,9013],{"class":298},[288,10784,10785,10787],{"class":290,"line":9937},[288,10786,10088],{"class":2135},[288,10788,10789],{"class":298},"(s,len);\n",[288,10791,10792],{"class":290,"line":9961},[288,10793,10794],{"class":357},"    \u002F\u002F调用排序函数\n",[288,10796,10797,10799],{"class":290,"line":9966},[288,10798,7771],{"class":2135},[288,10800,10789],{"class":298},[288,10802,10803],{"class":290,"line":9971},[288,10804,10805],{"class":357},"    \u002F\u002F排序后\n",[288,10807,10808,10810,10812,10815,10817],{"class":290,"line":9976},[288,10809,6702],{"class":298},[288,10811,1341],{"class":294},[288,10813,10814],{"class":403}," \"排序后：\"",[288,10816,1617],{"class":294},[288,10818,9013],{"class":298},[288,10820,10821,10823],{"class":290,"line":9985},[288,10822,10088],{"class":2135},[288,10824,10789],{"class":298},[288,10826,10827],{"class":290,"line":9990},[288,10828,1737],{"class":298},[19,10830,10831,10832,10834],{},"注意：使用指针时直接用传首地址**&s",[288,10833,490],{},"**",[5299,10836,10837],{},"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":205,"searchDepth":206,"depth":206,"links":10839},[10840,10841,10842,10843,10844,10845,10846],{"id":7876,"depth":206,"text":7877},{"id":8238,"depth":206,"text":8239},{"id":8507,"depth":206,"text":8508},{"id":8672,"depth":206,"text":8673},{"id":8888,"depth":206,"text":8889},{"id":9209,"depth":206,"text":9210},{"id":9437,"depth":206,"text":9438},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7865,"description":7873},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10853,"title":10854,"body":10855,"description":205,"extension":215,"meta":12198,"navigation":217,"path":12199,"seo":12200,"stem":12201,"__hash__":12202},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10856,"toc":12192},[10857,10860,10864,10870,10884,10889,10892,10896,10903,10909,10912,10919,10925,10930,10933,10936,10939,11503,11506,11520,11524,11529,11545,11685,11688,11694,11697,11702,11710,11818,11821,11826,11829,11834,11837,11843,11846,12189],[10,10858,10854],{"id":10859},"_5程序内存模型",[14,10861,10863],{"id":10862},"_51内存分区模型","5.1内存分区模型",[19,10865,10866,10867],{},"C++程序在执行时，将内存大方向划分为",[448,10868,10869],{},"4个区域",[1304,10871,10872,10875,10878,10881],{},[246,10873,10874],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[246,10876,10877],{},"全局区：存放全局变量和静态变量以及常量",[246,10879,10880],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[246,10882,10883],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10885,10886],{},[448,10887,10888],{},"内存四区意义：",[19,10890,10891],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[260,10893,10895],{"id":10894},"_511程序运行前","5.1.1程序运行前",[19,10897,10898,10899,10902],{},"​\t在程序编译后，生成了exe可执行程序，",[448,10900,10901],{},"未执行该程序前","分为两个区域",[19,10904,10905,10906],{},"​\t",[448,10907,10908],{},"代码区：",[19,10910,10911],{},"​\t\t存放 CPU 执行的机器指令",[19,10913,10914,10915,10918],{},"​\t\t代码区是",[448,10916,10917],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10920,10914,10921,10924],{},[448,10922,10923],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10926,10905,10927],{},[448,10928,10929],{},"全局区：",[19,10931,10932],{},"​\t\t全局变量和静态变量存放在此.",[19,10934,10935],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10937,10938],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[280,10940,10942],{"className":282,"code":10941,"language":284,"meta":205,"style":205},"\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",[25,10943,10944,10949,10962,10975,10979,10984,10999,11014,11018,11027,11031,11036,11049,11062,11066,11071,11097,11123,11127,11154,11180,11184,11189,11205,11220,11224,11250,11276,11280,11305,11330,11334,11360,11386,11390,11406,11421,11447,11473,11477,11487,11491,11499],{"__ignoreMap":205},[288,10945,10946],{"class":290,"line":291},[288,10947,10948],{"class":357},"\u002F\u002F全局变量\n",[288,10950,10951,10953,10956,10958,10960],{"class":290,"line":206},[288,10952,302],{"class":294},[288,10954,10955],{"class":298}," g_a ",[288,10957,344],{"class":294},[288,10959,2210],{"class":347},[288,10961,1463],{"class":298},[288,10963,10964,10966,10969,10971,10973],{"class":290,"line":1352},[288,10965,302],{"class":294},[288,10967,10968],{"class":298}," g_b ",[288,10970,344],{"class":294},[288,10972,2210],{"class":347},[288,10974,1463],{"class":298},[288,10976,10977],{"class":290,"line":1367},[288,10978,2572],{"emptyLinePlaceholder":217},[288,10980,10981],{"class":290,"line":1373},[288,10982,10983],{"class":357},"\u002F\u002F全局常量\n",[288,10985,10986,10988,10990,10993,10995,10997],{"class":290,"line":1387},[288,10987,6965],{"class":294},[288,10989,2554],{"class":294},[288,10991,10992],{"class":298}," c_g_a ",[288,10994,344],{"class":294},[288,10996,2210],{"class":347},[288,10998,1463],{"class":298},[288,11000,11001,11003,11005,11008,11010,11012],{"class":290,"line":1393},[288,11002,6965],{"class":294},[288,11004,2554],{"class":294},[288,11006,11007],{"class":298}," c_g_b ",[288,11009,344],{"class":294},[288,11011,2210],{"class":347},[288,11013,1463],{"class":298},[288,11015,11016],{"class":290,"line":1484},[288,11017,2572],{"emptyLinePlaceholder":217},[288,11019,11020,11022,11024],{"class":290,"line":1490},[288,11021,302],{"class":294},[288,11023,2145],{"class":2135},[288,11025,11026],{"class":298},"() {\n",[288,11028,11029],{"class":290,"line":1502},[288,11030,2572],{"emptyLinePlaceholder":217},[288,11032,11033],{"class":290,"line":1784},[288,11034,11035],{"class":357},"    \u002F\u002F局部变量\n",[288,11037,11038,11040,11043,11045,11047],{"class":290,"line":1789},[288,11039,2157],{"class":294},[288,11041,11042],{"class":298}," a ",[288,11044,344],{"class":294},[288,11046,2210],{"class":347},[288,11048,1463],{"class":298},[288,11050,11051,11053,11056,11058,11060],{"class":290,"line":1795},[288,11052,2157],{"class":294},[288,11054,11055],{"class":298}," b ",[288,11057,344],{"class":294},[288,11059,2210],{"class":347},[288,11061,1463],{"class":298},[288,11063,11064],{"class":290,"line":1800},[288,11065,2572],{"emptyLinePlaceholder":217},[288,11067,11068],{"class":290,"line":1814},[288,11069,11070],{"class":357},"    \u002F\u002F打印地址\n",[288,11072,11073,11075,11077,11080,11082,11084,11086,11088,11090,11093,11095],{"class":290,"line":1819},[288,11074,6702],{"class":298},[288,11076,1341],{"class":294},[288,11078,11079],{"class":403}," \"局部变量a地址为： \"",[288,11081,1617],{"class":294},[288,11083,1830],{"class":298},[288,11085,302],{"class":294},[288,11087,726],{"class":298},[288,11089,650],{"class":294},[288,11091,11092],{"class":298},"a ",[288,11094,1341],{"class":294},[288,11096,9013],{"class":298},[288,11098,11099,11101,11103,11106,11108,11110,11112,11114,11116,11119,11121],{"class":290,"line":1825},[288,11100,6702],{"class":298},[288,11102,1341],{"class":294},[288,11104,11105],{"class":403}," \"局部变量b地址为： \"",[288,11107,1617],{"class":294},[288,11109,1830],{"class":298},[288,11111,302],{"class":294},[288,11113,726],{"class":298},[288,11115,650],{"class":294},[288,11117,11118],{"class":298},"b ",[288,11120,1341],{"class":294},[288,11122,9013],{"class":298},[288,11124,11125],{"class":290,"line":1846},[288,11126,2572],{"emptyLinePlaceholder":217},[288,11128,11129,11131,11133,11136,11138,11141,11143,11145,11147,11150,11152],{"class":290,"line":1851},[288,11130,6702],{"class":298},[288,11132,1341],{"class":294},[288,11134,11135],{"class":403}," \"全局变量g_a地址为： \"",[288,11137,1617],{"class":294},[288,11139,11140],{"class":298},"  (",[288,11142,302],{"class":294},[288,11144,726],{"class":298},[288,11146,650],{"class":294},[288,11148,11149],{"class":298},"g_a ",[288,11151,1341],{"class":294},[288,11153,9013],{"class":298},[288,11155,11156,11158,11160,11163,11165,11167,11169,11171,11173,11176,11178],{"class":290,"line":1865},[288,11157,6702],{"class":298},[288,11159,1341],{"class":294},[288,11161,11162],{"class":403}," \"全局变量g_b地址为： \"",[288,11164,1617],{"class":294},[288,11166,11140],{"class":298},[288,11168,302],{"class":294},[288,11170,726],{"class":298},[288,11172,650],{"class":294},[288,11174,11175],{"class":298},"g_b ",[288,11177,1341],{"class":294},[288,11179,9013],{"class":298},[288,11181,11182],{"class":290,"line":1870},[288,11183,2572],{"emptyLinePlaceholder":217},[288,11185,11186],{"class":290,"line":1899},[288,11187,11188],{"class":357},"    \u002F\u002F静态变量\n",[288,11190,11191,11194,11196,11199,11201,11203],{"class":290,"line":1904},[288,11192,11193],{"class":294},"    static",[288,11195,2554],{"class":294},[288,11197,11198],{"class":298}," s_a ",[288,11200,344],{"class":294},[288,11202,2210],{"class":347},[288,11204,1463],{"class":298},[288,11206,11207,11209,11211,11214,11216,11218],{"class":290,"line":1921},[288,11208,11193],{"class":294},[288,11210,2554],{"class":294},[288,11212,11213],{"class":298}," s_b ",[288,11215,344],{"class":294},[288,11217,2210],{"class":347},[288,11219,1463],{"class":298},[288,11221,11222],{"class":290,"line":1926},[288,11223,2572],{"emptyLinePlaceholder":217},[288,11225,11226,11228,11230,11233,11235,11237,11239,11241,11243,11246,11248],{"class":290,"line":1931},[288,11227,6702],{"class":298},[288,11229,1341],{"class":294},[288,11231,11232],{"class":403}," \"静态变量s_a地址为： \"",[288,11234,1617],{"class":294},[288,11236,1830],{"class":298},[288,11238,302],{"class":294},[288,11240,726],{"class":298},[288,11242,650],{"class":294},[288,11244,11245],{"class":298},"s_a ",[288,11247,1341],{"class":294},[288,11249,9013],{"class":298},[288,11251,11252,11254,11256,11259,11261,11263,11265,11267,11269,11272,11274],{"class":290,"line":1936},[288,11253,6702],{"class":298},[288,11255,1341],{"class":294},[288,11257,11258],{"class":403}," \"静态变量s_b地址为： \"",[288,11260,1617],{"class":294},[288,11262,1830],{"class":298},[288,11264,302],{"class":294},[288,11266,726],{"class":298},[288,11268,650],{"class":294},[288,11270,11271],{"class":298},"s_b ",[288,11273,1341],{"class":294},[288,11275,9013],{"class":298},[288,11277,11278],{"class":290,"line":1950},[288,11279,2572],{"emptyLinePlaceholder":217},[288,11281,11282,11284,11286,11289,11291,11293,11295,11297,11299,11301,11303],{"class":290,"line":1955},[288,11283,6702],{"class":298},[288,11285,1341],{"class":294},[288,11287,11288],{"class":403}," \"字符串常量地址为： \"",[288,11290,1617],{"class":294},[288,11292,1830],{"class":298},[288,11294,302],{"class":294},[288,11296,726],{"class":298},[288,11298,650],{"class":294},[288,11300,1359],{"class":403},[288,11302,1617],{"class":294},[288,11304,9013],{"class":298},[288,11306,11307,11309,11311,11313,11315,11317,11319,11321,11323,11326,11328],{"class":290,"line":2749},[288,11308,6702],{"class":298},[288,11310,1341],{"class":294},[288,11312,11288],{"class":403},[288,11314,1617],{"class":294},[288,11316,1830],{"class":298},[288,11318,302],{"class":294},[288,11320,726],{"class":298},[288,11322,650],{"class":294},[288,11324,11325],{"class":403},"\"hello world1\"",[288,11327,1617],{"class":294},[288,11329,9013],{"class":298},[288,11331,11332],{"class":290,"line":2763},[288,11333,2572],{"emptyLinePlaceholder":217},[288,11335,11336,11338,11340,11343,11345,11347,11349,11351,11353,11356,11358],{"class":290,"line":2771},[288,11337,6702],{"class":298},[288,11339,1341],{"class":294},[288,11341,11342],{"class":403}," \"全局常量c_g_a地址为： \"",[288,11344,1617],{"class":294},[288,11346,1830],{"class":298},[288,11348,302],{"class":294},[288,11350,726],{"class":298},[288,11352,650],{"class":294},[288,11354,11355],{"class":298},"c_g_a ",[288,11357,1341],{"class":294},[288,11359,9013],{"class":298},[288,11361,11362,11364,11366,11369,11371,11373,11375,11377,11379,11382,11384],{"class":290,"line":2776},[288,11363,6702],{"class":298},[288,11365,1341],{"class":294},[288,11367,11368],{"class":403}," \"全局常量c_g_b地址为： \"",[288,11370,1617],{"class":294},[288,11372,1830],{"class":298},[288,11374,302],{"class":294},[288,11376,726],{"class":298},[288,11378,650],{"class":294},[288,11380,11381],{"class":298},"c_g_b ",[288,11383,1341],{"class":294},[288,11385,9013],{"class":298},[288,11387,11388],{"class":290,"line":2782},[288,11389,2572],{"emptyLinePlaceholder":217},[288,11391,11392,11395,11397,11400,11402,11404],{"class":290,"line":2788},[288,11393,11394],{"class":294},"    const",[288,11396,2554],{"class":294},[288,11398,11399],{"class":298}," c_l_a ",[288,11401,344],{"class":294},[288,11403,2210],{"class":347},[288,11405,1463],{"class":298},[288,11407,11408,11410,11412,11415,11417,11419],{"class":290,"line":2793},[288,11409,11394],{"class":294},[288,11411,2554],{"class":294},[288,11413,11414],{"class":298}," c_l_b ",[288,11416,344],{"class":294},[288,11418,2210],{"class":347},[288,11420,1463],{"class":298},[288,11422,11423,11425,11427,11430,11432,11434,11436,11438,11440,11443,11445],{"class":290,"line":8121},[288,11424,6702],{"class":298},[288,11426,1341],{"class":294},[288,11428,11429],{"class":403}," \"局部常量c_l_a地址为： \"",[288,11431,1617],{"class":294},[288,11433,1830],{"class":298},[288,11435,302],{"class":294},[288,11437,726],{"class":298},[288,11439,650],{"class":294},[288,11441,11442],{"class":298},"c_l_a ",[288,11444,1341],{"class":294},[288,11446,9013],{"class":298},[288,11448,11449,11451,11453,11456,11458,11460,11462,11464,11466,11469,11471],{"class":290,"line":8145},[288,11450,6702],{"class":298},[288,11452,1341],{"class":294},[288,11454,11455],{"class":403}," \"局部常量c_l_b地址为： \"",[288,11457,1617],{"class":294},[288,11459,1830],{"class":298},[288,11461,302],{"class":294},[288,11463,726],{"class":298},[288,11465,650],{"class":294},[288,11467,11468],{"class":298},"c_l_b ",[288,11470,1341],{"class":294},[288,11472,9013],{"class":298},[288,11474,11475],{"class":290,"line":8150},[288,11476,2572],{"emptyLinePlaceholder":217},[288,11478,11479,11481,11483,11485],{"class":290,"line":8156},[288,11480,2475],{"class":2135},[288,11482,299],{"class":298},[288,11484,2480],{"class":403},[288,11486,2891],{"class":298},[288,11488,11489],{"class":290,"line":8183},[288,11490,2572],{"emptyLinePlaceholder":217},[288,11492,11493,11495,11497],{"class":290,"line":8188},[288,11494,4262],{"class":294},[288,11496,4265],{"class":347},[288,11498,1463],{"class":298},[288,11500,11501],{"class":290,"line":8194},[288,11502,1737],{"class":298},[19,11504,11505],{},"总结：",[1304,11507,11508,11511,11514,11517],{},[246,11509,11510],{},"c++中程序运行前分为全局区和代码区",[246,11512,11513],{},"代码区特点是共享和只读",[246,11515,11516],{},"全局区中存放全局变量、静态变量、常量",[246,11518,11519],{},"常量区中存放const修饰的全局常量和字符串常量",[260,11521,11523],{"id":11522},"_512程序运行后","5.1.2程序运行后",[243,11525,11526],{},[246,11527,11528],{},"栈区：",[1304,11530,11531,11538],{},[246,11532,11533,11534,11537],{},"由编译器自动分配释放, 存放",[448,11535,11536],{},"函数的参数值,局部变量","等",[246,11539,11540,11541,11544],{},"注意事项：",[448,11542,11543],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[280,11546,11548],{"className":282,"code":11547,"language":284,"meta":205,"style":205},"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",[25,11549,11550,11561,11565,11580,11592,11596,11600,11608,11613,11628,11646,11663,11673,11681],{"__ignoreMap":205},[288,11551,11552,11554,11556,11559],{"class":290,"line":291},[288,11553,302],{"class":294},[288,11555,6691],{"class":294},[288,11557,11558],{"class":2135}," func",[288,11560,2148],{"class":298},[288,11562,11563],{"class":290,"line":206},[288,11564,1718],{"class":298},[288,11566,11567,11569,11571,11573,11575,11577],{"class":290,"line":1352},[288,11568,2157],{"class":294},[288,11570,11042],{"class":298},[288,11572,344],{"class":294},[288,11574,2210],{"class":347},[288,11576,354],{"class":298},[288,11578,11579],{"class":357}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[288,11581,11582,11584,11586,11589],{"class":290,"line":1367},[288,11583,4262],{"class":294},[288,11585,10757],{"class":294},[288,11587,11588],{"class":298},"a;",[288,11590,11591],{"class":357}," \u002F\u002F放回局部变量的地址\n",[288,11593,11594],{"class":290,"line":1373},[288,11595,1737],{"class":298},[288,11597,11598],{"class":290,"line":1387},[288,11599,2572],{"emptyLinePlaceholder":217},[288,11601,11602,11604,11606],{"class":290,"line":1393},[288,11603,302],{"class":294},[288,11605,2145],{"class":2135},[288,11607,11026],{"class":298},[288,11609,11610],{"class":290,"line":1484},[288,11611,11612],{"class":357},"    \u002F\u002F接受func的返回值\n",[288,11614,11615,11617,11619,11622,11624,11626],{"class":290,"line":1490},[288,11616,2157],{"class":294},[288,11618,6691],{"class":294},[288,11620,11621],{"class":298},"p ",[288,11623,344],{"class":294},[288,11625,11558],{"class":2135},[288,11627,5809],{"class":298},[288,11629,11630,11632,11634,11636,11638,11640,11643],{"class":290,"line":1502},[288,11631,6702],{"class":298},[288,11633,1341],{"class":294},[288,11635,6691],{"class":294},[288,11637,11621],{"class":298},[288,11639,1341],{"class":294},[288,11641,11642],{"class":298}," endl;",[288,11644,11645],{"class":357}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[288,11647,11648,11650,11652,11654,11656,11658,11660],{"class":290,"line":1784},[288,11649,6702],{"class":298},[288,11651,1341],{"class":294},[288,11653,6691],{"class":294},[288,11655,11621],{"class":298},[288,11657,1341],{"class":294},[288,11659,11642],{"class":298},[288,11661,11662],{"class":357}," \u002F\u002F第二次这个数据不再保留\n",[288,11664,11665,11667,11669,11671],{"class":290,"line":1789},[288,11666,2475],{"class":2135},[288,11668,299],{"class":298},[288,11670,2480],{"class":403},[288,11672,2891],{"class":298},[288,11674,11675,11677,11679],{"class":290,"line":1795},[288,11676,4262],{"class":294},[288,11678,4265],{"class":347},[288,11680,1463],{"class":298},[288,11682,11683],{"class":290,"line":1800},[288,11684,1737],{"class":298},[19,11686,11687],{},"输出结果：",[19,11689,11690],{},[200,11691],{"alt":11692,"src":11693},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11695,11696],{},"总结：不要返回局部变量的地址",[243,11698,11699],{"start":206},[246,11700,11701],{},"堆区",[1304,11703,11704,11707],{},[246,11705,11706],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[246,11708,11709],{},"在c++中主要利用new在堆区开辟内存",[280,11711,11713],{"className":282,"code":11712,"language":284,"meta":205,"style":205},"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",[25,11714,11715,11730,11734,11739,11760,11767,11771,11779,11783,11788,11802,11814],{"__ignoreMap":205},[288,11716,11717,11719,11722,11725,11727],{"class":290,"line":291},[288,11718,302],{"class":294},[288,11720,11721],{"class":294},"  *",[288,11723,11724],{"class":2135},"func",[288,11726,2599],{"class":298},[288,11728,11729],{"class":357},"  \u002F\u002F函数返回指针\n",[288,11731,11732],{"class":290,"line":206},[288,11733,1718],{"class":298},[288,11735,11736],{"class":290,"line":1352},[288,11737,11738],{"class":357},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[288,11740,11741,11743,11745,11747,11749,11752,11754,11756,11758],{"class":290,"line":1367},[288,11742,4319],{"class":294},[288,11744,6691],{"class":294},[288,11746,19],{"class":298},[288,11748,344],{"class":294},[288,11750,11751],{"class":294}," new",[288,11753,2554],{"class":294},[288,11755,299],{"class":298},[288,11757,743],{"class":347},[288,11759,2891],{"class":298},[288,11761,11762,11764],{"class":290,"line":1373},[288,11763,4553],{"class":294},[288,11765,11766],{"class":298}," p;\n",[288,11768,11769],{"class":290,"line":1387},[288,11770,1737],{"class":298},[288,11772,11773,11775,11777],{"class":290,"line":1393},[288,11774,302],{"class":294},[288,11776,2145],{"class":2135},[288,11778,2148],{"class":298},[288,11780,11781],{"class":290,"line":1484},[288,11782,1718],{"class":298},[288,11784,11785],{"class":290,"line":1490},[288,11786,11787],{"class":357},"    \u002F\u002F在堆区开辟数据\n",[288,11789,11790,11792,11794,11796,11798,11800],{"class":290,"line":1502},[288,11791,2157],{"class":294},[288,11793,6691],{"class":294},[288,11795,19],{"class":298},[288,11797,344],{"class":294},[288,11799,11724],{"class":2135},[288,11801,5809],{"class":298},[288,11803,11804,11806,11808,11810,11812],{"class":290,"line":1784},[288,11805,1723],{"class":298},[288,11807,6592],{"class":294},[288,11809,19],{"class":298},[288,11811,1341],{"class":294},[288,11813,1364],{"class":298},[288,11815,11816],{"class":290,"line":1789},[288,11817,1737],{"class":298},[19,11819,11820],{},"图片展示：",[19,11822,11823],{},[200,11824],{"alt":11692,"src":11825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11827,11828],{},"堆区内存由程序员管生死！！！",[243,11830,11831],{"start":1352},[246,11832,11833],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11835,11836],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11838,11839,11840],{},"​语法：",[25,11841,11842],{}," new 数据类型",[19,11844,11845],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[280,11847,11849],{"className":282,"code":11848,"language":284,"meta":205,"style":205},"\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",[25,11850,11851,11856,11866,11870,11875,11880,11902,11906,11914,11918,11932,11944,11956,11968,11973,11978,11989,11993,11998,12006,12010,12015,12037,12063,12067,12085,12089,12115,12119,12131,12135,12140,12145,12153,12157,12161,12169,12173,12179,12185],{"__ignoreMap":205},[288,11852,11853],{"class":290,"line":291},[288,11854,11855],{"class":357},"\u002F\u002F1.new的基本语法\n",[288,11857,11858,11860,11862,11864],{"class":290,"line":206},[288,11859,302],{"class":294},[288,11861,6691],{"class":294},[288,11863,11724],{"class":2135},[288,11865,2148],{"class":298},[288,11867,11868],{"class":290,"line":1352},[288,11869,1718],{"class":298},[288,11871,11872],{"class":290,"line":1367},[288,11873,11874],{"class":357},"    \u002F\u002F在堆区创建整型数据\n",[288,11876,11877],{"class":290,"line":1373},[288,11878,11879],{"class":357},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[288,11881,11882,11884,11886,11888,11891,11893,11895,11897,11899],{"class":290,"line":1387},[288,11883,2157],{"class":294},[288,11885,6691],{"class":294},[288,11887,19],{"class":298},[288,11889,11890],{"class":294},"=new",[288,11892,2554],{"class":294},[288,11894,299],{"class":298},[288,11896,743],{"class":347},[288,11898,6139],{"class":298},[288,11900,11901],{"class":357},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[288,11903,11904],{"class":290,"line":1393},[288,11905,1737],{"class":298},[288,11907,11908,11910,11912],{"class":290,"line":1484},[288,11909,5537],{"class":294},[288,11911,5761],{"class":2135},[288,11913,2148],{"class":298},[288,11915,11916],{"class":290,"line":1490},[288,11917,1718],{"class":298},[288,11919,11920,11922,11924,11926,11928,11930],{"class":290,"line":1502},[288,11921,2157],{"class":294},[288,11923,6691],{"class":294},[288,11925,19],{"class":298},[288,11927,344],{"class":294},[288,11929,11724],{"class":2135},[288,11931,5809],{"class":298},[288,11933,11934,11936,11938,11940,11942],{"class":290,"line":1784},[288,11935,1723],{"class":298},[288,11937,6592],{"class":294},[288,11939,19],{"class":298},[288,11941,1341],{"class":294},[288,11943,1364],{"class":298},[288,11945,11946,11948,11950,11952,11954],{"class":290,"line":1789},[288,11947,1723],{"class":298},[288,11949,6592],{"class":294},[288,11951,19],{"class":298},[288,11953,1341],{"class":294},[288,11955,1364],{"class":298},[288,11957,11958,11960,11962,11964,11966],{"class":290,"line":1795},[288,11959,1723],{"class":298},[288,11961,6592],{"class":294},[288,11963,19],{"class":298},[288,11965,1341],{"class":294},[288,11967,1364],{"class":298},[288,11969,11970],{"class":290,"line":1800},[288,11971,11972],{"class":357},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[288,11974,11975],{"class":290,"line":1814},[288,11976,11977],{"class":357},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[288,11979,11980,11983,11986],{"class":290,"line":1819},[288,11981,11982],{"class":294},"    delete",[288,11984,11985],{"class":298}," p;",[288,11987,11988],{"class":357},"\u002F\u002F删除这块地址\n",[288,11990,11991],{"class":290,"line":1825},[288,11992,1737],{"class":298},[288,11994,11995],{"class":290,"line":1846},[288,11996,11997],{"class":357},"\u002F\u002F2.在堆区利用new开辟数组\n",[288,11999,12000,12002,12004],{"class":290,"line":1851},[288,12001,5537],{"class":294},[288,12003,5830],{"class":2135},[288,12005,2148],{"class":298},[288,12007,12008],{"class":290,"line":1865},[288,12009,1718],{"class":298},[288,12011,12012],{"class":290,"line":1870},[288,12013,12014],{"class":357},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[288,12016,12017,12019,12021,12023,12025,12027,12029,12031,12034],{"class":290,"line":1899},[288,12018,2157],{"class":294},[288,12020,6691],{"class":294},[288,12022,4052],{"class":298},[288,12024,11890],{"class":294},[288,12026,2554],{"class":294},[288,12028,1187],{"class":298},[288,12030,743],{"class":347},[288,12032,12033],{"class":298},"];",[288,12035,12036],{"class":357},"\u002F\u002F10代表数组有10个元素\n",[288,12038,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061],{"class":290,"line":1904},[288,12040,3373],{"class":294},[288,12042,1830],{"class":298},[288,12044,302],{"class":294},[288,12046,3204],{"class":298},[288,12048,344],{"class":294},[288,12050,490],{"class":347},[288,12052,3211],{"class":298},[288,12054,1207],{"class":294},[288,12056,743],{"class":347},[288,12058,3211],{"class":298},[288,12060,2464],{"class":294},[288,12062,305],{"class":298},[288,12064,12065],{"class":290,"line":1921},[288,12066,2202],{"class":298},[288,12068,12069,12072,12074,12076,12078,12080,12082],{"class":290,"line":1926},[288,12070,12071],{"class":298},"        arr[i]",[288,12073,344],{"class":294},[288,12075,738],{"class":298},[288,12077,778],{"class":294},[288,12079,608],{"class":347},[288,12081,354],{"class":298},[288,12083,12084],{"class":357},"\u002F\u002F给10个元素赋值100～109\n",[288,12086,12087],{"class":290,"line":1931},[288,12088,2359],{"class":298},[288,12090,12091,12093,12095,12097,12099,12101,12103,12105,12107,12109,12111,12113],{"class":290,"line":1936},[288,12092,3373],{"class":294},[288,12094,1830],{"class":298},[288,12096,302],{"class":294},[288,12098,3204],{"class":298},[288,12100,344],{"class":294},[288,12102,490],{"class":347},[288,12104,3211],{"class":298},[288,12106,1207],{"class":294},[288,12108,743],{"class":347},[288,12110,3211],{"class":298},[288,12112,2464],{"class":294},[288,12114,305],{"class":298},[288,12116,12117],{"class":290,"line":1950},[288,12118,2202],{"class":298},[288,12120,12121,12123,12125,12127,12129],{"class":290,"line":1955},[288,12122,3623],{"class":298},[288,12124,1341],{"class":294},[288,12126,4526],{"class":298},[288,12128,1341],{"class":294},[288,12130,1364],{"class":298},[288,12132,12133],{"class":290,"line":2749},[288,12134,2359],{"class":298},[288,12136,12137],{"class":290,"line":2763},[288,12138,12139],{"class":357},"    \u002F\u002F释放堆区数组\n",[288,12141,12142],{"class":290,"line":2771},[288,12143,12144],{"class":357},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[288,12146,12147,12150],{"class":290,"line":2776},[288,12148,12149],{"class":294},"    delete[]",[288,12151,12152],{"class":298}," arr;\n",[288,12154,12155],{"class":290,"line":2782},[288,12156,1737],{"class":298},[288,12158,12159],{"class":290,"line":2788},[288,12160,2572],{"emptyLinePlaceholder":217},[288,12162,12163,12165,12167],{"class":290,"line":2793},[288,12164,302],{"class":294},[288,12166,2145],{"class":2135},[288,12168,2148],{"class":298},[288,12170,12171],{"class":290,"line":8121},[288,12172,1718],{"class":298},[288,12174,12175,12177],{"class":290,"line":8145},[288,12176,5806],{"class":2135},[288,12178,5809],{"class":298},[288,12180,12181,12183],{"class":290,"line":8150},[288,12182,5875],{"class":2135},[288,12184,5809],{"class":298},[288,12186,12187],{"class":290,"line":8156},[288,12188,1737],{"class":298},[5299,12190,12191],{},"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":205,"searchDepth":206,"depth":206,"links":12193},[12194],{"id":10862,"depth":206,"text":10863,"children":12195},[12196,12197],{"id":10894,"depth":1352,"text":10895},{"id":11522,"depth":1352,"text":11523},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10854,"description":205},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12204,"title":12205,"body":12206,"description":205,"extension":215,"meta":13687,"navigation":217,"path":13688,"seo":13689,"stem":13690,"__hash__":13691},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12207,"toc":13679},[12208,12211,12215,12218,12221,12390,12394,12399,12416,12421,12573,12577,12580,12583,12977,12981,12984,12989,12992,13304,13308,13314,13474,13476,13484,13488,13491,13498,13676],[10,12209,12205],{"id":12210},"_6引用",[14,12212,12214],{"id":12213},"_61引用基本用法","6.1引用基本用法",[19,12216,12217],{},"引用的本质：给变量起别名",[19,12219,12220],{},"语法：数据类型 &别名=原名",[280,12222,12224],{"className":282,"code":12223,"language":284,"meta":205,"style":205},"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",[25,12225,12226,12234,12238,12250,12262,12266,12285,12304,12308,12319,12323,12342,12360,12364,12374,12378,12386],{"__ignoreMap":205},[288,12227,12228,12230,12232],{"class":290,"line":291},[288,12229,302],{"class":294},[288,12231,2145],{"class":2135},[288,12233,11026],{"class":298},[288,12235,12236],{"class":290,"line":206},[288,12237,2572],{"emptyLinePlaceholder":217},[288,12239,12240,12242,12244,12246,12248],{"class":290,"line":1352},[288,12241,2157],{"class":294},[288,12243,11042],{"class":298},[288,12245,344],{"class":294},[288,12247,2210],{"class":347},[288,12249,1463],{"class":298},[288,12251,12252,12254,12256,12258,12260],{"class":290,"line":1367},[288,12253,2157],{"class":294},[288,12255,10757],{"class":294},[288,12257,11118],{"class":298},[288,12259,344],{"class":294},[288,12261,1605],{"class":298},[288,12263,12264],{"class":290,"line":1373},[288,12265,2572],{"emptyLinePlaceholder":217},[288,12267,12268,12270,12272,12275,12277,12279,12281,12283],{"class":290,"line":1387},[288,12269,6702],{"class":298},[288,12271,1341],{"class":294},[288,12273,12274],{"class":403}," \"a = \"",[288,12276,1617],{"class":294},[288,12278,11042],{"class":298},[288,12280,1341],{"class":294},[288,12282,11642],{"class":298},[288,12284,7441],{"class":357},[288,12286,12287,12289,12291,12294,12296,12298,12300,12302],{"class":290,"line":1393},[288,12288,6702],{"class":298},[288,12290,1341],{"class":294},[288,12292,12293],{"class":403}," \"b = \"",[288,12295,1617],{"class":294},[288,12297,11055],{"class":298},[288,12299,1341],{"class":294},[288,12301,11642],{"class":298},[288,12303,7441],{"class":357},[288,12305,12306],{"class":290,"line":1484},[288,12307,2572],{"emptyLinePlaceholder":217},[288,12309,12310,12313,12315,12317],{"class":290,"line":1490},[288,12311,12312],{"class":298},"    b ",[288,12314,344],{"class":294},[288,12316,5927],{"class":347},[288,12318,1463],{"class":298},[288,12320,12321],{"class":290,"line":1502},[288,12322,2572],{"emptyLinePlaceholder":217},[288,12324,12325,12327,12329,12331,12333,12335,12337,12339],{"class":290,"line":1784},[288,12326,6702],{"class":298},[288,12328,1341],{"class":294},[288,12330,12274],{"class":403},[288,12332,1617],{"class":294},[288,12334,11042],{"class":298},[288,12336,1341],{"class":294},[288,12338,11642],{"class":298},[288,12340,12341],{"class":357},"\u002F\u002F100\n",[288,12343,12344,12346,12348,12350,12352,12354,12356,12358],{"class":290,"line":1789},[288,12345,6702],{"class":298},[288,12347,1341],{"class":294},[288,12349,12293],{"class":403},[288,12351,1617],{"class":294},[288,12353,11055],{"class":298},[288,12355,1341],{"class":294},[288,12357,11642],{"class":298},[288,12359,12341],{"class":357},[288,12361,12362],{"class":290,"line":1795},[288,12363,2572],{"emptyLinePlaceholder":217},[288,12365,12366,12368,12370,12372],{"class":290,"line":1800},[288,12367,2475],{"class":2135},[288,12369,299],{"class":298},[288,12371,2480],{"class":403},[288,12373,2891],{"class":298},[288,12375,12376],{"class":290,"line":1814},[288,12377,2572],{"emptyLinePlaceholder":217},[288,12379,12380,12382,12384],{"class":290,"line":1819},[288,12381,4262],{"class":294},[288,12383,4265],{"class":347},[288,12385,1463],{"class":298},[288,12387,12388],{"class":290,"line":1825},[288,12389,1737],{"class":298},[14,12391,12393],{"id":12392},"_62引用的注意事项","6.2引用的注意事项",[243,12395,12396],{},[246,12397,12398],{},"引用必须要初始化",[280,12400,12402],{"className":282,"code":12401,"language":284,"meta":205,"style":205},"int &b;\u002F\u002F非常错误！\n",[25,12403,12404],{"__ignoreMap":205},[288,12405,12406,12408,12410,12413],{"class":290,"line":291},[288,12407,302],{"class":294},[288,12409,10757],{"class":294},[288,12411,12412],{"class":298},"b;",[288,12414,12415],{"class":357},"\u002F\u002F非常错误！\n",[243,12417,12418],{"start":206},[246,12419,12420],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[280,12422,12424],{"className":282,"code":12423,"language":284,"meta":205,"style":205},"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",[25,12425,12426,12434,12446,12458,12466,12482,12495,12513,12531,12551,12561,12569],{"__ignoreMap":205},[288,12427,12428,12430,12432],{"class":290,"line":291},[288,12429,302],{"class":294},[288,12431,2145],{"class":2135},[288,12433,11026],{"class":298},[288,12435,12436,12438,12440,12442,12444],{"class":290,"line":206},[288,12437,2157],{"class":294},[288,12439,11042],{"class":298},[288,12441,344],{"class":294},[288,12443,2210],{"class":347},[288,12445,1463],{"class":298},[288,12447,12448,12450,12452,12454,12456],{"class":290,"line":1352},[288,12449,2157],{"class":294},[288,12451,11055],{"class":298},[288,12453,344],{"class":294},[288,12455,9123],{"class":347},[288,12457,1463],{"class":298},[288,12459,12460,12463],{"class":290,"line":1367},[288,12461,12462],{"class":357},"    \u002F\u002Fint &c;",[288,12464,12465],{"class":357}," \u002F\u002F错误，引用必须初始化\n",[288,12467,12468,12470,12472,12474,12476,12479],{"class":290,"line":1373},[288,12469,2157],{"class":294},[288,12471,10757],{"class":294},[288,12473,3118],{"class":298},[288,12475,344],{"class":294},[288,12477,12478],{"class":298}," a;",[288,12480,12481],{"class":357}," \u002F\u002F一旦初始化后，就不可以更改\n",[288,12483,12484,12487,12489,12492],{"class":290,"line":1387},[288,12485,12486],{"class":298},"    c ",[288,12488,344],{"class":294},[288,12490,12491],{"class":298}," b;",[288,12493,12494],{"class":357}," \u002F\u002F这是赋值操作，不是更改引用\n",[288,12496,12497,12499,12501,12503,12505,12507,12509,12511],{"class":290,"line":1393},[288,12498,6702],{"class":298},[288,12500,1341],{"class":294},[288,12502,12274],{"class":403},[288,12504,1617],{"class":294},[288,12506,11042],{"class":298},[288,12508,1341],{"class":294},[288,12510,11642],{"class":298},[288,12512,7426],{"class":357},[288,12514,12515,12517,12519,12521,12523,12525,12527,12529],{"class":290,"line":1484},[288,12516,6702],{"class":298},[288,12518,1341],{"class":294},[288,12520,12293],{"class":403},[288,12522,1617],{"class":294},[288,12524,11055],{"class":298},[288,12526,1341],{"class":294},[288,12528,11642],{"class":298},[288,12530,7426],{"class":357},[288,12532,12533,12535,12537,12540,12542,12545,12547,12549],{"class":290,"line":1490},[288,12534,6702],{"class":298},[288,12536,1341],{"class":294},[288,12538,12539],{"class":403}," \"c = \"",[288,12541,1617],{"class":294},[288,12543,12544],{"class":298}," c ",[288,12546,1341],{"class":294},[288,12548,11642],{"class":298},[288,12550,7426],{"class":357},[288,12552,12553,12555,12557,12559],{"class":290,"line":1502},[288,12554,2475],{"class":2135},[288,12556,299],{"class":298},[288,12558,2480],{"class":403},[288,12560,2891],{"class":298},[288,12562,12563,12565,12567],{"class":290,"line":1784},[288,12564,4262],{"class":294},[288,12566,4265],{"class":347},[288,12568,1463],{"class":298},[288,12570,12571],{"class":290,"line":1789},[288,12572,1737],{"class":298},[14,12574,12576],{"id":12575},"_63引用做函数参数","6.3引用做函数参数",[19,12578,12579],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12581,12582],{},"优点：可以简化指针修改实参",[280,12584,12586],{"className":282,"code":12585,"language":284,"meta":205,"style":205},"\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",[25,12587,12588,12593,12616,12627,12637,12646,12650,12654,12659,12681,12693,12705,12715,12719,12723,12728,12750,12760,12768,12776,12780,12784,12792,12796,12808,12820,12824,12835,12861,12865,12885,12909,12913,12923,12947,12951,12961,12965,12973],{"__ignoreMap":205},[288,12589,12590],{"class":290,"line":291},[288,12591,12592],{"class":357},"\u002F\u002F1. 值传递\n",[288,12594,12595,12597,12600,12602,12604,12606,12609,12611,12613],{"class":290,"line":206},[288,12596,5537],{"class":294},[288,12598,12599],{"class":2135}," mySwap01",[288,12601,299],{"class":298},[288,12603,302],{"class":294},[288,12605,1571],{"class":5389},[288,12607,12608],{"class":298},", ",[288,12610,302],{"class":294},[288,12612,3005],{"class":5389},[288,12614,12615],{"class":298},") {\n",[288,12617,12618,12620,12623,12625],{"class":290,"line":1352},[288,12619,2157],{"class":294},[288,12621,12622],{"class":298}," temp ",[288,12624,344],{"class":294},[288,12626,1605],{"class":298},[288,12628,12629,12632,12634],{"class":290,"line":1367},[288,12630,12631],{"class":298},"    a ",[288,12633,344],{"class":294},[288,12635,12636],{"class":298}," b;\n",[288,12638,12639,12641,12643],{"class":290,"line":1373},[288,12640,12312],{"class":298},[288,12642,344],{"class":294},[288,12644,12645],{"class":298}," temp;\n",[288,12647,12648],{"class":290,"line":1387},[288,12649,1737],{"class":298},[288,12651,12652],{"class":290,"line":1393},[288,12653,2572],{"emptyLinePlaceholder":217},[288,12655,12656],{"class":290,"line":1484},[288,12657,12658],{"class":357},"\u002F\u002F2. 地址传递\n",[288,12660,12661,12663,12666,12668,12671,12673,12675,12677,12679],{"class":290,"line":1490},[288,12662,5537],{"class":294},[288,12664,12665],{"class":2135}," mySwap02",[288,12667,299],{"class":298},[288,12669,12670],{"class":294},"int*",[288,12672,1571],{"class":5389},[288,12674,12608],{"class":298},[288,12676,12670],{"class":294},[288,12678,3005],{"class":5389},[288,12680,12615],{"class":298},[288,12682,12683,12685,12687,12689,12691],{"class":290,"line":1502},[288,12684,2157],{"class":294},[288,12686,12622],{"class":298},[288,12688,344],{"class":294},[288,12690,6691],{"class":294},[288,12692,6370],{"class":298},[288,12694,12695,12697,12699,12701,12703],{"class":290,"line":1784},[288,12696,6576],{"class":294},[288,12698,11092],{"class":298},[288,12700,344],{"class":294},[288,12702,6691],{"class":294},[288,12704,6242],{"class":298},[288,12706,12707,12709,12711,12713],{"class":290,"line":1789},[288,12708,6576],{"class":294},[288,12710,11118],{"class":298},[288,12712,344],{"class":294},[288,12714,12645],{"class":298},[288,12716,12717],{"class":290,"line":1795},[288,12718,1737],{"class":298},[288,12720,12721],{"class":290,"line":1800},[288,12722,2572],{"emptyLinePlaceholder":217},[288,12724,12725],{"class":290,"line":1814},[288,12726,12727],{"class":357},"\u002F\u002F3. 引用传递\n",[288,12729,12730,12732,12735,12737,12740,12742,12744,12746,12748],{"class":290,"line":1819},[288,12731,5537],{"class":294},[288,12733,12734],{"class":2135}," mySwap03",[288,12736,299],{"class":298},[288,12738,12739],{"class":294},"int&",[288,12741,1571],{"class":5389},[288,12743,12608],{"class":298},[288,12745,12739],{"class":294},[288,12747,3005],{"class":5389},[288,12749,12615],{"class":298},[288,12751,12752,12754,12756,12758],{"class":290,"line":1825},[288,12753,2157],{"class":294},[288,12755,12622],{"class":298},[288,12757,344],{"class":294},[288,12759,1605],{"class":298},[288,12761,12762,12764,12766],{"class":290,"line":1846},[288,12763,12631],{"class":298},[288,12765,344],{"class":294},[288,12767,12636],{"class":298},[288,12769,12770,12772,12774],{"class":290,"line":1851},[288,12771,12312],{"class":298},[288,12773,344],{"class":294},[288,12775,12645],{"class":298},[288,12777,12778],{"class":290,"line":1865},[288,12779,1737],{"class":298},[288,12781,12782],{"class":290,"line":1870},[288,12783,2572],{"emptyLinePlaceholder":217},[288,12785,12786,12788,12790],{"class":290,"line":1899},[288,12787,302],{"class":294},[288,12789,2145],{"class":2135},[288,12791,11026],{"class":298},[288,12793,12794],{"class":290,"line":1904},[288,12795,2572],{"emptyLinePlaceholder":217},[288,12797,12798,12800,12802,12804,12806],{"class":290,"line":1921},[288,12799,2157],{"class":294},[288,12801,11042],{"class":298},[288,12803,344],{"class":294},[288,12805,2210],{"class":347},[288,12807,1463],{"class":298},[288,12809,12810,12812,12814,12816,12818],{"class":290,"line":1926},[288,12811,2157],{"class":294},[288,12813,11055],{"class":298},[288,12815,344],{"class":294},[288,12817,9123],{"class":347},[288,12819,1463],{"class":298},[288,12821,12822],{"class":290,"line":1931},[288,12823,2572],{"emptyLinePlaceholder":217},[288,12825,12826,12829,12832],{"class":290,"line":1936},[288,12827,12828],{"class":2135},"    mySwap01",[288,12830,12831],{"class":298},"(a, b);",[288,12833,12834],{"class":357},"\u002F\u002F值传递，形参不会修饰实参\n",[288,12836,12837,12839,12841,12844,12846,12848,12850,12853,12855,12857,12859],{"class":290,"line":1950},[288,12838,6702],{"class":298},[288,12840,1341],{"class":294},[288,12842,12843],{"class":403}," \"a:\"",[288,12845,1617],{"class":294},[288,12847,11042],{"class":298},[288,12849,1341],{"class":294},[288,12851,12852],{"class":403}," \" b:\"",[288,12854,1617],{"class":294},[288,12856,11055],{"class":298},[288,12858,1341],{"class":294},[288,12860,9013],{"class":298},[288,12862,12863],{"class":290,"line":1955},[288,12864,2572],{"emptyLinePlaceholder":217},[288,12866,12867,12870,12872,12874,12877,12879,12882],{"class":290,"line":2749},[288,12868,12869],{"class":2135},"    mySwap02",[288,12871,299],{"class":298},[288,12873,650],{"class":294},[288,12875,12876],{"class":298},"a, ",[288,12878,650],{"class":294},[288,12880,12881],{"class":298},"b);",[288,12883,12884],{"class":357},"\u002F\u002F地址传递，形参会修饰实参\n",[288,12886,12887,12889,12891,12893,12895,12897,12899,12901,12903,12905,12907],{"class":290,"line":2763},[288,12888,6702],{"class":298},[288,12890,1341],{"class":294},[288,12892,12843],{"class":403},[288,12894,1617],{"class":294},[288,12896,11042],{"class":298},[288,12898,1341],{"class":294},[288,12900,12852],{"class":403},[288,12902,1617],{"class":294},[288,12904,11055],{"class":298},[288,12906,1341],{"class":294},[288,12908,9013],{"class":298},[288,12910,12911],{"class":290,"line":2771},[288,12912,2572],{"emptyLinePlaceholder":217},[288,12914,12915,12918,12920],{"class":290,"line":2776},[288,12916,12917],{"class":2135},"    mySwap03",[288,12919,12831],{"class":298},[288,12921,12922],{"class":357},"\u002F\u002F引用传递，形参会修饰实参\n",[288,12924,12925,12927,12929,12931,12933,12935,12937,12939,12941,12943,12945],{"class":290,"line":2782},[288,12926,6702],{"class":298},[288,12928,1341],{"class":294},[288,12930,12843],{"class":403},[288,12932,1617],{"class":294},[288,12934,11042],{"class":298},[288,12936,1341],{"class":294},[288,12938,12852],{"class":403},[288,12940,1617],{"class":294},[288,12942,11055],{"class":298},[288,12944,1341],{"class":294},[288,12946,9013],{"class":298},[288,12948,12949],{"class":290,"line":2788},[288,12950,2572],{"emptyLinePlaceholder":217},[288,12952,12953,12955,12957,12959],{"class":290,"line":2793},[288,12954,2475],{"class":2135},[288,12956,299],{"class":298},[288,12958,2480],{"class":403},[288,12960,2891],{"class":298},[288,12962,12963],{"class":290,"line":8121},[288,12964,2572],{"emptyLinePlaceholder":217},[288,12966,12967,12969,12971],{"class":290,"line":8145},[288,12968,4262],{"class":294},[288,12970,4265],{"class":347},[288,12972,1463],{"class":298},[288,12974,12975],{"class":290,"line":8150},[288,12976,1737],{"class":298},[14,12978,12980],{"id":12979},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12982,12983],{},"作用：引用是可以作为函数的返回值存在的",[19,12985,9198,12986],{},[448,12987,12988],{},"不要返回局部变量引用",[19,12990,12991],{},"用法：函数调用作为左值",[280,12993,12995],{"className":10114,"code":12994,"language":10116,"meta":205,"style":205},"\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",[25,12996,12997,13002,13010,13025,13031,13035,13039,13044,13052,13069,13075,13079,13083,13091,13095,13100,13114,13134,13153,13157,13162,13175,13195,13213,13217,13233,13237,13256,13274,13278,13288,13292,13300],{"__ignoreMap":205},[288,12998,12999],{"class":290,"line":291},[288,13000,13001],{"class":357},"\u002F\u002F返回局部变量引用\n",[288,13003,13004,13006,13008],{"class":290,"line":206},[288,13005,12739],{"class":294},[288,13007,5761],{"class":2135},[288,13009,11026],{"class":298},[288,13011,13012,13014,13016,13018,13020,13022],{"class":290,"line":1352},[288,13013,2157],{"class":294},[288,13015,11042],{"class":298},[288,13017,344],{"class":294},[288,13019,2210],{"class":347},[288,13021,354],{"class":298},[288,13023,13024],{"class":357}," \u002F\u002F局部变量\n",[288,13026,13027,13029],{"class":290,"line":1367},[288,13028,4262],{"class":294},[288,13030,1605],{"class":298},[288,13032,13033],{"class":290,"line":1373},[288,13034,1737],{"class":298},[288,13036,13037],{"class":290,"line":1387},[288,13038,2572],{"emptyLinePlaceholder":217},[288,13040,13041],{"class":290,"line":1393},[288,13042,13043],{"class":357},"\u002F\u002F返回静态变量引用\n",[288,13045,13046,13048,13050],{"class":290,"line":1484},[288,13047,12739],{"class":294},[288,13049,5830],{"class":2135},[288,13051,11026],{"class":298},[288,13053,13054,13056,13058,13060,13062,13064,13066],{"class":290,"line":1490},[288,13055,11193],{"class":294},[288,13057,2554],{"class":294},[288,13059,11042],{"class":298},[288,13061,344],{"class":294},[288,13063,9123],{"class":347},[288,13065,354],{"class":298},[288,13067,13068],{"class":357},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[288,13070,13071,13073],{"class":290,"line":1502},[288,13072,4262],{"class":294},[288,13074,1605],{"class":298},[288,13076,13077],{"class":290,"line":1784},[288,13078,1737],{"class":298},[288,13080,13081],{"class":290,"line":1789},[288,13082,2572],{"emptyLinePlaceholder":217},[288,13084,13085,13087,13089],{"class":290,"line":1795},[288,13086,302],{"class":294},[288,13088,2145],{"class":2135},[288,13090,11026],{"class":298},[288,13092,13093],{"class":290,"line":1800},[288,13094,2572],{"emptyLinePlaceholder":217},[288,13096,13097],{"class":290,"line":1814},[288,13098,13099],{"class":357},"    \u002F\u002F不能返回局部变量的引用\n",[288,13101,13102,13105,13108,13110,13112],{"class":290,"line":1819},[288,13103,13104],{"class":294},"    int&",[288,13106,13107],{"class":298}," ref ",[288,13109,344],{"class":294},[288,13111,5761],{"class":2135},[288,13113,5809],{"class":298},[288,13115,13116,13118,13120,13123,13125,13127,13129,13131],{"class":290,"line":1825},[288,13117,6702],{"class":298},[288,13119,1341],{"class":294},[288,13121,13122],{"class":403}," \"ref = \"",[288,13124,1617],{"class":294},[288,13126,13107],{"class":298},[288,13128,1341],{"class":294},[288,13130,11642],{"class":298},[288,13132,13133],{"class":357},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[288,13135,13136,13138,13140,13142,13144,13146,13148,13150],{"class":290,"line":1846},[288,13137,6702],{"class":298},[288,13139,1341],{"class":294},[288,13141,13122],{"class":403},[288,13143,1617],{"class":294},[288,13145,13107],{"class":298},[288,13147,1341],{"class":294},[288,13149,11642],{"class":298},[288,13151,13152],{"class":357},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[288,13154,13155],{"class":290,"line":1851},[288,13156,2572],{"emptyLinePlaceholder":217},[288,13158,13159],{"class":290,"line":1865},[288,13160,13161],{"class":357},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[288,13163,13164,13166,13169,13171,13173],{"class":290,"line":1870},[288,13165,13104],{"class":294},[288,13167,13168],{"class":298}," ref2 ",[288,13170,344],{"class":294},[288,13172,5830],{"class":2135},[288,13174,5809],{"class":298},[288,13176,13177,13179,13181,13184,13186,13188,13190,13192],{"class":290,"line":1899},[288,13178,6702],{"class":298},[288,13180,1341],{"class":294},[288,13182,13183],{"class":403}," \"ref2 = \"",[288,13185,1617],{"class":294},[288,13187,13168],{"class":298},[288,13189,1341],{"class":294},[288,13191,11642],{"class":298},[288,13193,13194],{"class":357}," \u002F\u002F20\n",[288,13196,13197,13199,13201,13203,13205,13207,13209,13211],{"class":290,"line":1904},[288,13198,6702],{"class":298},[288,13200,1341],{"class":294},[288,13202,13183],{"class":403},[288,13204,1617],{"class":294},[288,13206,13168],{"class":298},[288,13208,1341],{"class":294},[288,13210,11642],{"class":298},[288,13212,13194],{"class":357},[288,13214,13215],{"class":290,"line":1921},[288,13216,2572],{"emptyLinePlaceholder":217},[288,13218,13219,13221,13224,13226,13228,13230],{"class":290,"line":1926},[288,13220,5875],{"class":2135},[288,13222,13223],{"class":298},"() ",[288,13225,344],{"class":294},[288,13227,3171],{"class":347},[288,13229,354],{"class":298},[288,13231,13232],{"class":357},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[288,13234,13235],{"class":290,"line":1931},[288,13236,2572],{"emptyLinePlaceholder":217},[288,13238,13239,13241,13243,13245,13247,13249,13251,13253],{"class":290,"line":1936},[288,13240,6702],{"class":298},[288,13242,1341],{"class":294},[288,13244,13183],{"class":403},[288,13246,1617],{"class":294},[288,13248,13168],{"class":298},[288,13250,1341],{"class":294},[288,13252,11642],{"class":298},[288,13254,13255],{"class":357}," \u002F\u002F1000\n",[288,13257,13258,13260,13262,13264,13266,13268,13270,13272],{"class":290,"line":1950},[288,13259,6702],{"class":298},[288,13261,1341],{"class":294},[288,13263,13183],{"class":403},[288,13265,1617],{"class":294},[288,13267,13168],{"class":298},[288,13269,1341],{"class":294},[288,13271,11642],{"class":298},[288,13273,13255],{"class":357},[288,13275,13276],{"class":290,"line":1955},[288,13277,2572],{"emptyLinePlaceholder":217},[288,13279,13280,13282,13284,13286],{"class":290,"line":2749},[288,13281,2475],{"class":2135},[288,13283,299],{"class":298},[288,13285,2480],{"class":403},[288,13287,2891],{"class":298},[288,13289,13290],{"class":290,"line":2763},[288,13291,2572],{"emptyLinePlaceholder":217},[288,13293,13294,13296,13298],{"class":290,"line":2771},[288,13295,4262],{"class":294},[288,13297,4265],{"class":347},[288,13299,1463],{"class":298},[288,13301,13302],{"class":290,"line":2776},[288,13303,1737],{"class":298},[14,13305,13307],{"id":13306},"_65引用的本质","6.5引用的本质",[19,13309,13310,13311],{},"本质：",[448,13312,13313],{},"引用的本质在c++内部实现是一个指针常量.",[280,13315,13317],{"className":282,"code":13316,"language":284,"meta":205,"style":205},"\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",[25,13318,13319,13324,13340,13354,13358,13367,13379,13384,13389,13400,13413,13417,13433,13450,13454,13462,13470],{"__ignoreMap":205},[288,13320,13321],{"class":290,"line":291},[288,13322,13323],{"class":357},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[288,13325,13326,13328,13330,13332,13334,13337],{"class":290,"line":206},[288,13327,5537],{"class":294},[288,13329,11558],{"class":2135},[288,13331,299],{"class":298},[288,13333,12739],{"class":294},[288,13335,13336],{"class":5389}," ref",[288,13338,13339],{"class":298},"){\n",[288,13341,13342,13345,13347,13349,13351],{"class":290,"line":1352},[288,13343,13344],{"class":298},"    ref ",[288,13346,344],{"class":294},[288,13348,5927],{"class":347},[288,13350,354],{"class":298},[288,13352,13353],{"class":357}," \u002F\u002F ref是引用，转换为*ref = 100\n",[288,13355,13356],{"class":290,"line":1367},[288,13357,1737],{"class":298},[288,13359,13360,13362,13364],{"class":290,"line":1373},[288,13361,302],{"class":294},[288,13363,2145],{"class":2135},[288,13365,13366],{"class":298},"(){\n",[288,13368,13369,13371,13373,13375,13377],{"class":290,"line":1387},[288,13370,2157],{"class":294},[288,13372,11042],{"class":298},[288,13374,344],{"class":294},[288,13376,2210],{"class":347},[288,13378,1463],{"class":298},[288,13380,13381],{"class":290,"line":1393},[288,13382,13383],{"class":298},"    \n",[288,13385,13386],{"class":290,"line":1484},[288,13387,13388],{"class":357},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[288,13390,13391,13393,13395,13397],{"class":290,"line":1490},[288,13392,13104],{"class":294},[288,13394,13107],{"class":298},[288,13396,344],{"class":294},[288,13398,13399],{"class":298}," a; \n",[288,13401,13402,13404,13406,13408,13410],{"class":290,"line":1502},[288,13403,13344],{"class":298},[288,13405,344],{"class":294},[288,13407,9123],{"class":347},[288,13409,354],{"class":298},[288,13411,13412],{"class":357}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[288,13414,13415],{"class":290,"line":1784},[288,13416,13383],{"class":298},[288,13418,13419,13421,13423,13425,13427,13429,13431],{"class":290,"line":1789},[288,13420,6702],{"class":298},[288,13422,1341],{"class":294},[288,13424,12843],{"class":403},[288,13426,1617],{"class":294},[288,13428,11042],{"class":298},[288,13430,1341],{"class":294},[288,13432,9013],{"class":298},[288,13434,13435,13437,13439,13442,13444,13446,13448],{"class":290,"line":1795},[288,13436,6702],{"class":298},[288,13438,1341],{"class":294},[288,13440,13441],{"class":403}," \"ref:\"",[288,13443,1617],{"class":294},[288,13445,13107],{"class":298},[288,13447,1341],{"class":294},[288,13449,9013],{"class":298},[288,13451,13452],{"class":290,"line":1800},[288,13453,13383],{"class":298},[288,13455,13456,13459],{"class":290,"line":1814},[288,13457,13458],{"class":2135},"    func",[288,13460,13461],{"class":298},"(a);\n",[288,13463,13464,13466,13468],{"class":290,"line":1819},[288,13465,4262],{"class":294},[288,13467,4265],{"class":347},[288,13469,1463],{"class":298},[288,13471,13472],{"class":290,"line":1825},[288,13473,1737],{"class":298},[19,13475,11505],{},[243,13477,13478,13481],{},[246,13479,13480],{},"引用的本质，就是一个指针常量",[246,13482,13483],{},"引用一旦初始化，就不可以发生改变",[14,13485,13487],{"id":13486},"_66常量引用","6.6常量引用",[19,13489,13490],{},"作用：常量引用主要用来修饰形参",[19,13492,13493,13494,13497],{},"在函数形参列表中，可以加",[448,13495,13496],{},"const修饰形参","，防止形参改变实参",[280,13499,13501],{"className":282,"code":13500,"language":284,"meta":205,"style":205},"\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",[25,13502,13503,13508,13513,13532,13537,13550,13554,13558,13566,13570,13575,13580,13594,13598,13606,13618,13622,13627,13639,13646,13650,13660,13664,13672],{"__ignoreMap":205},[288,13504,13505],{"class":290,"line":291},[288,13506,13507],{"class":357},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[288,13509,13510],{"class":290,"line":206},[288,13511,13512],{"class":357},"\u002F\u002F加上const就不能修改实参的\n",[288,13514,13515,13517,13520,13522,13524,13527,13530],{"class":290,"line":1352},[288,13516,5537],{"class":294},[288,13518,13519],{"class":2135}," showValue",[288,13521,299],{"class":298},[288,13523,6965],{"class":294},[288,13525,13526],{"class":294}," int&",[288,13528,13529],{"class":5389}," v",[288,13531,12615],{"class":298},[288,13533,13534],{"class":290,"line":1367},[288,13535,13536],{"class":357},"    \u002F\u002Fv += 100;\n",[288,13538,13539,13541,13543,13546,13548],{"class":290,"line":1373},[288,13540,6702],{"class":298},[288,13542,1341],{"class":294},[288,13544,13545],{"class":298}," v ",[288,13547,1341],{"class":294},[288,13549,9013],{"class":298},[288,13551,13552],{"class":290,"line":1387},[288,13553,1737],{"class":298},[288,13555,13556],{"class":290,"line":1393},[288,13557,2572],{"emptyLinePlaceholder":217},[288,13559,13560,13562,13564],{"class":290,"line":1484},[288,13561,302],{"class":294},[288,13563,2145],{"class":2135},[288,13565,11026],{"class":298},[288,13567,13568],{"class":290,"line":1490},[288,13569,2572],{"emptyLinePlaceholder":217},[288,13571,13572],{"class":290,"line":1502},[288,13573,13574],{"class":357},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[288,13576,13577],{"class":290,"line":1784},[288,13578,13579],{"class":357},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[288,13581,13582,13584,13586,13588,13590,13592],{"class":290,"line":1789},[288,13583,11394],{"class":294},[288,13585,13526],{"class":294},[288,13587,13107],{"class":298},[288,13589,344],{"class":294},[288,13591,2210],{"class":347},[288,13593,1463],{"class":298},[288,13595,13596],{"class":290,"line":1795},[288,13597,2572],{"emptyLinePlaceholder":217},[288,13599,13600,13603],{"class":290,"line":1800},[288,13601,13602],{"class":357},"    \u002F\u002Fref = 100;",[288,13604,13605],{"class":357},"  \u002F\u002F加入const后不可以修改变量\n",[288,13607,13608,13610,13612,13614,13616],{"class":290,"line":1814},[288,13609,6702],{"class":298},[288,13611,1341],{"class":294},[288,13613,13107],{"class":298},[288,13615,1341],{"class":294},[288,13617,9013],{"class":298},[288,13619,13620],{"class":290,"line":1819},[288,13621,2572],{"emptyLinePlaceholder":217},[288,13623,13624],{"class":290,"line":1825},[288,13625,13626],{"class":357},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[288,13628,13629,13631,13633,13635,13637],{"class":290,"line":1846},[288,13630,2157],{"class":294},[288,13632,11042],{"class":298},[288,13634,344],{"class":294},[288,13636,2210],{"class":347},[288,13638,1463],{"class":298},[288,13640,13641,13644],{"class":290,"line":1851},[288,13642,13643],{"class":2135},"    showValue",[288,13645,13461],{"class":298},[288,13647,13648],{"class":290,"line":1865},[288,13649,2572],{"emptyLinePlaceholder":217},[288,13651,13652,13654,13656,13658],{"class":290,"line":1870},[288,13653,2475],{"class":2135},[288,13655,299],{"class":298},[288,13657,2480],{"class":403},[288,13659,2891],{"class":298},[288,13661,13662],{"class":290,"line":1899},[288,13663,2572],{"emptyLinePlaceholder":217},[288,13665,13666,13668,13670],{"class":290,"line":1904},[288,13667,4262],{"class":294},[288,13669,4265],{"class":347},[288,13671,1463],{"class":298},[288,13673,13674],{"class":290,"line":1921},[288,13675,1737],{"class":298},[5299,13677,13678],{},"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":205,"searchDepth":206,"depth":206,"links":13680},[13681,13682,13683,13684,13685,13686],{"id":12213,"depth":206,"text":12214},{"id":12392,"depth":206,"text":12393},{"id":12575,"depth":206,"text":12576},{"id":12979,"depth":206,"text":12980},{"id":13306,"depth":206,"text":13307},{"id":13486,"depth":206,"text":13487},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12205,"description":205},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13693,"title":13694,"body":13695,"description":205,"extension":215,"meta":14776,"navigation":217,"path":14777,"seo":14778,"stem":14779,"__hash__":14780},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13696,"toc":14768},[13697,13700,13704,13707,13712,13944,13946,13957,13961,13964,13972,14076,14079,14083,14086,14090,14093,14098,14120,14126,14453,14456,14460,14468,14765],[10,13698,13694],{"id":13699},"_7函数高级部分",[14,13701,13703],{"id":13702},"_71函数默认参数","7.1函数默认参数",[19,13705,13706],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13708,5354,13709],{},[25,13710,13711],{}," 返回值类型  函数名 （参数= 默认值）{}",[280,13713,13715],{"className":282,"code":13714,"language":284,"meta":205,"style":205},"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",[25,13716,13717,13752,13767,13771,13775,13780,13785,13814,13834,13844,13848,13852,13860,13864,13892,13914,13918,13928,13932,13940],{"__ignoreMap":205},[288,13718,13719,13721,13723,13725,13727,13729,13731,13733,13735,13738,13740,13742,13744,13746,13748,13750],{"class":290,"line":291},[288,13720,302],{"class":294},[288,13722,11558],{"class":2135},[288,13724,299],{"class":298},[288,13726,302],{"class":294},[288,13728,1571],{"class":5389},[288,13730,12608],{"class":298},[288,13732,302],{"class":294},[288,13734,3005],{"class":5389},[288,13736,13737],{"class":294}," =",[288,13739,2210],{"class":347},[288,13741,12608],{"class":298},[288,13743,302],{"class":294},[288,13745,3021],{"class":5389},[288,13747,13737],{"class":294},[288,13749,2210],{"class":347},[288,13751,12615],{"class":298},[288,13753,13754,13756,13758,13760,13762,13764],{"class":290,"line":206},[288,13755,4262],{"class":294},[288,13757,11042],{"class":298},[288,13759,778],{"class":294},[288,13761,11055],{"class":298},[288,13763,778],{"class":294},[288,13765,13766],{"class":298}," c;\n",[288,13768,13769],{"class":290,"line":1352},[288,13770,1737],{"class":298},[288,13772,13773],{"class":290,"line":1367},[288,13774,2572],{"emptyLinePlaceholder":217},[288,13776,13777],{"class":290,"line":1373},[288,13778,13779],{"class":357},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[288,13781,13782],{"class":290,"line":1387},[288,13783,13784],{"class":357},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[288,13786,13787,13789,13792,13794,13796,13798,13800,13802,13804,13806,13808,13810,13812],{"class":290,"line":1393},[288,13788,302],{"class":294},[288,13790,13791],{"class":2135}," func2",[288,13793,299],{"class":298},[288,13795,302],{"class":294},[288,13797,1571],{"class":5389},[288,13799,13737],{"class":294},[288,13801,2210],{"class":347},[288,13803,12608],{"class":298},[288,13805,302],{"class":294},[288,13807,3005],{"class":5389},[288,13809,13737],{"class":294},[288,13811,2210],{"class":347},[288,13813,2891],{"class":298},[288,13815,13816,13818,13820,13822,13824,13826,13828,13830,13832],{"class":290,"line":1484},[288,13817,302],{"class":294},[288,13819,13791],{"class":2135},[288,13821,299],{"class":298},[288,13823,302],{"class":294},[288,13825,1571],{"class":5389},[288,13827,12608],{"class":298},[288,13829,302],{"class":294},[288,13831,3005],{"class":5389},[288,13833,12615],{"class":298},[288,13835,13836,13838,13840,13842],{"class":290,"line":1490},[288,13837,4262],{"class":294},[288,13839,11042],{"class":298},[288,13841,778],{"class":294},[288,13843,12636],{"class":298},[288,13845,13846],{"class":290,"line":1502},[288,13847,1737],{"class":298},[288,13849,13850],{"class":290,"line":1784},[288,13851,2572],{"emptyLinePlaceholder":217},[288,13853,13854,13856,13858],{"class":290,"line":1789},[288,13855,302],{"class":294},[288,13857,2145],{"class":2135},[288,13859,11026],{"class":298},[288,13861,13862],{"class":290,"line":1795},[288,13863,2572],{"emptyLinePlaceholder":217},[288,13865,13866,13868,13870,13873,13875,13877,13879,13881,13883,13885,13888,13890],{"class":290,"line":1800},[288,13867,6702],{"class":298},[288,13869,1341],{"class":294},[288,13871,13872],{"class":403}," \"ret = \"",[288,13874,1617],{"class":294},[288,13876,11558],{"class":2135},[288,13878,299],{"class":298},[288,13880,997],{"class":347},[288,13882,12608],{"class":298},[288,13884,997],{"class":347},[288,13886,13887],{"class":298},") ",[288,13889,1341],{"class":294},[288,13891,9013],{"class":298},[288,13893,13894,13896,13898,13900,13902,13904,13906,13908,13910,13912],{"class":290,"line":1814},[288,13895,6702],{"class":298},[288,13897,1341],{"class":294},[288,13899,13872],{"class":403},[288,13901,1617],{"class":294},[288,13903,11558],{"class":2135},[288,13905,299],{"class":298},[288,13907,608],{"class":347},[288,13909,13887],{"class":298},[288,13911,1341],{"class":294},[288,13913,9013],{"class":298},[288,13915,13916],{"class":290,"line":1819},[288,13917,2572],{"emptyLinePlaceholder":217},[288,13919,13920,13922,13924,13926],{"class":290,"line":1825},[288,13921,2475],{"class":2135},[288,13923,299],{"class":298},[288,13925,2480],{"class":403},[288,13927,2891],{"class":298},[288,13929,13930],{"class":290,"line":1846},[288,13931,2572],{"emptyLinePlaceholder":217},[288,13933,13934,13936,13938],{"class":290,"line":1851},[288,13935,4262],{"class":294},[288,13937,4265],{"class":347},[288,13939,1463],{"class":298},[288,13941,13942],{"class":290,"line":1865},[288,13943,1737],{"class":298},[19,13945,11505],{},[243,13947,13948,13951,13954],{},[246,13949,13950],{},"我传就用我；没传就用你",[246,13952,13953],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[246,13955,13956],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13958,13960],{"id":13959},"_72函数的占位参数","7.2函数的占位参数",[19,13962,13963],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13965,13966,13968,13969],{},[448,13967,5354],{}," ",[25,13970,13971],{},"返回值类型 函数名 (数据类型){}",[280,13973,13975],{"className":282,"code":13974,"language":284,"meta":205,"style":205},"\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",[25,13976,13977,13982,14000,14013,14017,14025,14029,14046,14050,14060,14064,14072],{"__ignoreMap":205},[288,13978,13979],{"class":290,"line":291},[288,13980,13981],{"class":357},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[288,13983,13984,13986,13988,13990,13992,13994,13996,13998],{"class":290,"line":206},[288,13985,5537],{"class":294},[288,13987,11558],{"class":2135},[288,13989,299],{"class":298},[288,13991,302],{"class":294},[288,13993,1571],{"class":5389},[288,13995,12608],{"class":298},[288,13997,302],{"class":294},[288,13999,12615],{"class":298},[288,14001,14002,14004,14006,14009,14011],{"class":290,"line":1352},[288,14003,6702],{"class":298},[288,14005,1341],{"class":294},[288,14007,14008],{"class":403}," \"this is func\"",[288,14010,1617],{"class":294},[288,14012,9013],{"class":298},[288,14014,14015],{"class":290,"line":1367},[288,14016,1737],{"class":298},[288,14018,14019,14021,14023],{"class":290,"line":1373},[288,14020,302],{"class":294},[288,14022,2145],{"class":2135},[288,14024,11026],{"class":298},[288,14026,14027],{"class":290,"line":1387},[288,14028,2572],{"emptyLinePlaceholder":217},[288,14030,14031,14033,14035,14037,14039,14041,14043],{"class":290,"line":1393},[288,14032,13458],{"class":2135},[288,14034,299],{"class":298},[288,14036,743],{"class":347},[288,14038,675],{"class":298},[288,14040,743],{"class":347},[288,14042,6139],{"class":298},[288,14044,14045],{"class":357}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[288,14047,14048],{"class":290,"line":1484},[288,14049,2572],{"emptyLinePlaceholder":217},[288,14051,14052,14054,14056,14058],{"class":290,"line":1490},[288,14053,2475],{"class":2135},[288,14055,299],{"class":298},[288,14057,2480],{"class":403},[288,14059,2891],{"class":298},[288,14061,14062],{"class":290,"line":1502},[288,14063,2572],{"emptyLinePlaceholder":217},[288,14065,14066,14068,14070],{"class":290,"line":1784},[288,14067,4262],{"class":294},[288,14069,4265],{"class":347},[288,14071,1463],{"class":298},[288,14073,14074],{"class":290,"line":1789},[288,14075,1737],{"class":298},[19,14077,14078],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14080,14082],{"id":14081},"_73函数重载","7.3函数重载",[19,14084,14085],{},"意思是函数名是可以相同的",[260,14087,14089],{"id":14088},"_731基本语法","7.3.1基本语法",[19,14091,14092],{},"作用：函数名可以相同，提高复用性",[19,14094,14095],{},[448,14096,14097],{},"函数重载满足条件：",[1304,14099,14100,14103,14106],{},[246,14101,14102],{},"同一个作用域下",[246,14104,14105],{},"函数名称相同",[246,14107,14108,14109,14112,14113,14116,14117],{},"函数参数",[448,14110,14111],{},"类型不同","  或者 ",[448,14114,14115],{},"个数不同"," 或者 ",[448,14118,14119],{},"顺序不同",[19,14121,14122,14125],{},[448,14123,14124],{},"注意:","  函数的返回值不可以作为函数重载的条件",[280,14127,14129],{"className":10114,"code":14128,"language":10116,"meta":205,"style":205},"\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",[25,14130,14131,14136,14144,14148,14161,14165,14179,14183,14196,14200,14215,14219,14232,14236,14257,14261,14274,14278,14298,14302,14315,14319,14323,14328,14333,14338,14343,14348,14352,14356,14364,14368,14374,14384,14394,14408,14423,14427,14437,14441,14449],{"__ignoreMap":205},[288,14132,14133],{"class":290,"line":291},[288,14134,14135],{"class":357},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[288,14137,14138,14140,14142],{"class":290,"line":206},[288,14139,5537],{"class":294},[288,14141,11558],{"class":2135},[288,14143,2148],{"class":298},[288,14145,14146],{"class":290,"line":1352},[288,14147,1718],{"class":298},[288,14149,14150,14152,14154,14157,14159],{"class":290,"line":1367},[288,14151,6702],{"class":298},[288,14153,1341],{"class":294},[288,14155,14156],{"class":403}," \"func 的调用！\"",[288,14158,1617],{"class":294},[288,14160,9013],{"class":298},[288,14162,14163],{"class":290,"line":1373},[288,14164,1737],{"class":298},[288,14166,14167,14169,14171,14173,14175,14177],{"class":290,"line":1387},[288,14168,5537],{"class":294},[288,14170,11558],{"class":2135},[288,14172,299],{"class":298},[288,14174,302],{"class":294},[288,14176,1571],{"class":5389},[288,14178,305],{"class":298},[288,14180,14181],{"class":290,"line":1393},[288,14182,1718],{"class":298},[288,14184,14185,14187,14189,14192,14194],{"class":290,"line":1484},[288,14186,6702],{"class":298},[288,14188,1341],{"class":294},[288,14190,14191],{"class":403}," \"func (int a) 的调用！\"",[288,14193,1617],{"class":294},[288,14195,9013],{"class":298},[288,14197,14198],{"class":290,"line":1490},[288,14199,1737],{"class":298},[288,14201,14202,14204,14206,14208,14211,14213],{"class":290,"line":1502},[288,14203,5537],{"class":294},[288,14205,11558],{"class":2135},[288,14207,299],{"class":298},[288,14209,14210],{"class":294},"double",[288,14212,1571],{"class":5389},[288,14214,305],{"class":298},[288,14216,14217],{"class":290,"line":1784},[288,14218,1718],{"class":298},[288,14220,14221,14223,14225,14228,14230],{"class":290,"line":1789},[288,14222,6702],{"class":298},[288,14224,1341],{"class":294},[288,14226,14227],{"class":403}," \"func (double a)的调用！\"",[288,14229,1617],{"class":294},[288,14231,9013],{"class":298},[288,14233,14234],{"class":290,"line":1795},[288,14235,1737],{"class":298},[288,14237,14238,14240,14242,14244,14246,14248,14251,14253,14255],{"class":290,"line":1800},[288,14239,5537],{"class":294},[288,14241,11558],{"class":2135},[288,14243,299],{"class":298},[288,14245,302],{"class":294},[288,14247,1571],{"class":5389},[288,14249,14250],{"class":298}," ,",[288,14252,14210],{"class":294},[288,14254,3005],{"class":5389},[288,14256,305],{"class":298},[288,14258,14259],{"class":290,"line":1814},[288,14260,1718],{"class":298},[288,14262,14263,14265,14267,14270,14272],{"class":290,"line":1819},[288,14264,6702],{"class":298},[288,14266,1341],{"class":294},[288,14268,14269],{"class":403}," \"func (int a ,double b) 的调用！\"",[288,14271,1617],{"class":294},[288,14273,9013],{"class":298},[288,14275,14276],{"class":290,"line":1825},[288,14277,1737],{"class":298},[288,14279,14280,14282,14284,14286,14288,14290,14292,14294,14296],{"class":290,"line":1846},[288,14281,5537],{"class":294},[288,14283,11558],{"class":2135},[288,14285,299],{"class":298},[288,14287,14210],{"class":294},[288,14289,1571],{"class":5389},[288,14291,14250],{"class":298},[288,14293,302],{"class":294},[288,14295,3005],{"class":5389},[288,14297,305],{"class":298},[288,14299,14300],{"class":290,"line":1851},[288,14301,1718],{"class":298},[288,14303,14304,14306,14308,14311,14313],{"class":290,"line":1865},[288,14305,6702],{"class":298},[288,14307,1341],{"class":294},[288,14309,14310],{"class":403}," \"func (double a ,int b)的调用！\"",[288,14312,1617],{"class":294},[288,14314,9013],{"class":298},[288,14316,14317],{"class":290,"line":1870},[288,14318,1737],{"class":298},[288,14320,14321],{"class":290,"line":1899},[288,14322,2572],{"emptyLinePlaceholder":217},[288,14324,14325],{"class":290,"line":1904},[288,14326,14327],{"class":357},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[288,14329,14330],{"class":290,"line":1921},[288,14331,14332],{"class":357},"\u002F\u002Fint func(double a, int b)\n",[288,14334,14335],{"class":290,"line":1926},[288,14336,14337],{"class":357},"\u002F\u002F{\n",[288,14339,14340],{"class":290,"line":1931},[288,14341,14342],{"class":357},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[288,14344,14345],{"class":290,"line":1936},[288,14346,14347],{"class":357},"\u002F\u002F}\n",[288,14349,14350],{"class":290,"line":1950},[288,14351,2572],{"emptyLinePlaceholder":217},[288,14353,14354],{"class":290,"line":1955},[288,14355,2572],{"emptyLinePlaceholder":217},[288,14357,14358,14360,14362],{"class":290,"line":2749},[288,14359,302],{"class":294},[288,14361,2145],{"class":2135},[288,14363,11026],{"class":298},[288,14365,14366],{"class":290,"line":2763},[288,14367,2572],{"emptyLinePlaceholder":217},[288,14369,14370,14372],{"class":290,"line":2771},[288,14371,13458],{"class":2135},[288,14373,5809],{"class":298},[288,14375,14376,14378,14380,14382],{"class":290,"line":2776},[288,14377,13458],{"class":2135},[288,14379,299],{"class":298},[288,14381,743],{"class":347},[288,14383,2891],{"class":298},[288,14385,14386,14388,14390,14392],{"class":290,"line":2782},[288,14387,13458],{"class":2135},[288,14389,299],{"class":298},[288,14391,348],{"class":347},[288,14393,2891],{"class":298},[288,14395,14396,14398,14400,14402,14404,14406],{"class":290,"line":2788},[288,14397,13458],{"class":2135},[288,14399,299],{"class":298},[288,14401,743],{"class":347},[288,14403,675],{"class":298},[288,14405,348],{"class":347},[288,14407,2891],{"class":298},[288,14409,14410,14412,14414,14416,14419,14421],{"class":290,"line":2793},[288,14411,13458],{"class":2135},[288,14413,299],{"class":298},[288,14415,348],{"class":347},[288,14417,14418],{"class":298}," , ",[288,14420,743],{"class":347},[288,14422,2891],{"class":298},[288,14424,14425],{"class":290,"line":8121},[288,14426,13383],{"class":298},[288,14428,14429,14431,14433,14435],{"class":290,"line":8145},[288,14430,2475],{"class":2135},[288,14432,299],{"class":298},[288,14434,2480],{"class":403},[288,14436,2891],{"class":298},[288,14438,14439],{"class":290,"line":8150},[288,14440,2572],{"emptyLinePlaceholder":217},[288,14442,14443,14445,14447],{"class":290,"line":8156},[288,14444,4262],{"class":294},[288,14446,4265],{"class":347},[288,14448,1463],{"class":298},[288,14450,14451],{"class":290,"line":8183},[288,14452,1737],{"class":298},[19,14454,14455],{},"重点：函数返回值不可以作为函数重载条件！",[260,14457,14459],{"id":14458},"_732注意事项","7.3.2注意事项",[1304,14461,14462,14465],{},[246,14463,14464],{},"引用作为重载条件!!!",[246,14466,14467],{},"函数重载碰到函数默认参数",[280,14469,14471],{"className":282,"code":14470,"language":284,"meta":205,"style":205},"\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",[25,14472,14473,14478,14483,14487,14503,14507,14520,14524,14528,14546,14550,14563,14567,14571,14575,14580,14584,14608,14612,14625,14629,14633,14647,14651,14664,14668,14672,14680,14684,14696,14706,14719,14723,14727,14735,14739,14749,14753,14761],{"__ignoreMap":205},[288,14474,14475],{"class":290,"line":291},[288,14476,14477],{"class":357},"\u002F\u002F函数重载注意事项\n",[288,14479,14480],{"class":290,"line":206},[288,14481,14482],{"class":357},"\u002F\u002F1、引用作为重载条件\n",[288,14484,14485],{"class":290,"line":1352},[288,14486,2572],{"emptyLinePlaceholder":217},[288,14488,14489,14491,14493,14495,14497,14499,14501],{"class":290,"line":1367},[288,14490,5537],{"class":294},[288,14492,11558],{"class":2135},[288,14494,299],{"class":298},[288,14496,302],{"class":294},[288,14498,10757],{"class":294},[288,14500,104],{"class":5389},[288,14502,305],{"class":298},[288,14504,14505],{"class":290,"line":1373},[288,14506,1718],{"class":298},[288,14508,14509,14511,14513,14516,14518],{"class":290,"line":1387},[288,14510,6702],{"class":298},[288,14512,1341],{"class":294},[288,14514,14515],{"class":403}," \"func (int &a) 调用 \"",[288,14517,1617],{"class":294},[288,14519,9013],{"class":298},[288,14521,14522],{"class":290,"line":1393},[288,14523,1737],{"class":298},[288,14525,14526],{"class":290,"line":1484},[288,14527,2572],{"emptyLinePlaceholder":217},[288,14529,14530,14532,14534,14536,14538,14540,14542,14544],{"class":290,"line":1490},[288,14531,5537],{"class":294},[288,14533,11558],{"class":2135},[288,14535,299],{"class":298},[288,14537,6965],{"class":294},[288,14539,2554],{"class":294},[288,14541,10757],{"class":294},[288,14543,104],{"class":5389},[288,14545,305],{"class":298},[288,14547,14548],{"class":290,"line":1502},[288,14549,1718],{"class":298},[288,14551,14552,14554,14556,14559,14561],{"class":290,"line":1784},[288,14553,6702],{"class":298},[288,14555,1341],{"class":294},[288,14557,14558],{"class":403}," \"func (const int &a) 调用 \"",[288,14560,1617],{"class":294},[288,14562,9013],{"class":298},[288,14564,14565],{"class":290,"line":1789},[288,14566,1737],{"class":298},[288,14568,14569],{"class":290,"line":1795},[288,14570,2572],{"emptyLinePlaceholder":217},[288,14572,14573],{"class":290,"line":1800},[288,14574,2572],{"emptyLinePlaceholder":217},[288,14576,14577],{"class":290,"line":1814},[288,14578,14579],{"class":357},"\u002F\u002F2、函数重载碰到函数默认参数\n",[288,14581,14582],{"class":290,"line":1819},[288,14583,2572],{"emptyLinePlaceholder":217},[288,14585,14586,14588,14590,14592,14594,14596,14598,14600,14602,14604,14606],{"class":290,"line":1825},[288,14587,5537],{"class":294},[288,14589,13791],{"class":2135},[288,14591,299],{"class":298},[288,14593,302],{"class":294},[288,14595,1571],{"class":5389},[288,14597,12608],{"class":298},[288,14599,302],{"class":294},[288,14601,3005],{"class":5389},[288,14603,13737],{"class":294},[288,14605,2210],{"class":347},[288,14607,305],{"class":298},[288,14609,14610],{"class":290,"line":1846},[288,14611,1718],{"class":298},[288,14613,14614,14616,14618,14621,14623],{"class":290,"line":1851},[288,14615,6702],{"class":298},[288,14617,1341],{"class":294},[288,14619,14620],{"class":403}," \"func2(int a, int b = 10) 调用\"",[288,14622,1617],{"class":294},[288,14624,9013],{"class":298},[288,14626,14627],{"class":290,"line":1865},[288,14628,1737],{"class":298},[288,14630,14631],{"class":290,"line":1870},[288,14632,2572],{"emptyLinePlaceholder":217},[288,14634,14635,14637,14639,14641,14643,14645],{"class":290,"line":1899},[288,14636,5537],{"class":294},[288,14638,13791],{"class":2135},[288,14640,299],{"class":298},[288,14642,302],{"class":294},[288,14644,1571],{"class":5389},[288,14646,305],{"class":298},[288,14648,14649],{"class":290,"line":1904},[288,14650,1718],{"class":298},[288,14652,14653,14655,14657,14660,14662],{"class":290,"line":1921},[288,14654,6702],{"class":298},[288,14656,1341],{"class":294},[288,14658,14659],{"class":403}," \"func2(int a) 调用\"",[288,14661,1617],{"class":294},[288,14663,9013],{"class":298},[288,14665,14666],{"class":290,"line":1926},[288,14667,1737],{"class":298},[288,14669,14670],{"class":290,"line":1931},[288,14671,2572],{"emptyLinePlaceholder":217},[288,14673,14674,14676,14678],{"class":290,"line":1936},[288,14675,302],{"class":294},[288,14677,2145],{"class":2135},[288,14679,11026],{"class":298},[288,14681,14682],{"class":290,"line":1950},[288,14683,13383],{"class":298},[288,14685,14686,14688,14690,14692,14694],{"class":290,"line":1955},[288,14687,2157],{"class":294},[288,14689,11042],{"class":298},[288,14691,344],{"class":294},[288,14693,2210],{"class":347},[288,14695,1463],{"class":298},[288,14697,14698,14700,14703],{"class":290,"line":2749},[288,14699,13458],{"class":2135},[288,14701,14702],{"class":298},"(a);",[288,14704,14705],{"class":357}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[288,14707,14708,14710,14712,14714,14716],{"class":290,"line":2763},[288,14709,13458],{"class":2135},[288,14711,299],{"class":298},[288,14713,743],{"class":347},[288,14715,6139],{"class":298},[288,14717,14718],{"class":357},"\u002F\u002F调用有const   10是个常量\n",[288,14720,14721],{"class":290,"line":2771},[288,14722,2572],{"emptyLinePlaceholder":217},[288,14724,14725],{"class":290,"line":2776},[288,14726,2572],{"emptyLinePlaceholder":217},[288,14728,14729,14732],{"class":290,"line":2782},[288,14730,14731],{"class":357},"    \u002F\u002Ffunc2(10);",[288,14733,14734],{"class":357}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[288,14736,14737],{"class":290,"line":2788},[288,14738,2572],{"emptyLinePlaceholder":217},[288,14740,14741,14743,14745,14747],{"class":290,"line":2793},[288,14742,2475],{"class":2135},[288,14744,299],{"class":298},[288,14746,2480],{"class":403},[288,14748,2891],{"class":298},[288,14750,14751],{"class":290,"line":8121},[288,14752,2572],{"emptyLinePlaceholder":217},[288,14754,14755,14757,14759],{"class":290,"line":8145},[288,14756,4262],{"class":294},[288,14758,4265],{"class":347},[288,14760,1463],{"class":298},[288,14762,14763],{"class":290,"line":8150},[288,14764,1737],{"class":298},[5299,14766,14767],{},"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":205,"searchDepth":206,"depth":206,"links":14769},[14770,14771,14772],{"id":13702,"depth":206,"text":13703},{"id":13959,"depth":206,"text":13960},{"id":14081,"depth":206,"text":14082,"children":14773},[14774,14775],{"id":14088,"depth":1352,"text":14089},{"id":14458,"depth":1352,"text":14459},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13694,"description":205},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14782,"title":14783,"body":14784,"description":23538,"extension":215,"meta":23539,"navigation":217,"path":23540,"seo":23541,"stem":23542,"__hash__":23543},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14785,"toc":23519},[14786,14789,14795,14802,14807,14810,14813,14816,14820,14824,14827,14830,14838,14843,14846,14853,14858,15017,15020,15273,15276,15279,15282,15287,15290,15293,15304,15309,15545,15549,15559,15562,15570,15717,15721,15724,15727,15731,16176,16180,16188,16196,17108,17115,17120,17748,17751,17754,17757,17876,17879,17966,17969,18095,18098,18192,18195,18548,18552,18560,18564,18571,18574,18577,18588,18594,18599,18611,18619,18639,18647,18664,18850,18853,18857,18860,18863,18866,18869,18872,18875,18878,19338,19344,19348,19351,19362,19949,19952,20441,20445,20448,20451,20454,20457,20460,20468,20864,20868,20871,20874,21321,21324,21327,21332,21335,21340,21343,21347,21350,21352,21358,21361,21667,21677,21718,21722,21725,21727,21760,21763,22070,22072,22087,22090,22113,22122,22128,22131,22135,22138,22141,22146,22157,22162,22170,22175,22305,22308,22311,22486,22491,22703,22707,22710,22824,22829,23068,23072,23076,23079,23082,23087,23192,23195,23198,23201,23205,23316,23319,23322,23327,23379,23382,23385,23390,23436,23439,23444,23512,23514,23517],[10,14787,14783],{"id":14788},"_8类和对象",[19,14790,14791,14792],{},"C++面向对象的三大特性为",[448,14793,14794],{},"封装、继承、多态",[19,14796,14797,14798,14801],{},"C++认为",[448,14799,14800],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14803,14804],{},[448,14805,14806],{},"例如：",[19,14808,14809],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14811,14812],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14814,14815],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14817,14819],{"id":14818},"_81封装","8.1封装",[260,14821,14823],{"id":14822},"_811封装的意义","8.1.1封装的意义",[19,14825,14826],{},"封装是C++面向对象三大特性之一",[19,14828,14829],{},"封装的意义：",[1304,14831,14832,14835],{},[246,14833,14834],{},"将属性和行为作为一个整体，表现生活中的事物",[246,14836,14837],{},"将属性和行为加以权限控制",[19,14839,14840],{},[448,14841,14842],{},"封装意义一：",[19,14844,14845],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14847,14848,13968,14850],{},[448,14849,5354],{},[25,14851,14852],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[243,14854,14855],{},[246,14856,14857],{},"**示例1：**设计一个圆类，求圆的周长",[280,14859,14861],{"className":282,"code":14860,"language":284,"meta":205,"style":205},"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",[25,14862,14863,14871,14875,14880,14885,14890,14895,14902,14907,14917,14921,14939,14943,14947,14955,14959,14964,14969,14974,14979,14990,15013],{"__ignoreMap":205},[288,14864,14865,14868],{"class":290,"line":291},[288,14866,14867],{"class":294},"class",[288,14869,14870],{"class":2135}," Circle\n",[288,14872,14873],{"class":290,"line":206},[288,14874,1718],{"class":298},[288,14876,14877],{"class":290,"line":1352},[288,14878,14879],{"class":357},"    \u002F\u002F访问权限\n",[288,14881,14882],{"class":290,"line":1367},[288,14883,14884],{"class":357},"    \u002F\u002F公共权限\n",[288,14886,14887],{"class":290,"line":1373},[288,14888,14889],{"class":294},"public:\n",[288,14891,14892],{"class":290,"line":1387},[288,14893,14894],{"class":357},"    \u002F\u002F属性\n",[288,14896,14897,14899],{"class":290,"line":1393},[288,14898,2157],{"class":294},[288,14900,14901],{"class":298}," m_r;\n",[288,14903,14904],{"class":290,"line":1484},[288,14905,14906],{"class":357},"    \u002F\u002F行为\n",[288,14908,14909,14912,14915],{"class":290,"line":1490},[288,14910,14911],{"class":294},"    double",[288,14913,14914],{"class":2135}," calculateZC",[288,14916,2148],{"class":298},[288,14918,14919],{"class":290,"line":1502},[288,14920,2202],{"class":298},[288,14922,14923,14926,14929,14931,14934,14936],{"class":290,"line":1784},[288,14924,14925],{"class":294},"        return",[288,14927,14928],{"class":347}," 2",[288,14930,752],{"class":294},[288,14932,14933],{"class":298},"PI",[288,14935,752],{"class":294},[288,14937,14938],{"class":298},"m_r;\n",[288,14940,14941],{"class":290,"line":1789},[288,14942,2359],{"class":298},[288,14944,14945],{"class":290,"line":1795},[288,14946,4167],{"class":298},[288,14948,14949,14951,14953],{"class":290,"line":1800},[288,14950,302],{"class":294},[288,14952,2145],{"class":2135},[288,14954,2148],{"class":298},[288,14956,14957],{"class":290,"line":1814},[288,14958,1718],{"class":298},[288,14960,14961],{"class":290,"line":1819},[288,14962,14963],{"class":357},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[288,14965,14966],{"class":290,"line":1825},[288,14967,14968],{"class":357},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[288,14970,14971],{"class":290,"line":1846},[288,14972,14973],{"class":298},"    Circle c1;\n",[288,14975,14976],{"class":290,"line":1851},[288,14977,14978],{"class":357},"    \u002F\u002F给圆对象 的属性进行赋值\n",[288,14980,14981,14984,14986,14988],{"class":290,"line":1865},[288,14982,14983],{"class":298},"    c1.m_r",[288,14985,344],{"class":294},[288,14987,743],{"class":347},[288,14989,1463],{"class":298},[288,14991,14992,14994,14996,14999,15001,15004,15007,15009,15011],{"class":290,"line":1870},[288,14993,1723],{"class":298},[288,14995,1341],{"class":294},[288,14997,14998],{"class":403},"\"圆的周长\"",[288,15000,1341],{"class":294},[288,15002,15003],{"class":298},"c1.",[288,15005,15006],{"class":2135},"calculateZC",[288,15008,2599],{"class":298},[288,15010,1341],{"class":294},[288,15012,1364],{"class":298},[288,15014,15015],{"class":290,"line":1899},[288,15016,1737],{"class":298},[19,15018,15019],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[280,15021,15023],{"className":282,"code":15022,"language":284,"meta":205,"style":205},"#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",[25,15024,15025,15031,15041,15047,15053,15057,15061,15066,15073,15078,15096,15100,15110,15114,15119,15135,15139,15149,15153,15158,15166,15170,15202,15206,15210,15218,15222,15227,15232,15246,15260,15269],{"__ignoreMap":205},[288,15026,15027,15029],{"class":290,"line":291},[288,15028,2121],{"class":294},[288,15030,2124],{"class":403},[288,15032,15033,15035,15037,15039],{"class":290,"line":206},[288,15034,2129],{"class":294},[288,15036,2132],{"class":294},[288,15038,2136],{"class":2135},[288,15040,1463],{"class":298},[288,15042,15043,15045],{"class":290,"line":1352},[288,15044,2121],{"class":294},[288,15046,7922],{"class":403},[288,15048,15049,15051],{"class":290,"line":1367},[288,15050,14867],{"class":294},[288,15052,7935],{"class":2135},[288,15054,15055],{"class":290,"line":1373},[288,15056,1718],{"class":298},[288,15058,15059],{"class":290,"line":1387},[288,15060,14889],{"class":294},[288,15062,15063],{"class":290,"line":1393},[288,15064,15065],{"class":298},"    string m_name;\n",[288,15067,15068,15070],{"class":290,"line":1484},[288,15069,2157],{"class":294},[288,15071,15072],{"class":298}," m_id;\n",[288,15074,15075],{"class":290,"line":1490},[288,15076,15077],{"class":357},"    \u002F\u002F赋值姓名\n",[288,15079,15080,15083,15086,15088,15091,15094],{"class":290,"line":1502},[288,15081,15082],{"class":294},"    void",[288,15084,15085],{"class":2135}," setName",[288,15087,299],{"class":298},[288,15089,15090],{"class":2135},"string",[288,15092,15093],{"class":5389}," name",[288,15095,305],{"class":298},[288,15097,15098],{"class":290,"line":1784},[288,15099,2202],{"class":298},[288,15101,15102,15105,15107],{"class":290,"line":1789},[288,15103,15104],{"class":298},"        m_name",[288,15106,344],{"class":294},[288,15108,15109],{"class":298},"name;\n",[288,15111,15112],{"class":290,"line":1795},[288,15113,2359],{"class":298},[288,15115,15116],{"class":290,"line":1800},[288,15117,15118],{"class":357},"    \u002F\u002F赋值学号\n",[288,15120,15121,15123,15126,15128,15130,15133],{"class":290,"line":1814},[288,15122,15082],{"class":294},[288,15124,15125],{"class":2135}," setId",[288,15127,299],{"class":298},[288,15129,302],{"class":294},[288,15131,15132],{"class":5389}," id",[288,15134,305],{"class":298},[288,15136,15137],{"class":290,"line":1819},[288,15138,2202],{"class":298},[288,15140,15141,15144,15146],{"class":290,"line":1825},[288,15142,15143],{"class":298},"        m_id",[288,15145,344],{"class":294},[288,15147,15148],{"class":298},"id;\n",[288,15150,15151],{"class":290,"line":1846},[288,15152,2359],{"class":298},[288,15154,15155],{"class":290,"line":1851},[288,15156,15157],{"class":357},"    \u002F\u002F打印学生信息\n",[288,15159,15160,15162,15164],{"class":290,"line":1865},[288,15161,15082],{"class":294},[288,15163,9788],{"class":2135},[288,15165,2148],{"class":298},[288,15167,15168],{"class":290,"line":1870},[288,15169,2202],{"class":298},[288,15171,15172,15174,15176,15179,15181,15184,15186,15188,15190,15193,15195,15198,15200],{"class":290,"line":1899},[288,15173,3623],{"class":298},[288,15175,1341],{"class":294},[288,15177,15178],{"class":403},"\"姓名：\"",[288,15180,1341],{"class":294},[288,15182,15183],{"class":298},"m_name",[288,15185,1341],{"class":294},[288,15187,4531],{"class":403},[288,15189,1341],{"class":294},[288,15191,15192],{"class":403},"\"学号：\"",[288,15194,1341],{"class":294},[288,15196,15197],{"class":298},"m_id",[288,15199,1341],{"class":294},[288,15201,1364],{"class":298},[288,15203,15204],{"class":290,"line":1904},[288,15205,2359],{"class":298},[288,15207,15208],{"class":290,"line":1921},[288,15209,4167],{"class":298},[288,15211,15212,15214,15216],{"class":290,"line":1926},[288,15213,302],{"class":294},[288,15215,2145],{"class":2135},[288,15217,2148],{"class":298},[288,15219,15220],{"class":290,"line":1931},[288,15221,1718],{"class":298},[288,15223,15224],{"class":290,"line":1936},[288,15225,15226],{"class":357},"    \u002F\u002F实例化\n",[288,15228,15229],{"class":290,"line":1950},[288,15230,15231],{"class":298},"    Student s1;\n",[288,15233,15234,15237,15240,15242,15244],{"class":290,"line":1955},[288,15235,15236],{"class":298},"    s1.",[288,15238,15239],{"class":2135},"setName",[288,15241,299],{"class":298},[288,15243,8089],{"class":403},[288,15245,2891],{"class":298},[288,15247,15248,15250,15253,15255,15258],{"class":290,"line":2749},[288,15249,15236],{"class":298},[288,15251,15252],{"class":2135},"setId",[288,15254,299],{"class":298},[288,15256,15257],{"class":347},"123456",[288,15259,2891],{"class":298},[288,15261,15262,15264,15267],{"class":290,"line":2763},[288,15263,15236],{"class":298},[288,15265,15266],{"class":2135},"printInfo",[288,15268,5809],{"class":298},[288,15270,15271],{"class":290,"line":2771},[288,15272,1737],{"class":298},[19,15274,15275],{},"类中的属性和行为统称为成员",[19,15277,15278],{},"属性：成员属性(成员变量)",[19,15280,15281],{},"方法：成员函数(成员方法)",[19,15283,15284],{},[448,15285,15286],{},"封装意义二：",[19,15288,15289],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15291,15292],{},"访问权限有三种：",[243,15294,15295,15298,15301],{},[246,15296,15297],{},"public        公共权限",[246,15299,15300],{},"protected 保护权限",[246,15302,15303],{},"private      私有权限",[19,15305,15306],{},[448,15307,15308],{},"示例：",[280,15310,15312],{"className":10114,"code":15311,"language":10116,"meta":205,"style":205},"\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",[25,15313,15314,15319,15324,15329,15334,15338,15345,15349,15354,15358,15363,15367,15372,15377,15382,15386,15391,15396,15403,15407,15411,15419,15423,15434,15446,15458,15462,15466,15470,15478,15482,15487,15499,15507,15515,15519,15529,15533,15541],{"__ignoreMap":205},[288,15315,15316],{"class":290,"line":291},[288,15317,15318],{"class":357},"\u002F\u002F三种权限\n",[288,15320,15321],{"class":290,"line":206},[288,15322,15323],{"class":357},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[288,15325,15326],{"class":290,"line":1352},[288,15327,15328],{"class":357},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[288,15330,15331],{"class":290,"line":1367},[288,15332,15333],{"class":357},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[288,15335,15336],{"class":290,"line":1373},[288,15337,2572],{"emptyLinePlaceholder":217},[288,15339,15340,15342],{"class":290,"line":1387},[288,15341,14867],{"class":294},[288,15343,15344],{"class":2135}," Person\n",[288,15346,15347],{"class":290,"line":1393},[288,15348,1718],{"class":298},[288,15350,15351],{"class":290,"line":1484},[288,15352,15353],{"class":357},"    \u002F\u002F姓名  公共权限\n",[288,15355,15356],{"class":290,"line":1490},[288,15357,14889],{"class":294},[288,15359,15360],{"class":290,"line":1502},[288,15361,15362],{"class":298},"    string m_Name;\n",[288,15364,15365],{"class":290,"line":1784},[288,15366,2572],{"emptyLinePlaceholder":217},[288,15368,15369],{"class":290,"line":1789},[288,15370,15371],{"class":357},"    \u002F\u002F汽车  保护权限\n",[288,15373,15374],{"class":290,"line":1795},[288,15375,15376],{"class":294},"protected:\n",[288,15378,15379],{"class":290,"line":1800},[288,15380,15381],{"class":298},"    string m_Car;\n",[288,15383,15384],{"class":290,"line":1814},[288,15385,2572],{"emptyLinePlaceholder":217},[288,15387,15388],{"class":290,"line":1819},[288,15389,15390],{"class":357},"    \u002F\u002F银行卡密码  私有权限\n",[288,15392,15393],{"class":290,"line":1825},[288,15394,15395],{"class":294},"private:\n",[288,15397,15398,15400],{"class":290,"line":1846},[288,15399,2157],{"class":294},[288,15401,15402],{"class":298}," m_Password;\n",[288,15404,15405],{"class":290,"line":1851},[288,15406,2572],{"emptyLinePlaceholder":217},[288,15408,15409],{"class":290,"line":1865},[288,15410,14889],{"class":294},[288,15412,15413,15415,15417],{"class":290,"line":1870},[288,15414,15082],{"class":294},[288,15416,11558],{"class":2135},[288,15418,2148],{"class":298},[288,15420,15421],{"class":290,"line":1899},[288,15422,2202],{"class":298},[288,15424,15425,15428,15430,15432],{"class":290,"line":1904},[288,15426,15427],{"class":298},"        m_Name ",[288,15429,344],{"class":294},[288,15431,9111],{"class":403},[288,15433,1463],{"class":298},[288,15435,15436,15439,15441,15444],{"class":290,"line":1921},[288,15437,15438],{"class":298},"        m_Car ",[288,15440,344],{"class":294},[288,15442,15443],{"class":403}," \"拖拉机\"",[288,15445,1463],{"class":298},[288,15447,15448,15451,15453,15456],{"class":290,"line":1926},[288,15449,15450],{"class":298},"        m_Password ",[288,15452,344],{"class":294},[288,15454,15455],{"class":347}," 123456",[288,15457,1463],{"class":298},[288,15459,15460],{"class":290,"line":1931},[288,15461,2359],{"class":298},[288,15463,15464],{"class":290,"line":1936},[288,15465,4167],{"class":298},[288,15467,15468],{"class":290,"line":1950},[288,15469,2572],{"emptyLinePlaceholder":217},[288,15471,15472,15474,15476],{"class":290,"line":1955},[288,15473,302],{"class":294},[288,15475,2145],{"class":2135},[288,15477,11026],{"class":298},[288,15479,15480],{"class":290,"line":2749},[288,15481,2572],{"emptyLinePlaceholder":217},[288,15483,15484],{"class":290,"line":2763},[288,15485,15486],{"class":298},"    Person p;\n",[288,15488,15489,15492,15494,15497],{"class":290,"line":2771},[288,15490,15491],{"class":298},"    p.m_Name ",[288,15493,344],{"class":294},[288,15495,15496],{"class":403}," \"李四\"",[288,15498,1463],{"class":298},[288,15500,15501,15504],{"class":290,"line":2776},[288,15502,15503],{"class":357},"    \u002F\u002Fp.m_Car = \"奔驰\";",[288,15505,15506],{"class":357},"  \u002F\u002F保护权限类外访问不到\n",[288,15508,15509,15512],{"class":290,"line":2782},[288,15510,15511],{"class":357},"    \u002F\u002Fp.m_Password = 123;",[288,15513,15514],{"class":357}," \u002F\u002F私有权限类外访问不到\n",[288,15516,15517],{"class":290,"line":2788},[288,15518,2572],{"emptyLinePlaceholder":217},[288,15520,15521,15523,15525,15527],{"class":290,"line":2793},[288,15522,2475],{"class":2135},[288,15524,299],{"class":298},[288,15526,2480],{"class":403},[288,15528,2891],{"class":298},[288,15530,15531],{"class":290,"line":8121},[288,15532,2572],{"emptyLinePlaceholder":217},[288,15534,15535,15537,15539],{"class":290,"line":8145},[288,15536,4262],{"class":294},[288,15538,4265],{"class":347},[288,15540,1463],{"class":298},[288,15542,15543],{"class":290,"line":8150},[288,15544,1737],{"class":298},[260,15546,15548],{"id":15547},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15550,15551,15552,15555,15556],{},"在C++中 struct和class唯一的",[448,15553,15554],{},"区别","就在于 ",[448,15557,15558],{},"默认的访问权限不同",[19,15560,15561],{},"区别：",[1304,15563,15564,15567],{},[246,15565,15566],{},"struct 默认权限为公共",[246,15568,15569],{},"class   默认权限为私有",[280,15571,15573],{"className":10114,"code":15572,"language":10116,"meta":205,"style":205},"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",[25,15574,15575,15582,15586,15596,15600,15604,15611,15615,15625,15629,15633,15641,15645,15650,15664,15668,15673,15687,15691,15701,15705,15713],{"__ignoreMap":205},[288,15576,15577,15579],{"class":290,"line":291},[288,15578,14867],{"class":294},[288,15580,15581],{"class":2135}," C1\n",[288,15583,15584],{"class":290,"line":206},[288,15585,1718],{"class":298},[288,15587,15588,15590,15593],{"class":290,"line":1352},[288,15589,2157],{"class":294},[288,15591,15592],{"class":298},"  m_A;",[288,15594,15595],{"class":357}," \u002F\u002F默认是私有权限\n",[288,15597,15598],{"class":290,"line":1367},[288,15599,4167],{"class":298},[288,15601,15602],{"class":290,"line":1373},[288,15603,2572],{"emptyLinePlaceholder":217},[288,15605,15606,15608],{"class":290,"line":1387},[288,15607,7932],{"class":294},[288,15609,15610],{"class":2135}," C2\n",[288,15612,15613],{"class":290,"line":1393},[288,15614,1718],{"class":298},[288,15616,15617,15619,15622],{"class":290,"line":1484},[288,15618,2157],{"class":294},[288,15620,15621],{"class":298}," m_A;",[288,15623,15624],{"class":357},"  \u002F\u002F默认是公共权限\n",[288,15626,15627],{"class":290,"line":1490},[288,15628,4167],{"class":298},[288,15630,15631],{"class":290,"line":1502},[288,15632,2572],{"emptyLinePlaceholder":217},[288,15634,15635,15637,15639],{"class":290,"line":1784},[288,15636,302],{"class":294},[288,15638,2145],{"class":2135},[288,15640,11026],{"class":298},[288,15642,15643],{"class":290,"line":1789},[288,15644,2572],{"emptyLinePlaceholder":217},[288,15646,15647],{"class":290,"line":1795},[288,15648,15649],{"class":298},"    C1 c1;\n",[288,15651,15652,15655,15657,15659,15661],{"class":290,"line":1800},[288,15653,15654],{"class":298},"    c1.m_A ",[288,15656,344],{"class":294},[288,15658,2210],{"class":347},[288,15660,354],{"class":298},[288,15662,15663],{"class":357}," \u002F\u002F错误，访问权限是私有\n",[288,15665,15666],{"class":290,"line":1814},[288,15667,2572],{"emptyLinePlaceholder":217},[288,15669,15670],{"class":290,"line":1819},[288,15671,15672],{"class":298},"    C2 c2;\n",[288,15674,15675,15678,15680,15682,15684],{"class":290,"line":1825},[288,15676,15677],{"class":298},"    c2.m_A ",[288,15679,344],{"class":294},[288,15681,2210],{"class":347},[288,15683,354],{"class":298},[288,15685,15686],{"class":357}," \u002F\u002F正确，访问权限是公共\n",[288,15688,15689],{"class":290,"line":1846},[288,15690,2572],{"emptyLinePlaceholder":217},[288,15692,15693,15695,15697,15699],{"class":290,"line":1851},[288,15694,2475],{"class":2135},[288,15696,299],{"class":298},[288,15698,2480],{"class":403},[288,15700,2891],{"class":298},[288,15702,15703],{"class":290,"line":1865},[288,15704,2572],{"emptyLinePlaceholder":217},[288,15706,15707,15709,15711],{"class":290,"line":1870},[288,15708,4262],{"class":294},[288,15710,4265],{"class":347},[288,15712,1463],{"class":298},[288,15714,15715],{"class":290,"line":1899},[288,15716,1737],{"class":298},[260,15718,15720],{"id":15719},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15722,15723],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15725,15726],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15728,15729],{},[448,15730,15308],{},[280,15732,15734],{"className":10114,"code":15733,"language":10116,"meta":205,"style":205},"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",[25,15735,15736,15746,15750,15754,15759,15773,15782,15786,15796,15800,15807,15811,15815,15819,15824,15833,15840,15844,15849,15865,15888,15901,15908,15912,15921,15925,15929,15934,15950,15960,15964,15968,15972,15980,15984,15994,15998,16006,16010,16014,16022,16026,16030,16035,16048,16071,16075,16080,16093,16115,16119,16124,16138,16146,16150,16160,16164,16172],{"__ignoreMap":205},[288,15737,15738,15740,15743],{"class":290,"line":291},[288,15739,14867],{"class":294},[288,15741,15742],{"class":2135}," Person",[288,15744,15745],{"class":298}," {\n",[288,15747,15748],{"class":290,"line":206},[288,15749,14889],{"class":294},[288,15751,15752],{"class":290,"line":1352},[288,15753,2572],{"emptyLinePlaceholder":217},[288,15755,15756],{"class":290,"line":1367},[288,15757,15758],{"class":357},"    \u002F\u002F姓名设置可读可写\n",[288,15760,15761,15763,15765,15767,15769,15771],{"class":290,"line":1373},[288,15762,15082],{"class":294},[288,15764,15085],{"class":2135},[288,15766,299],{"class":298},[288,15768,15090],{"class":2135},[288,15770,15093],{"class":5389},[288,15772,12615],{"class":298},[288,15774,15775,15777,15779],{"class":290,"line":1387},[288,15776,15427],{"class":298},[288,15778,344],{"class":294},[288,15780,15781],{"class":298}," name;\n",[288,15783,15784],{"class":290,"line":1393},[288,15785,2359],{"class":298},[288,15787,15788,15791,15794],{"class":290,"line":1484},[288,15789,15790],{"class":2135},"    string",[288,15792,15793],{"class":2135}," getName",[288,15795,2148],{"class":298},[288,15797,15798],{"class":290,"line":1490},[288,15799,2202],{"class":298},[288,15801,15802,15804],{"class":290,"line":1502},[288,15803,14925],{"class":294},[288,15805,15806],{"class":298}," m_Name;\n",[288,15808,15809],{"class":290,"line":1784},[288,15810,2359],{"class":298},[288,15812,15813],{"class":290,"line":1789},[288,15814,2572],{"emptyLinePlaceholder":217},[288,15816,15817],{"class":290,"line":1795},[288,15818,2572],{"emptyLinePlaceholder":217},[288,15820,15821],{"class":290,"line":1800},[288,15822,15823],{"class":357},"    \u002F\u002F获取年龄 \n",[288,15825,15826,15828,15831],{"class":290,"line":1814},[288,15827,2157],{"class":294},[288,15829,15830],{"class":2135}," getAge",[288,15832,11026],{"class":298},[288,15834,15835,15837],{"class":290,"line":1819},[288,15836,14925],{"class":294},[288,15838,15839],{"class":298}," m_Age;\n",[288,15841,15842],{"class":290,"line":1825},[288,15843,2359],{"class":298},[288,15845,15846],{"class":290,"line":1846},[288,15847,15848],{"class":357},"    \u002F\u002F设置年龄\n",[288,15850,15851,15853,15856,15858,15860,15863],{"class":290,"line":1851},[288,15852,15082],{"class":294},[288,15854,15855],{"class":2135}," setAge",[288,15857,299],{"class":298},[288,15859,302],{"class":294},[288,15861,15862],{"class":5389}," age",[288,15864,12615],{"class":298},[288,15866,15867,15869,15872,15874,15876,15878,15881,15883,15886],{"class":290,"line":1865},[288,15868,2669],{"class":294},[288,15870,15871],{"class":298}," (age ",[288,15873,1207],{"class":294},[288,15875,4265],{"class":347},[288,15877,3427],{"class":294},[288,15879,15880],{"class":298}," age ",[288,15882,1257],{"class":294},[288,15884,15885],{"class":347}," 150",[288,15887,12615],{"class":298},[288,15889,15890,15892,15894,15897,15899],{"class":290,"line":1870},[288,15891,9892],{"class":298},[288,15893,1341],{"class":294},[288,15895,15896],{"class":403}," \"你个老妖精!\"",[288,15898,1617],{"class":294},[288,15900,9013],{"class":298},[288,15902,15903,15906],{"class":290,"line":1899},[288,15904,15905],{"class":294},"            return",[288,15907,1463],{"class":298},[288,15909,15910],{"class":290,"line":1904},[288,15911,2701],{"class":298},[288,15913,15914,15917,15919],{"class":290,"line":1921},[288,15915,15916],{"class":298},"        m_Age ",[288,15918,344],{"class":294},[288,15920,7970],{"class":298},[288,15922,15923],{"class":290,"line":1926},[288,15924,2359],{"class":298},[288,15926,15927],{"class":290,"line":1931},[288,15928,2572],{"emptyLinePlaceholder":217},[288,15930,15931],{"class":290,"line":1936},[288,15932,15933],{"class":357},"    \u002F\u002F情人设置为只写\n",[288,15935,15936,15938,15941,15943,15945,15948],{"class":290,"line":1950},[288,15937,15082],{"class":294},[288,15939,15940],{"class":2135}," setLover",[288,15942,299],{"class":298},[288,15944,15090],{"class":2135},[288,15946,15947],{"class":5389}," lover",[288,15949,12615],{"class":298},[288,15951,15952,15955,15957],{"class":290,"line":1955},[288,15953,15954],{"class":298},"        m_Lover ",[288,15956,344],{"class":294},[288,15958,15959],{"class":298}," lover;\n",[288,15961,15962],{"class":290,"line":2749},[288,15963,2359],{"class":298},[288,15965,15966],{"class":290,"line":2763},[288,15967,2572],{"emptyLinePlaceholder":217},[288,15969,15970],{"class":290,"line":2771},[288,15971,15395],{"class":294},[288,15973,15974,15977],{"class":290,"line":2776},[288,15975,15976],{"class":298},"    string m_Name;",[288,15978,15979],{"class":357}," \u002F\u002F可读可写  姓名\n",[288,15981,15982],{"class":290,"line":2782},[288,15983,13383],{"class":298},[288,15985,15986,15988,15991],{"class":290,"line":2788},[288,15987,2157],{"class":294},[288,15989,15990],{"class":298}," m_Age;",[288,15992,15993],{"class":357}," \u002F\u002F只读  年龄\n",[288,15995,15996],{"class":290,"line":2793},[288,15997,2572],{"emptyLinePlaceholder":217},[288,15999,16000,16003],{"class":290,"line":8121},[288,16001,16002],{"class":298},"    string m_Lover;",[288,16004,16005],{"class":357}," \u002F\u002F只写  情人\n",[288,16007,16008],{"class":290,"line":8145},[288,16009,4167],{"class":298},[288,16011,16012],{"class":290,"line":8150},[288,16013,2572],{"emptyLinePlaceholder":217},[288,16015,16016,16018,16020],{"class":290,"line":8156},[288,16017,302],{"class":294},[288,16019,2145],{"class":2135},[288,16021,11026],{"class":298},[288,16023,16024],{"class":290,"line":8183},[288,16025,2572],{"emptyLinePlaceholder":217},[288,16027,16028],{"class":290,"line":8188},[288,16029,15486],{"class":298},[288,16031,16032],{"class":290,"line":8194},[288,16033,16034],{"class":357},"    \u002F\u002F姓名设置\n",[288,16036,16037,16040,16042,16044,16046],{"class":290,"line":8206},[288,16038,16039],{"class":298},"    p.",[288,16041,15239],{"class":2135},[288,16043,299],{"class":298},[288,16045,8089],{"class":403},[288,16047,2891],{"class":298},[288,16049,16050,16052,16054,16057,16059,16062,16065,16067,16069],{"class":290,"line":8218},[288,16051,6702],{"class":298},[288,16053,1341],{"class":294},[288,16055,16056],{"class":403}," \"姓名： \"",[288,16058,1617],{"class":294},[288,16060,16061],{"class":298}," p.",[288,16063,16064],{"class":2135},"getName",[288,16066,13223],{"class":298},[288,16068,1341],{"class":294},[288,16070,9013],{"class":298},[288,16072,16073],{"class":290,"line":8230},[288,16074,2572],{"emptyLinePlaceholder":217},[288,16076,16077],{"class":290,"line":9889},[288,16078,16079],{"class":357},"    \u002F\u002F年龄设置\n",[288,16081,16082,16084,16087,16089,16091],{"class":290,"line":9914},[288,16083,16039],{"class":298},[288,16085,16086],{"class":2135},"setAge",[288,16088,299],{"class":298},[288,16090,953],{"class":347},[288,16092,2891],{"class":298},[288,16094,16095,16097,16099,16102,16104,16106,16109,16111,16113],{"class":290,"line":9937},[288,16096,6702],{"class":298},[288,16098,1341],{"class":294},[288,16100,16101],{"class":403}," \"年龄： \"",[288,16103,1617],{"class":294},[288,16105,16061],{"class":298},[288,16107,16108],{"class":2135},"getAge",[288,16110,13223],{"class":298},[288,16112,1341],{"class":294},[288,16114,9013],{"class":298},[288,16116,16117],{"class":290,"line":9961},[288,16118,2572],{"emptyLinePlaceholder":217},[288,16120,16121],{"class":290,"line":9966},[288,16122,16123],{"class":357},"    \u002F\u002F情人设置\n",[288,16125,16126,16128,16131,16133,16136],{"class":290,"line":9971},[288,16127,16039],{"class":298},[288,16129,16130],{"class":2135},"setLover",[288,16132,299],{"class":298},[288,16134,16135],{"class":403},"\"苍井\"",[288,16137,2891],{"class":298},[288,16139,16140,16143],{"class":290,"line":9976},[288,16141,16142],{"class":357},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[288,16144,16145],{"class":357},"  \u002F\u002F只写属性，不可以读取\n",[288,16147,16148],{"class":290,"line":9985},[288,16149,2572],{"emptyLinePlaceholder":217},[288,16151,16152,16154,16156,16158],{"class":290,"line":9990},[288,16153,2475],{"class":2135},[288,16155,299],{"class":298},[288,16157,2480],{"class":403},[288,16159,2891],{"class":298},[288,16161,16162],{"class":290,"line":9996},[288,16163,2572],{"emptyLinePlaceholder":217},[288,16165,16166,16168,16170],{"class":290,"line":10017},[288,16167,4262],{"class":294},[288,16169,4265],{"class":347},[288,16171,1463],{"class":298},[288,16173,16174],{"class":290,"line":10023},[288,16175,1737],{"class":298},[260,16177,16179],{"id":16178},"_814封装案例","8.1.4封装案例",[243,16181,16182],{},[246,16183,16184,16187],{},[448,16185,16186],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1304,16189,16190,16193],{},[246,16191,16192],{},"求出立方体的面积和体积",[246,16194,16195],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[280,16197,16199],{"className":282,"code":16198,"language":284,"meta":205,"style":205},"#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",[25,16200,16201,16207,16217,16224,16228,16232,16237,16267,16271,16281,16291,16301,16305,16314,16318,16354,16358,16367,16371,16387,16391,16396,16405,16409,16416,16420,16429,16433,16440,16444,16453,16457,16464,16468,16473,16490,16494,16540,16544,16553,16557,16561,16565,16574,16578,16582,16587,16591,16597,16603,16609,16613,16617,16622,16644,16648,16702,16706,16714,16718,16723,16728,16741,16748,16764,16775,16781,16804,16810,16833,16847,16867,16873,16884,16907,16929,16934,16940,16954,16967,16972,16986,16991,16997,17002,17016,17021,17026,17040,17052,17057,17070,17075,17080,17085,17098,17103],{"__ignoreMap":205},[288,16202,16203,16205],{"class":290,"line":291},[288,16204,2121],{"class":294},[288,16206,2124],{"class":403},[288,16208,16209,16211,16213,16215],{"class":290,"line":206},[288,16210,2129],{"class":294},[288,16212,2132],{"class":294},[288,16214,2136],{"class":2135},[288,16216,1463],{"class":298},[288,16218,16219,16221],{"class":290,"line":1352},[288,16220,14867],{"class":294},[288,16222,16223],{"class":2135}," Cube\n",[288,16225,16226],{"class":290,"line":1367},[288,16227,1718],{"class":298},[288,16229,16230],{"class":290,"line":1373},[288,16231,14889],{"class":294},[288,16233,16234],{"class":290,"line":1387},[288,16235,16236],{"class":357},"    \u002F\u002F输入长宽高\n",[288,16238,16239,16241,16244,16246,16248,16251,16253,16255,16258,16260,16262,16265],{"class":290,"line":1393},[288,16240,15082],{"class":294},[288,16242,16243],{"class":2135}," setLwh",[288,16245,299],{"class":298},[288,16247,302],{"class":294},[288,16249,16250],{"class":5389}," l",[288,16252,675],{"class":298},[288,16254,302],{"class":294},[288,16256,16257],{"class":5389}," w",[288,16259,675],{"class":298},[288,16261,302],{"class":294},[288,16263,16264],{"class":5389}," h",[288,16266,305],{"class":298},[288,16268,16269],{"class":290,"line":1484},[288,16270,2202],{"class":298},[288,16272,16273,16276,16278],{"class":290,"line":1490},[288,16274,16275],{"class":298},"        m_L",[288,16277,344],{"class":294},[288,16279,16280],{"class":298},"l;\n",[288,16282,16283,16286,16288],{"class":290,"line":1502},[288,16284,16285],{"class":298},"        m_W",[288,16287,344],{"class":294},[288,16289,16290],{"class":298},"w;\n",[288,16292,16293,16296,16298],{"class":290,"line":1784},[288,16294,16295],{"class":298},"        m_H",[288,16297,344],{"class":294},[288,16299,16300],{"class":298},"h;\n",[288,16302,16303],{"class":290,"line":1789},[288,16304,2359],{"class":298},[288,16306,16307,16309,16312],{"class":290,"line":1795},[288,16308,2157],{"class":294},[288,16310,16311],{"class":2135}," mianji",[288,16313,2148],{"class":298},[288,16315,16316],{"class":290,"line":1800},[288,16317,2202],{"class":298},[288,16319,16320,16322,16324,16326,16329,16331,16334,16336,16339,16341,16344,16346,16349,16351],{"class":290,"line":1814},[288,16321,14925],{"class":294},[288,16323,14928],{"class":347},[288,16325,752],{"class":294},[288,16327,16328],{"class":298},"(m_L",[288,16330,752],{"class":294},[288,16332,16333],{"class":298},"m_W ",[288,16335,778],{"class":294},[288,16337,16338],{"class":298}," m_L",[288,16340,752],{"class":294},[288,16342,16343],{"class":298},"m_H ",[288,16345,778],{"class":294},[288,16347,16348],{"class":298}," m_W",[288,16350,752],{"class":294},[288,16352,16353],{"class":298},"m_H);\n",[288,16355,16356],{"class":290,"line":1819},[288,16357,2359],{"class":298},[288,16359,16360,16362,16365],{"class":290,"line":1825},[288,16361,2157],{"class":294},[288,16363,16364],{"class":2135}," tiji",[288,16366,2148],{"class":298},[288,16368,16369],{"class":290,"line":1846},[288,16370,2202],{"class":298},[288,16372,16373,16375,16377,16379,16382,16384],{"class":290,"line":1851},[288,16374,14925],{"class":294},[288,16376,16338],{"class":298},[288,16378,752],{"class":294},[288,16380,16381],{"class":298},"m_W",[288,16383,752],{"class":294},[288,16385,16386],{"class":298},"m_H;\n",[288,16388,16389],{"class":290,"line":1865},[288,16390,2359],{"class":298},[288,16392,16393],{"class":290,"line":1870},[288,16394,16395],{"class":357},"    \u002F\u002F获取长宽高\n",[288,16397,16398,16400,16403],{"class":290,"line":1899},[288,16399,2157],{"class":294},[288,16401,16402],{"class":2135}," getLength",[288,16404,2148],{"class":298},[288,16406,16407],{"class":290,"line":1904},[288,16408,2202],{"class":298},[288,16410,16411,16413],{"class":290,"line":1921},[288,16412,14925],{"class":294},[288,16414,16415],{"class":298}," m_L;\n",[288,16417,16418],{"class":290,"line":1926},[288,16419,2359],{"class":298},[288,16421,16422,16424,16427],{"class":290,"line":1931},[288,16423,2157],{"class":294},[288,16425,16426],{"class":2135}," getWidth",[288,16428,2148],{"class":298},[288,16430,16431],{"class":290,"line":1936},[288,16432,2202],{"class":298},[288,16434,16435,16437],{"class":290,"line":1950},[288,16436,14925],{"class":294},[288,16438,16439],{"class":298}," m_W;\n",[288,16441,16442],{"class":290,"line":1955},[288,16443,2359],{"class":298},[288,16445,16446,16448,16451],{"class":290,"line":2749},[288,16447,2157],{"class":294},[288,16449,16450],{"class":2135}," getHeight",[288,16452,2148],{"class":298},[288,16454,16455],{"class":290,"line":2763},[288,16456,2202],{"class":298},[288,16458,16459,16461],{"class":290,"line":2771},[288,16460,14925],{"class":294},[288,16462,16463],{"class":298}," m_H;\n",[288,16465,16466],{"class":290,"line":2776},[288,16467,2359],{"class":298},[288,16469,16470],{"class":290,"line":2782},[288,16471,16472],{"class":357},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[288,16474,16475,16478,16481,16483,16486,16488],{"class":290,"line":2788},[288,16476,16477],{"class":294},"    bool",[288,16479,16480],{"class":2135}," isEqual",[288,16482,299],{"class":298},[288,16484,16485],{"class":2135},"Cube",[288,16487,3021],{"class":5389},[288,16489,305],{"class":298},[288,16491,16492],{"class":290,"line":2793},[288,16493,2202],{"class":298},[288,16495,16496,16498,16501,16504,16506,16508,16511,16513,16516,16519,16521,16523,16526,16528,16530,16533,16535,16537],{"class":290,"line":8121},[288,16497,2669],{"class":294},[288,16499,16500],{"class":298}," (c.",[288,16502,16503],{"class":2135},"getLength",[288,16505,13223],{"class":298},[288,16507,3121],{"class":294},[288,16509,16510],{"class":298}," m_L ",[288,16512,1887],{"class":294},[288,16514,16515],{"class":298}," c.",[288,16517,16518],{"class":2135},"getWidth",[288,16520,13223],{"class":298},[288,16522,3121],{"class":294},[288,16524,16525],{"class":298}," m_W ",[288,16527,1887],{"class":294},[288,16529,16515],{"class":298},[288,16531,16532],{"class":2135},"getHeight",[288,16534,13223],{"class":298},[288,16536,3121],{"class":294},[288,16538,16539],{"class":298}," m_H)\n",[288,16541,16542],{"class":290,"line":8145},[288,16543,2682],{"class":298},[288,16545,16546,16548,16551],{"class":290,"line":8150},[288,16547,15905],{"class":294},[288,16549,16550],{"class":347}," true",[288,16552,1463],{"class":298},[288,16554,16555],{"class":290,"line":8156},[288,16556,2701],{"class":298},[288,16558,16559],{"class":290,"line":8183},[288,16560,2742],{"class":294},[288,16562,16563],{"class":290,"line":8188},[288,16564,2682],{"class":298},[288,16566,16567,16569,16572],{"class":290,"line":8194},[288,16568,15905],{"class":294},[288,16570,16571],{"class":347}," false",[288,16573,1463],{"class":298},[288,16575,16576],{"class":290,"line":8206},[288,16577,2701],{"class":298},[288,16579,16580],{"class":290,"line":8218},[288,16581,2359],{"class":298},[288,16583,16584],{"class":290,"line":8230},[288,16585,16586],{"class":357},"    \u002F\u002F私有属性\n",[288,16588,16589],{"class":290,"line":9889},[288,16590,15395],{"class":294},[288,16592,16593,16595],{"class":290,"line":9914},[288,16594,2157],{"class":294},[288,16596,16415],{"class":298},[288,16598,16599,16601],{"class":290,"line":9937},[288,16600,2157],{"class":294},[288,16602,16439],{"class":298},[288,16604,16605,16607],{"class":290,"line":9961},[288,16606,2157],{"class":294},[288,16608,16463],{"class":298},[288,16610,16611],{"class":290,"line":9966},[288,16612,2572],{"emptyLinePlaceholder":217},[288,16614,16615],{"class":290,"line":9971},[288,16616,4167],{"class":298},[288,16618,16619],{"class":290,"line":9976},[288,16620,16621],{"class":357},"\u002F\u002F全局函数判断两个立方体是否相等\n",[288,16623,16624,16626,16628,16630,16632,16635,16637,16639,16642],{"class":290,"line":9985},[288,16625,1527],{"class":294},[288,16627,16480],{"class":2135},[288,16629,299],{"class":298},[288,16631,16485],{"class":2135},[288,16633,16634],{"class":5389}," c1",[288,16636,675],{"class":298},[288,16638,16485],{"class":2135},[288,16640,16641],{"class":5389}," c2",[288,16643,305],{"class":298},[288,16645,16646],{"class":290,"line":9990},[288,16647,1718],{"class":298},[288,16649,16650,16652,16655,16657,16659,16661,16664,16666,16669,16671,16673,16675,16677,16679,16681,16683,16685,16687,16689,16691,16693,16695,16697,16699],{"class":290,"line":9996},[288,16651,4262],{"class":294},[288,16653,16654],{"class":298}," (c1.",[288,16656,16503],{"class":2135},[288,16658,13223],{"class":298},[288,16660,3121],{"class":294},[288,16662,16663],{"class":298}," c2.",[288,16665,16503],{"class":2135},[288,16667,16668],{"class":298},"()) ",[288,16670,1887],{"class":294},[288,16672,16654],{"class":298},[288,16674,16518],{"class":2135},[288,16676,13223],{"class":298},[288,16678,3121],{"class":294},[288,16680,16663],{"class":298},[288,16682,16518],{"class":2135},[288,16684,16668],{"class":298},[288,16686,1887],{"class":294},[288,16688,16654],{"class":298},[288,16690,16532],{"class":2135},[288,16692,13223],{"class":298},[288,16694,3121],{"class":294},[288,16696,16663],{"class":298},[288,16698,16532],{"class":2135},[288,16700,16701],{"class":298},"());\n",[288,16703,16704],{"class":290,"line":10017},[288,16705,1737],{"class":298},[288,16707,16708,16710,16712],{"class":290,"line":10023},[288,16709,302],{"class":294},[288,16711,2145],{"class":2135},[288,16713,2148],{"class":298},[288,16715,16716],{"class":290,"line":10037},[288,16717,1718],{"class":298},[288,16719,16720],{"class":290,"line":10043},[288,16721,16722],{"class":298},"    Cube c1;\n",[288,16724,16725],{"class":290,"line":10070},[288,16726,16727],{"class":357},"    \u002F\u002F输入立方体的长宽高\n",[288,16729,16730,16732,16734,16737,16739],{"class":290,"line":10079},[288,16731,1723],{"class":298},[288,16733,1341],{"class":294},[288,16735,16736],{"class":403},"\"请输入第一个立方体的长、宽、高：\"",[288,16738,1341],{"class":294},[288,16740,1364],{"class":298},[288,16742,16743,16745],{"class":290,"line":10085},[288,16744,2157],{"class":294},[288,16746,16747],{"class":298}," l,w,h,l1,w1,h1;\n",[288,16749,16750,16752,16754,16756,16758,16760,16762],{"class":290,"line":10093},[288,16751,2184],{"class":298},[288,16753,1602],{"class":294},[288,16755,815],{"class":298},[288,16757,1602],{"class":294},[288,16759,1092],{"class":298},[288,16761,1602],{"class":294},[288,16763,16300],{"class":298},[288,16765,16766,16769,16772],{"class":290,"line":10098},[288,16767,16768],{"class":298},"    c1.",[288,16770,16771],{"class":2135},"setLwh",[288,16773,16774],{"class":298},"(l,w,h);\n",[288,16776,16778],{"class":290,"line":16777},66,[288,16779,16780],{"class":357},"    \u002F\u002F面积\n",[288,16782,16784,16786,16788,16791,16793,16795,16798,16800,16802],{"class":290,"line":16783},67,[288,16785,1723],{"class":298},[288,16787,1341],{"class":294},[288,16789,16790],{"class":403},"\"立方体的表面积为：\"",[288,16792,1341],{"class":294},[288,16794,15003],{"class":298},[288,16796,16797],{"class":2135},"mianji",[288,16799,2599],{"class":298},[288,16801,1341],{"class":294},[288,16803,1364],{"class":298},[288,16805,16807],{"class":290,"line":16806},68,[288,16808,16809],{"class":357},"    \u002F\u002F体积\n",[288,16811,16813,16815,16817,16820,16822,16824,16827,16829,16831],{"class":290,"line":16812},69,[288,16814,1723],{"class":298},[288,16816,1341],{"class":294},[288,16818,16819],{"class":403},"\"立方体的体积为：\"",[288,16821,1341],{"class":294},[288,16823,15003],{"class":298},[288,16825,16826],{"class":2135},"tiji",[288,16828,2599],{"class":298},[288,16830,1341],{"class":294},[288,16832,1364],{"class":298},[288,16834,16836,16838,16840,16843,16845],{"class":290,"line":16835},70,[288,16837,1723],{"class":298},[288,16839,1341],{"class":294},[288,16841,16842],{"class":403},"\"请输入第二个立方体的长、宽、高：\"",[288,16844,1341],{"class":294},[288,16846,1364],{"class":298},[288,16848,16850,16852,16854,16857,16859,16862,16864],{"class":290,"line":16849},71,[288,16851,2184],{"class":298},[288,16853,1602],{"class":294},[288,16855,16856],{"class":298},"l1",[288,16858,1602],{"class":294},[288,16860,16861],{"class":298},"w1",[288,16863,1602],{"class":294},[288,16865,16866],{"class":298},"h1;\n",[288,16868,16870],{"class":290,"line":16869},72,[288,16871,16872],{"class":298},"    Cube c2;\n",[288,16874,16876,16879,16881],{"class":290,"line":16875},73,[288,16877,16878],{"class":298},"    c2.",[288,16880,16771],{"class":2135},[288,16882,16883],{"class":298},"(l1,w1,h1);\n",[288,16885,16887,16889,16891,16894,16896,16899,16901,16903,16905],{"class":290,"line":16886},74,[288,16888,1723],{"class":298},[288,16890,1341],{"class":294},[288,16892,16893],{"class":403},"\"第二个立方体的表面积为：\"",[288,16895,1341],{"class":294},[288,16897,16898],{"class":298},"c2.",[288,16900,16797],{"class":2135},[288,16902,2599],{"class":298},[288,16904,1341],{"class":294},[288,16906,1364],{"class":298},[288,16908,16910,16912,16914,16917,16919,16921,16923,16925,16927],{"class":290,"line":16909},75,[288,16911,1723],{"class":298},[288,16913,1341],{"class":294},[288,16915,16916],{"class":403},"\"第二个立方体的体积为：\"",[288,16918,1341],{"class":294},[288,16920,16898],{"class":298},[288,16922,16826],{"class":2135},[288,16924,2599],{"class":298},[288,16926,1341],{"class":294},[288,16928,1364],{"class":298},[288,16930,16932],{"class":290,"line":16931},76,[288,16933,2572],{"emptyLinePlaceholder":217},[288,16935,16937],{"class":290,"line":16936},77,[288,16938,16939],{"class":357},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[288,16941,16943,16945,16947,16950,16952],{"class":290,"line":16942},78,[288,16944,1723],{"class":298},[288,16946,1341],{"class":294},[288,16948,16949],{"class":403},"\"内部函数判断结果：\"",[288,16951,1341],{"class":294},[288,16953,1364],{"class":298},[288,16955,16957,16959,16961,16964],{"class":290,"line":16956},79,[288,16958,3273],{"class":294},[288,16960,16654],{"class":298},[288,16962,16963],{"class":2135},"isEqual",[288,16965,16966],{"class":298},"(c2))\n",[288,16968,16970],{"class":290,"line":16969},80,[288,16971,2202],{"class":298},[288,16973,16975,16977,16979,16982,16984],{"class":290,"line":16974},81,[288,16976,3623],{"class":298},[288,16978,1341],{"class":294},[288,16980,16981],{"class":403},"\"两个立方体相等\"",[288,16983,1341],{"class":294},[288,16985,1364],{"class":298},[288,16987,16989],{"class":290,"line":16988},82,[288,16990,2359],{"class":298},[288,16992,16994],{"class":290,"line":16993},83,[288,16995,16996],{"class":294},"    else\n",[288,16998,17000],{"class":290,"line":16999},84,[288,17001,2202],{"class":298},[288,17003,17005,17007,17009,17012,17014],{"class":290,"line":17004},85,[288,17006,3623],{"class":298},[288,17008,1341],{"class":294},[288,17010,17011],{"class":403},"\"两个立方体不相等\"",[288,17013,1341],{"class":294},[288,17015,1364],{"class":298},[288,17017,17019],{"class":290,"line":17018},86,[288,17020,2359],{"class":298},[288,17022,17024],{"class":290,"line":17023},87,[288,17025,2572],{"emptyLinePlaceholder":217},[288,17027,17029,17031,17033,17036,17038],{"class":290,"line":17028},88,[288,17030,1723],{"class":298},[288,17032,1341],{"class":294},[288,17034,17035],{"class":403},"\"全局函数判断结果：\"",[288,17037,1341],{"class":294},[288,17039,1364],{"class":298},[288,17041,17043,17045,17047,17049],{"class":290,"line":17042},89,[288,17044,3273],{"class":294},[288,17046,1830],{"class":298},[288,17048,16963],{"class":2135},[288,17050,17051],{"class":298},"(c1, c2))\n",[288,17053,17055],{"class":290,"line":17054},90,[288,17056,2202],{"class":298},[288,17058,17060,17062,17064,17066,17068],{"class":290,"line":17059},91,[288,17061,3623],{"class":298},[288,17063,1341],{"class":294},[288,17065,16981],{"class":403},[288,17067,1341],{"class":294},[288,17069,1364],{"class":298},[288,17071,17073],{"class":290,"line":17072},92,[288,17074,2359],{"class":298},[288,17076,17078],{"class":290,"line":17077},93,[288,17079,16996],{"class":294},[288,17081,17083],{"class":290,"line":17082},94,[288,17084,2202],{"class":298},[288,17086,17088,17090,17092,17094,17096],{"class":290,"line":17087},95,[288,17089,3623],{"class":298},[288,17091,1341],{"class":294},[288,17093,17011],{"class":403},[288,17095,1341],{"class":294},[288,17097,1364],{"class":298},[288,17099,17101],{"class":290,"line":17100},96,[288,17102,2359],{"class":298},[288,17104,17106],{"class":290,"line":17105},97,[288,17107,1737],{"class":298},[243,17109,17110],{"start":206},[246,17111,17112],{},[448,17113,17114],{},"练习案例2：点和圆的关系",[1304,17116,17117],{},[246,17118,17119],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[280,17121,17123],{"className":282,"code":17122,"language":284,"meta":205,"style":205},"#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",[25,17124,17125,17131,17141,17148,17155,17159,17163,17168,17202,17207,17223,17237,17241,17245,17252,17259,17263,17269,17273,17277,17281,17303,17326,17331,17345,17360,17364,17368,17374,17379,17384,17388,17414,17418,17448,17476,17504,17521,17525,17538,17542,17546,17550,17563,17567,17571,17579,17583,17587,17591,17596,17600,17611,17618,17627,17637,17648,17655,17668,17679,17689,17700,17707,17721,17726,17736,17744],{"__ignoreMap":205},[288,17126,17127,17129],{"class":290,"line":291},[288,17128,2121],{"class":294},[288,17130,2124],{"class":403},[288,17132,17133,17135,17137,17139],{"class":290,"line":206},[288,17134,2129],{"class":294},[288,17136,2132],{"class":294},[288,17138,2136],{"class":2135},[288,17140,1463],{"class":298},[288,17142,17143,17145],{"class":290,"line":1352},[288,17144,2121],{"class":294},[288,17146,17147],{"class":403},"\u003Ccmath>\n",[288,17149,17150,17152],{"class":290,"line":1367},[288,17151,14867],{"class":294},[288,17153,17154],{"class":2135}," Point\n",[288,17156,17157],{"class":290,"line":1373},[288,17158,1718],{"class":298},[288,17160,17161],{"class":290,"line":1387},[288,17162,14889],{"class":294},[288,17164,17165],{"class":290,"line":1393},[288,17166,17167],{"class":357},"    \u002F\u002F赋值\n",[288,17169,17170,17172,17175,17177,17179,17182,17184,17186,17189,17192,17194,17197,17199],{"class":290,"line":1484},[288,17171,15082],{"class":294},[288,17173,17174],{"class":2135}," setPoint",[288,17176,299],{"class":298},[288,17178,14210],{"class":294},[288,17180,17181],{"class":5389}," x",[288,17183,12608],{"class":298},[288,17185,14210],{"class":294},[288,17187,17188],{"class":5389}," y",[288,17190,17191],{"class":298},") { m_x ",[288,17193,344],{"class":294},[288,17195,17196],{"class":298}," x; m_y ",[288,17198,344],{"class":294},[288,17200,17201],{"class":298}," y; }\n",[288,17203,17204],{"class":290,"line":1490},[288,17205,17206],{"class":357},"    \u002F\u002F获取坐标\n",[288,17208,17209,17211,17214,17217,17220],{"class":290,"line":1502},[288,17210,14911],{"class":294},[288,17212,17213],{"class":2135}," getX",[288,17215,17216],{"class":298},"() { ",[288,17218,17219],{"class":294},"return",[288,17221,17222],{"class":298}," m_x; }\n",[288,17224,17225,17227,17230,17232,17234],{"class":290,"line":1784},[288,17226,14911],{"class":294},[288,17228,17229],{"class":2135}," getY",[288,17231,17216],{"class":298},[288,17233,17219],{"class":294},[288,17235,17236],{"class":298}," m_y; }\n",[288,17238,17239],{"class":290,"line":1789},[288,17240,2572],{"emptyLinePlaceholder":217},[288,17242,17243],{"class":290,"line":1795},[288,17244,15395],{"class":294},[288,17246,17247,17249],{"class":290,"line":1800},[288,17248,14911],{"class":294},[288,17250,17251],{"class":298}," m_x;\n",[288,17253,17254,17256],{"class":290,"line":1814},[288,17255,14911],{"class":294},[288,17257,17258],{"class":298}," m_y;\n",[288,17260,17261],{"class":290,"line":1819},[288,17262,4167],{"class":298},[288,17264,17265,17267],{"class":290,"line":1825},[288,17266,14867],{"class":294},[288,17268,14870],{"class":2135},[288,17270,17271],{"class":290,"line":1846},[288,17272,1718],{"class":298},[288,17274,17275],{"class":290,"line":1851},[288,17276,14889],{"class":294},[288,17278,17279],{"class":290,"line":1865},[288,17280,17167],{"class":357},[288,17282,17283,17285,17288,17290,17292,17295,17298,17300],{"class":290,"line":1870},[288,17284,15082],{"class":294},[288,17286,17287],{"class":2135}," setRadius",[288,17289,299],{"class":298},[288,17291,14210],{"class":294},[288,17293,17294],{"class":5389}," r",[288,17296,17297],{"class":298},") { m_r ",[288,17299,344],{"class":294},[288,17301,17302],{"class":298}," r; }\n",[288,17304,17305,17307,17310,17312,17315,17318,17321,17323],{"class":290,"line":1899},[288,17306,15082],{"class":294},[288,17308,17309],{"class":2135}," setCenter",[288,17311,299],{"class":298},[288,17313,17314],{"class":2135},"Point",[288,17316,17317],{"class":5389}," center",[288,17319,17320],{"class":298},") { m_center ",[288,17322,344],{"class":294},[288,17324,17325],{"class":298}," center; }\n",[288,17327,17328],{"class":290,"line":1904},[288,17329,17330],{"class":357},"    \u002F\u002F获取属性\n",[288,17332,17333,17335,17338,17340,17342],{"class":290,"line":1921},[288,17334,14911],{"class":294},[288,17336,17337],{"class":2135}," getRadius",[288,17339,17216],{"class":298},[288,17341,17219],{"class":294},[288,17343,17344],{"class":298}," m_r; }\n",[288,17346,17347,17350,17353,17355,17357],{"class":290,"line":1926},[288,17348,17349],{"class":2135},"    Point",[288,17351,17352],{"class":2135}," getCenter",[288,17354,17216],{"class":298},[288,17356,17219],{"class":294},[288,17358,17359],{"class":298}," m_center; }\n",[288,17361,17362],{"class":290,"line":1931},[288,17363,2572],{"emptyLinePlaceholder":217},[288,17365,17366],{"class":290,"line":1936},[288,17367,15395],{"class":294},[288,17369,17370,17372],{"class":290,"line":1950},[288,17371,14911],{"class":294},[288,17373,14901],{"class":298},[288,17375,17376],{"class":290,"line":1955},[288,17377,17378],{"class":357},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[288,17380,17381],{"class":290,"line":2749},[288,17382,17383],{"class":298},"    Point m_center;\n",[288,17385,17386],{"class":290,"line":2763},[288,17387,4167],{"class":298},[288,17389,17390,17392,17395,17397,17400,17402,17404,17406,17408,17410,17412],{"class":290,"line":2771},[288,17391,5537],{"class":294},[288,17393,17394],{"class":2135}," isInCircle",[288,17396,299],{"class":298},[288,17398,17399],{"class":2135},"Circle",[288,17401,10757],{"class":294},[288,17403,585],{"class":5389},[288,17405,675],{"class":298},[288,17407,17314],{"class":2135},[288,17409,10757],{"class":294},[288,17411,19],{"class":5389},[288,17413,305],{"class":298},[288,17415,17416],{"class":290,"line":2776},[288,17417,1718],{"class":298},[288,17419,17420,17422,17425,17427,17429,17432,17435,17438,17440,17442,17444,17446],{"class":290,"line":2782},[288,17421,14911],{"class":294},[288,17423,17424],{"class":298}," dx ",[288,17426,344],{"class":294},[288,17428,16515],{"class":298},[288,17430,17431],{"class":2135},"getCenter",[288,17433,17434],{"class":298},"().",[288,17436,17437],{"class":2135},"getX",[288,17439,13223],{"class":298},[288,17441,829],{"class":294},[288,17443,16061],{"class":298},[288,17445,17437],{"class":2135},[288,17447,5809],{"class":298},[288,17449,17450,17452,17455,17457,17459,17461,17463,17466,17468,17470,17472,17474],{"class":290,"line":2788},[288,17451,14911],{"class":294},[288,17453,17454],{"class":298}," dy ",[288,17456,344],{"class":294},[288,17458,16515],{"class":298},[288,17460,17431],{"class":2135},[288,17462,17434],{"class":298},[288,17464,17465],{"class":2135},"getY",[288,17467,13223],{"class":298},[288,17469,829],{"class":294},[288,17471,16061],{"class":298},[288,17473,17465],{"class":2135},[288,17475,5809],{"class":298},[288,17477,17478,17480,17483,17485,17488,17491,17493,17495,17497,17499,17501],{"class":290,"line":2793},[288,17479,14911],{"class":294},[288,17481,17482],{"class":298}," distance ",[288,17484,344],{"class":294},[288,17486,17487],{"class":2135}," sqrt",[288,17489,17490],{"class":298},"(dx ",[288,17492,752],{"class":294},[288,17494,17424],{"class":298},[288,17496,778],{"class":294},[288,17498,17454],{"class":298},[288,17500,752],{"class":294},[288,17502,17503],{"class":298}," dy);\n",[288,17505,17506,17508,17511,17513,17515,17518],{"class":290,"line":8121},[288,17507,3273],{"class":294},[288,17509,17510],{"class":298}," (distance ",[288,17512,1207],{"class":294},[288,17514,16515],{"class":298},[288,17516,17517],{"class":2135},"getRadius",[288,17519,17520],{"class":298},"())\n",[288,17522,17523],{"class":290,"line":8145},[288,17524,2202],{"class":298},[288,17526,17527,17529,17531,17534,17536],{"class":290,"line":8150},[288,17528,9842],{"class":298},[288,17530,1341],{"class":294},[288,17532,17533],{"class":403}," \"点在圆内\"",[288,17535,1617],{"class":294},[288,17537,9013],{"class":298},[288,17539,17540],{"class":290,"line":8156},[288,17541,2359],{"class":298},[288,17543,17544],{"class":290,"line":8183},[288,17545,16996],{"class":294},[288,17547,17548],{"class":290,"line":8188},[288,17549,2202],{"class":298},[288,17551,17552,17554,17556,17559,17561],{"class":290,"line":8194},[288,17553,9842],{"class":298},[288,17555,1341],{"class":294},[288,17557,17558],{"class":403}," \"点在圆外\"",[288,17560,1617],{"class":294},[288,17562,9013],{"class":298},[288,17564,17565],{"class":290,"line":8206},[288,17566,2359],{"class":298},[288,17568,17569],{"class":290,"line":8218},[288,17570,1737],{"class":298},[288,17572,17573,17575,17577],{"class":290,"line":8230},[288,17574,302],{"class":294},[288,17576,2145],{"class":2135},[288,17578,2148],{"class":298},[288,17580,17581],{"class":290,"line":9889},[288,17582,1718],{"class":298},[288,17584,17585],{"class":290,"line":9914},[288,17586,15226],{"class":357},[288,17588,17589],{"class":290,"line":9937},[288,17590,14973],{"class":298},[288,17592,17593],{"class":290,"line":9961},[288,17594,17595],{"class":298},"    Point p1;\n",[288,17597,17598],{"class":290,"line":9966},[288,17599,17167],{"class":357},[288,17601,17602,17604,17606,17609],{"class":290,"line":9971},[288,17603,1723],{"class":298},[288,17605,1341],{"class":294},[288,17607,17608],{"class":403},"\"请输入圆的半径：\"",[288,17610,1463],{"class":298},[288,17612,17613,17615],{"class":290,"line":9976},[288,17614,14911],{"class":294},[288,17616,17617],{"class":298}," r;\n",[288,17619,17620,17622,17624],{"class":290,"line":9985},[288,17621,2184],{"class":298},[288,17623,1602],{"class":294},[288,17625,17626],{"class":298},"r;\n",[288,17628,17629,17631,17634],{"class":290,"line":9990},[288,17630,16768],{"class":298},[288,17632,17633],{"class":2135},"setRadius",[288,17635,17636],{"class":298},"(r);\n",[288,17638,17639,17641,17643,17646],{"class":290,"line":9996},[288,17640,1723],{"class":298},[288,17642,1341],{"class":294},[288,17644,17645],{"class":403},"\"请输入圆心坐标：\"",[288,17647,1463],{"class":298},[288,17649,17650,17652],{"class":290,"line":10017},[288,17651,14911],{"class":294},[288,17653,17654],{"class":298}," x, y;\n",[288,17656,17657,17659,17661,17663,17665],{"class":290,"line":10023},[288,17658,2184],{"class":298},[288,17660,1602],{"class":294},[288,17662,1117],{"class":298},[288,17664,1602],{"class":294},[288,17666,17667],{"class":298},"y;\n",[288,17669,17670,17673,17676],{"class":290,"line":10037},[288,17671,17672],{"class":298},"    p1.",[288,17674,17675],{"class":2135},"setPoint",[288,17677,17678],{"class":298},"(x, y);\n",[288,17680,17681,17683,17686],{"class":290,"line":10043},[288,17682,16768],{"class":298},[288,17684,17685],{"class":2135},"setCenter",[288,17687,17688],{"class":298},"(p1);\n",[288,17690,17691,17693,17695,17698],{"class":290,"line":10070},[288,17692,1723],{"class":298},[288,17694,1341],{"class":294},[288,17696,17697],{"class":403},"\"请输入测试点坐标：\"",[288,17699,1463],{"class":298},[288,17701,17702,17704],{"class":290,"line":10079},[288,17703,14911],{"class":294},[288,17705,17706],{"class":298}," x1, y1;\n",[288,17708,17709,17711,17713,17716,17718],{"class":290,"line":10085},[288,17710,2184],{"class":298},[288,17712,1602],{"class":294},[288,17714,17715],{"class":298},"x1",[288,17717,1602],{"class":294},[288,17719,17720],{"class":298},"y1;\n",[288,17722,17723],{"class":290,"line":10093},[288,17724,17725],{"class":298},"    Point p2;\n",[288,17727,17728,17731,17733],{"class":290,"line":10098},[288,17729,17730],{"class":298},"    p2.",[288,17732,17675],{"class":2135},[288,17734,17735],{"class":298},"(x1, y1);\n",[288,17737,17738,17741],{"class":290,"line":16777},[288,17739,17740],{"class":2135},"    isInCircle",[288,17742,17743],{"class":298},"(c1, p2);\n",[288,17745,17746],{"class":290,"line":16783},[288,17747,1737],{"class":298},[19,17749,17750],{},"在类中可以让另一个类作为本来的成员",[19,17752,17753],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17755,17756],{},"创建point.h",[280,17758,17760],{"className":282,"code":17759,"language":284,"meta":205,"style":205},"#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",[25,17761,17762,17773,17779,17789,17795,17799,17804,17808,17812,17832,17836,17844,17852,17856,17860,17866,17872],{"__ignoreMap":205},[288,17763,17764,17767,17770],{"class":290,"line":291},[288,17765,17766],{"class":294},"#pragma",[288,17768,17769],{"class":2135}," once",[288,17771,17772],{"class":357}," \u002F\u002F防止头文件重复包含\n",[288,17774,17775,17777],{"class":290,"line":206},[288,17776,2121],{"class":294},[288,17778,2124],{"class":403},[288,17780,17781,17783,17785,17787],{"class":290,"line":1352},[288,17782,2129],{"class":294},[288,17784,2132],{"class":294},[288,17786,2136],{"class":2135},[288,17788,1463],{"class":298},[288,17790,17791,17793],{"class":290,"line":1367},[288,17792,14867],{"class":294},[288,17794,17154],{"class":2135},[288,17796,17797],{"class":290,"line":1373},[288,17798,1718],{"class":298},[288,17800,17801],{"class":290,"line":1387},[288,17802,17803],{"class":357},"\u002F\u002F做好声明与变量定义就可以\n",[288,17805,17806],{"class":290,"line":1393},[288,17807,14889],{"class":294},[288,17809,17810],{"class":290,"line":1484},[288,17811,17167],{"class":357},[288,17813,17814,17816,17818,17820,17822,17824,17826,17828,17830],{"class":290,"line":1490},[288,17815,15082],{"class":294},[288,17817,17174],{"class":2135},[288,17819,299],{"class":298},[288,17821,14210],{"class":294},[288,17823,17181],{"class":5389},[288,17825,12608],{"class":298},[288,17827,14210],{"class":294},[288,17829,17188],{"class":5389},[288,17831,2891],{"class":298},[288,17833,17834],{"class":290,"line":1502},[288,17835,17206],{"class":357},[288,17837,17838,17840,17842],{"class":290,"line":1784},[288,17839,14911],{"class":294},[288,17841,17213],{"class":2135},[288,17843,5809],{"class":298},[288,17845,17846,17848,17850],{"class":290,"line":1789},[288,17847,14911],{"class":294},[288,17849,17229],{"class":2135},[288,17851,5809],{"class":298},[288,17853,17854],{"class":290,"line":1795},[288,17855,2572],{"emptyLinePlaceholder":217},[288,17857,17858],{"class":290,"line":1800},[288,17859,15395],{"class":294},[288,17861,17862,17864],{"class":290,"line":1814},[288,17863,14911],{"class":294},[288,17865,17251],{"class":298},[288,17867,17868,17870],{"class":290,"line":1819},[288,17869,14911],{"class":294},[288,17871,17258],{"class":298},[288,17873,17874],{"class":290,"line":1825},[288,17875,4167],{"class":298},[19,17877,17878],{},"创建point.cpp",[280,17880,17882],{"className":282,"code":17881,"language":284,"meta":205,"style":205},"#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",[25,17883,17884,17891,17896,17930,17934,17950],{"__ignoreMap":205},[288,17885,17886,17888],{"class":290,"line":291},[288,17887,2121],{"class":294},[288,17889,17890],{"class":403},"\u003Cpoint.h>\n",[288,17892,17893],{"class":290,"line":206},[288,17894,17895],{"class":357},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[288,17897,17898,17900,17903,17906,17908,17910,17912,17914,17916,17918,17920,17922,17924,17926,17928],{"class":290,"line":1352},[288,17899,15082],{"class":294},[288,17901,17902],{"class":2135}," Point",[288,17904,17905],{"class":298},"::",[288,17907,17675],{"class":2135},[288,17909,299],{"class":298},[288,17911,14210],{"class":294},[288,17913,17181],{"class":5389},[288,17915,12608],{"class":298},[288,17917,14210],{"class":294},[288,17919,17188],{"class":5389},[288,17921,17191],{"class":298},[288,17923,344],{"class":294},[288,17925,17196],{"class":298},[288,17927,344],{"class":294},[288,17929,17201],{"class":298},[288,17931,17932],{"class":290,"line":1367},[288,17933,17206],{"class":357},[288,17935,17936,17938,17940,17942,17944,17946,17948],{"class":290,"line":1373},[288,17937,14911],{"class":294},[288,17939,17902],{"class":2135},[288,17941,17905],{"class":298},[288,17943,17437],{"class":2135},[288,17945,17216],{"class":298},[288,17947,17219],{"class":294},[288,17949,17222],{"class":298},[288,17951,17952,17954,17956,17958,17960,17962,17964],{"class":290,"line":1387},[288,17953,14911],{"class":294},[288,17955,17902],{"class":2135},[288,17957,17905],{"class":298},[288,17959,17465],{"class":2135},[288,17961,17216],{"class":298},[288,17963,17219],{"class":294},[288,17965,17236],{"class":298},[19,17967,17968],{},"创建circle.h",[280,17970,17972],{"className":282,"code":17971,"language":284,"meta":205,"style":205},"#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",[25,17973,17974,17981,17987,17997,18003,18009,18013,18017,18021,18035,18049,18053,18061,18069,18073,18077,18083,18087,18091],{"__ignoreMap":205},[288,17975,17976,17978],{"class":290,"line":291},[288,17977,17766],{"class":294},[288,17979,17980],{"class":2135}," once\n",[288,17982,17983,17985],{"class":290,"line":206},[288,17984,2121],{"class":294},[288,17986,2124],{"class":403},[288,17988,17989,17991,17993,17995],{"class":290,"line":1352},[288,17990,2129],{"class":294},[288,17992,2132],{"class":294},[288,17994,2136],{"class":2135},[288,17996,1463],{"class":298},[288,17998,17999,18001],{"class":290,"line":1367},[288,18000,2121],{"class":294},[288,18002,17890],{"class":403},[288,18004,18005,18007],{"class":290,"line":1373},[288,18006,14867],{"class":294},[288,18008,14870],{"class":2135},[288,18010,18011],{"class":290,"line":1387},[288,18012,1718],{"class":298},[288,18014,18015],{"class":290,"line":1393},[288,18016,14889],{"class":294},[288,18018,18019],{"class":290,"line":1484},[288,18020,17167],{"class":357},[288,18022,18023,18025,18027,18029,18031,18033],{"class":290,"line":1490},[288,18024,15082],{"class":294},[288,18026,17287],{"class":2135},[288,18028,299],{"class":298},[288,18030,14210],{"class":294},[288,18032,17294],{"class":5389},[288,18034,2891],{"class":298},[288,18036,18037,18039,18041,18043,18045,18047],{"class":290,"line":1502},[288,18038,15082],{"class":294},[288,18040,17309],{"class":2135},[288,18042,299],{"class":298},[288,18044,17314],{"class":2135},[288,18046,17317],{"class":5389},[288,18048,2891],{"class":298},[288,18050,18051],{"class":290,"line":1784},[288,18052,17330],{"class":357},[288,18054,18055,18057,18059],{"class":290,"line":1789},[288,18056,14911],{"class":294},[288,18058,17337],{"class":2135},[288,18060,5809],{"class":298},[288,18062,18063,18065,18067],{"class":290,"line":1795},[288,18064,17349],{"class":2135},[288,18066,17352],{"class":2135},[288,18068,5809],{"class":298},[288,18070,18071],{"class":290,"line":1800},[288,18072,2572],{"emptyLinePlaceholder":217},[288,18074,18075],{"class":290,"line":1814},[288,18076,15395],{"class":294},[288,18078,18079,18081],{"class":290,"line":1819},[288,18080,14911],{"class":294},[288,18082,14901],{"class":298},[288,18084,18085],{"class":290,"line":1825},[288,18086,17378],{"class":357},[288,18088,18089],{"class":290,"line":1846},[288,18090,17383],{"class":298},[288,18092,18093],{"class":290,"line":1851},[288,18094,4167],{"class":298},[19,18096,18097],{},"创建circle.cpp",[280,18099,18101],{"className":282,"code":18100,"language":284,"meta":205,"style":205},"#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",[25,18102,18103,18110,18133,18155,18160,18176],{"__ignoreMap":205},[288,18104,18105,18107],{"class":290,"line":291},[288,18106,2121],{"class":294},[288,18108,18109],{"class":403},"\u003Ccircle.h>\n",[288,18111,18112,18114,18117,18119,18121,18123,18125,18127,18129,18131],{"class":290,"line":206},[288,18113,5537],{"class":294},[288,18115,18116],{"class":2135}," Circle",[288,18118,17905],{"class":298},[288,18120,17633],{"class":2135},[288,18122,299],{"class":298},[288,18124,14210],{"class":294},[288,18126,17294],{"class":5389},[288,18128,17297],{"class":298},[288,18130,344],{"class":294},[288,18132,17302],{"class":298},[288,18134,18135,18137,18139,18141,18143,18145,18147,18149,18151,18153],{"class":290,"line":1352},[288,18136,5537],{"class":294},[288,18138,18116],{"class":2135},[288,18140,17905],{"class":298},[288,18142,17685],{"class":2135},[288,18144,299],{"class":298},[288,18146,17314],{"class":2135},[288,18148,17317],{"class":5389},[288,18150,17320],{"class":298},[288,18152,344],{"class":294},[288,18154,17325],{"class":298},[288,18156,18157],{"class":290,"line":1367},[288,18158,18159],{"class":357},"\u002F\u002F获取属性\n",[288,18161,18162,18164,18166,18168,18170,18172,18174],{"class":290,"line":1373},[288,18163,14210],{"class":294},[288,18165,18116],{"class":2135},[288,18167,17905],{"class":298},[288,18169,17517],{"class":2135},[288,18171,17216],{"class":298},[288,18173,17219],{"class":294},[288,18175,17344],{"class":298},[288,18177,18178,18180,18182,18184,18186,18188,18190],{"class":290,"line":1387},[288,18179,17314],{"class":2135},[288,18181,18116],{"class":2135},[288,18183,17905],{"class":298},[288,18185,17431],{"class":2135},[288,18187,17216],{"class":298},[288,18189,17219],{"class":294},[288,18191,17359],{"class":298},[19,18193,18194],{},"使用封装的类",[280,18196,18198],{"className":282,"code":18197,"language":284,"meta":205,"style":205},"#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",[25,18199,18200,18206,18216,18222,18228,18252,18256,18282,18308,18332,18346,18350,18362,18366,18370,18374,18386,18390,18394,18402,18406,18410,18414,18418,18422,18432,18438,18446,18454,18464,18470,18482,18490,18498,18508,18514,18526,18530,18538,18544],{"__ignoreMap":205},[288,18201,18202,18204],{"class":290,"line":291},[288,18203,2121],{"class":294},[288,18205,2124],{"class":403},[288,18207,18208,18210,18212,18214],{"class":290,"line":206},[288,18209,2129],{"class":294},[288,18211,2132],{"class":294},[288,18213,2136],{"class":2135},[288,18215,1463],{"class":298},[288,18217,18218,18220],{"class":290,"line":1352},[288,18219,2121],{"class":294},[288,18221,18109],{"class":403},[288,18223,18224,18226],{"class":290,"line":1367},[288,18225,2121],{"class":294},[288,18227,17890],{"class":403},[288,18229,18230,18232,18234,18236,18238,18240,18242,18244,18246,18248,18250],{"class":290,"line":1373},[288,18231,5537],{"class":294},[288,18233,17394],{"class":2135},[288,18235,299],{"class":298},[288,18237,17399],{"class":2135},[288,18239,10757],{"class":294},[288,18241,585],{"class":5389},[288,18243,675],{"class":298},[288,18245,17314],{"class":2135},[288,18247,10757],{"class":294},[288,18249,19],{"class":5389},[288,18251,305],{"class":298},[288,18253,18254],{"class":290,"line":1387},[288,18255,1718],{"class":298},[288,18257,18258,18260,18262,18264,18266,18268,18270,18272,18274,18276,18278,18280],{"class":290,"line":1393},[288,18259,14911],{"class":294},[288,18261,17424],{"class":298},[288,18263,344],{"class":294},[288,18265,16515],{"class":298},[288,18267,17431],{"class":2135},[288,18269,17434],{"class":298},[288,18271,17437],{"class":2135},[288,18273,13223],{"class":298},[288,18275,829],{"class":294},[288,18277,16061],{"class":298},[288,18279,17437],{"class":2135},[288,18281,5809],{"class":298},[288,18283,18284,18286,18288,18290,18292,18294,18296,18298,18300,18302,18304,18306],{"class":290,"line":1484},[288,18285,14911],{"class":294},[288,18287,17454],{"class":298},[288,18289,344],{"class":294},[288,18291,16515],{"class":298},[288,18293,17431],{"class":2135},[288,18295,17434],{"class":298},[288,18297,17465],{"class":2135},[288,18299,13223],{"class":298},[288,18301,829],{"class":294},[288,18303,16061],{"class":298},[288,18305,17465],{"class":2135},[288,18307,5809],{"class":298},[288,18309,18310,18312,18314,18316,18318,18320,18322,18324,18326,18328,18330],{"class":290,"line":1490},[288,18311,14911],{"class":294},[288,18313,17482],{"class":298},[288,18315,344],{"class":294},[288,18317,17487],{"class":2135},[288,18319,17490],{"class":298},[288,18321,752],{"class":294},[288,18323,17424],{"class":298},[288,18325,778],{"class":294},[288,18327,17454],{"class":298},[288,18329,752],{"class":294},[288,18331,17503],{"class":298},[288,18333,18334,18336,18338,18340,18342,18344],{"class":290,"line":1502},[288,18335,3273],{"class":294},[288,18337,17510],{"class":298},[288,18339,1207],{"class":294},[288,18341,16515],{"class":298},[288,18343,17517],{"class":2135},[288,18345,17520],{"class":298},[288,18347,18348],{"class":290,"line":1784},[288,18349,2202],{"class":298},[288,18351,18352,18354,18356,18358,18360],{"class":290,"line":1789},[288,18353,9842],{"class":298},[288,18355,1341],{"class":294},[288,18357,17533],{"class":403},[288,18359,1617],{"class":294},[288,18361,9013],{"class":298},[288,18363,18364],{"class":290,"line":1795},[288,18365,2359],{"class":298},[288,18367,18368],{"class":290,"line":1800},[288,18369,16996],{"class":294},[288,18371,18372],{"class":290,"line":1814},[288,18373,2202],{"class":298},[288,18375,18376,18378,18380,18382,18384],{"class":290,"line":1819},[288,18377,9842],{"class":298},[288,18379,1341],{"class":294},[288,18381,17558],{"class":403},[288,18383,1617],{"class":294},[288,18385,9013],{"class":298},[288,18387,18388],{"class":290,"line":1825},[288,18389,2359],{"class":298},[288,18391,18392],{"class":290,"line":1846},[288,18393,1737],{"class":298},[288,18395,18396,18398,18400],{"class":290,"line":1851},[288,18397,302],{"class":294},[288,18399,2145],{"class":2135},[288,18401,2148],{"class":298},[288,18403,18404],{"class":290,"line":1865},[288,18405,1718],{"class":298},[288,18407,18408],{"class":290,"line":1870},[288,18409,15226],{"class":357},[288,18411,18412],{"class":290,"line":1899},[288,18413,14973],{"class":298},[288,18415,18416],{"class":290,"line":1904},[288,18417,17595],{"class":298},[288,18419,18420],{"class":290,"line":1921},[288,18421,17167],{"class":357},[288,18423,18424,18426,18428,18430],{"class":290,"line":1926},[288,18425,1723],{"class":298},[288,18427,1341],{"class":294},[288,18429,17608],{"class":403},[288,18431,1463],{"class":298},[288,18433,18434,18436],{"class":290,"line":1931},[288,18435,14911],{"class":294},[288,18437,17617],{"class":298},[288,18439,18440,18442,18444],{"class":290,"line":1936},[288,18441,2184],{"class":298},[288,18443,1602],{"class":294},[288,18445,17626],{"class":298},[288,18447,18448,18450,18452],{"class":290,"line":1950},[288,18449,16768],{"class":298},[288,18451,17633],{"class":2135},[288,18453,17636],{"class":298},[288,18455,18456,18458,18460,18462],{"class":290,"line":1955},[288,18457,1723],{"class":298},[288,18459,1341],{"class":294},[288,18461,17645],{"class":403},[288,18463,1463],{"class":298},[288,18465,18466,18468],{"class":290,"line":2749},[288,18467,14911],{"class":294},[288,18469,17654],{"class":298},[288,18471,18472,18474,18476,18478,18480],{"class":290,"line":2763},[288,18473,2184],{"class":298},[288,18475,1602],{"class":294},[288,18477,1117],{"class":298},[288,18479,1602],{"class":294},[288,18481,17667],{"class":298},[288,18483,18484,18486,18488],{"class":290,"line":2771},[288,18485,17672],{"class":298},[288,18487,17675],{"class":2135},[288,18489,17678],{"class":298},[288,18491,18492,18494,18496],{"class":290,"line":2776},[288,18493,16768],{"class":298},[288,18495,17685],{"class":2135},[288,18497,17688],{"class":298},[288,18499,18500,18502,18504,18506],{"class":290,"line":2782},[288,18501,1723],{"class":298},[288,18503,1341],{"class":294},[288,18505,17697],{"class":403},[288,18507,1463],{"class":298},[288,18509,18510,18512],{"class":290,"line":2788},[288,18511,14911],{"class":294},[288,18513,17706],{"class":298},[288,18515,18516,18518,18520,18522,18524],{"class":290,"line":2793},[288,18517,2184],{"class":298},[288,18519,1602],{"class":294},[288,18521,17715],{"class":298},[288,18523,1602],{"class":294},[288,18525,17720],{"class":298},[288,18527,18528],{"class":290,"line":8121},[288,18529,17725],{"class":298},[288,18531,18532,18534,18536],{"class":290,"line":8145},[288,18533,17730],{"class":298},[288,18535,17675],{"class":2135},[288,18537,17735],{"class":298},[288,18539,18540,18542],{"class":290,"line":8150},[288,18541,17740],{"class":2135},[288,18543,17743],{"class":298},[288,18545,18546],{"class":290,"line":8156},[288,18547,1737],{"class":298},[14,18549,18551],{"id":18550},"_82对象的初始化清理","8.2对象的初始化清理",[1304,18553,18554,18557],{},[246,18555,18556],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[246,18558,18559],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[260,18561,18563],{"id":18562},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18565,18566,18567,18570],{},"对象的",[448,18568,18569],{},"初始化和清理","也是两个非常重要的安全问题",[19,18572,18573],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18575,18576],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18578,18579,18580,18583,18584,18587],{},"c++利用了",[448,18581,18582],{},"构造函数","和",[448,18585,18586],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18589,18590,18591],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[448,18592,18593],{},"我们不提供构造和析构，编译器会提供",[19,18595,18596],{},[448,18597,18598],{},"编译器提供的构造函数和析构函数是空实现。",[1304,18600,18601,18604],{},[246,18602,18603],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[246,18605,18606,18607,18610],{},"析构函数：主要作用在于对象",[448,18608,18609],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18612,18613,18616],{},[448,18614,18615],{},"构造函数语法：",[25,18617,18618],{},"类名(){}",[243,18620,18621,18624,18627,18630,18633],{},[246,18622,18623],{},"构造函数，没有返回值也不写void",[246,18625,18626],{},"函数名称与类名相同",[246,18628,18629],{},"构造函数可以有参数，因此可以发生重载",[246,18631,18632],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[246,18634,18635,18636,726],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[25,18637,18638],{},"Person(){}",[19,18640,18641,13968,18644],{},[448,18642,18643],{},"析构函数语法：",[25,18645,18646],{},"~类名(){}",[243,18648,18649,18652,18655,18661],{},[246,18650,18651],{},"析构函数，没有返回值也不写void",[246,18653,18654],{},"函数名称与类名相同,在名称前加上符号  ~",[246,18656,18657,18658],{},"析构函数不可以有参数，因此",[448,18659,18660],{},"不可以发生重载",[246,18662,18663],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[280,18665,18667],{"className":282,"code":18666,"language":284,"meta":205,"style":205},"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",[25,18668,18669,18675,18679,18683,18688,18695,18699,18712,18716,18721,18728,18732,18745,18749,18753,18757,18761,18769,18773,18781,18785,18789,18797,18801,18806,18810,18817,18821,18834,18838,18846],{"__ignoreMap":205},[288,18670,18671,18673],{"class":290,"line":291},[288,18672,14867],{"class":294},[288,18674,15344],{"class":2135},[288,18676,18677],{"class":290,"line":206},[288,18678,1718],{"class":298},[288,18680,18681],{"class":290,"line":1352},[288,18682,14889],{"class":294},[288,18684,18685],{"class":290,"line":1367},[288,18686,18687],{"class":357},"    \u002F\u002F构造函数\n",[288,18689,18690,18693],{"class":290,"line":1373},[288,18691,18692],{"class":2135},"    Person",[288,18694,2148],{"class":298},[288,18696,18697],{"class":290,"line":1387},[288,18698,2202],{"class":298},[288,18700,18701,18703,18705,18708,18710],{"class":290,"line":1393},[288,18702,9842],{"class":298},[288,18704,1341],{"class":294},[288,18706,18707],{"class":403}," \"Person的构造函数调用\"",[288,18709,1617],{"class":294},[288,18711,9013],{"class":298},[288,18713,18714],{"class":290,"line":1484},[288,18715,2359],{"class":298},[288,18717,18718],{"class":290,"line":1490},[288,18719,18720],{"class":357},"    \u002F\u002F析构函数\n",[288,18722,18723,18726],{"class":290,"line":1502},[288,18724,18725],{"class":2135},"    ~Person",[288,18727,2148],{"class":298},[288,18729,18730],{"class":290,"line":1784},[288,18731,2202],{"class":298},[288,18733,18734,18736,18738,18741,18743],{"class":290,"line":1789},[288,18735,9842],{"class":298},[288,18737,1341],{"class":294},[288,18739,18740],{"class":403}," \"Person的析构函数调用\"",[288,18742,1617],{"class":294},[288,18744,9013],{"class":298},[288,18746,18747],{"class":290,"line":1795},[288,18748,2359],{"class":298},[288,18750,18751],{"class":290,"line":1800},[288,18752,2572],{"emptyLinePlaceholder":217},[288,18754,18755],{"class":290,"line":1814},[288,18756,4167],{"class":298},[288,18758,18759],{"class":290,"line":1819},[288,18760,2572],{"emptyLinePlaceholder":217},[288,18762,18763,18765,18767],{"class":290,"line":1825},[288,18764,5537],{"class":294},[288,18766,5761],{"class":2135},[288,18768,2148],{"class":298},[288,18770,18771],{"class":290,"line":1846},[288,18772,1718],{"class":298},[288,18774,18775,18778],{"class":290,"line":1851},[288,18776,18777],{"class":298},"    Person p;",[288,18779,18780],{"class":357},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[288,18782,18783],{"class":290,"line":1865},[288,18784,1737],{"class":298},[288,18786,18787],{"class":290,"line":1870},[288,18788,2572],{"emptyLinePlaceholder":217},[288,18790,18791,18793,18795],{"class":290,"line":1899},[288,18792,302],{"class":294},[288,18794,2145],{"class":2135},[288,18796,11026],{"class":298},[288,18798,18799],{"class":290,"line":1904},[288,18800,13383],{"class":298},[288,18802,18803],{"class":290,"line":1921},[288,18804,18805],{"class":357},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[288,18807,18808],{"class":290,"line":1926},[288,18809,2572],{"emptyLinePlaceholder":217},[288,18811,18812,18814],{"class":290,"line":1931},[288,18813,18777],{"class":298},[288,18815,18816],{"class":357},"\u002F\u002F只有构造函数\n",[288,18818,18819],{"class":290,"line":1936},[288,18820,2572],{"emptyLinePlaceholder":217},[288,18822,18823,18825,18827,18829,18831],{"class":290,"line":1950},[288,18824,2475],{"class":2135},[288,18826,299],{"class":298},[288,18828,2480],{"class":403},[288,18830,6139],{"class":298},[288,18832,18833],{"class":357},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[288,18835,18836],{"class":290,"line":1955},[288,18837,2572],{"emptyLinePlaceholder":217},[288,18839,18840,18842,18844],{"class":290,"line":2749},[288,18841,4262],{"class":294},[288,18843,4265],{"class":347},[288,18845,1463],{"class":298},[288,18847,18848],{"class":290,"line":2763},[288,18849,1737],{"class":298},[19,18851,18852],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[260,18854,18856],{"id":18855},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18858,18859],{},"两种分类方式：",[19,18861,18862],{},"​\t按参数分为： 有参构造和无参构造",[19,18864,18865],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18867,18868],{},"三种调用方式：",[19,18870,18871],{},"​\t括号法",[19,18873,18874],{},"​\t显示法",[19,18876,18877],{},"​\t隐式转换法",[280,18879,18881],{"className":282,"code":18880,"language":284,"meta":205,"style":205},"#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",[25,18882,18883,18889,18899,18904,18909,18914,18919,18923,18931,18935,18939,18943,18949,18953,18966,18970,18982,18986,18995,19008,19012,19016,19022,19026,19039,19043,19048,19064,19068,19073,19082,19095,19099,19105,19109,19114,19122,19126,19131,19135,19143,19147,19152,19157,19162,19167,19172,19176,19181,19186,19191,19196,19200,19205,19210,19226,19238,19243,19247,19252,19257,19262,19266,19271,19285,19298,19302,19310,19314,19320,19326,19334],{"__ignoreMap":205},[288,18884,18885,18887],{"class":290,"line":291},[288,18886,2121],{"class":294},[288,18888,2124],{"class":403},[288,18890,18891,18893,18895,18897],{"class":290,"line":206},[288,18892,2129],{"class":294},[288,18894,2132],{"class":294},[288,18896,2136],{"class":2135},[288,18898,1463],{"class":298},[288,18900,18901],{"class":290,"line":1352},[288,18902,18903],{"class":357},"\u002F\u002F1.构造函数的分类及调用\n",[288,18905,18906],{"class":290,"line":1367},[288,18907,18908],{"class":357},"\u002F\u002F分类\n",[288,18910,18911],{"class":290,"line":1373},[288,18912,18913],{"class":357},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[288,18915,18916],{"class":290,"line":1387},[288,18917,18918],{"class":357},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[288,18920,18921],{"class":290,"line":1393},[288,18922,2572],{"emptyLinePlaceholder":217},[288,18924,18925,18927,18929],{"class":290,"line":1484},[288,18926,14867],{"class":294},[288,18928,15742],{"class":2135},[288,18930,2846],{"class":298},[288,18932,18933],{"class":290,"line":1490},[288,18934,1718],{"class":298},[288,18936,18937],{"class":290,"line":1502},[288,18938,14889],{"class":294},[288,18940,18941],{"class":290,"line":1784},[288,18942,18687],{"class":357},[288,18944,18945,18947],{"class":290,"line":1789},[288,18946,18692],{"class":2135},[288,18948,2148],{"class":298},[288,18950,18951],{"class":290,"line":1795},[288,18952,2202],{"class":298},[288,18954,18955,18957,18959,18962,18964],{"class":290,"line":1800},[288,18956,3623],{"class":298},[288,18958,1341],{"class":294},[288,18960,18961],{"class":403},"\"Person构造函数无参构造\"",[288,18963,1341],{"class":294},[288,18965,1364],{"class":298},[288,18967,18968],{"class":290,"line":1814},[288,18969,2359],{"class":298},[288,18971,18972,18974,18976,18978,18980],{"class":290,"line":1819},[288,18973,18692],{"class":2135},[288,18975,299],{"class":298},[288,18977,302],{"class":294},[288,18979,1571],{"class":5389},[288,18981,305],{"class":298},[288,18983,18984],{"class":290,"line":1825},[288,18985,2202],{"class":298},[288,18987,18988,18991,18993],{"class":290,"line":1846},[288,18989,18990],{"class":298},"        age",[288,18992,344],{"class":294},[288,18994,6370],{"class":298},[288,18996,18997,18999,19001,19004,19006],{"class":290,"line":1851},[288,18998,3623],{"class":298},[288,19000,1341],{"class":294},[288,19002,19003],{"class":403},"\"Person构造函数有参构造\"",[288,19005,1341],{"class":294},[288,19007,1364],{"class":298},[288,19009,19010],{"class":290,"line":1865},[288,19011,2359],{"class":298},[288,19013,19014],{"class":290,"line":1870},[288,19015,18720],{"class":357},[288,19017,19018,19020],{"class":290,"line":1899},[288,19019,18725],{"class":2135},[288,19021,2148],{"class":298},[288,19023,19024],{"class":290,"line":1904},[288,19025,2202],{"class":298},[288,19027,19028,19030,19032,19035,19037],{"class":290,"line":1921},[288,19029,3623],{"class":298},[288,19031,1341],{"class":294},[288,19033,19034],{"class":403},"\"Person析构函数被调用\"",[288,19036,1341],{"class":294},[288,19038,1364],{"class":298},[288,19040,19041],{"class":290,"line":1926},[288,19042,2359],{"class":298},[288,19044,19045],{"class":290,"line":1931},[288,19046,19047],{"class":357},"    \u002F\u002F拷贝构造函数\n",[288,19049,19050,19052,19054,19056,19058,19060,19062],{"class":290,"line":1936},[288,19051,18692],{"class":2135},[288,19053,299],{"class":298},[288,19055,6965],{"class":294},[288,19057,15742],{"class":2135},[288,19059,10757],{"class":294},[288,19061,19],{"class":5389},[288,19063,305],{"class":298},[288,19065,19066],{"class":290,"line":1950},[288,19067,2202],{"class":298},[288,19069,19070],{"class":290,"line":1955},[288,19071,19072],{"class":357},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[288,19074,19075,19077,19079],{"class":290,"line":2749},[288,19076,18990],{"class":298},[288,19078,344],{"class":294},[288,19080,19081],{"class":298},"p.age;\n",[288,19083,19084,19086,19088,19091,19093],{"class":290,"line":2763},[288,19085,3623],{"class":298},[288,19087,1341],{"class":294},[288,19089,19090],{"class":403},"\"Person拷贝构造函数被调用\"",[288,19092,1341],{"class":294},[288,19094,1364],{"class":298},[288,19096,19097],{"class":290,"line":2771},[288,19098,2359],{"class":298},[288,19100,19101,19103],{"class":290,"line":2776},[288,19102,2157],{"class":294},[288,19104,7970],{"class":298},[288,19106,19107],{"class":290,"line":2782},[288,19108,4167],{"class":298},[288,19110,19111],{"class":290,"line":2788},[288,19112,19113],{"class":357},"\u002F\u002F调用\n",[288,19115,19116,19118,19120],{"class":290,"line":2793},[288,19117,5537],{"class":294},[288,19119,5761],{"class":2135},[288,19121,2148],{"class":298},[288,19123,19124],{"class":290,"line":8121},[288,19125,1718],{"class":298},[288,19127,19128],{"class":290,"line":8145},[288,19129,19130],{"class":357},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[288,19132,19133],{"class":290,"line":8150},[288,19134,1737],{"class":298},[288,19136,19137,19139,19141],{"class":290,"line":8156},[288,19138,5537],{"class":294},[288,19140,5830],{"class":2135},[288,19142,2148],{"class":298},[288,19144,19145],{"class":290,"line":8183},[288,19146,1718],{"class":298},[288,19148,19149],{"class":290,"line":8188},[288,19150,19151],{"class":357},"    \u002F\u002F1.括号法\n",[288,19153,19154],{"class":290,"line":8194},[288,19155,19156],{"class":357},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[288,19158,19159],{"class":290,"line":8206},[288,19160,19161],{"class":357},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[288,19163,19164],{"class":290,"line":8218},[288,19165,19166],{"class":357},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[288,19168,19169],{"class":290,"line":8230},[288,19170,19171],{"class":357},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[288,19173,19174],{"class":290,"line":9889},[288,19175,2572],{"emptyLinePlaceholder":217},[288,19177,19178],{"class":290,"line":9914},[288,19179,19180],{"class":357},"    \u002F\u002F注意事项\n",[288,19182,19183],{"class":290,"line":9937},[288,19184,19185],{"class":357},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[288,19187,19188],{"class":290,"line":9961},[288,19189,19190],{"class":357},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[288,19192,19193],{"class":290,"line":9966},[288,19194,19195],{"class":357},"    \u002F\u002F Person p4();\n",[288,19197,19198],{"class":290,"line":9971},[288,19199,2572],{"emptyLinePlaceholder":217},[288,19201,19202],{"class":290,"line":9976},[288,19203,19204],{"class":357},"    \u002F\u002F2.显示法\n",[288,19206,19207],{"class":290,"line":9985},[288,19208,19209],{"class":298},"    Person p1;\n",[288,19211,19212,19215,19217,19220,19222,19224],{"class":290,"line":9990},[288,19213,19214],{"class":298},"    Person p2",[288,19216,344],{"class":294},[288,19218,19219],{"class":2135},"Person",[288,19221,299],{"class":298},[288,19223,743],{"class":347},[288,19225,2891],{"class":298},[288,19227,19228,19231,19233,19235],{"class":290,"line":9996},[288,19229,19230],{"class":298},"    Person p3",[288,19232,344],{"class":294},[288,19234,19219],{"class":2135},[288,19236,19237],{"class":298},"(p2);\n",[288,19239,19240],{"class":290,"line":10017},[288,19241,19242],{"class":357},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[288,19244,19245],{"class":290,"line":10023},[288,19246,2572],{"emptyLinePlaceholder":217},[288,19248,19249],{"class":290,"line":10037},[288,19250,19251],{"class":357},"    \u002F\u002F 注意事项2\n",[288,19253,19254],{"class":290,"line":10043},[288,19255,19256],{"class":357},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[288,19258,19259],{"class":290,"line":10070},[288,19260,19261],{"class":357},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[288,19263,19264],{"class":290,"line":10079},[288,19265,2572],{"emptyLinePlaceholder":217},[288,19267,19268],{"class":290,"line":10085},[288,19269,19270],{"class":357},"    \u002F\u002F3.隐士转换法\n",[288,19272,19273,19276,19278,19280,19282],{"class":290,"line":10093},[288,19274,19275],{"class":298},"    Person p4",[288,19277,344],{"class":294},[288,19279,743],{"class":347},[288,19281,354],{"class":298},[288,19283,19284],{"class":357},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[288,19286,19287,19290,19292,19295],{"class":290,"line":10098},[288,19288,19289],{"class":298},"    Person p5",[288,19291,344],{"class":294},[288,19293,19294],{"class":298},"p4;",[288,19296,19297],{"class":357}," \u002F\u002F 这里会调用拷贝构造函数\n",[288,19299,19300],{"class":290,"line":16777},[288,19301,1737],{"class":298},[288,19303,19304,19306,19308],{"class":290,"line":16783},[288,19305,302],{"class":294},[288,19307,2145],{"class":2135},[288,19309,2148],{"class":298},[288,19311,19312],{"class":290,"line":16806},[288,19313,1718],{"class":298},[288,19315,19316,19318],{"class":290,"line":16812},[288,19317,5806],{"class":2135},[288,19319,5809],{"class":298},[288,19321,19322,19324],{"class":290,"line":16835},[288,19323,5875],{"class":2135},[288,19325,5809],{"class":298},[288,19327,19328,19330,19332],{"class":290,"line":16849},[288,19329,4262],{"class":294},[288,19331,4265],{"class":347},[288,19333,1463],{"class":298},[288,19335,19336],{"class":290,"line":16869},[288,19337,1737],{"class":298},[19,19339,19340,19343],{},[448,19341,19342],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[260,19345,19347],{"id":19346},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19349,19350],{},"C++中拷贝构造函数调用时机通常有三种情况",[1304,19352,19353,19356,19359],{},[246,19354,19355],{},"使用一个已经创建完毕的对象来初始化一个新对象",[246,19357,19358],{},"值传递的方式给函数参数传值",[246,19360,19361],{},"以值方式返回局部对象",[280,19363,19365],{"className":282,"code":19364,"language":284,"meta":205,"style":205},"#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",[25,19366,19367,19373,19383,19387,19392,19396,19401,19406,19411,19417,19421,19425,19431,19435,19448,19452,19457,19469,19473,19481,19494,19498,19502,19518,19522,19531,19544,19548,19554,19558,19570,19574,19580,19584,19588,19596,19600,19613,19621,19639,19643,19648,19653,19668,19672,19685,19689,19697,19701,19705,19713,19717,19722,19731,19735,19739,19764,19774,19778,19786,19790,19801,19826,19830,19834,19838,19846,19850,19855,19860,19867,19872,19877,19882,19887,19891,19896,19900,19905,19909,19914,19919,19923,19927,19932,19937,19945],{"__ignoreMap":205},[288,19368,19369,19371],{"class":290,"line":291},[288,19370,2121],{"class":294},[288,19372,2124],{"class":403},[288,19374,19375,19377,19379,19381],{"class":290,"line":206},[288,19376,2129],{"class":294},[288,19378,2132],{"class":294},[288,19380,2136],{"class":2135},[288,19382,1463],{"class":298},[288,19384,19385],{"class":290,"line":1352},[288,19386,2572],{"emptyLinePlaceholder":217},[288,19388,19389],{"class":290,"line":1367},[288,19390,19391],{"class":357},"\u002F\u002F拷贝构造函数调用时机\n",[288,19393,19394],{"class":290,"line":1373},[288,19395,2572],{"emptyLinePlaceholder":217},[288,19397,19398],{"class":290,"line":1387},[288,19399,19400],{"class":357},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[288,19402,19403],{"class":290,"line":1393},[288,19404,19405],{"class":357},"\u002F\u002F2.值传递的方式给函数参数传值\n",[288,19407,19408],{"class":290,"line":1484},[288,19409,19410],{"class":357},"\u002F\u002F3.以值方式返回局部对象\n",[288,19412,19413,19415],{"class":290,"line":1490},[288,19414,14867],{"class":294},[288,19416,15344],{"class":2135},[288,19418,19419],{"class":290,"line":1502},[288,19420,1718],{"class":298},[288,19422,19423],{"class":290,"line":1784},[288,19424,14889],{"class":294},[288,19426,19427,19429],{"class":290,"line":1789},[288,19428,18692],{"class":2135},[288,19430,2148],{"class":298},[288,19432,19433],{"class":290,"line":1795},[288,19434,2202],{"class":298},[288,19436,19437,19439,19441,19444,19446],{"class":290,"line":1800},[288,19438,9842],{"class":298},[288,19440,1341],{"class":294},[288,19442,19443],{"class":403}," \"Person的默认构造函数调用\"",[288,19445,1617],{"class":294},[288,19447,9013],{"class":298},[288,19449,19450],{"class":290,"line":1814},[288,19451,2359],{"class":298},[288,19453,19454],{"class":290,"line":1819},[288,19455,19456],{"class":357},"    \u002F\u002F有参构造\n",[288,19458,19459,19461,19463,19465,19467],{"class":290,"line":1825},[288,19460,18692],{"class":2135},[288,19462,299],{"class":298},[288,19464,302],{"class":294},[288,19466,15862],{"class":5389},[288,19468,305],{"class":298},[288,19470,19471],{"class":290,"line":1846},[288,19472,2202],{"class":298},[288,19474,19475,19477,19479],{"class":290,"line":1851},[288,19476,15916],{"class":298},[288,19478,344],{"class":294},[288,19480,7970],{"class":298},[288,19482,19483,19485,19487,19490,19492],{"class":290,"line":1865},[288,19484,9842],{"class":298},[288,19486,1341],{"class":294},[288,19488,19489],{"class":403}," \"Person的有参构造函数调用\"",[288,19491,1617],{"class":294},[288,19493,9013],{"class":298},[288,19495,19496],{"class":290,"line":1870},[288,19497,2359],{"class":298},[288,19499,19500],{"class":290,"line":1899},[288,19501,19047],{"class":357},[288,19503,19504,19506,19508,19510,19512,19514,19516],{"class":290,"line":1904},[288,19505,18692],{"class":2135},[288,19507,299],{"class":298},[288,19509,6965],{"class":294},[288,19511,15742],{"class":2135},[288,19513,10757],{"class":294},[288,19515,19],{"class":5389},[288,19517,305],{"class":298},[288,19519,19520],{"class":290,"line":1921},[288,19521,2202],{"class":298},[288,19523,19524,19526,19528],{"class":290,"line":1926},[288,19525,15916],{"class":298},[288,19527,344],{"class":294},[288,19529,19530],{"class":298}," p.m_Age;\n",[288,19532,19533,19535,19537,19540,19542],{"class":290,"line":1931},[288,19534,9842],{"class":298},[288,19536,1341],{"class":294},[288,19538,19539],{"class":403}," \"Person的拷贝构造函数调用\"",[288,19541,1617],{"class":294},[288,19543,9013],{"class":298},[288,19545,19546],{"class":290,"line":1936},[288,19547,2359],{"class":298},[288,19549,19550,19552],{"class":290,"line":1950},[288,19551,18725],{"class":2135},[288,19553,2148],{"class":298},[288,19555,19556],{"class":290,"line":1955},[288,19557,2202],{"class":298},[288,19559,19560,19562,19564,19566,19568],{"class":290,"line":2749},[288,19561,9842],{"class":298},[288,19563,1341],{"class":294},[288,19565,18740],{"class":403},[288,19567,1617],{"class":294},[288,19569,9013],{"class":298},[288,19571,19572],{"class":290,"line":2763},[288,19573,2359],{"class":298},[288,19575,19576,19578],{"class":290,"line":2771},[288,19577,2157],{"class":294},[288,19579,15839],{"class":298},[288,19581,19582],{"class":290,"line":2776},[288,19583,4167],{"class":298},[288,19585,19586],{"class":290,"line":2782},[288,19587,19400],{"class":357},[288,19589,19590,19592,19594],{"class":290,"line":2788},[288,19591,5537],{"class":294},[288,19593,5761],{"class":2135},[288,19595,2148],{"class":298},[288,19597,19598],{"class":290,"line":2793},[288,19599,1718],{"class":298},[288,19601,19602,19605,19607,19609,19611],{"class":290,"line":8121},[288,19603,19604],{"class":298},"    Person ",[288,19606,7303],{"class":2135},[288,19608,299],{"class":298},[288,19610,997],{"class":347},[288,19612,2891],{"class":298},[288,19614,19615,19617,19619],{"class":290,"line":8145},[288,19616,19604],{"class":298},[288,19618,7206],{"class":2135},[288,19620,17688],{"class":298},[288,19622,19623,19625,19627,19630,19632,19635,19637],{"class":290,"line":8150},[288,19624,1723],{"class":298},[288,19626,1341],{"class":294},[288,19628,19629],{"class":403},"\"P2的年龄为：\"",[288,19631,1341],{"class":294},[288,19633,19634],{"class":298},"p2.m_Age",[288,19636,1341],{"class":294},[288,19638,1364],{"class":298},[288,19640,19641],{"class":290,"line":8156},[288,19642,1737],{"class":298},[288,19644,19645],{"class":290,"line":8183},[288,19646,19647],{"class":357},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[288,19649,19650],{"class":290,"line":8188},[288,19651,19652],{"class":357},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[288,19654,19655,19657,19660,19662,19664,19666],{"class":290,"line":8194},[288,19656,5537],{"class":294},[288,19658,19659],{"class":2135}," doWork",[288,19661,299],{"class":298},[288,19663,19219],{"class":2135},[288,19665,6998],{"class":5389},[288,19667,305],{"class":298},[288,19669,19670],{"class":290,"line":8206},[288,19671,1718],{"class":298},[288,19673,19674,19676,19678,19681,19683],{"class":290,"line":8218},[288,19675,6702],{"class":298},[288,19677,1341],{"class":294},[288,19679,19680],{"class":403}," \"doWork函数调用\"",[288,19682,1617],{"class":294},[288,19684,9013],{"class":298},[288,19686,19687],{"class":290,"line":8230},[288,19688,1737],{"class":298},[288,19690,19691,19693,19695],{"class":290,"line":9889},[288,19692,5537],{"class":294},[288,19694,5830],{"class":2135},[288,19696,2148],{"class":298},[288,19698,19699],{"class":290,"line":9914},[288,19700,1718],{"class":298},[288,19702,19703],{"class":290,"line":9937},[288,19704,15486],{"class":298},[288,19706,19707,19710],{"class":290,"line":9961},[288,19708,19709],{"class":2135},"    doWork",[288,19711,19712],{"class":298},"(p);\n",[288,19714,19715],{"class":290,"line":9966},[288,19716,1737],{"class":298},[288,19718,19719],{"class":290,"line":9971},[288,19720,19721],{"class":357},"\u002F\u002F 3.以值方式返回局部对象\n",[288,19723,19724,19726,19729],{"class":290,"line":9976},[288,19725,19219],{"class":2135},[288,19727,19728],{"class":2135}," doWork2",[288,19730,2148],{"class":298},[288,19732,19733],{"class":290,"line":9985},[288,19734,1718],{"class":298},[288,19736,19737],{"class":290,"line":9990},[288,19738,19209],{"class":298},[288,19740,19741,19743,19745,19747,19749,19751,19753,19755,19757,19759,19761],{"class":290,"line":9996},[288,19742,1723],{"class":298},[288,19744,1341],{"class":294},[288,19746,299],{"class":298},[288,19748,302],{"class":294},[288,19750,6691],{"class":294},[288,19752,726],{"class":298},[288,19754,650],{"class":294},[288,19756,7303],{"class":298},[288,19758,1341],{"class":294},[288,19760,1411],{"class":298},[288,19762,19763],{"class":357},"\u002F\u002F打印p1的地址\n",[288,19765,19766,19768,19771],{"class":290,"line":10017},[288,19767,4262],{"class":294},[288,19769,19770],{"class":298}," p1;",[288,19772,19773],{"class":357},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[288,19775,19776],{"class":290,"line":10023},[288,19777,1737],{"class":298},[288,19779,19780,19782,19784],{"class":290,"line":10037},[288,19781,5537],{"class":294},[288,19783,5902],{"class":2135},[288,19785,2148],{"class":298},[288,19787,19788],{"class":290,"line":10043},[288,19789,1718],{"class":298},[288,19791,19792,19795,19797,19799],{"class":290,"line":10070},[288,19793,19794],{"class":298},"    Person p ",[288,19796,344],{"class":294},[288,19798,19728],{"class":2135},[288,19800,5809],{"class":298},[288,19802,19803,19805,19807,19809,19811,19813,19815,19817,19819,19821,19823],{"class":290,"line":10079},[288,19804,1723],{"class":298},[288,19806,1341],{"class":294},[288,19808,299],{"class":298},[288,19810,302],{"class":294},[288,19812,6691],{"class":294},[288,19814,726],{"class":298},[288,19816,650],{"class":294},[288,19818,19],{"class":298},[288,19820,1341],{"class":294},[288,19822,1411],{"class":298},[288,19824,19825],{"class":357},"\u002F\u002F打印p的地址\n",[288,19827,19828],{"class":290,"line":10085},[288,19829,1737],{"class":298},[288,19831,19832],{"class":290,"line":10093},[288,19833,2572],{"emptyLinePlaceholder":217},[288,19835,19836],{"class":290,"line":10098},[288,19837,2572],{"emptyLinePlaceholder":217},[288,19839,19840,19842,19844],{"class":290,"line":16777},[288,19841,302],{"class":294},[288,19843,2145],{"class":2135},[288,19845,2148],{"class":298},[288,19847,19848],{"class":290,"line":16783},[288,19849,1718],{"class":298},[288,19851,19852],{"class":290,"line":16806},[288,19853,19854],{"class":357},"    \u002F\u002F test01();\n",[288,19856,19857],{"class":290,"line":16812},[288,19858,19859],{"class":357},"    \u002F\u002F test02();\n",[288,19861,19862,19865],{"class":290,"line":16835},[288,19863,19864],{"class":2135},"    test03",[288,19866,5809],{"class":298},[288,19868,19869],{"class":290,"line":16849},[288,19870,19871],{"class":357},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[288,19873,19874],{"class":290,"line":16869},[288,19875,19876],{"class":357},"\u002F\u002F 输出结果如下：\n",[288,19878,19879],{"class":290,"line":16875},[288,19880,19881],{"class":357},"\u002F\u002F Person的默认构造函数调用\n",[288,19883,19884],{"class":290,"line":16886},[288,19885,19886],{"class":357},"\u002F\u002F 0x7fffffffceec\n",[288,19888,19889],{"class":290,"line":16909},[288,19890,19886],{"class":357},[288,19892,19893],{"class":290,"line":16931},[288,19894,19895],{"class":357},"\u002F\u002F Person的析构函数调用\n",[288,19897,19898],{"class":290,"line":16936},[288,19899,2572],{"emptyLinePlaceholder":217},[288,19901,19902],{"class":290,"line":16942},[288,19903,19904],{"class":357},"\u002F\u002F 之前的输出结果如下：\n",[288,19906,19907],{"class":290,"line":16956},[288,19908,19881],{"class":357},[288,19910,19911],{"class":290,"line":16969},[288,19912,19913],{"class":357},"\u002F\u002F 地址\n",[288,19915,19916],{"class":290,"line":16974},[288,19917,19918],{"class":357},"\u002F\u002F Person的拷贝构造函数调用\n",[288,19920,19921],{"class":290,"line":16988},[288,19922,19895],{"class":357},[288,19924,19925],{"class":290,"line":16993},[288,19926,19913],{"class":357},[288,19928,19929],{"class":290,"line":16999},[288,19930,19931],{"class":357},"\u002F\u002F (这两次输出的地址也是不同的) \n",[288,19933,19934],{"class":290,"line":17004},[288,19935,19936],{"class":357},"\u002F\u002F Person的析构函数调用     \n",[288,19938,19939,19941,19943],{"class":290,"line":17018},[288,19940,4262],{"class":294},[288,19942,4265],{"class":347},[288,19944,1463],{"class":298},[288,19946,19947],{"class":290,"line":17023},[288,19948,1737],{"class":298},[19,19950,19951],{},"简化版理解",[280,19953,19955],{"className":282,"code":19954,"language":284,"meta":205,"style":205},"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",[25,19956,19957,19965,19969,19975,19988,19999,20003,20015,20028,20036,20040,20056,20069,20078,20082,20087,20093,20106,20110,20114,20121,20125,20129,20134,20142,20146,20162,20175,20188,20192,20197,20205,20209,20213,20218,20223,20239,20247,20254,20260,20264,20268,20273,20281,20285,20289,20312,20319,20323,20327,20335,20339,20349,20371,20375,20379,20383,20391,20395,20400,20405,20411,20415,20425,20429,20437],{"__ignoreMap":205},[288,19958,19959,19961,19963],{"class":290,"line":291},[288,19960,14867],{"class":294},[288,19962,15742],{"class":2135},[288,19964,15745],{"class":298},[288,19966,19967],{"class":290,"line":206},[288,19968,14889],{"class":294},[288,19970,19971,19973],{"class":290,"line":1352},[288,19972,18692],{"class":2135},[288,19974,11026],{"class":298},[288,19976,19977,19979,19981,19984,19986],{"class":290,"line":1367},[288,19978,9842],{"class":298},[288,19980,1341],{"class":294},[288,19982,19983],{"class":403}," \"无参构造函数!\"",[288,19985,1617],{"class":294},[288,19987,9013],{"class":298},[288,19989,19990,19993,19995,19997],{"class":290,"line":1373},[288,19991,19992],{"class":298},"        mAge ",[288,19994,344],{"class":294},[288,19996,4265],{"class":347},[288,19998,1463],{"class":298},[288,20000,20001],{"class":290,"line":1387},[288,20002,2359],{"class":298},[288,20004,20005,20007,20009,20011,20013],{"class":290,"line":1393},[288,20006,18692],{"class":2135},[288,20008,299],{"class":298},[288,20010,302],{"class":294},[288,20012,15862],{"class":5389},[288,20014,12615],{"class":298},[288,20016,20017,20019,20021,20024,20026],{"class":290,"line":1484},[288,20018,9842],{"class":298},[288,20020,1341],{"class":294},[288,20022,20023],{"class":403}," \"有参构造函数!\"",[288,20025,1617],{"class":294},[288,20027,9013],{"class":298},[288,20029,20030,20032,20034],{"class":290,"line":1490},[288,20031,19992],{"class":298},[288,20033,344],{"class":294},[288,20035,7970],{"class":298},[288,20037,20038],{"class":290,"line":1502},[288,20039,2359],{"class":298},[288,20041,20042,20044,20046,20048,20050,20052,20054],{"class":290,"line":1784},[288,20043,18692],{"class":2135},[288,20045,299],{"class":298},[288,20047,6965],{"class":294},[288,20049,15742],{"class":2135},[288,20051,650],{"class":294},[288,20053,6998],{"class":5389},[288,20055,12615],{"class":298},[288,20057,20058,20060,20062,20065,20067],{"class":290,"line":1789},[288,20059,9842],{"class":298},[288,20061,1341],{"class":294},[288,20063,20064],{"class":403}," \"拷贝构造函数!\"",[288,20066,1617],{"class":294},[288,20068,9013],{"class":298},[288,20070,20071,20073,20075],{"class":290,"line":1795},[288,20072,19992],{"class":298},[288,20074,344],{"class":294},[288,20076,20077],{"class":298}," p.mAge;\n",[288,20079,20080],{"class":290,"line":1800},[288,20081,2359],{"class":298},[288,20083,20084],{"class":290,"line":1814},[288,20085,20086],{"class":357},"    \u002F\u002F析构函数在释放内存之前调用\n",[288,20088,20089,20091],{"class":290,"line":1819},[288,20090,18725],{"class":2135},[288,20092,11026],{"class":298},[288,20094,20095,20097,20099,20102,20104],{"class":290,"line":1825},[288,20096,9842],{"class":298},[288,20098,1341],{"class":294},[288,20100,20101],{"class":403}," \"析构函数!\"",[288,20103,1617],{"class":294},[288,20105,9013],{"class":298},[288,20107,20108],{"class":290,"line":1846},[288,20109,2359],{"class":298},[288,20111,20112],{"class":290,"line":1851},[288,20113,14889],{"class":294},[288,20115,20116,20118],{"class":290,"line":1865},[288,20117,2157],{"class":294},[288,20119,20120],{"class":298}," mAge;\n",[288,20122,20123],{"class":290,"line":1870},[288,20124,4167],{"class":298},[288,20126,20127],{"class":290,"line":1899},[288,20128,2572],{"emptyLinePlaceholder":217},[288,20130,20131],{"class":290,"line":1904},[288,20132,20133],{"class":357},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[288,20135,20136,20138,20140],{"class":290,"line":1921},[288,20137,5537],{"class":294},[288,20139,5761],{"class":2135},[288,20141,11026],{"class":298},[288,20143,20144],{"class":290,"line":1926},[288,20145,2572],{"emptyLinePlaceholder":217},[288,20147,20148,20150,20153,20155,20157,20159],{"class":290,"line":1931},[288,20149,19604],{"class":298},[288,20151,20152],{"class":2135},"man",[288,20154,299],{"class":298},[288,20156,608],{"class":347},[288,20158,6139],{"class":298},[288,20160,20161],{"class":357}," \u002F\u002Fp对象已经创建完毕\n",[288,20163,20164,20166,20169,20172],{"class":290,"line":1936},[288,20165,19604],{"class":298},[288,20167,20168],{"class":2135},"newman",[288,20170,20171],{"class":298},"(man);",[288,20173,20174],{"class":357}," \u002F\u002F调用拷贝构造函数\n",[288,20176,20177,20180,20182,20185],{"class":290,"line":1950},[288,20178,20179],{"class":298},"    Person newman2 ",[288,20181,344],{"class":294},[288,20183,20184],{"class":298}," man;",[288,20186,20187],{"class":357}," \u002F\u002F拷贝构造\n",[288,20189,20190],{"class":290,"line":1955},[288,20191,2572],{"emptyLinePlaceholder":217},[288,20193,20194],{"class":290,"line":2749},[288,20195,20196],{"class":357},"    \u002F\u002FPerson newman3;\n",[288,20198,20199,20202],{"class":290,"line":2763},[288,20200,20201],{"class":357},"    \u002F\u002Fnewman3 = man;",[288,20203,20204],{"class":357}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[288,20206,20207],{"class":290,"line":2771},[288,20208,1737],{"class":298},[288,20210,20211],{"class":290,"line":2776},[288,20212,2572],{"emptyLinePlaceholder":217},[288,20214,20215],{"class":290,"line":2782},[288,20216,20217],{"class":357},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[288,20219,20220],{"class":290,"line":2788},[288,20221,20222],{"class":357},"\u002F\u002F相当于Person p1 = p;\n",[288,20224,20225,20227,20229,20231,20233,20236],{"class":290,"line":2793},[288,20226,5537],{"class":294},[288,20228,19659],{"class":2135},[288,20230,299],{"class":298},[288,20232,19219],{"class":2135},[288,20234,20235],{"class":5389}," p1",[288,20237,20238],{"class":298},") {}\n",[288,20240,20241,20243,20245],{"class":290,"line":8121},[288,20242,5537],{"class":294},[288,20244,5830],{"class":2135},[288,20246,11026],{"class":298},[288,20248,20249,20251],{"class":290,"line":8145},[288,20250,18777],{"class":298},[288,20252,20253],{"class":357}," \u002F\u002F无参构造函数\n",[288,20255,20256,20258],{"class":290,"line":8150},[288,20257,19709],{"class":2135},[288,20259,19712],{"class":298},[288,20261,20262],{"class":290,"line":8156},[288,20263,1737],{"class":298},[288,20265,20266],{"class":290,"line":8183},[288,20267,2572],{"emptyLinePlaceholder":217},[288,20269,20270],{"class":290,"line":8188},[288,20271,20272],{"class":357},"\u002F\u002F3. 以值方式返回局部对象\n",[288,20274,20275,20277,20279],{"class":290,"line":8194},[288,20276,19219],{"class":2135},[288,20278,19728],{"class":2135},[288,20280,2148],{"class":298},[288,20282,20283],{"class":290,"line":8206},[288,20284,1718],{"class":298},[288,20286,20287],{"class":290,"line":8218},[288,20288,19209],{"class":298},[288,20290,20291,20293,20295,20297,20299,20301,20303,20305,20308,20310],{"class":290,"line":8230},[288,20292,6702],{"class":298},[288,20294,1341],{"class":294},[288,20296,1830],{"class":298},[288,20298,302],{"class":294},[288,20300,6691],{"class":294},[288,20302,726],{"class":298},[288,20304,650],{"class":294},[288,20306,20307],{"class":298},"p1 ",[288,20309,1341],{"class":294},[288,20311,9013],{"class":298},[288,20313,20314,20316],{"class":290,"line":9889},[288,20315,4262],{"class":294},[288,20317,20318],{"class":298}," p1;\n",[288,20320,20321],{"class":290,"line":9914},[288,20322,1737],{"class":298},[288,20324,20325],{"class":290,"line":9937},[288,20326,2572],{"emptyLinePlaceholder":217},[288,20328,20329,20331,20333],{"class":290,"line":9961},[288,20330,5537],{"class":294},[288,20332,5902],{"class":2135},[288,20334,2148],{"class":298},[288,20336,20337],{"class":290,"line":9966},[288,20338,1718],{"class":298},[288,20340,20341,20343,20345,20347],{"class":290,"line":9971},[288,20342,19794],{"class":298},[288,20344,344],{"class":294},[288,20346,19728],{"class":2135},[288,20348,5809],{"class":298},[288,20350,20351,20353,20355,20357,20359,20361,20363,20365,20367,20369],{"class":290,"line":9976},[288,20352,6702],{"class":298},[288,20354,1341],{"class":294},[288,20356,1830],{"class":298},[288,20358,302],{"class":294},[288,20360,6691],{"class":294},[288,20362,726],{"class":298},[288,20364,650],{"class":294},[288,20366,11621],{"class":298},[288,20368,1341],{"class":294},[288,20370,9013],{"class":298},[288,20372,20373],{"class":290,"line":9985},[288,20374,1737],{"class":298},[288,20376,20377],{"class":290,"line":9990},[288,20378,2572],{"emptyLinePlaceholder":217},[288,20380,20381],{"class":290,"line":9996},[288,20382,2572],{"emptyLinePlaceholder":217},[288,20384,20385,20387,20389],{"class":290,"line":10017},[288,20386,302],{"class":294},[288,20388,2145],{"class":2135},[288,20390,11026],{"class":298},[288,20392,20393],{"class":290,"line":10023},[288,20394,2572],{"emptyLinePlaceholder":217},[288,20396,20397],{"class":290,"line":10037},[288,20398,20399],{"class":357},"    \u002F\u002Ftest01();\n",[288,20401,20402],{"class":290,"line":10043},[288,20403,20404],{"class":357},"    \u002F\u002Ftest02();\n",[288,20406,20407,20409],{"class":290,"line":10070},[288,20408,19864],{"class":2135},[288,20410,5809],{"class":298},[288,20412,20413],{"class":290,"line":10079},[288,20414,2572],{"emptyLinePlaceholder":217},[288,20416,20417,20419,20421,20423],{"class":290,"line":10085},[288,20418,2475],{"class":2135},[288,20420,299],{"class":298},[288,20422,2480],{"class":403},[288,20424,2891],{"class":298},[288,20426,20427],{"class":290,"line":10093},[288,20428,2572],{"emptyLinePlaceholder":217},[288,20430,20431,20433,20435],{"class":290,"line":10098},[288,20432,4262],{"class":294},[288,20434,4265],{"class":347},[288,20436,1463],{"class":298},[288,20438,20439],{"class":290,"line":16777},[288,20440,1737],{"class":298},[260,20442,20444],{"id":20443},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20446,20447],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20449,20450],{},"1．默认构造函数(无参，函数体为空)",[19,20452,20453],{},"2．默认析构函数(无参，函数体为空)",[19,20455,20456],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20458,20459],{},"构造函数调用规则如下：",[1304,20461,20462,20465],{},[246,20463,20464],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[246,20466,20467],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[280,20469,20471],{"className":282,"code":20470,"language":284,"meta":205,"style":205},"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",[25,20472,20473,20481,20485,20490,20496,20508,20512,20517,20529,20538,20550,20554,20558,20574,20583,20595,20599,20603,20609,20621,20625,20629,20635,20639,20643,20651,20655,20667,20672,20680,20684,20702,20706,20710,20718,20722,20727,20735,20750,20763,20767,20772,20779,20795,20808,20812,20816,20824,20828,20834,20838,20848,20852,20860],{"__ignoreMap":205},[288,20474,20475,20477,20479],{"class":290,"line":291},[288,20476,14867],{"class":294},[288,20478,15742],{"class":2135},[288,20480,15745],{"class":298},[288,20482,20483],{"class":290,"line":206},[288,20484,14889],{"class":294},[288,20486,20487],{"class":290,"line":1352},[288,20488,20489],{"class":357},"    \u002F\u002F无参（默认）构造函数\n",[288,20491,20492,20494],{"class":290,"line":1367},[288,20493,18692],{"class":2135},[288,20495,11026],{"class":298},[288,20497,20498,20500,20502,20504,20506],{"class":290,"line":1373},[288,20499,9842],{"class":298},[288,20501,1341],{"class":294},[288,20503,19983],{"class":403},[288,20505,1617],{"class":294},[288,20507,9013],{"class":298},[288,20509,20510],{"class":290,"line":1387},[288,20511,2359],{"class":298},[288,20513,20514],{"class":290,"line":1393},[288,20515,20516],{"class":357},"    \u002F\u002F有参构造函数\n",[288,20518,20519,20521,20523,20525,20527],{"class":290,"line":1484},[288,20520,18692],{"class":2135},[288,20522,299],{"class":298},[288,20524,302],{"class":294},[288,20526,1571],{"class":5389},[288,20528,12615],{"class":298},[288,20530,20531,20534,20536],{"class":290,"line":1490},[288,20532,20533],{"class":298},"        age ",[288,20535,344],{"class":294},[288,20537,1605],{"class":298},[288,20539,20540,20542,20544,20546,20548],{"class":290,"line":1502},[288,20541,9842],{"class":298},[288,20543,1341],{"class":294},[288,20545,20023],{"class":403},[288,20547,1617],{"class":294},[288,20549,9013],{"class":298},[288,20551,20552],{"class":290,"line":1784},[288,20553,2359],{"class":298},[288,20555,20556],{"class":290,"line":1789},[288,20557,19047],{"class":357},[288,20559,20560,20562,20564,20566,20568,20570,20572],{"class":290,"line":1795},[288,20561,18692],{"class":2135},[288,20563,299],{"class":298},[288,20565,6965],{"class":294},[288,20567,15742],{"class":2135},[288,20569,650],{"class":294},[288,20571,6998],{"class":5389},[288,20573,12615],{"class":298},[288,20575,20576,20578,20580],{"class":290,"line":1800},[288,20577,20533],{"class":298},[288,20579,344],{"class":294},[288,20581,20582],{"class":298}," p.age;\n",[288,20584,20585,20587,20589,20591,20593],{"class":290,"line":1814},[288,20586,9842],{"class":298},[288,20588,1341],{"class":294},[288,20590,20064],{"class":403},[288,20592,1617],{"class":294},[288,20594,9013],{"class":298},[288,20596,20597],{"class":290,"line":1819},[288,20598,2359],{"class":298},[288,20600,20601],{"class":290,"line":1825},[288,20602,18720],{"class":357},[288,20604,20605,20607],{"class":290,"line":1846},[288,20606,18725],{"class":2135},[288,20608,11026],{"class":298},[288,20610,20611,20613,20615,20617,20619],{"class":290,"line":1851},[288,20612,9842],{"class":298},[288,20614,1341],{"class":294},[288,20616,20101],{"class":403},[288,20618,1617],{"class":294},[288,20620,9013],{"class":298},[288,20622,20623],{"class":290,"line":1865},[288,20624,2359],{"class":298},[288,20626,20627],{"class":290,"line":1870},[288,20628,14889],{"class":294},[288,20630,20631,20633],{"class":290,"line":1899},[288,20632,2157],{"class":294},[288,20634,7970],{"class":298},[288,20636,20637],{"class":290,"line":1904},[288,20638,4167],{"class":298},[288,20640,20641],{"class":290,"line":1921},[288,20642,2572],{"emptyLinePlaceholder":217},[288,20644,20645,20647,20649],{"class":290,"line":1926},[288,20646,5537],{"class":294},[288,20648,5761],{"class":2135},[288,20650,2148],{"class":298},[288,20652,20653],{"class":290,"line":1931},[288,20654,1718],{"class":298},[288,20656,20657,20659,20661,20663,20665],{"class":290,"line":1936},[288,20658,19604],{"class":298},[288,20660,7303],{"class":2135},[288,20662,299],{"class":298},[288,20664,947],{"class":347},[288,20666,2891],{"class":298},[288,20668,20669],{"class":290,"line":1950},[288,20670,20671],{"class":357},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[288,20673,20674,20676,20678],{"class":290,"line":1955},[288,20675,19604],{"class":298},[288,20677,7206],{"class":2135},[288,20679,17688],{"class":298},[288,20681,20682],{"class":290,"line":2749},[288,20683,2572],{"emptyLinePlaceholder":217},[288,20685,20686,20688,20690,20693,20695,20698,20700],{"class":290,"line":2763},[288,20687,6702],{"class":298},[288,20689,1341],{"class":294},[288,20691,20692],{"class":403}," \"p2的年龄为： \"",[288,20694,1617],{"class":294},[288,20696,20697],{"class":298}," p2.age ",[288,20699,1341],{"class":294},[288,20701,9013],{"class":298},[288,20703,20704],{"class":290,"line":2771},[288,20705,1737],{"class":298},[288,20707,20708],{"class":290,"line":2776},[288,20709,2572],{"emptyLinePlaceholder":217},[288,20711,20712,20714,20716],{"class":290,"line":2782},[288,20713,5537],{"class":294},[288,20715,5830],{"class":2135},[288,20717,2148],{"class":298},[288,20719,20720],{"class":290,"line":2788},[288,20721,1718],{"class":298},[288,20723,20724],{"class":290,"line":2793},[288,20725,20726],{"class":357},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[288,20728,20729,20732],{"class":290,"line":8121},[288,20730,20731],{"class":298},"    Person p1;",[288,20733,20734],{"class":357}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[288,20736,20737,20739,20741,20743,20745,20747],{"class":290,"line":8145},[288,20738,19604],{"class":298},[288,20740,7206],{"class":2135},[288,20742,299],{"class":298},[288,20744,743],{"class":347},[288,20746,6139],{"class":298},[288,20748,20749],{"class":357}," \u002F\u002F用户提供的有参\n",[288,20751,20752,20754,20757,20760],{"class":290,"line":8150},[288,20753,19604],{"class":298},[288,20755,20756],{"class":2135},"p3",[288,20758,20759],{"class":298},"(p2);",[288,20761,20762],{"class":357}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[288,20764,20765],{"class":290,"line":8156},[288,20766,2572],{"emptyLinePlaceholder":217},[288,20768,20769],{"class":290,"line":8183},[288,20770,20771],{"class":357},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[288,20773,20774,20777],{"class":290,"line":8188},[288,20775,20776],{"class":298},"    Person p4;",[288,20778,20734],{"class":357},[288,20780,20781,20783,20786,20788,20790,20792],{"class":290,"line":8194},[288,20782,19604],{"class":298},[288,20784,20785],{"class":2135},"p5",[288,20787,299],{"class":298},[288,20789,743],{"class":347},[288,20791,6139],{"class":298},[288,20793,20794],{"class":357}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[288,20796,20797,20799,20802,20805],{"class":290,"line":8206},[288,20798,19604],{"class":298},[288,20800,20801],{"class":2135},"p6",[288,20803,20804],{"class":298},"(p5);",[288,20806,20807],{"class":357}," \u002F\u002F用户自己提供拷贝构造\n",[288,20809,20810],{"class":290,"line":8218},[288,20811,1737],{"class":298},[288,20813,20814],{"class":290,"line":8230},[288,20815,2572],{"emptyLinePlaceholder":217},[288,20817,20818,20820,20822],{"class":290,"line":9889},[288,20819,302],{"class":294},[288,20821,2145],{"class":2135},[288,20823,11026],{"class":298},[288,20825,20826],{"class":290,"line":9914},[288,20827,2572],{"emptyLinePlaceholder":217},[288,20829,20830,20832],{"class":290,"line":9937},[288,20831,5806],{"class":2135},[288,20833,5809],{"class":298},[288,20835,20836],{"class":290,"line":9961},[288,20837,2572],{"emptyLinePlaceholder":217},[288,20839,20840,20842,20844,20846],{"class":290,"line":9966},[288,20841,2475],{"class":2135},[288,20843,299],{"class":298},[288,20845,2480],{"class":403},[288,20847,2891],{"class":298},[288,20849,20850],{"class":290,"line":9971},[288,20851,2572],{"emptyLinePlaceholder":217},[288,20853,20854,20856,20858],{"class":290,"line":9976},[288,20855,4262],{"class":294},[288,20857,4265],{"class":347},[288,20859,1463],{"class":298},[288,20861,20862],{"class":290,"line":9985},[288,20863,1737],{"class":298},[260,20865,20867],{"id":20866},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20869,20870],{},"浅拷贝：简单的赋值拷贝操作",[19,20872,20873],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[280,20875,20877],{"className":282,"code":20876,"language":284,"meta":205,"style":205},"#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",[25,20878,20879,20885,20895,20901,20905,20909,20914,20920,20924,20937,20941,20945,20952,20956,20966,20981,20994,20998,21003,21008,21024,21028,21041,21046,21051,21056,21065,21070,21085,21089,21093,21097,21103,21107,21112,21127,21131,21142,21156,21160,21169,21173,21179,21191,21195,21203,21207,21224,21255,21263,21291,21295,21299,21307,21311,21317],{"__ignoreMap":205},[288,20880,20881,20883],{"class":290,"line":291},[288,20882,2121],{"class":294},[288,20884,2124],{"class":403},[288,20886,20887,20889,20891,20893],{"class":290,"line":206},[288,20888,2129],{"class":294},[288,20890,2132],{"class":294},[288,20892,2136],{"class":2135},[288,20894,1463],{"class":298},[288,20896,20897,20899],{"class":290,"line":1352},[288,20898,14867],{"class":294},[288,20900,15344],{"class":2135},[288,20902,20903],{"class":290,"line":1367},[288,20904,1718],{"class":298},[288,20906,20907],{"class":290,"line":1373},[288,20908,14889],{"class":294},[288,20910,20911],{"class":290,"line":1387},[288,20912,20913],{"class":357},"    \u002F\u002F默认构造函数\n",[288,20915,20916,20918],{"class":290,"line":1393},[288,20917,18692],{"class":2135},[288,20919,2148],{"class":298},[288,20921,20922],{"class":290,"line":1484},[288,20923,2202],{"class":298},[288,20925,20926,20928,20930,20933,20935],{"class":290,"line":1490},[288,20927,3623],{"class":298},[288,20929,1341],{"class":294},[288,20931,20932],{"class":403},"\"默认构造函数\"",[288,20934,1341],{"class":294},[288,20936,1364],{"class":298},[288,20938,20939],{"class":290,"line":1502},[288,20940,2359],{"class":298},[288,20942,20943],{"class":290,"line":1784},[288,20944,20516],{"class":357},[288,20946,20947,20949],{"class":290,"line":1789},[288,20948,18725],{"class":2135},[288,20950,20951],{"class":298},"(int age,int height)\n",[288,20953,20954],{"class":290,"line":1795},[288,20955,2202],{"class":298},[288,20957,20958,20961,20963],{"class":290,"line":1800},[288,20959,20960],{"class":298},"        m_Age",[288,20962,344],{"class":294},[288,20964,20965],{"class":298},"age;\n",[288,20967,20968,20971,20973,20975,20978],{"class":290,"line":1814},[288,20969,20970],{"class":298},"        m_Height",[288,20972,11890],{"class":294},[288,20974,2554],{"class":294},[288,20976,20977],{"class":298},"(height);",[288,20979,20980],{"class":357},"\u002F\u002F放到堆区\n",[288,20982,20983,20985,20987,20990,20992],{"class":290,"line":1819},[288,20984,3623],{"class":298},[288,20986,1341],{"class":294},[288,20988,20989],{"class":403},"\"有参构造函数\"",[288,20991,1341],{"class":294},[288,20993,1364],{"class":298},[288,20995,20996],{"class":290,"line":1825},[288,20997,2359],{"class":298},[288,20999,21000],{"class":290,"line":1846},[288,21001,21002],{"class":357},"    \u002F\u002F深拷贝解决上述问题\n",[288,21004,21005],{"class":290,"line":1851},[288,21006,21007],{"class":357},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[288,21009,21010,21012,21014,21016,21018,21020,21022],{"class":290,"line":1865},[288,21011,18692],{"class":2135},[288,21013,299],{"class":298},[288,21015,6965],{"class":294},[288,21017,15742],{"class":2135},[288,21019,10757],{"class":294},[288,21021,19],{"class":5389},[288,21023,305],{"class":298},[288,21025,21026],{"class":290,"line":1870},[288,21027,2202],{"class":298},[288,21029,21030,21032,21034,21037,21039],{"class":290,"line":1899},[288,21031,3623],{"class":298},[288,21033,1341],{"class":294},[288,21035,21036],{"class":403},"\"拷贝构造函数\"",[288,21038,1341],{"class":294},[288,21040,1364],{"class":298},[288,21042,21043],{"class":290,"line":1904},[288,21044,21045],{"class":357},"        \u002F\u002F编译器默认的写如下注释部分\n",[288,21047,21048],{"class":290,"line":1921},[288,21049,21050],{"class":357},"        \u002F\u002Fm_Age=p.m_Age;\n",[288,21052,21053],{"class":290,"line":1926},[288,21054,21055],{"class":357},"        \u002F\u002Fm_Height=p.m_Height;\n",[288,21057,21058,21060,21062],{"class":290,"line":1931},[288,21059,20960],{"class":298},[288,21061,344],{"class":294},[288,21063,21064],{"class":298},"p.m_Age;\n",[288,21066,21067],{"class":290,"line":1936},[288,21068,21069],{"class":357},"        \u002F\u002F深拷贝操作\n",[288,21071,21072,21074,21076,21078,21080,21082],{"class":290,"line":1950},[288,21073,20970],{"class":298},[288,21075,11890],{"class":294},[288,21077,2554],{"class":294},[288,21079,299],{"class":298},[288,21081,752],{"class":294},[288,21083,21084],{"class":298},"p.m_Height);\n",[288,21086,21087],{"class":290,"line":1955},[288,21088,2359],{"class":298},[288,21090,21091],{"class":290,"line":2749},[288,21092,2572],{"emptyLinePlaceholder":217},[288,21094,21095],{"class":290,"line":2763},[288,21096,18720],{"class":357},[288,21098,21099,21101],{"class":290,"line":2771},[288,21100,18725],{"class":2135},[288,21102,2148],{"class":298},[288,21104,21105],{"class":290,"line":2776},[288,21106,2202],{"class":298},[288,21108,21109],{"class":290,"line":2782},[288,21110,21111],{"class":357},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[288,21113,21114,21116,21119,21122,21125],{"class":290,"line":2788},[288,21115,2669],{"class":294},[288,21117,21118],{"class":298},"(m_Height ",[288,21120,21121],{"class":294},"!=",[288,21123,21124],{"class":347}," NULL",[288,21126,305],{"class":298},[288,21128,21129],{"class":290,"line":2793},[288,21130,2682],{"class":298},[288,21132,21133,21136,21139],{"class":290,"line":8121},[288,21134,21135],{"class":294},"            delete",[288,21137,21138],{"class":298}," m_Height;",[288,21140,21141],{"class":357}," \u002F\u002F释放堆区内存\n",[288,21143,21144,21147,21149,21151,21153],{"class":290,"line":8145},[288,21145,21146],{"class":298},"            m_Height",[288,21148,344],{"class":294},[288,21150,2564],{"class":347},[288,21152,354],{"class":298},[288,21154,21155],{"class":357}," \u002F\u002F防止野指针\n",[288,21157,21158],{"class":290,"line":8150},[288,21159,2701],{"class":298},[288,21161,21162,21164,21166],{"class":290,"line":8156},[288,21163,3623],{"class":298},[288,21165,1341],{"class":294},[288,21167,21168],{"class":403},"\"Person的析构函数调用\"\n",[288,21170,21171],{"class":290,"line":8183},[288,21172,2359],{"class":298},[288,21174,21175,21177],{"class":290,"line":8188},[288,21176,2157],{"class":294},[288,21178,15839],{"class":298},[288,21180,21181,21183,21185,21188],{"class":290,"line":8194},[288,21182,2157],{"class":294},[288,21184,6691],{"class":294},[288,21186,21187],{"class":298},"m_Height;",[288,21189,21190],{"class":357}," \u002F\u002F定义一个指针，指向身高\n",[288,21192,21193],{"class":290,"line":8206},[288,21194,4167],{"class":298},[288,21196,21197,21199,21201],{"class":290,"line":8218},[288,21198,5537],{"class":294},[288,21200,5761],{"class":2135},[288,21202,2148],{"class":298},[288,21204,21205],{"class":290,"line":8230},[288,21206,1718],{"class":298},[288,21208,21209,21211,21213,21215,21217,21219,21222],{"class":290,"line":9889},[288,21210,19604],{"class":298},[288,21212,7303],{"class":2135},[288,21214,299],{"class":298},[288,21216,947],{"class":347},[288,21218,675],{"class":298},[288,21220,21221],{"class":347},"160",[288,21223,2891],{"class":298},[288,21225,21226,21228,21230,21233,21235,21238,21240,21243,21245,21248,21250,21252],{"class":290,"line":9914},[288,21227,1723],{"class":298},[288,21229,1341],{"class":294},[288,21231,21232],{"class":403},"\"p1的年龄为:\"",[288,21234,1341],{"class":294},[288,21236,21237],{"class":298},"p1.m_Age",[288,21239,1341],{"class":294},[288,21241,21242],{"class":403},"\"身高为：\"",[288,21244,6592],{"class":294},[288,21246,21247],{"class":298},"p1.m_Height",[288,21249,1341],{"class":294},[288,21251,1411],{"class":298},[288,21253,21254],{"class":357},"  \u002F\u002F18\n",[288,21256,21257,21259,21261],{"class":290,"line":9937},[288,21258,19604],{"class":298},[288,21260,7206],{"class":2135},[288,21262,17688],{"class":298},[288,21264,21265,21267,21269,21272,21274,21276,21278,21280,21282,21285,21287,21289],{"class":290,"line":9961},[288,21266,1723],{"class":298},[288,21268,1341],{"class":294},[288,21270,21271],{"class":403},"\"p2的年龄为：\"",[288,21273,1341],{"class":294},[288,21275,19634],{"class":298},[288,21277,1341],{"class":294},[288,21279,21242],{"class":403},[288,21281,6592],{"class":294},[288,21283,21284],{"class":298},"p2.m_Height",[288,21286,1341],{"class":294},[288,21288,1411],{"class":298},[288,21290,21254],{"class":357},[288,21292,21293],{"class":290,"line":9966},[288,21294,13383],{"class":298},[288,21296,21297],{"class":290,"line":9971},[288,21298,1737],{"class":298},[288,21300,21301,21303,21305],{"class":290,"line":9976},[288,21302,302],{"class":294},[288,21304,2145],{"class":2135},[288,21306,2148],{"class":298},[288,21308,21309],{"class":290,"line":9985},[288,21310,1718],{"class":298},[288,21312,21313,21315],{"class":290,"line":9990},[288,21314,5806],{"class":2135},[288,21316,5809],{"class":298},[288,21318,21319],{"class":290,"line":9996},[288,21320,1737],{"class":298},[19,21322,21323],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21325,21326],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21328,21329],{},[200,21330],{"alt":205,"src":21331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21333,21334],{},"浅拷贝问题要使用深拷贝来解决",[19,21336,21337],{},[200,21338],{"alt":205,"src":21339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21341,21342],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[260,21344,21346],{"id":21345},"_826初始化列表","8.2.6初始化列表",[19,21348,21349],{},"作用：初始化属性",[19,21351,5354],{},[280,21353,21356],{"className":21354,"code":21355,"language":5360},[5358],"构造函数():属性1(值1),属性2(值2).....{}\n",[25,21357,21355],{"__ignoreMap":205},[19,21359,21360],{},"例子",[280,21362,21364],{"className":282,"code":21363,"language":284,"meta":205,"style":205},"#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",[25,21365,21366,21372,21382,21388,21392,21397,21401,21406,21411,21416,21421,21426,21431,21435,21440,21445,21488,21497,21515,21533,21551,21555,21559,21566,21573,21580,21584,21588,21596,21600,21604,21624,21633,21637,21641,21651,21655,21663],{"__ignoreMap":205},[288,21367,21368,21370],{"class":290,"line":291},[288,21369,2121],{"class":294},[288,21371,2124],{"class":403},[288,21373,21374,21376,21378,21380],{"class":290,"line":206},[288,21375,2129],{"class":294},[288,21377,2132],{"class":294},[288,21379,2136],{"class":2135},[288,21381,1463],{"class":298},[288,21383,21384,21386],{"class":290,"line":1352},[288,21385,14867],{"class":294},[288,21387,15344],{"class":2135},[288,21389,21390],{"class":290,"line":1367},[288,21391,1718],{"class":298},[288,21393,21394],{"class":290,"line":1373},[288,21395,21396],{"class":294},"    public:\n",[288,21398,21399],{"class":290,"line":1387},[288,21400,2572],{"emptyLinePlaceholder":217},[288,21402,21403],{"class":290,"line":1393},[288,21404,21405],{"class":357},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[288,21407,21408],{"class":290,"line":1484},[288,21409,21410],{"class":357},"    \u002F\u002FPerson(int a, int b, int c) {\n",[288,21412,21413],{"class":290,"line":1490},[288,21414,21415],{"class":357},"    \u002F\u002F  m_A = a;\n",[288,21417,21418],{"class":290,"line":1502},[288,21419,21420],{"class":357},"    \u002F\u002F  m_B = b;\n",[288,21422,21423],{"class":290,"line":1784},[288,21424,21425],{"class":357},"    \u002F\u002F  m_C = c;\n",[288,21427,21428],{"class":290,"line":1789},[288,21429,21430],{"class":357},"    \u002F\u002F}\n",[288,21432,21433],{"class":290,"line":1795},[288,21434,2572],{"emptyLinePlaceholder":217},[288,21436,21437],{"class":290,"line":1800},[288,21438,21439],{"class":357},"    \u002F\u002F初始化列表方式初始化\n",[288,21441,21442],{"class":290,"line":1814},[288,21443,21444],{"class":357},"    \u002F\u002F使用有参构造函数\n",[288,21446,21447,21449,21451,21453,21455,21457,21459,21461,21463,21465,21467,21470,21473,21476,21479,21482,21485],{"class":290,"line":1819},[288,21448,18692],{"class":2135},[288,21450,299],{"class":298},[288,21452,302],{"class":294},[288,21454,1571],{"class":5389},[288,21456,12608],{"class":298},[288,21458,302],{"class":294},[288,21460,3005],{"class":5389},[288,21462,12608],{"class":298},[288,21464,302],{"class":294},[288,21466,3021],{"class":5389},[288,21468,21469],{"class":298},") :",[288,21471,21472],{"class":2135},"m_A",[288,21474,21475],{"class":298},"(a), ",[288,21477,21478],{"class":2135},"m_B",[288,21480,21481],{"class":298},"(b), ",[288,21483,21484],{"class":2135},"m_C",[288,21486,21487],{"class":298},"(c) {}\n",[288,21489,21490,21492,21495],{"class":290,"line":1825},[288,21491,15082],{"class":294},[288,21493,21494],{"class":2135}," PrintPerson",[288,21496,11026],{"class":298},[288,21498,21499,21501,21503,21506,21508,21511,21513],{"class":290,"line":1846},[288,21500,9842],{"class":298},[288,21502,1341],{"class":294},[288,21504,21505],{"class":403}," \"mA:\"",[288,21507,1617],{"class":294},[288,21509,21510],{"class":298}," m_A ",[288,21512,1341],{"class":294},[288,21514,9013],{"class":298},[288,21516,21517,21519,21521,21524,21526,21529,21531],{"class":290,"line":1851},[288,21518,9842],{"class":298},[288,21520,1341],{"class":294},[288,21522,21523],{"class":403}," \"mB:\"",[288,21525,1617],{"class":294},[288,21527,21528],{"class":298}," m_B ",[288,21530,1341],{"class":294},[288,21532,9013],{"class":298},[288,21534,21535,21537,21539,21542,21544,21547,21549],{"class":290,"line":1865},[288,21536,9842],{"class":298},[288,21538,1341],{"class":294},[288,21540,21541],{"class":403}," \"mC:\"",[288,21543,1617],{"class":294},[288,21545,21546],{"class":298}," m_C ",[288,21548,1341],{"class":294},[288,21550,9013],{"class":298},[288,21552,21553],{"class":290,"line":1870},[288,21554,2359],{"class":298},[288,21556,21557],{"class":290,"line":1899},[288,21558,15395],{"class":294},[288,21560,21561,21563],{"class":290,"line":1904},[288,21562,2157],{"class":294},[288,21564,21565],{"class":298}," m_A;\n",[288,21567,21568,21570],{"class":290,"line":1921},[288,21569,2157],{"class":294},[288,21571,21572],{"class":298}," m_B;\n",[288,21574,21575,21577],{"class":290,"line":1926},[288,21576,2157],{"class":294},[288,21578,21579],{"class":298}," m_C;\n",[288,21581,21582],{"class":290,"line":1931},[288,21583,4167],{"class":298},[288,21585,21586],{"class":290,"line":1936},[288,21587,2572],{"emptyLinePlaceholder":217},[288,21589,21590,21592,21594],{"class":290,"line":1950},[288,21591,302],{"class":294},[288,21593,2145],{"class":2135},[288,21595,6151],{"class":298},[288,21597,21598],{"class":290,"line":1955},[288,21599,1718],{"class":298},[288,21601,21602],{"class":290,"line":2749},[288,21603,2572],{"emptyLinePlaceholder":217},[288,21605,21606,21608,21610,21612,21614,21616,21618,21620,21622],{"class":290,"line":2763},[288,21607,19604],{"class":298},[288,21609,19],{"class":2135},[288,21611,299],{"class":298},[288,21613,516],{"class":347},[288,21615,12608],{"class":298},[288,21617,376],{"class":347},[288,21619,12608],{"class":298},[288,21621,370],{"class":347},[288,21623,2891],{"class":298},[288,21625,21626,21628,21631],{"class":290,"line":2771},[288,21627,16039],{"class":298},[288,21629,21630],{"class":2135},"PrintPerson",[288,21632,5809],{"class":298},[288,21634,21635],{"class":290,"line":2776},[288,21636,2572],{"emptyLinePlaceholder":217},[288,21638,21639],{"class":290,"line":2782},[288,21640,2572],{"emptyLinePlaceholder":217},[288,21642,21643,21645,21647,21649],{"class":290,"line":2788},[288,21644,2475],{"class":2135},[288,21646,299],{"class":298},[288,21648,2480],{"class":403},[288,21650,2891],{"class":298},[288,21652,21653],{"class":290,"line":2793},[288,21654,2572],{"emptyLinePlaceholder":217},[288,21656,21657,21659,21661],{"class":290,"line":8121},[288,21658,4262],{"class":294},[288,21660,4265],{"class":347},[288,21662,1463],{"class":298},[288,21664,21665],{"class":290,"line":8145},[288,21666,1737],{"class":298},[19,21668,21669,21670,21673,21674],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[448,21671,21672],{},"参数名就是定义的对象属性","，",[448,21675,21676],{},"属性后面的值为有参构造函数的形参",[280,21678,21680],{"className":282,"code":21679,"language":284,"meta":205,"style":205},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[25,21681,21682],{"__ignoreMap":205},[288,21683,21684,21686,21688,21690,21693,21695,21698,21700,21703,21705,21708,21710,21713,21715],{"class":290,"line":291},[288,21685,19219],{"class":2135},[288,21687,299],{"class":298},[288,21689,302],{"class":294},[288,21691,21692],{"class":298}," a.",[288,21694,302],{"class":294},[288,21696,21697],{"class":298}," b,",[288,21699,302],{"class":294},[288,21701,21702],{"class":298}," b):",[288,21704,21472],{"class":2135},[288,21706,21707],{"class":298},"(a),",[288,21709,21478],{"class":2135},[288,21711,21712],{"class":298},"(c),",[288,21714,21484],{"class":2135},[288,21716,21717],{"class":298},"(b) {}\n",[260,21719,21721],{"id":21720},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21723,21724],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21726,14806],{},[280,21728,21730],{"className":282,"code":21729,"language":284,"meta":205,"style":205},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[25,21731,21732,21737,21742,21746,21751,21755],{"__ignoreMap":205},[288,21733,21734],{"class":290,"line":291},[288,21735,21736],{"class":298},"A{};\n",[288,21738,21739],{"class":290,"line":206},[288,21740,21741],{"class":298},"B\n",[288,21743,21744],{"class":290,"line":1352},[288,21745,1718],{"class":298},[288,21747,21748],{"class":290,"line":1367},[288,21749,21750],{"class":298},"    A a;\n",[288,21752,21753],{"class":290,"line":1373},[288,21754,1737],{"class":298},[288,21756,21757],{"class":290,"line":1387},[288,21758,21759],{"class":357},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21761,21762],{},"案例",[280,21764,21766],{"className":282,"code":21765,"language":284,"meta":205,"style":205},"\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",[25,21767,21768,21773,21780,21784,21789,21794,21808,21812,21822,21833,21837,21844,21848,21861,21865,21870,21875,21879,21885,21889,21893,21897,21928,21932,21943,21947,21953,21957,21970,21974,21978,21982,21987,21992,21996,22004,22008,22025,22044,22048,22056,22060,22066],{"__ignoreMap":205},[288,21769,21770],{"class":290,"line":291},[288,21771,21772],{"class":357},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[288,21774,21775,21777],{"class":290,"line":206},[288,21776,14867],{"class":294},[288,21778,21779],{"class":2135}," Phone\n",[288,21781,21782],{"class":290,"line":1352},[288,21783,1718],{"class":298},[288,21785,21786],{"class":290,"line":1367},[288,21787,21788],{"class":298},"public：\n",[288,21790,21791],{"class":290,"line":1373},[288,21792,21793],{"class":357},"    \u002F\u002F 赋值(构造函数)\n",[288,21795,21796,21799,21801,21803,21806],{"class":290,"line":1387},[288,21797,21798],{"class":2135},"    Phone",[288,21800,299],{"class":298},[288,21802,15090],{"class":2135},[288,21804,21805],{"class":5389}," pName",[288,21807,305],{"class":298},[288,21809,21810],{"class":290,"line":1393},[288,21811,2202],{"class":298},[288,21813,21814,21817,21819],{"class":290,"line":1484},[288,21815,21816],{"class":298},"        m_pName",[288,21818,344],{"class":294},[288,21820,21821],{"class":298},"pName;\n",[288,21823,21824,21826,21828,21831],{"class":290,"line":1490},[288,21825,3623],{"class":298},[288,21827,1341],{"class":294},[288,21829,21830],{"class":403},"\"Phone的构造函数调用\"",[288,21832,1463],{"class":298},[288,21834,21835],{"class":290,"line":1502},[288,21836,2359],{"class":298},[288,21838,21839,21842],{"class":290,"line":1784},[288,21840,21841],{"class":2135},"    ~Phone",[288,21843,2148],{"class":298},[288,21845,21846],{"class":290,"line":1789},[288,21847,2202],{"class":298},[288,21849,21850,21852,21854,21857,21859],{"class":290,"line":1795},[288,21851,3623],{"class":298},[288,21853,1341],{"class":294},[288,21855,21856],{"class":403},"\"Phone析构函数调用\"",[288,21858,1341],{"class":294},[288,21860,1364],{"class":298},[288,21862,21863],{"class":290,"line":1800},[288,21864,2359],{"class":298},[288,21866,21867],{"class":290,"line":1814},[288,21868,21869],{"class":357},"    \u002F\u002F\n",[288,21871,21872],{"class":290,"line":1819},[288,21873,21874],{"class":298},"    string m_PName;\n",[288,21876,21877],{"class":290,"line":1825},[288,21878,4167],{"class":298},[288,21880,21881,21883],{"class":290,"line":1846},[288,21882,14867],{"class":294},[288,21884,15344],{"class":2135},[288,21886,21887],{"class":290,"line":1851},[288,21888,1718],{"class":298},[288,21890,21891],{"class":290,"line":1865},[288,21892,14889],{"class":294},[288,21894,21895],{"class":290,"line":1870},[288,21896,17167],{"class":357},[288,21898,21899,21901,21903,21905,21907,21909,21911,21914,21917,21919,21922,21925],{"class":290,"line":1899},[288,21900,18692],{"class":2135},[288,21902,299],{"class":298},[288,21904,15090],{"class":2135},[288,21906,15093],{"class":5389},[288,21908,675],{"class":298},[288,21910,15090],{"class":2135},[288,21912,21913],{"class":5389}," pname",[288,21915,21916],{"class":298},"):",[288,21918,15183],{"class":2135},[288,21920,21921],{"class":298},"(name),m_phone.",[288,21923,21924],{"class":2135},"m_PName",[288,21926,21927],{"class":298},"(pname) \n",[288,21929,21930],{"class":290,"line":1904},[288,21931,2202],{"class":298},[288,21933,21934,21936,21938,21941],{"class":290,"line":1921},[288,21935,3623],{"class":298},[288,21937,1341],{"class":294},[288,21939,21940],{"class":403},"\"Person的构造函数调用\"",[288,21942,1463],{"class":298},[288,21944,21945],{"class":290,"line":1926},[288,21946,2359],{"class":298},[288,21948,21949,21951],{"class":290,"line":1931},[288,21950,18725],{"class":2135},[288,21952,2148],{"class":298},[288,21954,21955],{"class":290,"line":1936},[288,21956,2202],{"class":298},[288,21958,21959,21961,21963,21966,21968],{"class":290,"line":1950},[288,21960,3623],{"class":298},[288,21962,1341],{"class":294},[288,21964,21965],{"class":403},"\"Person析构函数调用\"",[288,21967,1341],{"class":294},[288,21969,1364],{"class":298},[288,21971,21972],{"class":290,"line":1955},[288,21973,2359],{"class":298},[288,21975,21976],{"class":290,"line":2749},[288,21977,7953],{"class":357},[288,21979,21980],{"class":290,"line":2763},[288,21981,15065],{"class":298},[288,21983,21984],{"class":290,"line":2771},[288,21985,21986],{"class":357},"    \u002F\u002F手机\n",[288,21988,21989],{"class":290,"line":2776},[288,21990,21991],{"class":298},"    Phone m_Phone;\n",[288,21993,21994],{"class":290,"line":2782},[288,21995,4167],{"class":298},[288,21997,21998,22000,22002],{"class":290,"line":2788},[288,21999,5537],{"class":294},[288,22001,5761],{"class":2135},[288,22003,2148],{"class":298},[288,22005,22006],{"class":290,"line":2793},[288,22007,1718],{"class":298},[288,22009,22010,22012,22014,22016,22018,22020,22023],{"class":290,"line":8121},[288,22011,19604],{"class":298},[288,22013,19],{"class":2135},[288,22015,299],{"class":298},[288,22017,8089],{"class":403},[288,22019,675],{"class":298},[288,22021,22022],{"class":403},"\"安卓\"",[288,22024,2891],{"class":298},[288,22026,22027,22029,22031,22034,22036,22039,22041],{"class":290,"line":8145},[288,22028,1723],{"class":298},[288,22030,1341],{"class":294},[288,22032,22033],{"class":298},"p.Name",[288,22035,1341],{"class":294},[288,22037,22038],{"class":403},"\"拿着：\"",[288,22040,1341],{"class":294},[288,22042,22043],{"class":298},"p.m_phone.m_PName;\n",[288,22045,22046],{"class":290,"line":8150},[288,22047,1737],{"class":298},[288,22049,22050,22052,22054],{"class":290,"line":8156},[288,22051,302],{"class":294},[288,22053,2145],{"class":2135},[288,22055,2148],{"class":298},[288,22057,22058],{"class":290,"line":8183},[288,22059,1718],{"class":298},[288,22061,22062,22064],{"class":290,"line":8188},[288,22063,5806],{"class":2135},[288,22065,5809],{"class":298},[288,22067,22068],{"class":290,"line":8194},[288,22069,1737],{"class":298},[19,22071,9198],{},[280,22073,22075],{"className":282,"code":22074,"language":284,"meta":205,"style":205},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[25,22076,22077,22082],{"__ignoreMap":205},[288,22078,22079],{"class":290,"line":291},[288,22080,22081],{"class":357},"    \u002F\u002F不需要写这个：\n",[288,22083,22084],{"class":290,"line":206},[288,22085,22086],{"class":357},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22088,22089],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[280,22091,22093],{"className":282,"code":22092,"language":284,"meta":205,"style":205},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[25,22094,22095],{"__ignoreMap":205},[288,22096,22097,22099,22102,22104,22107,22110],{"class":290,"line":291},[288,22098,19219],{"class":2135},[288,22100,22101],{"class":298},"(string name.string pname):",[288,22103,15183],{"class":2135},[288,22105,22106],{"class":298},"(name),",[288,22108,22109],{"class":2135},"m_phone",[288,22111,22112],{"class":298},"(pname) {}\n",[19,22114,22115,22116,344,22119],{},"采用的是隐式转换法，实际为如下：\n",[25,22117,22118],{},"m_phone(pname)",[25,22120,22121],{},"Phone m_phone=pname",[19,22123,22124,22127],{},[448,22125,22126],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22129,22130],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[260,22132,22134],{"id":22133},"_828静态对象","8.2.8静态对象",[19,22136,22137],{},"静态对象在成员对象前static，称为静态对象",[19,22139,22140],{},"静态对象分为两类：",[243,22142,22143],{},[246,22144,22145],{},"静态成员变量",[1304,22147,22148,22151,22154],{},[246,22149,22150],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[246,22152,22153],{},"②在编译阶段分配内存",[246,22155,22156],{},"③类内声明，类外初始化",[243,22158,22159],{"start":206},[246,22160,22161],{},"静态成员函数",[1304,22163,22164,22167],{},[246,22165,22166],{},"①所有对象共享同一个函数",[246,22168,22169],{},"②静态成员函数只能访问静态成员变量",[22171,22172,22174],"h4",{"id":22173},"_8281静态成员变量","8.2.8.1静态成员变量",[280,22176,22178],{"className":282,"code":22177,"language":284,"meta":205,"style":205},"#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",[25,22179,22180,22186,22196,22202,22206,22210,22215,22220,22225,22233,22237,22241,22245,22253,22257,22261,22266,22279,22283,22291,22295,22301],{"__ignoreMap":205},[288,22181,22182,22184],{"class":290,"line":291},[288,22183,2121],{"class":294},[288,22185,2124],{"class":403},[288,22187,22188,22190,22192,22194],{"class":290,"line":206},[288,22189,2129],{"class":294},[288,22191,2132],{"class":294},[288,22193,2136],{"class":2135},[288,22195,1463],{"class":298},[288,22197,22198,22200],{"class":290,"line":1352},[288,22199,14867],{"class":294},[288,22201,15344],{"class":2135},[288,22203,22204],{"class":290,"line":1367},[288,22205,1718],{"class":298},[288,22207,22208],{"class":290,"line":1373},[288,22209,14889],{"class":294},[288,22211,22212],{"class":290,"line":1387},[288,22213,22214],{"class":357},"    \u002F\u002F非静态成员变量\n",[288,22216,22217],{"class":290,"line":1393},[288,22218,22219],{"class":357},"    \u002F\u002F int m_A;\n",[288,22221,22222],{"class":290,"line":1484},[288,22223,22224],{"class":357},"    \u002F\u002F定义静态成员变量\n",[288,22226,22227,22229,22231],{"class":290,"line":1490},[288,22228,11193],{"class":294},[288,22230,2554],{"class":294},[288,22232,21565],{"class":298},[288,22234,22235],{"class":290,"line":1502},[288,22236,2572],{"emptyLinePlaceholder":217},[288,22238,22239],{"class":290,"line":1784},[288,22240,2572],{"emptyLinePlaceholder":217},[288,22242,22243],{"class":290,"line":1789},[288,22244,4167],{"class":298},[288,22246,22247,22249,22251],{"class":290,"line":1795},[288,22248,5537],{"class":294},[288,22250,5761],{"class":2135},[288,22252,2148],{"class":298},[288,22254,22255],{"class":290,"line":1800},[288,22256,1718],{"class":298},[288,22258,22259],{"class":290,"line":1814},[288,22260,15486],{"class":298},[288,22262,22263],{"class":290,"line":1819},[288,22264,22265],{"class":357},"    \u002F\u002F输出类成员变量这块内存\n",[288,22267,22268,22270,22272,22275,22277],{"class":290,"line":1825},[288,22269,1723],{"class":298},[288,22271,1341],{"class":294},[288,22273,22274],{"class":298},"p.m_A",[288,22276,1341],{"class":294},[288,22278,1364],{"class":298},[288,22280,22281],{"class":290,"line":1846},[288,22282,1737],{"class":298},[288,22284,22285,22287,22289],{"class":290,"line":1851},[288,22286,302],{"class":294},[288,22288,2145],{"class":2135},[288,22290,2148],{"class":298},[288,22292,22293],{"class":290,"line":1865},[288,22294,1718],{"class":298},[288,22296,22297,22299],{"class":290,"line":1870},[288,22298,5806],{"class":2135},[288,22300,2148],{"class":298},[288,22302,22303],{"class":290,"line":1899},[288,22304,1737],{"class":298},[19,22306,22307],{},"此时输出是报错的：无法解析外部命令",[19,22309,22310],{},"解决这一问题：必须用到类内声明，类外初始化操作",[280,22312,22314],{"className":282,"code":22313,"language":284,"meta":205,"style":205},"#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",[25,22315,22316,22322,22332,22338,22342,22346,22351,22359,22363,22368,22383,22391,22395,22399,22404,22409,22421,22426,22437,22442,22447,22460,22464,22472,22476,22482],{"__ignoreMap":205},[288,22317,22318,22320],{"class":290,"line":291},[288,22319,2121],{"class":294},[288,22321,2124],{"class":403},[288,22323,22324,22326,22328,22330],{"class":290,"line":206},[288,22325,2129],{"class":294},[288,22327,2132],{"class":294},[288,22329,2136],{"class":2135},[288,22331,1463],{"class":298},[288,22333,22334,22336],{"class":290,"line":1352},[288,22335,14867],{"class":294},[288,22337,15344],{"class":2135},[288,22339,22340],{"class":290,"line":1367},[288,22341,1718],{"class":298},[288,22343,22344],{"class":290,"line":1373},[288,22345,14889],{"class":294},[288,22347,22348],{"class":290,"line":1387},[288,22349,22350],{"class":357},"    \u002F\u002F类内声明\n",[288,22352,22353,22355,22357],{"class":290,"line":1393},[288,22354,11193],{"class":294},[288,22356,2554],{"class":294},[288,22358,21565],{"class":298},[288,22360,22361],{"class":290,"line":1484},[288,22362,4167],{"class":298},[288,22364,22365],{"class":290,"line":1490},[288,22366,22367],{"class":357},"\u002F\u002F类外初始化\n",[288,22369,22370,22372,22374,22377,22379,22381],{"class":290,"line":1502},[288,22371,302],{"class":294},[288,22373,15742],{"class":2135},[288,22375,22376],{"class":298},"::m_A",[288,22378,344],{"class":294},[288,22380,743],{"class":347},[288,22382,1463],{"class":298},[288,22384,22385,22387,22389],{"class":290,"line":1784},[288,22386,5537],{"class":294},[288,22388,5761],{"class":2135},[288,22390,2148],{"class":298},[288,22392,22393],{"class":290,"line":1789},[288,22394,1718],{"class":298},[288,22396,22397],{"class":290,"line":1795},[288,22398,15486],{"class":298},[288,22400,22401],{"class":290,"line":1800},[288,22402,22403],{"class":357},"    \u002F\u002F访问变量的原内存空间\n",[288,22405,22406],{"class":290,"line":1814},[288,22407,22408],{"class":357},"    \u002F\u002F100\n",[288,22410,22411,22413,22415,22417,22419],{"class":290,"line":1819},[288,22412,1723],{"class":298},[288,22414,1341],{"class":294},[288,22416,22274],{"class":298},[288,22418,1341],{"class":294},[288,22420,1364],{"class":298},[288,22422,22423],{"class":290,"line":1825},[288,22424,22425],{"class":298},"    Person p2;\n",[288,22427,22428,22431,22433,22435],{"class":290,"line":1846},[288,22429,22430],{"class":298},"    p2.m_A",[288,22432,344],{"class":294},[288,22434,1894],{"class":347},[288,22436,1463],{"class":298},[288,22438,22439],{"class":290,"line":1851},[288,22440,22441],{"class":357},"    \u002F\u002F继续访问这片空间\n",[288,22443,22444],{"class":290,"line":1865},[288,22445,22446],{"class":357},"    \u002F\u002F200\n",[288,22448,22449,22451,22453,22456,22458],{"class":290,"line":1870},[288,22450,1723],{"class":298},[288,22452,1341],{"class":294},[288,22454,22455],{"class":298},"p2.m_A",[288,22457,1341],{"class":294},[288,22459,1364],{"class":298},[288,22461,22462],{"class":290,"line":1899},[288,22463,1737],{"class":298},[288,22465,22466,22468,22470],{"class":290,"line":1904},[288,22467,302],{"class":294},[288,22469,2145],{"class":2135},[288,22471,2148],{"class":298},[288,22473,22474],{"class":290,"line":1921},[288,22475,1718],{"class":298},[288,22477,22478,22480],{"class":290,"line":1926},[288,22479,5806],{"class":2135},[288,22481,5809],{"class":298},[288,22483,22484],{"class":290,"line":1931},[288,22485,1737],{"class":298},[19,22487,22488],{},[448,22489,22490],{},"静态变量的访问",[280,22492,22494],{"className":282,"code":22493,"language":284,"meta":205,"style":205},"#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",[25,22495,22496,22502,22512,22518,22522,22526,22530,22538,22542,22547,22555,22559,22563,22577,22592,22600,22604,22609,22614,22619,22624,22636,22641,22646,22660,22677,22681,22689,22693,22699],{"__ignoreMap":205},[288,22497,22498,22500],{"class":290,"line":291},[288,22499,2121],{"class":294},[288,22501,2124],{"class":403},[288,22503,22504,22506,22508,22510],{"class":290,"line":206},[288,22505,2129],{"class":294},[288,22507,2132],{"class":294},[288,22509,2136],{"class":2135},[288,22511,1463],{"class":298},[288,22513,22514,22516],{"class":290,"line":1352},[288,22515,14867],{"class":294},[288,22517,15344],{"class":2135},[288,22519,22520],{"class":290,"line":1367},[288,22521,1718],{"class":298},[288,22523,22524],{"class":290,"line":1373},[288,22525,14889],{"class":294},[288,22527,22528],{"class":290,"line":1387},[288,22529,22350],{"class":357},[288,22531,22532,22534,22536],{"class":290,"line":1393},[288,22533,11193],{"class":294},[288,22535,2554],{"class":294},[288,22537,21565],{"class":298},[288,22539,22540],{"class":290,"line":1484},[288,22541,15395],{"class":294},[288,22543,22544],{"class":290,"line":1490},[288,22545,22546],{"class":357},"    \u002F\u002F静态成员变量也是有访问权限的\n",[288,22548,22549,22551,22553],{"class":290,"line":1502},[288,22550,11193],{"class":294},[288,22552,2554],{"class":294},[288,22554,21572],{"class":298},[288,22556,22557],{"class":290,"line":1784},[288,22558,4167],{"class":298},[288,22560,22561],{"class":290,"line":1789},[288,22562,22367],{"class":357},[288,22564,22565,22567,22569,22571,22573,22575],{"class":290,"line":1795},[288,22566,302],{"class":294},[288,22568,15742],{"class":2135},[288,22570,22376],{"class":298},[288,22572,344],{"class":294},[288,22574,743],{"class":347},[288,22576,1463],{"class":298},[288,22578,22579,22581,22583,22586,22588,22590],{"class":290,"line":1800},[288,22580,302],{"class":294},[288,22582,15742],{"class":2135},[288,22584,22585],{"class":298},"::m_B",[288,22587,344],{"class":294},[288,22589,997],{"class":347},[288,22591,1463],{"class":298},[288,22593,22594,22596,22598],{"class":290,"line":1814},[288,22595,5537],{"class":294},[288,22597,5830],{"class":2135},[288,22599,2148],{"class":298},[288,22601,22602],{"class":290,"line":1819},[288,22603,1718],{"class":298},[288,22605,22606],{"class":290,"line":1825},[288,22607,22608],{"class":357},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[288,22610,22611],{"class":290,"line":1846},[288,22612,22613],{"class":357},"    \u002F\u002F静态成员变量有两种访问方式：\n",[288,22615,22616],{"class":290,"line":1851},[288,22617,22618],{"class":357},"    \u002F\u002F1.通过对象进行访问\n",[288,22620,22621],{"class":290,"line":1865},[288,22622,22623],{"class":298},"    Person p;  \n",[288,22625,22626,22628,22630,22632,22634],{"class":290,"line":1870},[288,22627,1723],{"class":298},[288,22629,1341],{"class":294},[288,22631,22274],{"class":298},[288,22633,1341],{"class":294},[288,22635,1364],{"class":298},[288,22637,22638],{"class":290,"line":1899},[288,22639,22640],{"class":357},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[288,22642,22643],{"class":290,"line":1904},[288,22644,22645],{"class":357},"    \u002F\u002F2.通过类名进行访问\n",[288,22647,22648,22650,22652,22654,22656,22658],{"class":290,"line":1921},[288,22649,1723],{"class":298},[288,22651,1341],{"class":294},[288,22653,19219],{"class":2135},[288,22655,22376],{"class":298},[288,22657,1341],{"class":294},[288,22659,1364],{"class":298},[288,22661,22662,22664,22666,22668,22670,22672,22674],{"class":290,"line":1926},[288,22663,1723],{"class":298},[288,22665,1341],{"class":294},[288,22667,19219],{"class":2135},[288,22669,22585],{"class":298},[288,22671,1341],{"class":294},[288,22673,1411],{"class":298},[288,22675,22676],{"class":357}," \u002F\u002F没有访问权限，报错\n",[288,22678,22679],{"class":290,"line":1931},[288,22680,1737],{"class":298},[288,22682,22683,22685,22687],{"class":290,"line":1936},[288,22684,302],{"class":294},[288,22686,2145],{"class":2135},[288,22688,2148],{"class":298},[288,22690,22691],{"class":290,"line":1950},[288,22692,1718],{"class":298},[288,22694,22695,22697],{"class":290,"line":1955},[288,22696,5875],{"class":2135},[288,22698,5809],{"class":298},[288,22700,22701],{"class":290,"line":2749},[288,22702,1737],{"class":298},[22171,22704,22706],{"id":22705},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22708,22709],{},"1.静态成员函数定义与访问",[280,22711,22713],{"className":282,"code":22712,"language":284,"meta":205,"style":205},"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",[25,22714,22715,22721,22725,22729,22734,22745,22749,22763,22767,22771,22779,22783,22788,22793,22797,22805,22810,22820],{"__ignoreMap":205},[288,22716,22717,22719],{"class":290,"line":291},[288,22718,14867],{"class":294},[288,22720,15344],{"class":2135},[288,22722,22723],{"class":290,"line":206},[288,22724,1718],{"class":298},[288,22726,22727],{"class":290,"line":1352},[288,22728,14889],{"class":294},[288,22730,22731],{"class":290,"line":1367},[288,22732,22733],{"class":357},"    \u002F\u002F在公共权限下定义静态成员函数\n",[288,22735,22736,22738,22741,22743],{"class":290,"line":1373},[288,22737,11193],{"class":294},[288,22739,22740],{"class":294}," void",[288,22742,11558],{"class":2135},[288,22744,2148],{"class":298},[288,22746,22747],{"class":290,"line":1387},[288,22748,2202],{"class":298},[288,22750,22751,22754,22756,22759,22761],{"class":290,"line":1393},[288,22752,22753],{"class":298},"        coout",[288,22755,1341],{"class":294},[288,22757,22758],{"class":403},"\"静态成员函数的调用\"",[288,22760,1341],{"class":294},[288,22762,1364],{"class":298},[288,22764,22765],{"class":290,"line":1484},[288,22766,2359],{"class":298},[288,22768,22769],{"class":290,"line":1490},[288,22770,4167],{"class":298},[288,22772,22773,22775,22777],{"class":290,"line":1502},[288,22774,5537],{"class":294},[288,22776,5761],{"class":2135},[288,22778,2148],{"class":298},[288,22780,22781],{"class":290,"line":1784},[288,22782,1718],{"class":298},[288,22784,22785],{"class":290,"line":1789},[288,22786,22787],{"class":357},"    \u002F\u002F静态成员函数的调用方式:\n",[288,22789,22790],{"class":290,"line":1795},[288,22791,22792],{"class":357},"    \u002F\u002F1.通过对象访问\n",[288,22794,22795],{"class":290,"line":1800},[288,22796,15486],{"class":298},[288,22798,22799,22801,22803],{"class":290,"line":1814},[288,22800,16039],{"class":298},[288,22802,11724],{"class":2135},[288,22804,5809],{"class":298},[288,22806,22807],{"class":290,"line":1819},[288,22808,22809],{"class":357},"    \u002F\u002F2.通过类名访问\n",[288,22811,22812,22814,22816,22818],{"class":290,"line":1825},[288,22813,18692],{"class":2135},[288,22815,17905],{"class":298},[288,22817,11724],{"class":2135},[288,22819,5809],{"class":298},[288,22821,22822],{"class":290,"line":1846},[288,22823,1737],{"class":298},[243,22825,22826],{"start":206},[246,22827,22828],{},"静态成员函数只能访问静态成员变量",[280,22830,22832],{"className":282,"code":22831,"language":284,"meta":205,"style":205},"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",[25,22833,22834,22840,22844,22848,22852,22862,22866,22880,22885,22897,22901,22912,22922,22926,22930,22934,22944,22948,22961,22965,22969,22973,22977,22991,22999,23003,23007,23011,23015,23023,23027,23037,23042,23046,23054,23058,23064],{"__ignoreMap":205},[288,22835,22836,22838],{"class":290,"line":291},[288,22837,14867],{"class":294},[288,22839,15344],{"class":2135},[288,22841,22842],{"class":290,"line":206},[288,22843,1718],{"class":298},[288,22845,22846],{"class":290,"line":1352},[288,22847,14889],{"class":294},[288,22849,22850],{"class":290,"line":1367},[288,22851,22733],{"class":357},[288,22853,22854,22856,22858,22860],{"class":290,"line":1373},[288,22855,11193],{"class":294},[288,22857,22740],{"class":294},[288,22859,11558],{"class":2135},[288,22861,2148],{"class":298},[288,22863,22864],{"class":290,"line":1387},[288,22865,2202],{"class":298},[288,22867,22868,22871,22873,22875,22877],{"class":290,"line":1393},[288,22869,22870],{"class":298},"        m_A",[288,22872,344],{"class":294},[288,22874,608],{"class":347},[288,22876,354],{"class":298},[288,22878,22879],{"class":357}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[288,22881,22882],{"class":290,"line":1484},[288,22883,22884],{"class":357},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[288,22886,22887,22889,22891,22893,22895],{"class":290,"line":1490},[288,22888,22753],{"class":298},[288,22890,1341],{"class":294},[288,22892,22758],{"class":403},[288,22894,1341],{"class":294},[288,22896,1364],{"class":298},[288,22898,22899],{"class":290,"line":1502},[288,22900,2359],{"class":298},[288,22902,22903,22905,22907,22909],{"class":290,"line":1784},[288,22904,11193],{"class":294},[288,22906,2554],{"class":294},[288,22908,15621],{"class":298},[288,22910,22911],{"class":357}," \u002F\u002F静态成员变量\n",[288,22913,22914,22916,22919],{"class":290,"line":1789},[288,22915,2157],{"class":294},[288,22917,22918],{"class":298}," m_B;",[288,22920,22921],{"class":357}," \u002F\u002F非静态成员变量\n",[288,22923,22924],{"class":290,"line":1795},[288,22925,2572],{"emptyLinePlaceholder":217},[288,22927,22928],{"class":290,"line":1800},[288,22929,15395],{"class":294},[288,22931,22932],{"class":290,"line":1814},[288,22933,22546],{"class":357},[288,22935,22936,22938,22940,22942],{"class":290,"line":1819},[288,22937,11193],{"class":294},[288,22939,22740],{"class":294},[288,22941,13791],{"class":2135},[288,22943,2148],{"class":298},[288,22945,22946],{"class":290,"line":1825},[288,22947,2202],{"class":298},[288,22949,22950,22952,22954,22957,22959],{"class":290,"line":1846},[288,22951,3623],{"class":298},[288,22953,1341],{"class":294},[288,22955,22956],{"class":403},"\"这是私有权限下的静态函数调用\"",[288,22958,1341],{"class":294},[288,22960,1364],{"class":298},[288,22962,22963],{"class":290,"line":1851},[288,22964,2359],{"class":298},[288,22966,22967],{"class":290,"line":1865},[288,22968,2572],{"emptyLinePlaceholder":217},[288,22970,22971],{"class":290,"line":1870},[288,22972,2572],{"emptyLinePlaceholder":217},[288,22974,22975],{"class":290,"line":1899},[288,22976,4167],{"class":298},[288,22978,22979,22981,22983,22985,22987,22989],{"class":290,"line":1904},[288,22980,302],{"class":294},[288,22982,15742],{"class":2135},[288,22984,22376],{"class":298},[288,22986,344],{"class":294},[288,22988,490],{"class":347},[288,22990,1463],{"class":298},[288,22992,22993,22995,22997],{"class":290,"line":1921},[288,22994,5537],{"class":294},[288,22996,5761],{"class":2135},[288,22998,2148],{"class":298},[288,23000,23001],{"class":290,"line":1926},[288,23002,1718],{"class":298},[288,23004,23005],{"class":290,"line":1931},[288,23006,22787],{"class":357},[288,23008,23009],{"class":290,"line":1936},[288,23010,22792],{"class":357},[288,23012,23013],{"class":290,"line":1950},[288,23014,15486],{"class":298},[288,23016,23017,23019,23021],{"class":290,"line":1955},[288,23018,16039],{"class":298},[288,23020,11724],{"class":2135},[288,23022,5809],{"class":298},[288,23024,23025],{"class":290,"line":2749},[288,23026,22809],{"class":357},[288,23028,23029,23031,23033,23035],{"class":290,"line":2763},[288,23030,18692],{"class":2135},[288,23032,17905],{"class":298},[288,23034,11724],{"class":2135},[288,23036,5809],{"class":298},[288,23038,23039],{"class":290,"line":2771},[288,23040,23041],{"class":357},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[288,23043,23044],{"class":290,"line":2776},[288,23045,1737],{"class":298},[288,23047,23048,23050,23052],{"class":290,"line":2782},[288,23049,302],{"class":294},[288,23051,2145],{"class":2135},[288,23053,2148],{"class":298},[288,23055,23056],{"class":290,"line":2788},[288,23057,1718],{"class":298},[288,23059,23060,23062],{"class":290,"line":2793},[288,23061,5806],{"class":2135},[288,23063,5809],{"class":298},[288,23065,23066],{"class":290,"line":8121},[288,23067,1737],{"class":298},[260,23069,23071],{"id":23070},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22171,23073,23075],{"id":23074},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23077,23078],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23080,23081],{},"只有非静态成员变量才属于类的对象上",[23083,23084,23086],"h5",{"id":23085},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[280,23088,23090],{"className":282,"code":23089,"language":284,"meta":205,"style":205},"#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",[25,23091,23092,23099,23109,23115,23119,23123,23127,23135,23139,23143,23166,23170,23178,23182,23188],{"__ignoreMap":205},[288,23093,23094,23096],{"class":290,"line":291},[288,23095,2121],{"class":294},[288,23097,23098],{"class":403},"\u003Ciostraem>\n",[288,23100,23101,23103,23105,23107],{"class":290,"line":206},[288,23102,2129],{"class":294},[288,23104,2132],{"class":294},[288,23106,2136],{"class":2135},[288,23108,1463],{"class":298},[288,23110,23111,23113],{"class":290,"line":1352},[288,23112,14867],{"class":294},[288,23114,15344],{"class":2135},[288,23116,23117],{"class":290,"line":1367},[288,23118,1718],{"class":298},[288,23120,23121],{"class":290,"line":1373},[288,23122,2572],{"emptyLinePlaceholder":217},[288,23124,23125],{"class":290,"line":1387},[288,23126,4167],{"class":298},[288,23128,23129,23131,23133],{"class":290,"line":1393},[288,23130,5537],{"class":294},[288,23132,5761],{"class":2135},[288,23134,2148],{"class":298},[288,23136,23137],{"class":290,"line":1484},[288,23138,1718],{"class":298},[288,23140,23141],{"class":290,"line":1490},[288,23142,15486],{"class":298},[288,23144,23145,23147,23149,23152,23154,23157,23159,23161,23163],{"class":290,"line":1502},[288,23146,1723],{"class":298},[288,23148,1341],{"class":294},[288,23150,23151],{"class":403},"\"size of p=\"",[288,23153,1341],{"class":294},[288,23155,23156],{"class":2135},"sizeoif",[288,23158,6712],{"class":298},[288,23160,1341],{"class":294},[288,23162,1411],{"class":298},[288,23164,23165],{"class":357}," \u002F\u002F查看这个空类的占用的内存空间\n",[288,23167,23168],{"class":290,"line":1784},[288,23169,1737],{"class":298},[288,23171,23172,23174,23176],{"class":290,"line":1789},[288,23173,302],{"class":294},[288,23175,2145],{"class":2135},[288,23177,2148],{"class":298},[288,23179,23180],{"class":290,"line":1795},[288,23181,1718],{"class":298},[288,23183,23184,23186],{"class":290,"line":1800},[288,23185,5806],{"class":2135},[288,23187,5809],{"class":298},[288,23189,23190],{"class":290,"line":1814},[288,23191,1737],{"class":298},[19,23193,23194],{},"输出结果为：size of p=1",[19,23196,23197],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23199,23200],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23083,23202,23204],{"id":23203},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[280,23206,23208],{"className":282,"code":23207,"language":284,"meta":205,"style":205},"#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",[25,23209,23210,23216,23226,23234,23238,23247,23251,23259,23263,23267,23286,23290,23294,23302,23306,23312],{"__ignoreMap":205},[288,23211,23212,23214],{"class":290,"line":291},[288,23213,2121],{"class":294},[288,23215,2124],{"class":403},[288,23217,23218,23220,23222,23224],{"class":290,"line":206},[288,23219,2129],{"class":294},[288,23221,2132],{"class":294},[288,23223,2136],{"class":2135},[288,23225,1463],{"class":298},[288,23227,23228,23230,23232],{"class":290,"line":1352},[288,23229,14867],{"class":294},[288,23231,15742],{"class":2135},[288,23233,2846],{"class":298},[288,23235,23236],{"class":290,"line":1367},[288,23237,1718],{"class":298},[288,23239,23240,23242,23244],{"class":290,"line":1373},[288,23241,2157],{"class":294},[288,23243,15621],{"class":298},[288,23245,23246],{"class":357},"\u002F\u002F非静态成员变量\n",[288,23248,23249],{"class":290,"line":1387},[288,23250,4167],{"class":298},[288,23252,23253,23255,23257],{"class":290,"line":1393},[288,23254,5537],{"class":294},[288,23256,5761],{"class":2135},[288,23258,2148],{"class":298},[288,23260,23261],{"class":290,"line":1484},[288,23262,1718],{"class":298},[288,23264,23265],{"class":290,"line":1490},[288,23266,15486],{"class":298},[288,23268,23269,23271,23273,23275,23277,23279,23281,23283],{"class":290,"line":1502},[288,23270,1723],{"class":298},[288,23272,1341],{"class":294},[288,23274,23151],{"class":403},[288,23276,1545],{"class":294},[288,23278,6712],{"class":298},[288,23280,1341],{"class":294},[288,23282,1411],{"class":298},[288,23284,23285],{"class":357}," \u002F\u002F查看不是空对象时占用多少内存\n",[288,23287,23288],{"class":290,"line":1784},[288,23289,2572],{"emptyLinePlaceholder":217},[288,23291,23292],{"class":290,"line":1789},[288,23293,1737],{"class":298},[288,23295,23296,23298,23300],{"class":290,"line":1795},[288,23297,302],{"class":294},[288,23299,2145],{"class":2135},[288,23301,2148],{"class":298},[288,23303,23304],{"class":290,"line":1800},[288,23305,1718],{"class":298},[288,23307,23308,23310],{"class":290,"line":1814},[288,23309,5806],{"class":2135},[288,23311,5809],{"class":298},[288,23313,23314],{"class":290,"line":1819},[288,23315,1737],{"class":298},[19,23317,23318],{},"输出结果：size of p=4",[19,23320,23321],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[243,23323,23324],{},[246,23325,23326],{},"如果加上非静态成员变量，Person类修改如下",[280,23328,23330],{"className":282,"code":23329,"language":284,"meta":205,"style":205},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[25,23331,23332,23338,23342,23348,23356,23360,23365],{"__ignoreMap":205},[288,23333,23334,23336],{"class":290,"line":291},[288,23335,14867],{"class":294},[288,23337,15344],{"class":2135},[288,23339,23340],{"class":290,"line":206},[288,23341,1718],{"class":298},[288,23343,23344,23346],{"class":290,"line":1352},[288,23345,2157],{"class":294},[288,23347,21565],{"class":298},[288,23349,23350,23352,23354],{"class":290,"line":1367},[288,23351,11193],{"class":294},[288,23353,2554],{"class":294},[288,23355,21572],{"class":298},[288,23357,23358],{"class":290,"line":1373},[288,23359,4167],{"class":298},[288,23361,23362],{"class":290,"line":1387},[288,23363,23364],{"class":357},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[288,23366,23367,23369,23371,23373,23375,23377],{"class":290,"line":1393},[288,23368,302],{"class":294},[288,23370,15742],{"class":2135},[288,23372,22585],{"class":298},[288,23374,344],{"class":294},[288,23376,490],{"class":347},[288,23378,1463],{"class":298},[19,23380,23381],{},"输出结果：4",[19,23383,23384],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[243,23386,23387],{"start":206},[246,23388,23389],{},"加上非静态成员函数",[280,23391,23393],{"className":282,"code":23392,"language":284,"meta":205,"style":205},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[25,23394,23395,23402,23406,23412,23420,23424,23428,23432],{"__ignoreMap":205},[288,23396,23397,23399],{"class":290,"line":291},[288,23398,14867],{"class":294},[288,23400,23401],{"class":2135},"  Person\n",[288,23403,23404],{"class":290,"line":206},[288,23405,1718],{"class":298},[288,23407,23408,23410],{"class":290,"line":1352},[288,23409,2157],{"class":294},[288,23411,21565],{"class":298},[288,23413,23414,23416,23418],{"class":290,"line":1367},[288,23415,15082],{"class":294},[288,23417,11558],{"class":2135},[288,23419,2148],{"class":298},[288,23421,23422],{"class":290,"line":1373},[288,23423,2202],{"class":298},[288,23425,23426],{"class":290,"line":1387},[288,23427,2572],{"emptyLinePlaceholder":217},[288,23429,23430],{"class":290,"line":1393},[288,23431,2359],{"class":298},[288,23433,23434],{"class":290,"line":1484},[288,23435,4167],{"class":298},[19,23437,23438],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[243,23440,23441],{"start":1352},[246,23442,23443],{},"加上静态成员函数",[280,23445,23447],{"className":282,"code":23446,"language":284,"meta":205,"style":205},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[25,23448,23449,23455,23459,23465,23473,23477,23481,23485,23496,23500,23504,23508],{"__ignoreMap":205},[288,23450,23451,23453],{"class":290,"line":291},[288,23452,14867],{"class":294},[288,23454,23401],{"class":2135},[288,23456,23457],{"class":290,"line":206},[288,23458,1718],{"class":298},[288,23460,23461,23463],{"class":290,"line":1352},[288,23462,2157],{"class":294},[288,23464,21565],{"class":298},[288,23466,23467,23469,23471],{"class":290,"line":1367},[288,23468,15082],{"class":294},[288,23470,11558],{"class":2135},[288,23472,2148],{"class":298},[288,23474,23475],{"class":290,"line":1373},[288,23476,2202],{"class":298},[288,23478,23479],{"class":290,"line":1387},[288,23480,2572],{"emptyLinePlaceholder":217},[288,23482,23483],{"class":290,"line":1393},[288,23484,2359],{"class":298},[288,23486,23487,23489,23491,23494],{"class":290,"line":1484},[288,23488,11193],{"class":294},[288,23490,22740],{"class":294},[288,23492,23493],{"class":2135}," func1",[288,23495,2148],{"class":298},[288,23497,23498],{"class":290,"line":1490},[288,23499,2202],{"class":298},[288,23501,23502],{"class":290,"line":1502},[288,23503,2572],{"emptyLinePlaceholder":217},[288,23505,23506],{"class":290,"line":1784},[288,23507,2359],{"class":298},[288,23509,23510],{"class":290,"line":1789},[288,23511,4167],{"class":298},[19,23513,23381],{},[19,23515,23516],{},"解释：静态成员函数也不属于类上",[5299,23518,7847],{},{"title":205,"searchDepth":206,"depth":206,"links":23520},[23521,23527],{"id":14818,"depth":206,"text":14819,"children":23522},[23523,23524,23525,23526],{"id":14822,"depth":1352,"text":14823},{"id":15547,"depth":1352,"text":15548},{"id":15719,"depth":1352,"text":15720},{"id":16178,"depth":1352,"text":16179},{"id":18550,"depth":206,"text":18551,"children":23528},[23529,23530,23531,23532,23533,23534,23535,23536,23537],{"id":18562,"depth":1352,"text":18563},{"id":18855,"depth":1352,"text":18856},{"id":19346,"depth":1352,"text":19347},{"id":20443,"depth":1352,"text":20444},{"id":20866,"depth":1352,"text":20867},{"id":21345,"depth":1352,"text":21346},{"id":21720,"depth":1352,"text":21721},{"id":22133,"depth":1352,"text":22134},{"id":23070,"depth":1352,"text":23071},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14783,"description":23538},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23545,"title":284,"body":23546,"description":214,"extension":215,"meta":23550,"navigation":217,"path":23552,"seo":23553,"stem":23554,"__hash__":23555},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23547,"toc":23548},[],{"title":205,"searchDepth":206,"depth":206,"links":23549},[],{"category":23551},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":284,"description":214},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23557,"title":23558,"body":23559,"description":205,"extension":215,"meta":24149,"navigation":217,"path":24150,"seo":24151,"stem":24152,"__hash__":24153},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23560,"toc":24131},[23561,23564,23568,23571,23574,23577,23595,23600,23603,23606,23609,23612,23617,23620,23625,23628,23631,23635,23638,23641,23647,23650,23668,23672,23676,23679,23684,23687,23691,23694,23707,23710,23714,23717,23720,23723,23748,23751,23760,23771,23786,23818,23822,23829,23837,23841,23844,23847,23852,23856,23859,23862,23867,23870,23874,23877,23880,23885,23888,23892,23897,23901,23968,23972,23975,23978,23981,23984,23987,23993,24014,24017,24031,24039,24043,24046,24049,24054,24057,24062,24067,24070,24073,24078,24083,24086,24091,24096,24099,24104,24109,24112,24115,24120,24123,24128],[10,23562,23558],{"id":23563},"_1强化学习基本认识",[14,23565,23567],{"id":23566},"_11什么是强化学习","1.1.什么是强化学习",[19,23569,23570],{},"强化学习有两部分组成：智能体和环境；",[19,23572,23573],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23575,23576],{},"强化学习与监督学习的区别:",[243,23578,23579,23582,23585,23588],{},[246,23580,23581],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[246,23583,23584],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[246,23586,23587],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[246,23589,23590,23591,23594],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[448,23592,23593],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23596,23597],{},[200,23598],{"alt":205,"src":23599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23601,23602],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23604,23605],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23607,23608],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23610,23611],{},"获取奖励",[19,23613,23614],{},[200,23615],{"alt":205,"src":23616},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23618,23619],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23621,23622],{},[200,23623],{"alt":205,"src":23624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23626,23627],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23629,23630],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23632,23634],{"id":23633},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23636,23637],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23639,23640],{},"具身智能中的应用",[19,23642,23643,23646],{},[448,23644,23645],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23648,23649],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23651,23652,23653,23656,23657,23660,23661,23664,23665],{},"机器人是",[448,23654,23655],{},"躯体","，深度学习是",[448,23658,23659],{},"神经元****网络","，VLA是",[448,23662,23663],{},"通用的行为逻辑","，而强化学习是",[448,23666,23667],{},"教练",[14,23669,23671],{"id":23670},"_13序列决策","1.3.序列决策",[260,23673,23675],{"id":23674},"_131智能体与环境","1.3.1.智能体与环境",[19,23677,23678],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23680,23681],{},[200,23682],{"alt":205,"src":23683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23685,23686],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[260,23688,23690],{"id":23689},"_132奖励","1.3.2.奖励",[19,23692,23693],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23695,23696,23697,23706],{},"取某个策略的表现如何。强化学习的目的就是",[448,23698,23699,23700,23705],{},"最大化",[448,23701,23702],{},[448,23703,23704],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23708,23709],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[260,23711,23713],{"id":23712},"_133序列决策","1.3.3.序列决策",[19,23715,23716],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23718,23719],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23721,23722],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23724,23725,23729,23730,23732,23733,23735,23736,23738,23739,13968,23742,13968,23745],{},[23726,23727,23728],"em",{},"Ht"," = ",[23726,23731,893],{},"1*, a",[23726,23734,516],{},", r",[23726,23737,516],{},", . . . ,* ",[23726,23740,23741],{},"ot",[23726,23743,23744],{},", at ,",[23726,23746,23747],{},"rt",[19,23749,23750],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23752,23753,23729,23756,1830,23758,726],{},[23726,23754,23755],{},"st",[23726,23757,351],{},[23726,23759,23728],{},[19,23761,23762,23763,23766,23767,23770],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[448,23764,23765],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[448,23768,23769],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23772,23773,23774,23777,23778,23781,23782,23785],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[448,23775,23776],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[448,23779,23780],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23726,23783,23784],{},"S, A, T, R, Ω, O, γ",")。",[19,23787,23788,23789,23791,23792,23794,23795,299,23797,23800,23801,23803,23804,299,23807,23810,23811,23813,23814,23817],{},"其中 ",[23726,23790,986],{}," 表示状态空间，为隐变量，",[23726,23793,531],{}," 为动作空间，",[23726,23796,1011],{},[23726,23798,23799],{},"s ′ |s, a",") 为状态转移概率，",[23726,23802,961],{}," 为奖励函数，",[23726,23805,23806],{},"Ω",[23726,23808,23809],{},"o|s, a",") 为观测概率，",[23726,23812,887],{}," 为观测空间，",[23726,23815,23816],{},"γ"," 为折扣因子。",[14,23819,23821],{"id":23820},"_14动作空间","1.4.动作空间",[19,23823,23824,23825,23828],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[448,23826,23827],{},"动作空间"," ，动作空间分为:",[243,23830,23831,23834],{},[246,23832,23833],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[246,23835,23836],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23838,23840],{"id":23839},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23842,23843],{},"由策略、价值函数、模型三部分组成",[19,23845,23846],{},"这三者组成马尔可夫决策过程",[19,23848,23849],{},[200,23850],{"alt":205,"src":23851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[260,23853,23855],{"id":23854},"_151策略","1.5.1.策略",[19,23857,23858],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23860,23861],{},"策略可分为两种：",[19,23863,23864],{},[200,23865],{"alt":205,"src":23866},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23868,23869],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[260,23871,23873],{"id":23872},"_152价值函数","1.5.2.价值函数",[19,23875,23876],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23878,23879],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23881,23882],{},[200,23883],{"alt":205,"src":23884},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23886,23887],{},"进入某个状态采取的最优动作可以通过Q函数得到",[260,23889,23891],{"id":23890},"_153模型","1.5.3.模型",[19,23893,23894],{},[200,23895],{"alt":205,"src":23896},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23898,23900],{"id":23899},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[436,23902,23903,23914],{},[439,23904,23905],{},[442,23906,23907,23911],{},[445,23908,23910],{"align":23909},"left","类型",[445,23912,23913],{"align":23909},"特点",[483,23915,23916,23926,23936,23946,23958],{},[442,23917,23918,23923],{},[488,23919,23920],{"align":23909},[448,23921,23922],{},"基于价值的智能体",[488,23924,23925],{"align":23909},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[442,23927,23928,23933],{},[488,23929,23930],{"align":23909},[448,23931,23932],{},"基于策略的智能体",[488,23934,23935],{"align":23909},"直接学习策略，没有学习价值函数",[442,23937,23938,23943],{},[488,23939,23940],{"align":23909},[448,23941,23942],{},"演员-评论员智能体",[488,23944,23945],{"align":23909},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[442,23947,23948,23953],{},[488,23949,23950],{"align":23909},[448,23951,23952],{},"有模型强化学习智能体",[488,23954,23955],{"align":23909},[200,23956],{"alt":205,"src":23957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[442,23959,23960,23965],{},[488,23961,23962],{"align":23909},[448,23963,23964],{},"免模型强化学习智能体",[488,23966,23967],{"align":23909},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23969,23971],{"id":23970},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23973,23974],{},"学习和规划是序列决策的两个基本问题",[19,23976,23977],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23979,23980],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23982,23983],{},"强化学习用到的库：Gym",[19,23985,23986],{},"Gym可以检验强化学习算法的优劣",[19,23988,23989,23992],{},[448,23990,23991],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[280,23994,23998],{"className":23995,"code":23996,"language":23997,"meta":205,"style":205},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[25,23999,24000],{"__ignoreMap":205},[288,24001,24002,24005,24008,24011],{"class":290,"line":291},[288,24003,24004],{"class":2135},"pip",[288,24006,24007],{"class":403}," install",[288,24009,24010],{"class":403}," gym==",[288,24012,24013],{"class":347},"0.25.2\n",[19,24015,24016],{},"显示图形界面需要",[280,24018,24020],{"className":23995,"code":24019,"language":23997,"meta":205,"style":205},"pip install pygame\n",[25,24021,24022],{"__ignoreMap":205},[288,24023,24024,24026,24028],{"class":290,"line":291},[288,24025,24004],{"class":2135},[288,24027,24007],{"class":403},[288,24029,24030],{"class":403}," pygame\n",[19,24032,24033,24034],{},"有关Gym库的相关文档介绍：",[104,24035,24038],{"href":24036,"rel":24037},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[108],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24040,24042],{"id":24041},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24044,24045],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24047,24048],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24050,24051],{},[200,24052],{"alt":205,"src":24053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24055,24056],{},"折扣率需要自己来设定",[19,24058,24059],{},[200,24060],{"alt":205,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[243,24063,24064],{},[246,24065,24066],{},"状态转移函数：",[19,24068,24069],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24071,24072],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24074,24075],{},[200,24076],{"alt":205,"src":24077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[243,24079,24080],{"start":206},[246,24081,24082],{},"动作价值函数：",[19,24084,24085],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24087,24088],{},[200,24089],{"alt":205,"src":24090},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[243,24092,24093],{"start":1352},[246,24094,24095],{},"最优动作价值函数：",[19,24097,24098],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,24100,24101],{},[200,24102],{"alt":205,"src":24103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[243,24105,24106],{"start":1367},[246,24107,24108],{},"状态价值函数:",[19,24110,24111],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24113,24114],{},"它衡量的是“一个具体动作”的长期价值",[19,24116,24117],{},[200,24118],{"alt":205,"src":24119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24121,24122],{},"几个价值函数之间的比较：",[19,24124,24125],{},[200,24126],{"alt":205,"src":24127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5299,24129,24130],{},"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":205,"searchDepth":206,"depth":206,"links":24132},[24133,24134,24135,24140,24141,24146,24147,24148],{"id":23566,"depth":206,"text":23567},{"id":23633,"depth":206,"text":23634},{"id":23670,"depth":206,"text":23671,"children":24136},[24137,24138,24139],{"id":23674,"depth":1352,"text":23675},{"id":23689,"depth":1352,"text":23690},{"id":23712,"depth":1352,"text":23713},{"id":23820,"depth":206,"text":23821},{"id":23839,"depth":206,"text":23840,"children":24142},[24143,24144,24145],{"id":23854,"depth":1352,"text":23855},{"id":23872,"depth":1352,"text":23873},{"id":23890,"depth":1352,"text":23891},{"id":23899,"depth":206,"text":23900},{"id":23970,"depth":206,"text":23971},{"id":24041,"depth":206,"text":24042},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23558,"description":205},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24155,"title":24156,"body":24157,"description":24164,"extension":215,"meta":24175,"navigation":217,"path":24176,"seo":24177,"stem":24178,"__hash__":24179},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24158,"toc":24173},[24159,24162,24165,24170],[10,24160,24156],{"id":24161},"_2马尔可夫决策过程",[19,24163,24164],{},"这是强化学习的基本框架",[19,24166,24167],{},[200,24168],{"alt":205,"src":24169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24171,24172],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":205,"searchDepth":206,"depth":206,"links":24174},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24156,"description":24164},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24181,"title":24182,"body":24183,"description":205,"extension":215,"meta":24299,"navigation":217,"path":24300,"seo":24301,"stem":24302,"__hash__":24303},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24184,"toc":24294},[24185,24188,24192,24195,24200,24205,24208,24213,24216,24221,24224,24228,24233,24236,24241,24246,24251,24254,24258,24263,24266,24271,24276,24281,24286,24289],[10,24186,24182],{"id":24187},"_3动作价值函数",[14,24189,24191],{"id":24190},"_31dqn","3.1.DQN",[19,24193,24194],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24196,24197],{},[200,24198],{"alt":205,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24201,24202],{},[200,24203],{"alt":205,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24206,24207],{},"DQN算法的描述：",[19,24209,24210],{},[200,24211],{"alt":205,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24214,24215],{},"这里的Dense指的是全连接层",[19,24217,24218],{},[200,24219],{"alt":205,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24222,24223],{},"当前观测的状态为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算法",[14,24225,24227],{"id":24226},"_32dqn的举例","3.2.DQN的举例",[19,24229,24230],{},[200,24231],{"alt":205,"src":24232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24234,24235],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24237,24238],{},[200,24239],{"alt":205,"src":24240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24242,24243],{},[200,24244],{"alt":205,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24247,24248],{},[200,24249],{"alt":205,"src":24250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24252,24253],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24255,24257],{"id":24256},"_33td算法","3.3.TD算法",[19,24259,24260],{},[200,24261],{"alt":205,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24264,24265],{},"强化学习TD算法公式的粗略解释：",[19,24267,24268],{},[200,24269],{"alt":205,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24272,24273],{},[200,24274],{"alt":205,"src":24275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24277,24278],{},[200,24279],{"alt":205,"src":24280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24282,24283],{},[200,24284],{"alt":205,"src":24285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24287,24288],{},"TD算法总结：",[19,24290,24291],{},[200,24292],{"alt":205,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":205,"searchDepth":206,"depth":206,"links":24295},[24296,24297,24298],{"id":24190,"depth":206,"text":24191},{"id":24226,"depth":206,"text":24227},{"id":24256,"depth":206,"text":24257},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24182,"description":205},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24305,"title":24306,"body":24307,"description":205,"extension":215,"meta":24540,"navigation":217,"path":24541,"seo":24542,"stem":24543,"__hash__":24544},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24308,"toc":24536},[24309,24312,24316,24319,24322,24327,24332,24335,24340,24345,24348,24353,24356,24361,24364,24369,24372,24377,24380,24385,24390,24393,24398,24401,24404,24409,24412,24417,24422,24426,24429,24432,24437,24442,24445,24450,24455,24458,24463,24466,24469,24474,24477,24482,24485,24490,24495,24498,24503,24508,24511,24516,24519,24524,24527],[10,24310,24306],{"id":24311},"_4策略学习",[14,24313,24315],{"id":24314},"_41概念描述","4.1.概念描述",[19,24317,24318],{},"用神经网络（策略网络）近似策略函数",[19,24320,24321],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24323,24324],{},[200,24325],{"alt":205,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24328,24329],{},[200,24330],{"alt":205,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24333,24334],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24336,24337],{},[200,24338],{"alt":205,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24341,24342],{},[200,24343],{"alt":205,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24346,24347],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24349,24350],{},[200,24351],{"alt":205,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24354,24355],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24357,24358],{},[200,24359],{"alt":205,"src":24360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24362,24363],{},"改进theta要用到策略梯度算法",[19,24365,24366],{},[200,24367],{"alt":205,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24370,24371],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24373,24374],{},[200,24375],{"alt":205,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24378,24379],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24381,24382],{},[200,24383],{"alt":205,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24386,24387],{},[200,24388],{"alt":205,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24391,24392],{},"梯度公式总结：",[19,24394,24395],{},[200,24396],{"alt":205,"src":24397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24399,24400],{},"两个公式的分别应用场景：",[19,24402,24403],{},"对于离散的动作：",[19,24405,24406],{},[200,24407],{"alt":205,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24410,24411],{},"对于连续的动作：",[19,24413,24414],{},[200,24415],{"alt":205,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24418,24419],{},[200,24420],{"alt":205,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24423,24425],{"id":24424},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24427,24428],{},"使用蒙特卡洛来近似计算策略梯度",[19,24430,24431],{},"蒙特卡洛法的解释如下：",[19,24433,24434],{},[200,24435],{"alt":205,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24438,24439],{},[200,24440],{"alt":205,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24443,24444],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[243,24446,24447],{},[246,24448,24449],{},"方法一：reinforce算法",[19,24451,24452],{},[200,24453],{"alt":205,"src":24454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24456,24457],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[243,24459,24460],{"start":206},[246,24461,24462],{},"方法二：actor-critic算法",[19,24464,24465],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24467,24468],{},"两个网络的构建：",[19,24470,24471],{},[200,24472],{"alt":205,"src":24473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24475,24476],{},"actor网路：",[19,24478,24479],{},[200,24480],{"alt":205,"src":24481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24483,24484],{},"critic网络",[19,24486,24487],{},[200,24488],{"alt":205,"src":24489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[243,24491,24492],{"start":1352},[246,24493,24494],{},"网络的训练",[19,24496,24497],{},"网络描述",[19,24499,24500],{},[200,24501],{"alt":205,"src":24502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24504,24505],{},[200,24506],{"alt":205,"src":24507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24509,24510],{},"TD算法更新梯度：",[19,24512,24513],{},[200,24514],{"alt":205,"src":24515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24517,24518],{},"策略网络更新梯度：",[19,24520,24521],{},[200,24522],{"alt":205,"src":24523},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24525,24526],{},"训练整个流程的具体描述：",[19,24528,24529,24532,24533],{},[200,24530],{"alt":205,"src":24531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[200,24534],{"alt":205,"src":24535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":205,"searchDepth":206,"depth":206,"links":24537},[24538,24539],{"id":24314,"depth":206,"text":24315},{"id":24424,"depth":206,"text":24425},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24306,"description":205},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24546,"title":24547,"body":24548,"description":24555,"extension":215,"meta":24605,"navigation":217,"path":24606,"seo":24607,"stem":24608,"__hash__":24609},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24549,"toc":24601},[24550,24553,24556,24560,24563,24568,24572,24575,24580,24583,24588,24593,24596],[10,24551,24547],{"id":24552},"_5alphago算法",[19,24554,24555],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24557,24559],{"id":24558},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24561,24562],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24564,24565],{},[200,24566],{"alt":205,"src":24567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24569,24571],{"id":24570},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24573,24574],{},"采用强化学习的方式训练策略网络",[19,24576,24577],{},[200,24578],{"alt":205,"src":24579},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24581,24582],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24584,24585],{},[200,24586],{"alt":205,"src":24587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24589,24590],{},[200,24591],{"alt":205,"src":24592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24594,24595],{},"强化学习训练策略网络的总结：",[19,24597,24598],{},[200,24599],{"alt":205,"src":24600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":205,"searchDepth":206,"depth":206,"links":24602},[24603,24604],{"id":24558,"depth":206,"text":24559},{"id":24570,"depth":206,"text":24571},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24547,"description":24555},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24611,"title":24612,"body":24613,"description":24620,"extension":215,"meta":24623,"navigation":217,"path":24624,"seo":24625,"stem":24626,"__hash__":24627},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24614,"toc":24621},[24615,24618],[10,24616,24612],{"id":24617},"_6价值网络",[19,24619,24620],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":205,"searchDepth":206,"depth":206,"links":24622},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24612,"description":24620},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24629,"title":24630,"body":24631,"description":24635,"extension":215,"meta":24636,"navigation":217,"path":24637,"seo":24638,"stem":24639,"__hash__":24640},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24632,"toc":24633},[],{"title":205,"searchDepth":206,"depth":206,"links":24634},[],"记录自己的强化学习笔记。",{"category":23551},"\u002Fwiki\u002F2025-12-04",{"title":24630,"description":24635},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24642,"title":24643,"body":24644,"description":214,"extension":215,"meta":24683,"navigation":217,"path":24684,"seo":24685,"stem":24686,"__hash__":24687},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24645,"toc":24681},[24646,24649,24652,24658,24661,24667,24670,24675,24678],[10,24647,24643],{"id":24648},"_1-项目概览与官方资源",[19,24650,24651],{},"官方文档：",[19,24653,24654],{},[104,24655,24656],{"href":24656,"rel":24657},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[108],[19,24659,24660],{},"官方代码仓库：",[19,24662,24663],{},[104,24664,24665],{"href":24665,"rel":24666},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[108],[19,24668,24669],{},"复现大体流程：",[19,24671,24672],{},[200,24673],{"alt":205,"src":24674},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24676,24677],{},"本教程的目标是打通这条链路：",[19,24679,24680],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":205,"searchDepth":206,"depth":206,"links":24682},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24643,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24689,"title":24690,"body":24691,"description":214,"extension":215,"meta":24807,"navigation":217,"path":24808,"seo":24809,"stem":24810,"__hash__":24811},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24692,"toc":24802},[24693,24696,24700,24703,24710,24714,24717,24726,24736,24740,24770,24773,24799],[10,24694,24690],{"id":24695},"_2-环境准备与设备连接",[14,24697,24699],{"id":24698},"_21-系统与环境","2.1 系统与环境",[19,24701,24702],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24704,24705,24706,24709],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[25,24707,24708],{},"lerobot"," 依赖。",[14,24711,24713],{"id":24712},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24715,24716],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[280,24718,24720],{"className":23995,"code":24719,"language":23997,"meta":205,"style":205},"lerobot-find-out\n",[25,24721,24722],{"__ignoreMap":205},[288,24723,24724],{"class":290,"line":291},[288,24725,24719],{"class":2135},[19,24727,24728,24729,511,24732,24735],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[25,24730,24731],{},"\u002Fdev\u002FttyACM0",[25,24733,24734],{},"\u002Fdev\u002FttyACM1","）。",[14,24737,24739],{"id":24738},"_23-串口授权","2.3 串口授权",[280,24741,24743],{"className":23995,"code":24742,"language":23997,"meta":205,"style":205},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[25,24744,24745,24759],{"__ignoreMap":205},[288,24746,24747,24750,24753,24756],{"class":290,"line":291},[288,24748,24749],{"class":2135},"sudo",[288,24751,24752],{"class":403}," chmod",[288,24754,24755],{"class":347}," 666",[288,24757,24758],{"class":403}," \u002Fdev\u002FttyACM0\n",[288,24760,24761,24763,24765,24767],{"class":290,"line":206},[288,24762,24749],{"class":2135},[288,24764,24752],{"class":403},[288,24766,24755],{"class":347},[288,24768,24769],{"class":403}," \u002Fdev\u002FttyACM1\n",[19,24771,24772],{},"说明：",[1304,24774,24775,24780,24786,24796],{},[246,24776,24777,24779],{},[25,24778,24749],{},"：以 root 权限执行命令。",[246,24781,24782,24785],{},[25,24783,24784],{},"chmod","：修改设备节点权限。",[246,24787,24788,24791,24792,24795],{},[25,24789,24790],{},"666","：",[25,24793,24794],{},"rw-rw-rw-","，所有用户可读写。",[246,24797,24798],{},"串口号必须替换为你机器上的真实端口。",[5299,24800,24801],{},"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":205,"searchDepth":206,"depth":206,"links":24803},[24804,24805,24806],{"id":24698,"depth":206,"text":24699},{"id":24712,"depth":206,"text":24713},{"id":24738,"depth":206,"text":24739},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24690,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24813,"title":24814,"body":24815,"description":214,"extension":215,"meta":24976,"navigation":217,"path":24977,"seo":24978,"stem":24979,"__hash__":24980},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24816,"toc":24972},[24817,24821,24825,24831,24834,24891,24894,24898,24901,24969],[10,24818,24820],{"id":24819},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24822,24824],{"id":24823},"_31-配置电机-id","3.1 配置电机 ID",[19,24826,24827,24828,24830],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[25,24829,516],{},"，需要改成机械臂链路里不冲突的编号。",[19,24832,24833],{},"方式一：用 LeRobot 命令逐步写入。",[280,24835,24837],{"className":23995,"code":24836,"language":23997,"meta":205,"style":205},"# 主臂舵机配置 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",[25,24838,24839,24844,24852,24859,24864,24868,24873,24879,24886],{"__ignoreMap":205},[288,24840,24841],{"class":290,"line":291},[288,24842,24843],{"class":357},"# 主臂舵机配置 ID\n",[288,24845,24846,24849],{"class":290,"line":206},[288,24847,24848],{"class":2135},"lerobot-setup-motors",[288,24850,24851],{"class":347}," \\\n",[288,24853,24854,24857],{"class":290,"line":1352},[288,24855,24856],{"class":347},"  --teleop.type=so101_leader",[288,24858,24851],{"class":347},[288,24860,24861],{"class":290,"line":1367},[288,24862,24863],{"class":347},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[288,24865,24866],{"class":290,"line":1373},[288,24867,2572],{"emptyLinePlaceholder":217},[288,24869,24870],{"class":290,"line":1387},[288,24871,24872],{"class":357},"# 从臂舵机配置 ID\n",[288,24874,24875,24877],{"class":290,"line":1393},[288,24876,24848],{"class":2135},[288,24878,24851],{"class":347},[288,24880,24881,24884],{"class":290,"line":1484},[288,24882,24883],{"class":347},"  --robot.type=so101_follower",[288,24885,24851],{"class":347},[288,24887,24888],{"class":290,"line":1490},[288,24889,24890],{"class":347},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24892,24893],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24895,24897],{"id":24896},"_32-机械臂校准","3.2 机械臂校准",[19,24899,24900],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[280,24902,24904],{"className":23995,"code":24903,"language":23997,"meta":205,"style":205},"# 主臂校准\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",[25,24905,24906,24911,24918,24924,24931,24936,24940,24945,24951,24957,24964],{"__ignoreMap":205},[288,24907,24908],{"class":290,"line":291},[288,24909,24910],{"class":357},"# 主臂校准\n",[288,24912,24913,24916],{"class":290,"line":206},[288,24914,24915],{"class":2135},"lerobot-calibrate",[288,24917,24851],{"class":347},[288,24919,24920,24922],{"class":290,"line":1352},[288,24921,24856],{"class":347},[288,24923,24851],{"class":347},[288,24925,24926,24929],{"class":290,"line":1367},[288,24927,24928],{"class":347},"  --teleop.port=\u002Fdev\u002FttyACM0",[288,24930,24851],{"class":347},[288,24932,24933],{"class":290,"line":1373},[288,24934,24935],{"class":347},"  --teleop.id=my_awesome_leader_arm\n",[288,24937,24938],{"class":290,"line":1387},[288,24939,2572],{"emptyLinePlaceholder":217},[288,24941,24942],{"class":290,"line":1393},[288,24943,24944],{"class":357},"# 从臂校准\n",[288,24946,24947,24949],{"class":290,"line":1484},[288,24948,24915],{"class":2135},[288,24950,24851],{"class":347},[288,24952,24953,24955],{"class":290,"line":1490},[288,24954,24883],{"class":347},[288,24956,24851],{"class":347},[288,24958,24959,24962],{"class":290,"line":1502},[288,24960,24961],{"class":347},"  --robot.port=\u002Fdev\u002FttyACM1",[288,24963,24851],{"class":347},[288,24965,24966],{"class":290,"line":1784},[288,24967,24968],{"class":347},"  --robot.id=my_awesome_follower_arm\n",[5299,24970,24971],{},"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":205,"searchDepth":206,"depth":206,"links":24973},[24974,24975],{"id":24823,"depth":206,"text":24824},{"id":24896,"depth":206,"text":24897},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24814,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24982,"title":24983,"body":24984,"description":214,"extension":215,"meta":25175,"navigation":217,"path":25176,"seo":25177,"stem":25178,"__hash__":25179},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24985,"toc":25171},[24986,24989,24993,25040,25044,25057,25120,25123,25168],[10,24987,24983],{"id":24988},"_4-遥操与相机接入",[14,24990,24992],{"id":24991},"_41-不带相机遥操","4.1 不带相机遥操",[280,24994,24996],{"className":23995,"code":24995,"language":23997,"meta":205,"style":205},"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",[25,24997,24998,25005,25011,25017,25024,25030,25036],{"__ignoreMap":205},[288,24999,25000,25003],{"class":290,"line":291},[288,25001,25002],{"class":2135},"lerobot-teleoperate",[288,25004,24851],{"class":347},[288,25006,25007,25009],{"class":290,"line":206},[288,25008,24883],{"class":347},[288,25010,24851],{"class":347},[288,25012,25013,25015],{"class":290,"line":1352},[288,25014,24961],{"class":347},[288,25016,24851],{"class":347},[288,25018,25019,25022],{"class":290,"line":1367},[288,25020,25021],{"class":347},"  --robot.id=my_awesome_follower_arm",[288,25023,24851],{"class":347},[288,25025,25026,25028],{"class":290,"line":1373},[288,25027,24856],{"class":347},[288,25029,24851],{"class":347},[288,25031,25032,25034],{"class":290,"line":1387},[288,25033,24928],{"class":347},[288,25035,24851],{"class":347},[288,25037,25038],{"class":290,"line":1393},[288,25039,24935],{"class":347},[14,25041,25043],{"id":25042},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[280,25045,25047],{"className":23995,"code":25046,"language":23997,"meta":205,"style":205},"lerobot-find-cameras opencv\n",[25,25048,25049],{"__ignoreMap":205},[288,25050,25051,25054],{"class":290,"line":291},[288,25052,25053],{"class":2135},"lerobot-find-cameras",[288,25055,25056],{"class":403}," opencv\n",[280,25058,25060],{"className":23995,"code":25059,"language":23997,"meta":205,"style":205},"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",[25,25061,25062,25068,25074,25080,25086,25096,25102,25108,25115],{"__ignoreMap":205},[288,25063,25064,25066],{"class":290,"line":291},[288,25065,25002],{"class":2135},[288,25067,24851],{"class":347},[288,25069,25070,25072],{"class":290,"line":206},[288,25071,24883],{"class":347},[288,25073,24851],{"class":347},[288,25075,25076,25078],{"class":290,"line":1352},[288,25077,24961],{"class":347},[288,25079,24851],{"class":347},[288,25081,25082,25084],{"class":290,"line":1367},[288,25083,25021],{"class":347},[288,25085,24851],{"class":347},[288,25087,25088,25091,25094],{"class":290,"line":1373},[288,25089,25090],{"class":347},"  --robot.cameras=",[288,25092,25093],{"class":403},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[288,25095,24851],{"class":347},[288,25097,25098,25100],{"class":290,"line":1387},[288,25099,24856],{"class":347},[288,25101,24851],{"class":347},[288,25103,25104,25106],{"class":290,"line":1393},[288,25105,24928],{"class":347},[288,25107,24851],{"class":347},[288,25109,25110,25113],{"class":290,"line":1484},[288,25111,25112],{"class":347},"  --teleop.id=my_awesome_leader_arm",[288,25114,24851],{"class":347},[288,25116,25117],{"class":290,"line":1490},[288,25118,25119],{"class":347},"  --display_data=true\n",[19,25121,25122],{},"相机参数说明：",[1304,25124,25125,25131,25137,25146,25156,25162],{},[246,25126,25127,25130],{},[25,25128,25129],{},"front","：相机名称。",[246,25132,25133,25136],{},[25,25134,25135],{},"type: opencv","：相机驱动类型。",[246,25138,25139,25142,25143,24735],{},[25,25140,25141],{},"index_or_path","：设备编号或设备路径（如 ",[25,25144,25145],{},"\u002Fdev\u002Fvideo4",[246,25147,25148,25151,25152,25155],{},[25,25149,25150],{},"width"," \u002F ",[25,25153,25154],{},"height","：图像分辨率。",[246,25157,25158,25161],{},[25,25159,25160],{},"fps","：采样帧率。",[246,25163,25164,25167],{},[25,25165,25166],{},"--display_data=true","：启用实时可视化。",[5299,25169,25170],{},"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":205,"searchDepth":206,"depth":206,"links":25172},[25173,25174],{"id":24991,"depth":206,"text":24992},{"id":25042,"depth":206,"text":25043},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24983,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25181,"title":25182,"body":25183,"description":214,"extension":215,"meta":25355,"navigation":217,"path":25356,"seo":25357,"stem":25358,"__hash__":25359},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25184,"toc":25350},[25185,25189,25193,25198,25203,25206,25248,25254,25258,25307,25312,25316,25319,25327,25332,25337,25342,25347],[10,25186,25188],{"id":25187},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25190,25192],{"id":25191},"_51-生成访问令牌","5.1 生成访问令牌",[19,25194,25195],{},[200,25196],{"alt":205,"src":25197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25199,25200],{},[200,25201],{"alt":205,"src":25202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25204,25205],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[280,25207,25209],{"className":23995,"code":25208,"language":23997,"meta":205,"style":205},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[25,25210,25211,25224],{"__ignoreMap":205},[288,25212,25213,25216,25219,25221],{"class":290,"line":291},[288,25214,25215],{"class":294},"export",[288,25217,25218],{"class":298}," HF_TOKEN",[288,25220,344],{"class":294},[288,25222,25223],{"class":403},"\"your_huggingface_token\"\n",[288,25225,25226,25229,25232,25235,25238,25240,25243,25245],{"class":290,"line":206},[288,25227,25228],{"class":2135},"hf",[288,25230,25231],{"class":403}," auth",[288,25233,25234],{"class":403}," login",[288,25236,25237],{"class":347}," --token",[288,25239,9897],{"class":403},[288,25241,25242],{"class":298},"$HF_TOKEN",[288,25244,109],{"class":403},[288,25246,25247],{"class":347}," --add-to-git-credential\n",[19,25249,25250,25253],{},[25,25251,25252],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25255,25257],{"id":25256},"_52-验证登录","5.2 验证登录",[280,25259,25261],{"className":23995,"code":25260,"language":23997,"meta":205,"style":205},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[25,25262,25263,25294],{"__ignoreMap":205},[288,25264,25265,25268,25270,25273,25275,25277,25280,25283,25286,25289,25292],{"class":290,"line":291},[288,25266,25267],{"class":298},"HF_USER",[288,25269,344],{"class":294},[288,25271,25272],{"class":298},"$(",[288,25274,25228],{"class":2135},[288,25276,25231],{"class":403},[288,25278,25279],{"class":403}," whoami",[288,25281,25282],{"class":294}," |",[288,25284,25285],{"class":2135}," head",[288,25287,25288],{"class":347}," -n",[288,25290,25291],{"class":347}," 1",[288,25293,305],{"class":298},[288,25295,25296,25299,25301,25304],{"class":290,"line":206},[288,25297,25298],{"class":347},"echo",[288,25300,9897],{"class":403},[288,25302,25303],{"class":298},"$HF_USER",[288,25305,25306],{"class":403},"\"\n",[19,25308,25309],{},[200,25310],{"alt":205,"src":25311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25313,25315],{"id":25314},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25317,25318],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1304,25320,25321,25324],{},[246,25322,25323],{},"Dataset Repo（用于上传演示数据）",[246,25325,25326],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25328,25329],{},[200,25330],{"alt":205,"src":25331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25333,25334],{},[200,25335],{"alt":205,"src":25336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25338,25339],{},[200,25340],{"alt":205,"src":25341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25343,25344],{},[200,25345],{"alt":205,"src":25346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5299,25348,25349],{},"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":205,"searchDepth":206,"depth":206,"links":25351},[25352,25353,25354],{"id":25191,"depth":206,"text":25192},{"id":25256,"depth":206,"text":25257},{"id":25314,"depth":206,"text":25315},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25182,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25361,"title":25362,"body":25363,"description":214,"extension":215,"meta":25560,"navigation":217,"path":25561,"seo":25562,"stem":25563,"__hash__":25564},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25364,"toc":25555},[25365,25369,25373,25469,25477,25482,25486,25502,25505,25509,25552],[10,25366,25368],{"id":25367},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25370,25372],{"id":25371},"_61-录制示教数据","6.1 录制示教数据",[280,25374,25376],{"className":23995,"code":25375,"language":23997,"meta":205,"style":205},"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",[25,25377,25378,25385,25391,25397,25403,25412,25418,25424,25430,25437,25447,25454,25464],{"__ignoreMap":205},[288,25379,25380,25383],{"class":290,"line":291},[288,25381,25382],{"class":2135},"lerobot-record",[288,25384,24851],{"class":347},[288,25386,25387,25389],{"class":290,"line":206},[288,25388,24883],{"class":347},[288,25390,24851],{"class":347},[288,25392,25393,25395],{"class":290,"line":1352},[288,25394,24961],{"class":347},[288,25396,24851],{"class":347},[288,25398,25399,25401],{"class":290,"line":1367},[288,25400,25021],{"class":347},[288,25402,24851],{"class":347},[288,25404,25405,25407,25410],{"class":290,"line":1373},[288,25406,25090],{"class":347},[288,25408,25409],{"class":403},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[288,25411,24851],{"class":347},[288,25413,25414,25416],{"class":290,"line":1387},[288,25415,24856],{"class":347},[288,25417,24851],{"class":347},[288,25419,25420,25422],{"class":290,"line":1393},[288,25421,24928],{"class":347},[288,25423,24851],{"class":347},[288,25425,25426,25428],{"class":290,"line":1484},[288,25427,25112],{"class":347},[288,25429,24851],{"class":347},[288,25431,25432,25435],{"class":290,"line":1490},[288,25433,25434],{"class":347},"  --display_data=true",[288,25436,24851],{"class":347},[288,25438,25439,25442,25445],{"class":290,"line":1502},[288,25440,25441],{"class":347},"  --dataset.repo_id=",[288,25443,25444],{"class":403},"\"Embodied-AI-6\u002Fso101_test\"",[288,25446,24851],{"class":347},[288,25448,25449,25452],{"class":290,"line":1784},[288,25450,25451],{"class":347},"  --dataset.num_episodes=10",[288,25453,24851],{"class":347},[288,25455,25456,25459,25462],{"class":290,"line":1789},[288,25457,25458],{"class":347},"  --dataset.single_task=",[288,25460,25461],{"class":403},"\"Grab the green cube\"",[288,25463,24851],{"class":347},[288,25465,25466],{"class":290,"line":1795},[288,25467,25468],{"class":347},"  --resume=true\n",[1304,25470,25471],{},[246,25472,25473,25476],{},[25,25474,25475],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25478,25479],{},[200,25480],{"alt":205,"src":25481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25483,25485],{"id":25484},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[280,25487,25489],{"className":23995,"code":25488,"language":23997,"meta":205,"style":205},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[25,25490,25491],{"__ignoreMap":205},[288,25492,25493,25496,25499],{"class":290,"line":291},[288,25494,25495],{"class":2135},"rm",[288,25497,25498],{"class":347}," -rf",[288,25500,25501],{"class":403}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25503,25504],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25506,25508],{"id":25507},"_63-回放指定-episode","6.3 回放指定 episode",[280,25510,25512],{"className":23995,"code":25511,"language":23997,"meta":205,"style":205},"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",[25,25513,25514,25521,25527,25533,25539,25547],{"__ignoreMap":205},[288,25515,25516,25519],{"class":290,"line":291},[288,25517,25518],{"class":2135},"lerobot-replay",[288,25520,24851],{"class":347},[288,25522,25523,25525],{"class":290,"line":206},[288,25524,24883],{"class":347},[288,25526,24851],{"class":347},[288,25528,25529,25531],{"class":290,"line":1352},[288,25530,24961],{"class":347},[288,25532,24851],{"class":347},[288,25534,25535,25537],{"class":290,"line":1367},[288,25536,25021],{"class":347},[288,25538,24851],{"class":347},[288,25540,25541,25543,25545],{"class":290,"line":1373},[288,25542,25441],{"class":347},[288,25544,25444],{"class":403},[288,25546,24851],{"class":347},[288,25548,25549],{"class":290,"line":1387},[288,25550,25551],{"class":347},"  --dataset.episode=0\n",[5299,25553,25554],{},"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":205,"searchDepth":206,"depth":206,"links":25556},[25557,25558,25559],{"id":25371,"depth":206,"text":25372},{"id":25484,"depth":206,"text":25485},{"id":25507,"depth":206,"text":25508},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25362,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25566,"title":25567,"body":25568,"description":214,"extension":215,"meta":25696,"navigation":217,"path":25697,"seo":25698,"stem":25699,"__hash__":25700},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25569,"toc":25694},[25570,25574,25637,25640,25687,25692],[10,25571,25573],{"id":25572},"_7-act-模型训练","7. ACT 模型训练",[280,25575,25577],{"className":23995,"code":25576,"language":23997,"meta":205,"style":205},"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",[25,25578,25579,25586,25594,25601,25608,25615,25622,25629],{"__ignoreMap":205},[288,25580,25581,25584],{"class":290,"line":291},[288,25582,25583],{"class":2135},"lerobot-train",[288,25585,24851],{"class":347},[288,25587,25588,25590,25592],{"class":290,"line":206},[288,25589,25441],{"class":347},[288,25591,25444],{"class":403},[288,25593,24851],{"class":347},[288,25595,25596,25599],{"class":290,"line":1352},[288,25597,25598],{"class":347},"  --policy.type=act",[288,25600,24851],{"class":347},[288,25602,25603,25606],{"class":290,"line":1367},[288,25604,25605],{"class":347},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[288,25607,24851],{"class":347},[288,25609,25610,25613],{"class":290,"line":1373},[288,25611,25612],{"class":347},"  --job_name=act_so101_test",[288,25614,24851],{"class":347},[288,25616,25617,25620],{"class":290,"line":1387},[288,25618,25619],{"class":347},"  --policy.device=cuda",[288,25621,24851],{"class":347},[288,25623,25624,25627],{"class":290,"line":1393},[288,25625,25626],{"class":347},"  --wandb.enable=false",[288,25628,24851],{"class":347},[288,25630,25631,25634],{"class":290,"line":1484},[288,25632,25633],{"class":347},"  --policy.repo_id=",[288,25635,25636],{"class":403},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25638,25639],{},"参数说明：",[1304,25641,25642,25648,25654,25660,25666,25675,25681],{},[246,25643,25644,25647],{},[25,25645,25646],{},"--dataset.repo_id","：训练数据集仓库。",[246,25649,25650,25653],{},[25,25651,25652],{},"--policy.type=act","：策略模型类型为 ACT。",[246,25655,25656,25659],{},[25,25657,25658],{},"--output_dir","：本地训练输出目录。",[246,25661,25662,25665],{},[25,25663,25664],{},"--job_name","：训练任务名称。",[246,25667,25668,25671,25672,24735],{},[25,25669,25670],{},"--policy.device","：训练设备（如 ",[25,25673,25674],{},"cuda",[246,25676,25677,25680],{},[25,25678,25679],{},"--wandb.enable","：是否启用 WandB 可视化。",[246,25682,25683,25686],{},[25,25684,25685],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25688,25689],{},[200,25690],{"alt":205,"src":25691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5299,25693,25554],{},{"title":205,"searchDepth":206,"depth":206,"links":25695},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25567,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25702,"title":25703,"body":25704,"description":214,"extension":215,"meta":25791,"navigation":217,"path":25792,"seo":25793,"stem":25794,"__hash__":25795},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25705,"toc":25789},[25706,25709,25712,25779,25787],[10,25707,25703],{"id":25708},"_8-策略部署与自动采集",[19,25710,25711],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[280,25713,25715],{"className":23995,"code":25714,"language":23997,"meta":205,"style":205},"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",[25,25716,25717,25723,25729,25735,25743,25749,25756,25764,25772],{"__ignoreMap":205},[288,25718,25719,25721],{"class":290,"line":291},[288,25720,25382],{"class":2135},[288,25722,24851],{"class":347},[288,25724,25725,25727],{"class":290,"line":206},[288,25726,24883],{"class":347},[288,25728,24851],{"class":347},[288,25730,25731,25733],{"class":290,"line":1352},[288,25732,24961],{"class":347},[288,25734,24851],{"class":347},[288,25736,25737,25739,25741],{"class":290,"line":1367},[288,25738,25090],{"class":347},[288,25740,25409],{"class":403},[288,25742,24851],{"class":347},[288,25744,25745,25747],{"class":290,"line":1373},[288,25746,25021],{"class":347},[288,25748,24851],{"class":347},[288,25750,25751,25754],{"class":290,"line":1387},[288,25752,25753],{"class":347},"  --display_data=false",[288,25755,24851],{"class":347},[288,25757,25758,25760,25762],{"class":290,"line":1393},[288,25759,25441],{"class":347},[288,25761,25444],{"class":403},[288,25763,24851],{"class":347},[288,25765,25766,25768,25770],{"class":290,"line":1484},[288,25767,25458],{"class":347},[288,25769,25461],{"class":403},[288,25771,24851],{"class":347},[288,25773,25774,25777],{"class":290,"line":1490},[288,25775,25776],{"class":347},"  --policy.path=",[288,25778,25636],{"class":403},[1304,25780,25781],{},[246,25782,25783,25786],{},[25,25784,25785],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5299,25788,25554],{},{"title":205,"searchDepth":206,"depth":206,"links":25790},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25703,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25797,"title":25798,"body":25799,"description":214,"extension":215,"meta":25828,"navigation":217,"path":25829,"seo":25830,"stem":25831,"__hash__":25832},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25800,"toc":25826},[25801,25805,25808,25814,25817,25823],[10,25802,25804],{"id":25803},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25806,25807],{},"项目地址：",[19,25809,25810],{},[104,25811,25812],{"href":25812,"rel":25813},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[108],[19,25815,25816],{},"参考教程：",[19,25818,25819],{},[104,25820,25821],{"href":25821,"rel":25822},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[108],[19,25824,25825],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":205,"searchDepth":206,"depth":206,"links":25827},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25798,"description":214},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25834,"title":25835,"body":25836,"description":25840,"extension":215,"meta":25841,"navigation":217,"path":25842,"seo":25843,"stem":25844,"__hash__":25845},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25837,"toc":25838},[],{"title":205,"searchDepth":206,"depth":206,"links":25839},[],"act复现",{"category":23551},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25835,"description":25840},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25847,"title":25848,"body":25849,"description":205,"extension":215,"meta":26151,"navigation":217,"path":26152,"seo":26153,"stem":26154,"__hash__":26155},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25850,"toc":26143},[25851,25854,25858,25868,25875,25882,25885,25892,25895,25898,25902,25914,25918,25964,25967,25970,25973,25976,25979,25983,26021,26027,26031,26085,26090,26093,26096,26101,26104,26109,26112,26115,26119,26122,26125,26129],[10,25852,25848],{"id":25853},"_1简介",[260,25855,25857],{"id":25856},"_11什么是-docker","1.1什么是 Docker？",[19,25859,25860,25861,25864,25865],{},"Docker 是一个开源的 ",[448,25862,25863],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[448,25866,25867],{},"一次构建，到处运行。",[19,25869,25870,25871,25874],{},"“ ",[448,25872,25873],{},"一次构建，到处运行"," ”也就是说：",[243,25876,25877],{},[246,25878,25879],{},[448,25880,25881],{},"之前：",[19,25883,25884],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[243,25886,25887],{},[246,25888,25889],{},[448,25890,25891],{},"使用docker后：",[19,25893,25894],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25896,25897],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[260,25899,25901],{"id":25900},"_12它是怎么工作的","1.2.它是怎么工作的？",[1304,25903,25904,25907],{},[246,25905,25906],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[246,25908,25909,25910,25913],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[448,25911,25912],{},"无论在哪运行都一样稳定"," 。",[260,25915,25917],{"id":25916},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[436,25919,25920,25930],{},[439,25921,25922],{},[442,25923,25924,25927],{},[445,25925,25926],{"align":23909},"概念",[445,25928,25929],{"align":23909},"解释",[483,25931,25932,25940,25948,25956],{},[442,25933,25934,25937],{},[488,25935,25936],{"align":23909},"镜像",[488,25938,25939],{"align":23909},"Image，运行容器的模板，像是一个应用快照",[442,25941,25942,25945],{},[488,25943,25944],{"align":23909},"容器",[488,25946,25947],{"align":23909},"Container，运行中的镜像实例，有自己的文件系统、网络等",[442,25949,25950,25953],{},[488,25951,25952],{"align":23909},"Dockerfile",[488,25954,25955],{"align":23909},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[442,25957,25958,25961],{},[488,25959,25960],{"align":23909},"仓库",[488,25962,25963],{"align":23909},"Registry，存放镜像的地方，比如 Docker Hub",[19,25965,25966],{},"抽象化理解:",[19,25968,25969],{},"Docker镜像≈C++类",[19,25971,25972],{},"Docker容器≈C++类实例(即对象)",[19,25974,25975],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25977,25978],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[260,25980,25982],{"id":25981},"_14类比理解","1.4.类比理解",[436,25984,25985,25995],{},[439,25986,25987],{},[442,25988,25989,25992],{},[445,25990,25991],{"align":23909},"传统部署",[445,25993,25994],{"align":23909},"Docker部署",[483,25996,25997,26005,26013],{},[442,25998,25999,26002],{},[488,26000,26001],{"align":23909},"手动安装依赖、调试版本不一致问题",[488,26003,26004],{"align":23909},"一次打包环境和代码",[442,26006,26007,26010],{},[488,26008,26009],{"align":23909},"程序“裸奔”跑在系统上",[488,26011,26012],{"align":23909},"程序“穿着容器”隔离运行",[442,26014,26015,26018],{},[488,26016,26017],{"align":23909},"容易“在我电脑上能跑”",[488,26019,26020],{"align":23909},"保证“无论在哪都能跑”",[19,26022,26023,26024],{},"就像快递包裹： ",[448,26025,26026],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[260,26028,26030],{"id":26029},"_15docker-的核心优势","1.5.Docker 的核心优势",[436,26032,26033,26043],{},[439,26034,26035],{},[442,26036,26037,26040],{},[445,26038,26039],{"align":23909},"优势",[445,26041,26042],{"align":23909},"说明",[483,26044,26045,26053,26061,26069,26077],{},[442,26046,26047,26050],{},[488,26048,26049],{"align":23909},"轻量级",[488,26051,26052],{"align":23909},"基于系统内核共享，启动速度快，占资源少",[442,26054,26055,26058],{},[488,26056,26057],{"align":23909},"跨平台",[488,26059,26060],{"align":23909},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[442,26062,26063,26066],{},[488,26064,26065],{"align":23909},"易于迁移部署",[488,26067,26068],{"align":23909},"应用和环境一起封装，不怕依赖不一致",[442,26070,26071,26074],{},[488,26072,26073],{"align":23909},"易于版本控制",[488,26075,26076],{"align":23909},"镜像版本可控，支持回滚",[442,26078,26079,26082],{},[488,26080,26081],{"align":23909},"生态丰富",[488,26083,26084],{"align":23909},"Docker Hub 上有成千上万的现成镜像可用",[243,26086,26087],{},[246,26088,26089],{},"在Linux上可以几乎实现无性能损失。",[19,26091,26092],{},"docker里的发行版和本机共用Linux内核。",[19,26094,26095],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[243,26097,26098],{},[246,26099,26100],{},"可以快速部署在绝大多数Linux发行版",[19,26102,26103],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[243,26105,26106],{},[246,26107,26108],{},"配置环境简单",[19,26110,26111],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26113,26114],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[243,26116,26117],{},[246,26118,26081],{},[19,26120,26121],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26123,26124],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[260,26126,26128],{"id":26127},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1304,26130,26131,26134,26137,26140],{},[246,26132,26133],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[246,26135,26136],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[246,26138,26139],{},"微服务架构：每个服务一个容器，灵活组合",[246,26141,26142],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":205,"searchDepth":206,"depth":206,"links":26144},[26145,26146,26147,26148,26149,26150],{"id":25856,"depth":1352,"text":25857},{"id":25900,"depth":1352,"text":25901},{"id":25916,"depth":1352,"text":25917},{"id":25981,"depth":1352,"text":25982},{"id":26029,"depth":1352,"text":26030},{"id":26127,"depth":1352,"text":26128},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25848,"description":205},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26157,"title":26158,"body":26159,"description":205,"extension":215,"meta":26892,"navigation":217,"path":26893,"seo":26894,"stem":26895,"__hash__":26896},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26160,"toc":26887},[26161,26164,26168,26171,26174,26180,26186,26190,26199,26202,26259,26262,26313,26316,26399,26402,26439,26443,26454,26467,26474,26477,26557,26560,26610,26613,26636,26640,26647,26650,26666,26672,26675,26691,26697,26700,26716,26730,26736,26756,26762,26765,26777,26783,26786,26800,26806,26809,26829,26834,26837,26840,26844,26847,26850,26853,26860,26863,26866,26869,26874,26879,26884],[10,26162,26158],{"id":26163},"_2安装docker",[260,26165,26167],{"id":26166},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26169,26170],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26172,26173],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26175,26176],{},[104,26177,26178],{"href":26178,"rel":26179},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[108],[19,26181,26182],{},[104,26183,26184],{"href":26184,"rel":26185},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[108],[22171,26187,26189],{"id":26188},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26191,26192,26193,26198],{},"以下内容根据 ",[104,26194,26197],{"href":26195,"rel":26196},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[108],"官方文档"," 修改而来。",[19,26200,26201],{},"如果你过去安装过 docker，先删掉：",[280,26203,26205],{"className":23995,"code":26204,"language":23997,"meta":205,"style":205},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[25,26206,26207],{"__ignoreMap":205},[288,26208,26209,26211,26214,26217,26220,26223,26226,26229,26232,26235,26238,26241,26244,26247,26250,26253,26256],{"class":290,"line":291},[288,26210,3197],{"class":294},[288,26212,26213],{"class":298}," pkg ",[288,26215,26216],{"class":294},"in",[288,26218,26219],{"class":403}," docker.io",[288,26221,26222],{"class":403}," docker-doc",[288,26224,26225],{"class":403}," docker-compose",[288,26227,26228],{"class":403}," docker-compose-v2",[288,26230,26231],{"class":403}," podman-docker",[288,26233,26234],{"class":403}," containerd",[288,26236,26237],{"class":403}," runc",[288,26239,26240],{"class":298},"; ",[288,26242,26243],{"class":294},"do",[288,26245,26246],{"class":2135}," sudo",[288,26248,26249],{"class":403}," apt-get",[288,26251,26252],{"class":403}," remove",[288,26254,26255],{"class":298}," $pkg; ",[288,26257,26258],{"class":294},"done\n",[19,26260,26261],{},"首先安装依赖和GPG：",[280,26263,26267],{"className":26264,"code":26265,"language":26266,"meta":205,"style":205},"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",[25,26268,26269,26274,26279,26284,26289,26294,26299,26303,26308],{"__ignoreMap":205},[288,26270,26271],{"class":290,"line":291},[288,26272,26273],{},"# Add Docker's official GPG key:\n",[288,26275,26276],{"class":290,"line":206},[288,26277,26278],{},"sudo apt-get update\n",[288,26280,26281],{"class":290,"line":1352},[288,26282,26283],{},"sudo apt-get install ca-certificates curl\n",[288,26285,26286],{"class":290,"line":1367},[288,26287,26288],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[288,26290,26291],{"class":290,"line":1373},[288,26292,26293],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[288,26295,26296],{"class":290,"line":1387},[288,26297,26298],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[288,26300,26301],{"class":290,"line":1393},[288,26302,2572],{"emptyLinePlaceholder":217},[288,26304,26305],{"class":290,"line":1484},[288,26306,26307],{},"# 如果上面这行报错就弄下面这行\n",[288,26309,26310],{"class":290,"line":1490},[288,26311,26312],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26314,26315],{},"信任 Docker 的 GPG 公钥并添加仓库：",[280,26317,26319],{"className":23995,"code":26318,"language":23997,"meta":205,"style":205},"# 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",[25,26320,26321,26326,26332,26349,26382],{"__ignoreMap":205},[288,26322,26323],{"class":290,"line":291},[288,26324,26325],{"class":357},"# Add the repository to Apt sources:\n",[288,26327,26328,26330],{"class":290,"line":206},[288,26329,25298],{"class":347},[288,26331,24851],{"class":347},[288,26333,26334,26337,26340,26343,26346],{"class":290,"line":1352},[288,26335,26336],{"class":403},"  \"deb [arch=$(",[288,26338,26339],{"class":2135},"dpkg",[288,26341,26342],{"class":347}," --print-architecture",[288,26344,26345],{"class":403},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[288,26347,26348],{"class":347},"\\\n",[288,26350,26351,26354,26356,26358,26361,26364,26366,26368,26371,26373,26375,26378,26380],{"class":290,"line":1367},[288,26352,26353],{"class":403},"  \"",[288,26355,25272],{"class":298},[288,26357,855],{"class":347},[288,26359,26360],{"class":403}," \u002Fetc\u002Fos-release",[288,26362,26363],{"class":298}," && ",[288,26365,25298],{"class":347},[288,26367,9897],{"class":403},[288,26369,26370],{"class":298},"$VERSION_CODENAME",[288,26372,109],{"class":403},[288,26374,726],{"class":298},[288,26376,26377],{"class":403},"\" stable\"",[288,26379,25282],{"class":294},[288,26381,24851],{"class":347},[288,26383,26384,26387,26390,26393,26396],{"class":290,"line":1373},[288,26385,26386],{"class":2135},"  sudo",[288,26388,26389],{"class":403}," tee",[288,26391,26392],{"class":403}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[288,26394,26395],{"class":294}," >",[288,26397,26398],{"class":403}," \u002Fdev\u002Fnull\n",[19,26400,26401],{},"最后安装",[280,26403,26405],{"className":23995,"code":26404,"language":23997,"meta":205,"style":205},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26406,26407,26416],{"__ignoreMap":205},[288,26408,26409,26411,26413],{"class":290,"line":291},[288,26410,24749],{"class":2135},[288,26412,26249],{"class":403},[288,26414,26415],{"class":403}," update\n",[288,26417,26418,26420,26422,26424,26427,26430,26433,26436],{"class":290,"line":206},[288,26419,24749],{"class":2135},[288,26421,26249],{"class":403},[288,26423,24007],{"class":403},[288,26425,26426],{"class":403}," docker-ce",[288,26428,26429],{"class":403}," docker-ce-cli",[288,26431,26432],{"class":403}," containerd.io",[288,26434,26435],{"class":403}," docker-buildx-plugin",[288,26437,26438],{"class":403}," docker-compose-plugin\n",[22171,26440,26442],{"id":26441},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26444,26445,26446,26449,26450,26453],{},"查看自己自己包管理工具版本（dnf是 ",[448,26447,26448],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[448,26451,26452],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[280,26455,26457],{"className":23995,"code":26456,"language":23997,"meta":205,"style":205},"dnf --version\n",[25,26458,26459],{"__ignoreMap":205},[288,26460,26461,26464],{"class":290,"line":291},[288,26462,26463],{"class":2135},"dnf",[288,26465,26466],{"class":347}," --version\n",[19,26468,26192,26469,26473],{},[104,26470,26197],{"href":26471,"rel":26472},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[108]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26475,26476],{},"如果你之前安装过 docker，请先删掉",[280,26478,26480],{"className":23995,"code":26479,"language":23997,"meta":205,"style":205},"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",[25,26481,26482,26496,26503,26510,26517,26524,26531,26538,26545,26552],{"__ignoreMap":205},[288,26483,26484,26486,26489,26491,26494],{"class":290,"line":291},[288,26485,24749],{"class":2135},[288,26487,26488],{"class":403}," dnf",[288,26490,26252],{"class":403},[288,26492,26493],{"class":403}," docker",[288,26495,24851],{"class":347},[288,26497,26498,26501],{"class":290,"line":206},[288,26499,26500],{"class":403},"                  docker-client",[288,26502,24851],{"class":347},[288,26504,26505,26508],{"class":290,"line":1352},[288,26506,26507],{"class":403},"                  docker-client-latest",[288,26509,24851],{"class":347},[288,26511,26512,26515],{"class":290,"line":1367},[288,26513,26514],{"class":403},"                  docker-common",[288,26516,24851],{"class":347},[288,26518,26519,26522],{"class":290,"line":1373},[288,26520,26521],{"class":403},"                  docker-latest",[288,26523,24851],{"class":347},[288,26525,26526,26529],{"class":290,"line":1387},[288,26527,26528],{"class":403},"                  docker-latest-logrotate",[288,26530,24851],{"class":347},[288,26532,26533,26536],{"class":290,"line":1393},[288,26534,26535],{"class":403},"                  docker-logrotate",[288,26537,24851],{"class":347},[288,26539,26540,26543],{"class":290,"line":1484},[288,26541,26542],{"class":403},"                  docker-selinux",[288,26544,24851],{"class":347},[288,26546,26547,26550],{"class":290,"line":1490},[288,26548,26549],{"class":403},"                  docker-engine-selinux",[288,26551,24851],{"class":347},[288,26553,26554],{"class":290,"line":1502},[288,26555,26556],{"class":403},"                  docker-engine\n",[19,26558,26559],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[280,26561,26563],{"className":23995,"code":26562,"language":23997,"meta":205,"style":205},"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",[25,26564,26565,26579,26594],{"__ignoreMap":205},[288,26566,26567,26569,26571,26574,26576],{"class":290,"line":291},[288,26568,24749],{"class":2135},[288,26570,26488],{"class":403},[288,26572,26573],{"class":347}," -y",[288,26575,24007],{"class":403},[288,26577,26578],{"class":403}," dnf-plugins-core\n",[288,26580,26581,26583,26585,26588,26591],{"class":290,"line":206},[288,26582,24749],{"class":2135},[288,26584,26488],{"class":403},[288,26586,26587],{"class":403}," config-manager",[288,26589,26590],{"class":403}," addrepo",[288,26592,26593],{"class":347}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[288,26595,26596,26598,26601,26604,26607],{"class":290,"line":1352},[288,26597,24749],{"class":2135},[288,26599,26600],{"class":403}," sed",[288,26602,26603],{"class":347}," -i",[288,26605,26606],{"class":403}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[288,26608,26609],{"class":403}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26611,26612],{},"最后安装：",[280,26614,26616],{"className":23995,"code":26615,"language":23997,"meta":205,"style":205},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26617,26618],{"__ignoreMap":205},[288,26619,26620,26622,26624,26626,26628,26630,26632,26634],{"class":290,"line":291},[288,26621,24749],{"class":2135},[288,26623,26488],{"class":403},[288,26625,24007],{"class":403},[288,26627,26426],{"class":403},[288,26629,26429],{"class":403},[288,26631,26432],{"class":403},[288,26633,26435],{"class":403},[288,26635,26438],{"class":403},[260,26637,26639],{"id":26638},"_22配置环境","2.2.配置环境",[22171,26641,26643,26646],{"id":26642},"_221检查-docker-服务状态",[448,26644,26645],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26648,26649],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[280,26651,26653],{"className":23995,"code":26652,"language":23997,"meta":205,"style":205},"systemctl status docker\n",[25,26654,26655],{"__ignoreMap":205},[288,26656,26657,26660,26663],{"class":290,"line":291},[288,26658,26659],{"class":2135},"systemctl",[288,26661,26662],{"class":403}," status",[288,26664,26665],{"class":403}," docker\n",[22171,26667,26669,26646],{"id":26668},"_222启动-docker-服务",[448,26670,26671],{},"2.2.2.启动 Docker 服务",[19,26673,26674],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[280,26676,26678],{"className":23995,"code":26677,"language":23997,"meta":205,"style":205},"sudo systemctl start docker\n",[25,26679,26680],{"__ignoreMap":205},[288,26681,26682,26684,26687,26689],{"class":290,"line":291},[288,26683,24749],{"class":2135},[288,26685,26686],{"class":403}," systemctl",[288,26688,4356],{"class":403},[288,26690,26665],{"class":403},[22171,26692,26694,26646],{"id":26693},"_223设置-docker-开机自启",[448,26695,26696],{},"2.2.3.设置 Docker 开机自启",[19,26698,26699],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[280,26701,26703],{"className":23995,"code":26702,"language":23997,"meta":205,"style":205},"sudo systemctl enable docker\n",[25,26704,26705],{"__ignoreMap":205},[288,26706,26707,26709,26711,26714],{"class":290,"line":291},[288,26708,24749],{"class":2135},[288,26710,26686],{"class":403},[288,26712,26713],{"class":403}," enable",[288,26715,26665],{"class":403},[22171,26717,26719,13968,26722,13968,26727,26646],{"id":26718},"_224将用户添加到-docker-组",[448,26720,26721],{},"2.2.4.将用户添加到",[448,26723,26724],{},[25,26725,26726],{},"docker",[448,26728,26729],{},"组",[19,26731,26732,26733,26735],{},"使用以下命令将当前用户添加到 ",[25,26734,26726],{}," 组：",[280,26737,26739],{"className":23995,"code":26738,"language":23997,"meta":205,"style":205},"sudo usermod -aG docker $USER\n",[25,26740,26741],{"__ignoreMap":205},[288,26742,26743,26745,26748,26751,26753],{"class":290,"line":291},[288,26744,24749],{"class":2135},[288,26746,26747],{"class":403}," usermod",[288,26749,26750],{"class":347}," -aG",[288,26752,26493],{"class":403},[288,26754,26755],{"class":298}," $USER\n",[22171,26757,26759,26646],{"id":26758},"_225退出并重新登录",[448,26760,26761],{},"2.2.5.退出并重新登录",[19,26763,26764],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[280,26766,26768],{"className":23995,"code":26767,"language":23997,"meta":205,"style":205},"newgrp docker\n",[25,26769,26770],{"__ignoreMap":205},[288,26771,26772,26775],{"class":290,"line":291},[288,26773,26774],{"class":2135},"newgrp",[288,26776,26665],{"class":403},[22171,26778,26780,26646],{"id":26779},"_226重新启动-docker-服务如果需要",[448,26781,26782],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26784,26785],{},"确保 Docker 服务正在运行，可以使用以下命令：",[280,26787,26788],{"className":23995,"code":26677,"language":23997,"meta":205,"style":205},[25,26789,26790],{"__ignoreMap":205},[288,26791,26792,26794,26796,26798],{"class":290,"line":291},[288,26793,24749],{"class":2135},[288,26795,26686],{"class":403},[288,26797,4356],{"class":403},[288,26799,26665],{"class":403},[22171,26801,26803,26646],{"id":26802},"_227重启电脑后检查-docker-服务状态",[448,26804,26805],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26807,26808],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[280,26810,26812],{"className":23995,"code":26811,"language":23997,"meta":205,"style":205},"sudo reboot\nsystemctl status docker\n",[25,26813,26814,26821],{"__ignoreMap":205},[288,26815,26816,26818],{"class":290,"line":291},[288,26817,24749],{"class":2135},[288,26819,26820],{"class":403}," reboot\n",[288,26822,26823,26825,26827],{"class":290,"line":206},[288,26824,26659],{"class":2135},[288,26826,26662],{"class":403},[288,26828,26665],{"class":403},[19,26830,26831],{},[200,26832],{"alt":205,"src":26833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26835,26836],{},"第三行显示enabled说明开机自启动成功",[19,26838,26839],{},"按q退出",[260,26841,26843],{"id":26842},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26845,26846],{},"优先使用linux来使用docker是比较好的",[19,26848,26849],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26851,26852],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26854,26855,26856],{},"官方下载安装:",[104,26857,26858],{"href":26858,"rel":26859},"https:\u002F\u002Fwww.docker.com\u002F",[108],[19,26861,26862],{},"Windows的Docker显卡直通与USB直通:",[19,26864,26865],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26867,26868],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26870,26871],{},[200,26872],{"alt":205,"src":26873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26875,26876],{},[200,26877],{"alt":205,"src":26878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26880,26881],{},[200,26882],{"alt":205,"src":26883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5299,26885,26886],{},"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":205,"searchDepth":206,"depth":206,"links":26888},[26889,26890,26891],{"id":26166,"depth":1352,"text":26167},{"id":26638,"depth":1352,"text":26639},{"id":26842,"depth":1352,"text":26843},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26158,"description":205},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26898,"title":26899,"body":26900,"description":26907,"extension":215,"meta":27600,"navigation":217,"path":27601,"seo":27602,"stem":27603,"__hash__":27604},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26901,"toc":27594},[26902,26905,26908,26912,26917,26922,26925,26953,26958,26967,26970,26975,26979,26986,26991,26997,27001,27004,27008,27013,27105,27110,27128,27133,27154,27159,27175,27179,27184,27213,27218,27264,27269,27313,27321,27338,27343,27359,27364,27378,27381,27384,27387,27390,27419,27422,27427,27431,27434,27437,27443,27446,27449,27452,27514,27521,27526,27529,27547,27551,27554,27571,27574,27577,27591],[10,26903,26899],{"id":26904},"_3docker直通",[19,26906,26907],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[260,26909,26911],{"id":26910},"_31usb直通","3.1.USB直通",[19,26913,26914],{},[200,26915],{"alt":205,"src":26916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[243,26918,26919],{},[246,26920,26921],{},"方法一(不是很推荐新手)：",[19,26923,26924],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[280,26926,26928],{"className":23995,"code":26927,"language":23997,"meta":205,"style":205},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[25,26929,26930,26938,26943],{"__ignoreMap":205},[288,26931,26932,26935],{"class":290,"line":291},[288,26933,26934],{"class":2135},"ls",[288,26936,26937],{"class":403}," \u002Fdev\n",[288,26939,26940],{"class":290,"line":206},[288,26941,26942],{"class":357},"#例如\n",[288,26944,26945,26948,26950],{"class":290,"line":1352},[288,26946,26947],{"class":298},"--device",[288,26949,344],{"class":294},[288,26951,26952],{"class":403},"\u002Fdev\u002Ftty_USB0\n",[243,26954,26955],{"start":206},[246,26956,26957],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[280,26959,26961],{"className":23995,"code":26960,"language":23997,"meta":205,"style":205},"--privileged\n",[25,26962,26963],{"__ignoreMap":205},[288,26964,26965],{"class":290,"line":291},[288,26966,26960],{"class":2135},[19,26968,26969],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26971,26972],{},[200,26973],{"alt":205,"src":26974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[260,26976,26978],{"id":26977},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26980,26981,26982,26985],{},"NVIDIA Container Toolkit使用户 ",[448,26983,26984],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26987,26988],{},[200,26989],{"alt":205,"src":26990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26992,26993],{},[104,26994,26995],{"href":26995,"rel":26996},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[108],[22171,26998,27000],{"id":26999},"_321安装","3.2.1.安装",[19,27002,27003],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23083,27005,27007],{"id":27006},"_3211ubuntu","3.2.1.1.Ubuntu",[243,27009,27010],{},[246,27011,27012],{},"配置存储库 并更新",[280,27014,27016],{"className":23995,"code":27015,"language":23997,"meta":205,"style":205},"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",[25,27017,27018,27047,27067,27079,27091,27097],{"__ignoreMap":205},[288,27019,27020,27023,27026,27029,27031,27033,27036,27039,27042,27045],{"class":290,"line":291},[288,27021,27022],{"class":2135},"curl",[288,27024,27025],{"class":347}," -fsSL",[288,27027,27028],{"class":403}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[288,27030,25282],{"class":294},[288,27032,26246],{"class":2135},[288,27034,27035],{"class":403}," gpg",[288,27037,27038],{"class":347}," --dearmor",[288,27040,27041],{"class":347}," -o",[288,27043,27044],{"class":403}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[288,27046,24851],{"class":347},[288,27048,27049,27052,27054,27057,27060,27063,27065],{"class":290,"line":206},[288,27050,27051],{"class":298},"  && ",[288,27053,27022],{"class":2135},[288,27055,27056],{"class":347}," -s",[288,27058,27059],{"class":347}," -L",[288,27061,27062],{"class":403}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[288,27064,25282],{"class":294},[288,27066,24851],{"class":347},[288,27068,27069,27072,27075,27077],{"class":290,"line":1352},[288,27070,27071],{"class":2135},"    sed",[288,27073,27074],{"class":403}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[288,27076,25282],{"class":294},[288,27078,24851],{"class":347},[288,27080,27081,27084,27086,27089],{"class":290,"line":1367},[288,27082,27083],{"class":2135},"    sudo",[288,27085,26389],{"class":403},[288,27087,27088],{"class":403}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[288,27090,24851],{"class":347},[288,27092,27093,27095],{"class":290,"line":1373},[288,27094,27051],{"class":298},[288,27096,26348],{"class":347},[288,27098,27099,27101,27103],{"class":290,"line":1387},[288,27100,27083],{"class":2135},[288,27102,26249],{"class":403},[288,27104,26415],{"class":403},[243,27106,27107],{"start":206},[246,27108,27109],{},"安装nvidia-docker2",[280,27111,27113],{"className":23995,"code":27112,"language":23997,"meta":205,"style":205},"sudo apt-get install -y nvidia-docker2\n",[25,27114,27115],{"__ignoreMap":205},[288,27116,27117,27119,27121,27123,27125],{"class":290,"line":291},[288,27118,24749],{"class":2135},[288,27120,26249],{"class":403},[288,27122,24007],{"class":403},[288,27124,26573],{"class":347},[288,27126,27127],{"class":403}," nvidia-docker2\n",[243,27129,27130],{"start":1352},[246,27131,27132],{},"使用nvidia-ctk命令配置container runtime",[280,27134,27136],{"className":23995,"code":27135,"language":23997,"meta":205,"style":205},"sudo nvidia-ctk runtime configure --runtime=docker\n",[25,27137,27138],{"__ignoreMap":205},[288,27139,27140,27142,27145,27148,27151],{"class":290,"line":291},[288,27141,24749],{"class":2135},[288,27143,27144],{"class":403}," nvidia-ctk",[288,27146,27147],{"class":403}," runtime",[288,27149,27150],{"class":403}," configure",[288,27152,27153],{"class":347}," --runtime=docker\n",[243,27155,27156],{"start":1367},[246,27157,27158],{},"重启docker服务:",[280,27160,27162],{"className":23995,"code":27161,"language":23997,"meta":205,"style":205},"sudo systemctl restart docker\n",[25,27163,27164],{"__ignoreMap":205},[288,27165,27166,27168,27170,27173],{"class":290,"line":291},[288,27167,24749],{"class":2135},[288,27169,26686],{"class":403},[288,27171,27172],{"class":403}," restart",[288,27174,26665],{"class":403},[23083,27176,27178],{"id":27177},"_3212fedora","3.2.1.2.Fedora",[243,27180,27181],{},[246,27182,27183],{},"配置存储库",[280,27185,27187],{"className":23995,"code":27186,"language":23997,"meta":205,"style":205},"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",[25,27188,27189,27204],{"__ignoreMap":205},[288,27190,27191,27193,27195,27197,27200,27202],{"class":290,"line":291},[288,27192,27022],{"class":2135},[288,27194,27056],{"class":347},[288,27196,27059],{"class":347},[288,27198,27199],{"class":403}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[288,27201,25282],{"class":294},[288,27203,24851],{"class":347},[288,27205,27206,27208,27210],{"class":290,"line":206},[288,27207,24749],{"class":2135},[288,27209,26389],{"class":403},[288,27211,27212],{"class":403}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[243,27214,27215],{"start":206},[246,27216,27217],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[280,27219,27221],{"className":23995,"code":27220,"language":23997,"meta":205,"style":205},"# 如果是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",[25,27222,27223,27228,27242,27246,27251],{"__ignoreMap":205},[288,27224,27225],{"class":290,"line":291},[288,27226,27227],{"class":357},"# 如果是RHEL或者Rocky（DNF4）\n",[288,27229,27230,27232,27234,27236,27239],{"class":290,"line":206},[288,27231,24749],{"class":2135},[288,27233,26488],{"class":403},[288,27235,26587],{"class":403},[288,27237,27238],{"class":347}," --add-repo",[288,27240,27241],{"class":403}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[288,27243,27244],{"class":290,"line":1352},[288,27245,2572],{"emptyLinePlaceholder":217},[288,27247,27248],{"class":290,"line":1367},[288,27249,27250],{"class":357},"# 如果是Feodra41+（DNF5）\n",[288,27252,27253,27255,27257,27259,27261],{"class":290,"line":1373},[288,27254,24749],{"class":2135},[288,27256,26488],{"class":403},[288,27258,26587],{"class":403},[288,27260,26590],{"class":403},[288,27262,27263],{"class":347}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[243,27265,27266],{"start":1352},[246,27267,27268],{},"安装NVIDIA Container Toolki包",[280,27270,27272],{"className":23995,"code":27271,"language":23997,"meta":205,"style":205},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[25,27273,27274,27279,27292,27296,27301],{"__ignoreMap":205},[288,27275,27276],{"class":290,"line":291},[288,27277,27278],{"class":357},"# 如果是RHEL或者Rocky\n",[288,27280,27281,27283,27285,27287,27289],{"class":290,"line":206},[288,27282,24749],{"class":2135},[288,27284,26488],{"class":403},[288,27286,24007],{"class":403},[288,27288,26573],{"class":347},[288,27290,27291],{"class":403}," nvidia-container-toolkit\n",[288,27293,27294],{"class":290,"line":1352},[288,27295,2572],{"emptyLinePlaceholder":217},[288,27297,27298],{"class":290,"line":1367},[288,27299,27300],{"class":357},"# 如果是Fedora\n",[288,27302,27303,27305,27307,27309,27311],{"class":290,"line":1373},[288,27304,24749],{"class":2135},[288,27306,26488],{"class":403},[288,27308,24007],{"class":403},[288,27310,26573],{"class":347},[288,27312,27291],{"class":403},[243,27314,27315],{"start":1367},[246,27316,27317,27318,27320],{},"安装nvidia-docker2 ： 在Fedora上使用",[25,27319,26463],{},"进行安装",[280,27322,27324],{"className":23995,"code":27323,"language":23997,"meta":205,"style":205},"sudo dnf install -y nvidia-docker2\n",[25,27325,27326],{"__ignoreMap":205},[288,27327,27328,27330,27332,27334,27336],{"class":290,"line":291},[288,27329,24749],{"class":2135},[288,27331,26488],{"class":403},[288,27333,24007],{"class":403},[288,27335,26573],{"class":347},[288,27337,27127],{"class":403},[243,27339,27340],{"start":1373},[246,27341,27342],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[280,27344,27345],{"className":23995,"code":27135,"language":23997,"meta":205,"style":205},[25,27346,27347],{"__ignoreMap":205},[288,27348,27349,27351,27353,27355,27357],{"class":290,"line":291},[288,27350,24749],{"class":2135},[288,27352,27144],{"class":403},[288,27354,27147],{"class":403},[288,27356,27150],{"class":403},[288,27358,27153],{"class":347},[243,27360,27361],{"start":1387},[246,27362,27363],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[280,27365,27366],{"className":23995,"code":27161,"language":23997,"meta":205,"style":205},[25,27367,27368],{"__ignoreMap":205},[288,27369,27370,27372,27374,27376],{"class":290,"line":291},[288,27371,24749],{"class":2135},[288,27373,26686],{"class":403},[288,27375,27172],{"class":403},[288,27377,26665],{"class":403},[19,27379,27380],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27382,27383],{},"方法：",[19,27385,27386],{},"1️⃣nvidia-smi",[19,27388,27389],{},"2️⃣运行nvidia cuda 容器进行测试",[280,27391,27393],{"className":23995,"code":27392,"language":23997,"meta":205,"style":205},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[25,27394,27395],{"__ignoreMap":205},[288,27396,27397,27399,27401,27404,27407,27410,27413,27416],{"class":290,"line":291},[288,27398,24749],{"class":2135},[288,27400,26493],{"class":403},[288,27402,27403],{"class":403}," run",[288,27405,27406],{"class":347}," --rm",[288,27408,27409],{"class":347}," --gpus",[288,27411,27412],{"class":403}," all",[288,27414,27415],{"class":403}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[288,27417,27418],{"class":403}," nvidia-smi\n",[19,27420,27421],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27423,27424],{},[200,27425],{"alt":205,"src":27426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[260,27428,27430],{"id":27429},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27432,27433],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27435,27436],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27438,27439],{},[104,27440,27441],{"href":27441,"rel":27442},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[108],[19,27444,27445],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27447,27448],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27450,27451],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[436,27453,27454,27470],{},[439,27455,27456],{},[442,27457,27458,27461,27464,27467],{},[445,27459,27460],{"align":23909},"镜像类型",[445,27462,27463],{"align":23909},"适用场景",[445,27465,27466],{"align":23909},"示例标签",[445,27468,27469],{"align":23909},"大小",[483,27471,27472,27486,27500],{},[442,27473,27474,27477,27480,27483],{},[488,27475,27476],{"align":23909},"base",[488,27478,27479],{"align":23909},"仅需 CUDA 运行时库",[488,27481,27482],{"align":23909},"12.4.0-base-ubuntu22.04",[488,27484,27485],{"align":23909},"~240MB",[442,27487,27488,27491,27494,27497],{},[488,27489,27490],{"align":23909},"runtime",[488,27492,27493],{"align":23909},"部署编译后的应用（含数学库）",[488,27495,27496],{"align":23909},"12.4.0-runtime-ubuntu22.04",[488,27498,27499],{"align":23909},"~2GB",[442,27501,27502,27505,27508,27511],{},[488,27503,27504],{"align":23909},"devel",[488,27506,27507],{"align":23909},"开发环境（含编译工具）",[488,27509,27510],{"align":23909},"12.4.0-devel-ubuntu22.04",[488,27512,27513],{"align":23909},"~3GB",[19,27515,27516,27517,27520],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[25,27518,27519],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27522,27523],{},[200,27524],{"alt":205,"src":27525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27527,27528],{},"在dockerfile里就可以开头这么写：",[280,27530,27532],{"className":23995,"code":27531,"language":23997,"meta":205,"style":205},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[25,27533,27534,27539],{"__ignoreMap":205},[288,27535,27536],{"class":290,"line":291},[288,27537,27538],{"class":357},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[288,27540,27541,27544],{"class":290,"line":206},[288,27542,27543],{"class":2135},"FROM",[288,27545,27546],{"class":403}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[260,27548,27550],{"id":27549},"_34配置以太网","3.4.配置以太网",[19,27552,27553],{},"指定网络模式",[280,27555,27557],{"className":23995,"code":27556,"language":23997,"meta":205,"style":205},"--net=host \\\n",[25,27558,27559],{"__ignoreMap":205},[288,27560,27561,27564,27566,27569],{"class":290,"line":291},[288,27562,27563],{"class":298},"--net",[288,27565,344],{"class":294},[288,27567,27568],{"class":403},"host",[288,27570,24851],{"class":2135},[19,27572,27573],{},"启动参数里加上这行即可。具体在下方",[19,27575,27576],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1304,27578,27579,27582,27585,27588],{},[246,27580,27581],{},"--net=bridge:默认选项，表示连接到默认的网桥",[246,27583,27584],{},"--net=host:容器使用宿主机的网络",[246,27586,27587],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[246,27589,27590],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5299,27592,27593],{},"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":205,"searchDepth":206,"depth":206,"links":27595},[27596,27597,27598,27599],{"id":26910,"depth":1352,"text":26911},{"id":26977,"depth":1352,"text":26978},{"id":27429,"depth":1352,"text":27430},{"id":27549,"depth":1352,"text":27550},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26899,"description":26907},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27606,"title":27607,"body":27608,"description":27615,"extension":215,"meta":27621,"navigation":217,"path":27622,"seo":27623,"stem":27624,"__hash__":27625},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27609,"toc":27619},[27610,27613,27616],[10,27611,27607],{"id":27612},"_4dockerhub换源",[19,27614,27615],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27617,27618],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":205,"searchDepth":206,"depth":206,"links":27620},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27607,"description":27615},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27627,"title":27628,"body":27629,"description":205,"extension":215,"meta":28641,"navigation":217,"path":28642,"seo":28643,"stem":28644,"__hash__":28645},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27630,"toc":28636},[27631,27634,27638,27644,27648,27651,27991,27994,27997,28000,28005,28010,28013,28016,28019,28022,28041,28044,28055,28061,28243,28253,28269,28532,28534,28559,28574,28583,28633],[10,27632,27628],{"id":27633},"_5docker命令学习",[260,27635,27637],{"id":27636},"_51参考文档","5.1.参考文档",[19,27639,27640],{},[104,27641,27642],{"href":27642,"rel":27643},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[108],[260,27645,27647],{"id":27646},"_52常用命令","5.2.常用命令",[19,27649,27650],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[436,27652,27653,27666],{},[439,27654,27655],{},[442,27656,27657,27660,27663],{},[445,27658,27659],{"align":23909},"命令",[445,27661,27662],{"align":23909},"描述",[445,27664,27665],{"align":23909},"示例",[483,27667,27668,27679,27690,27701,27712,27723,27734,27745,27755,27766,27777,27788,27798,27809,27820,27831,27841,27851,27861,27871,27882,27893,27904,27915,27926,27937,27947,27958,27969,27980],{},[442,27669,27670,27673,27676],{},[488,27671,27672],{"align":23909},"docker run",[488,27674,27675],{"align":23909},"创建并启动一个新的容器。",[488,27677,27678],{"align":23909},"docker run -it ubuntu bash",[442,27680,27681,27684,27687],{},[488,27682,27683],{"align":23909},"docker build",[488,27685,27686],{"align":23909},"通过指定的 Dockerfile 创建一个新的镜像。",[488,27688,27689],{"align":23909},"docker build -t myimage .",[442,27691,27692,27695,27698],{},[488,27693,27694],{"align":23909},"docker pull",[488,27696,27697],{"align":23909},"从 Docker 仓库拉取镜像。",[488,27699,27700],{"align":23909},"docker pull ubuntu",[442,27702,27703,27706,27709],{},[488,27704,27705],{"align":23909},"docker push",[488,27707,27708],{"align":23909},"将本地镜像推送到 Docker 仓库。",[488,27710,27711],{"align":23909},"docker push myimage",[442,27713,27714,27717,27720],{},[488,27715,27716],{"align":23909},"docker stop",[488,27718,27719],{"align":23909},"停止一个正在运行的容器。",[488,27721,27722],{"align":23909},"docker stop container_id",[442,27724,27725,27728,27731],{},[488,27726,27727],{"align":23909},"docker start",[488,27729,27730],{"align":23909},"启动一个已经存在的容器。",[488,27732,27733],{"align":23909},"docker start container_id",[442,27735,27736,27739,27742],{},[488,27737,27738],{"align":23909},"docker restart",[488,27740,27741],{"align":23909},"重新启动容器。",[488,27743,27744],{"align":23909},"docker restart container_id",[442,27746,27747,27750,27753],{},[488,27748,27749],{"align":23909},"docker ps",[488,27751,27752],{"align":23909},"列出当前正在运行的容器。",[488,27754,27749],{"align":23909},[442,27756,27757,27760,27763],{},[488,27758,27759],{"align":23909},"docker rm",[488,27761,27762],{"align":23909},"删除一个或多个停止的容器。",[488,27764,27765],{"align":23909},"docker rm container_id",[442,27767,27768,27771,27774],{},[488,27769,27770],{"align":23909},"docker exec",[488,27772,27773],{"align":23909},"在一个正在运行的容器中执行命令。",[488,27775,27776],{"align":23909},"docker exec -it container_id bash",[442,27778,27779,27782,27785],{},[488,27780,27781],{"align":23909},"docker logs",[488,27783,27784],{"align":23909},"查看容器的日志输出。",[488,27786,27787],{"align":23909},"docker logs container_id",[442,27789,27790,27793,27796],{},[488,27791,27792],{"align":23909},"docker images",[488,27794,27795],{"align":23909},"列出本地所有镜像。",[488,27797,27792],{"align":23909},[442,27799,27800,27803,27806],{},[488,27801,27802],{"align":23909},"docker rmi",[488,27804,27805],{"align":23909},"删除一个或多个镜像。",[488,27807,27808],{"align":23909},"docker rmi myimage",[442,27810,27811,27814,27817],{},[488,27812,27813],{"align":23909},"docker network",[488,27815,27816],{"align":23909},"管理 Docker 网络。",[488,27818,27819],{"align":23909},"docker network ls",[442,27821,27822,27825,27828],{},[488,27823,27824],{"align":23909},"docker volume",[488,27826,27827],{"align":23909},"管理 Docker 数据卷。",[488,27829,27830],{"align":23909},"docker volume ls",[442,27832,27833,27836,27839],{},[488,27834,27835],{"align":23909},"docker-compose up",[488,27837,27838],{"align":23909},"启动 docker-compose.yml 中定义的所有服务。",[488,27840,27835],{"align":23909},[442,27842,27843,27846,27849],{},[488,27844,27845],{"align":23909},"docker-compose down",[488,27847,27848],{"align":23909},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[488,27850,27845],{"align":23909},[442,27852,27853,27856,27859],{},[488,27854,27855],{"align":23909},"docker info",[488,27857,27858],{"align":23909},"显示 Docker 系统的详细信息。",[488,27860,27855],{"align":23909},[442,27862,27863,27866,27869],{},[488,27864,27865],{"align":23909},"docker stats",[488,27867,27868],{"align":23909},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[488,27870,27865],{"align":23909},[442,27872,27873,27876,27879],{},[488,27874,27875],{"align":23909},"docker inspect",[488,27877,27878],{"align":23909},"查看容器或镜像的详细信息（JSON 格式）。",[488,27880,27881],{"align":23909},"docker inspect container_id",[442,27883,27884,27887,27890],{},[488,27885,27886],{"align":23909},"docker save",[488,27888,27889],{"align":23909},"将一个镜像保存为 tar 文件。",[488,27891,27892],{"align":23909},"docker save -o myimage.tar myimage",[442,27894,27895,27898,27901],{},[488,27896,27897],{"align":23909},"docker load",[488,27899,27900],{"align":23909},"从 tar 文件中加载镜像。",[488,27902,27903],{"align":23909},"docker load -i myimage.tar",[442,27905,27906,27909,27912],{},[488,27907,27908],{"align":23909},"docker tag",[488,27910,27911],{"align":23909},"为镜像添加标签（tag）。",[488,27913,27914],{"align":23909},"docker tag myimage myimage:v1",[442,27916,27917,27920,27923],{},[488,27918,27919],{"align":23909},"docker buildx build",[488,27921,27922],{"align":23909},"使用 Buildx 构建多架构镜像。",[488,27924,27925],{"align":23909},"docker buildx build -t myimage .",[442,27927,27928,27931,27934],{},[488,27929,27930],{"align":23909},"docker buildx create",[488,27932,27933],{"align":23909},"创建一个新的 Buildx 构建实例。",[488,27935,27936],{"align":23909},"docker buildx create –use",[442,27938,27939,27942,27945],{},[488,27940,27941],{"align":23909},"docker buildx ls",[488,27943,27944],{"align":23909},"列出所有可用的 Buildx 构建实例。",[488,27946,27941],{"align":23909},[442,27948,27949,27952,27955],{},[488,27950,27951],{"align":23909},"docker buildx use",[488,27953,27954],{"align":23909},"设置当前的 Buildx 构建实例。",[488,27956,27957],{"align":23909},"docker buildx use mybuilder",[442,27959,27960,27963,27966],{},[488,27961,27962],{"align":23909},"docker buildx bake",[488,27964,27965],{"align":23909},"使用 Bake 文件批量构建镜像。",[488,27967,27968],{"align":23909},"docker buildx bake -f bake.hcl",[442,27970,27971,27974,27977],{},[488,27972,27973],{"align":23909},"docker buildx build –push",[488,27975,27976],{"align":23909},"构建镜像并推送到镜像仓库。",[488,27978,27979],{"align":23909},"docker buildx build –push -t myimage .",[442,27981,27982,27985,27988],{},[488,27983,27984],{"align":23909},"docker buildx build –platform",[488,27986,27987],{"align":23909},"构建镜像并为多个平台生成支持。",[488,27989,27990],{"align":23909},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27992,27993],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27995,27996],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27998,27999],{},"docker images 可以查看已经下载的镜像",[19,28001,28002],{},[200,28003],{"alt":205,"src":28004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28006,28007],{},[448,28008,28009],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28011,28012],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28014,28015],{},"docker container logs 查看容器日志",[19,28017,28018],{},"docker top 查看容器里的进程",[19,28020,28021],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[280,28023,28025],{"className":23995,"code":28024,"language":23997,"meta":205,"style":205},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[25,28026,28027],{"__ignoreMap":205},[288,28028,28029,28032,28035,28038],{"class":290,"line":291},[288,28030,28031],{"class":2135},"如：docker",[288,28033,28034],{"class":403}," cp",[288,28036,28037],{"class":403}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[288,28039,28040],{"class":403}," \u002Fmydata\u002Fnginx\n",[19,28042,28043],{},"docker run时在启动容器的时候会有几个常用的选项：",[1304,28045,28046,28049,28052],{},[246,28047,28048],{},"-d选项：表示后台运行",[246,28050,28051],{},"-P选项：随机端口映射",[246,28053,28054],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[260,28056,28058],{"id":28057},"_53run命令的参数非常重要",[448,28059,28060],{},"5.3.run命令的参数（非常重要）",[436,28062,28063,28076],{},[439,28064,28065],{},[442,28066,28067,28070,28073],{},[445,28068,28069],{"align":23909},"参数\u002F配置",[445,28071,28072],{"align":23909},"功能说明",[445,28074,28075],{"align":23909},"重要性与参考依据",[483,28077,28078,28089,28100,28111,28122,28133,28144,28155,28166,28177,28188,28199,28210,28221,28232],{},[442,28079,28080,28083,28086],{},[488,28081,28082],{"align":23909},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[488,28084,28085],{"align":23909},"指定容器名称，便于后续管理",[488,28087,28088],{"align":23909},"替代随机生成的容器名。",[442,28090,28091,28094,28097],{},[488,28092,28093],{"align":23909},"–gpus all",[488,28095,28096],{"align":23909},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[488,28098,28099],{"align":23909},"用于CUDA加速等GPU依赖任务。",[442,28101,28102,28105,28108],{},[488,28103,28104],{"align":23909},"-e NVIDIA_DRIVER_CAPABILITIES=all",[488,28106,28107],{"align":23909},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[488,28109,28110],{"align":23909},"确保容器内GPU功能完整67。",[442,28112,28113,28116,28119],{},[488,28114,28115],{"align":23909},"-dit",[488,28117,28118],{"align":23909},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[488,28120,28121],{"align":23909},"允许容器在后台运行并支持交互操作。",[442,28123,28124,28127,28130],{},[488,28125,28126],{"align":23909},"–privileged",[488,28128,28129],{"align":23909},"赋予容器完全主机权限（可访问设备、内核模块等）",[488,28131,28132],{"align":23909},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[442,28134,28135,28138,28141],{},[488,28136,28137],{"align":23909},"–net=host",[488,28139,28140],{"align":23909},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[488,28142,28143],{"align":23909},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[442,28145,28146,28149,28152],{},[488,28147,28148],{"align":23909},"–group-add audio–group-add video–group-add dialout",[488,28150,28151],{"align":23909},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[488,28153,28154],{"align":23909},"避免权限问题（如避免无法调用摄像头、麦克风）。",[442,28156,28157,28160,28163],{},[488,28158,28159],{"align":23909},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[488,28161,28162],{"align":23909},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[488,28164,28165],{"align":23909},"支持容器内运行图形界面应用（如OpenCV可视化）。",[442,28167,28168,28171,28174],{},[488,28169,28170],{"align":23909},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[488,28172,28173],{"align":23909},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[488,28175,28176],{"align":23909},"实现容器内图形显示。",[442,28178,28179,28182,28185],{},[488,28180,28181],{"align":23909},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[488,28183,28184],{"align":23909},"挂载X11认证文件（只读）",[488,28186,28187],{"align":23909},"确保容器有权连接宿主机显示服务。",[442,28189,28190,28193,28196],{},[488,28191,28192],{"align":23909},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[488,28194,28195],{"align":23909},"挂载Wayland显示协议相关目录",[488,28197,28198],{"align":23909},"支持Wayland协议的图形显示。",[442,28200,28201,28204,28207],{},[488,28202,28203],{"align":23909},"–ulimit nofile=1024:524288",[488,28205,28206],{"align":23909},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[488,28208,28209],{"align":23909},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[442,28211,28212,28215,28218],{},[488,28213,28214],{"align":23909},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[488,28216,28217],{"align":23909},"挂载宿主机用户目录到容器内同名路径",[488,28219,28220],{"align":23909},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[442,28222,28223,28226,28229],{},[488,28224,28225],{"align":23909},"-w \u002Fhome\u002Ftungchiahui",[488,28227,28228],{"align":23909},"设置容器启动后的默认工作目录",[488,28230,28231],{"align":23909},"直接进入项目路径，方便执行命令2324。",[442,28233,28234,28237,28240],{},[488,28235,28236],{"align":23909},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[488,28238,28239],{"align":23909},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[488,28241,28242],{"align":23909},"提供预配置的深度学习与机器人开发环境。",[19,28244,28245,28246,28248,28249,28252],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[25,28247,24749],{},"加不加",[25,28250,28251],{},"sudo -E","都无所谓。",[19,28254,28255,28256,28258,28259,28261,28262,28265,28266,28268],{},"用户已经被加到docker组了，不用",[25,28257,24749],{},"也行跑，其次，",[25,28260,24749],{},"运行的话，你的",[25,28263,28264],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[25,28267,28264],{},"更不可能变了。",[280,28270,28272],{"className":23995,"code":28271,"language":23997,"meta":205,"style":205},"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",[25,28273,28274,28287,28297,28307,28319,28326,28333,28340,28350,28359,28368,28382,28394,28406,28415,28425,28434,28449,28482,28509,28520,28527],{"__ignoreMap":205},[288,28275,28276,28278,28280,28282,28285],{"class":290,"line":291},[288,28277,24749],{"class":2135},[288,28279,26493],{"class":403},[288,28281,27403],{"class":403},[288,28283,28284],{"class":347}," --name=ros_opencv_cuda",[288,28286,24851],{"class":347},[288,28288,28289,28292,28295],{"class":290,"line":206},[288,28290,28291],{"class":298},"--gpus ",[288,28293,28294],{"class":403},"all",[288,28296,24851],{"class":347},[288,28298,28299,28302,28305],{"class":290,"line":1352},[288,28300,28301],{"class":298},"-e ",[288,28303,28304],{"class":403},"NVIDIA_DRIVER_CAPABILITIES=all",[288,28306,24851],{"class":347},[288,28308,28309,28311,28314,28317],{"class":290,"line":1367},[288,28310,28301],{"class":298},[288,28312,28313],{"class":403},"DISPLAY=",[288,28315,28316],{"class":298},"$DISPLAY ",[288,28318,26348],{"class":347},[288,28320,28321,28324],{"class":290,"line":1373},[288,28322,28323],{"class":298},"-dit ",[288,28325,26348],{"class":347},[288,28327,28328,28331],{"class":290,"line":1387},[288,28329,28330],{"class":298},"--privileged ",[288,28332,26348],{"class":347},[288,28334,28335,28338],{"class":290,"line":1393},[288,28336,28337],{"class":298},"--net=host ",[288,28339,26348],{"class":347},[288,28341,28342,28345,28348],{"class":290,"line":1484},[288,28343,28344],{"class":298},"--group-add ",[288,28346,28347],{"class":403},"audio",[288,28349,24851],{"class":347},[288,28351,28352,28354,28357],{"class":290,"line":1490},[288,28353,28344],{"class":298},[288,28355,28356],{"class":403},"video",[288,28358,24851],{"class":347},[288,28360,28361,28363,28366],{"class":290,"line":1502},[288,28362,28344],{"class":298},[288,28364,28365],{"class":403},"dialout",[288,28367,24851],{"class":347},[288,28369,28370,28372,28375,28377,28380],{"class":290,"line":1784},[288,28371,28301],{"class":298},[288,28373,28374],{"class":403},"XAUTHORITY=",[288,28376,28264],{"class":298},[288,28378,28379],{"class":403},"\u002F.Xauthority",[288,28381,24851],{"class":347},[288,28383,28384,28386,28389,28392],{"class":290,"line":1789},[288,28385,28301],{"class":298},[288,28387,28388],{"class":403},"WAYLAND_DISPLAY=",[288,28390,28391],{"class":298},"$WAYLAND_DISPLAY ",[288,28393,26348],{"class":347},[288,28395,28396,28398,28401,28404],{"class":290,"line":1795},[288,28397,28301],{"class":298},[288,28399,28400],{"class":403},"XDG_RUNTIME_DIR=",[288,28402,28403],{"class":298},"$XDG_RUNTIME_DIR ",[288,28405,26348],{"class":347},[288,28407,28408,28410,28413],{"class":290,"line":1800},[288,28409,28301],{"class":298},[288,28411,28412],{"class":403},"QT_QPA_PLATFORM=xcb",[288,28414,24851],{"class":347},[288,28416,28417,28420,28423],{"class":290,"line":1814},[288,28418,28419],{"class":298},"-v ",[288,28421,28422],{"class":403},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[288,28424,24851],{"class":347},[288,28426,28427,28429,28432],{"class":290,"line":1819},[288,28428,28419],{"class":298},[288,28430,28431],{"class":403},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[288,28433,24851],{"class":347},[288,28435,28436,28439,28442,28444,28447],{"class":290,"line":1825},[288,28437,28438],{"class":298},"-v $HOME",[288,28440,28441],{"class":403},"\u002F.Xauthority:",[288,28443,28264],{"class":298},[288,28445,28446],{"class":403},"\u002F.Xauthority:ro",[288,28448,24851],{"class":347},[288,28450,28451,28453,28456,28458,28461,28464,28466,28469,28471,28473,28475,28477,28480],{"class":290,"line":1846},[288,28452,28419],{"class":298},[288,28454,28455],{"class":403},"\u002Frun\u002Fuser\u002F",[288,28457,25272],{"class":298},[288,28459,28460],{"class":2135},"id",[288,28462,28463],{"class":347}," -u",[288,28465,726],{"class":298},[288,28467,28468],{"class":403},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[288,28470,25272],{"class":298},[288,28472,28460],{"class":2135},[288,28474,28463],{"class":347},[288,28476,726],{"class":298},[288,28478,28479],{"class":403},"\u002Fwayland-0",[288,28481,24851],{"class":347},[288,28483,28484,28486,28488,28490,28492,28494,28496,28499,28501,28503,28505,28507],{"class":290,"line":1851},[288,28485,28419],{"class":298},[288,28487,28455],{"class":403},[288,28489,25272],{"class":298},[288,28491,28460],{"class":2135},[288,28493,28463],{"class":347},[288,28495,726],{"class":298},[288,28497,28498],{"class":403},":\u002Frun\u002Fuser\u002F",[288,28500,25272],{"class":298},[288,28502,28460],{"class":2135},[288,28504,28463],{"class":347},[288,28506,13887],{"class":298},[288,28508,26348],{"class":347},[288,28510,28511,28513,28515,28518],{"class":290,"line":1865},[288,28512,28438],{"class":298},[288,28514,1156],{"class":403},[288,28516,28517],{"class":298},"$HOME ",[288,28519,26348],{"class":347},[288,28521,28522,28525],{"class":290,"line":1870},[288,28523,28524],{"class":298},"-w $HOME ",[288,28526,26348],{"class":347},[288,28528,28529],{"class":290,"line":1899},[288,28530,28531],{"class":298},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28533,9198],{},[243,28535,28536,28544,28547,28550],{},[246,28537,28538,13968,28540,28543],{},[25,28539,28304],{},[25,28541,28542],{},"--gpus all","没有英伟达显卡请注释。",[246,28545,28546],{},"--name后面请自己为容器起名。",[246,28548,28549],{},"最后一行仓库名称请你自己找对应的镜像填上。",[246,28551,28552,28553,28558],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23726,28554,28555],{},[448,28556,28557],{},"请不要加","。",[280,28560,28562],{"className":23995,"code":28561,"language":23997,"meta":205,"style":205},"--ulimit nofile=1024:524288 \\\n",[25,28563,28564],{"__ignoreMap":205},[288,28565,28566,28569,28572],{"class":290,"line":291},[288,28567,28568],{"class":2135},"--ulimit",[288,28570,28571],{"class":403}," nofile=1024:524288",[288,28573,24851],{"class":347},[19,28575,28576,28577,28582],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23726,28578,28579],{},[448,28580,28581],{},"不建议","**.**",[280,28584,28586],{"className":23995,"code":28585,"language":23997,"meta":205,"style":205},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[25,28587,28588,28615,28624],{"__ignoreMap":205},[288,28589,28590,28593,28596,28598,28600,28602,28604,28606,28608,28611,28613],{"class":290,"line":291},[288,28591,28592],{"class":2135},"--user",[288,28594,28595],{"class":298}," $(",[288,28597,28460],{"class":2135},[288,28599,28463],{"class":347},[288,28601,726],{"class":298},[288,28603,1156],{"class":403},[288,28605,25272],{"class":298},[288,28607,28460],{"class":2135},[288,28609,28610],{"class":347}," -g",[288,28612,13887],{"class":298},[288,28614,26348],{"class":347},[288,28616,28617,28619,28622],{"class":290,"line":206},[288,28618,28419],{"class":298},[288,28620,28621],{"class":403},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[288,28623,24851],{"class":347},[288,28625,28626,28628,28631],{"class":290,"line":1352},[288,28627,28419],{"class":298},[288,28629,28630],{"class":403},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[288,28632,24851],{"class":347},[5299,28634,28635],{},"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":205,"searchDepth":206,"depth":206,"links":28637},[28638,28639,28640],{"id":27636,"depth":1352,"text":27637},{"id":27646,"depth":1352,"text":27647},{"id":28057,"depth":1352,"text":28060},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27628,"description":205},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28647,"title":28648,"body":28649,"description":205,"extension":215,"meta":30272,"navigation":217,"path":30273,"seo":30274,"stem":30275,"__hash__":30276},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28650,"toc":30267},[28651,28654,28658,28661,28883,28887,28891,28894,29000,29005,29008,29013,29016,29021,29024,29029,29032,29044,29047,29052,29059,29087,29094,29170,29175,29178,29201,29203,29278,29283,29286,29290,29298,29303,29308,29312,29323,29329,29332,29335,29359,29362,29365,29393,29396,29399,29864,29867,29872,29877,29881,29904,29909,29913,29917,29920,29923,29926,29953,29956,29959,29977,29980,29983,30005,30013,30018,30023,30027,30030,30033,30036,30039,30084,30087,30105,30108,30113,30116,30137,30140,30196,30199,30204,30208,30211,30218,30221,30224,30229,30232,30248,30251,30264],[10,28652,28648],{"id":28653},"_6手动创建docker镜像",[260,28655,28657],{"id":28656},"_61dockerfile","6.1.DockerFile",[19,28659,28660],{},"常用命令：",[436,28662,28663,28674],{},[439,28664,28665],{},[442,28666,28667,28670,28672],{},[445,28668,28669],{"align":23909},"指令",[445,28671,26042],{"align":23909},[445,28673,27665],{"align":23909},[483,28675,28676,28686,28702,28713,28724,28735,28746,28757,28768,28782,28796,28807,28821,28832,28843,28857,28872],{},[442,28677,28678,28680,28683],{},[488,28679,27543],{"align":23909},[488,28681,28682],{"align":23909},"指定基础镜像，是 Dockerfile 的起点",[488,28684,28685],{"align":23909},"FROM ubuntu:22.04",[442,28687,28688,28691,28694],{},[488,28689,28690],{"align":23909},"LABEL",[488,28692,28693],{"align":23909},"添加元数据（如作者、版本等）",[488,28695,28696,28697,28701],{"align":23909},"LABEL maintainer=”",[104,28698,28700],{"href":28699},"mailto:you@example.com","you@example.com","”",[442,28703,28704,28707,28710],{},[488,28705,28706],{"align":23909},"ENV",[488,28708,28709],{"align":23909},"设置环境变量",[488,28711,28712],{"align":23909},"ENV PORT=8080",[442,28714,28715,28718,28721],{},[488,28716,28717],{"align":23909},"ARG",[488,28719,28720],{"align":23909},"构建参数，只在构建期间可用",[488,28722,28723],{"align":23909},"ARG VERSION=1.0",[442,28725,28726,28729,28732],{},[488,28727,28728],{"align":23909},"RUN",[488,28730,28731],{"align":23909},"构建镜像时运行命令",[488,28733,28734],{"align":23909},"RUN apt-get update && apt-get install -y curl",[442,28736,28737,28740,28743],{},[488,28738,28739],{"align":23909},"COPY",[488,28741,28742],{"align":23909},"复制文件到镜像中",[488,28744,28745],{"align":23909},"COPY . \u002Fapp",[442,28747,28748,28751,28754],{},[488,28749,28750],{"align":23909},"ADD",[488,28752,28753],{"align":23909},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[488,28755,28756],{"align":23909},"ADD archive.tar.gz \u002Fdata\u002F",[442,28758,28759,28762,28765],{},[488,28760,28761],{"align":23909},"WORKDIR",[488,28763,28764],{"align":23909},"设置工作目录",[488,28766,28767],{"align":23909},"WORKDIR \u002Fopt",[442,28769,28770,28773,28776],{},[488,28771,28772],{"align":23909},"CMD",[488,28774,28775],{"align":23909},"设置容器启动时默认命令（可被 docker run 覆盖）",[488,28777,28778,28779],{"align":23909},"CMD ",[288,28780,28781],{},"“node”, “index.js”",[442,28783,28784,28787,28790],{},[488,28785,28786],{"align":23909},"ENTRYPOINT",[488,28788,28789],{"align":23909},"设置容器启动时固定命令（通常用于 CLI 工具等）",[488,28791,28792,28793],{"align":23909},"ENTRYPOINT ",[288,28794,28795],{},"“python3”",[442,28797,28798,28801,28804],{},[488,28799,28800],{"align":23909},"EXPOSE",[488,28802,28803],{"align":23909},"声明镜像内服务监听的端口（不会自动映射）",[488,28805,28806],{"align":23909},"EXPOSE 80",[442,28808,28809,28812,28815],{},[488,28810,28811],{"align":23909},"VOLUME",[488,28813,28814],{"align":23909},"声明数据卷挂载点",[488,28816,28817,28818],{"align":23909},"VOLUME ",[288,28819,28820],{},"“\u002Fdata”",[442,28822,28823,28826,28829],{},[488,28824,28825],{"align":23909},"USER",[488,28827,28828],{"align":23909},"设置后续命令执行的用户",[488,28830,28831],{"align":23909},"USER appuser",[442,28833,28834,28837,28840],{},[488,28835,28836],{"align":23909},"ONBUILD",[488,28838,28839],{"align":23909},"当镜像作为其他镜像基础镜像时触发的构建指令",[488,28841,28842],{"align":23909},"ONBUILD COPY . \u002Fsrc",[442,28844,28845,28848,28851],{},[488,28846,28847],{"align":23909},"SHELL",[488,28849,28850],{"align":23909},"更改默认 shell，比如将 sh -c 改为 bash -c",[488,28852,28853,28854],{"align":23909},"SHELL ",[288,28855,28856],{},"“\u002Fbin\u002Fbash”, “-c”",[442,28858,28859,28862,28865],{},[488,28860,28861],{"align":23909},"HEALTHCHECK",[488,28863,28864],{"align":23909},"定义容器运行时的健康检查命令",[488,28866,28867,28868],{"align":23909},"`HEALTHCHECK CMD curl –fail ",[104,28869,28870],{"href":28870,"rel":28871},"http:\u002F\u002Flocalhost:8080",[108],[442,28873,28874,28877,28880],{},[488,28875,28876],{"align":23909},"STOPSIGNAL",[488,28878,28879],{"align":23909},"容器停止时发送的信号",[488,28881,28882],{"align":23909},"STOPSIGNAL SIGKILL",[260,28884,28886],{"id":28885},"_62自己创建容器","6.2.自己创建容器",[22171,28888,28890],{"id":28889},"_621手动创建","6.2.1.手动创建",[19,28892,28893],{},"在x86电脑上编译x86的：",[280,28895,28897],{"className":23995,"code":28896,"language":23997,"meta":205,"style":205},"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",[25,28898,28899,28915,28919,28932,28936,28949,28953,28966,28970,28983,28987],{"__ignoreMap":205},[288,28900,28901,28903,28906,28909,28912],{"class":290,"line":291},[288,28902,26726],{"class":2135},[288,28904,28905],{"class":403}," build",[288,28907,28908],{"class":347}," -t",[288,28910,28911],{"class":403}," ros-melodic-cuda118-cudnn8-bionic:latest",[288,28913,28914],{"class":403}," .\n",[288,28916,28917],{"class":290,"line":206},[288,28918,2572],{"emptyLinePlaceholder":217},[288,28920,28921,28923,28925,28927,28930],{"class":290,"line":1352},[288,28922,26726],{"class":2135},[288,28924,28905],{"class":403},[288,28926,28908],{"class":347},[288,28928,28929],{"class":403}," ros-noetic-focal:latest",[288,28931,28914],{"class":403},[288,28933,28934],{"class":290,"line":1367},[288,28935,2572],{"emptyLinePlaceholder":217},[288,28937,28938,28940,28942,28944,28947],{"class":290,"line":1373},[288,28939,26726],{"class":2135},[288,28941,28905],{"class":403},[288,28943,28908],{"class":347},[288,28945,28946],{"class":403}," ros-humble-jammy:latest",[288,28948,28914],{"class":403},[288,28950,28951],{"class":290,"line":1387},[288,28952,2572],{"emptyLinePlaceholder":217},[288,28954,28955,28957,28959,28961,28964],{"class":290,"line":1393},[288,28956,26726],{"class":2135},[288,28958,28905],{"class":403},[288,28960,28908],{"class":347},[288,28962,28963],{"class":403}," ros-jazzy-noble:latest",[288,28965,28914],{"class":403},[288,28967,28968],{"class":290,"line":1484},[288,28969,2572],{"emptyLinePlaceholder":217},[288,28971,28972,28974,28976,28978,28981],{"class":290,"line":1490},[288,28973,26726],{"class":2135},[288,28975,28905],{"class":403},[288,28977,28908],{"class":347},[288,28979,28980],{"class":403}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[288,28982,28914],{"class":403},[288,28984,28985],{"class":290,"line":1502},[288,28986,2572],{"emptyLinePlaceholder":217},[288,28988,28989,28991,28993,28995,28998],{"class":290,"line":1784},[288,28990,26726],{"class":2135},[288,28992,28905],{"class":403},[288,28994,28908],{"class":347},[288,28996,28997],{"class":403}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[288,28999,28914],{"class":403},[19,29001,29002],{},[200,29003],{"alt":205,"src":29004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29006,29007],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29009,29010],{},[200,29011],{"alt":205,"src":29012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29014,29015],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[243,29017,29018],{},[246,29019,29020],{},"创建 Docker Hub 账户",[19,29022,29023],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[243,29025,29026],{"start":206},[246,29027,29028],{},"登录 Docker Hub",[19,29030,29031],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[280,29033,29035],{"className":23995,"code":29034,"language":23997,"meta":205,"style":205},"docker login\n",[25,29036,29037],{"__ignoreMap":205},[288,29038,29039,29041],{"class":290,"line":291},[288,29040,26726],{"class":2135},[288,29042,29043],{"class":403}," login\n",[19,29045,29046],{},"输入你的 Docker Hub 用户名和密码进行验证。",[243,29048,29049],{},[246,29050,29051],{},"为你的镜像打标签",[19,29053,29054,29055,29058],{},"Docker Hub 使用 ",[25,29056,29057],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[280,29060,29062],{"className":23995,"code":29061,"language":23997,"meta":205,"style":205},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[25,29063,29064],{"__ignoreMap":205},[288,29065,29066,29068,29071,29073,29076,29079,29082,29084],{"class":290,"line":291},[288,29067,26726],{"class":2135},[288,29069,29070],{"class":403}," tag",[288,29072,28963],{"class":403},[288,29074,29075],{"class":294}," \u003C",[288,29077,29078],{"class":403},"你的用户",[288,29080,29081],{"class":298},"名",[288,29083,1257],{"class":294},[288,29085,29086],{"class":403},"\u002Fros-jazzy-noble:latest\n",[19,29088,29089,29090,29093],{},"例如，如果你的 Docker Hub 用户名是 ",[25,29091,29092],{},"tungchiahui","，你应该执行：",[280,29095,29097],{"className":23995,"code":29096,"language":23997,"meta":205,"style":205},"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",[25,29098,29099,29110,29114,29125,29129,29140,29144,29155,29159],{"__ignoreMap":205},[288,29100,29101,29103,29105,29107],{"class":290,"line":291},[288,29102,26726],{"class":2135},[288,29104,29070],{"class":403},[288,29106,28929],{"class":403},[288,29108,29109],{"class":403}," tungchiahui\u002Fros-noetic-focal:latest\n",[288,29111,29112],{"class":290,"line":206},[288,29113,2572],{"emptyLinePlaceholder":217},[288,29115,29116,29118,29120,29122],{"class":290,"line":1352},[288,29117,26726],{"class":2135},[288,29119,29070],{"class":403},[288,29121,28946],{"class":403},[288,29123,29124],{"class":403}," tungchiahui\u002Fros-humble-jammy:latest\n",[288,29126,29127],{"class":290,"line":1367},[288,29128,2572],{"emptyLinePlaceholder":217},[288,29130,29131,29133,29135,29137],{"class":290,"line":1373},[288,29132,26726],{"class":2135},[288,29134,29070],{"class":403},[288,29136,28963],{"class":403},[288,29138,29139],{"class":403}," tungchiahui\u002Fros-jazzy-noble:latest\n",[288,29141,29142],{"class":290,"line":1387},[288,29143,2572],{"emptyLinePlaceholder":217},[288,29145,29146,29148,29150,29152],{"class":290,"line":1393},[288,29147,26726],{"class":2135},[288,29149,29070],{"class":403},[288,29151,28980],{"class":403},[288,29153,29154],{"class":403}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[288,29156,29157],{"class":290,"line":1484},[288,29158,2572],{"emptyLinePlaceholder":217},[288,29160,29161,29163,29165,29167],{"class":290,"line":1490},[288,29162,26726],{"class":2135},[288,29164,29070],{"class":403},[288,29166,28997],{"class":403},[288,29168,29169],{"class":403}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[243,29171,29172],{"start":206},[246,29173,29174],{},"推送镜像到 Docker Hub",[19,29176,29177],{},"使用以下命令将镜像推送到 Docker Hub：",[280,29179,29181],{"className":23995,"code":29180,"language":23997,"meta":205,"style":205},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[25,29182,29183],{"__ignoreMap":205},[288,29184,29185,29187,29190,29192,29194,29196,29198],{"class":290,"line":291},[288,29186,26726],{"class":2135},[288,29188,29189],{"class":403}," push",[288,29191,29075],{"class":294},[288,29193,29078],{"class":403},[288,29195,29081],{"class":298},[288,29197,1257],{"class":294},[288,29199,29200],{"class":403},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29202,14806],{},[280,29204,29206],{"className":23995,"code":29205,"language":23997,"meta":205,"style":205},"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",[25,29207,29208,29216,29220,29228,29232,29240,29244,29253,29257,29265,29269],{"__ignoreMap":205},[288,29209,29210,29212,29214],{"class":290,"line":291},[288,29211,26726],{"class":2135},[288,29213,29189],{"class":403},[288,29215,29109],{"class":403},[288,29217,29218],{"class":290,"line":206},[288,29219,2572],{"emptyLinePlaceholder":217},[288,29221,29222,29224,29226],{"class":290,"line":1352},[288,29223,26726],{"class":2135},[288,29225,29189],{"class":403},[288,29227,29124],{"class":403},[288,29229,29230],{"class":290,"line":1367},[288,29231,2572],{"emptyLinePlaceholder":217},[288,29233,29234,29236,29238],{"class":290,"line":1373},[288,29235,26726],{"class":2135},[288,29237,29189],{"class":403},[288,29239,29139],{"class":403},[288,29241,29242],{"class":290,"line":1387},[288,29243,2572],{"emptyLinePlaceholder":217},[288,29245,29246,29248,29250],{"class":290,"line":1393},[288,29247,26726],{"class":2135},[288,29249,29189],{"class":403},[288,29251,29252],{"class":403}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[288,29254,29255],{"class":290,"line":1484},[288,29256,2572],{"emptyLinePlaceholder":217},[288,29258,29259,29261,29263],{"class":290,"line":1490},[288,29260,26726],{"class":2135},[288,29262,29189],{"class":403},[288,29264,29169],{"class":403},[288,29266,29267],{"class":290,"line":1502},[288,29268,2572],{"emptyLinePlaceholder":217},[288,29270,29271,29273,29275],{"class":290,"line":1784},[288,29272,26726],{"class":2135},[288,29274,29189],{"class":403},[288,29276,29277],{"class":403}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[243,29279,29280],{"start":1352},[246,29281,29282],{},"验证推送成功",[19,29284,29285],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29287,29288],{},[448,29289,3956],{},[1304,29291,29292,29295],{},[246,29293,29294],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[246,29296,29297],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29299,29300],{},[200,29301],{"alt":205,"src":29302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29304,29305],{},[200,29306],{"alt":205,"src":29307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22171,29309,29311],{"id":29310},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29313,29314,29315,29318,29319,29322],{},"如果您想在 ",[448,29316,29317],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[448,29320,29321],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29324,29325,29326],{},"1. ",[448,29327,29328],{},"启用 Docker 跨平台构建",[19,29330,29331],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29333,29334],{},"第一步：启用 buildx（只需执行一次）",[280,29336,29338],{"className":23995,"code":29337,"language":23997,"meta":205,"style":205},"docker buildx create --name multiarch_builder --use\n",[25,29339,29340],{"__ignoreMap":205},[288,29341,29342,29344,29347,29350,29353,29356],{"class":290,"line":291},[288,29343,26726],{"class":2135},[288,29345,29346],{"class":403}," buildx",[288,29348,29349],{"class":403}," create",[288,29351,29352],{"class":347}," --name",[288,29354,29355],{"class":403}," multiarch_builder",[288,29357,29358],{"class":347}," --use\n",[19,29360,29361],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29363,29364],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[280,29366,29368],{"className":23995,"code":29367,"language":23997,"meta":205,"style":205},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[25,29369,29370],{"__ignoreMap":205},[288,29371,29372,29374,29376,29378,29381,29384,29387,29390],{"class":290,"line":291},[288,29373,26726],{"class":2135},[288,29375,27403],{"class":403},[288,29377,27406],{"class":347},[288,29379,29380],{"class":347}," --privileged",[288,29382,29383],{"class":403}," multiarch\u002Fqemu-user-static",[288,29385,29386],{"class":347}," --reset",[288,29388,29389],{"class":347}," -p",[288,29391,29392],{"class":403}," yes\n",[19,29394,29395],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29397,29398],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[280,29400,29402],{"className":23995,"code":29401,"language":23997,"meta":205,"style":205},"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",[25,29403,29404,29446,29450,29455,29465,29475,29484,29490,29494,29498,29508,29516,29525,29531,29535,29539,29549,29557,29566,29572,29576,29580,29590,29598,29607,29613,29617,29621,29631,29639,29648,29654,29658,29662,29672,29680,29689,29695,29699,29703,29713,29721,29730,29736,29740,29744,29754,29762,29771,29777,29781,29785,29795,29803,29812,29818,29822,29826,29837,29845,29854,29860],{"__ignoreMap":205},[288,29405,29406,29408,29410,29412,29415,29418,29420,29422,29425,29427,29429,29431,29433,29436,29439,29441,29444],{"class":290,"line":291},[288,29407,26726],{"class":2135},[288,29409,29346],{"class":403},[288,29411,28905],{"class":403},[288,29413,29414],{"class":347}," --platform",[288,29416,29417],{"class":403}," linux\u002Famd64,linux\u002Farm64",[288,29419,28908],{"class":347},[288,29421,29075],{"class":294},[288,29423,29424],{"class":403},"你的镜像",[288,29426,29081],{"class":298},[288,29428,1257],{"class":294},[288,29430,1156],{"class":403},[288,29432,1207],{"class":294},[288,29434,29435],{"class":403},"标",[288,29437,29438],{"class":298},"签",[288,29440,1257],{"class":294},[288,29442,29443],{"class":347}," --push",[288,29445,28914],{"class":403},[288,29447,29448],{"class":290,"line":206},[288,29449,2572],{"emptyLinePlaceholder":217},[288,29451,29452],{"class":290,"line":1352},[288,29453,29454],{"class":357},"# 例子：\n",[288,29456,29457,29459,29461,29463],{"class":290,"line":1367},[288,29458,26726],{"class":2135},[288,29460,29346],{"class":403},[288,29462,28905],{"class":403},[288,29464,24851],{"class":347},[288,29466,29467,29470,29473],{"class":290,"line":1373},[288,29468,29469],{"class":298},"--platform ",[288,29471,29472],{"class":403},"linux\u002Famd64,linux\u002Farm64",[288,29474,24851],{"class":347},[288,29476,29477,29479,29482],{"class":290,"line":1387},[288,29478,28908],{"class":347},[288,29480,29481],{"class":403}," tungchiahui\u002Fros:noetic-focal",[288,29483,24851],{"class":347},[288,29485,29486,29488],{"class":290,"line":1393},[288,29487,29443],{"class":347},[288,29489,24851],{"class":347},[288,29491,29492],{"class":290,"line":1484},[288,29493,28914],{"class":403},[288,29495,29496],{"class":290,"line":1490},[288,29497,2572],{"emptyLinePlaceholder":217},[288,29499,29500,29502,29504,29506],{"class":290,"line":1502},[288,29501,26726],{"class":2135},[288,29503,29346],{"class":403},[288,29505,28905],{"class":403},[288,29507,24851],{"class":347},[288,29509,29510,29512,29514],{"class":290,"line":1784},[288,29511,29469],{"class":298},[288,29513,29472],{"class":403},[288,29515,24851],{"class":347},[288,29517,29518,29520,29523],{"class":290,"line":1789},[288,29519,28908],{"class":347},[288,29521,29522],{"class":403}," tungchiahui\u002Fros:humble-jammy",[288,29524,24851],{"class":347},[288,29526,29527,29529],{"class":290,"line":1795},[288,29528,29443],{"class":347},[288,29530,24851],{"class":347},[288,29532,29533],{"class":290,"line":1800},[288,29534,28914],{"class":403},[288,29536,29537],{"class":290,"line":1814},[288,29538,2572],{"emptyLinePlaceholder":217},[288,29540,29541,29543,29545,29547],{"class":290,"line":1819},[288,29542,26726],{"class":2135},[288,29544,29346],{"class":403},[288,29546,28905],{"class":403},[288,29548,24851],{"class":347},[288,29550,29551,29553,29555],{"class":290,"line":1825},[288,29552,29469],{"class":298},[288,29554,29472],{"class":403},[288,29556,24851],{"class":347},[288,29558,29559,29561,29564],{"class":290,"line":1846},[288,29560,28908],{"class":347},[288,29562,29563],{"class":403}," tungchiahui\u002Fros:jazzy-noble",[288,29565,24851],{"class":347},[288,29567,29568,29570],{"class":290,"line":1851},[288,29569,29443],{"class":347},[288,29571,24851],{"class":347},[288,29573,29574],{"class":290,"line":1865},[288,29575,28914],{"class":403},[288,29577,29578],{"class":290,"line":1870},[288,29579,2572],{"emptyLinePlaceholder":217},[288,29581,29582,29584,29586,29588],{"class":290,"line":1899},[288,29583,26493],{"class":2135},[288,29585,29346],{"class":403},[288,29587,28905],{"class":403},[288,29589,24851],{"class":347},[288,29591,29592,29594,29596],{"class":290,"line":1904},[288,29593,29469],{"class":298},[288,29595,29472],{"class":403},[288,29597,24851],{"class":347},[288,29599,29600,29602,29605],{"class":290,"line":1921},[288,29601,28908],{"class":347},[288,29603,29604],{"class":403}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[288,29606,24851],{"class":347},[288,29608,29609,29611],{"class":290,"line":1926},[288,29610,29443],{"class":347},[288,29612,24851],{"class":347},[288,29614,29615],{"class":290,"line":1931},[288,29616,28914],{"class":403},[288,29618,29619],{"class":290,"line":1936},[288,29620,2572],{"emptyLinePlaceholder":217},[288,29622,29623,29625,29627,29629],{"class":290,"line":1950},[288,29624,26726],{"class":2135},[288,29626,29346],{"class":403},[288,29628,28905],{"class":403},[288,29630,24851],{"class":347},[288,29632,29633,29635,29637],{"class":290,"line":1955},[288,29634,29469],{"class":298},[288,29636,29472],{"class":403},[288,29638,24851],{"class":347},[288,29640,29641,29643,29646],{"class":290,"line":2749},[288,29642,28908],{"class":347},[288,29644,29645],{"class":403}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[288,29647,24851],{"class":347},[288,29649,29650,29652],{"class":290,"line":2763},[288,29651,29443],{"class":347},[288,29653,24851],{"class":347},[288,29655,29656],{"class":290,"line":2771},[288,29657,28914],{"class":403},[288,29659,29660],{"class":290,"line":2776},[288,29661,2572],{"emptyLinePlaceholder":217},[288,29663,29664,29666,29668,29670],{"class":290,"line":2782},[288,29665,26493],{"class":2135},[288,29667,29346],{"class":403},[288,29669,28905],{"class":403},[288,29671,24851],{"class":347},[288,29673,29674,29676,29678],{"class":290,"line":2788},[288,29675,29469],{"class":298},[288,29677,29472],{"class":403},[288,29679,24851],{"class":347},[288,29681,29682,29684,29687],{"class":290,"line":2793},[288,29683,28908],{"class":347},[288,29685,29686],{"class":403}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[288,29688,24851],{"class":347},[288,29690,29691,29693],{"class":290,"line":8121},[288,29692,29443],{"class":347},[288,29694,24851],{"class":347},[288,29696,29697],{"class":290,"line":8145},[288,29698,28914],{"class":403},[288,29700,29701],{"class":290,"line":8150},[288,29702,2572],{"emptyLinePlaceholder":217},[288,29704,29705,29707,29709,29711],{"class":290,"line":8156},[288,29706,26726],{"class":2135},[288,29708,29346],{"class":403},[288,29710,28905],{"class":403},[288,29712,24851],{"class":347},[288,29714,29715,29717,29719],{"class":290,"line":8183},[288,29716,29469],{"class":298},[288,29718,29472],{"class":403},[288,29720,24851],{"class":347},[288,29722,29723,29725,29728],{"class":290,"line":8188},[288,29724,28908],{"class":347},[288,29726,29727],{"class":403}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[288,29729,24851],{"class":347},[288,29731,29732,29734],{"class":290,"line":8194},[288,29733,29443],{"class":347},[288,29735,24851],{"class":347},[288,29737,29738],{"class":290,"line":8206},[288,29739,28914],{"class":403},[288,29741,29742],{"class":290,"line":8218},[288,29743,2572],{"emptyLinePlaceholder":217},[288,29745,29746,29748,29750,29752],{"class":290,"line":8230},[288,29747,26726],{"class":2135},[288,29749,29346],{"class":403},[288,29751,28905],{"class":403},[288,29753,24851],{"class":347},[288,29755,29756,29758,29760],{"class":290,"line":9889},[288,29757,29469],{"class":298},[288,29759,29472],{"class":403},[288,29761,24851],{"class":347},[288,29763,29764,29766,29769],{"class":290,"line":9914},[288,29765,28908],{"class":347},[288,29767,29768],{"class":403}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[288,29770,24851],{"class":347},[288,29772,29773,29775],{"class":290,"line":9937},[288,29774,29443],{"class":347},[288,29776,24851],{"class":347},[288,29778,29779],{"class":290,"line":9961},[288,29780,28914],{"class":403},[288,29782,29783],{"class":290,"line":9966},[288,29784,2572],{"emptyLinePlaceholder":217},[288,29786,29787,29789,29791,29793],{"class":290,"line":9971},[288,29788,26493],{"class":2135},[288,29790,29346],{"class":403},[288,29792,28905],{"class":403},[288,29794,24851],{"class":347},[288,29796,29797,29799,29801],{"class":290,"line":9976},[288,29798,29469],{"class":298},[288,29800,29472],{"class":403},[288,29802,24851],{"class":347},[288,29804,29805,29807,29810],{"class":290,"line":9985},[288,29806,28908],{"class":347},[288,29808,29809],{"class":403}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[288,29811,24851],{"class":347},[288,29813,29814,29816],{"class":290,"line":9990},[288,29815,29443],{"class":347},[288,29817,24851],{"class":347},[288,29819,29820],{"class":290,"line":9996},[288,29821,28914],{"class":403},[288,29823,29824],{"class":290,"line":10017},[288,29825,2572],{"emptyLinePlaceholder":217},[288,29827,29828,29831,29833,29835],{"class":290,"line":10023},[288,29829,29830],{"class":2135},"  docker",[288,29832,29346],{"class":403},[288,29834,28905],{"class":403},[288,29836,24851],{"class":347},[288,29838,29839,29841,29843],{"class":290,"line":10037},[288,29840,29469],{"class":298},[288,29842,29472],{"class":403},[288,29844,24851],{"class":347},[288,29846,29847,29849,29852],{"class":290,"line":10043},[288,29848,28908],{"class":347},[288,29850,29851],{"class":403}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[288,29853,24851],{"class":347},[288,29855,29856,29858],{"class":290,"line":10070},[288,29857,29443],{"class":347},[288,29859,24851],{"class":347},[288,29861,29862],{"class":290,"line":10079},[288,29863,28914],{"class":403},[19,29865,29866],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29868,29869],{},[200,29870],{"alt":205,"src":29871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29873,29874],{},[200,29875],{"alt":205,"src":29876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22171,29878,29880],{"id":29879},"_623清除构建缓存","6.2.3.清除构建缓存",[280,29882,29884],{"className":23995,"code":29883,"language":23997,"meta":205,"style":205},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[25,29885,29886,29891],{"__ignoreMap":205},[288,29887,29888],{"class":290,"line":291},[288,29889,29890],{"class":357},"# 清理BuildKit构建缓存\n",[288,29892,29893,29895,29898,29901],{"class":290,"line":206},[288,29894,26726],{"class":2135},[288,29896,29897],{"class":403}," builder",[288,29899,29900],{"class":403}," prune",[288,29902,29903],{"class":347}," -f\n",[19,29905,29906],{},[200,29907],{"alt":205,"src":29908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[260,29910,29912],{"id":29911},"_63补充","6.3.补充",[22171,29914,29916],{"id":29915},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29918,29919],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29921,29922],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29924,29925],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[280,29927,29929],{"className":23995,"code":29928,"language":23997,"meta":205,"style":205},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[25,29930,29931,29938],{"__ignoreMap":205},[288,29932,29933,29935],{"class":290,"line":291},[288,29934,27543],{"class":2135},[288,29936,29937],{"class":403}," nginx\n",[288,29939,29940,29942,29945,29948,29950],{"class":290,"line":206},[288,29941,28728],{"class":2135},[288,29943,29944],{"class":403}," echo",[288,29946,29947],{"class":403}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[288,29949,26395],{"class":294},[288,29951,29952],{"class":403}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29954,29955],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29957,29958],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[280,29960,29962],{"className":23995,"code":29961,"language":23997,"meta":205,"style":205},"docker build -t nginx:tuling .\n",[25,29963,29964],{"__ignoreMap":205},[288,29965,29966,29968,29970,29972,29975],{"class":290,"line":291},[288,29967,26726],{"class":2135},[288,29969,28905],{"class":403},[288,29971,28908],{"class":347},[288,29973,29974],{"class":403}," nginx:tuling",[288,29976,28914],{"class":403},[19,29978,29979],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29981,29982],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[280,29984,29986],{"className":23995,"code":29985,"language":23997,"meta":205,"style":205},"docker run -d -p 92:80 nginx:tuling\n",[25,29987,29988],{"__ignoreMap":205},[288,29989,29990,29992,29994,29997,29999,30002],{"class":290,"line":291},[288,29991,26726],{"class":2135},[288,29993,27403],{"class":403},[288,29995,29996],{"class":347}," -d",[288,29998,29389],{"class":347},[288,30000,30001],{"class":403}," 92:80",[288,30003,30004],{"class":403}," nginx:tuling\n",[19,30006,30007,30008],{},"4、访问 ",[104,30009,30012],{"href":30010,"rel":30011},"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",[108],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30014,30015],{},[200,30016],{"alt":205,"src":30017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30019,30020],{},[200,30021],{"alt":205,"src":30022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22171,30024,30026],{"id":30025},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30028,30029],{},"只需要知道大体流程即可",[19,30031,30032],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30034,30035],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30037,30038],{},"2、在Dockerfile中添加以下内容",[280,30040,30042],{"className":26264,"code":30041,"language":26266,"meta":205,"style":205},"# 基于哪个镜像\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",[25,30043,30044,30049,30054,30059,30064,30069,30074,30079],{"__ignoreMap":205},[288,30045,30046],{"class":290,"line":291},[288,30047,30048],{},"# 基于哪个镜像\n",[288,30050,30051],{"class":290,"line":206},[288,30052,30053],{},"From java:8\n",[288,30055,30056],{"class":290,"line":1352},[288,30057,30058],{},"# 复制文件到容器\n",[288,30060,30061],{"class":290,"line":1367},[288,30062,30063],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[288,30065,30066],{"class":290,"line":1373},[288,30067,30068],{},"# 声明需要暴露的端口\n",[288,30070,30071],{"class":290,"line":1387},[288,30072,30073],{},"EXPOSE 8877\n",[288,30075,30076],{"class":290,"line":1393},[288,30077,30078],{},"# 配置容器启动后执行的命令\n",[288,30080,30081],{"class":290,"line":1484},[288,30082,30083],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30085,30086],{},"3、使用docker build命令构建镜像",[280,30088,30090],{"className":23995,"code":30089,"language":23997,"meta":205,"style":205},"docker build -t tulingmall-member:0.0.5 .\n",[25,30091,30092],{"__ignoreMap":205},[288,30093,30094,30096,30098,30100,30103],{"class":290,"line":291},[288,30095,26726],{"class":2135},[288,30097,28905],{"class":403},[288,30099,28908],{"class":347},[288,30101,30102],{"class":403}," tulingmall-member:0.0.5",[288,30104,28914],{"class":403},[19,30106,30107],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30109,30110],{},[200,30111],{"alt":205,"src":30112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30114,30115],{},"4、启动镜像，加-d可在后台启动",[280,30117,30119],{"className":23995,"code":30118,"language":23997,"meta":205,"style":205},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[25,30120,30121],{"__ignoreMap":205},[288,30122,30123,30125,30127,30129,30131,30134],{"class":290,"line":291},[288,30124,26726],{"class":2135},[288,30126,27403],{"class":403},[288,30128,29996],{"class":347},[288,30130,29389],{"class":347},[288,30132,30133],{"class":403}," 8877:8877",[288,30135,30136],{"class":403}," tulingmall-member:0.0.5\n",[19,30138,30139],{},"加上JVM参数：",[280,30141,30143],{"className":23995,"code":30142,"language":23997,"meta":205,"style":205},"# --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",[25,30144,30145,30150,30165,30175,30184,30191],{"__ignoreMap":205},[288,30146,30147],{"class":290,"line":291},[288,30148,30149],{"class":357},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[288,30151,30152,30154,30156,30159,30161,30163],{"class":290,"line":206},[288,30153,26726],{"class":2135},[288,30155,27403],{"class":403},[288,30157,30158],{"class":347},"  -d",[288,30160,29389],{"class":347},[288,30162,30133],{"class":403},[288,30164,24851],{"class":347},[288,30166,30167,30169,30172],{"class":290,"line":1352},[288,30168,28301],{"class":298},[288,30170,30171],{"class":403},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[288,30173,30174],{"class":347},"  \\\n",[288,30176,30177,30179,30182],{"class":290,"line":1367},[288,30178,28301],{"class":298},[288,30180,30181],{"class":403},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[288,30183,30174],{"class":347},[288,30185,30186,30189],{"class":290,"line":1373},[288,30187,30188],{"class":298},"--cap-add=SYS_PTRACE  ",[288,30190,26348],{"class":347},[288,30192,30193],{"class":290,"line":1387},[288,30194,30195],{"class":298},"tulingmall-member:0.0.5\n",[19,30197,30198],{},"5、访问会员服务接口",[19,30200,30201],{},[200,30202],{"alt":205,"src":30203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22171,30205,30207],{"id":30206},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30209,30210],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30212,30213,30214],{},"阿里云docker镜像仓库：",[104,30215,30216],{"href":30216,"rel":30217},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[108],[19,30219,30220],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30222,30223],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30225,30226],{},[200,30227],{"alt":205,"src":30228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30230,30231],{},"要把镜像推送到镜像仓库",[280,30233,30235],{"className":23995,"code":30234,"language":23997,"meta":205,"style":205},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30236,30237],{"__ignoreMap":205},[288,30238,30239,30241,30243,30245],{"class":290,"line":291},[288,30240,26726],{"class":2135},[288,30242,29070],{"class":403},[288,30244,30102],{"class":403},[288,30246,30247],{"class":403}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30249,30250],{},"最后将镜像推送到远程仓库",[280,30252,30254],{"className":23995,"code":30253,"language":23997,"meta":205,"style":205},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30255,30256],{"__ignoreMap":205},[288,30257,30258,30260,30262],{"class":290,"line":291},[288,30259,26726],{"class":2135},[288,30261,29189],{"class":403},[288,30263,30247],{"class":403},[5299,30265,30266],{},"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":205,"searchDepth":206,"depth":206,"links":30268},[30269,30270,30271],{"id":28656,"depth":1352,"text":28657},{"id":28885,"depth":1352,"text":28886},{"id":29911,"depth":1352,"text":29912},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28648,"description":205},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30278,"title":30279,"body":30280,"description":205,"extension":215,"meta":30423,"navigation":217,"path":30424,"seo":30425,"stem":30426,"__hash__":30427},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30281,"toc":30421},[30282,30285,30290,30295,30298,30303,30308,30311,30316,30321,30324,30329,30332,30335,30338,30341,30344,30347,30367,30389,30392,30395,30415,30418],[10,30283,30279],{"id":30284},"_7vscode远程开发",[243,30286,30287],{},[246,30288,30289],{},"插件1：微软Docker工具",[19,30291,30292],{},[200,30293],{"alt":205,"src":30294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30296,30297],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30299,30300],{},[200,30301],{"alt":205,"src":30302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[243,30304,30305],{"start":206},[246,30306,30307],{},"插件2：微软Docker远程开发工具",[19,30309,30310],{},"下面这是远程开发的插件。",[19,30312,30313],{},[200,30314],{"alt":205,"src":30315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30317,30318],{},[200,30319],{"alt":205,"src":30320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30322,30323],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30325,30326],{},[200,30327],{"alt":205,"src":30328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30330,30331],{},"安装完拓展之后，vscode进行链接：",[19,30333,30334],{},"1.按ctrl+shift+p",[19,30336,30337],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30339,30340],{},"3.选择目前运行的容器",[19,30342,30343],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30345,30346],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[280,30348,30350],{"className":23995,"code":30349,"language":23997,"meta":205,"style":205},"docker run -v 主机目录:容器目录 image-name\n",[25,30351,30352],{"__ignoreMap":205},[288,30353,30354,30356,30358,30361,30364],{"class":290,"line":291},[288,30355,26726],{"class":2135},[288,30357,27403],{"class":403},[288,30359,30360],{"class":347}," -v",[288,30362,30363],{"class":403}," 主机目录:容器目录",[288,30365,30366],{"class":403}," image-name\n",[280,30368,30370],{"className":23995,"code":30369,"language":23997,"meta":205,"style":205},"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",[25,30371,30372],{"__ignoreMap":205},[288,30373,30374,30376,30378,30381,30383,30386],{"class":290,"line":291},[288,30375,26726],{"class":2135},[288,30377,27403],{"class":403},[288,30379,30380],{"class":347}," -it",[288,30382,30360],{"class":347},[288,30384,30385],{"class":403}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[288,30387,30388],{"class":403}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30390,30391],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30393,30394],{},"查看挂载情况：",[280,30396,30398],{"className":23995,"code":30397,"language":23997,"meta":205,"style":205},"mount | grep -i project\n",[25,30399,30400],{"__ignoreMap":205},[288,30401,30402,30405,30407,30410,30412],{"class":290,"line":291},[288,30403,30404],{"class":2135},"mount",[288,30406,25282],{"class":294},[288,30408,30409],{"class":2135}," grep",[288,30411,26603],{"class":347},[288,30413,30414],{"class":403}," project\n",[19,30416,30417],{},"也可以通过ls来进行查看",[5299,30419,30420],{},"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":205,"searchDepth":206,"depth":206,"links":30422},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30279,"description":205},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30429,"title":30430,"body":30431,"description":214,"extension":215,"meta":30435,"navigation":217,"path":30437,"seo":30438,"stem":30439,"__hash__":30440},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30432,"toc":30433},[],{"title":205,"searchDepth":206,"depth":206,"links":30434},[],{"category":30436},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30430,"description":214},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30442,"title":30443,"body":30444,"description":214,"extension":215,"meta":30448,"navigation":217,"path":30449,"seo":30450,"stem":30451,"__hash__":30452},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30445,"toc":30446},[],{"title":205,"searchDepth":206,"depth":206,"links":30447},[],{"category":30436},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30443,"description":214},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30454,"title":30455,"body":30456,"description":214,"extension":215,"meta":30749,"navigation":217,"path":30750,"seo":30751,"stem":30752,"__hash__":30753},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30457,"toc":30747},[30458,30461,30469,30484,30489,30540,30543,30549,30736,30741,30744],[10,30459,30455],{"id":30460},"_1验证深度学习环境",[19,30462,30463,30464],{},"关于环境的安装，看",[104,30465,30468],{"href":30466,"rel":30467},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[108],"Pytorch-->深度学习",[19,30470,30471,30472,30475,30476,30479,30480,30483],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[25,30473,30474],{},"pytorch-cuda=12.4"," 是一个“ ",[448,30477,30478],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[448,30481,30482],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30485,30486],{},[200,30487],{"alt":205,"src":30488},"\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",[280,30490,30492],{"className":23995,"code":30491,"language":23997,"meta":205,"style":205},"# 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",[25,30493,30494,30499],{"__ignoreMap":205},[288,30495,30496],{"class":290,"line":291},[288,30497,30498],{"class":357},"# CUDA 12.4\n",[288,30500,30501,30504,30506,30509,30512,30515,30518,30521,30523,30526,30529,30532,30535,30537],{"class":290,"line":206},[288,30502,30503],{"class":2135},"conda",[288,30505,24007],{"class":403},[288,30507,30508],{"class":403}," pytorch==",[288,30510,30511],{"class":347},"2.5.1",[288,30513,30514],{"class":403}," torchvision==",[288,30516,30517],{"class":347},"0.20.1",[288,30519,30520],{"class":403}," torchaudio==",[288,30522,30511],{"class":347},[288,30524,30525],{"class":403}," pytorch-cuda=",[288,30527,30528],{"class":347},"12.4",[288,30530,30531],{"class":347}," -c",[288,30533,30534],{"class":403}," pytorch",[288,30536,30531],{"class":347},[288,30538,30539],{"class":403}," nvidia\n",[19,30541,30542],{},"）：",[19,30544,30545],{},[104,30546,30547],{"href":30547,"rel":30548},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[108],[280,30550,30554],{"className":30551,"code":30552,"language":30553,"meta":205,"style":205},"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",[25,30555,30556,30561,30569,30574,30584,30600,30605,30615,30652,30659,30671,30687,30692,30702,30714,30724],{"__ignoreMap":205},[288,30557,30558],{"class":290,"line":291},[288,30559,30560],{"class":357},"# 对深度学习环境进行测试\n",[288,30562,30563,30566],{"class":290,"line":206},[288,30564,30565],{"class":294},"import",[288,30567,30568],{"class":298}," torch\n",[288,30570,30571],{"class":290,"line":1352},[288,30572,30573],{"class":357},"# 查看cuda是否被激活\n",[288,30575,30576,30579,30581],{"class":290,"line":1367},[288,30577,30578],{"class":298},"flag",[288,30580,344],{"class":294},[288,30582,30583],{"class":298},"torch.cuda.is_available()\n",[288,30585,30586,30589,30591,30594,30597],{"class":290,"line":1373},[288,30587,30588],{"class":347},"print",[288,30590,299],{"class":298},[288,30592,30593],{"class":403},"\"cuda:\"",[288,30595,30596],{"class":298},", flag)   ",[288,30598,30599],{"class":357},"#返回true的话说明被激活\n",[288,30601,30602],{"class":290,"line":1387},[288,30603,30604],{"class":357},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[288,30606,30607,30610,30612],{"class":290,"line":1393},[288,30608,30609],{"class":298},"ngpu",[288,30611,344],{"class":294},[288,30613,30614],{"class":347},"1\n",[288,30616,30617,30620,30622,30625,30628,30630,30633,30636,30639,30641,30643,30645,30647,30650],{"class":290,"line":1484},[288,30618,30619],{"class":298},"device",[288,30621,344],{"class":294},[288,30623,30624],{"class":298},"torch.device(",[288,30626,30627],{"class":403},"\"cuda:0\"",[288,30629,1876],{"class":294},[288,30631,30632],{"class":298},"(torch.cuda.is_available() ",[288,30634,30635],{"class":294},"and",[288,30637,30638],{"class":298}," ngpu",[288,30640,1257],{"class":294},[288,30642,490],{"class":347},[288,30644,13887],{"class":298},[288,30646,1873],{"class":294},[288,30648,30649],{"class":403}," \"cpu\"",[288,30651,305],{"class":298},[288,30653,30654,30656],{"class":290,"line":1490},[288,30655,30588],{"class":347},[288,30657,30658],{"class":298},"(device)\n",[288,30660,30661,30663,30666,30668],{"class":290,"line":1502},[288,30662,30588],{"class":347},[288,30664,30665],{"class":298},"(torch.cuda.get_device_name(",[288,30667,490],{"class":347},[288,30669,30670],{"class":298},"))\n",[288,30672,30673,30675,30678,30680,30682,30684],{"class":290,"line":1784},[288,30674,30588],{"class":347},[288,30676,30677],{"class":298},"(torch.rand(",[288,30679,370],{"class":347},[288,30681,675],{"class":298},[288,30683,370],{"class":347},[288,30685,30686],{"class":298},").cuda())\n",[288,30688,30689],{"class":290,"line":1789},[288,30690,30691],{"class":357},"# 查看cuda和cudnn的版本\n",[288,30693,30694,30697,30699],{"class":290,"line":1795},[288,30695,30696],{"class":298},"cuda_version",[288,30698,344],{"class":294},[288,30700,30701],{"class":298},"torch.version.cuda\n",[288,30703,30704,30706,30708,30711],{"class":290,"line":1800},[288,30705,30588],{"class":347},[288,30707,299],{"class":298},[288,30709,30710],{"class":403},"\"cuda version\"",[288,30712,30713],{"class":298},",cuda_version)\n",[288,30715,30716,30719,30721],{"class":290,"line":1814},[288,30717,30718],{"class":298},"cudnn_version",[288,30720,344],{"class":294},[288,30722,30723],{"class":298},"torch.backends.cudnn.version()\n",[288,30725,30726,30728,30730,30733],{"class":290,"line":1819},[288,30727,30588],{"class":347},[288,30729,299],{"class":298},[288,30731,30732],{"class":403},"\"cudnn version\"",[288,30734,30735],{"class":298},",cudnn_version)\n",[19,30737,30738],{},[200,30739],{"alt":205,"src":30740},"\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",[19,30742,30743],{},"cuda:0 指的是一块显卡",[5299,30745,30746],{},"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":205,"searchDepth":206,"depth":206,"links":30748},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30455,"description":214},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30755,"title":30756,"body":30757,"description":214,"extension":215,"meta":50561,"navigation":217,"path":50562,"seo":50563,"stem":50564,"__hash__":50565},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30758,"toc":50555},[30759,30762,30766,30770,30773,30778,30783,30786,30791,30796,30801,30804,30808,30813,30817,30822,30825,30830,30833,30836,30839,30842,30847,30850,30855,30860,30865,30870,30873,30877,30880,30885,31489,31494,31497,31502,31505,31508,31972,31975,31978,31981,31984,34035,34038,34043,34048,34843,34846,34851,35629,35633,37292,37296,38010,38014,38018,38023,38028,38033,38036,38041,38046,38051,38056,38061,38065,38070,39352,39357,39360,39363,39366,39521,39524,39527,40743,40748,41443,41447,41451,41456,41461,41464,41469,41474,41479,41484,41489,41494,41499,41504,41509,41514,41519,41524,41529,41534,41539,41544,41549,41554,41559,41564,41569,41574,41579,41584,41589,41594,41599,41604,41609,41614,41618,41622,41625,43103,43107,44754,44758,45452,45456,45459,45462,46006,46009,46013,46016,47413,47417,47420,47998,49785,49789,49792,50552],[10,30760,30756],{"id":30761},"_2经典神经网络",[260,30763,30765],{"id":30764},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22171,30767,30769],{"id":30768},"_211原理介绍","2.1.1.原理介绍",[19,30771,30772],{},"LeNet-5",[243,30774,30775],{},[246,30776,30777],{},"原理",[19,30779,30780],{},[200,30781],{"alt":205,"src":30782},"\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",[19,30784,30785],{},"B是batch批次；C是channel通道",[243,30787,30788],{"start":206},[246,30789,30790],{},"网络参数详细",[19,30792,30793],{},[200,30794],{"alt":205,"src":30795},"\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",[19,30797,30798],{},[200,30799],{"alt":205,"src":30800},"\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",[19,30802,30803],{},"AlexNet",[243,30805,30806],{},[246,30807,30777],{},[19,30809,30810],{},[200,30811],{"alt":205,"src":30812},"\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",[243,30814,30815],{"start":206},[246,30816,30790],{},[19,30818,30819],{},[200,30820],{"alt":205,"src":30821},"\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",[19,30823,30824],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30826,30827],{},[200,30828],{"alt":205,"src":30829},"\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",[19,30831,30832],{},"数据处理中的图像增强操作:",[19,30834,30835],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30837,30838],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30840,30841],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30843,30844],{},[200,30845],{"alt":205,"src":30846},"\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",[19,30848,30849],{},"提升网络精确度的方法：LRN正则化",[19,30851,30852],{},[200,30853],{"alt":205,"src":30854},"\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",[19,30856,30857],{},[200,30858],{"alt":205,"src":30859},"\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",[243,30861,30862],{"start":1352},[246,30863,30864],{},"AlexNet的总结",[19,30866,30867],{},[200,30868],{"alt":205,"src":30869},"\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",[19,30871,30872],{},"比LeNet模型要深一丢丢",[22171,30874,30876],{"id":30875},"_212代码实现","2.1.2.代码实现",[19,30878,30879],{},"（1）LeNet",[243,30881,30882],{},[246,30883,30884],{},"模型搭建",[280,30886,30888],{"className":30551,"code":30887,"language":30553,"meta":205,"style":205},"# 导入库\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",[25,30889,30890,30895,30901,30906,30919,30924,30936,30940,30960,30965,30970,30981,30986,31005,31009,31014,31063,31075,31080,31109,31144,31171,31176,31188,31193,31213,31232,31251,31255,31260,31270,31287,31298,31313,31324,31335,31350,31365,31376,31383,31387,31401,31406,31429,31434,31439,31444,31448,31453,31458,31468],{"__ignoreMap":205},[288,30891,30892],{"class":290,"line":291},[288,30893,30894],{"class":357},"# 导入库\n",[288,30896,30897,30899],{"class":290,"line":206},[288,30898,30565],{"class":294},[288,30900,30568],{"class":298},[288,30902,30903],{"class":290,"line":1352},[288,30904,30905],{"class":357},"# 导入神经网络层\n",[288,30907,30908,30911,30914,30916],{"class":290,"line":1367},[288,30909,30910],{"class":294},"from",[288,30912,30913],{"class":298}," torch ",[288,30915,30565],{"class":294},[288,30917,30918],{"class":298}," nn\n",[288,30920,30921],{"class":290,"line":1373},[288,30922,30923],{"class":357},"# 导入展示神经网络参数的包\n",[288,30925,30926,30928,30931,30933],{"class":290,"line":1387},[288,30927,30910],{"class":294},[288,30929,30930],{"class":298}," torchsummary ",[288,30932,30565],{"class":294},[288,30934,30935],{"class":298}," summary\n",[288,30937,30938],{"class":290,"line":1393},[288,30939,2572],{"emptyLinePlaceholder":217},[288,30941,30942,30944,30947,30949,30952,30954,30957],{"class":290,"line":1484},[288,30943,14867],{"class":294},[288,30945,30946],{"class":2135}," LeNet",[288,30948,299],{"class":298},[288,30950,30951],{"class":2135},"nn",[288,30953,855],{"class":298},[288,30955,30956],{"class":2135},"Module",[288,30958,30959],{"class":298},"):\n",[288,30961,30962],{"class":290,"line":1490},[288,30963,30964],{"class":357},"    # 模型初始化:\n",[288,30966,30967],{"class":290,"line":1502},[288,30968,30969],{"class":357},"    # 定义一些网络层和激活函数\n",[288,30971,30972,30975,30978],{"class":290,"line":1784},[288,30973,30974],{"class":294},"    def",[288,30976,30977],{"class":347}," __init__",[288,30979,30980],{"class":298},"(self):\n",[288,30982,30983],{"class":290,"line":1789},[288,30984,30985],{"class":357},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[288,30987,30988,30991,30994,30997,31000,31003],{"class":290,"line":1795},[288,30989,30990],{"class":347},"        super",[288,30992,30993],{"class":298},"(LeNet,",[288,30995,30996],{"class":347},"self",[288,30998,30999],{"class":298},").",[288,31001,31002],{"class":347},"__init__",[288,31004,2148],{"class":298},[288,31006,31007],{"class":290,"line":1800},[288,31008,2572],{"emptyLinePlaceholder":217},[288,31010,31011],{"class":290,"line":1814},[288,31012,31013],{"class":357},"        # 定义网络层\n",[288,31015,31016,31019,31022,31024,31027,31030,31032,31034,31036,31039,31041,31043,31045,31048,31050,31052,31054,31057,31059,31061],{"class":290,"line":1819},[288,31017,31018],{"class":347},"        self",[288,31020,31021],{"class":298},".c1",[288,31023,344],{"class":294},[288,31025,31026],{"class":298},"nn.Conv2d(",[288,31028,31029],{"class":5389},"in_channels",[288,31031,344],{"class":294},[288,31033,516],{"class":347},[288,31035,675],{"class":298},[288,31037,31038],{"class":5389},"out_channels",[288,31040,344],{"class":294},[288,31042,641],{"class":347},[288,31044,675],{"class":298},[288,31046,31047],{"class":5389},"kernel_size",[288,31049,344],{"class":294},[288,31051,616],{"class":347},[288,31053,675],{"class":298},[288,31055,31056],{"class":5389},"padding",[288,31058,344],{"class":294},[288,31060,376],{"class":347},[288,31062,305],{"class":298},[288,31064,31065,31067,31070,31072],{"class":290,"line":1825},[288,31066,31018],{"class":347},[288,31068,31069],{"class":298},".sig",[288,31071,344],{"class":294},[288,31073,31074],{"class":298},"nn.Sigmoid()\n",[288,31076,31077],{"class":290,"line":1846},[288,31078,31079],{"class":357},"        # 定义池化\n",[288,31081,31082,31084,31087,31089,31092,31094,31096,31098,31100,31103,31105,31107],{"class":290,"line":1851},[288,31083,31018],{"class":347},[288,31085,31086],{"class":298},".s2",[288,31088,344],{"class":294},[288,31090,31091],{"class":298},"nn.AvgPool2d(",[288,31093,31047],{"class":5389},[288,31095,344],{"class":294},[288,31097,376],{"class":347},[288,31099,675],{"class":298},[288,31101,31102],{"class":5389},"stride",[288,31104,344],{"class":294},[288,31106,376],{"class":347},[288,31108,305],{"class":298},[288,31110,31111,31113,31116,31118,31120,31122,31124,31126,31128,31130,31132,31134,31136,31138,31140,31142],{"class":290,"line":1865},[288,31112,31018],{"class":347},[288,31114,31115],{"class":298},".c3",[288,31117,344],{"class":294},[288,31119,31026],{"class":298},[288,31121,31029],{"class":5389},[288,31123,344],{"class":294},[288,31125,641],{"class":347},[288,31127,675],{"class":298},[288,31129,31038],{"class":5389},[288,31131,344],{"class":294},[288,31133,898],{"class":347},[288,31135,675],{"class":298},[288,31137,31047],{"class":5389},[288,31139,344],{"class":294},[288,31141,616],{"class":347},[288,31143,305],{"class":298},[288,31145,31146,31148,31151,31153,31155,31157,31159,31161,31163,31165,31167,31169],{"class":290,"line":1870},[288,31147,31018],{"class":347},[288,31149,31150],{"class":298},".s4",[288,31152,344],{"class":294},[288,31154,31091],{"class":298},[288,31156,31047],{"class":5389},[288,31158,344],{"class":294},[288,31160,376],{"class":347},[288,31162,675],{"class":298},[288,31164,31102],{"class":5389},[288,31166,344],{"class":294},[288,31168,376],{"class":347},[288,31170,305],{"class":298},[288,31172,31173],{"class":290,"line":1899},[288,31174,31175],{"class":357},"        # 定义平展层\n",[288,31177,31178,31180,31183,31185],{"class":290,"line":1904},[288,31179,31018],{"class":347},[288,31181,31182],{"class":298},".flatten",[288,31184,344],{"class":294},[288,31186,31187],{"class":298},"nn.Flatten()\n",[288,31189,31190],{"class":290,"line":1921},[288,31191,31192],{"class":357},"        # 定义全连接层\n",[288,31194,31195,31197,31200,31202,31205,31207,31209,31211],{"class":290,"line":1926},[288,31196,31018],{"class":347},[288,31198,31199],{"class":298},".f5",[288,31201,344],{"class":294},[288,31203,31204],{"class":298},"nn.Linear(",[288,31206,4159],{"class":347},[288,31208,675],{"class":298},[288,31210,1114],{"class":347},[288,31212,305],{"class":298},[288,31214,31215,31217,31220,31222,31224,31226,31228,31230],{"class":290,"line":1931},[288,31216,31018],{"class":347},[288,31218,31219],{"class":298},".f6",[288,31221,344],{"class":294},[288,31223,31204],{"class":298},[288,31225,1114],{"class":347},[288,31227,675],{"class":298},[288,31229,1008],{"class":347},[288,31231,305],{"class":298},[288,31233,31234,31236,31239,31241,31243,31245,31247,31249],{"class":290,"line":1936},[288,31235,31018],{"class":347},[288,31237,31238],{"class":298},".f7",[288,31240,344],{"class":294},[288,31242,31204],{"class":298},[288,31244,1008],{"class":347},[288,31246,675],{"class":298},[288,31248,743],{"class":347},[288,31250,305],{"class":298},[288,31252,31253],{"class":290,"line":1950},[288,31254,2572],{"emptyLinePlaceholder":217},[288,31256,31257],{"class":290,"line":1955},[288,31258,31259],{"class":357},"    # 写工具->写前向传播\n",[288,31261,31262,31264,31267],{"class":290,"line":2749},[288,31263,30974],{"class":294},[288,31265,31266],{"class":2135}," forward",[288,31268,31269],{"class":298},"(self,x):\n",[288,31271,31272,31275,31277,31279,31282,31284],{"class":290,"line":2763},[288,31273,31274],{"class":298},"        x",[288,31276,344],{"class":294},[288,31278,30996],{"class":347},[288,31280,31281],{"class":298},".sig(",[288,31283,30996],{"class":347},[288,31285,31286],{"class":298},".c1(x))\n",[288,31288,31289,31291,31293,31295],{"class":290,"line":2771},[288,31290,31274],{"class":298},[288,31292,344],{"class":294},[288,31294,30996],{"class":347},[288,31296,31297],{"class":298},".s2(x)\n",[288,31299,31300,31302,31304,31306,31308,31310],{"class":290,"line":2776},[288,31301,31274],{"class":298},[288,31303,344],{"class":294},[288,31305,30996],{"class":347},[288,31307,31281],{"class":298},[288,31309,30996],{"class":347},[288,31311,31312],{"class":298},".c3(x))\n",[288,31314,31315,31317,31319,31321],{"class":290,"line":2782},[288,31316,31274],{"class":298},[288,31318,344],{"class":294},[288,31320,30996],{"class":347},[288,31322,31323],{"class":298},".s4(x)\n",[288,31325,31326,31328,31330,31332],{"class":290,"line":2788},[288,31327,31274],{"class":298},[288,31329,344],{"class":294},[288,31331,30996],{"class":347},[288,31333,31334],{"class":298},".flatten(x)\n",[288,31336,31337,31339,31341,31343,31345,31347],{"class":290,"line":2793},[288,31338,31274],{"class":298},[288,31340,344],{"class":294},[288,31342,30996],{"class":347},[288,31344,31281],{"class":298},[288,31346,30996],{"class":347},[288,31348,31349],{"class":298},".f5(x))\n",[288,31351,31352,31354,31356,31358,31360,31362],{"class":290,"line":8121},[288,31353,31274],{"class":298},[288,31355,344],{"class":294},[288,31357,30996],{"class":347},[288,31359,31281],{"class":298},[288,31361,30996],{"class":347},[288,31363,31364],{"class":298},".f6(x))\n",[288,31366,31367,31369,31371,31373],{"class":290,"line":8145},[288,31368,31274],{"class":298},[288,31370,344],{"class":294},[288,31372,30996],{"class":347},[288,31374,31375],{"class":298},".f7(x)\n",[288,31377,31378,31380],{"class":290,"line":8150},[288,31379,14925],{"class":294},[288,31381,31382],{"class":298}," x\n",[288,31384,31385],{"class":290,"line":8156},[288,31386,2572],{"emptyLinePlaceholder":217},[288,31388,31389,31391,31394,31396,31399],{"class":290,"line":8183},[288,31390,1703],{"class":294},[288,31392,31393],{"class":347}," __name__",[288,31395,3121],{"class":294},[288,31397,31398],{"class":403},"\"__main__\"",[288,31400,3911],{"class":298},[288,31402,31403],{"class":290,"line":8188},[288,31404,31405],{"class":357},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[288,31407,31408,31411,31413,31415,31418,31420,31423,31425,31427],{"class":290,"line":8194},[288,31409,31410],{"class":298},"    device",[288,31412,344],{"class":294},[288,31414,30624],{"class":298},[288,31416,31417],{"class":403},"\"cuda\"",[288,31419,1876],{"class":294},[288,31421,31422],{"class":298}," torch.cuda.is_available() ",[288,31424,1873],{"class":294},[288,31426,30649],{"class":403},[288,31428,305],{"class":298},[288,31430,31431],{"class":290,"line":8206},[288,31432,31433],{"class":357},"    # 如果就是想指定用cpu用下方代码:\n",[288,31435,31436],{"class":290,"line":8218},[288,31437,31438],{"class":357},"    # device=\"cpu\"\n",[288,31440,31441],{"class":290,"line":8230},[288,31442,31443],{"class":357},"    # print(device)\n",[288,31445,31446],{"class":290,"line":9889},[288,31447,2572],{"emptyLinePlaceholder":217},[288,31449,31450],{"class":290,"line":9914},[288,31451,31452],{"class":357},"    # 实例化模型\n",[288,31454,31455],{"class":290,"line":9937},[288,31456,31457],{"class":357},"    # 将模型放到设备中去运行\n",[288,31459,31460,31463,31465],{"class":290,"line":9961},[288,31461,31462],{"class":298},"    model",[288,31464,344],{"class":294},[288,31466,31467],{"class":298},"LeNet().to(device)\n",[288,31469,31470,31473,31476,31478,31480,31482,31484,31486],{"class":290,"line":9966},[288,31471,31472],{"class":347},"    print",[288,31474,31475],{"class":298},"(summary(model,(",[288,31477,516],{"class":347},[288,31479,675],{"class":298},[288,31481,1198],{"class":347},[288,31483,675],{"class":298},[288,31485,1198],{"class":347},[288,31487,31488],{"class":298},")))\n",[19,31490,31491],{},[200,31492],{"alt":205,"src":31493},"\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",[19,31495,31496],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[243,31498,31499],{"start":206},[246,31500,31501],{},"训练",[19,31503,31504],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31506,31507],{},"在训练之前可以将数据展示看一下",[280,31509,31511],{"className":30551,"code":31510,"language":30553,"meta":205,"style":205},"# 建立画图的函数，用于展示数据\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",[25,31512,31513,31518,31523,31535,31547,31560,31565,31577,31582,31594,31599,31611,31615,31619,31640,31652,31657,31678,31689,31693,31698,31716,31727,31732,31743,31748,31759,31763,31768,31783,31796,31801,31806,31819,31832,31845,31850,31854,31859,31879,31896,31916,31929,31942,31952,31967],{"__ignoreMap":205},[288,31514,31515],{"class":290,"line":291},[288,31516,31517],{"class":357},"# 建立画图的函数，用于展示数据\n",[288,31519,31520],{"class":290,"line":206},[288,31521,31522],{"class":357},"# torchvision中包含很多内置的数据集\n",[288,31524,31525,31527,31530,31532],{"class":290,"line":1352},[288,31526,30910],{"class":294},[288,31528,31529],{"class":298}," sklearn.externals.array_api_compat.torch ",[288,31531,30565],{"class":294},[288,31533,31534],{"class":298}," squeeze\n",[288,31536,31537,31539,31542,31544],{"class":290,"line":1367},[288,31538,30910],{"class":294},[288,31540,31541],{"class":298}," torchvision.datasets ",[288,31543,30565],{"class":294},[288,31545,31546],{"class":298}," FashionMNIST\n",[288,31548,31549,31551,31554,31557],{"class":290,"line":1373},[288,31550,30565],{"class":294},[288,31552,31553],{"class":298}," numpy ",[288,31555,31556],{"class":294},"as",[288,31558,31559],{"class":298}," np\n",[288,31561,31562],{"class":290,"line":1387},[288,31563,31564],{"class":357},"# 引入处理数据集的包\n",[288,31566,31567,31569,31572,31574],{"class":290,"line":1393},[288,31568,30910],{"class":294},[288,31570,31571],{"class":298}," torchvision ",[288,31573,30565],{"class":294},[288,31575,31576],{"class":298}," transforms\n",[288,31578,31579],{"class":290,"line":1484},[288,31580,31581],{"class":357},"# 从torch库中引入数据处理的包\n",[288,31583,31584,31586,31589,31591],{"class":290,"line":1490},[288,31585,30565],{"class":294},[288,31587,31588],{"class":298}," torch.utils.data ",[288,31590,31556],{"class":294},[288,31592,31593],{"class":298}," Data\n",[288,31595,31596],{"class":290,"line":1502},[288,31597,31598],{"class":357},"# 导入画图的库\n",[288,31600,31601,31603,31606,31608],{"class":290,"line":1784},[288,31602,30565],{"class":294},[288,31604,31605],{"class":298}," matplotlib.pyplot ",[288,31607,31556],{"class":294},[288,31609,31610],{"class":298}," plt\n",[288,31612,31613],{"class":290,"line":1789},[288,31614,2572],{"emptyLinePlaceholder":217},[288,31616,31617],{"class":290,"line":1795},[288,31618,2572],{"emptyLinePlaceholder":217},[288,31620,31621,31624,31626,31629,31632,31634,31637],{"class":290,"line":1800},[288,31622,31623],{"class":298},"train_data",[288,31625,344],{"class":294},[288,31627,31628],{"class":298},"FashionMNIST(",[288,31630,31631],{"class":5389},"root",[288,31633,344],{"class":294},[288,31635,31636],{"class":403},"'.\u002Fdata'",[288,31638,31639],{"class":298},",\n",[288,31641,31642,31645,31647,31650],{"class":290,"line":1814},[288,31643,31644],{"class":5389},"                        train",[288,31646,344],{"class":294},[288,31648,31649],{"class":347},"True",[288,31651,31639],{"class":298},[288,31653,31654],{"class":290,"line":1819},[288,31655,31656],{"class":357},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[288,31658,31659,31662,31664,31667,31670,31672,31675],{"class":290,"line":1825},[288,31660,31661],{"class":5389},"                        transform",[288,31663,344],{"class":294},[288,31665,31666],{"class":298},"transforms.Compose([transforms.Resize(",[288,31668,31669],{"class":5389},"size",[288,31671,344],{"class":294},[288,31673,31674],{"class":347},"224",[288,31676,31677],{"class":298},"),transforms.ToTensor()]),\n",[288,31679,31680,31683,31685,31687],{"class":290,"line":1846},[288,31681,31682],{"class":5389},"                        download",[288,31684,344],{"class":294},[288,31686,31649],{"class":347},[288,31688,305],{"class":298},[288,31690,31691],{"class":290,"line":1851},[288,31692,2572],{"emptyLinePlaceholder":217},[288,31694,31695],{"class":290,"line":1865},[288,31696,31697],{"class":357},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[288,31699,31700,31703,31705,31708,31711,31713],{"class":290,"line":1870},[288,31701,31702],{"class":298},"train_loader",[288,31704,344],{"class":294},[288,31706,31707],{"class":298},"Data.DataLoader(",[288,31709,31710],{"class":5389},"dataset",[288,31712,344],{"class":294},[288,31714,31715],{"class":298},"train_data,\n",[288,31717,31718,31721,31723,31725],{"class":290,"line":1899},[288,31719,31720],{"class":5389},"                             batch_size",[288,31722,344],{"class":294},[288,31724,502],{"class":347},[288,31726,31639],{"class":298},[288,31728,31729],{"class":290,"line":1904},[288,31730,31731],{"class":357},"                             # 数据是否打乱\n",[288,31733,31734,31737,31739,31741],{"class":290,"line":1921},[288,31735,31736],{"class":5389},"                             shuffle",[288,31738,344],{"class":294},[288,31740,31649],{"class":347},[288,31742,31639],{"class":298},[288,31744,31745],{"class":290,"line":1926},[288,31746,31747],{"class":357},"                             # 规定加载数据的进程\n",[288,31749,31750,31753,31755,31757],{"class":290,"line":1931},[288,31751,31752],{"class":5389},"                             num_workers",[288,31754,344],{"class":294},[288,31756,490],{"class":347},[288,31758,305],{"class":298},[288,31760,31761],{"class":290,"line":1936},[288,31762,2572],{"emptyLinePlaceholder":217},[288,31764,31765],{"class":290,"line":1950},[288,31766,31767],{"class":357},"# 获得一个batch的数据\n",[288,31769,31770,31772,31775,31777,31780],{"class":290,"line":1955},[288,31771,3197],{"class":294},[288,31773,31774],{"class":298}," step,(b_x,b_y) ",[288,31776,26216],{"class":294},[288,31778,31779],{"class":347}," enumerate",[288,31781,31782],{"class":298},"(train_loader):\n",[288,31784,31785,31787,31790,31792,31794],{"class":290,"line":2749},[288,31786,3273],{"class":294},[288,31788,31789],{"class":298}," step ",[288,31791,1257],{"class":294},[288,31793,4265],{"class":347},[288,31795,3911],{"class":298},[288,31797,31798],{"class":290,"line":2763},[288,31799,31800],{"class":294},"        break\n",[288,31802,31803],{"class":290,"line":2771},[288,31804,31805],{"class":357},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[288,31807,31808,31811,31813,31816],{"class":290,"line":2776},[288,31809,31810],{"class":298},"batch_x",[288,31812,344],{"class":294},[288,31814,31815],{"class":298},"b_x.squeeze().numpy()  ",[288,31817,31818],{"class":357},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[288,31820,31821,31824,31826,31829],{"class":290,"line":2782},[288,31822,31823],{"class":298},"batch_y",[288,31825,344],{"class":294},[288,31827,31828],{"class":298},"b_y.numpy()   ",[288,31830,31831],{"class":357},"#将张量转换成功numpy数组\n",[288,31833,31834,31837,31839,31842],{"class":290,"line":2788},[288,31835,31836],{"class":298},"class_label",[288,31838,344],{"class":294},[288,31840,31841],{"class":298},"train_data.classes  ",[288,31843,31844],{"class":357},"#训练集标签\n",[288,31846,31847],{"class":290,"line":2793},[288,31848,31849],{"class":357},"# print(class_label)\n",[288,31851,31852],{"class":290,"line":8121},[288,31853,2572],{"emptyLinePlaceholder":217},[288,31855,31856],{"class":290,"line":8145},[288,31857,31858],{"class":357},"# 可视化一个batch的图像\n",[288,31860,31861,31864,31867,31869,31871,31873,31875,31877],{"class":290,"line":8150},[288,31862,31863],{"class":298},"plt.figure(",[288,31865,31866],{"class":5389},"figsize",[288,31868,344],{"class":294},[288,31870,299],{"class":298},[288,31872,795],{"class":347},[288,31874,675],{"class":298},[288,31876,616],{"class":347},[288,31878,30670],{"class":298},[288,31880,31881,31883,31886,31888,31891,31893],{"class":290,"line":8156},[288,31882,3197],{"class":294},[288,31884,31885],{"class":298}," ii ",[288,31887,26216],{"class":294},[288,31889,31890],{"class":298}," np.arange(",[288,31892,7531],{"class":347},[288,31894,31895],{"class":298},"(batch_y)):\n",[288,31897,31898,31901,31903,31905,31907,31910,31912,31914],{"class":290,"line":8183},[288,31899,31900],{"class":298},"    plt.subplot(",[288,31902,590],{"class":347},[288,31904,675],{"class":298},[288,31906,898],{"class":347},[288,31908,31909],{"class":298},",ii ",[288,31911,778],{"class":294},[288,31913,25291],{"class":347},[288,31915,305],{"class":298},[288,31917,31918,31921,31924,31926],{"class":290,"line":8188},[288,31919,31920],{"class":298},"    plt.imshow(batch_x[ii,:,:],",[288,31922,31923],{"class":5389},"cmap",[288,31925,344],{"class":294},[288,31927,31928],{"class":298},"plt.cm.gray)\n",[288,31930,31931,31934,31936,31938,31940],{"class":290,"line":8194},[288,31932,31933],{"class":298},"    plt.title(class_label[batch_y[ii]],",[288,31935,31669],{"class":5389},[288,31937,344],{"class":294},[288,31939,743],{"class":347},[288,31941,305],{"class":298},[288,31943,31944,31947,31950],{"class":290,"line":8206},[288,31945,31946],{"class":298},"    plt.axis(",[288,31948,31949],{"class":403},"\"off\"",[288,31951,305],{"class":298},[288,31953,31954,31957,31960,31962,31965],{"class":290,"line":8218},[288,31955,31956],{"class":298},"    plt.subplots_adjust(",[288,31958,31959],{"class":5389},"wspace",[288,31961,344],{"class":294},[288,31963,31964],{"class":347},"0.05",[288,31966,305],{"class":298},[288,31968,31969],{"class":290,"line":8230},[288,31970,31971],{"class":298},"plt.show()\n",[19,31973,31974],{},"用matplotlib进行展示的过程可以后续再补",[19,31976,31977],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31979,31980],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31982,31983],{},"模型训练：",[280,31985,31987],{"className":30551,"code":31986,"language":30553,"meta":205,"style":205},"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",[25,31988,31989,31996,32003,32007,32019,32025,32036,32046,32056,32066,32076,32081,32093,32103,32107,32111,32116,32127,32140,32151,32168,32179,32218,32234,32246,32257,32262,32273,32289,32300,32311,32322,32329,32333,32338,32343,32347,32352,32362,32383,32387,32391,32396,32401,32406,32426,32430,32435,32445,32449,32454,32463,32468,32473,32478,32488,32492,32496,32501,32506,32516,32521,32531,32536,32545,32550,32559,32564,32573,32577,32582,32592,32596,32600,32605,32620,32648,32663,32667,32672,32677,32686,32691,32700,32705,32714,32719,32728,32733,32742,32747,32756,32761,32774,32779,32789,32794,32804,32810,32816,32822,32828,32839,32845,32865,32871,32882,32888,32894,32900,32906,32912,32918,32924,32944,32950,32966,32972,32986,32992,33007,33013,33022,33028,33037,33043,33049,33058,33064,33075,33081,33100,33106,33117,33123,33143,33159,33165,33179,33185,33191,33202,33208,33214,33224,33230,33241,33247,33257,33262,33268,33317,33364,33369,33375,33394,33400,33420,33426,33432,33442,33447,33453,33469,33514,33520,33526,33532,33543,33549,33555,33561,33579,33593,33602,33611,33620,33629,33635,33641,33649,33654,33660,33671,33677,33697,33703,33709,33715,33732,33738,33744,33750,33756,33762,33789,33813,33819,33825,33831,33842,33853,33859,33876,33899,33922,33928,33933,33942,33952,33958,33963,33969,33982,33988,33999,34010,34029],{"__ignoreMap":205},[288,31990,31991,31993],{"class":290,"line":291},[288,31992,30565],{"class":294},[288,31994,31995],{"class":298}," copy\n",[288,31997,31998,32000],{"class":290,"line":206},[288,31999,30565],{"class":294},[288,32001,32002],{"class":298}," time\n",[288,32004,32005],{"class":290,"line":1352},[288,32006,2572],{"emptyLinePlaceholder":217},[288,32008,32009,32011,32014,32016],{"class":290,"line":1367},[288,32010,30565],{"class":294},[288,32012,32013],{"class":298}," pandas ",[288,32015,31556],{"class":294},[288,32017,32018],{"class":298}," pd\n",[288,32020,32021,32023],{"class":290,"line":1373},[288,32022,30565],{"class":294},[288,32024,30568],{"class":298},[288,32026,32027,32029,32031,32033],{"class":290,"line":1387},[288,32028,30910],{"class":294},[288,32030,31588],{"class":298},[288,32032,30565],{"class":294},[288,32034,32035],{"class":298}," Dataset\n",[288,32037,32038,32040,32042,32044],{"class":290,"line":1393},[288,32039,30910],{"class":294},[288,32041,31541],{"class":298},[288,32043,30565],{"class":294},[288,32045,31546],{"class":298},[288,32047,32048,32050,32052,32054],{"class":290,"line":1484},[288,32049,30910],{"class":294},[288,32051,31571],{"class":298},[288,32053,30565],{"class":294},[288,32055,31576],{"class":298},[288,32057,32058,32060,32062,32064],{"class":290,"line":1490},[288,32059,30565],{"class":294},[288,32061,31588],{"class":298},[288,32063,31556],{"class":294},[288,32065,31593],{"class":298},[288,32067,32068,32070,32072,32074],{"class":290,"line":1502},[288,32069,30565],{"class":294},[288,32071,31605],{"class":298},[288,32073,31556],{"class":294},[288,32075,31610],{"class":298},[288,32077,32078],{"class":290,"line":1784},[288,32079,32080],{"class":357},"# 导入模型\n",[288,32082,32083,32085,32088,32090],{"class":290,"line":1789},[288,32084,30910],{"class":294},[288,32086,32087],{"class":298}," model ",[288,32089,30565],{"class":294},[288,32091,32092],{"class":298}," LeNet\n",[288,32094,32095,32097,32099,32101],{"class":290,"line":1795},[288,32096,30910],{"class":294},[288,32098,30913],{"class":298},[288,32100,30565],{"class":294},[288,32102,30918],{"class":298},[288,32104,32105],{"class":290,"line":1800},[288,32106,2572],{"emptyLinePlaceholder":217},[288,32108,32109],{"class":290,"line":1814},[288,32110,2572],{"emptyLinePlaceholder":217},[288,32112,32113],{"class":290,"line":1819},[288,32114,32115],{"class":357},"# 处理训练集与验证集函数--->划分数据集\n",[288,32117,32118,32121,32124],{"class":290,"line":1825},[288,32119,32120],{"class":294},"def",[288,32122,32123],{"class":2135}," train_val_data_process",[288,32125,32126],{"class":298},"():\n",[288,32128,32129,32132,32134,32136,32138],{"class":290,"line":1846},[288,32130,32131],{"class":298},"    train_data",[288,32133,344],{"class":294},[288,32135,31628],{"class":298},[288,32137,31636],{"class":403},[288,32139,31639],{"class":298},[288,32141,32142,32145,32147,32149],{"class":290,"line":1851},[288,32143,32144],{"class":5389},"                            train",[288,32146,344],{"class":294},[288,32148,31649],{"class":347},[288,32150,31639],{"class":298},[288,32152,32153,32156,32158,32160,32162,32164,32166],{"class":290,"line":1865},[288,32154,32155],{"class":5389},"                            transform",[288,32157,344],{"class":294},[288,32159,31666],{"class":298},[288,32161,31669],{"class":5389},[288,32163,344],{"class":294},[288,32165,1198],{"class":347},[288,32167,31677],{"class":298},[288,32169,32170,32173,32175,32177],{"class":290,"line":1870},[288,32171,32172],{"class":5389},"                            download",[288,32174,344],{"class":294},[288,32176,31649],{"class":347},[288,32178,305],{"class":298},[288,32180,32181,32184,32186,32189,32192,32194,32197,32199,32201,32204,32206,32208,32211,32213,32215],{"class":290,"line":1899},[288,32182,32183],{"class":298},"    train_data,val_data",[288,32185,344],{"class":294},[288,32187,32188],{"class":298},"Data.random_split(train_data,[",[288,32190,32191],{"class":347},"round",[288,32193,299],{"class":298},[288,32195,32196],{"class":347},"0.8",[288,32198,752],{"class":294},[288,32200,7531],{"class":347},[288,32202,32203],{"class":298},"(train_data)),",[288,32205,32191],{"class":347},[288,32207,299],{"class":298},[288,32209,32210],{"class":347},"0.2",[288,32212,752],{"class":294},[288,32214,7531],{"class":347},[288,32216,32217],{"class":298},"(train_data))])\n",[288,32219,32220,32223,32225,32228,32230,32232],{"class":290,"line":1904},[288,32221,32222],{"class":298},"    train_dataloader ",[288,32224,344],{"class":294},[288,32226,32227],{"class":298}," Data.DataLoader(",[288,32229,31710],{"class":5389},[288,32231,344],{"class":294},[288,32233,31715],{"class":298},[288,32235,32236,32239,32241,32244],{"class":290,"line":1921},[288,32237,32238],{"class":5389},"                                       batch_size",[288,32240,344],{"class":294},[288,32242,32243],{"class":347},"128",[288,32245,31639],{"class":298},[288,32247,32248,32251,32253,32255],{"class":290,"line":1926},[288,32249,32250],{"class":5389},"                                       shuffle",[288,32252,344],{"class":294},[288,32254,31649],{"class":347},[288,32256,31639],{"class":298},[288,32258,32259],{"class":290,"line":1931},[288,32260,32261],{"class":357},"                                       # 规定8个进程\n",[288,32263,32264,32267,32269,32271],{"class":290,"line":1936},[288,32265,32266],{"class":5389},"                                       num_workers",[288,32268,344],{"class":294},[288,32270,692],{"class":347},[288,32272,305],{"class":298},[288,32274,32275,32278,32280,32282,32284,32286],{"class":290,"line":1950},[288,32276,32277],{"class":298},"    val_dataloader",[288,32279,344],{"class":294},[288,32281,31707],{"class":298},[288,32283,31710],{"class":5389},[288,32285,344],{"class":294},[288,32287,32288],{"class":298},"val_data,\n",[288,32290,32291,32294,32296,32298],{"class":290,"line":1955},[288,32292,32293],{"class":5389},"                                   batch_size",[288,32295,344],{"class":294},[288,32297,32243],{"class":347},[288,32299,31639],{"class":298},[288,32301,32302,32305,32307,32309],{"class":290,"line":2749},[288,32303,32304],{"class":5389},"                                   shuffle",[288,32306,344],{"class":294},[288,32308,31649],{"class":347},[288,32310,31639],{"class":298},[288,32312,32313,32316,32318,32320],{"class":290,"line":2763},[288,32314,32315],{"class":5389},"                                   num_workers",[288,32317,344],{"class":294},[288,32319,692],{"class":347},[288,32321,305],{"class":298},[288,32323,32324,32326],{"class":290,"line":2771},[288,32325,4262],{"class":294},[288,32327,32328],{"class":298}," train_dataloader,val_dataloader\n",[288,32330,32331],{"class":290,"line":2776},[288,32332,2572],{"emptyLinePlaceholder":217},[288,32334,32335],{"class":290,"line":2782},[288,32336,32337],{"class":357},"# 验证是否出错\n",[288,32339,32340],{"class":290,"line":2788},[288,32341,32342],{"class":357},"# train_val_data_process()\n",[288,32344,32345],{"class":290,"line":2793},[288,32346,2572],{"emptyLinePlaceholder":217},[288,32348,32349],{"class":290,"line":8121},[288,32350,32351],{"class":357},"# 定义模型训练函数\n",[288,32353,32354,32356,32359],{"class":290,"line":8145},[288,32355,32120],{"class":294},[288,32357,32358],{"class":2135}," train_model_process",[288,32360,32361],{"class":298},"(model,train_dataloader,val_dataloader,num_epochs):\n",[288,32363,32364,32366,32368,32370,32372,32374,32376,32378,32381],{"class":290,"line":8150},[288,32365,31410],{"class":298},[288,32367,344],{"class":294},[288,32369,30624],{"class":298},[288,32371,31417],{"class":403},[288,32373,1876],{"class":294},[288,32375,31422],{"class":298},[288,32377,1873],{"class":294},[288,32379,32380],{"class":403}," 'cpu'",[288,32382,305],{"class":298},[288,32384,32385],{"class":290,"line":8156},[288,32386,2572],{"emptyLinePlaceholder":217},[288,32388,32389],{"class":290,"line":8183},[288,32390,2572],{"emptyLinePlaceholder":217},[288,32392,32393],{"class":290,"line":8188},[288,32394,32395],{"class":357},"    # 定义优化器\n",[288,32397,32398],{"class":290,"line":8194},[288,32399,32400],{"class":357},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[288,32402,32403],{"class":290,"line":8206},[288,32404,32405],{"class":357},"    # lr为学习率\n",[288,32407,32408,32411,32413,32416,32419,32421,32424],{"class":290,"line":8218},[288,32409,32410],{"class":298},"    optimizer",[288,32412,344],{"class":294},[288,32414,32415],{"class":298},"torch.optim.Adam(model.parameters(),",[288,32417,32418],{"class":5389},"lr",[288,32420,344],{"class":294},[288,32422,32423],{"class":347},"0.001",[288,32425,305],{"class":298},[288,32427,32428],{"class":290,"line":8230},[288,32429,2572],{"emptyLinePlaceholder":217},[288,32431,32432],{"class":290,"line":9889},[288,32433,32434],{"class":357},"    # 定义损失函数使用交叉熵损失函数\n",[288,32436,32437,32440,32442],{"class":290,"line":9914},[288,32438,32439],{"class":298},"    criterion",[288,32441,344],{"class":294},[288,32443,32444],{"class":298},"nn.CrossEntropyLoss()\n",[288,32446,32447],{"class":290,"line":9937},[288,32448,2572],{"emptyLinePlaceholder":217},[288,32450,32451],{"class":290,"line":9961},[288,32452,32453],{"class":357},"    # 将模型放到GPU中进行训练\n",[288,32455,32456,32458,32460],{"class":290,"line":9966},[288,32457,31462],{"class":298},[288,32459,344],{"class":294},[288,32461,32462],{"class":298},"model.to(device)\n",[288,32464,32465],{"class":290,"line":9971},[288,32466,32467],{"class":357},"    # 复制当前模型的参数\n",[288,32469,32470],{"class":290,"line":9976},[288,32471,32472],{"class":357},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[288,32474,32475],{"class":290,"line":9985},[288,32476,32477],{"class":357},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[288,32479,32480,32483,32485],{"class":290,"line":9990},[288,32481,32482],{"class":298},"    best_model_wts",[288,32484,344],{"class":294},[288,32486,32487],{"class":298},"copy.deepcopy(model.state_dict())\n",[288,32489,32490],{"class":290,"line":9996},[288,32491,2572],{"emptyLinePlaceholder":217},[288,32493,32494],{"class":290,"line":10017},[288,32495,2572],{"emptyLinePlaceholder":217},[288,32497,32498],{"class":290,"line":10023},[288,32499,32500],{"class":357},"    # 初始化参数\n",[288,32502,32503],{"class":290,"line":10037},[288,32504,32505],{"class":357},"    # 最高准确度\n",[288,32507,32508,32511,32513],{"class":290,"line":10043},[288,32509,32510],{"class":298},"    best_acc",[288,32512,344],{"class":294},[288,32514,32515],{"class":347},"0.0\n",[288,32517,32518],{"class":290,"line":10070},[288,32519,32520],{"class":357},"    # 训练集损失列表\n",[288,32522,32523,32526,32528],{"class":290,"line":10079},[288,32524,32525],{"class":298},"    train_loss_all",[288,32527,344],{"class":294},[288,32529,32530],{"class":298},"[]\n",[288,32532,32533],{"class":290,"line":10085},[288,32534,32535],{"class":357},"    # 验证集函数列表\n",[288,32537,32538,32541,32543],{"class":290,"line":10093},[288,32539,32540],{"class":298},"    val_loss_all",[288,32542,344],{"class":294},[288,32544,32530],{"class":298},[288,32546,32547],{"class":290,"line":10098},[288,32548,32549],{"class":357},"    # 训练集准确度列表\n",[288,32551,32552,32555,32557],{"class":290,"line":16777},[288,32553,32554],{"class":298},"    train_acc_all",[288,32556,344],{"class":294},[288,32558,32530],{"class":298},[288,32560,32561],{"class":290,"line":16783},[288,32562,32563],{"class":357},"    # 验证集准确度列表\n",[288,32565,32566,32569,32571],{"class":290,"line":16806},[288,32567,32568],{"class":298},"    val_acc_all",[288,32570,344],{"class":294},[288,32572,32530],{"class":298},[288,32574,32575],{"class":290,"line":16812},[288,32576,2572],{"emptyLinePlaceholder":217},[288,32578,32579],{"class":290,"line":16835},[288,32580,32581],{"class":357},"    # 保存当前时间--->方便看每轮训练的时间\n",[288,32583,32584,32587,32589],{"class":290,"line":16849},[288,32585,32586],{"class":298},"    since",[288,32588,344],{"class":294},[288,32590,32591],{"class":298},"time.time()\n",[288,32593,32594],{"class":290,"line":16869},[288,32595,2572],{"emptyLinePlaceholder":217},[288,32597,32598],{"class":290,"line":16875},[288,32599,2572],{"emptyLinePlaceholder":217},[288,32601,32602],{"class":290,"line":16886},[288,32603,32604],{"class":357},"    # 准备工作完成--->开始训练模型\n",[288,32606,32607,32609,32612,32614,32617],{"class":290,"line":16909},[288,32608,3373],{"class":294},[288,32610,32611],{"class":298}," epoch ",[288,32613,26216],{"class":294},[288,32615,32616],{"class":347}," range",[288,32618,32619],{"class":298},"(num_epochs):\n",[288,32621,32622,32625,32627,32630,32633,32635,32637,32639,32642,32644,32646],{"class":290,"line":16931},[288,32623,32624],{"class":347},"        print",[288,32626,299],{"class":298},[288,32628,32629],{"class":403},"\"Epoch ",[288,32631,32632],{"class":347},"{}",[288,32634,881],{"class":403},[288,32636,32632],{"class":347},[288,32638,109],{"class":403},[288,32640,32641],{"class":298},".format(epoch,num_epochs",[288,32643,829],{"class":294},[288,32645,516],{"class":347},[288,32647,30670],{"class":298},[288,32649,32650,32652,32654,32657,32659,32661],{"class":290,"line":16936},[288,32651,32624],{"class":347},[288,32653,299],{"class":298},[288,32655,32656],{"class":403},"\"-\"",[288,32658,752],{"class":294},[288,32660,743],{"class":347},[288,32662,305],{"class":298},[288,32664,32665],{"class":290,"line":16942},[288,32666,2572],{"emptyLinePlaceholder":217},[288,32668,32669],{"class":290,"line":16956},[288,32670,32671],{"class":357},"        # 初始化参数\n",[288,32673,32674],{"class":290,"line":16969},[288,32675,32676],{"class":357},"        # 训练集损失函数\n",[288,32678,32679,32682,32684],{"class":290,"line":16974},[288,32680,32681],{"class":298},"        train_loss",[288,32683,344],{"class":294},[288,32685,32515],{"class":347},[288,32687,32688],{"class":290,"line":16988},[288,32689,32690],{"class":357},"        # 训练集准确度\n",[288,32692,32693,32696,32698],{"class":290,"line":16993},[288,32694,32695],{"class":298},"        train_corrects",[288,32697,344],{"class":294},[288,32699,3257],{"class":347},[288,32701,32702],{"class":290,"line":16999},[288,32703,32704],{"class":357},"        # 验证集损失函数\n",[288,32706,32707,32710,32712],{"class":290,"line":17004},[288,32708,32709],{"class":298},"        val_loss",[288,32711,344],{"class":294},[288,32713,32515],{"class":347},[288,32715,32716],{"class":290,"line":17018},[288,32717,32718],{"class":357},"        # 验证集准确度\n",[288,32720,32721,32724,32726],{"class":290,"line":17023},[288,32722,32723],{"class":298},"        val_corrects",[288,32725,344],{"class":294},[288,32727,3257],{"class":347},[288,32729,32730],{"class":290,"line":17028},[288,32731,32732],{"class":357},"        # 训练集样本数量\n",[288,32734,32735,32738,32740],{"class":290,"line":17042},[288,32736,32737],{"class":298},"        train_num",[288,32739,344],{"class":294},[288,32741,3257],{"class":347},[288,32743,32744],{"class":290,"line":17054},[288,32745,32746],{"class":357},"        # 验证集样本数量\n",[288,32748,32749,32752,32754],{"class":290,"line":17059},[288,32750,32751],{"class":298},"        val_num",[288,32753,344],{"class":294},[288,32755,3257],{"class":347},[288,32757,32758],{"class":290,"line":17072},[288,32759,32760],{"class":357},"        # 将数据放到设备,并开始训练\n",[288,32762,32763,32765,32767,32769,32771],{"class":290,"line":17077},[288,32764,3575],{"class":294},[288,32766,31774],{"class":298},[288,32768,26216],{"class":294},[288,32770,31779],{"class":347},[288,32772,32773],{"class":298},"(train_dataloader):\n",[288,32775,32776],{"class":290,"line":17082},[288,32777,32778],{"class":357},"            # 将特征放入到训练设备\n",[288,32780,32781,32784,32786],{"class":290,"line":17087},[288,32782,32783],{"class":298},"            b_x",[288,32785,344],{"class":294},[288,32787,32788],{"class":298},"b_x.to(device)\n",[288,32790,32791],{"class":290,"line":17100},[288,32792,32793],{"class":357},"            # 将标签放入到训练设备当中\n",[288,32795,32796,32799,32801],{"class":290,"line":17105},[288,32797,32798],{"class":298},"            b_y",[288,32800,344],{"class":294},[288,32802,32803],{"class":298},"b_y.to(device)\n",[288,32805,32807],{"class":290,"line":32806},98,[288,32808,32809],{"class":357},"            # 设置模型为训练模式\n",[288,32811,32813],{"class":290,"line":32812},99,[288,32814,32815],{"class":298},"            model.train()\n",[288,32817,32819],{"class":290,"line":32818},100,[288,32820,32821],{"class":357},"            # 将数据放到模型当中,开始前向传播\n",[288,32823,32825],{"class":290,"line":32824},101,[288,32826,32827],{"class":357},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[288,32829,32831,32834,32836],{"class":290,"line":32830},102,[288,32832,32833],{"class":298},"            output",[288,32835,344],{"class":294},[288,32837,32838],{"class":298},"model(b_x)\n",[288,32840,32842],{"class":290,"line":32841},103,[288,32843,32844],{"class":357},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[288,32846,32848,32851,32853,32856,32859,32861,32863],{"class":290,"line":32847},104,[288,32849,32850],{"class":298},"            pre_lab",[288,32852,344],{"class":294},[288,32854,32855],{"class":298},"torch.argmax(output,",[288,32857,32858],{"class":5389},"dim",[288,32860,344],{"class":294},[288,32862,516],{"class":347},[288,32864,305],{"class":298},[288,32866,32868],{"class":290,"line":32867},105,[288,32869,32870],{"class":357},"            # 计算每一个batch的损失函数\n",[288,32872,32874,32877,32879],{"class":290,"line":32873},106,[288,32875,32876],{"class":298},"            loss",[288,32878,344],{"class":294},[288,32880,32881],{"class":298},"criterion(output,b_y)\n",[288,32883,32885],{"class":290,"line":32884},107,[288,32886,32887],{"class":357},"            # 将梯度初始化为0\n",[288,32889,32891],{"class":290,"line":32890},108,[288,32892,32893],{"class":298},"            optimizer.zero_grad()\n",[288,32895,32897],{"class":290,"line":32896},109,[288,32898,32899],{"class":357},"            # 梯度置为0后再进行反向传播\n",[288,32901,32903],{"class":290,"line":32902},110,[288,32904,32905],{"class":298},"            loss.backward()\n",[288,32907,32909],{"class":290,"line":32908},111,[288,32910,32911],{"class":357},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[288,32913,32915],{"class":290,"line":32914},112,[288,32916,32917],{"class":298},"            optimizer.step()\n",[288,32919,32921],{"class":290,"line":32920},113,[288,32922,32923],{"class":357},"            # loss.item()指的是batch的平均损失\n",[288,32925,32927,32930,32932,32935,32937,32940,32942],{"class":290,"line":32926},114,[288,32928,32929],{"class":298},"            train_loss",[288,32931,9650],{"class":294},[288,32933,32934],{"class":298},"loss.item()",[288,32936,752],{"class":294},[288,32938,32939],{"class":298},"b_x.size(",[288,32941,490],{"class":347},[288,32943,305],{"class":298},[288,32945,32947],{"class":290,"line":32946},115,[288,32948,32949],{"class":357},"            # 计算每个批次中正确预测的数量\n",[288,32951,32953,32956,32958,32961,32963],{"class":290,"line":32952},116,[288,32954,32955],{"class":298},"            train_corrects",[288,32957,9650],{"class":294},[288,32959,32960],{"class":298},"torch.sum(pre_lab",[288,32962,3121],{"class":294},[288,32964,32965],{"class":298},"b_y.data)\n",[288,32967,32969],{"class":290,"line":32968},117,[288,32970,32971],{"class":357},"            # 计算目前为止一共处理了多少样本\n",[288,32973,32975,32978,32980,32982,32984],{"class":290,"line":32974},118,[288,32976,32977],{"class":298},"            train_num",[288,32979,9650],{"class":294},[288,32981,32939],{"class":298},[288,32983,490],{"class":347},[288,32985,305],{"class":298},[288,32987,32989],{"class":290,"line":32988},119,[288,32990,32991],{"class":357},"        # 验证数据\n",[288,32993,32995,32997,33000,33002,33004],{"class":290,"line":32994},120,[288,32996,3575],{"class":294},[288,32998,32999],{"class":298}," step ,(b_x,b_y) ",[288,33001,26216],{"class":294},[288,33003,31779],{"class":347},[288,33005,33006],{"class":298},"(val_dataloader):\n",[288,33008,33010],{"class":290,"line":33009},121,[288,33011,33012],{"class":357},"            # 将特征放到验证设备当中\n",[288,33014,33016,33018,33020],{"class":290,"line":33015},122,[288,33017,32783],{"class":298},[288,33019,344],{"class":294},[288,33021,32788],{"class":298},[288,33023,33025],{"class":290,"line":33024},123,[288,33026,33027],{"class":357},"            # 将标签放到放到训练设备当中\n",[288,33029,33031,33033,33035],{"class":290,"line":33030},124,[288,33032,32798],{"class":298},[288,33034,344],{"class":294},[288,33036,32803],{"class":298},[288,33038,33040],{"class":290,"line":33039},125,[288,33041,33042],{"class":357},"            # 开启验证模式，设置模型为评估模式\n",[288,33044,33046],{"class":290,"line":33045},126,[288,33047,33048],{"class":298},"            model.eval()\n",[288,33050,33052,33055],{"class":290,"line":33051},127,[288,33053,33054],{"class":294},"            with",[288,33056,33057],{"class":298}," torch.no_grad():\n",[288,33059,33061],{"class":290,"line":33060},128,[288,33062,33063],{"class":357},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[288,33065,33067,33070,33072],{"class":290,"line":33066},129,[288,33068,33069],{"class":298},"                output ",[288,33071,344],{"class":294},[288,33073,33074],{"class":298}," model(b_x)\n",[288,33076,33078],{"class":290,"line":33077},130,[288,33079,33080],{"class":357},"                # 查找每一行中最大值对应的下标\n",[288,33082,33084,33087,33089,33092,33094,33096,33098],{"class":290,"line":33083},131,[288,33085,33086],{"class":298},"                pre_lab ",[288,33088,344],{"class":294},[288,33090,33091],{"class":298}," torch.argmax(output, ",[288,33093,32858],{"class":5389},[288,33095,344],{"class":294},[288,33097,516],{"class":347},[288,33099,305],{"class":298},[288,33101,33103],{"class":290,"line":33102},132,[288,33104,33105],{"class":357},"                # 计算验证集上的当前 batch 损失\n",[288,33107,33109,33112,33114],{"class":290,"line":33108},133,[288,33110,33111],{"class":298},"                val_batch_loss ",[288,33113,344],{"class":294},[288,33115,33116],{"class":298}," criterion(output, b_y)\n",[288,33118,33120],{"class":290,"line":33119},134,[288,33121,33122],{"class":357},"                # 对损失函数进行累加（按样本数加权）\n",[288,33124,33126,33129,33131,33134,33136,33139,33141],{"class":290,"line":33125},135,[288,33127,33128],{"class":298},"                val_loss ",[288,33130,9650],{"class":294},[288,33132,33133],{"class":298}," val_batch_loss.item() ",[288,33135,752],{"class":294},[288,33137,33138],{"class":298}," b_x.size(",[288,33140,490],{"class":347},[288,33142,305],{"class":298},[288,33144,33146,33149,33151,33154,33156],{"class":290,"line":33145},136,[288,33147,33148],{"class":298},"                val_corrects ",[288,33150,9650],{"class":294},[288,33152,33153],{"class":298}," torch.sum(pre_lab ",[288,33155,3121],{"class":294},[288,33157,33158],{"class":298}," b_y.data)\n",[288,33160,33162],{"class":290,"line":33161},137,[288,33163,33164],{"class":357},"                # 当前用于验证的样本数量\n",[288,33166,33168,33171,33173,33175,33177],{"class":290,"line":33167},138,[288,33169,33170],{"class":298},"            val_num ",[288,33172,9650],{"class":294},[288,33174,33138],{"class":298},[288,33176,490],{"class":347},[288,33178,305],{"class":298},[288,33180,33182],{"class":290,"line":33181},139,[288,33183,33184],{"class":357},"        # 计算并保存每一次迭代的loss值和准确率\n",[288,33186,33188],{"class":290,"line":33187},140,[288,33189,33190],{"class":357},"        # 计算并保存训练集的loss值\n",[288,33192,33194,33197,33199],{"class":290,"line":33193},141,[288,33195,33196],{"class":298},"        train_loss_all.append(train_loss",[288,33198,881],{"class":294},[288,33200,33201],{"class":298},"train_num)\n",[288,33203,33205],{"class":290,"line":33204},142,[288,33206,33207],{"class":357},"        # 取双精度\n",[288,33209,33211],{"class":290,"line":33210},143,[288,33212,33213],{"class":357},"        # 计算并保存训练集的准确率\n",[288,33215,33217,33220,33222],{"class":290,"line":33216},144,[288,33218,33219],{"class":298},"        train_acc_all.append(train_corrects.double().item()",[288,33221,881],{"class":294},[288,33223,33201],{"class":298},[288,33225,33227],{"class":290,"line":33226},145,[288,33228,33229],{"class":357},"        # 计算并保存验证集的loss值\n",[288,33231,33233,33236,33238],{"class":290,"line":33232},146,[288,33234,33235],{"class":298},"        val_loss_all.append(val_loss",[288,33237,881],{"class":294},[288,33239,33240],{"class":298},"val_num)\n",[288,33242,33244],{"class":290,"line":33243},147,[288,33245,33246],{"class":357},"        # 计算并保存验证集的准确率\n",[288,33248,33250,33253,33255],{"class":290,"line":33249},148,[288,33251,33252],{"class":298},"        val_acc_all.append(val_corrects.double().item()",[288,33254,881],{"class":294},[288,33256,33240],{"class":298},[288,33258,33260],{"class":290,"line":33259},149,[288,33261,2572],{"emptyLinePlaceholder":217},[288,33263,33265],{"class":290,"line":33264},150,[288,33266,33267],{"class":357},"        # 打印训练一轮的loss值和准确率\n",[288,33269,33271,33273,33275,33277,33279,33282,33284,33287,33289,33292,33294,33296,33298,33300,33303,33305,33307,33310,33312,33314],{"class":290,"line":33270},151,[288,33272,32624],{"class":347},[288,33274,299],{"class":298},[288,33276,3764],{"class":403},[288,33278,32632],{"class":347},[288,33280,33281],{"class":403},"train loss:",[288,33283,1193],{"class":347},[288,33285,33286],{"class":294},":.4f",[288,33288,1243],{"class":347},[288,33290,33291],{"class":403}," train acc:",[288,33293,1193],{"class":347},[288,33295,33286],{"class":294},[288,33297,1243],{"class":347},[288,33299,3764],{"class":403},[288,33301,33302],{"class":298},".format(epoch,train_loss_all[",[288,33304,829],{"class":294},[288,33306,516],{"class":347},[288,33308,33309],{"class":298},"],train_acc_all[",[288,33311,829],{"class":294},[288,33313,516],{"class":347},[288,33315,33316],{"class":298},"]))\n",[288,33318,33320,33322,33324,33326,33328,33331,33333,33335,33337,33340,33342,33344,33346,33348,33351,33353,33355,33358,33360,33362],{"class":290,"line":33319},152,[288,33321,32624],{"class":347},[288,33323,299],{"class":298},[288,33325,3764],{"class":403},[288,33327,32632],{"class":347},[288,33329,33330],{"class":403},"val loss:",[288,33332,1193],{"class":347},[288,33334,33286],{"class":294},[288,33336,1243],{"class":347},[288,33338,33339],{"class":403}," val acc:",[288,33341,1193],{"class":347},[288,33343,33286],{"class":294},[288,33345,1243],{"class":347},[288,33347,3764],{"class":403},[288,33349,33350],{"class":298},".format(epoch,val_loss_all[",[288,33352,829],{"class":294},[288,33354,516],{"class":347},[288,33356,33357],{"class":298},"],val_acc_all[",[288,33359,829],{"class":294},[288,33361,516],{"class":347},[288,33363,33316],{"class":298},[288,33365,33367],{"class":290,"line":33366},153,[288,33368,2572],{"emptyLinePlaceholder":217},[288,33370,33372],{"class":290,"line":33371},154,[288,33373,33374],{"class":357},"        # 判断准确度--->保存最优模型\n",[288,33376,33378,33380,33383,33385,33387,33389,33391],{"class":290,"line":33377},155,[288,33379,2669],{"class":294},[288,33381,33382],{"class":298}," val_acc_all[",[288,33384,829],{"class":294},[288,33386,516],{"class":347},[288,33388,1237],{"class":298},[288,33390,1257],{"class":294},[288,33392,33393],{"class":298},"best_acc:\n",[288,33395,33397],{"class":290,"line":33396},156,[288,33398,33399],{"class":357},"            # 保存当前模型准确度\n",[288,33401,33403,33406,33408,33410,33413,33415,33417],{"class":290,"line":33402},157,[288,33404,33405],{"class":298},"            best_acc:",[288,33407,338],{"class":347},[288,33409,344],{"class":294},[288,33411,33412],{"class":298},"val_acc_all[",[288,33414,829],{"class":294},[288,33416,516],{"class":347},[288,33418,33419],{"class":298},"]\n",[288,33421,33423],{"class":290,"line":33422},158,[288,33424,33425],{"class":357},"            # 保存当前的准确度\n",[288,33427,33429],{"class":290,"line":33428},159,[288,33430,33431],{"class":357},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[288,33433,33435,33438,33440],{"class":290,"line":33434},160,[288,33436,33437],{"class":298},"            best_model_wts",[288,33439,344],{"class":294},[288,33441,32487],{"class":298},[288,33443,33445],{"class":290,"line":33444},161,[288,33446,2572],{"emptyLinePlaceholder":217},[288,33448,33450],{"class":290,"line":33449},162,[288,33451,33452],{"class":357},"        # 计算耗时\n",[288,33454,33456,33459,33461,33464,33466],{"class":290,"line":33455},163,[288,33457,33458],{"class":298},"        time_use",[288,33460,344],{"class":294},[288,33462,33463],{"class":298},"time.time()",[288,33465,829],{"class":294},[288,33467,33468],{"class":298},"since\n",[288,33470,33472,33474,33476,33479,33481,33484,33486,33488,33490,33492,33494,33497,33500,33503,33505,33508,33510,33512],{"class":290,"line":33471},164,[288,33473,32624],{"class":347},[288,33475,299],{"class":298},[288,33477,33478],{"class":403},"'训练和验证耗费的时间",[288,33480,1193],{"class":347},[288,33482,33483],{"class":294},":.0f",[288,33485,1243],{"class":347},[288,33487,841],{"class":403},[288,33489,1193],{"class":347},[288,33491,33483],{"class":294},[288,33493,1243],{"class":347},[288,33495,33496],{"class":403},"s'",[288,33498,33499],{"class":298},".format(time_use",[288,33501,33502],{"class":294},"\u002F\u002F",[288,33504,1204],{"class":347},[288,33506,33507],{"class":298},",time_use",[288,33509,625],{"class":294},[288,33511,1204],{"class":347},[288,33513,30670],{"class":298},[288,33515,33517],{"class":290,"line":33516},165,[288,33518,33519],{"class":357},"    # 选择最优参数\n",[288,33521,33523],{"class":290,"line":33522},166,[288,33524,33525],{"class":357},"    # 加载最高准确率下的模型参数\n",[288,33527,33529],{"class":290,"line":33528},167,[288,33530,33531],{"class":357},"    # model.load_state_dict(best_model_wts)\n",[288,33533,33535,33538,33541],{"class":290,"line":33534},168,[288,33536,33537],{"class":298},"    torch.save(model.state_dict(best_model_wts), ",[288,33539,33540],{"class":403},"'.\u002Fbest_model.pth'",[288,33542,305],{"class":298},[288,33544,33546],{"class":290,"line":33545},169,[288,33547,33548],{"class":357},"    # 或者写成\n",[288,33550,33552],{"class":290,"line":33551},170,[288,33553,33554],{"class":357},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[288,33556,33558],{"class":290,"line":33557},171,[288,33559,33560],{"class":357},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[288,33562,33564,33567,33569,33572,33575,33577],{"class":290,"line":33563},172,[288,33565,33566],{"class":298},"    train_process",[288,33568,344],{"class":294},[288,33570,33571],{"class":298},"pd.DataFrame(",[288,33573,33574],{"class":5389},"data",[288,33576,344],{"class":294},[288,33578,1718],{"class":298},[288,33580,33582,33585,33587,33590],{"class":290,"line":33581},173,[288,33583,33584],{"class":403},"        \"epoch\"",[288,33586,1156],{"class":298},[288,33588,33589],{"class":347},"range",[288,33591,33592],{"class":298},"(num_epochs),\n",[288,33594,33596,33599],{"class":290,"line":33595},174,[288,33597,33598],{"class":403},"        \"train_loss_all\"",[288,33600,33601],{"class":298},":train_loss_all,\n",[288,33603,33605,33608],{"class":290,"line":33604},175,[288,33606,33607],{"class":403},"        \"val_loss_all\"",[288,33609,33610],{"class":298},":val_loss_all,\n",[288,33612,33614,33617],{"class":290,"line":33613},176,[288,33615,33616],{"class":403},"        \"train_acc_all\"",[288,33618,33619],{"class":298},":train_acc_all,\n",[288,33621,33623,33626],{"class":290,"line":33622},177,[288,33624,33625],{"class":403},"        \"val_acc_all\"",[288,33627,33628],{"class":298},":val_acc_all\n",[288,33630,33632],{"class":290,"line":33631},178,[288,33633,33634],{"class":298},"    })\n",[288,33636,33638],{"class":290,"line":33637},179,[288,33639,33640],{"class":357},"    # 返回训练保存的过程\n",[288,33642,33644,33646],{"class":290,"line":33643},180,[288,33645,4262],{"class":294},[288,33647,33648],{"class":298}," train_process\n",[288,33650,33652],{"class":290,"line":33651},181,[288,33653,2572],{"emptyLinePlaceholder":217},[288,33655,33657],{"class":290,"line":33656},182,[288,33658,33659],{"class":357},"# 将loss值和精度按照图片的形式展示出来\n",[288,33661,33663,33665,33668],{"class":290,"line":33662},183,[288,33664,32120],{"class":294},[288,33666,33667],{"class":2135}," matplot_acc_loss",[288,33669,33670],{"class":298},"(train_process):\n",[288,33672,33674],{"class":290,"line":33673},184,[288,33675,33676],{"class":357},"    # 设置图的大小\n",[288,33678,33680,33683,33685,33687,33689,33691,33693,33695],{"class":290,"line":33679},185,[288,33681,33682],{"class":298},"    plt.figure(",[288,33684,31866],{"class":5389},[288,33686,344],{"class":294},[288,33688,299],{"class":298},[288,33690,795],{"class":347},[288,33692,675],{"class":298},[288,33694,590],{"class":347},[288,33696,30670],{"class":298},[288,33698,33700],{"class":290,"line":33699},186,[288,33701,33702],{"class":357},"    # 设置图中有几张图\n",[288,33704,33706],{"class":290,"line":33705},187,[288,33707,33708],{"class":357},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[288,33710,33712],{"class":290,"line":33711},188,[288,33713,33714],{"class":357},"    # ①loss图\n",[288,33716,33718,33720,33722,33724,33726,33728,33730],{"class":290,"line":33717},189,[288,33719,31900],{"class":298},[288,33721,516],{"class":347},[288,33723,675],{"class":298},[288,33725,376],{"class":347},[288,33727,675],{"class":298},[288,33729,516],{"class":347},[288,33731,305],{"class":298},[288,33733,33735],{"class":290,"line":33734},190,[288,33736,33737],{"class":357},"    # 补充:\n",[288,33739,33741],{"class":290,"line":33740},191,[288,33742,33743],{"class":357},"    # plt.subplot(nrows, ncols, index)\n",[288,33745,33747],{"class":290,"line":33746},192,[288,33748,33749],{"class":357},"    # nrows：行数\n",[288,33751,33753],{"class":290,"line":33752},193,[288,33754,33755],{"class":357},"    # ncols：列数\n",[288,33757,33759],{"class":290,"line":33758},194,[288,33760,33761],{"class":357},"    # index：目前选中第几个子图（从1开始）\n",[288,33763,33765,33768,33771,33774,33777,33779,33782,33784,33787],{"class":290,"line":33764},195,[288,33766,33767],{"class":298},"    plt.plot(train_process[",[288,33769,33770],{"class":403},"\"epoch\"",[288,33772,33773],{"class":298},"],train_process.train_loss_all,",[288,33775,33776],{"class":403},"'ro-'",[288,33778,675],{"class":298},[288,33780,33781],{"class":5389},"label",[288,33783,344],{"class":294},[288,33785,33786],{"class":403},"'train loss'",[288,33788,305],{"class":298},[288,33790,33792,33794,33796,33799,33802,33804,33806,33808,33811],{"class":290,"line":33791},196,[288,33793,33767],{"class":298},[288,33795,33770],{"class":403},[288,33797,33798],{"class":298},"],train_process.val_loss_all,",[288,33800,33801],{"class":403},"'bs--'",[288,33803,675],{"class":298},[288,33805,33781],{"class":5389},[288,33807,344],{"class":294},[288,33809,33810],{"class":403},"'val loss'",[288,33812,305],{"class":298},[288,33814,33816],{"class":290,"line":33815},197,[288,33817,33818],{"class":357},"    # 添加一个图例\n",[288,33820,33822],{"class":290,"line":33821},198,[288,33823,33824],{"class":298},"    plt.legend()\n",[288,33826,33828],{"class":290,"line":33827},199,[288,33829,33830],{"class":357},"    # 给轴添加标签\n",[288,33832,33834,33837,33840],{"class":290,"line":33833},200,[288,33835,33836],{"class":298},"    plt.xlabel(",[288,33838,33839],{"class":403},"'epoch'",[288,33841,305],{"class":298},[288,33843,33845,33848,33851],{"class":290,"line":33844},201,[288,33846,33847],{"class":298},"    plt.ylabel(",[288,33849,33850],{"class":403},"'loss'",[288,33852,305],{"class":298},[288,33854,33856],{"class":290,"line":33855},202,[288,33857,33858],{"class":357},"    # ②准确度图\n",[288,33860,33862,33864,33866,33868,33870,33872,33874],{"class":290,"line":33861},203,[288,33863,31900],{"class":298},[288,33865,516],{"class":347},[288,33867,675],{"class":298},[288,33869,376],{"class":347},[288,33871,675],{"class":298},[288,33873,376],{"class":347},[288,33875,305],{"class":298},[288,33877,33879,33881,33883,33886,33888,33890,33892,33894,33897],{"class":290,"line":33878},204,[288,33880,33767],{"class":298},[288,33882,33770],{"class":403},[288,33884,33885],{"class":298},"],train_process.train_acc_all,",[288,33887,33776],{"class":403},[288,33889,675],{"class":298},[288,33891,33781],{"class":5389},[288,33893,344],{"class":294},[288,33895,33896],{"class":403},"'train acc'",[288,33898,305],{"class":298},[288,33900,33902,33904,33906,33909,33911,33913,33915,33917,33920],{"class":290,"line":33901},205,[288,33903,33767],{"class":298},[288,33905,33770],{"class":403},[288,33907,33908],{"class":298},"],train_process.val_acc_all,",[288,33910,33801],{"class":403},[288,33912,675],{"class":298},[288,33914,33781],{"class":5389},[288,33916,344],{"class":294},[288,33918,33919],{"class":403},"'val acc'",[288,33921,305],{"class":298},[288,33923,33925],{"class":290,"line":33924},206,[288,33926,33927],{"class":357},"    # 添加图例\n",[288,33929,33931],{"class":290,"line":33930},207,[288,33932,33824],{"class":298},[288,33934,33936,33938,33940],{"class":290,"line":33935},208,[288,33937,33836],{"class":298},[288,33939,33770],{"class":403},[288,33941,305],{"class":298},[288,33943,33945,33947,33950],{"class":290,"line":33944},209,[288,33946,33847],{"class":298},[288,33948,33949],{"class":403},"\"acc\"",[288,33951,305],{"class":298},[288,33953,33955],{"class":290,"line":33954},210,[288,33956,33957],{"class":298},"    plt.show()\n",[288,33959,33961],{"class":290,"line":33960},211,[288,33962,2572],{"emptyLinePlaceholder":217},[288,33964,33966],{"class":290,"line":33965},212,[288,33967,33968],{"class":357},"# 正式开始训练:\n",[288,33970,33972,33974,33976,33978,33980],{"class":290,"line":33971},213,[288,33973,1703],{"class":294},[288,33975,31393],{"class":347},[288,33977,3121],{"class":294},[288,33979,31398],{"class":403},[288,33981,3911],{"class":298},[288,33983,33985],{"class":290,"line":33984},214,[288,33986,33987],{"class":357},"    # 将模型实例化\n",[288,33989,33991,33994,33996],{"class":290,"line":33990},215,[288,33992,33993],{"class":298},"    LeNet",[288,33995,344],{"class":294},[288,33997,33998],{"class":298},"LeNet()\n",[288,34000,34002,34005,34007],{"class":290,"line":34001},216,[288,34003,34004],{"class":298},"    train_dataloader,val_dataloader",[288,34006,344],{"class":294},[288,34008,34009],{"class":298},"train_val_data_process()\n",[288,34011,34013,34015,34017,34020,34023,34025,34027],{"class":290,"line":34012},217,[288,34014,33566],{"class":298},[288,34016,344],{"class":294},[288,34018,34019],{"class":298},"train_model_process(LeNet,train_dataloader,val_dataloader,",[288,34021,34022],{"class":5389},"num_epochs",[288,34024,344],{"class":294},[288,34026,997],{"class":347},[288,34028,305],{"class":298},[288,34030,34032],{"class":290,"line":34031},218,[288,34033,34034],{"class":298},"    matplot_acc_loss(train_process)\n",[19,34036,34037],{},"画图的补充点学习：",[19,34039,34040],{},[200,34041],{"alt":205,"src":34042},"\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",[243,34044,34045],{"start":1352},[246,34046,34047],{},"测试",[280,34049,34051],{"className":30551,"code":34050,"language":30553,"meta":205,"style":205},"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",[25,34052,34053,34059,34069,34081,34091,34096,34106,34116,34120,34125,34134,34151,34163,34180,34191,34207,34212,34223,34234,34245,34252,34256,34261,34271,34276,34293,34301,34305,34310,34319,34328,34332,34337,34342,34347,34354,34359,34371,34381,34391,34396,34400,34405,34414,34419,34435,34440,34445,34450,34464,34469,34483,34487,34492,34507,34512,34524,34528,34533,34545,34550,34558,34563,34568,34578,34583,34592,34597,34602,34606,34611,34616,34632,34640,34645,34650,34709,34715,34720,34731,34739,34747,34751,34756,34760,34765,34773,34778,34794,34799,34809,34819],{"__ignoreMap":205},[288,34054,34055,34057],{"class":290,"line":291},[288,34056,30565],{"class":294},[288,34058,30568],{"class":298},[288,34060,34061,34063,34065,34067],{"class":290,"line":206},[288,34062,30565],{"class":294},[288,34064,31588],{"class":298},[288,34066,31556],{"class":294},[288,34068,31593],{"class":298},[288,34070,34071,34073,34076,34078],{"class":290,"line":1352},[288,34072,30910],{"class":294},[288,34074,34075],{"class":298}," jupyter_client.consoleapp ",[288,34077,30565],{"class":294},[288,34079,34080],{"class":298}," classes\n",[288,34082,34083,34085,34087,34089],{"class":290,"line":1367},[288,34084,30910],{"class":294},[288,34086,31571],{"class":298},[288,34088,30565],{"class":294},[288,34090,31576],{"class":298},[288,34092,34093],{"class":290,"line":1373},[288,34094,34095],{"class":357},"# 导入数据集\n",[288,34097,34098,34100,34102,34104],{"class":290,"line":1387},[288,34099,30910],{"class":294},[288,34101,31541],{"class":298},[288,34103,30565],{"class":294},[288,34105,31546],{"class":298},[288,34107,34108,34110,34112,34114],{"class":290,"line":1393},[288,34109,30910],{"class":294},[288,34111,32087],{"class":298},[288,34113,30565],{"class":294},[288,34115,32092],{"class":298},[288,34117,34118],{"class":290,"line":1484},[288,34119,2572],{"emptyLinePlaceholder":217},[288,34121,34122],{"class":290,"line":1490},[288,34123,34124],{"class":357},"# 测试数据处理\n",[288,34126,34127,34129,34132],{"class":290,"line":1502},[288,34128,32120],{"class":294},[288,34130,34131],{"class":2135}," test_data_process",[288,34133,32126],{"class":298},[288,34135,34136,34139,34141,34143,34145,34147,34149],{"class":290,"line":1784},[288,34137,34138],{"class":298},"    test_data",[288,34140,344],{"class":294},[288,34142,31628],{"class":298},[288,34144,31631],{"class":5389},[288,34146,344],{"class":294},[288,34148,31636],{"class":403},[288,34150,31639],{"class":298},[288,34152,34153,34156,34158,34161],{"class":290,"line":1789},[288,34154,34155],{"class":5389},"                           train",[288,34157,344],{"class":294},[288,34159,34160],{"class":347},"False",[288,34162,31639],{"class":298},[288,34164,34165,34168,34170,34172,34174,34176,34178],{"class":290,"line":1795},[288,34166,34167],{"class":5389},"                           transform",[288,34169,344],{"class":294},[288,34171,31666],{"class":298},[288,34173,31669],{"class":5389},[288,34175,344],{"class":294},[288,34177,1198],{"class":347},[288,34179,31677],{"class":298},[288,34181,34182,34185,34187,34189],{"class":290,"line":1800},[288,34183,34184],{"class":5389},"                           download",[288,34186,344],{"class":294},[288,34188,31649],{"class":347},[288,34190,305],{"class":298},[288,34192,34193,34196,34198,34200,34202,34204],{"class":290,"line":1814},[288,34194,34195],{"class":298},"    test_dataloader",[288,34197,344],{"class":294},[288,34199,31707],{"class":298},[288,34201,31710],{"class":5389},[288,34203,344],{"class":294},[288,34205,34206],{"class":298},"test_data,\n",[288,34208,34209],{"class":290,"line":1819},[288,34210,34211],{"class":357},"                                    # 这里是一张一张进行测试\n",[288,34213,34214,34217,34219,34221],{"class":290,"line":1825},[288,34215,34216],{"class":5389},"                                    batch_size",[288,34218,344],{"class":294},[288,34220,516],{"class":347},[288,34222,31639],{"class":298},[288,34224,34225,34228,34230,34232],{"class":290,"line":1846},[288,34226,34227],{"class":5389},"                                    shuffle",[288,34229,344],{"class":294},[288,34231,31649],{"class":347},[288,34233,31639],{"class":298},[288,34235,34236,34239,34241,34243],{"class":290,"line":1851},[288,34237,34238],{"class":5389},"                                    num_workers",[288,34240,344],{"class":294},[288,34242,490],{"class":347},[288,34244,305],{"class":298},[288,34246,34247,34249],{"class":290,"line":1865},[288,34248,4262],{"class":294},[288,34250,34251],{"class":298}," test_dataloader\n",[288,34253,34254],{"class":290,"line":1870},[288,34255,2572],{"emptyLinePlaceholder":217},[288,34257,34258],{"class":290,"line":1899},[288,34259,34260],{"class":357},"# 定义模型测试函数\n",[288,34262,34263,34265,34268],{"class":290,"line":1904},[288,34264,32120],{"class":294},[288,34266,34267],{"class":2135}," test_model_process",[288,34269,34270],{"class":298},"(model,test_dataloader):\n",[288,34272,34273],{"class":290,"line":1921},[288,34274,34275],{"class":357},"    # 将模型放到设备当中，先进行判断\n",[288,34277,34278,34280,34282,34284,34286,34288,34290],{"class":290,"line":1926},[288,34279,31410],{"class":298},[288,34281,344],{"class":294},[288,34283,31417],{"class":403},[288,34285,1876],{"class":294},[288,34287,31422],{"class":298},[288,34289,1873],{"class":294},[288,34291,34292],{"class":403}," \"cpu\"\n",[288,34294,34295,34297,34299],{"class":290,"line":1931},[288,34296,31462],{"class":298},[288,34298,344],{"class":294},[288,34300,32462],{"class":298},[288,34302,34303],{"class":290,"line":1936},[288,34304,2572],{"emptyLinePlaceholder":217},[288,34306,34307],{"class":290,"line":1950},[288,34308,34309],{"class":357},"    # 设置初始化参数\n",[288,34311,34312,34315,34317],{"class":290,"line":1955},[288,34313,34314],{"class":298},"    test_corrects",[288,34316,344],{"class":294},[288,34318,32515],{"class":347},[288,34320,34321,34324,34326],{"class":290,"line":2749},[288,34322,34323],{"class":298},"    test_num",[288,34325,344],{"class":294},[288,34327,3257],{"class":347},[288,34329,34330],{"class":290,"line":2763},[288,34331,2572],{"emptyLinePlaceholder":217},[288,34333,34334],{"class":290,"line":2771},[288,34335,34336],{"class":357},"    # 进行模型测试\n",[288,34338,34339],{"class":290,"line":2776},[288,34340,34341],{"class":357},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[288,34343,34344],{"class":290,"line":2782},[288,34345,34346],{"class":357},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[288,34348,34349,34352],{"class":290,"line":2788},[288,34350,34351],{"class":294},"    with",[288,34353,33057],{"class":298},[288,34355,34356],{"class":290,"line":2793},[288,34357,34358],{"class":357},"        # 从数据中进行\n",[288,34360,34361,34363,34366,34368],{"class":290,"line":8121},[288,34362,3575],{"class":294},[288,34364,34365],{"class":298}," test_data_x,test_data_y ",[288,34367,26216],{"class":294},[288,34369,34370],{"class":298}," test_dataloader:\n",[288,34372,34373,34376,34378],{"class":290,"line":8145},[288,34374,34375],{"class":298},"            test_data_x",[288,34377,344],{"class":294},[288,34379,34380],{"class":298},"test_data_x.to(device)\n",[288,34382,34383,34386,34388],{"class":290,"line":8150},[288,34384,34385],{"class":298},"            test_data_y",[288,34387,344],{"class":294},[288,34389,34390],{"class":298},"test_data_y.to(device)\n",[288,34392,34393],{"class":290,"line":8156},[288,34394,34395],{"class":357},"            # 设置为验证模式\n",[288,34397,34398],{"class":290,"line":8183},[288,34399,33048],{"class":298},[288,34401,34402],{"class":290,"line":8188},[288,34403,34404],{"class":357},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[288,34406,34407,34409,34411],{"class":290,"line":8194},[288,34408,32833],{"class":298},[288,34410,344],{"class":294},[288,34412,34413],{"class":298},"model(test_data_x)\n",[288,34415,34416],{"class":290,"line":8206},[288,34417,34418],{"class":357},"            # 查找每一行中最大值对应的下标\n",[288,34420,34421,34423,34425,34427,34429,34431,34433],{"class":290,"line":8218},[288,34422,32850],{"class":298},[288,34424,344],{"class":294},[288,34426,32855],{"class":298},[288,34428,32858],{"class":5389},[288,34430,344],{"class":294},[288,34432,516],{"class":347},[288,34434,305],{"class":298},[288,34436,34437],{"class":290,"line":8230},[288,34438,34439],{"class":357},"            # 计算正确率\n",[288,34441,34442],{"class":290,"line":9889},[288,34443,34444],{"class":357},"            # .data表示是一个不带梯度信息的tensor\n",[288,34446,34447],{"class":290,"line":9914},[288,34448,34449],{"class":357},"            # 如果预测正确，则准确度test_corrects加1\n",[288,34451,34452,34455,34457,34459,34461],{"class":290,"line":9937},[288,34453,34454],{"class":298},"            test_corrects",[288,34456,9650],{"class":294},[288,34458,32960],{"class":298},[288,34460,3121],{"class":294},[288,34462,34463],{"class":298},"test_data_y.data)\n",[288,34465,34466],{"class":290,"line":9961},[288,34467,34468],{"class":357},"            # 将所有的测试样本进行累计\n",[288,34470,34471,34474,34476,34479,34481],{"class":290,"line":9966},[288,34472,34473],{"class":298},"            test_num",[288,34475,9650],{"class":294},[288,34477,34478],{"class":298},"test_data_x.size(",[288,34480,490],{"class":347},[288,34482,305],{"class":298},[288,34484,34485],{"class":290,"line":9971},[288,34486,2572],{"emptyLinePlaceholder":217},[288,34488,34489],{"class":290,"line":9976},[288,34490,34491],{"class":357},"        # 计算准确度\n",[288,34493,34494,34497,34499,34502,34504],{"class":290,"line":9985},[288,34495,34496],{"class":298},"        test_acc",[288,34498,344],{"class":294},[288,34500,34501],{"class":298},"test_corrects.double().item()",[288,34503,881],{"class":294},[288,34505,34506],{"class":298},"test_num\n",[288,34508,34509],{"class":290,"line":9990},[288,34510,34511],{"class":357},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[288,34513,34514,34516,34518,34521],{"class":290,"line":9996},[288,34515,32624],{"class":347},[288,34517,299],{"class":298},[288,34519,34520],{"class":403},"\"测试的准确率：\"",[288,34522,34523],{"class":298},",test_acc)\n",[288,34525,34526],{"class":290,"line":10017},[288,34527,2572],{"emptyLinePlaceholder":217},[288,34529,34530],{"class":290,"line":10023},[288,34531,34532],{"class":357},"# 实现模型的测试功能\n",[288,34534,34535,34537,34539,34541,34543],{"class":290,"line":10037},[288,34536,1703],{"class":294},[288,34538,31393],{"class":347},[288,34540,3121],{"class":294},[288,34542,31398],{"class":403},[288,34544,3911],{"class":298},[288,34546,34547],{"class":290,"line":10043},[288,34548,34549],{"class":357},"    # 加载模型\n",[288,34551,34552,34554,34556],{"class":290,"line":10070},[288,34553,31462],{"class":298},[288,34555,344],{"class":294},[288,34557,33998],{"class":298},[288,34559,34560],{"class":290,"line":10079},[288,34561,34562],{"class":357},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[288,34564,34565],{"class":290,"line":10085},[288,34566,34567],{"class":357},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[288,34569,34570,34573,34576],{"class":290,"line":10093},[288,34571,34572],{"class":298},"    model.load_state_dict(torch.load(",[288,34574,34575],{"class":403},"'best_model.pth'",[288,34577,30670],{"class":298},[288,34579,34580],{"class":290,"line":10098},[288,34581,34582],{"class":357},"    # 数据加载\n",[288,34584,34585,34587,34589],{"class":290,"line":16777},[288,34586,34195],{"class":298},[288,34588,344],{"class":294},[288,34590,34591],{"class":298},"test_data_process()\n",[288,34593,34594],{"class":290,"line":16783},[288,34595,34596],{"class":357},"    # 加载模型测试的函数\n",[288,34598,34599],{"class":290,"line":16806},[288,34600,34601],{"class":298},"    test_model_process(model,test_dataloader)\n",[288,34603,34604],{"class":290,"line":16812},[288,34605,2572],{"emptyLinePlaceholder":217},[288,34607,34608],{"class":290,"line":16835},[288,34609,34610],{"class":357},"    # 验证集推理实现：\n",[288,34612,34613],{"class":290,"line":16849},[288,34614,34615],{"class":357},"    # 加载数据加载的更详细一些\n",[288,34617,34618,34620,34622,34624,34626,34628,34630],{"class":290,"line":16869},[288,34619,31410],{"class":298},[288,34621,344],{"class":294},[288,34623,31417],{"class":403},[288,34625,1876],{"class":294},[288,34627,31422],{"class":298},[288,34629,1873],{"class":294},[288,34631,34292],{"class":403},[288,34633,34634,34636,34638],{"class":290,"line":16875},[288,34635,31462],{"class":298},[288,34637,344],{"class":294},[288,34639,32462],{"class":298},[288,34641,34642],{"class":290,"line":16886},[288,34643,34644],{"class":357},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[288,34646,34647],{"class":290,"line":16909},[288,34648,34649],{"class":357},"    # 顺序不可改变\n",[288,34651,34652,34655,34657,34659,34662,34664,34667,34669,34672,34674,34677,34679,34682,34684,34687,34689,34692,34694,34697,34699,34702,34704,34707],{"class":290,"line":16931},[288,34653,34654],{"class":298},"    classes",[288,34656,344],{"class":294},[288,34658,1187],{"class":298},[288,34660,34661],{"class":403},"'T-shirt\u002Ftop'",[288,34663,675],{"class":298},[288,34665,34666],{"class":403},"'Trouser'",[288,34668,675],{"class":298},[288,34670,34671],{"class":403},"'Pullover'",[288,34673,675],{"class":298},[288,34675,34676],{"class":403},"'Dress'",[288,34678,675],{"class":298},[288,34680,34681],{"class":403},"'Coat'",[288,34683,675],{"class":298},[288,34685,34686],{"class":403},"'Sandal'",[288,34688,675],{"class":298},[288,34690,34691],{"class":403},"'Shirt'",[288,34693,675],{"class":298},[288,34695,34696],{"class":403},"'Sneaker'",[288,34698,675],{"class":298},[288,34700,34701],{"class":403},"'Bag'",[288,34703,675],{"class":298},[288,34705,34706],{"class":403},"'Ankle boot'",[288,34708,33419],{"class":298},[288,34710,34711,34713],{"class":290,"line":16936},[288,34712,34351],{"class":294},[288,34714,33057],{"class":298},[288,34716,34717],{"class":290,"line":16942},[288,34718,34719],{"class":357},"        # 将数据和标签都放到设备当中\n",[288,34721,34722,34724,34727,34729],{"class":290,"line":16956},[288,34723,3575],{"class":294},[288,34725,34726],{"class":298}," b_x,b_y ",[288,34728,26216],{"class":294},[288,34730,34370],{"class":298},[288,34732,34733,34735,34737],{"class":290,"line":16969},[288,34734,32783],{"class":298},[288,34736,344],{"class":294},[288,34738,32788],{"class":298},[288,34740,34741,34743,34745],{"class":290,"line":16974},[288,34742,32798],{"class":298},[288,34744,344],{"class":294},[288,34746,32803],{"class":298},[288,34748,34749],{"class":290,"line":16988},[288,34750,2572],{"emptyLinePlaceholder":217},[288,34752,34753],{"class":290,"line":16993},[288,34754,34755],{"class":357},"            # 设置模型为验证模式\n",[288,34757,34758],{"class":290,"line":16999},[288,34759,33048],{"class":298},[288,34761,34762],{"class":290,"line":17004},[288,34763,34764],{"class":357},"            # 模型推理结果\n",[288,34766,34767,34769,34771],{"class":290,"line":17018},[288,34768,32833],{"class":298},[288,34770,344],{"class":294},[288,34772,32838],{"class":298},[288,34774,34775],{"class":290,"line":17023},[288,34776,34777],{"class":357},"            # 获取最大下标，最大下标就是类别号\n",[288,34779,34780,34782,34784,34786,34788,34790,34792],{"class":290,"line":17028},[288,34781,32850],{"class":298},[288,34783,344],{"class":294},[288,34785,32855],{"class":298},[288,34787,32858],{"class":5389},[288,34789,344],{"class":294},[288,34791,516],{"class":347},[288,34793,305],{"class":298},[288,34795,34796],{"class":290,"line":17042},[288,34797,34798],{"class":357},"            # 取出张量中的数值\n",[288,34800,34801,34804,34806],{"class":290,"line":17054},[288,34802,34803],{"class":298},"            result",[288,34805,344],{"class":294},[288,34807,34808],{"class":298},"pre_lab.item()\n",[288,34810,34811,34814,34816],{"class":290,"line":17059},[288,34812,34813],{"class":298},"            label",[288,34815,344],{"class":294},[288,34817,34818],{"class":298},"b_y.item()\n",[288,34820,34821,34824,34826,34829,34832,34835,34837,34840],{"class":290,"line":17072},[288,34822,34823],{"class":347},"            print",[288,34825,299],{"class":298},[288,34827,34828],{"class":403},"\"预测值：\"",[288,34830,34831],{"class":298},",classes[result],",[288,34833,34834],{"class":403},"\"------\"",[288,34836,675],{"class":298},[288,34838,34839],{"class":403},"\"真实值：\"",[288,34841,34842],{"class":298},",classes[label])\n",[19,34844,34845],{},"（2）AlexNet",[243,34847,34848],{},[246,34849,34850],{},"神经网络构建",[280,34852,34854],{"className":30551,"code":34853,"language":30553,"meta":205,"style":205},"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",[25,34855,34856,34862,34872,34882,34894,34898,34915,34923,34938,34950,34992,35019,35062,35088,35132,35175,35218,35245,35249,35259,35264,35292,35311,35330,35334,35339,35347,35362,35372,35386,35396,35411,35426,35441,35452,35456,35461,35471,35486,35491,35505,35520,35532,35537,35548,35553,35559,35564,35576,35596,35601,35610],{"__ignoreMap":205},[288,34857,34858,34860],{"class":290,"line":291},[288,34859,30565],{"class":294},[288,34861,30568],{"class":298},[288,34863,34864,34866,34868,34870],{"class":290,"line":206},[288,34865,30910],{"class":294},[288,34867,30913],{"class":298},[288,34869,30565],{"class":294},[288,34871,30918],{"class":298},[288,34873,34874,34876,34878,34880],{"class":290,"line":1352},[288,34875,30910],{"class":294},[288,34877,30930],{"class":298},[288,34879,30565],{"class":294},[288,34881,30935],{"class":298},[288,34883,34884,34886,34889,34891],{"class":290,"line":1367},[288,34885,30565],{"class":294},[288,34887,34888],{"class":298}," torch.nn.functional ",[288,34890,31556],{"class":294},[288,34892,34893],{"class":298}," F\n",[288,34895,34896],{"class":290,"line":1373},[288,34897,2572],{"emptyLinePlaceholder":217},[288,34899,34900,34902,34905,34907,34909,34911,34913],{"class":290,"line":1387},[288,34901,14867],{"class":294},[288,34903,34904],{"class":2135}," AlexNet",[288,34906,299],{"class":298},[288,34908,30951],{"class":2135},[288,34910,855],{"class":298},[288,34912,30956],{"class":2135},[288,34914,30959],{"class":298},[288,34916,34917,34919,34921],{"class":290,"line":1393},[288,34918,30974],{"class":294},[288,34920,30977],{"class":347},[288,34922,30980],{"class":298},[288,34924,34925,34927,34930,34932,34934,34936],{"class":290,"line":1484},[288,34926,30990],{"class":347},[288,34928,34929],{"class":298},"(AlexNet,",[288,34931,30996],{"class":347},[288,34933,30999],{"class":298},[288,34935,31002],{"class":347},[288,34937,2148],{"class":298},[288,34939,34940,34942,34945,34947],{"class":290,"line":1490},[288,34941,31018],{"class":347},[288,34943,34944],{"class":298},".ReLu",[288,34946,344],{"class":294},[288,34948,34949],{"class":298},"nn.ReLU()\n",[288,34951,34952,34954,34956,34958,34960,34962,34964,34966,34968,34970,34972,34974,34976,34978,34980,34982,34984,34986,34988,34990],{"class":290,"line":1502},[288,34953,31018],{"class":347},[288,34955,31021],{"class":298},[288,34957,344],{"class":294},[288,34959,31026],{"class":298},[288,34961,31029],{"class":5389},[288,34963,344],{"class":294},[288,34965,516],{"class":347},[288,34967,675],{"class":298},[288,34969,31038],{"class":5389},[288,34971,344],{"class":294},[288,34973,508],{"class":347},[288,34975,675],{"class":298},[288,34977,31047],{"class":5389},[288,34979,344],{"class":294},[288,34981,769],{"class":347},[288,34983,675],{"class":298},[288,34985,31102],{"class":5389},[288,34987,344],{"class":294},[288,34989,590],{"class":347},[288,34991,305],{"class":298},[288,34993,34994,34996,34998,35000,35003,35005,35007,35009,35011,35013,35015,35017],{"class":290,"line":1784},[288,34995,31018],{"class":347},[288,34997,31086],{"class":298},[288,34999,344],{"class":294},[288,35001,35002],{"class":298},"nn.MaxPool2d(",[288,35004,31047],{"class":5389},[288,35006,344],{"class":294},[288,35008,370],{"class":347},[288,35010,675],{"class":298},[288,35012,31102],{"class":5389},[288,35014,344],{"class":294},[288,35016,376],{"class":347},[288,35018,305],{"class":298},[288,35020,35021,35023,35025,35027,35029,35031,35033,35035,35037,35039,35041,35044,35046,35048,35050,35052,35054,35056,35058,35060],{"class":290,"line":1789},[288,35022,31018],{"class":347},[288,35024,31115],{"class":298},[288,35026,344],{"class":294},[288,35028,31026],{"class":298},[288,35030,31029],{"class":5389},[288,35032,344],{"class":294},[288,35034,508],{"class":347},[288,35036,675],{"class":298},[288,35038,31038],{"class":5389},[288,35040,344],{"class":294},[288,35042,35043],{"class":347},"256",[288,35045,675],{"class":298},[288,35047,31047],{"class":5389},[288,35049,344],{"class":294},[288,35051,616],{"class":347},[288,35053,675],{"class":298},[288,35055,31056],{"class":5389},[288,35057,344],{"class":294},[288,35059,376],{"class":347},[288,35061,305],{"class":298},[288,35063,35064,35066,35068,35070,35072,35074,35076,35078,35080,35082,35084,35086],{"class":290,"line":1795},[288,35065,31018],{"class":347},[288,35067,31150],{"class":298},[288,35069,344],{"class":294},[288,35071,35002],{"class":298},[288,35073,31047],{"class":5389},[288,35075,344],{"class":294},[288,35077,370],{"class":347},[288,35079,675],{"class":298},[288,35081,31102],{"class":5389},[288,35083,344],{"class":294},[288,35085,376],{"class":347},[288,35087,305],{"class":298},[288,35089,35090,35092,35095,35097,35099,35101,35103,35105,35107,35109,35111,35114,35116,35118,35120,35122,35124,35126,35128,35130],{"class":290,"line":1800},[288,35091,31018],{"class":347},[288,35093,35094],{"class":298},".c5",[288,35096,344],{"class":294},[288,35098,31026],{"class":298},[288,35100,31029],{"class":5389},[288,35102,344],{"class":294},[288,35104,35043],{"class":347},[288,35106,675],{"class":298},[288,35108,31038],{"class":5389},[288,35110,344],{"class":294},[288,35112,35113],{"class":347},"384",[288,35115,675],{"class":298},[288,35117,31047],{"class":5389},[288,35119,344],{"class":294},[288,35121,370],{"class":347},[288,35123,675],{"class":298},[288,35125,31056],{"class":5389},[288,35127,344],{"class":294},[288,35129,516],{"class":347},[288,35131,305],{"class":298},[288,35133,35134,35136,35139,35141,35143,35145,35147,35149,35151,35153,35155,35157,35159,35161,35163,35165,35167,35169,35171,35173],{"class":290,"line":1814},[288,35135,31018],{"class":347},[288,35137,35138],{"class":298},".c6",[288,35140,344],{"class":294},[288,35142,31026],{"class":298},[288,35144,31029],{"class":5389},[288,35146,344],{"class":294},[288,35148,35113],{"class":347},[288,35150,675],{"class":298},[288,35152,31038],{"class":5389},[288,35154,344],{"class":294},[288,35156,35113],{"class":347},[288,35158,675],{"class":298},[288,35160,31047],{"class":5389},[288,35162,344],{"class":294},[288,35164,370],{"class":347},[288,35166,675],{"class":298},[288,35168,31056],{"class":5389},[288,35170,344],{"class":294},[288,35172,516],{"class":347},[288,35174,305],{"class":298},[288,35176,35177,35179,35182,35184,35186,35188,35190,35192,35194,35196,35198,35200,35202,35204,35206,35208,35210,35212,35214,35216],{"class":290,"line":1819},[288,35178,31018],{"class":347},[288,35180,35181],{"class":298},".c7",[288,35183,344],{"class":294},[288,35185,31026],{"class":298},[288,35187,31029],{"class":5389},[288,35189,344],{"class":294},[288,35191,35113],{"class":347},[288,35193,675],{"class":298},[288,35195,31038],{"class":5389},[288,35197,344],{"class":294},[288,35199,35043],{"class":347},[288,35201,675],{"class":298},[288,35203,31047],{"class":5389},[288,35205,344],{"class":294},[288,35207,370],{"class":347},[288,35209,675],{"class":298},[288,35211,31056],{"class":5389},[288,35213,344],{"class":294},[288,35215,516],{"class":347},[288,35217,305],{"class":298},[288,35219,35220,35222,35225,35227,35229,35231,35233,35235,35237,35239,35241,35243],{"class":290,"line":1825},[288,35221,31018],{"class":347},[288,35223,35224],{"class":298},".s8",[288,35226,344],{"class":294},[288,35228,35002],{"class":298},[288,35230,31047],{"class":5389},[288,35232,344],{"class":294},[288,35234,370],{"class":347},[288,35236,675],{"class":298},[288,35238,31102],{"class":5389},[288,35240,344],{"class":294},[288,35242,376],{"class":347},[288,35244,305],{"class":298},[288,35246,35247],{"class":290,"line":1846},[288,35248,31175],{"class":357},[288,35250,35251,35253,35255,35257],{"class":290,"line":1851},[288,35252,31018],{"class":347},[288,35254,31182],{"class":298},[288,35256,344],{"class":294},[288,35258,31187],{"class":298},[288,35260,35261],{"class":290,"line":1865},[288,35262,35263],{"class":357},"       # 定义全连接层\n",[288,35265,35266,35268,35271,35273,35275,35277,35279,35281,35283,35285,35287,35290],{"class":290,"line":1870},[288,35267,31018],{"class":347},[288,35269,35270],{"class":298},".f1",[288,35272,344],{"class":294},[288,35274,31204],{"class":298},[288,35276,641],{"class":347},[288,35278,752],{"class":294},[288,35280,641],{"class":347},[288,35282,752],{"class":294},[288,35284,35043],{"class":347},[288,35286,675],{"class":298},[288,35288,35289],{"class":347},"4096",[288,35291,305],{"class":298},[288,35293,35294,35296,35299,35301,35303,35305,35307,35309],{"class":290,"line":1899},[288,35295,31018],{"class":347},[288,35297,35298],{"class":298},".f2",[288,35300,344],{"class":294},[288,35302,31204],{"class":298},[288,35304,35289],{"class":347},[288,35306,675],{"class":298},[288,35308,35289],{"class":347},[288,35310,305],{"class":298},[288,35312,35313,35315,35318,35320,35322,35324,35326,35328],{"class":290,"line":1904},[288,35314,31018],{"class":347},[288,35316,35317],{"class":298},".f3",[288,35319,344],{"class":294},[288,35321,31204],{"class":298},[288,35323,35289],{"class":347},[288,35325,675],{"class":298},[288,35327,743],{"class":347},[288,35329,305],{"class":298},[288,35331,35332],{"class":290,"line":1921},[288,35333,2572],{"emptyLinePlaceholder":217},[288,35335,35336],{"class":290,"line":1926},[288,35337,35338],{"class":357},"    # 定义前向传播\n",[288,35340,35341,35343,35345],{"class":290,"line":1931},[288,35342,30974],{"class":294},[288,35344,31266],{"class":2135},[288,35346,31269],{"class":298},[288,35348,35349,35351,35353,35355,35358,35360],{"class":290,"line":1936},[288,35350,31274],{"class":298},[288,35352,344],{"class":294},[288,35354,30996],{"class":347},[288,35356,35357],{"class":298},".ReLu(",[288,35359,30996],{"class":347},[288,35361,31286],{"class":298},[288,35363,35364,35366,35368,35370],{"class":290,"line":1950},[288,35365,31274],{"class":298},[288,35367,344],{"class":294},[288,35369,30996],{"class":347},[288,35371,31297],{"class":298},[288,35373,35374,35376,35378,35380,35382,35384],{"class":290,"line":1955},[288,35375,31274],{"class":298},[288,35377,344],{"class":294},[288,35379,30996],{"class":347},[288,35381,35357],{"class":298},[288,35383,30996],{"class":347},[288,35385,31312],{"class":298},[288,35387,35388,35390,35392,35394],{"class":290,"line":2749},[288,35389,31274],{"class":298},[288,35391,344],{"class":294},[288,35393,30996],{"class":347},[288,35395,31323],{"class":298},[288,35397,35398,35400,35402,35404,35406,35408],{"class":290,"line":2763},[288,35399,31274],{"class":298},[288,35401,344],{"class":294},[288,35403,30996],{"class":347},[288,35405,35357],{"class":298},[288,35407,30996],{"class":347},[288,35409,35410],{"class":298},".c5(x))\n",[288,35412,35413,35415,35417,35419,35421,35423],{"class":290,"line":2771},[288,35414,31274],{"class":298},[288,35416,344],{"class":294},[288,35418,30996],{"class":347},[288,35420,35357],{"class":298},[288,35422,30996],{"class":347},[288,35424,35425],{"class":298},".c6(x))\n",[288,35427,35428,35430,35432,35434,35436,35438],{"class":290,"line":2776},[288,35429,31274],{"class":298},[288,35431,344],{"class":294},[288,35433,30996],{"class":347},[288,35435,35357],{"class":298},[288,35437,30996],{"class":347},[288,35439,35440],{"class":298},".c7(x))\n",[288,35442,35443,35445,35447,35449],{"class":290,"line":2782},[288,35444,31274],{"class":298},[288,35446,344],{"class":294},[288,35448,30996],{"class":347},[288,35450,35451],{"class":298},".s8(x)\n",[288,35453,35454],{"class":290,"line":2788},[288,35455,2572],{"emptyLinePlaceholder":217},[288,35457,35458],{"class":290,"line":2793},[288,35459,35460],{"class":357},"        # 展平加线性全连接层\n",[288,35462,35463,35465,35467,35469],{"class":290,"line":8121},[288,35464,31274],{"class":298},[288,35466,344],{"class":294},[288,35468,30996],{"class":347},[288,35470,31334],{"class":298},[288,35472,35473,35475,35477,35479,35481,35483],{"class":290,"line":8145},[288,35474,31274],{"class":298},[288,35476,344],{"class":294},[288,35478,30996],{"class":347},[288,35480,35357],{"class":298},[288,35482,30996],{"class":347},[288,35484,35485],{"class":298},".f1(x))\n",[288,35487,35488],{"class":290,"line":8150},[288,35489,35490],{"class":357},"        # 还需要dropout对神经元随机进行失活\n",[288,35492,35493,35495,35497,35500,35503],{"class":290,"line":8156},[288,35494,31274],{"class":298},[288,35496,344],{"class":294},[288,35498,35499],{"class":298},"F.dropout(x,",[288,35501,35502],{"class":347},"0.5",[288,35504,305],{"class":298},[288,35506,35507,35509,35511,35513,35515,35517],{"class":290,"line":8183},[288,35508,31274],{"class":298},[288,35510,344],{"class":294},[288,35512,30996],{"class":347},[288,35514,35357],{"class":298},[288,35516,30996],{"class":347},[288,35518,35519],{"class":298},".f2(x))\n",[288,35521,35522,35524,35526,35528,35530],{"class":290,"line":8188},[288,35523,31274],{"class":298},[288,35525,344],{"class":294},[288,35527,35499],{"class":298},[288,35529,35502],{"class":347},[288,35531,305],{"class":298},[288,35533,35534],{"class":290,"line":8194},[288,35535,35536],{"class":357},"        # 直接输出\n",[288,35538,35539,35541,35543,35545],{"class":290,"line":8206},[288,35540,31274],{"class":298},[288,35542,344],{"class":294},[288,35544,30996],{"class":347},[288,35546,35547],{"class":298},".f3(x)\n",[288,35549,35550],{"class":290,"line":8218},[288,35551,35552],{"class":357},"        # 前向传播输出\n",[288,35554,35555,35557],{"class":290,"line":8230},[288,35556,14925],{"class":294},[288,35558,31382],{"class":298},[288,35560,35561],{"class":290,"line":9889},[288,35562,35563],{"class":357},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[288,35565,35566,35568,35570,35572,35574],{"class":290,"line":9914},[288,35567,1703],{"class":294},[288,35569,31393],{"class":347},[288,35571,3121],{"class":294},[288,35573,31398],{"class":403},[288,35575,3911],{"class":298},[288,35577,35578,35580,35582,35584,35586,35588,35590,35592,35594],{"class":290,"line":9937},[288,35579,31410],{"class":298},[288,35581,344],{"class":294},[288,35583,30624],{"class":298},[288,35585,31417],{"class":403},[288,35587,1876],{"class":294},[288,35589,31422],{"class":298},[288,35591,1873],{"class":294},[288,35593,30649],{"class":403},[288,35595,305],{"class":298},[288,35597,35598],{"class":290,"line":9961},[288,35599,35600],{"class":357},"    # 模型实例化，然后将实例化的模型放到设备中\n",[288,35602,35603,35605,35607],{"class":290,"line":9966},[288,35604,31462],{"class":298},[288,35606,344],{"class":294},[288,35608,35609],{"class":298},"AlexNet().to(device)\n",[288,35611,35612,35614,35616,35618,35620,35623,35625,35627],{"class":290,"line":9971},[288,35613,31472],{"class":347},[288,35615,31475],{"class":298},[288,35617,516],{"class":347},[288,35619,675],{"class":298},[288,35621,35622],{"class":347},"227",[288,35624,675],{"class":298},[288,35626,35622],{"class":347},[288,35628,31488],{"class":298},[243,35630,35631],{"start":206},[246,35632,31501],{},[280,35634,35636],{"className":30551,"code":35635,"language":30553,"meta":205,"style":205},"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",[25,35637,35638,35644,35650,35660,35666,35676,35686,35696,35706,35716,35720,35731,35741,35745,35749,35753,35761,35773,35783,35799,35809,35841,35855,35865,35875,35879,35889,35903,35913,35923,35933,35939,35943,35947,35951,35955,35959,35967,35987,35991,35995,35999,36003,36007,36023,36027,36031,36039,36043,36047,36055,36059,36063,36067,36075,36079,36083,36087,36091,36099,36103,36111,36115,36123,36127,36135,36139,36147,36151,36155,36163,36167,36171,36175,36187,36211,36225,36229,36233,36237,36245,36249,36257,36261,36269,36273,36281,36285,36293,36297,36305,36309,36321,36325,36333,36337,36345,36349,36353,36357,36361,36369,36373,36389,36393,36401,36405,36409,36413,36417,36421,36425,36429,36445,36449,36461,36465,36477,36481,36493,36497,36505,36509,36517,36521,36525,36530,36536,36540,36549,36553,36570,36574,36583,36587,36605,36618,36623,36636,36640,36644,36652,36656,36660,36668,36672,36680,36684,36692,36696,36700,36742,36784,36788,36792,36808,36812,36828,36832,36836,36844,36848,36852,36864,36902,36907,36912,36921,36925,36939,36949,36955,36961,36967,36973,36977,36981,36987,36991,36995,37003,37007,37025,37029,37033,37037,37053,37057,37061,37065,37069,37073,37093,37113,37117,37121,37125,37133,37141,37145,37161,37181,37201,37205,37209,37217,37225,37229,37233,37237,37249,37253,37263,37271,37288],{"__ignoreMap":205},[288,35639,35640,35642],{"class":290,"line":291},[288,35641,30565],{"class":294},[288,35643,31995],{"class":298},[288,35645,35646,35648],{"class":290,"line":206},[288,35647,30565],{"class":294},[288,35649,32002],{"class":298},[288,35651,35652,35654,35656,35658],{"class":290,"line":1352},[288,35653,30565],{"class":294},[288,35655,32013],{"class":298},[288,35657,31556],{"class":294},[288,35659,32018],{"class":298},[288,35661,35662,35664],{"class":290,"line":1367},[288,35663,30565],{"class":294},[288,35665,30568],{"class":298},[288,35667,35668,35670,35672,35674],{"class":290,"line":1373},[288,35669,30910],{"class":294},[288,35671,31588],{"class":298},[288,35673,30565],{"class":294},[288,35675,32035],{"class":298},[288,35677,35678,35680,35682,35684],{"class":290,"line":1387},[288,35679,30910],{"class":294},[288,35681,31541],{"class":298},[288,35683,30565],{"class":294},[288,35685,31546],{"class":298},[288,35687,35688,35690,35692,35694],{"class":290,"line":1393},[288,35689,30910],{"class":294},[288,35691,31571],{"class":298},[288,35693,30565],{"class":294},[288,35695,31576],{"class":298},[288,35697,35698,35700,35702,35704],{"class":290,"line":1484},[288,35699,30565],{"class":294},[288,35701,31588],{"class":298},[288,35703,31556],{"class":294},[288,35705,31593],{"class":298},[288,35707,35708,35710,35712,35714],{"class":290,"line":1490},[288,35709,30565],{"class":294},[288,35711,31605],{"class":298},[288,35713,31556],{"class":294},[288,35715,31610],{"class":298},[288,35717,35718],{"class":290,"line":1502},[288,35719,32080],{"class":357},[288,35721,35722,35724,35726,35728],{"class":290,"line":1784},[288,35723,30910],{"class":294},[288,35725,32087],{"class":298},[288,35727,30565],{"class":294},[288,35729,35730],{"class":298}," AlexNet\n",[288,35732,35733,35735,35737,35739],{"class":290,"line":1789},[288,35734,30910],{"class":294},[288,35736,30913],{"class":298},[288,35738,30565],{"class":294},[288,35740,30918],{"class":298},[288,35742,35743],{"class":290,"line":1795},[288,35744,2572],{"emptyLinePlaceholder":217},[288,35746,35747],{"class":290,"line":1800},[288,35748,2572],{"emptyLinePlaceholder":217},[288,35750,35751],{"class":290,"line":1814},[288,35752,32115],{"class":357},[288,35754,35755,35757,35759],{"class":290,"line":1819},[288,35756,32120],{"class":294},[288,35758,32123],{"class":2135},[288,35760,32126],{"class":298},[288,35762,35763,35765,35767,35769,35771],{"class":290,"line":1825},[288,35764,32131],{"class":298},[288,35766,344],{"class":294},[288,35768,31628],{"class":298},[288,35770,31636],{"class":403},[288,35772,31639],{"class":298},[288,35774,35775,35777,35779,35781],{"class":290,"line":1846},[288,35776,32144],{"class":5389},[288,35778,344],{"class":294},[288,35780,31649],{"class":347},[288,35782,31639],{"class":298},[288,35784,35785,35787,35789,35791,35793,35795,35797],{"class":290,"line":1851},[288,35786,32155],{"class":5389},[288,35788,344],{"class":294},[288,35790,31666],{"class":298},[288,35792,31669],{"class":5389},[288,35794,344],{"class":294},[288,35796,35622],{"class":347},[288,35798,31677],{"class":298},[288,35800,35801,35803,35805,35807],{"class":290,"line":1865},[288,35802,32172],{"class":5389},[288,35804,344],{"class":294},[288,35806,31649],{"class":347},[288,35808,305],{"class":298},[288,35810,35811,35813,35815,35817,35819,35821,35823,35825,35827,35829,35831,35833,35835,35837,35839],{"class":290,"line":1870},[288,35812,32183],{"class":298},[288,35814,344],{"class":294},[288,35816,32188],{"class":298},[288,35818,32191],{"class":347},[288,35820,299],{"class":298},[288,35822,32196],{"class":347},[288,35824,752],{"class":294},[288,35826,7531],{"class":347},[288,35828,32203],{"class":298},[288,35830,32191],{"class":347},[288,35832,299],{"class":298},[288,35834,32210],{"class":347},[288,35836,752],{"class":294},[288,35838,7531],{"class":347},[288,35840,32217],{"class":298},[288,35842,35843,35845,35847,35849,35851,35853],{"class":290,"line":1899},[288,35844,32222],{"class":298},[288,35846,344],{"class":294},[288,35848,32227],{"class":298},[288,35850,31710],{"class":5389},[288,35852,344],{"class":294},[288,35854,31715],{"class":298},[288,35856,35857,35859,35861,35863],{"class":290,"line":1904},[288,35858,32238],{"class":5389},[288,35860,344],{"class":294},[288,35862,32243],{"class":347},[288,35864,31639],{"class":298},[288,35866,35867,35869,35871,35873],{"class":290,"line":1921},[288,35868,32250],{"class":5389},[288,35870,344],{"class":294},[288,35872,31649],{"class":347},[288,35874,31639],{"class":298},[288,35876,35877],{"class":290,"line":1926},[288,35878,32261],{"class":357},[288,35880,35881,35883,35885,35887],{"class":290,"line":1931},[288,35882,32266],{"class":5389},[288,35884,344],{"class":294},[288,35886,692],{"class":347},[288,35888,305],{"class":298},[288,35890,35891,35893,35895,35897,35899,35901],{"class":290,"line":1936},[288,35892,32277],{"class":298},[288,35894,344],{"class":294},[288,35896,31707],{"class":298},[288,35898,31710],{"class":5389},[288,35900,344],{"class":294},[288,35902,32288],{"class":298},[288,35904,35905,35907,35909,35911],{"class":290,"line":1950},[288,35906,32293],{"class":5389},[288,35908,344],{"class":294},[288,35910,32243],{"class":347},[288,35912,31639],{"class":298},[288,35914,35915,35917,35919,35921],{"class":290,"line":1955},[288,35916,32304],{"class":5389},[288,35918,344],{"class":294},[288,35920,31649],{"class":347},[288,35922,31639],{"class":298},[288,35924,35925,35927,35929,35931],{"class":290,"line":2749},[288,35926,32315],{"class":5389},[288,35928,344],{"class":294},[288,35930,692],{"class":347},[288,35932,305],{"class":298},[288,35934,35935,35937],{"class":290,"line":2763},[288,35936,4262],{"class":294},[288,35938,32328],{"class":298},[288,35940,35941],{"class":290,"line":2771},[288,35942,2572],{"emptyLinePlaceholder":217},[288,35944,35945],{"class":290,"line":2776},[288,35946,32337],{"class":357},[288,35948,35949],{"class":290,"line":2782},[288,35950,32342],{"class":357},[288,35952,35953],{"class":290,"line":2788},[288,35954,2572],{"emptyLinePlaceholder":217},[288,35956,35957],{"class":290,"line":2793},[288,35958,32351],{"class":357},[288,35960,35961,35963,35965],{"class":290,"line":8121},[288,35962,32120],{"class":294},[288,35964,32358],{"class":2135},[288,35966,32361],{"class":298},[288,35968,35969,35971,35973,35975,35977,35979,35981,35983,35985],{"class":290,"line":8145},[288,35970,31410],{"class":298},[288,35972,344],{"class":294},[288,35974,30624],{"class":298},[288,35976,31417],{"class":403},[288,35978,1876],{"class":294},[288,35980,31422],{"class":298},[288,35982,1873],{"class":294},[288,35984,32380],{"class":403},[288,35986,305],{"class":298},[288,35988,35989],{"class":290,"line":8150},[288,35990,2572],{"emptyLinePlaceholder":217},[288,35992,35993],{"class":290,"line":8156},[288,35994,2572],{"emptyLinePlaceholder":217},[288,35996,35997],{"class":290,"line":8183},[288,35998,32395],{"class":357},[288,36000,36001],{"class":290,"line":8188},[288,36002,32400],{"class":357},[288,36004,36005],{"class":290,"line":8194},[288,36006,32405],{"class":357},[288,36008,36009,36011,36013,36015,36017,36019,36021],{"class":290,"line":8206},[288,36010,32410],{"class":298},[288,36012,344],{"class":294},[288,36014,32415],{"class":298},[288,36016,32418],{"class":5389},[288,36018,344],{"class":294},[288,36020,32423],{"class":347},[288,36022,305],{"class":298},[288,36024,36025],{"class":290,"line":8218},[288,36026,2572],{"emptyLinePlaceholder":217},[288,36028,36029],{"class":290,"line":8230},[288,36030,32434],{"class":357},[288,36032,36033,36035,36037],{"class":290,"line":9889},[288,36034,32439],{"class":298},[288,36036,344],{"class":294},[288,36038,32444],{"class":298},[288,36040,36041],{"class":290,"line":9914},[288,36042,2572],{"emptyLinePlaceholder":217},[288,36044,36045],{"class":290,"line":9937},[288,36046,32453],{"class":357},[288,36048,36049,36051,36053],{"class":290,"line":9961},[288,36050,31462],{"class":298},[288,36052,344],{"class":294},[288,36054,32462],{"class":298},[288,36056,36057],{"class":290,"line":9966},[288,36058,32467],{"class":357},[288,36060,36061],{"class":290,"line":9971},[288,36062,32472],{"class":357},[288,36064,36065],{"class":290,"line":9976},[288,36066,32477],{"class":357},[288,36068,36069,36071,36073],{"class":290,"line":9985},[288,36070,32482],{"class":298},[288,36072,344],{"class":294},[288,36074,32487],{"class":298},[288,36076,36077],{"class":290,"line":9990},[288,36078,2572],{"emptyLinePlaceholder":217},[288,36080,36081],{"class":290,"line":9996},[288,36082,2572],{"emptyLinePlaceholder":217},[288,36084,36085],{"class":290,"line":10017},[288,36086,32500],{"class":357},[288,36088,36089],{"class":290,"line":10023},[288,36090,32505],{"class":357},[288,36092,36093,36095,36097],{"class":290,"line":10037},[288,36094,32510],{"class":298},[288,36096,344],{"class":294},[288,36098,32515],{"class":347},[288,36100,36101],{"class":290,"line":10043},[288,36102,32520],{"class":357},[288,36104,36105,36107,36109],{"class":290,"line":10070},[288,36106,32525],{"class":298},[288,36108,344],{"class":294},[288,36110,32530],{"class":298},[288,36112,36113],{"class":290,"line":10079},[288,36114,32535],{"class":357},[288,36116,36117,36119,36121],{"class":290,"line":10085},[288,36118,32540],{"class":298},[288,36120,344],{"class":294},[288,36122,32530],{"class":298},[288,36124,36125],{"class":290,"line":10093},[288,36126,32549],{"class":357},[288,36128,36129,36131,36133],{"class":290,"line":10098},[288,36130,32554],{"class":298},[288,36132,344],{"class":294},[288,36134,32530],{"class":298},[288,36136,36137],{"class":290,"line":16777},[288,36138,32563],{"class":357},[288,36140,36141,36143,36145],{"class":290,"line":16783},[288,36142,32568],{"class":298},[288,36144,344],{"class":294},[288,36146,32530],{"class":298},[288,36148,36149],{"class":290,"line":16806},[288,36150,2572],{"emptyLinePlaceholder":217},[288,36152,36153],{"class":290,"line":16812},[288,36154,32581],{"class":357},[288,36156,36157,36159,36161],{"class":290,"line":16835},[288,36158,32586],{"class":298},[288,36160,344],{"class":294},[288,36162,32591],{"class":298},[288,36164,36165],{"class":290,"line":16849},[288,36166,2572],{"emptyLinePlaceholder":217},[288,36168,36169],{"class":290,"line":16869},[288,36170,2572],{"emptyLinePlaceholder":217},[288,36172,36173],{"class":290,"line":16875},[288,36174,32604],{"class":357},[288,36176,36177,36179,36181,36183,36185],{"class":290,"line":16886},[288,36178,3373],{"class":294},[288,36180,32611],{"class":298},[288,36182,26216],{"class":294},[288,36184,32616],{"class":347},[288,36186,32619],{"class":298},[288,36188,36189,36191,36193,36195,36197,36199,36201,36203,36205,36207,36209],{"class":290,"line":16909},[288,36190,32624],{"class":347},[288,36192,299],{"class":298},[288,36194,32629],{"class":403},[288,36196,32632],{"class":347},[288,36198,881],{"class":403},[288,36200,32632],{"class":347},[288,36202,109],{"class":403},[288,36204,32641],{"class":298},[288,36206,829],{"class":294},[288,36208,516],{"class":347},[288,36210,30670],{"class":298},[288,36212,36213,36215,36217,36219,36221,36223],{"class":290,"line":16931},[288,36214,32624],{"class":347},[288,36216,299],{"class":298},[288,36218,32656],{"class":403},[288,36220,752],{"class":294},[288,36222,743],{"class":347},[288,36224,305],{"class":298},[288,36226,36227],{"class":290,"line":16936},[288,36228,2572],{"emptyLinePlaceholder":217},[288,36230,36231],{"class":290,"line":16942},[288,36232,32671],{"class":357},[288,36234,36235],{"class":290,"line":16956},[288,36236,32676],{"class":357},[288,36238,36239,36241,36243],{"class":290,"line":16969},[288,36240,32681],{"class":298},[288,36242,344],{"class":294},[288,36244,32515],{"class":347},[288,36246,36247],{"class":290,"line":16974},[288,36248,32690],{"class":357},[288,36250,36251,36253,36255],{"class":290,"line":16988},[288,36252,32695],{"class":298},[288,36254,344],{"class":294},[288,36256,3257],{"class":347},[288,36258,36259],{"class":290,"line":16993},[288,36260,32704],{"class":357},[288,36262,36263,36265,36267],{"class":290,"line":16999},[288,36264,32709],{"class":298},[288,36266,344],{"class":294},[288,36268,32515],{"class":347},[288,36270,36271],{"class":290,"line":17004},[288,36272,32718],{"class":357},[288,36274,36275,36277,36279],{"class":290,"line":17018},[288,36276,32723],{"class":298},[288,36278,344],{"class":294},[288,36280,3257],{"class":347},[288,36282,36283],{"class":290,"line":17023},[288,36284,32732],{"class":357},[288,36286,36287,36289,36291],{"class":290,"line":17028},[288,36288,32737],{"class":298},[288,36290,344],{"class":294},[288,36292,3257],{"class":347},[288,36294,36295],{"class":290,"line":17042},[288,36296,32746],{"class":357},[288,36298,36299,36301,36303],{"class":290,"line":17054},[288,36300,32751],{"class":298},[288,36302,344],{"class":294},[288,36304,3257],{"class":347},[288,36306,36307],{"class":290,"line":17059},[288,36308,32760],{"class":357},[288,36310,36311,36313,36315,36317,36319],{"class":290,"line":17072},[288,36312,3575],{"class":294},[288,36314,31774],{"class":298},[288,36316,26216],{"class":294},[288,36318,31779],{"class":347},[288,36320,32773],{"class":298},[288,36322,36323],{"class":290,"line":17077},[288,36324,32778],{"class":357},[288,36326,36327,36329,36331],{"class":290,"line":17082},[288,36328,32783],{"class":298},[288,36330,344],{"class":294},[288,36332,32788],{"class":298},[288,36334,36335],{"class":290,"line":17087},[288,36336,32793],{"class":357},[288,36338,36339,36341,36343],{"class":290,"line":17100},[288,36340,32798],{"class":298},[288,36342,344],{"class":294},[288,36344,32803],{"class":298},[288,36346,36347],{"class":290,"line":17105},[288,36348,32809],{"class":357},[288,36350,36351],{"class":290,"line":32806},[288,36352,32815],{"class":298},[288,36354,36355],{"class":290,"line":32812},[288,36356,32821],{"class":357},[288,36358,36359],{"class":290,"line":32818},[288,36360,32827],{"class":357},[288,36362,36363,36365,36367],{"class":290,"line":32824},[288,36364,32833],{"class":298},[288,36366,344],{"class":294},[288,36368,32838],{"class":298},[288,36370,36371],{"class":290,"line":32830},[288,36372,32844],{"class":357},[288,36374,36375,36377,36379,36381,36383,36385,36387],{"class":290,"line":32841},[288,36376,32850],{"class":298},[288,36378,344],{"class":294},[288,36380,32855],{"class":298},[288,36382,32858],{"class":5389},[288,36384,344],{"class":294},[288,36386,516],{"class":347},[288,36388,305],{"class":298},[288,36390,36391],{"class":290,"line":32847},[288,36392,32870],{"class":357},[288,36394,36395,36397,36399],{"class":290,"line":32867},[288,36396,32876],{"class":298},[288,36398,344],{"class":294},[288,36400,32881],{"class":298},[288,36402,36403],{"class":290,"line":32873},[288,36404,32887],{"class":357},[288,36406,36407],{"class":290,"line":32884},[288,36408,32893],{"class":298},[288,36410,36411],{"class":290,"line":32890},[288,36412,32899],{"class":357},[288,36414,36415],{"class":290,"line":32896},[288,36416,32905],{"class":298},[288,36418,36419],{"class":290,"line":32902},[288,36420,32911],{"class":357},[288,36422,36423],{"class":290,"line":32908},[288,36424,32917],{"class":298},[288,36426,36427],{"class":290,"line":32914},[288,36428,32923],{"class":357},[288,36430,36431,36433,36435,36437,36439,36441,36443],{"class":290,"line":32920},[288,36432,32929],{"class":298},[288,36434,9650],{"class":294},[288,36436,32934],{"class":298},[288,36438,752],{"class":294},[288,36440,32939],{"class":298},[288,36442,490],{"class":347},[288,36444,305],{"class":298},[288,36446,36447],{"class":290,"line":32926},[288,36448,32949],{"class":357},[288,36450,36451,36453,36455,36457,36459],{"class":290,"line":32946},[288,36452,32955],{"class":298},[288,36454,9650],{"class":294},[288,36456,32960],{"class":298},[288,36458,3121],{"class":294},[288,36460,32965],{"class":298},[288,36462,36463],{"class":290,"line":32952},[288,36464,32971],{"class":357},[288,36466,36467,36469,36471,36473,36475],{"class":290,"line":32968},[288,36468,32977],{"class":298},[288,36470,9650],{"class":294},[288,36472,32939],{"class":298},[288,36474,490],{"class":347},[288,36476,305],{"class":298},[288,36478,36479],{"class":290,"line":32974},[288,36480,32991],{"class":357},[288,36482,36483,36485,36487,36489,36491],{"class":290,"line":32988},[288,36484,3575],{"class":294},[288,36486,32999],{"class":298},[288,36488,26216],{"class":294},[288,36490,31779],{"class":347},[288,36492,33006],{"class":298},[288,36494,36495],{"class":290,"line":32994},[288,36496,33012],{"class":357},[288,36498,36499,36501,36503],{"class":290,"line":33009},[288,36500,32783],{"class":298},[288,36502,344],{"class":294},[288,36504,32788],{"class":298},[288,36506,36507],{"class":290,"line":33015},[288,36508,33027],{"class":357},[288,36510,36511,36513,36515],{"class":290,"line":33024},[288,36512,32798],{"class":298},[288,36514,344],{"class":294},[288,36516,32803],{"class":298},[288,36518,36519],{"class":290,"line":33030},[288,36520,33042],{"class":357},[288,36522,36523],{"class":290,"line":33039},[288,36524,33048],{"class":298},[288,36526,36527],{"class":290,"line":33045},[288,36528,36529],{"class":357},"            # 验证时不计算梯度以节省内存\u002F计算\n",[288,36531,36532,36534],{"class":290,"line":33051},[288,36533,33054],{"class":294},[288,36535,33057],{"class":298},[288,36537,36538],{"class":290,"line":33060},[288,36539,33063],{"class":357},[288,36541,36542,36545,36547],{"class":290,"line":33066},[288,36543,36544],{"class":298},"                output",[288,36546,344],{"class":294},[288,36548,32838],{"class":298},[288,36550,36551],{"class":290,"line":33077},[288,36552,33080],{"class":357},[288,36554,36555,36558,36560,36562,36564,36566,36568],{"class":290,"line":33083},[288,36556,36557],{"class":298},"                pre_lab",[288,36559,344],{"class":294},[288,36561,32855],{"class":298},[288,36563,32858],{"class":5389},[288,36565,344],{"class":294},[288,36567,516],{"class":347},[288,36569,305],{"class":298},[288,36571,36572],{"class":290,"line":33102},[288,36573,33105],{"class":357},[288,36575,36576,36579,36581],{"class":290,"line":33108},[288,36577,36578],{"class":298},"                val_batch_loss",[288,36580,344],{"class":294},[288,36582,32881],{"class":298},[288,36584,36585],{"class":290,"line":33119},[288,36586,33122],{"class":357},[288,36588,36589,36592,36594,36597,36599,36601,36603],{"class":290,"line":33125},[288,36590,36591],{"class":298},"                val_loss",[288,36593,9650],{"class":294},[288,36595,36596],{"class":298},"val_batch_loss.item()",[288,36598,752],{"class":294},[288,36600,32939],{"class":298},[288,36602,490],{"class":347},[288,36604,305],{"class":298},[288,36606,36607,36610,36612,36614,36616],{"class":290,"line":33145},[288,36608,36609],{"class":298},"                val_corrects",[288,36611,9650],{"class":294},[288,36613,32960],{"class":298},[288,36615,3121],{"class":294},[288,36617,32965],{"class":298},[288,36619,36620],{"class":290,"line":33161},[288,36621,36622],{"class":357},"            # 当前用于验证的样本数量\n",[288,36624,36625,36628,36630,36632,36634],{"class":290,"line":33167},[288,36626,36627],{"class":298},"            val_num",[288,36629,9650],{"class":294},[288,36631,32939],{"class":298},[288,36633,490],{"class":347},[288,36635,305],{"class":298},[288,36637,36638],{"class":290,"line":33181},[288,36639,33184],{"class":357},[288,36641,36642],{"class":290,"line":33187},[288,36643,33190],{"class":357},[288,36645,36646,36648,36650],{"class":290,"line":33193},[288,36647,33196],{"class":298},[288,36649,881],{"class":294},[288,36651,33201],{"class":298},[288,36653,36654],{"class":290,"line":33204},[288,36655,33207],{"class":357},[288,36657,36658],{"class":290,"line":33210},[288,36659,33213],{"class":357},[288,36661,36662,36664,36666],{"class":290,"line":33216},[288,36663,33219],{"class":298},[288,36665,881],{"class":294},[288,36667,33201],{"class":298},[288,36669,36670],{"class":290,"line":33226},[288,36671,33229],{"class":357},[288,36673,36674,36676,36678],{"class":290,"line":33232},[288,36675,33235],{"class":298},[288,36677,881],{"class":294},[288,36679,33240],{"class":298},[288,36681,36682],{"class":290,"line":33243},[288,36683,33246],{"class":357},[288,36685,36686,36688,36690],{"class":290,"line":33249},[288,36687,33252],{"class":298},[288,36689,881],{"class":294},[288,36691,33240],{"class":298},[288,36693,36694],{"class":290,"line":33259},[288,36695,2572],{"emptyLinePlaceholder":217},[288,36697,36698],{"class":290,"line":33264},[288,36699,33267],{"class":357},[288,36701,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728,36730,36732,36734,36736,36738,36740],{"class":290,"line":33270},[288,36703,32624],{"class":347},[288,36705,299],{"class":298},[288,36707,3764],{"class":403},[288,36709,32632],{"class":347},[288,36711,33281],{"class":403},[288,36713,1193],{"class":347},[288,36715,33286],{"class":294},[288,36717,1243],{"class":347},[288,36719,33291],{"class":403},[288,36721,1193],{"class":347},[288,36723,33286],{"class":294},[288,36725,1243],{"class":347},[288,36727,3764],{"class":403},[288,36729,33302],{"class":298},[288,36731,829],{"class":294},[288,36733,516],{"class":347},[288,36735,33309],{"class":298},[288,36737,829],{"class":294},[288,36739,516],{"class":347},[288,36741,33316],{"class":298},[288,36743,36744,36746,36748,36750,36752,36754,36756,36758,36760,36762,36764,36766,36768,36770,36772,36774,36776,36778,36780,36782],{"class":290,"line":33319},[288,36745,32624],{"class":347},[288,36747,299],{"class":298},[288,36749,3764],{"class":403},[288,36751,32632],{"class":347},[288,36753,33330],{"class":403},[288,36755,1193],{"class":347},[288,36757,33286],{"class":294},[288,36759,1243],{"class":347},[288,36761,33339],{"class":403},[288,36763,1193],{"class":347},[288,36765,33286],{"class":294},[288,36767,1243],{"class":347},[288,36769,3764],{"class":403},[288,36771,33350],{"class":298},[288,36773,829],{"class":294},[288,36775,516],{"class":347},[288,36777,33357],{"class":298},[288,36779,829],{"class":294},[288,36781,516],{"class":347},[288,36783,33316],{"class":298},[288,36785,36786],{"class":290,"line":33366},[288,36787,2572],{"emptyLinePlaceholder":217},[288,36789,36790],{"class":290,"line":33371},[288,36791,33374],{"class":357},[288,36793,36794,36796,36798,36800,36802,36804,36806],{"class":290,"line":33377},[288,36795,2669],{"class":294},[288,36797,33382],{"class":298},[288,36799,829],{"class":294},[288,36801,516],{"class":347},[288,36803,1237],{"class":298},[288,36805,1257],{"class":294},[288,36807,33393],{"class":298},[288,36809,36810],{"class":290,"line":33396},[288,36811,33399],{"class":357},[288,36813,36814,36816,36818,36820,36822,36824,36826],{"class":290,"line":33402},[288,36815,33405],{"class":298},[288,36817,338],{"class":347},[288,36819,344],{"class":294},[288,36821,33412],{"class":298},[288,36823,829],{"class":294},[288,36825,516],{"class":347},[288,36827,33419],{"class":298},[288,36829,36830],{"class":290,"line":33422},[288,36831,33425],{"class":357},[288,36833,36834],{"class":290,"line":33428},[288,36835,33431],{"class":357},[288,36837,36838,36840,36842],{"class":290,"line":33434},[288,36839,33437],{"class":298},[288,36841,344],{"class":294},[288,36843,32487],{"class":298},[288,36845,36846],{"class":290,"line":33444},[288,36847,2572],{"emptyLinePlaceholder":217},[288,36849,36850],{"class":290,"line":33449},[288,36851,33452],{"class":357},[288,36853,36854,36856,36858,36860,36862],{"class":290,"line":33455},[288,36855,33458],{"class":298},[288,36857,344],{"class":294},[288,36859,33463],{"class":298},[288,36861,829],{"class":294},[288,36863,33468],{"class":298},[288,36865,36866,36868,36870,36872,36874,36876,36878,36880,36882,36884,36886,36888,36890,36892,36894,36896,36898,36900],{"class":290,"line":33471},[288,36867,32624],{"class":347},[288,36869,299],{"class":298},[288,36871,33478],{"class":403},[288,36873,1193],{"class":347},[288,36875,33483],{"class":294},[288,36877,1243],{"class":347},[288,36879,841],{"class":403},[288,36881,1193],{"class":347},[288,36883,33483],{"class":294},[288,36885,1243],{"class":347},[288,36887,33496],{"class":403},[288,36889,33499],{"class":298},[288,36891,33502],{"class":294},[288,36893,1204],{"class":347},[288,36895,33507],{"class":298},[288,36897,625],{"class":294},[288,36899,1204],{"class":347},[288,36901,30670],{"class":298},[288,36903,36904],{"class":290,"line":33516},[288,36905,36906],{"class":357},"    # 选择最优参数并保存\n",[288,36908,36909],{"class":290,"line":33522},[288,36910,36911],{"class":357},"    # 保存最佳模型权重字典\n",[288,36913,36914,36917,36919],{"class":290,"line":33528},[288,36915,36916],{"class":298},"    torch.save(best_model_wts,",[288,36918,33540],{"class":403},[288,36920,305],{"class":298},[288,36922,36923],{"class":290,"line":33534},[288,36924,33560],{"class":357},[288,36926,36927,36929,36931,36933,36935,36937],{"class":290,"line":33545},[288,36928,33566],{"class":298},[288,36930,344],{"class":294},[288,36932,33571],{"class":298},[288,36934,33574],{"class":5389},[288,36936,344],{"class":294},[288,36938,1718],{"class":298},[288,36940,36941,36943,36945,36947],{"class":290,"line":33551},[288,36942,33584],{"class":403},[288,36944,1156],{"class":298},[288,36946,33589],{"class":347},[288,36948,33592],{"class":298},[288,36950,36951,36953],{"class":290,"line":33557},[288,36952,33598],{"class":403},[288,36954,33601],{"class":298},[288,36956,36957,36959],{"class":290,"line":33563},[288,36958,33607],{"class":403},[288,36960,33610],{"class":298},[288,36962,36963,36965],{"class":290,"line":33581},[288,36964,33616],{"class":403},[288,36966,33619],{"class":298},[288,36968,36969,36971],{"class":290,"line":33595},[288,36970,33625],{"class":403},[288,36972,33628],{"class":298},[288,36974,36975],{"class":290,"line":33604},[288,36976,33634],{"class":298},[288,36978,36979],{"class":290,"line":33613},[288,36980,33640],{"class":357},[288,36982,36983,36985],{"class":290,"line":33622},[288,36984,4262],{"class":294},[288,36986,33648],{"class":298},[288,36988,36989],{"class":290,"line":33631},[288,36990,2572],{"emptyLinePlaceholder":217},[288,36992,36993],{"class":290,"line":33637},[288,36994,33659],{"class":357},[288,36996,36997,36999,37001],{"class":290,"line":33643},[288,36998,32120],{"class":294},[288,37000,33667],{"class":2135},[288,37002,33670],{"class":298},[288,37004,37005],{"class":290,"line":33651},[288,37006,33676],{"class":357},[288,37008,37009,37011,37013,37015,37017,37019,37021,37023],{"class":290,"line":33656},[288,37010,33682],{"class":298},[288,37012,31866],{"class":5389},[288,37014,344],{"class":294},[288,37016,299],{"class":298},[288,37018,795],{"class":347},[288,37020,675],{"class":298},[288,37022,590],{"class":347},[288,37024,30670],{"class":298},[288,37026,37027],{"class":290,"line":33662},[288,37028,33702],{"class":357},[288,37030,37031],{"class":290,"line":33673},[288,37032,33708],{"class":357},[288,37034,37035],{"class":290,"line":33679},[288,37036,33714],{"class":357},[288,37038,37039,37041,37043,37045,37047,37049,37051],{"class":290,"line":33699},[288,37040,31900],{"class":298},[288,37042,516],{"class":347},[288,37044,675],{"class":298},[288,37046,376],{"class":347},[288,37048,675],{"class":298},[288,37050,516],{"class":347},[288,37052,305],{"class":298},[288,37054,37055],{"class":290,"line":33705},[288,37056,33737],{"class":357},[288,37058,37059],{"class":290,"line":33711},[288,37060,33743],{"class":357},[288,37062,37063],{"class":290,"line":33717},[288,37064,33749],{"class":357},[288,37066,37067],{"class":290,"line":33734},[288,37068,33755],{"class":357},[288,37070,37071],{"class":290,"line":33740},[288,37072,33761],{"class":357},[288,37074,37075,37077,37079,37081,37083,37085,37087,37089,37091],{"class":290,"line":33746},[288,37076,33767],{"class":298},[288,37078,33770],{"class":403},[288,37080,33773],{"class":298},[288,37082,33776],{"class":403},[288,37084,675],{"class":298},[288,37086,33781],{"class":5389},[288,37088,344],{"class":294},[288,37090,33786],{"class":403},[288,37092,305],{"class":298},[288,37094,37095,37097,37099,37101,37103,37105,37107,37109,37111],{"class":290,"line":33752},[288,37096,33767],{"class":298},[288,37098,33770],{"class":403},[288,37100,33798],{"class":298},[288,37102,33801],{"class":403},[288,37104,675],{"class":298},[288,37106,33781],{"class":5389},[288,37108,344],{"class":294},[288,37110,33810],{"class":403},[288,37112,305],{"class":298},[288,37114,37115],{"class":290,"line":33758},[288,37116,33818],{"class":357},[288,37118,37119],{"class":290,"line":33764},[288,37120,33824],{"class":298},[288,37122,37123],{"class":290,"line":33791},[288,37124,33830],{"class":357},[288,37126,37127,37129,37131],{"class":290,"line":33815},[288,37128,33836],{"class":298},[288,37130,33839],{"class":403},[288,37132,305],{"class":298},[288,37134,37135,37137,37139],{"class":290,"line":33821},[288,37136,33847],{"class":298},[288,37138,33850],{"class":403},[288,37140,305],{"class":298},[288,37142,37143],{"class":290,"line":33827},[288,37144,33858],{"class":357},[288,37146,37147,37149,37151,37153,37155,37157,37159],{"class":290,"line":33833},[288,37148,31900],{"class":298},[288,37150,516],{"class":347},[288,37152,675],{"class":298},[288,37154,376],{"class":347},[288,37156,675],{"class":298},[288,37158,376],{"class":347},[288,37160,305],{"class":298},[288,37162,37163,37165,37167,37169,37171,37173,37175,37177,37179],{"class":290,"line":33844},[288,37164,33767],{"class":298},[288,37166,33770],{"class":403},[288,37168,33885],{"class":298},[288,37170,33776],{"class":403},[288,37172,675],{"class":298},[288,37174,33781],{"class":5389},[288,37176,344],{"class":294},[288,37178,33896],{"class":403},[288,37180,305],{"class":298},[288,37182,37183,37185,37187,37189,37191,37193,37195,37197,37199],{"class":290,"line":33855},[288,37184,33767],{"class":298},[288,37186,33770],{"class":403},[288,37188,33908],{"class":298},[288,37190,33801],{"class":403},[288,37192,675],{"class":298},[288,37194,33781],{"class":5389},[288,37196,344],{"class":294},[288,37198,33919],{"class":403},[288,37200,305],{"class":298},[288,37202,37203],{"class":290,"line":33861},[288,37204,33927],{"class":357},[288,37206,37207],{"class":290,"line":33878},[288,37208,33824],{"class":298},[288,37210,37211,37213,37215],{"class":290,"line":33901},[288,37212,33836],{"class":298},[288,37214,33770],{"class":403},[288,37216,305],{"class":298},[288,37218,37219,37221,37223],{"class":290,"line":33924},[288,37220,33847],{"class":298},[288,37222,33949],{"class":403},[288,37224,305],{"class":298},[288,37226,37227],{"class":290,"line":33930},[288,37228,33957],{"class":298},[288,37230,37231],{"class":290,"line":33935},[288,37232,2572],{"emptyLinePlaceholder":217},[288,37234,37235],{"class":290,"line":33944},[288,37236,33968],{"class":357},[288,37238,37239,37241,37243,37245,37247],{"class":290,"line":33954},[288,37240,1703],{"class":294},[288,37242,31393],{"class":347},[288,37244,3121],{"class":294},[288,37246,31398],{"class":403},[288,37248,3911],{"class":298},[288,37250,37251],{"class":290,"line":33960},[288,37252,33987],{"class":357},[288,37254,37255,37258,37260],{"class":290,"line":33965},[288,37256,37257],{"class":298},"    AlexNet",[288,37259,344],{"class":294},[288,37261,37262],{"class":298},"AlexNet()\n",[288,37264,37265,37267,37269],{"class":290,"line":33971},[288,37266,34004],{"class":298},[288,37268,344],{"class":294},[288,37270,34009],{"class":298},[288,37272,37273,37275,37277,37280,37282,37284,37286],{"class":290,"line":33984},[288,37274,33566],{"class":298},[288,37276,344],{"class":294},[288,37278,37279],{"class":298},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[288,37281,34022],{"class":5389},[288,37283,344],{"class":294},[288,37285,997],{"class":347},[288,37287,305],{"class":298},[288,37289,37290],{"class":290,"line":33990},[288,37291,34034],{"class":298},[243,37293,37294],{"start":1352},[246,37295,34047],{},[280,37297,37299],{"className":30551,"code":37298,"language":30553,"meta":205,"style":205},"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",[25,37300,37301,37307,37317,37327,37337,37341,37351,37361,37372,37376,37380,37384,37392,37408,37418,37434,37444,37458,37462,37472,37482,37492,37498,37502,37506,37514,37518,37534,37542,37546,37550,37558,37566,37570,37574,37578,37582,37588,37592,37602,37610,37618,37622,37626,37630,37638,37642,37658,37662,37666,37670,37682,37686,37698,37702,37706,37718,37722,37732,37736,37740,37752,37756,37764,37768,37772,37780,37784,37792,37796,37800,37804,37808,37812,37828,37836,37840,37844,37892,37898,37902,37912,37920,37928,37932,37936,37940,37944,37952,37956,37972,37976,37984,37992],{"__ignoreMap":205},[288,37302,37303,37305],{"class":290,"line":291},[288,37304,30565],{"class":294},[288,37306,30568],{"class":298},[288,37308,37309,37311,37313,37315],{"class":290,"line":206},[288,37310,30565],{"class":294},[288,37312,31588],{"class":298},[288,37314,31556],{"class":294},[288,37316,31593],{"class":298},[288,37318,37319,37321,37323,37325],{"class":290,"line":1352},[288,37320,30910],{"class":294},[288,37322,34075],{"class":298},[288,37324,30565],{"class":294},[288,37326,34080],{"class":298},[288,37328,37329,37331,37333,37335],{"class":290,"line":1367},[288,37330,30910],{"class":294},[288,37332,31571],{"class":298},[288,37334,30565],{"class":294},[288,37336,31576],{"class":298},[288,37338,37339],{"class":290,"line":1373},[288,37340,34095],{"class":357},[288,37342,37343,37345,37347,37349],{"class":290,"line":1387},[288,37344,30910],{"class":294},[288,37346,31541],{"class":298},[288,37348,30565],{"class":294},[288,37350,31546],{"class":298},[288,37352,37353,37355,37357,37359],{"class":290,"line":1393},[288,37354,30910],{"class":294},[288,37356,32087],{"class":298},[288,37358,30565],{"class":294},[288,37360,35730],{"class":298},[288,37362,37363,37365,37368,37370],{"class":290,"line":1484},[288,37364,30910],{"class":294},[288,37366,37367],{"class":298}," 练习.AlexNet.model ",[288,37369,30565],{"class":294},[288,37371,35730],{"class":298},[288,37373,37374],{"class":290,"line":1490},[288,37375,2572],{"emptyLinePlaceholder":217},[288,37377,37378],{"class":290,"line":1502},[288,37379,2572],{"emptyLinePlaceholder":217},[288,37381,37382],{"class":290,"line":1784},[288,37383,34124],{"class":357},[288,37385,37386,37388,37390],{"class":290,"line":1789},[288,37387,32120],{"class":294},[288,37389,34131],{"class":2135},[288,37391,32126],{"class":298},[288,37393,37394,37396,37398,37400,37402,37404,37406],{"class":290,"line":1795},[288,37395,34138],{"class":298},[288,37397,344],{"class":294},[288,37399,31628],{"class":298},[288,37401,31631],{"class":5389},[288,37403,344],{"class":294},[288,37405,31636],{"class":403},[288,37407,31639],{"class":298},[288,37409,37410,37412,37414,37416],{"class":290,"line":1800},[288,37411,34155],{"class":5389},[288,37413,344],{"class":294},[288,37415,34160],{"class":347},[288,37417,31639],{"class":298},[288,37419,37420,37422,37424,37426,37428,37430,37432],{"class":290,"line":1814},[288,37421,34167],{"class":5389},[288,37423,344],{"class":294},[288,37425,31666],{"class":298},[288,37427,31669],{"class":5389},[288,37429,344],{"class":294},[288,37431,35622],{"class":347},[288,37433,31677],{"class":298},[288,37435,37436,37438,37440,37442],{"class":290,"line":1819},[288,37437,34184],{"class":5389},[288,37439,344],{"class":294},[288,37441,31649],{"class":347},[288,37443,305],{"class":298},[288,37445,37446,37448,37450,37452,37454,37456],{"class":290,"line":1825},[288,37447,34195],{"class":298},[288,37449,344],{"class":294},[288,37451,31707],{"class":298},[288,37453,31710],{"class":5389},[288,37455,344],{"class":294},[288,37457,34206],{"class":298},[288,37459,37460],{"class":290,"line":1846},[288,37461,34211],{"class":357},[288,37463,37464,37466,37468,37470],{"class":290,"line":1851},[288,37465,34216],{"class":5389},[288,37467,344],{"class":294},[288,37469,516],{"class":347},[288,37471,31639],{"class":298},[288,37473,37474,37476,37478,37480],{"class":290,"line":1865},[288,37475,34227],{"class":5389},[288,37477,344],{"class":294},[288,37479,31649],{"class":347},[288,37481,31639],{"class":298},[288,37483,37484,37486,37488,37490],{"class":290,"line":1870},[288,37485,34238],{"class":5389},[288,37487,344],{"class":294},[288,37489,490],{"class":347},[288,37491,305],{"class":298},[288,37493,37494,37496],{"class":290,"line":1899},[288,37495,4262],{"class":294},[288,37497,34251],{"class":298},[288,37499,37500],{"class":290,"line":1904},[288,37501,2572],{"emptyLinePlaceholder":217},[288,37503,37504],{"class":290,"line":1921},[288,37505,34260],{"class":357},[288,37507,37508,37510,37512],{"class":290,"line":1926},[288,37509,32120],{"class":294},[288,37511,34267],{"class":2135},[288,37513,34270],{"class":298},[288,37515,37516],{"class":290,"line":1931},[288,37517,34275],{"class":357},[288,37519,37520,37522,37524,37526,37528,37530,37532],{"class":290,"line":1936},[288,37521,31410],{"class":298},[288,37523,344],{"class":294},[288,37525,31417],{"class":403},[288,37527,1876],{"class":294},[288,37529,31422],{"class":298},[288,37531,1873],{"class":294},[288,37533,34292],{"class":403},[288,37535,37536,37538,37540],{"class":290,"line":1950},[288,37537,31462],{"class":298},[288,37539,344],{"class":294},[288,37541,32462],{"class":298},[288,37543,37544],{"class":290,"line":1955},[288,37545,2572],{"emptyLinePlaceholder":217},[288,37547,37548],{"class":290,"line":2749},[288,37549,34309],{"class":357},[288,37551,37552,37554,37556],{"class":290,"line":2763},[288,37553,34314],{"class":298},[288,37555,344],{"class":294},[288,37557,32515],{"class":347},[288,37559,37560,37562,37564],{"class":290,"line":2771},[288,37561,34323],{"class":298},[288,37563,344],{"class":294},[288,37565,3257],{"class":347},[288,37567,37568],{"class":290,"line":2776},[288,37569,2572],{"emptyLinePlaceholder":217},[288,37571,37572],{"class":290,"line":2782},[288,37573,34336],{"class":357},[288,37575,37576],{"class":290,"line":2788},[288,37577,34341],{"class":357},[288,37579,37580],{"class":290,"line":2793},[288,37581,34346],{"class":357},[288,37583,37584,37586],{"class":290,"line":8121},[288,37585,34351],{"class":294},[288,37587,33057],{"class":298},[288,37589,37590],{"class":290,"line":8145},[288,37591,34358],{"class":357},[288,37593,37594,37596,37598,37600],{"class":290,"line":8150},[288,37595,3575],{"class":294},[288,37597,34365],{"class":298},[288,37599,26216],{"class":294},[288,37601,34370],{"class":298},[288,37603,37604,37606,37608],{"class":290,"line":8156},[288,37605,34375],{"class":298},[288,37607,344],{"class":294},[288,37609,34380],{"class":298},[288,37611,37612,37614,37616],{"class":290,"line":8183},[288,37613,34385],{"class":298},[288,37615,344],{"class":294},[288,37617,34390],{"class":298},[288,37619,37620],{"class":290,"line":8188},[288,37621,34395],{"class":357},[288,37623,37624],{"class":290,"line":8194},[288,37625,33048],{"class":298},[288,37627,37628],{"class":290,"line":8206},[288,37629,34404],{"class":357},[288,37631,37632,37634,37636],{"class":290,"line":8218},[288,37633,32833],{"class":298},[288,37635,344],{"class":294},[288,37637,34413],{"class":298},[288,37639,37640],{"class":290,"line":8230},[288,37641,34418],{"class":357},[288,37643,37644,37646,37648,37650,37652,37654,37656],{"class":290,"line":9889},[288,37645,32850],{"class":298},[288,37647,344],{"class":294},[288,37649,32855],{"class":298},[288,37651,32858],{"class":5389},[288,37653,344],{"class":294},[288,37655,516],{"class":347},[288,37657,305],{"class":298},[288,37659,37660],{"class":290,"line":9914},[288,37661,34439],{"class":357},[288,37663,37664],{"class":290,"line":9937},[288,37665,34444],{"class":357},[288,37667,37668],{"class":290,"line":9961},[288,37669,34449],{"class":357},[288,37671,37672,37674,37676,37678,37680],{"class":290,"line":9966},[288,37673,34454],{"class":298},[288,37675,9650],{"class":294},[288,37677,32960],{"class":298},[288,37679,3121],{"class":294},[288,37681,34463],{"class":298},[288,37683,37684],{"class":290,"line":9971},[288,37685,34468],{"class":357},[288,37687,37688,37690,37692,37694,37696],{"class":290,"line":9976},[288,37689,34473],{"class":298},[288,37691,9650],{"class":294},[288,37693,34478],{"class":298},[288,37695,490],{"class":347},[288,37697,305],{"class":298},[288,37699,37700],{"class":290,"line":9985},[288,37701,2572],{"emptyLinePlaceholder":217},[288,37703,37704],{"class":290,"line":9990},[288,37705,34491],{"class":357},[288,37707,37708,37710,37712,37714,37716],{"class":290,"line":9996},[288,37709,34496],{"class":298},[288,37711,344],{"class":294},[288,37713,34501],{"class":298},[288,37715,881],{"class":294},[288,37717,34506],{"class":298},[288,37719,37720],{"class":290,"line":10017},[288,37721,34511],{"class":357},[288,37723,37724,37726,37728,37730],{"class":290,"line":10023},[288,37725,32624],{"class":347},[288,37727,299],{"class":298},[288,37729,34520],{"class":403},[288,37731,34523],{"class":298},[288,37733,37734],{"class":290,"line":10037},[288,37735,2572],{"emptyLinePlaceholder":217},[288,37737,37738],{"class":290,"line":10043},[288,37739,34532],{"class":357},[288,37741,37742,37744,37746,37748,37750],{"class":290,"line":10070},[288,37743,1703],{"class":294},[288,37745,31393],{"class":347},[288,37747,3121],{"class":294},[288,37749,31398],{"class":403},[288,37751,3911],{"class":298},[288,37753,37754],{"class":290,"line":10079},[288,37755,34549],{"class":357},[288,37757,37758,37760,37762],{"class":290,"line":10085},[288,37759,31462],{"class":298},[288,37761,344],{"class":294},[288,37763,37262],{"class":298},[288,37765,37766],{"class":290,"line":10093},[288,37767,34562],{"class":357},[288,37769,37770],{"class":290,"line":10098},[288,37771,34567],{"class":357},[288,37773,37774,37776,37778],{"class":290,"line":16777},[288,37775,34572],{"class":298},[288,37777,34575],{"class":403},[288,37779,30670],{"class":298},[288,37781,37782],{"class":290,"line":16783},[288,37783,34582],{"class":357},[288,37785,37786,37788,37790],{"class":290,"line":16806},[288,37787,34195],{"class":298},[288,37789,344],{"class":294},[288,37791,34591],{"class":298},[288,37793,37794],{"class":290,"line":16812},[288,37795,34596],{"class":357},[288,37797,37798],{"class":290,"line":16835},[288,37799,34601],{"class":298},[288,37801,37802],{"class":290,"line":16849},[288,37803,2572],{"emptyLinePlaceholder":217},[288,37805,37806],{"class":290,"line":16869},[288,37807,34610],{"class":357},[288,37809,37810],{"class":290,"line":16875},[288,37811,34615],{"class":357},[288,37813,37814,37816,37818,37820,37822,37824,37826],{"class":290,"line":16886},[288,37815,31410],{"class":298},[288,37817,344],{"class":294},[288,37819,31417],{"class":403},[288,37821,1876],{"class":294},[288,37823,31422],{"class":298},[288,37825,1873],{"class":294},[288,37827,34292],{"class":403},[288,37829,37830,37832,37834],{"class":290,"line":16909},[288,37831,31462],{"class":298},[288,37833,344],{"class":294},[288,37835,32462],{"class":298},[288,37837,37838],{"class":290,"line":16931},[288,37839,34644],{"class":357},[288,37841,37842],{"class":290,"line":16936},[288,37843,34649],{"class":357},[288,37845,37846,37848,37850,37852,37854,37856,37858,37860,37862,37864,37866,37868,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890],{"class":290,"line":16942},[288,37847,34654],{"class":298},[288,37849,344],{"class":294},[288,37851,1187],{"class":298},[288,37853,34661],{"class":403},[288,37855,675],{"class":298},[288,37857,34666],{"class":403},[288,37859,675],{"class":298},[288,37861,34671],{"class":403},[288,37863,675],{"class":298},[288,37865,34676],{"class":403},[288,37867,675],{"class":298},[288,37869,34681],{"class":403},[288,37871,675],{"class":298},[288,37873,34686],{"class":403},[288,37875,675],{"class":298},[288,37877,34691],{"class":403},[288,37879,675],{"class":298},[288,37881,34696],{"class":403},[288,37883,675],{"class":298},[288,37885,34701],{"class":403},[288,37887,675],{"class":298},[288,37889,34706],{"class":403},[288,37891,33419],{"class":298},[288,37893,37894,37896],{"class":290,"line":16956},[288,37895,34351],{"class":294},[288,37897,33057],{"class":298},[288,37899,37900],{"class":290,"line":16969},[288,37901,34719],{"class":357},[288,37903,37904,37906,37908,37910],{"class":290,"line":16974},[288,37905,3575],{"class":294},[288,37907,34726],{"class":298},[288,37909,26216],{"class":294},[288,37911,34370],{"class":298},[288,37913,37914,37916,37918],{"class":290,"line":16988},[288,37915,32783],{"class":298},[288,37917,344],{"class":294},[288,37919,32788],{"class":298},[288,37921,37922,37924,37926],{"class":290,"line":16993},[288,37923,32798],{"class":298},[288,37925,344],{"class":294},[288,37927,32803],{"class":298},[288,37929,37930],{"class":290,"line":16999},[288,37931,2572],{"emptyLinePlaceholder":217},[288,37933,37934],{"class":290,"line":17004},[288,37935,34755],{"class":357},[288,37937,37938],{"class":290,"line":17018},[288,37939,33048],{"class":298},[288,37941,37942],{"class":290,"line":17023},[288,37943,34764],{"class":357},[288,37945,37946,37948,37950],{"class":290,"line":17028},[288,37947,32833],{"class":298},[288,37949,344],{"class":294},[288,37951,32838],{"class":298},[288,37953,37954],{"class":290,"line":17042},[288,37955,34777],{"class":357},[288,37957,37958,37960,37962,37964,37966,37968,37970],{"class":290,"line":17054},[288,37959,32850],{"class":298},[288,37961,344],{"class":294},[288,37963,32855],{"class":298},[288,37965,32858],{"class":5389},[288,37967,344],{"class":294},[288,37969,516],{"class":347},[288,37971,305],{"class":298},[288,37973,37974],{"class":290,"line":17059},[288,37975,34798],{"class":357},[288,37977,37978,37980,37982],{"class":290,"line":17072},[288,37979,34803],{"class":298},[288,37981,344],{"class":294},[288,37983,34808],{"class":298},[288,37985,37986,37988,37990],{"class":290,"line":17077},[288,37987,34813],{"class":298},[288,37989,344],{"class":294},[288,37991,34818],{"class":298},[288,37993,37994,37996,37998,38000,38002,38004,38006,38008],{"class":290,"line":17082},[288,37995,34823],{"class":347},[288,37997,299],{"class":298},[288,37999,34828],{"class":403},[288,38001,34831],{"class":298},[288,38003,34834],{"class":403},[288,38005,675],{"class":298},[288,38007,34839],{"class":403},[288,38009,34842],{"class":298},[260,38011,38013],{"id":38012},"_22vgg","2.2.VGG",[22171,38015,38017],{"id":38016},"_221原理","2.2.1.原理",[19,38019,38020],{},[200,38021],{"alt":205,"src":38022},"\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",[19,38024,38025],{},[200,38026],{"alt":205,"src":38027},"\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",[19,38029,38030],{},[200,38031],{"alt":205,"src":38032},"\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",[19,38034,38035],{},"参数详细描述：",[19,38037,38038],{},[200,38039],{"alt":205,"src":38040},"\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",[19,38042,38043],{},[200,38044],{"alt":205,"src":38045},"\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",[19,38047,38048],{},[200,38049],{"alt":205,"src":38050},"\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",[19,38052,38053],{},[200,38054],{"alt":205,"src":38055},"\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",[19,38057,38058],{},[200,38059],{"alt":205,"src":38060},"\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",[22171,38062,38064],{"id":38063},"_222代码实现","2.2.2.代码实现",[243,38066,38067],{},[246,38068,38069],{},"网络搭建",[280,38071,38073],{"className":30551,"code":38072,"language":30553,"meta":205,"style":205},"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",[25,38074,38075,38081,38093,38103,38113,38117,38134,38142,38161,38166,38171,38183,38221,38226,38262,38266,38295,38300,38305,38316,38352,38356,38392,38396,38424,38428,38433,38444,38480,38484,38520,38524,38560,38564,38592,38596,38601,38612,38649,38653,38689,38693,38729,38733,38761,38765,38770,38781,38817,38821,38857,38861,38897,38901,38929,38933,38938,38949,38954,38959,38964,38985,38989,39001,39005,39017,39021,39025,39030,39035,39050,39055,39065,39070,39085,39090,39109,39114,39123,39128,39138,39143,39148,39162,39167,39181,39189,39193,39197,39205,39216,39227,39238,39249,39260,39271,39277,39281,39286,39299,39319,39325,39334],{"__ignoreMap":205},[288,38076,38077,38079],{"class":290,"line":291},[288,38078,30565],{"class":294},[288,38080,30568],{"class":298},[288,38082,38083,38085,38088,38090],{"class":290,"line":206},[288,38084,30910],{"class":294},[288,38086,38087],{"class":298}," sympy.core.sympify ",[288,38089,30565],{"class":294},[288,38091,38092],{"class":298}," kernS\n",[288,38094,38095,38097,38099,38101],{"class":290,"line":1352},[288,38096,30910],{"class":294},[288,38098,30913],{"class":298},[288,38100,30565],{"class":294},[288,38102,30918],{"class":298},[288,38104,38105,38107,38109,38111],{"class":290,"line":1367},[288,38106,30910],{"class":294},[288,38108,30930],{"class":298},[288,38110,30565],{"class":294},[288,38112,30935],{"class":298},[288,38114,38115],{"class":290,"line":1373},[288,38116,2572],{"emptyLinePlaceholder":217},[288,38118,38119,38121,38124,38126,38128,38130,38132],{"class":290,"line":1387},[288,38120,14867],{"class":294},[288,38122,38123],{"class":2135}," VGG16",[288,38125,299],{"class":298},[288,38127,30951],{"class":2135},[288,38129,855],{"class":298},[288,38131,30956],{"class":2135},[288,38133,30959],{"class":298},[288,38135,38136,38138,38140],{"class":290,"line":1393},[288,38137,30974],{"class":294},[288,38139,30977],{"class":347},[288,38141,30980],{"class":298},[288,38143,38144,38146,38148,38151,38153,38155,38157,38159],{"class":290,"line":1484},[288,38145,30990],{"class":347},[288,38147,299],{"class":298},[288,38149,38150],{"class":347},"VGG16",[288,38152,12608],{"class":298},[288,38154,30996],{"class":347},[288,38156,30999],{"class":298},[288,38158,31002],{"class":347},[288,38160,2148],{"class":298},[288,38162,38163],{"class":290,"line":1490},[288,38164,38165],{"class":357},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[288,38167,38168],{"class":290,"line":1502},[288,38169,38170],{"class":357},"        # 这里用的是灰度图\n",[288,38172,38173,38175,38178,38180],{"class":290,"line":1784},[288,38174,31018],{"class":347},[288,38176,38177],{"class":298},".block1",[288,38179,344],{"class":294},[288,38181,38182],{"class":298},"nn.Sequential(\n",[288,38184,38185,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218],{"class":290,"line":1789},[288,38186,38187],{"class":298},"            nn.Conv2d(",[288,38189,31029],{"class":5389},[288,38191,344],{"class":294},[288,38193,516],{"class":347},[288,38195,675],{"class":298},[288,38197,31038],{"class":5389},[288,38199,344],{"class":294},[288,38201,502],{"class":347},[288,38203,675],{"class":298},[288,38205,31047],{"class":5389},[288,38207,344],{"class":294},[288,38209,370],{"class":347},[288,38211,675],{"class":298},[288,38213,31056],{"class":5389},[288,38215,344],{"class":294},[288,38217,516],{"class":347},[288,38219,38220],{"class":298},"),\n",[288,38222,38223],{"class":290,"line":1795},[288,38224,38225],{"class":298},"            nn.ReLU(),\n",[288,38227,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260],{"class":290,"line":1800},[288,38229,38187],{"class":298},[288,38231,31029],{"class":5389},[288,38233,344],{"class":294},[288,38235,502],{"class":347},[288,38237,675],{"class":298},[288,38239,31038],{"class":5389},[288,38241,344],{"class":294},[288,38243,502],{"class":347},[288,38245,675],{"class":298},[288,38247,31047],{"class":5389},[288,38249,344],{"class":294},[288,38251,370],{"class":347},[288,38253,675],{"class":298},[288,38255,31056],{"class":5389},[288,38257,344],{"class":294},[288,38259,516],{"class":347},[288,38261,38220],{"class":298},[288,38263,38264],{"class":290,"line":1814},[288,38265,38225],{"class":298},[288,38267,38268,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293],{"class":290,"line":1819},[288,38269,38270],{"class":298},"            nn.MaxPool2d(",[288,38272,31047],{"class":5389},[288,38274,344],{"class":294},[288,38276,376],{"class":347},[288,38278,675],{"class":298},[288,38280,31102],{"class":5389},[288,38282,344],{"class":294},[288,38284,376],{"class":347},[288,38286,675],{"class":298},[288,38288,31056],{"class":5389},[288,38290,344],{"class":294},[288,38292,490],{"class":347},[288,38294,305],{"class":298},[288,38296,38297],{"class":290,"line":1825},[288,38298,38299],{"class":298},"        )\n",[288,38301,38302],{"class":290,"line":1846},[288,38303,38304],{"class":357},"        # 第二层\n",[288,38306,38307,38309,38312,38314],{"class":290,"line":1851},[288,38308,31018],{"class":347},[288,38310,38311],{"class":298},".block2",[288,38313,344],{"class":294},[288,38315,38182],{"class":298},[288,38317,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350],{"class":290,"line":1865},[288,38319,38187],{"class":298},[288,38321,31029],{"class":5389},[288,38323,344],{"class":294},[288,38325,502],{"class":347},[288,38327,675],{"class":298},[288,38329,31038],{"class":5389},[288,38331,344],{"class":294},[288,38333,32243],{"class":347},[288,38335,675],{"class":298},[288,38337,31047],{"class":5389},[288,38339,344],{"class":294},[288,38341,370],{"class":347},[288,38343,675],{"class":298},[288,38345,31056],{"class":5389},[288,38347,344],{"class":294},[288,38349,516],{"class":347},[288,38351,38220],{"class":298},[288,38353,38354],{"class":290,"line":1870},[288,38355,38225],{"class":298},[288,38357,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390],{"class":290,"line":1899},[288,38359,38187],{"class":298},[288,38361,31029],{"class":5389},[288,38363,344],{"class":294},[288,38365,32243],{"class":347},[288,38367,675],{"class":298},[288,38369,31038],{"class":5389},[288,38371,344],{"class":294},[288,38373,32243],{"class":347},[288,38375,675],{"class":298},[288,38377,31047],{"class":5389},[288,38379,344],{"class":294},[288,38381,370],{"class":347},[288,38383,675],{"class":298},[288,38385,31056],{"class":5389},[288,38387,344],{"class":294},[288,38389,516],{"class":347},[288,38391,38220],{"class":298},[288,38393,38394],{"class":290,"line":1904},[288,38395,38225],{"class":298},[288,38397,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422],{"class":290,"line":1921},[288,38399,38270],{"class":298},[288,38401,31047],{"class":5389},[288,38403,344],{"class":294},[288,38405,376],{"class":347},[288,38407,675],{"class":298},[288,38409,31102],{"class":5389},[288,38411,344],{"class":294},[288,38413,376],{"class":347},[288,38415,675],{"class":298},[288,38417,31056],{"class":5389},[288,38419,344],{"class":294},[288,38421,490],{"class":347},[288,38423,305],{"class":298},[288,38425,38426],{"class":290,"line":1926},[288,38427,38299],{"class":298},[288,38429,38430],{"class":290,"line":1931},[288,38431,38432],{"class":357},"        # 第三层\n",[288,38434,38435,38437,38440,38442],{"class":290,"line":1936},[288,38436,31018],{"class":347},[288,38438,38439],{"class":298},".block3",[288,38441,344],{"class":294},[288,38443,38182],{"class":298},[288,38445,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466,38468,38470,38472,38474,38476,38478],{"class":290,"line":1950},[288,38447,38187],{"class":298},[288,38449,31029],{"class":5389},[288,38451,344],{"class":294},[288,38453,32243],{"class":347},[288,38455,675],{"class":298},[288,38457,31038],{"class":5389},[288,38459,344],{"class":294},[288,38461,35043],{"class":347},[288,38463,675],{"class":298},[288,38465,31047],{"class":5389},[288,38467,344],{"class":294},[288,38469,370],{"class":347},[288,38471,675],{"class":298},[288,38473,31056],{"class":5389},[288,38475,344],{"class":294},[288,38477,516],{"class":347},[288,38479,38220],{"class":298},[288,38481,38482],{"class":290,"line":1955},[288,38483,38225],{"class":298},[288,38485,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518],{"class":290,"line":2749},[288,38487,38187],{"class":298},[288,38489,31029],{"class":5389},[288,38491,344],{"class":294},[288,38493,35043],{"class":347},[288,38495,675],{"class":298},[288,38497,31038],{"class":5389},[288,38499,344],{"class":294},[288,38501,35043],{"class":347},[288,38503,675],{"class":298},[288,38505,31047],{"class":5389},[288,38507,344],{"class":294},[288,38509,370],{"class":347},[288,38511,675],{"class":298},[288,38513,31056],{"class":5389},[288,38515,344],{"class":294},[288,38517,516],{"class":347},[288,38519,38220],{"class":298},[288,38521,38522],{"class":290,"line":2763},[288,38523,38225],{"class":298},[288,38525,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558],{"class":290,"line":2771},[288,38527,38187],{"class":298},[288,38529,31029],{"class":5389},[288,38531,344],{"class":294},[288,38533,35043],{"class":347},[288,38535,675],{"class":298},[288,38537,31038],{"class":5389},[288,38539,344],{"class":294},[288,38541,35043],{"class":347},[288,38543,675],{"class":298},[288,38545,31047],{"class":5389},[288,38547,344],{"class":294},[288,38549,370],{"class":347},[288,38551,675],{"class":298},[288,38553,31056],{"class":5389},[288,38555,344],{"class":294},[288,38557,516],{"class":347},[288,38559,38220],{"class":298},[288,38561,38562],{"class":290,"line":2776},[288,38563,38225],{"class":298},[288,38565,38566,38568,38570,38572,38574,38576,38578,38580,38582,38584,38586,38588,38590],{"class":290,"line":2782},[288,38567,38270],{"class":298},[288,38569,31047],{"class":5389},[288,38571,344],{"class":294},[288,38573,376],{"class":347},[288,38575,675],{"class":298},[288,38577,31102],{"class":5389},[288,38579,344],{"class":294},[288,38581,376],{"class":347},[288,38583,675],{"class":298},[288,38585,31056],{"class":5389},[288,38587,344],{"class":294},[288,38589,490],{"class":347},[288,38591,305],{"class":298},[288,38593,38594],{"class":290,"line":2788},[288,38595,38299],{"class":298},[288,38597,38598],{"class":290,"line":2793},[288,38599,38600],{"class":357},"        # 第四层\n",[288,38602,38603,38605,38608,38610],{"class":290,"line":8121},[288,38604,31018],{"class":347},[288,38606,38607],{"class":298},".block4",[288,38609,344],{"class":294},[288,38611,38182],{"class":298},[288,38613,38614,38616,38618,38620,38622,38624,38626,38628,38631,38633,38635,38637,38639,38641,38643,38645,38647],{"class":290,"line":8145},[288,38615,38187],{"class":298},[288,38617,31029],{"class":5389},[288,38619,344],{"class":294},[288,38621,35043],{"class":347},[288,38623,675],{"class":298},[288,38625,31038],{"class":5389},[288,38627,344],{"class":294},[288,38629,38630],{"class":347},"512",[288,38632,675],{"class":298},[288,38634,31047],{"class":5389},[288,38636,344],{"class":294},[288,38638,370],{"class":347},[288,38640,675],{"class":298},[288,38642,31056],{"class":5389},[288,38644,344],{"class":294},[288,38646,516],{"class":347},[288,38648,38220],{"class":298},[288,38650,38651],{"class":290,"line":8150},[288,38652,38225],{"class":298},[288,38654,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687],{"class":290,"line":8156},[288,38656,38187],{"class":298},[288,38658,31029],{"class":5389},[288,38660,344],{"class":294},[288,38662,38630],{"class":347},[288,38664,675],{"class":298},[288,38666,31038],{"class":5389},[288,38668,344],{"class":294},[288,38670,38630],{"class":347},[288,38672,675],{"class":298},[288,38674,31047],{"class":5389},[288,38676,344],{"class":294},[288,38678,370],{"class":347},[288,38680,675],{"class":298},[288,38682,31056],{"class":5389},[288,38684,344],{"class":294},[288,38686,516],{"class":347},[288,38688,38220],{"class":298},[288,38690,38691],{"class":290,"line":8183},[288,38692,38225],{"class":298},[288,38694,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727],{"class":290,"line":8188},[288,38696,38187],{"class":298},[288,38698,31029],{"class":5389},[288,38700,344],{"class":294},[288,38702,38630],{"class":347},[288,38704,675],{"class":298},[288,38706,31038],{"class":5389},[288,38708,344],{"class":294},[288,38710,38630],{"class":347},[288,38712,675],{"class":298},[288,38714,31047],{"class":5389},[288,38716,344],{"class":294},[288,38718,370],{"class":347},[288,38720,675],{"class":298},[288,38722,31056],{"class":5389},[288,38724,344],{"class":294},[288,38726,516],{"class":347},[288,38728,38220],{"class":298},[288,38730,38731],{"class":290,"line":8194},[288,38732,38225],{"class":298},[288,38734,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759],{"class":290,"line":8206},[288,38736,38270],{"class":298},[288,38738,31047],{"class":5389},[288,38740,344],{"class":294},[288,38742,376],{"class":347},[288,38744,675],{"class":298},[288,38746,31102],{"class":5389},[288,38748,344],{"class":294},[288,38750,376],{"class":347},[288,38752,675],{"class":298},[288,38754,31056],{"class":5389},[288,38756,344],{"class":294},[288,38758,490],{"class":347},[288,38760,305],{"class":298},[288,38762,38763],{"class":290,"line":8218},[288,38764,38299],{"class":298},[288,38766,38767],{"class":290,"line":8230},[288,38768,38769],{"class":357},"        # 第五层\n",[288,38771,38772,38774,38777,38779],{"class":290,"line":9889},[288,38773,31018],{"class":347},[288,38775,38776],{"class":298},".block5",[288,38778,344],{"class":294},[288,38780,38182],{"class":298},[288,38782,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805,38807,38809,38811,38813,38815],{"class":290,"line":9914},[288,38784,38187],{"class":298},[288,38786,31029],{"class":5389},[288,38788,344],{"class":294},[288,38790,38630],{"class":347},[288,38792,675],{"class":298},[288,38794,31038],{"class":5389},[288,38796,344],{"class":294},[288,38798,38630],{"class":347},[288,38800,675],{"class":298},[288,38802,31047],{"class":5389},[288,38804,344],{"class":294},[288,38806,370],{"class":347},[288,38808,675],{"class":298},[288,38810,31056],{"class":5389},[288,38812,344],{"class":294},[288,38814,516],{"class":347},[288,38816,38220],{"class":298},[288,38818,38819],{"class":290,"line":9937},[288,38820,38225],{"class":298},[288,38822,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851,38853,38855],{"class":290,"line":9961},[288,38824,38187],{"class":298},[288,38826,31029],{"class":5389},[288,38828,344],{"class":294},[288,38830,38630],{"class":347},[288,38832,675],{"class":298},[288,38834,31038],{"class":5389},[288,38836,344],{"class":294},[288,38838,38630],{"class":347},[288,38840,675],{"class":298},[288,38842,31047],{"class":5389},[288,38844,344],{"class":294},[288,38846,370],{"class":347},[288,38848,675],{"class":298},[288,38850,31056],{"class":5389},[288,38852,344],{"class":294},[288,38854,516],{"class":347},[288,38856,38220],{"class":298},[288,38858,38859],{"class":290,"line":9966},[288,38860,38225],{"class":298},[288,38862,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881,38883,38885,38887,38889,38891,38893,38895],{"class":290,"line":9971},[288,38864,38187],{"class":298},[288,38866,31029],{"class":5389},[288,38868,344],{"class":294},[288,38870,38630],{"class":347},[288,38872,675],{"class":298},[288,38874,31038],{"class":5389},[288,38876,344],{"class":294},[288,38878,38630],{"class":347},[288,38880,675],{"class":298},[288,38882,31047],{"class":5389},[288,38884,344],{"class":294},[288,38886,370],{"class":347},[288,38888,675],{"class":298},[288,38890,31056],{"class":5389},[288,38892,344],{"class":294},[288,38894,516],{"class":347},[288,38896,38220],{"class":298},[288,38898,38899],{"class":290,"line":9976},[288,38900,38225],{"class":298},[288,38902,38903,38905,38907,38909,38911,38913,38915,38917,38919,38921,38923,38925,38927],{"class":290,"line":9985},[288,38904,38270],{"class":298},[288,38906,31047],{"class":5389},[288,38908,344],{"class":294},[288,38910,376],{"class":347},[288,38912,675],{"class":298},[288,38914,31102],{"class":5389},[288,38916,344],{"class":294},[288,38918,376],{"class":347},[288,38920,675],{"class":298},[288,38922,31056],{"class":5389},[288,38924,344],{"class":294},[288,38926,490],{"class":347},[288,38928,305],{"class":298},[288,38930,38931],{"class":290,"line":9990},[288,38932,38299],{"class":298},[288,38934,38935],{"class":290,"line":9996},[288,38936,38937],{"class":357},"        # 全连接层\n",[288,38939,38940,38942,38945,38947],{"class":290,"line":10017},[288,38941,31018],{"class":347},[288,38943,38944],{"class":298},".block6",[288,38946,344],{"class":294},[288,38948,38182],{"class":298},[288,38950,38951],{"class":290,"line":10023},[288,38952,38953],{"class":357},"            # 平展操作\n",[288,38955,38956],{"class":290,"line":10037},[288,38957,38958],{"class":357},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[288,38960,38961],{"class":290,"line":10043},[288,38962,38963],{"class":298},"            nn.Flatten(),\n",[288,38965,38966,38969,38971,38973,38975,38977,38979,38981,38983],{"class":290,"line":10070},[288,38967,38968],{"class":298},"            nn.Linear(",[288,38970,666],{"class":347},[288,38972,752],{"class":294},[288,38974,666],{"class":347},[288,38976,752],{"class":294},[288,38978,38630],{"class":347},[288,38980,675],{"class":298},[288,38982,35043],{"class":347},[288,38984,38220],{"class":298},[288,38986,38987],{"class":290,"line":10079},[288,38988,38225],{"class":298},[288,38990,38991,38993,38995,38997,38999],{"class":290,"line":10085},[288,38992,38968],{"class":298},[288,38994,35043],{"class":347},[288,38996,675],{"class":298},[288,38998,32243],{"class":347},[288,39000,38220],{"class":298},[288,39002,39003],{"class":290,"line":10093},[288,39004,38225],{"class":298},[288,39006,39007,39009,39011,39013,39015],{"class":290,"line":10098},[288,39008,38968],{"class":298},[288,39010,32243],{"class":347},[288,39012,675],{"class":298},[288,39014,743],{"class":347},[288,39016,305],{"class":298},[288,39018,39019],{"class":290,"line":16777},[288,39020,38299],{"class":298},[288,39022,39023],{"class":290,"line":16783},[288,39024,2572],{"emptyLinePlaceholder":217},[288,39026,39027],{"class":290,"line":16806},[288,39028,39029],{"class":357},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[288,39031,39032],{"class":290,"line":16812},[288,39033,39034],{"class":357},"        # 循环遍历模型\n",[288,39036,39037,39039,39042,39044,39047],{"class":290,"line":16835},[288,39038,3575],{"class":294},[288,39040,39041],{"class":298}," m ",[288,39043,26216],{"class":294},[288,39045,39046],{"class":347}," self",[288,39048,39049],{"class":298},".modules():\n",[288,39051,39052],{"class":290,"line":16849},[288,39053,39054],{"class":357},"            # print(m)\n",[288,39056,39057,39059,39062],{"class":290,"line":16869},[288,39058,4814],{"class":294},[288,39060,39061],{"class":347}," isinstance",[288,39063,39064],{"class":298},"(m,nn.Conv2d):\n",[288,39066,39067],{"class":290,"line":16875},[288,39068,39069],{"class":357},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[288,39071,39072,39075,39078,39080,39083],{"class":290,"line":16886},[288,39073,39074],{"class":298},"                nn.init.kaiming_normal_(m.weight,",[288,39076,39077],{"class":5389},"nonlinearity",[288,39079,344],{"class":294},[288,39081,39082],{"class":403},"'relu'",[288,39084,305],{"class":298},[288,39086,39087],{"class":290,"line":16909},[288,39088,39089],{"class":357},"                # 判断b参数是否存在\n",[288,39091,39092,39095,39098,39101,39104,39107],{"class":290,"line":16931},[288,39093,39094],{"class":294},"                if",[288,39096,39097],{"class":298}," m.bias ",[288,39099,39100],{"class":294},"is",[288,39102,39103],{"class":294}," not",[288,39105,39106],{"class":347}," None",[288,39108,3911],{"class":298},[288,39110,39111],{"class":290,"line":16936},[288,39112,39113],{"class":357},"                    # 如果参数不存在的化初始化b=0\n",[288,39115,39116,39119,39121],{"class":290,"line":16942},[288,39117,39118],{"class":298},"                    nn.init.constant_(m.bias,",[288,39120,490],{"class":347},[288,39122,305],{"class":298},[288,39124,39125],{"class":290,"line":16956},[288,39126,39127],{"class":357},"            # 全连接层初始化\n",[288,39129,39130,39133,39135],{"class":290,"line":16969},[288,39131,39132],{"class":294},"            elif",[288,39134,39061],{"class":347},[288,39136,39137],{"class":298},"(m,nn.Linear):\n",[288,39139,39140],{"class":290,"line":16974},[288,39141,39142],{"class":357},"                # 这个初始化方法是利用的是正太分布的方式\n",[288,39144,39145],{"class":290,"line":16988},[288,39146,39147],{"class":357},"                # 均值为0，方差为0.01\n",[288,39149,39150,39153,39155,39157,39160],{"class":290,"line":16993},[288,39151,39152],{"class":298},"                nn.init.normal_(m.weight,",[288,39154,490],{"class":347},[288,39156,675],{"class":298},[288,39158,39159],{"class":347},"0.01",[288,39161,305],{"class":298},[288,39163,39164],{"class":290,"line":16999},[288,39165,39166],{"class":357},"                # 初始化b参数\n",[288,39168,39169,39171,39173,39175,39177,39179],{"class":290,"line":17004},[288,39170,39094],{"class":294},[288,39172,39097],{"class":298},[288,39174,39100],{"class":294},[288,39176,39103],{"class":294},[288,39178,39106],{"class":347},[288,39180,3911],{"class":298},[288,39182,39183,39185,39187],{"class":290,"line":17018},[288,39184,39118],{"class":298},[288,39186,490],{"class":347},[288,39188,305],{"class":298},[288,39190,39191],{"class":290,"line":17023},[288,39192,2572],{"emptyLinePlaceholder":217},[288,39194,39195],{"class":290,"line":17028},[288,39196,35338],{"class":357},[288,39198,39199,39201,39203],{"class":290,"line":17042},[288,39200,30974],{"class":294},[288,39202,31266],{"class":2135},[288,39204,31269],{"class":298},[288,39206,39207,39209,39211,39213],{"class":290,"line":17054},[288,39208,31274],{"class":298},[288,39210,344],{"class":294},[288,39212,30996],{"class":347},[288,39214,39215],{"class":298},".block1(x)\n",[288,39217,39218,39220,39222,39224],{"class":290,"line":17059},[288,39219,31274],{"class":298},[288,39221,344],{"class":294},[288,39223,30996],{"class":347},[288,39225,39226],{"class":298},".block2(x)\n",[288,39228,39229,39231,39233,39235],{"class":290,"line":17072},[288,39230,31274],{"class":298},[288,39232,344],{"class":294},[288,39234,30996],{"class":347},[288,39236,39237],{"class":298},".block3(x)\n",[288,39239,39240,39242,39244,39246],{"class":290,"line":17077},[288,39241,31274],{"class":298},[288,39243,344],{"class":294},[288,39245,30996],{"class":347},[288,39247,39248],{"class":298},".block4(x)\n",[288,39250,39251,39253,39255,39257],{"class":290,"line":17082},[288,39252,31274],{"class":298},[288,39254,344],{"class":294},[288,39256,30996],{"class":347},[288,39258,39259],{"class":298},".block5(x)\n",[288,39261,39262,39264,39266,39268],{"class":290,"line":17087},[288,39263,31274],{"class":298},[288,39265,344],{"class":294},[288,39267,30996],{"class":347},[288,39269,39270],{"class":298},".block6(x)\n",[288,39272,39273,39275],{"class":290,"line":17100},[288,39274,14925],{"class":294},[288,39276,31382],{"class":298},[288,39278,39279],{"class":290,"line":17105},[288,39280,2572],{"emptyLinePlaceholder":217},[288,39282,39283],{"class":290,"line":32806},[288,39284,39285],{"class":357},"# 验证模型\n",[288,39287,39288,39290,39292,39294,39297],{"class":290,"line":32812},[288,39289,1703],{"class":294},[288,39291,31393],{"class":347},[288,39293,3121],{"class":294},[288,39295,39296],{"class":403},"'__main__'",[288,39298,3911],{"class":298},[288,39300,39301,39303,39305,39307,39309,39311,39313,39315,39317],{"class":290,"line":32818},[288,39302,31410],{"class":298},[288,39304,344],{"class":294},[288,39306,30624],{"class":298},[288,39308,31417],{"class":403},[288,39310,1876],{"class":294},[288,39312,31422],{"class":298},[288,39314,1873],{"class":294},[288,39316,30649],{"class":403},[288,39318,305],{"class":298},[288,39320,39321,39323],{"class":290,"line":32824},[288,39322,31472],{"class":347},[288,39324,30658],{"class":298},[288,39326,39327,39329,39331],{"class":290,"line":32830},[288,39328,31462],{"class":298},[288,39330,344],{"class":294},[288,39332,39333],{"class":298},"VGG16().to(device)\n",[288,39335,39336,39338,39340,39342,39344,39346,39348,39350],{"class":290,"line":32841},[288,39337,31472],{"class":347},[288,39339,31475],{"class":298},[288,39341,516],{"class":347},[288,39343,675],{"class":298},[288,39345,31674],{"class":347},[288,39347,675],{"class":298},[288,39349,31674],{"class":347},[288,39351,31488],{"class":298},[243,39353,39354],{"start":206},[246,39355,39356],{},"训练代码",[19,39358,39359],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39361,39362],{},"解决方式:",[19,39364,39365],{},"①权重初始化",[280,39367,39369],{"className":30551,"code":39368,"language":30553,"meta":205,"style":205},"# 权重初始化,保证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",[25,39370,39371,39376,39381,39393,39398,39406,39411,39424,39429,39443,39448,39457,39462,39471,39476,39481,39494,39499,39513],{"__ignoreMap":205},[288,39372,39373],{"class":290,"line":291},[288,39374,39375],{"class":357},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[288,39377,39378],{"class":290,"line":206},[288,39379,39380],{"class":357},"# 循环遍历模型\n",[288,39382,39383,39385,39387,39389,39391],{"class":290,"line":1352},[288,39384,3197],{"class":294},[288,39386,39041],{"class":298},[288,39388,26216],{"class":294},[288,39390,39046],{"class":347},[288,39392,39049],{"class":298},[288,39394,39395],{"class":290,"line":1367},[288,39396,39397],{"class":357},"    # print(m)\n",[288,39399,39400,39402,39404],{"class":290,"line":1373},[288,39401,3273],{"class":294},[288,39403,39061],{"class":347},[288,39405,39064],{"class":298},[288,39407,39408],{"class":290,"line":1387},[288,39409,39410],{"class":357},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[288,39412,39413,39416,39418,39420,39422],{"class":290,"line":1393},[288,39414,39415],{"class":298},"        nn.init.kaiming_normal_(m.weight,",[288,39417,39077],{"class":5389},[288,39419,344],{"class":294},[288,39421,39082],{"class":403},[288,39423,305],{"class":298},[288,39425,39426],{"class":290,"line":1484},[288,39427,39428],{"class":357},"        # 判断b参数是否存在\n",[288,39430,39431,39433,39435,39437,39439,39441],{"class":290,"line":1490},[288,39432,2669],{"class":294},[288,39434,39097],{"class":298},[288,39436,39100],{"class":294},[288,39438,39103],{"class":294},[288,39440,39106],{"class":347},[288,39442,3911],{"class":298},[288,39444,39445],{"class":290,"line":1502},[288,39446,39447],{"class":357},"            # 如果参数不存在的化初始化b=0\n",[288,39449,39450,39453,39455],{"class":290,"line":1784},[288,39451,39452],{"class":298},"            nn.init.constant_(m.bias,",[288,39454,490],{"class":347},[288,39456,305],{"class":298},[288,39458,39459],{"class":290,"line":1789},[288,39460,39461],{"class":357},"    # 全连接层初始化\n",[288,39463,39464,39467,39469],{"class":290,"line":1795},[288,39465,39466],{"class":294},"    elif",[288,39468,39061],{"class":347},[288,39470,39137],{"class":298},[288,39472,39473],{"class":290,"line":1800},[288,39474,39475],{"class":357},"        # 这个初始化方法是利用的是正太分布的方式\n",[288,39477,39478],{"class":290,"line":1814},[288,39479,39480],{"class":357},"        # 均值为0，方差为0.01\n",[288,39482,39483,39486,39488,39490,39492],{"class":290,"line":1819},[288,39484,39485],{"class":298},"        nn.init.normal_(m.weight,",[288,39487,490],{"class":347},[288,39489,675],{"class":298},[288,39491,39159],{"class":347},[288,39493,305],{"class":298},[288,39495,39496],{"class":290,"line":1825},[288,39497,39498],{"class":357},"        # 初始化b参数\n",[288,39500,39501,39503,39505,39507,39509,39511],{"class":290,"line":1846},[288,39502,2669],{"class":294},[288,39504,39097],{"class":298},[288,39506,39100],{"class":294},[288,39508,39103],{"class":294},[288,39510,39106],{"class":347},[288,39512,3911],{"class":298},[288,39514,39515,39517,39519],{"class":290,"line":1851},[288,39516,39452],{"class":298},[288,39518,490],{"class":347},[288,39520,305],{"class":298},[19,39522,39523],{},"②尽可能地增加批次",[19,39525,39526],{},"训练完整代码：",[280,39528,39529],{"className":30551,"code":38072,"language":30553,"meta":205,"style":205},[25,39530,39531,39537,39547,39557,39567,39571,39587,39595,39613,39617,39621,39631,39667,39671,39707,39711,39739,39743,39747,39757,39793,39797,39833,39837,39865,39869,39873,39883,39919,39923,39959,39963,39999,40003,40031,40035,40039,40049,40085,40089,40125,40129,40165,40169,40197,40201,40205,40215,40251,40255,40291,40295,40331,40335,40363,40367,40371,40381,40385,40389,40393,40413,40417,40429,40433,40445,40449,40453,40457,40461,40473,40477,40485,40489,40501,40505,40519,40523,40531,40535,40543,40547,40551,40563,40567,40581,40589,40593,40597,40605,40615,40625,40635,40645,40655,40665,40671,40675,40679,40691,40711,40717,40725],{"__ignoreMap":205},[288,39532,39533,39535],{"class":290,"line":291},[288,39534,30565],{"class":294},[288,39536,30568],{"class":298},[288,39538,39539,39541,39543,39545],{"class":290,"line":206},[288,39540,30910],{"class":294},[288,39542,38087],{"class":298},[288,39544,30565],{"class":294},[288,39546,38092],{"class":298},[288,39548,39549,39551,39553,39555],{"class":290,"line":1352},[288,39550,30910],{"class":294},[288,39552,30913],{"class":298},[288,39554,30565],{"class":294},[288,39556,30918],{"class":298},[288,39558,39559,39561,39563,39565],{"class":290,"line":1367},[288,39560,30910],{"class":294},[288,39562,30930],{"class":298},[288,39564,30565],{"class":294},[288,39566,30935],{"class":298},[288,39568,39569],{"class":290,"line":1373},[288,39570,2572],{"emptyLinePlaceholder":217},[288,39572,39573,39575,39577,39579,39581,39583,39585],{"class":290,"line":1387},[288,39574,14867],{"class":294},[288,39576,38123],{"class":2135},[288,39578,299],{"class":298},[288,39580,30951],{"class":2135},[288,39582,855],{"class":298},[288,39584,30956],{"class":2135},[288,39586,30959],{"class":298},[288,39588,39589,39591,39593],{"class":290,"line":1393},[288,39590,30974],{"class":294},[288,39592,30977],{"class":347},[288,39594,30980],{"class":298},[288,39596,39597,39599,39601,39603,39605,39607,39609,39611],{"class":290,"line":1484},[288,39598,30990],{"class":347},[288,39600,299],{"class":298},[288,39602,38150],{"class":347},[288,39604,12608],{"class":298},[288,39606,30996],{"class":347},[288,39608,30999],{"class":298},[288,39610,31002],{"class":347},[288,39612,2148],{"class":298},[288,39614,39615],{"class":290,"line":1490},[288,39616,38165],{"class":357},[288,39618,39619],{"class":290,"line":1502},[288,39620,38170],{"class":357},[288,39622,39623,39625,39627,39629],{"class":290,"line":1784},[288,39624,31018],{"class":347},[288,39626,38177],{"class":298},[288,39628,344],{"class":294},[288,39630,38182],{"class":298},[288,39632,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665],{"class":290,"line":1789},[288,39634,38187],{"class":298},[288,39636,31029],{"class":5389},[288,39638,344],{"class":294},[288,39640,516],{"class":347},[288,39642,675],{"class":298},[288,39644,31038],{"class":5389},[288,39646,344],{"class":294},[288,39648,502],{"class":347},[288,39650,675],{"class":298},[288,39652,31047],{"class":5389},[288,39654,344],{"class":294},[288,39656,370],{"class":347},[288,39658,675],{"class":298},[288,39660,31056],{"class":5389},[288,39662,344],{"class":294},[288,39664,516],{"class":347},[288,39666,38220],{"class":298},[288,39668,39669],{"class":290,"line":1795},[288,39670,38225],{"class":298},[288,39672,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705],{"class":290,"line":1800},[288,39674,38187],{"class":298},[288,39676,31029],{"class":5389},[288,39678,344],{"class":294},[288,39680,502],{"class":347},[288,39682,675],{"class":298},[288,39684,31038],{"class":5389},[288,39686,344],{"class":294},[288,39688,502],{"class":347},[288,39690,675],{"class":298},[288,39692,31047],{"class":5389},[288,39694,344],{"class":294},[288,39696,370],{"class":347},[288,39698,675],{"class":298},[288,39700,31056],{"class":5389},[288,39702,344],{"class":294},[288,39704,516],{"class":347},[288,39706,38220],{"class":298},[288,39708,39709],{"class":290,"line":1814},[288,39710,38225],{"class":298},[288,39712,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737],{"class":290,"line":1819},[288,39714,38270],{"class":298},[288,39716,31047],{"class":5389},[288,39718,344],{"class":294},[288,39720,376],{"class":347},[288,39722,675],{"class":298},[288,39724,31102],{"class":5389},[288,39726,344],{"class":294},[288,39728,376],{"class":347},[288,39730,675],{"class":298},[288,39732,31056],{"class":5389},[288,39734,344],{"class":294},[288,39736,490],{"class":347},[288,39738,305],{"class":298},[288,39740,39741],{"class":290,"line":1825},[288,39742,38299],{"class":298},[288,39744,39745],{"class":290,"line":1846},[288,39746,38304],{"class":357},[288,39748,39749,39751,39753,39755],{"class":290,"line":1851},[288,39750,31018],{"class":347},[288,39752,38311],{"class":298},[288,39754,344],{"class":294},[288,39756,38182],{"class":298},[288,39758,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791],{"class":290,"line":1865},[288,39760,38187],{"class":298},[288,39762,31029],{"class":5389},[288,39764,344],{"class":294},[288,39766,502],{"class":347},[288,39768,675],{"class":298},[288,39770,31038],{"class":5389},[288,39772,344],{"class":294},[288,39774,32243],{"class":347},[288,39776,675],{"class":298},[288,39778,31047],{"class":5389},[288,39780,344],{"class":294},[288,39782,370],{"class":347},[288,39784,675],{"class":298},[288,39786,31056],{"class":5389},[288,39788,344],{"class":294},[288,39790,516],{"class":347},[288,39792,38220],{"class":298},[288,39794,39795],{"class":290,"line":1870},[288,39796,38225],{"class":298},[288,39798,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831],{"class":290,"line":1899},[288,39800,38187],{"class":298},[288,39802,31029],{"class":5389},[288,39804,344],{"class":294},[288,39806,32243],{"class":347},[288,39808,675],{"class":298},[288,39810,31038],{"class":5389},[288,39812,344],{"class":294},[288,39814,32243],{"class":347},[288,39816,675],{"class":298},[288,39818,31047],{"class":5389},[288,39820,344],{"class":294},[288,39822,370],{"class":347},[288,39824,675],{"class":298},[288,39826,31056],{"class":5389},[288,39828,344],{"class":294},[288,39830,516],{"class":347},[288,39832,38220],{"class":298},[288,39834,39835],{"class":290,"line":1904},[288,39836,38225],{"class":298},[288,39838,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863],{"class":290,"line":1921},[288,39840,38270],{"class":298},[288,39842,31047],{"class":5389},[288,39844,344],{"class":294},[288,39846,376],{"class":347},[288,39848,675],{"class":298},[288,39850,31102],{"class":5389},[288,39852,344],{"class":294},[288,39854,376],{"class":347},[288,39856,675],{"class":298},[288,39858,31056],{"class":5389},[288,39860,344],{"class":294},[288,39862,490],{"class":347},[288,39864,305],{"class":298},[288,39866,39867],{"class":290,"line":1926},[288,39868,38299],{"class":298},[288,39870,39871],{"class":290,"line":1931},[288,39872,38432],{"class":357},[288,39874,39875,39877,39879,39881],{"class":290,"line":1936},[288,39876,31018],{"class":347},[288,39878,38439],{"class":298},[288,39880,344],{"class":294},[288,39882,38182],{"class":298},[288,39884,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917],{"class":290,"line":1950},[288,39886,38187],{"class":298},[288,39888,31029],{"class":5389},[288,39890,344],{"class":294},[288,39892,32243],{"class":347},[288,39894,675],{"class":298},[288,39896,31038],{"class":5389},[288,39898,344],{"class":294},[288,39900,35043],{"class":347},[288,39902,675],{"class":298},[288,39904,31047],{"class":5389},[288,39906,344],{"class":294},[288,39908,370],{"class":347},[288,39910,675],{"class":298},[288,39912,31056],{"class":5389},[288,39914,344],{"class":294},[288,39916,516],{"class":347},[288,39918,38220],{"class":298},[288,39920,39921],{"class":290,"line":1955},[288,39922,38225],{"class":298},[288,39924,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957],{"class":290,"line":2749},[288,39926,38187],{"class":298},[288,39928,31029],{"class":5389},[288,39930,344],{"class":294},[288,39932,35043],{"class":347},[288,39934,675],{"class":298},[288,39936,31038],{"class":5389},[288,39938,344],{"class":294},[288,39940,35043],{"class":347},[288,39942,675],{"class":298},[288,39944,31047],{"class":5389},[288,39946,344],{"class":294},[288,39948,370],{"class":347},[288,39950,675],{"class":298},[288,39952,31056],{"class":5389},[288,39954,344],{"class":294},[288,39956,516],{"class":347},[288,39958,38220],{"class":298},[288,39960,39961],{"class":290,"line":2763},[288,39962,38225],{"class":298},[288,39964,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997],{"class":290,"line":2771},[288,39966,38187],{"class":298},[288,39968,31029],{"class":5389},[288,39970,344],{"class":294},[288,39972,35043],{"class":347},[288,39974,675],{"class":298},[288,39976,31038],{"class":5389},[288,39978,344],{"class":294},[288,39980,35043],{"class":347},[288,39982,675],{"class":298},[288,39984,31047],{"class":5389},[288,39986,344],{"class":294},[288,39988,370],{"class":347},[288,39990,675],{"class":298},[288,39992,31056],{"class":5389},[288,39994,344],{"class":294},[288,39996,516],{"class":347},[288,39998,38220],{"class":298},[288,40000,40001],{"class":290,"line":2776},[288,40002,38225],{"class":298},[288,40004,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029],{"class":290,"line":2782},[288,40006,38270],{"class":298},[288,40008,31047],{"class":5389},[288,40010,344],{"class":294},[288,40012,376],{"class":347},[288,40014,675],{"class":298},[288,40016,31102],{"class":5389},[288,40018,344],{"class":294},[288,40020,376],{"class":347},[288,40022,675],{"class":298},[288,40024,31056],{"class":5389},[288,40026,344],{"class":294},[288,40028,490],{"class":347},[288,40030,305],{"class":298},[288,40032,40033],{"class":290,"line":2788},[288,40034,38299],{"class":298},[288,40036,40037],{"class":290,"line":2793},[288,40038,38600],{"class":357},[288,40040,40041,40043,40045,40047],{"class":290,"line":8121},[288,40042,31018],{"class":347},[288,40044,38607],{"class":298},[288,40046,344],{"class":294},[288,40048,38182],{"class":298},[288,40050,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083],{"class":290,"line":8145},[288,40052,38187],{"class":298},[288,40054,31029],{"class":5389},[288,40056,344],{"class":294},[288,40058,35043],{"class":347},[288,40060,675],{"class":298},[288,40062,31038],{"class":5389},[288,40064,344],{"class":294},[288,40066,38630],{"class":347},[288,40068,675],{"class":298},[288,40070,31047],{"class":5389},[288,40072,344],{"class":294},[288,40074,370],{"class":347},[288,40076,675],{"class":298},[288,40078,31056],{"class":5389},[288,40080,344],{"class":294},[288,40082,516],{"class":347},[288,40084,38220],{"class":298},[288,40086,40087],{"class":290,"line":8150},[288,40088,38225],{"class":298},[288,40090,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123],{"class":290,"line":8156},[288,40092,38187],{"class":298},[288,40094,31029],{"class":5389},[288,40096,344],{"class":294},[288,40098,38630],{"class":347},[288,40100,675],{"class":298},[288,40102,31038],{"class":5389},[288,40104,344],{"class":294},[288,40106,38630],{"class":347},[288,40108,675],{"class":298},[288,40110,31047],{"class":5389},[288,40112,344],{"class":294},[288,40114,370],{"class":347},[288,40116,675],{"class":298},[288,40118,31056],{"class":5389},[288,40120,344],{"class":294},[288,40122,516],{"class":347},[288,40124,38220],{"class":298},[288,40126,40127],{"class":290,"line":8183},[288,40128,38225],{"class":298},[288,40130,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163],{"class":290,"line":8188},[288,40132,38187],{"class":298},[288,40134,31029],{"class":5389},[288,40136,344],{"class":294},[288,40138,38630],{"class":347},[288,40140,675],{"class":298},[288,40142,31038],{"class":5389},[288,40144,344],{"class":294},[288,40146,38630],{"class":347},[288,40148,675],{"class":298},[288,40150,31047],{"class":5389},[288,40152,344],{"class":294},[288,40154,370],{"class":347},[288,40156,675],{"class":298},[288,40158,31056],{"class":5389},[288,40160,344],{"class":294},[288,40162,516],{"class":347},[288,40164,38220],{"class":298},[288,40166,40167],{"class":290,"line":8194},[288,40168,38225],{"class":298},[288,40170,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195],{"class":290,"line":8206},[288,40172,38270],{"class":298},[288,40174,31047],{"class":5389},[288,40176,344],{"class":294},[288,40178,376],{"class":347},[288,40180,675],{"class":298},[288,40182,31102],{"class":5389},[288,40184,344],{"class":294},[288,40186,376],{"class":347},[288,40188,675],{"class":298},[288,40190,31056],{"class":5389},[288,40192,344],{"class":294},[288,40194,490],{"class":347},[288,40196,305],{"class":298},[288,40198,40199],{"class":290,"line":8218},[288,40200,38299],{"class":298},[288,40202,40203],{"class":290,"line":8230},[288,40204,38769],{"class":357},[288,40206,40207,40209,40211,40213],{"class":290,"line":9889},[288,40208,31018],{"class":347},[288,40210,38776],{"class":298},[288,40212,344],{"class":294},[288,40214,38182],{"class":298},[288,40216,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249],{"class":290,"line":9914},[288,40218,38187],{"class":298},[288,40220,31029],{"class":5389},[288,40222,344],{"class":294},[288,40224,38630],{"class":347},[288,40226,675],{"class":298},[288,40228,31038],{"class":5389},[288,40230,344],{"class":294},[288,40232,38630],{"class":347},[288,40234,675],{"class":298},[288,40236,31047],{"class":5389},[288,40238,344],{"class":294},[288,40240,370],{"class":347},[288,40242,675],{"class":298},[288,40244,31056],{"class":5389},[288,40246,344],{"class":294},[288,40248,516],{"class":347},[288,40250,38220],{"class":298},[288,40252,40253],{"class":290,"line":9937},[288,40254,38225],{"class":298},[288,40256,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289],{"class":290,"line":9961},[288,40258,38187],{"class":298},[288,40260,31029],{"class":5389},[288,40262,344],{"class":294},[288,40264,38630],{"class":347},[288,40266,675],{"class":298},[288,40268,31038],{"class":5389},[288,40270,344],{"class":294},[288,40272,38630],{"class":347},[288,40274,675],{"class":298},[288,40276,31047],{"class":5389},[288,40278,344],{"class":294},[288,40280,370],{"class":347},[288,40282,675],{"class":298},[288,40284,31056],{"class":5389},[288,40286,344],{"class":294},[288,40288,516],{"class":347},[288,40290,38220],{"class":298},[288,40292,40293],{"class":290,"line":9966},[288,40294,38225],{"class":298},[288,40296,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329],{"class":290,"line":9971},[288,40298,38187],{"class":298},[288,40300,31029],{"class":5389},[288,40302,344],{"class":294},[288,40304,38630],{"class":347},[288,40306,675],{"class":298},[288,40308,31038],{"class":5389},[288,40310,344],{"class":294},[288,40312,38630],{"class":347},[288,40314,675],{"class":298},[288,40316,31047],{"class":5389},[288,40318,344],{"class":294},[288,40320,370],{"class":347},[288,40322,675],{"class":298},[288,40324,31056],{"class":5389},[288,40326,344],{"class":294},[288,40328,516],{"class":347},[288,40330,38220],{"class":298},[288,40332,40333],{"class":290,"line":9976},[288,40334,38225],{"class":298},[288,40336,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361],{"class":290,"line":9985},[288,40338,38270],{"class":298},[288,40340,31047],{"class":5389},[288,40342,344],{"class":294},[288,40344,376],{"class":347},[288,40346,675],{"class":298},[288,40348,31102],{"class":5389},[288,40350,344],{"class":294},[288,40352,376],{"class":347},[288,40354,675],{"class":298},[288,40356,31056],{"class":5389},[288,40358,344],{"class":294},[288,40360,490],{"class":347},[288,40362,305],{"class":298},[288,40364,40365],{"class":290,"line":9990},[288,40366,38299],{"class":298},[288,40368,40369],{"class":290,"line":9996},[288,40370,38937],{"class":357},[288,40372,40373,40375,40377,40379],{"class":290,"line":10017},[288,40374,31018],{"class":347},[288,40376,38944],{"class":298},[288,40378,344],{"class":294},[288,40380,38182],{"class":298},[288,40382,40383],{"class":290,"line":10023},[288,40384,38953],{"class":357},[288,40386,40387],{"class":290,"line":10037},[288,40388,38958],{"class":357},[288,40390,40391],{"class":290,"line":10043},[288,40392,38963],{"class":298},[288,40394,40395,40397,40399,40401,40403,40405,40407,40409,40411],{"class":290,"line":10070},[288,40396,38968],{"class":298},[288,40398,666],{"class":347},[288,40400,752],{"class":294},[288,40402,666],{"class":347},[288,40404,752],{"class":294},[288,40406,38630],{"class":347},[288,40408,675],{"class":298},[288,40410,35043],{"class":347},[288,40412,38220],{"class":298},[288,40414,40415],{"class":290,"line":10079},[288,40416,38225],{"class":298},[288,40418,40419,40421,40423,40425,40427],{"class":290,"line":10085},[288,40420,38968],{"class":298},[288,40422,35043],{"class":347},[288,40424,675],{"class":298},[288,40426,32243],{"class":347},[288,40428,38220],{"class":298},[288,40430,40431],{"class":290,"line":10093},[288,40432,38225],{"class":298},[288,40434,40435,40437,40439,40441,40443],{"class":290,"line":10098},[288,40436,38968],{"class":298},[288,40438,32243],{"class":347},[288,40440,675],{"class":298},[288,40442,743],{"class":347},[288,40444,305],{"class":298},[288,40446,40447],{"class":290,"line":16777},[288,40448,38299],{"class":298},[288,40450,40451],{"class":290,"line":16783},[288,40452,2572],{"emptyLinePlaceholder":217},[288,40454,40455],{"class":290,"line":16806},[288,40456,39029],{"class":357},[288,40458,40459],{"class":290,"line":16812},[288,40460,39034],{"class":357},[288,40462,40463,40465,40467,40469,40471],{"class":290,"line":16835},[288,40464,3575],{"class":294},[288,40466,39041],{"class":298},[288,40468,26216],{"class":294},[288,40470,39046],{"class":347},[288,40472,39049],{"class":298},[288,40474,40475],{"class":290,"line":16849},[288,40476,39054],{"class":357},[288,40478,40479,40481,40483],{"class":290,"line":16869},[288,40480,4814],{"class":294},[288,40482,39061],{"class":347},[288,40484,39064],{"class":298},[288,40486,40487],{"class":290,"line":16875},[288,40488,39069],{"class":357},[288,40490,40491,40493,40495,40497,40499],{"class":290,"line":16886},[288,40492,39074],{"class":298},[288,40494,39077],{"class":5389},[288,40496,344],{"class":294},[288,40498,39082],{"class":403},[288,40500,305],{"class":298},[288,40502,40503],{"class":290,"line":16909},[288,40504,39089],{"class":357},[288,40506,40507,40509,40511,40513,40515,40517],{"class":290,"line":16931},[288,40508,39094],{"class":294},[288,40510,39097],{"class":298},[288,40512,39100],{"class":294},[288,40514,39103],{"class":294},[288,40516,39106],{"class":347},[288,40518,3911],{"class":298},[288,40520,40521],{"class":290,"line":16936},[288,40522,39113],{"class":357},[288,40524,40525,40527,40529],{"class":290,"line":16942},[288,40526,39118],{"class":298},[288,40528,490],{"class":347},[288,40530,305],{"class":298},[288,40532,40533],{"class":290,"line":16956},[288,40534,39127],{"class":357},[288,40536,40537,40539,40541],{"class":290,"line":16969},[288,40538,39132],{"class":294},[288,40540,39061],{"class":347},[288,40542,39137],{"class":298},[288,40544,40545],{"class":290,"line":16974},[288,40546,39142],{"class":357},[288,40548,40549],{"class":290,"line":16988},[288,40550,39147],{"class":357},[288,40552,40553,40555,40557,40559,40561],{"class":290,"line":16993},[288,40554,39152],{"class":298},[288,40556,490],{"class":347},[288,40558,675],{"class":298},[288,40560,39159],{"class":347},[288,40562,305],{"class":298},[288,40564,40565],{"class":290,"line":16999},[288,40566,39166],{"class":357},[288,40568,40569,40571,40573,40575,40577,40579],{"class":290,"line":17004},[288,40570,39094],{"class":294},[288,40572,39097],{"class":298},[288,40574,39100],{"class":294},[288,40576,39103],{"class":294},[288,40578,39106],{"class":347},[288,40580,3911],{"class":298},[288,40582,40583,40585,40587],{"class":290,"line":17018},[288,40584,39118],{"class":298},[288,40586,490],{"class":347},[288,40588,305],{"class":298},[288,40590,40591],{"class":290,"line":17023},[288,40592,2572],{"emptyLinePlaceholder":217},[288,40594,40595],{"class":290,"line":17028},[288,40596,35338],{"class":357},[288,40598,40599,40601,40603],{"class":290,"line":17042},[288,40600,30974],{"class":294},[288,40602,31266],{"class":2135},[288,40604,31269],{"class":298},[288,40606,40607,40609,40611,40613],{"class":290,"line":17054},[288,40608,31274],{"class":298},[288,40610,344],{"class":294},[288,40612,30996],{"class":347},[288,40614,39215],{"class":298},[288,40616,40617,40619,40621,40623],{"class":290,"line":17059},[288,40618,31274],{"class":298},[288,40620,344],{"class":294},[288,40622,30996],{"class":347},[288,40624,39226],{"class":298},[288,40626,40627,40629,40631,40633],{"class":290,"line":17072},[288,40628,31274],{"class":298},[288,40630,344],{"class":294},[288,40632,30996],{"class":347},[288,40634,39237],{"class":298},[288,40636,40637,40639,40641,40643],{"class":290,"line":17077},[288,40638,31274],{"class":298},[288,40640,344],{"class":294},[288,40642,30996],{"class":347},[288,40644,39248],{"class":298},[288,40646,40647,40649,40651,40653],{"class":290,"line":17082},[288,40648,31274],{"class":298},[288,40650,344],{"class":294},[288,40652,30996],{"class":347},[288,40654,39259],{"class":298},[288,40656,40657,40659,40661,40663],{"class":290,"line":17087},[288,40658,31274],{"class":298},[288,40660,344],{"class":294},[288,40662,30996],{"class":347},[288,40664,39270],{"class":298},[288,40666,40667,40669],{"class":290,"line":17100},[288,40668,14925],{"class":294},[288,40670,31382],{"class":298},[288,40672,40673],{"class":290,"line":17105},[288,40674,2572],{"emptyLinePlaceholder":217},[288,40676,40677],{"class":290,"line":32806},[288,40678,39285],{"class":357},[288,40680,40681,40683,40685,40687,40689],{"class":290,"line":32812},[288,40682,1703],{"class":294},[288,40684,31393],{"class":347},[288,40686,3121],{"class":294},[288,40688,39296],{"class":403},[288,40690,3911],{"class":298},[288,40692,40693,40695,40697,40699,40701,40703,40705,40707,40709],{"class":290,"line":32818},[288,40694,31410],{"class":298},[288,40696,344],{"class":294},[288,40698,30624],{"class":298},[288,40700,31417],{"class":403},[288,40702,1876],{"class":294},[288,40704,31422],{"class":298},[288,40706,1873],{"class":294},[288,40708,30649],{"class":403},[288,40710,305],{"class":298},[288,40712,40713,40715],{"class":290,"line":32824},[288,40714,31472],{"class":347},[288,40716,30658],{"class":298},[288,40718,40719,40721,40723],{"class":290,"line":32830},[288,40720,31462],{"class":298},[288,40722,344],{"class":294},[288,40724,39333],{"class":298},[288,40726,40727,40729,40731,40733,40735,40737,40739,40741],{"class":290,"line":32841},[288,40728,31472],{"class":347},[288,40730,31475],{"class":298},[288,40732,516],{"class":347},[288,40734,675],{"class":298},[288,40736,31674],{"class":347},[288,40738,675],{"class":298},[288,40740,31674],{"class":347},[288,40742,31488],{"class":298},[243,40744,40745],{"start":1352},[246,40746,40747],{},"测试代码",[280,40749,40751],{"className":30551,"code":40750,"language":30553,"meta":205,"style":205},"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",[25,40752,40753,40759,40769,40779,40783,40793,40804,40808,40812,40816,40824,40840,40850,40866,40876,40890,40894,40904,40914,40924,40930,40934,40938,40946,40950,40966,40974,40978,40982,40990,40998,41002,41006,41010,41014,41020,41024,41034,41042,41050,41054,41058,41062,41070,41074,41090,41094,41098,41102,41114,41118,41130,41134,41138,41150,41154,41164,41168,41172,41184,41188,41197,41201,41205,41213,41217,41225,41229,41233,41237,41241,41245,41261,41269,41273,41277,41325,41331,41335,41345,41353,41361,41365,41369,41373,41377,41385,41389,41405,41409,41417,41425],{"__ignoreMap":205},[288,40754,40755,40757],{"class":290,"line":291},[288,40756,30565],{"class":294},[288,40758,30568],{"class":298},[288,40760,40761,40763,40765,40767],{"class":290,"line":206},[288,40762,30565],{"class":294},[288,40764,31588],{"class":298},[288,40766,31556],{"class":294},[288,40768,31593],{"class":298},[288,40770,40771,40773,40775,40777],{"class":290,"line":1352},[288,40772,30910],{"class":294},[288,40774,31571],{"class":298},[288,40776,30565],{"class":294},[288,40778,31576],{"class":298},[288,40780,40781],{"class":290,"line":1367},[288,40782,34095],{"class":357},[288,40784,40785,40787,40789,40791],{"class":290,"line":1373},[288,40786,30910],{"class":294},[288,40788,31541],{"class":298},[288,40790,30565],{"class":294},[288,40792,31546],{"class":298},[288,40794,40795,40797,40799,40801],{"class":290,"line":1387},[288,40796,30910],{"class":294},[288,40798,32087],{"class":298},[288,40800,30565],{"class":294},[288,40802,40803],{"class":347}," VGG16\n",[288,40805,40806],{"class":290,"line":1393},[288,40807,2572],{"emptyLinePlaceholder":217},[288,40809,40810],{"class":290,"line":1484},[288,40811,2572],{"emptyLinePlaceholder":217},[288,40813,40814],{"class":290,"line":1490},[288,40815,34124],{"class":357},[288,40817,40818,40820,40822],{"class":290,"line":1502},[288,40819,32120],{"class":294},[288,40821,34131],{"class":2135},[288,40823,32126],{"class":298},[288,40825,40826,40828,40830,40832,40834,40836,40838],{"class":290,"line":1784},[288,40827,34138],{"class":298},[288,40829,344],{"class":294},[288,40831,31628],{"class":298},[288,40833,31631],{"class":5389},[288,40835,344],{"class":294},[288,40837,31636],{"class":403},[288,40839,31639],{"class":298},[288,40841,40842,40844,40846,40848],{"class":290,"line":1789},[288,40843,34155],{"class":5389},[288,40845,344],{"class":294},[288,40847,34160],{"class":347},[288,40849,31639],{"class":298},[288,40851,40852,40854,40856,40858,40860,40862,40864],{"class":290,"line":1795},[288,40853,34167],{"class":5389},[288,40855,344],{"class":294},[288,40857,31666],{"class":298},[288,40859,31669],{"class":5389},[288,40861,344],{"class":294},[288,40863,31674],{"class":347},[288,40865,31677],{"class":298},[288,40867,40868,40870,40872,40874],{"class":290,"line":1800},[288,40869,34184],{"class":5389},[288,40871,344],{"class":294},[288,40873,31649],{"class":347},[288,40875,305],{"class":298},[288,40877,40878,40880,40882,40884,40886,40888],{"class":290,"line":1814},[288,40879,34195],{"class":298},[288,40881,344],{"class":294},[288,40883,31707],{"class":298},[288,40885,31710],{"class":5389},[288,40887,344],{"class":294},[288,40889,34206],{"class":298},[288,40891,40892],{"class":290,"line":1819},[288,40893,34211],{"class":357},[288,40895,40896,40898,40900,40902],{"class":290,"line":1825},[288,40897,34216],{"class":5389},[288,40899,344],{"class":294},[288,40901,516],{"class":347},[288,40903,31639],{"class":298},[288,40905,40906,40908,40910,40912],{"class":290,"line":1846},[288,40907,34227],{"class":5389},[288,40909,344],{"class":294},[288,40911,31649],{"class":347},[288,40913,31639],{"class":298},[288,40915,40916,40918,40920,40922],{"class":290,"line":1851},[288,40917,34238],{"class":5389},[288,40919,344],{"class":294},[288,40921,490],{"class":347},[288,40923,305],{"class":298},[288,40925,40926,40928],{"class":290,"line":1865},[288,40927,4262],{"class":294},[288,40929,34251],{"class":298},[288,40931,40932],{"class":290,"line":1870},[288,40933,2572],{"emptyLinePlaceholder":217},[288,40935,40936],{"class":290,"line":1899},[288,40937,34260],{"class":357},[288,40939,40940,40942,40944],{"class":290,"line":1904},[288,40941,32120],{"class":294},[288,40943,34267],{"class":2135},[288,40945,34270],{"class":298},[288,40947,40948],{"class":290,"line":1921},[288,40949,34275],{"class":357},[288,40951,40952,40954,40956,40958,40960,40962,40964],{"class":290,"line":1926},[288,40953,31410],{"class":298},[288,40955,344],{"class":294},[288,40957,31417],{"class":403},[288,40959,1876],{"class":294},[288,40961,31422],{"class":298},[288,40963,1873],{"class":294},[288,40965,34292],{"class":403},[288,40967,40968,40970,40972],{"class":290,"line":1931},[288,40969,31462],{"class":298},[288,40971,344],{"class":294},[288,40973,32462],{"class":298},[288,40975,40976],{"class":290,"line":1936},[288,40977,2572],{"emptyLinePlaceholder":217},[288,40979,40980],{"class":290,"line":1950},[288,40981,34309],{"class":357},[288,40983,40984,40986,40988],{"class":290,"line":1955},[288,40985,34314],{"class":298},[288,40987,344],{"class":294},[288,40989,32515],{"class":347},[288,40991,40992,40994,40996],{"class":290,"line":2749},[288,40993,34323],{"class":298},[288,40995,344],{"class":294},[288,40997,3257],{"class":347},[288,40999,41000],{"class":290,"line":2763},[288,41001,2572],{"emptyLinePlaceholder":217},[288,41003,41004],{"class":290,"line":2771},[288,41005,34336],{"class":357},[288,41007,41008],{"class":290,"line":2776},[288,41009,34341],{"class":357},[288,41011,41012],{"class":290,"line":2782},[288,41013,34346],{"class":357},[288,41015,41016,41018],{"class":290,"line":2788},[288,41017,34351],{"class":294},[288,41019,33057],{"class":298},[288,41021,41022],{"class":290,"line":2793},[288,41023,34358],{"class":357},[288,41025,41026,41028,41030,41032],{"class":290,"line":8121},[288,41027,3575],{"class":294},[288,41029,34365],{"class":298},[288,41031,26216],{"class":294},[288,41033,34370],{"class":298},[288,41035,41036,41038,41040],{"class":290,"line":8145},[288,41037,34375],{"class":298},[288,41039,344],{"class":294},[288,41041,34380],{"class":298},[288,41043,41044,41046,41048],{"class":290,"line":8150},[288,41045,34385],{"class":298},[288,41047,344],{"class":294},[288,41049,34390],{"class":298},[288,41051,41052],{"class":290,"line":8156},[288,41053,34395],{"class":357},[288,41055,41056],{"class":290,"line":8183},[288,41057,33048],{"class":298},[288,41059,41060],{"class":290,"line":8188},[288,41061,34404],{"class":357},[288,41063,41064,41066,41068],{"class":290,"line":8194},[288,41065,32833],{"class":298},[288,41067,344],{"class":294},[288,41069,34413],{"class":298},[288,41071,41072],{"class":290,"line":8206},[288,41073,34418],{"class":357},[288,41075,41076,41078,41080,41082,41084,41086,41088],{"class":290,"line":8218},[288,41077,32850],{"class":298},[288,41079,344],{"class":294},[288,41081,32855],{"class":298},[288,41083,32858],{"class":5389},[288,41085,344],{"class":294},[288,41087,516],{"class":347},[288,41089,305],{"class":298},[288,41091,41092],{"class":290,"line":8230},[288,41093,34439],{"class":357},[288,41095,41096],{"class":290,"line":9889},[288,41097,34444],{"class":357},[288,41099,41100],{"class":290,"line":9914},[288,41101,34449],{"class":357},[288,41103,41104,41106,41108,41110,41112],{"class":290,"line":9937},[288,41105,34454],{"class":298},[288,41107,9650],{"class":294},[288,41109,32960],{"class":298},[288,41111,3121],{"class":294},[288,41113,34463],{"class":298},[288,41115,41116],{"class":290,"line":9961},[288,41117,34468],{"class":357},[288,41119,41120,41122,41124,41126,41128],{"class":290,"line":9966},[288,41121,34473],{"class":298},[288,41123,9650],{"class":294},[288,41125,34478],{"class":298},[288,41127,490],{"class":347},[288,41129,305],{"class":298},[288,41131,41132],{"class":290,"line":9971},[288,41133,2572],{"emptyLinePlaceholder":217},[288,41135,41136],{"class":290,"line":9976},[288,41137,34491],{"class":357},[288,41139,41140,41142,41144,41146,41148],{"class":290,"line":9985},[288,41141,34496],{"class":298},[288,41143,344],{"class":294},[288,41145,34501],{"class":298},[288,41147,881],{"class":294},[288,41149,34506],{"class":298},[288,41151,41152],{"class":290,"line":9990},[288,41153,34511],{"class":357},[288,41155,41156,41158,41160,41162],{"class":290,"line":9996},[288,41157,32624],{"class":347},[288,41159,299],{"class":298},[288,41161,34520],{"class":403},[288,41163,34523],{"class":298},[288,41165,41166],{"class":290,"line":10017},[288,41167,2572],{"emptyLinePlaceholder":217},[288,41169,41170],{"class":290,"line":10023},[288,41171,34532],{"class":357},[288,41173,41174,41176,41178,41180,41182],{"class":290,"line":10037},[288,41175,1703],{"class":294},[288,41177,31393],{"class":347},[288,41179,3121],{"class":294},[288,41181,31398],{"class":403},[288,41183,3911],{"class":298},[288,41185,41186],{"class":290,"line":10043},[288,41187,34549],{"class":357},[288,41189,41190,41192,41194],{"class":290,"line":10070},[288,41191,31462],{"class":298},[288,41193,344],{"class":294},[288,41195,41196],{"class":298},"VGG16()\n",[288,41198,41199],{"class":290,"line":10079},[288,41200,34562],{"class":357},[288,41202,41203],{"class":290,"line":10085},[288,41204,34567],{"class":357},[288,41206,41207,41209,41211],{"class":290,"line":10093},[288,41208,34572],{"class":298},[288,41210,34575],{"class":403},[288,41212,30670],{"class":298},[288,41214,41215],{"class":290,"line":10098},[288,41216,34582],{"class":357},[288,41218,41219,41221,41223],{"class":290,"line":16777},[288,41220,34195],{"class":298},[288,41222,344],{"class":294},[288,41224,34591],{"class":298},[288,41226,41227],{"class":290,"line":16783},[288,41228,34596],{"class":357},[288,41230,41231],{"class":290,"line":16806},[288,41232,34601],{"class":298},[288,41234,41235],{"class":290,"line":16812},[288,41236,2572],{"emptyLinePlaceholder":217},[288,41238,41239],{"class":290,"line":16835},[288,41240,34610],{"class":357},[288,41242,41243],{"class":290,"line":16849},[288,41244,34615],{"class":357},[288,41246,41247,41249,41251,41253,41255,41257,41259],{"class":290,"line":16869},[288,41248,31410],{"class":298},[288,41250,344],{"class":294},[288,41252,31417],{"class":403},[288,41254,1876],{"class":294},[288,41256,31422],{"class":298},[288,41258,1873],{"class":294},[288,41260,34292],{"class":403},[288,41262,41263,41265,41267],{"class":290,"line":16875},[288,41264,31462],{"class":298},[288,41266,344],{"class":294},[288,41268,32462],{"class":298},[288,41270,41271],{"class":290,"line":16886},[288,41272,34644],{"class":357},[288,41274,41275],{"class":290,"line":16909},[288,41276,34649],{"class":357},[288,41278,41279,41281,41283,41285,41287,41289,41291,41293,41295,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323],{"class":290,"line":16931},[288,41280,34654],{"class":298},[288,41282,344],{"class":294},[288,41284,1187],{"class":298},[288,41286,34661],{"class":403},[288,41288,675],{"class":298},[288,41290,34666],{"class":403},[288,41292,675],{"class":298},[288,41294,34671],{"class":403},[288,41296,675],{"class":298},[288,41298,34676],{"class":403},[288,41300,675],{"class":298},[288,41302,34681],{"class":403},[288,41304,675],{"class":298},[288,41306,34686],{"class":403},[288,41308,675],{"class":298},[288,41310,34691],{"class":403},[288,41312,675],{"class":298},[288,41314,34696],{"class":403},[288,41316,675],{"class":298},[288,41318,34701],{"class":403},[288,41320,675],{"class":298},[288,41322,34706],{"class":403},[288,41324,33419],{"class":298},[288,41326,41327,41329],{"class":290,"line":16936},[288,41328,34351],{"class":294},[288,41330,33057],{"class":298},[288,41332,41333],{"class":290,"line":16942},[288,41334,34719],{"class":357},[288,41336,41337,41339,41341,41343],{"class":290,"line":16956},[288,41338,3575],{"class":294},[288,41340,34726],{"class":298},[288,41342,26216],{"class":294},[288,41344,34370],{"class":298},[288,41346,41347,41349,41351],{"class":290,"line":16969},[288,41348,32783],{"class":298},[288,41350,344],{"class":294},[288,41352,32788],{"class":298},[288,41354,41355,41357,41359],{"class":290,"line":16974},[288,41356,32798],{"class":298},[288,41358,344],{"class":294},[288,41360,32803],{"class":298},[288,41362,41363],{"class":290,"line":16988},[288,41364,2572],{"emptyLinePlaceholder":217},[288,41366,41367],{"class":290,"line":16993},[288,41368,34755],{"class":357},[288,41370,41371],{"class":290,"line":16999},[288,41372,33048],{"class":298},[288,41374,41375],{"class":290,"line":17004},[288,41376,34764],{"class":357},[288,41378,41379,41381,41383],{"class":290,"line":17018},[288,41380,32833],{"class":298},[288,41382,344],{"class":294},[288,41384,32838],{"class":298},[288,41386,41387],{"class":290,"line":17023},[288,41388,34777],{"class":357},[288,41390,41391,41393,41395,41397,41399,41401,41403],{"class":290,"line":17028},[288,41392,32850],{"class":298},[288,41394,344],{"class":294},[288,41396,32855],{"class":298},[288,41398,32858],{"class":5389},[288,41400,344],{"class":294},[288,41402,516],{"class":347},[288,41404,305],{"class":298},[288,41406,41407],{"class":290,"line":17042},[288,41408,34798],{"class":357},[288,41410,41411,41413,41415],{"class":290,"line":17054},[288,41412,34803],{"class":298},[288,41414,344],{"class":294},[288,41416,34808],{"class":298},[288,41418,41419,41421,41423],{"class":290,"line":17059},[288,41420,34813],{"class":298},[288,41422,344],{"class":294},[288,41424,34818],{"class":298},[288,41426,41427,41429,41431,41433,41435,41437,41439,41441],{"class":290,"line":17072},[288,41428,34823],{"class":347},[288,41430,299],{"class":298},[288,41432,34828],{"class":403},[288,41434,34831],{"class":298},[288,41436,34834],{"class":403},[288,41438,675],{"class":298},[288,41440,34839],{"class":403},[288,41442,34842],{"class":298},[260,41444,41446],{"id":41445},"_23googlenet","2.3.GoogLeNet",[22171,41448,41450],{"id":41449},"_231原理","2.3.1.原理",[243,41452,41453],{},[246,41454,41455],{},"网络结构",[19,41457,41458],{},[200,41459],{"alt":205,"src":41460},"\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",[19,41462,41463],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41465,41466],{},[200,41467],{"alt":205,"src":41468},"\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",[19,41470,41471],{},[200,41472],{"alt":205,"src":41473},"\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",[19,41475,41476],{},[200,41477],{"alt":205,"src":41478},"\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",[243,41480,41481],{"start":206},[246,41482,41483],{},"1x1卷积的优点",[19,41485,41486],{},[200,41487],{"alt":205,"src":41488},"\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",[243,41490,41491],{"start":1352},[246,41492,41493],{},"全局平均池化层优点",[19,41495,41496],{},[200,41497],{"alt":205,"src":41498},"\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",[19,41500,41501],{},[200,41502],{"alt":205,"src":41503},"\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",[243,41505,41506],{"start":1367},[246,41507,41508],{},"参数详细描述",[19,41510,41511],{},[200,41512],{"alt":205,"src":41513},"\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",[19,41515,41516],{},[200,41517],{"alt":205,"src":41518},"\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",[19,41520,41521],{},[200,41522],{"alt":205,"src":41523},"\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",[19,41525,41526],{},[200,41527],{"alt":205,"src":41528},"\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",[19,41530,41531],{},[200,41532],{"alt":205,"src":41533},"\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",[19,41535,41536],{},[200,41537],{"alt":205,"src":41538},"\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",[19,41540,41541],{},[200,41542],{"alt":205,"src":41543},"\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",[19,41545,41546],{},[200,41547],{"alt":205,"src":41548},"\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",[19,41550,41551],{},[200,41552],{"alt":205,"src":41553},"\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",[19,41555,41556],{},[200,41557],{"alt":205,"src":41558},"\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",[19,41560,41561],{},[200,41562],{"alt":205,"src":41563},"\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",[19,41565,41566],{},[200,41567],{"alt":205,"src":41568},"\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",[19,41570,41571],{},[200,41572],{"alt":205,"src":41573},"\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",[19,41575,41576],{},[200,41577],{"alt":205,"src":41578},"\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",[19,41580,41581],{},[200,41582],{"alt":205,"src":41583},"\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",[19,41585,41586],{},[200,41587],{"alt":205,"src":41588},"\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",[19,41590,41591],{},[200,41592],{"alt":205,"src":41593},"\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",[19,41595,41596],{},[200,41597],{"alt":205,"src":41598},"\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",[19,41600,41601],{},[200,41602],{"alt":205,"src":41603},"\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",[19,41605,41606],{},[200,41607],{"alt":205,"src":41608},"\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",[19,41610,41611],{},[200,41612],{"alt":205,"src":41613},"\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",[22171,41615,41617],{"id":41616},"_232代码实现","2.3.2.代码实现",[243,41619,41620],{},[246,41621,30884],{},[19,41623,41624],{},"根据原理一步一步搭建即可",[280,41626,41628],{"className":30551,"code":41627,"language":30553,"meta":205,"style":205},"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",[25,41629,41630,41636,41646,41656,41660,41677,41686,41701,41711,41716,41749,41754,41791,41838,41843,41879,41926,41931,41936,41971,42003,42007,42015,42031,42055,42080,42101,42106,42121,42125,42129,42134,42151,42156,42165,42180,42191,42235,42239,42267,42271,42282,42310,42314,42351,42355,42383,42387,42398,42434,42466,42494,42498,42509,42543,42575,42607,42640,42674,42702,42706,42717,42750,42782,42796,42800,42813,42817,42822,42834,42842,42864,42869,42874,42879,42884,42889,42894,42908,42916,42925,42938,42953,42962,42966,42974,42985,42996,43007,43018,43029,43035,43039,43044,43056,43076,43085],{"__ignoreMap":205},[288,41631,41632,41634],{"class":290,"line":291},[288,41633,30565],{"class":294},[288,41635,30568],{"class":298},[288,41637,41638,41640,41642,41644],{"class":290,"line":206},[288,41639,30910],{"class":294},[288,41641,30913],{"class":298},[288,41643,30565],{"class":294},[288,41645,30918],{"class":298},[288,41647,41648,41650,41652,41654],{"class":290,"line":1352},[288,41649,30910],{"class":294},[288,41651,30930],{"class":298},[288,41653,30565],{"class":294},[288,41655,30935],{"class":298},[288,41657,41658],{"class":290,"line":1367},[288,41659,2572],{"emptyLinePlaceholder":217},[288,41661,41662,41664,41667,41669,41671,41673,41675],{"class":290,"line":1373},[288,41663,14867],{"class":294},[288,41665,41666],{"class":2135}," Inception",[288,41668,299],{"class":298},[288,41670,30951],{"class":2135},[288,41672,855],{"class":298},[288,41674,30956],{"class":2135},[288,41676,30959],{"class":298},[288,41678,41679,41681,41683],{"class":290,"line":1387},[288,41680,30974],{"class":294},[288,41682,30977],{"class":347},[288,41684,41685],{"class":298},"(self,in_channels,c1,c2,c3,c4):\n",[288,41687,41688,41690,41693,41695,41697,41699],{"class":290,"line":1393},[288,41689,30990],{"class":347},[288,41691,41692],{"class":298},"(Inception,",[288,41694,30996],{"class":347},[288,41696,30999],{"class":298},[288,41698,31002],{"class":347},[288,41700,2148],{"class":298},[288,41702,41703,41705,41707,41709],{"class":290,"line":1484},[288,41704,31018],{"class":347},[288,41706,34944],{"class":298},[288,41708,344],{"class":294},[288,41710,34949],{"class":298},[288,41712,41713],{"class":290,"line":1490},[288,41714,41715],{"class":357},"        # 路线1：定义1*1卷积\n",[288,41717,41718,41720,41723,41725,41727,41729,41731,41734,41736,41738,41741,41743,41745,41747],{"class":290,"line":1502},[288,41719,31018],{"class":347},[288,41721,41722],{"class":298},".p1_1",[288,41724,344],{"class":294},[288,41726,31026],{"class":298},[288,41728,31029],{"class":5389},[288,41730,344],{"class":294},[288,41732,41733],{"class":298},"in_channels,",[288,41735,31038],{"class":5389},[288,41737,344],{"class":294},[288,41739,41740],{"class":298},"c1,",[288,41742,31047],{"class":5389},[288,41744,344],{"class":294},[288,41746,516],{"class":347},[288,41748,305],{"class":298},[288,41750,41751],{"class":290,"line":1784},[288,41752,41753],{"class":357},"        # 路线2：定义1*1卷积和3*3\n",[288,41755,41756,41758,41761,41763,41765,41767,41769,41771,41773,41775,41778,41780,41783,41785,41787,41789],{"class":290,"line":1789},[288,41757,31018],{"class":347},[288,41759,41760],{"class":298},".p2_1",[288,41762,344],{"class":294},[288,41764,31026],{"class":298},[288,41766,31029],{"class":5389},[288,41768,344],{"class":294},[288,41770,41733],{"class":298},[288,41772,31038],{"class":5389},[288,41774,344],{"class":294},[288,41776,41777],{"class":298},"c2[",[288,41779,490],{"class":347},[288,41781,41782],{"class":298},"],",[288,41784,31047],{"class":5389},[288,41786,344],{"class":294},[288,41788,516],{"class":347},[288,41790,305],{"class":298},[288,41792,41793,41795,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828,41830,41832,41834,41836],{"class":290,"line":1795},[288,41794,31018],{"class":347},[288,41796,41797],{"class":298},".p2_2",[288,41799,344],{"class":294},[288,41801,31026],{"class":298},[288,41803,31029],{"class":5389},[288,41805,344],{"class":294},[288,41807,41777],{"class":298},[288,41809,490],{"class":347},[288,41811,41782],{"class":298},[288,41813,31038],{"class":5389},[288,41815,344],{"class":294},[288,41817,41777],{"class":298},[288,41819,516],{"class":347},[288,41821,41782],{"class":298},[288,41823,31047],{"class":5389},[288,41825,344],{"class":294},[288,41827,370],{"class":347},[288,41829,675],{"class":298},[288,41831,31056],{"class":5389},[288,41833,344],{"class":294},[288,41835,516],{"class":347},[288,41837,305],{"class":298},[288,41839,41840],{"class":290,"line":1800},[288,41841,41842],{"class":357},"        # 路线3：定义1*1卷积和5*5\n",[288,41844,41845,41847,41850,41852,41854,41856,41858,41860,41862,41864,41867,41869,41871,41873,41875,41877],{"class":290,"line":1814},[288,41846,31018],{"class":347},[288,41848,41849],{"class":298},".p3_1",[288,41851,344],{"class":294},[288,41853,31026],{"class":298},[288,41855,31029],{"class":5389},[288,41857,344],{"class":294},[288,41859,41733],{"class":298},[288,41861,31038],{"class":5389},[288,41863,344],{"class":294},[288,41865,41866],{"class":298},"c3[",[288,41868,490],{"class":347},[288,41870,41782],{"class":298},[288,41872,31047],{"class":5389},[288,41874,344],{"class":294},[288,41876,516],{"class":347},[288,41878,305],{"class":298},[288,41880,41881,41883,41886,41888,41890,41892,41894,41896,41898,41900,41902,41904,41906,41908,41910,41912,41914,41916,41918,41920,41922,41924],{"class":290,"line":1819},[288,41882,31018],{"class":347},[288,41884,41885],{"class":298},".p3_2",[288,41887,344],{"class":294},[288,41889,31026],{"class":298},[288,41891,31029],{"class":5389},[288,41893,344],{"class":294},[288,41895,41866],{"class":298},[288,41897,490],{"class":347},[288,41899,41782],{"class":298},[288,41901,31038],{"class":5389},[288,41903,344],{"class":294},[288,41905,41866],{"class":298},[288,41907,516],{"class":347},[288,41909,41782],{"class":298},[288,41911,31047],{"class":5389},[288,41913,344],{"class":294},[288,41915,616],{"class":347},[288,41917,675],{"class":298},[288,41919,31056],{"class":5389},[288,41921,344],{"class":294},[288,41923,376],{"class":347},[288,41925,305],{"class":298},[288,41927,41928],{"class":290,"line":1825},[288,41929,41930],{"class":357},"        # 路线4：定义3*3最大池化和1*1卷积\n",[288,41932,41933],{"class":290,"line":1846},[288,41934,41935],{"class":357},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[288,41937,41938,41940,41943,41945,41947,41949,41951,41953,41955,41957,41959,41961,41963,41965,41967,41969],{"class":290,"line":1851},[288,41939,31018],{"class":347},[288,41941,41942],{"class":298},".p4_1",[288,41944,344],{"class":294},[288,41946,35002],{"class":298},[288,41948,31047],{"class":5389},[288,41950,344],{"class":294},[288,41952,370],{"class":347},[288,41954,675],{"class":298},[288,41956,31102],{"class":5389},[288,41958,344],{"class":294},[288,41960,516],{"class":347},[288,41962,675],{"class":298},[288,41964,31056],{"class":5389},[288,41966,344],{"class":294},[288,41968,516],{"class":347},[288,41970,305],{"class":298},[288,41972,41973,41975,41978,41980,41982,41984,41986,41988,41990,41992,41995,41997,41999,42001],{"class":290,"line":1865},[288,41974,31018],{"class":347},[288,41976,41977],{"class":298},".p4_2",[288,41979,344],{"class":294},[288,41981,31026],{"class":298},[288,41983,31029],{"class":5389},[288,41985,344],{"class":294},[288,41987,41733],{"class":298},[288,41989,31038],{"class":5389},[288,41991,344],{"class":294},[288,41993,41994],{"class":298},"c4,",[288,41996,31047],{"class":5389},[288,41998,344],{"class":294},[288,42000,516],{"class":347},[288,42002,305],{"class":298},[288,42004,42005],{"class":290,"line":1870},[288,42006,2572],{"emptyLinePlaceholder":217},[288,42008,42009,42011,42013],{"class":290,"line":1899},[288,42010,30974],{"class":294},[288,42012,31266],{"class":2135},[288,42014,31269],{"class":298},[288,42016,42017,42020,42022,42024,42026,42028],{"class":290,"line":1904},[288,42018,42019],{"class":298},"        p1",[288,42021,344],{"class":294},[288,42023,30996],{"class":347},[288,42025,35357],{"class":298},[288,42027,30996],{"class":347},[288,42029,42030],{"class":298},".p1_1(x))\n",[288,42032,42033,42035,42037,42039,42041,42043,42046,42048,42050,42052],{"class":290,"line":1921},[288,42034,7258],{"class":298},[288,42036,344],{"class":294},[288,42038,30996],{"class":347},[288,42040,35357],{"class":298},[288,42042,30996],{"class":347},[288,42044,42045],{"class":298},".p2_2(",[288,42047,30996],{"class":347},[288,42049,35357],{"class":298},[288,42051,30996],{"class":347},[288,42053,42054],{"class":298},".p2_1(x))))\n",[288,42056,42057,42060,42062,42064,42066,42068,42071,42073,42075,42077],{"class":290,"line":1926},[288,42058,42059],{"class":298},"        p3",[288,42061,344],{"class":294},[288,42063,30996],{"class":347},[288,42065,35357],{"class":298},[288,42067,30996],{"class":347},[288,42069,42070],{"class":298},".p3_2(",[288,42072,30996],{"class":347},[288,42074,35357],{"class":298},[288,42076,30996],{"class":347},[288,42078,42079],{"class":298},".p3_1(x))))\n",[288,42081,42082,42085,42087,42089,42091,42093,42096,42098],{"class":290,"line":1931},[288,42083,42084],{"class":298},"        p4",[288,42086,344],{"class":294},[288,42088,30996],{"class":347},[288,42090,35357],{"class":298},[288,42092,30996],{"class":347},[288,42094,42095],{"class":298},".p4_2(",[288,42097,30996],{"class":347},[288,42099,42100],{"class":298},".p4_1(x)))\n",[288,42102,42103],{"class":290,"line":1936},[288,42104,42105],{"class":357},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[288,42107,42108,42110,42113,42115,42117,42119],{"class":290,"line":1950},[288,42109,14925],{"class":294},[288,42111,42112],{"class":298}," torch.cat((p1,p2,p3,p4),",[288,42114,32858],{"class":5389},[288,42116,344],{"class":294},[288,42118,516],{"class":347},[288,42120,305],{"class":298},[288,42122,42123],{"class":290,"line":1955},[288,42124,2572],{"emptyLinePlaceholder":217},[288,42126,42127],{"class":290,"line":2749},[288,42128,2572],{"emptyLinePlaceholder":217},[288,42130,42131],{"class":290,"line":2763},[288,42132,42133],{"class":357},"# 搭建GoogLeNet网络\n",[288,42135,42136,42138,42141,42143,42145,42147,42149],{"class":290,"line":2771},[288,42137,14867],{"class":294},[288,42139,42140],{"class":2135}," GoogLeNet",[288,42142,299],{"class":298},[288,42144,30951],{"class":2135},[288,42146,855],{"class":298},[288,42148,30956],{"class":2135},[288,42150,30959],{"class":298},[288,42152,42153],{"class":290,"line":2776},[288,42154,42155],{"class":357},"    # 必须把Inception导入到里边\n",[288,42157,42158,42160,42162],{"class":290,"line":2782},[288,42159,30974],{"class":294},[288,42161,30977],{"class":347},[288,42163,42164],{"class":298},"(self,Inception):\n",[288,42166,42167,42169,42172,42174,42176,42178],{"class":290,"line":2788},[288,42168,30990],{"class":347},[288,42170,42171],{"class":298},"(GoogLeNet,",[288,42173,30996],{"class":347},[288,42175,30999],{"class":298},[288,42177,31002],{"class":347},[288,42179,2148],{"class":298},[288,42181,42182,42184,42187,42189],{"class":290,"line":2793},[288,42183,31018],{"class":347},[288,42185,42186],{"class":298},".b1",[288,42188,344],{"class":294},[288,42190,38182],{"class":298},[288,42192,42193,42195,42197,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221,42223,42225,42227,42229,42231,42233],{"class":290,"line":8121},[288,42194,38187],{"class":298},[288,42196,31029],{"class":5389},[288,42198,344],{"class":294},[288,42200,516],{"class":347},[288,42202,675],{"class":298},[288,42204,31038],{"class":5389},[288,42206,344],{"class":294},[288,42208,502],{"class":347},[288,42210,675],{"class":298},[288,42212,31047],{"class":5389},[288,42214,344],{"class":294},[288,42216,666],{"class":347},[288,42218,675],{"class":298},[288,42220,31102],{"class":5389},[288,42222,344],{"class":294},[288,42224,376],{"class":347},[288,42226,675],{"class":298},[288,42228,31056],{"class":5389},[288,42230,344],{"class":294},[288,42232,370],{"class":347},[288,42234,38220],{"class":298},[288,42236,42237],{"class":290,"line":8145},[288,42238,38225],{"class":298},[288,42240,42241,42243,42245,42247,42249,42251,42253,42255,42257,42259,42261,42263,42265],{"class":290,"line":8150},[288,42242,38270],{"class":298},[288,42244,31047],{"class":5389},[288,42246,344],{"class":294},[288,42248,370],{"class":347},[288,42250,675],{"class":298},[288,42252,31102],{"class":5389},[288,42254,344],{"class":294},[288,42256,376],{"class":347},[288,42258,675],{"class":298},[288,42260,31056],{"class":5389},[288,42262,344],{"class":294},[288,42264,516],{"class":347},[288,42266,305],{"class":298},[288,42268,42269],{"class":290,"line":8156},[288,42270,38299],{"class":298},[288,42272,42273,42275,42278,42280],{"class":290,"line":8183},[288,42274,31018],{"class":347},[288,42276,42277],{"class":298},".b2",[288,42279,344],{"class":294},[288,42281,38182],{"class":298},[288,42283,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308],{"class":290,"line":8188},[288,42285,38187],{"class":298},[288,42287,31029],{"class":5389},[288,42289,344],{"class":294},[288,42291,502],{"class":347},[288,42293,675],{"class":298},[288,42295,31038],{"class":5389},[288,42297,344],{"class":294},[288,42299,502],{"class":347},[288,42301,675],{"class":298},[288,42303,31047],{"class":5389},[288,42305,344],{"class":294},[288,42307,516],{"class":347},[288,42309,38220],{"class":298},[288,42311,42312],{"class":290,"line":8194},[288,42313,38225],{"class":298},[288,42315,42316,42318,42320,42322,42324,42326,42328,42330,42333,42335,42337,42339,42341,42343,42345,42347,42349],{"class":290,"line":8206},[288,42317,38187],{"class":298},[288,42319,31029],{"class":5389},[288,42321,344],{"class":294},[288,42323,502],{"class":347},[288,42325,675],{"class":298},[288,42327,31038],{"class":5389},[288,42329,344],{"class":294},[288,42331,42332],{"class":347},"192",[288,42334,675],{"class":298},[288,42336,31047],{"class":5389},[288,42338,344],{"class":294},[288,42340,370],{"class":347},[288,42342,675],{"class":298},[288,42344,31056],{"class":5389},[288,42346,344],{"class":294},[288,42348,516],{"class":347},[288,42350,38220],{"class":298},[288,42352,42353],{"class":290,"line":8218},[288,42354,38225],{"class":298},[288,42356,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381],{"class":290,"line":8230},[288,42358,38270],{"class":298},[288,42360,31047],{"class":5389},[288,42362,344],{"class":294},[288,42364,370],{"class":347},[288,42366,675],{"class":298},[288,42368,31102],{"class":5389},[288,42370,344],{"class":294},[288,42372,376],{"class":347},[288,42374,675],{"class":298},[288,42376,31056],{"class":5389},[288,42378,344],{"class":294},[288,42380,516],{"class":347},[288,42382,305],{"class":298},[288,42384,42385],{"class":290,"line":9889},[288,42386,38299],{"class":298},[288,42388,42389,42391,42394,42396],{"class":290,"line":9914},[288,42390,31018],{"class":347},[288,42392,42393],{"class":298},".b3",[288,42395,344],{"class":294},[288,42397,38182],{"class":298},[288,42399,42400,42403,42405,42407,42409,42412,42414,42416,42418,42421,42423,42425,42427,42430,42432],{"class":290,"line":9937},[288,42401,42402],{"class":298},"            Inception(",[288,42404,42332],{"class":347},[288,42406,675],{"class":298},[288,42408,502],{"class":347},[288,42410,42411],{"class":298},",(",[288,42413,508],{"class":347},[288,42415,675],{"class":298},[288,42417,32243],{"class":347},[288,42419,42420],{"class":298},"),(",[288,42422,898],{"class":347},[288,42424,675],{"class":298},[288,42426,496],{"class":347},[288,42428,42429],{"class":298},"),",[288,42431,496],{"class":347},[288,42433,38220],{"class":298},[288,42435,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464],{"class":290,"line":9961},[288,42437,42402],{"class":298},[288,42439,35043],{"class":347},[288,42441,675],{"class":298},[288,42443,32243],{"class":347},[288,42445,42411],{"class":298},[288,42447,32243],{"class":347},[288,42449,675],{"class":298},[288,42451,42332],{"class":347},[288,42453,42420],{"class":298},[288,42455,496],{"class":347},[288,42457,675],{"class":298},[288,42459,508],{"class":347},[288,42461,42429],{"class":298},[288,42463,502],{"class":347},[288,42465,38220],{"class":298},[288,42467,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492],{"class":290,"line":9966},[288,42469,38270],{"class":298},[288,42471,31047],{"class":5389},[288,42473,344],{"class":294},[288,42475,370],{"class":347},[288,42477,675],{"class":298},[288,42479,31102],{"class":5389},[288,42481,344],{"class":294},[288,42483,376],{"class":347},[288,42485,675],{"class":298},[288,42487,31056],{"class":5389},[288,42489,344],{"class":294},[288,42491,516],{"class":347},[288,42493,305],{"class":298},[288,42495,42496],{"class":290,"line":9971},[288,42497,38299],{"class":298},[288,42499,42500,42502,42505,42507],{"class":290,"line":9976},[288,42501,31018],{"class":347},[288,42503,42504],{"class":298},".b4",[288,42506,344],{"class":294},[288,42508,38182],{"class":298},[288,42510,42511,42513,42516,42518,42520,42522,42524,42526,42529,42531,42533,42535,42537,42539,42541],{"class":290,"line":9985},[288,42512,42402],{"class":298},[288,42514,42515],{"class":347},"480",[288,42517,675],{"class":298},[288,42519,42332],{"class":347},[288,42521,42411],{"class":298},[288,42523,508],{"class":347},[288,42525,675],{"class":298},[288,42527,42528],{"class":347},"208",[288,42530,42420],{"class":298},[288,42532,898],{"class":347},[288,42534,675],{"class":298},[288,42536,904],{"class":347},[288,42538,42429],{"class":298},[288,42540,502],{"class":347},[288,42542,38220],{"class":298},[288,42544,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569,42571,42573],{"class":290,"line":9990},[288,42546,42402],{"class":298},[288,42548,38630],{"class":347},[288,42550,675],{"class":298},[288,42552,21221],{"class":347},[288,42554,42411],{"class":298},[288,42556,915],{"class":347},[288,42558,675],{"class":298},[288,42560,31674],{"class":347},[288,42562,42420],{"class":298},[288,42564,1097],{"class":347},[288,42566,675],{"class":298},[288,42568,502],{"class":347},[288,42570,42429],{"class":298},[288,42572,502],{"class":347},[288,42574,38220],{"class":298},[288,42576,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597,42599,42601,42603,42605],{"class":290,"line":9996},[288,42578,42402],{"class":298},[288,42580,38630],{"class":347},[288,42582,675],{"class":298},[288,42584,32243],{"class":347},[288,42586,42411],{"class":298},[288,42588,32243],{"class":347},[288,42590,675],{"class":298},[288,42592,35043],{"class":347},[288,42594,42420],{"class":298},[288,42596,1097],{"class":347},[288,42598,675],{"class":298},[288,42600,502],{"class":347},[288,42602,42429],{"class":298},[288,42604,502],{"class":347},[288,42606,38220],{"class":298},[288,42608,42609,42611,42613,42615,42617,42619,42621,42623,42626,42628,42630,42632,42634,42636,42638],{"class":290,"line":10017},[288,42610,42402],{"class":298},[288,42612,38630],{"class":347},[288,42614,675],{"class":298},[288,42616,915],{"class":347},[288,42618,42411],{"class":298},[288,42620,32243],{"class":347},[288,42622,675],{"class":298},[288,42624,42625],{"class":347},"288",[288,42627,42420],{"class":298},[288,42629,496],{"class":347},[288,42631,675],{"class":298},[288,42633,502],{"class":347},[288,42635,42429],{"class":298},[288,42637,502],{"class":347},[288,42639,38220],{"class":298},[288,42641,42642,42644,42647,42649,42651,42653,42655,42657,42660,42662,42664,42666,42668,42670,42672],{"class":290,"line":10023},[288,42643,42402],{"class":298},[288,42645,42646],{"class":347},"528",[288,42648,675],{"class":298},[288,42650,35043],{"class":347},[288,42652,42411],{"class":298},[288,42654,21221],{"class":347},[288,42656,675],{"class":298},[288,42658,42659],{"class":347},"320",[288,42661,42420],{"class":298},[288,42663,496],{"class":347},[288,42665,675],{"class":298},[288,42667,32243],{"class":347},[288,42669,42429],{"class":298},[288,42671,32243],{"class":347},[288,42673,38220],{"class":298},[288,42675,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700],{"class":290,"line":10037},[288,42677,38270],{"class":298},[288,42679,31047],{"class":5389},[288,42681,344],{"class":294},[288,42683,370],{"class":347},[288,42685,675],{"class":298},[288,42687,31102],{"class":5389},[288,42689,344],{"class":294},[288,42691,376],{"class":347},[288,42693,675],{"class":298},[288,42695,31056],{"class":5389},[288,42697,344],{"class":294},[288,42699,516],{"class":347},[288,42701,305],{"class":298},[288,42703,42704],{"class":290,"line":10043},[288,42705,38299],{"class":298},[288,42707,42708,42710,42713,42715],{"class":290,"line":10070},[288,42709,31018],{"class":347},[288,42711,42712],{"class":298},".b5",[288,42714,344],{"class":294},[288,42716,38182],{"class":298},[288,42718,42719,42721,42724,42726,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748],{"class":290,"line":10079},[288,42720,42402],{"class":298},[288,42722,42723],{"class":347},"832",[288,42725,675],{"class":298},[288,42727,35043],{"class":347},[288,42729,42411],{"class":298},[288,42731,21221],{"class":347},[288,42733,675],{"class":298},[288,42735,42659],{"class":347},[288,42737,42420],{"class":298},[288,42739,496],{"class":347},[288,42741,675],{"class":298},[288,42743,32243],{"class":347},[288,42745,42429],{"class":298},[288,42747,32243],{"class":347},[288,42749,38220],{"class":298},[288,42751,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780],{"class":290,"line":10085},[288,42753,42402],{"class":298},[288,42755,42723],{"class":347},[288,42757,675],{"class":298},[288,42759,35113],{"class":347},[288,42761,42411],{"class":298},[288,42763,42332],{"class":347},[288,42765,675],{"class":298},[288,42767,35113],{"class":347},[288,42769,42420],{"class":298},[288,42771,904],{"class":347},[288,42773,675],{"class":298},[288,42775,32243],{"class":347},[288,42777,42429],{"class":298},[288,42779,32243],{"class":347},[288,42781,38220],{"class":298},[288,42783,42784,42787,42789,42791,42793],{"class":290,"line":10093},[288,42785,42786],{"class":298},"            nn.AdaptiveAvgPool2d((",[288,42788,516],{"class":347},[288,42790,675],{"class":298},[288,42792,516],{"class":347},[288,42794,42795],{"class":298},")),\n",[288,42797,42798],{"class":290,"line":10098},[288,42799,38963],{"class":298},[288,42801,42802,42804,42807,42809,42811],{"class":290,"line":16777},[288,42803,38968],{"class":298},[288,42805,42806],{"class":347},"1024",[288,42808,675],{"class":298},[288,42810,743],{"class":347},[288,42812,305],{"class":298},[288,42814,42815],{"class":290,"line":16783},[288,42816,38299],{"class":298},[288,42818,42819],{"class":290,"line":16806},[288,42820,42821],{"class":357},"        # 对模型参数初始化\n",[288,42823,42824,42826,42828,42830,42832],{"class":290,"line":16812},[288,42825,3575],{"class":294},[288,42827,39041],{"class":298},[288,42829,26216],{"class":294},[288,42831,39046],{"class":347},[288,42833,39049],{"class":298},[288,42835,42836,42838,42840],{"class":290,"line":16835},[288,42837,4814],{"class":294},[288,42839,39061],{"class":347},[288,42841,39064],{"class":298},[288,42843,42844,42846,42849,42851,42854,42856,42858,42860,42862],{"class":290,"line":16849},[288,42845,39074],{"class":298},[288,42847,42848],{"class":5389},"mode",[288,42850,344],{"class":294},[288,42852,42853],{"class":403},"'fan_out'",[288,42855,675],{"class":298},[288,42857,39077],{"class":5389},[288,42859,344],{"class":294},[288,42861,39082],{"class":403},[288,42863,305],{"class":298},[288,42865,42866],{"class":290,"line":16869},[288,42867,42868],{"class":357},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[288,42870,42871],{"class":290,"line":16875},[288,42872,42873],{"class":357},"                # ② mode = 'fan_out'决定使用的fan值：\n",[288,42875,42876],{"class":290,"line":16886},[288,42877,42878],{"class":357},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[288,42880,42881],{"class":290,"line":16909},[288,42882,42883],{"class":357},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[288,42885,42886],{"class":290,"line":16931},[288,42887,42888],{"class":357},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[288,42890,42891],{"class":290,"line":16936},[288,42892,42893],{"class":357},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[288,42895,42896,42898,42900,42902,42904,42906],{"class":290,"line":16942},[288,42897,39094],{"class":294},[288,42899,39097],{"class":298},[288,42901,39100],{"class":294},[288,42903,39103],{"class":294},[288,42905,39106],{"class":347},[288,42907,3911],{"class":298},[288,42909,42910,42912,42914],{"class":290,"line":16956},[288,42911,39118],{"class":298},[288,42913,490],{"class":347},[288,42915,305],{"class":298},[288,42917,42918,42921,42923],{"class":290,"line":16969},[288,42919,42920],{"class":294},"                elif",[288,42922,39061],{"class":347},[288,42924,39137],{"class":298},[288,42926,42927,42930,42932,42934,42936],{"class":290,"line":16974},[288,42928,42929],{"class":298},"                    nn.init.normal_(m.weight,",[288,42931,490],{"class":347},[288,42933,675],{"class":298},[288,42935,39159],{"class":347},[288,42937,305],{"class":298},[288,42939,42940,42943,42945,42947,42949,42951],{"class":290,"line":16988},[288,42941,42942],{"class":294},"                    if",[288,42944,39097],{"class":298},[288,42946,39100],{"class":294},[288,42948,39103],{"class":294},[288,42950,39106],{"class":347},[288,42952,3911],{"class":298},[288,42954,42955,42958,42960],{"class":290,"line":16993},[288,42956,42957],{"class":298},"                        nn.init.constant_(m.bias,",[288,42959,490],{"class":347},[288,42961,305],{"class":298},[288,42963,42964],{"class":290,"line":16999},[288,42965,35338],{"class":357},[288,42967,42968,42970,42972],{"class":290,"line":17004},[288,42969,30974],{"class":294},[288,42971,31266],{"class":2135},[288,42973,31269],{"class":298},[288,42975,42976,42978,42980,42982],{"class":290,"line":17018},[288,42977,31274],{"class":298},[288,42979,344],{"class":294},[288,42981,30996],{"class":347},[288,42983,42984],{"class":298},".b1(x)\n",[288,42986,42987,42989,42991,42993],{"class":290,"line":17023},[288,42988,31274],{"class":298},[288,42990,344],{"class":294},[288,42992,30996],{"class":347},[288,42994,42995],{"class":298},".b2(x)\n",[288,42997,42998,43000,43002,43004],{"class":290,"line":17028},[288,42999,31274],{"class":298},[288,43001,344],{"class":294},[288,43003,30996],{"class":347},[288,43005,43006],{"class":298},".b3(x)\n",[288,43008,43009,43011,43013,43015],{"class":290,"line":17042},[288,43010,31274],{"class":298},[288,43012,344],{"class":294},[288,43014,30996],{"class":347},[288,43016,43017],{"class":298},".b4(x)\n",[288,43019,43020,43022,43024,43026],{"class":290,"line":17054},[288,43021,31274],{"class":298},[288,43023,344],{"class":294},[288,43025,30996],{"class":347},[288,43027,43028],{"class":298},".b5(x)\n",[288,43030,43031,43033],{"class":290,"line":17059},[288,43032,14925],{"class":294},[288,43034,31382],{"class":298},[288,43036,43037],{"class":290,"line":17072},[288,43038,2572],{"emptyLinePlaceholder":217},[288,43040,43041],{"class":290,"line":17077},[288,43042,43043],{"class":357},"# 模型展示\n",[288,43045,43046,43048,43050,43052,43054],{"class":290,"line":17082},[288,43047,1703],{"class":294},[288,43049,31393],{"class":347},[288,43051,3121],{"class":294},[288,43053,31398],{"class":403},[288,43055,3911],{"class":298},[288,43057,43058,43060,43062,43064,43066,43068,43070,43072,43074],{"class":290,"line":17087},[288,43059,31410],{"class":298},[288,43061,344],{"class":294},[288,43063,30624],{"class":298},[288,43065,31417],{"class":403},[288,43067,1876],{"class":294},[288,43069,31422],{"class":298},[288,43071,1873],{"class":294},[288,43073,30649],{"class":403},[288,43075,305],{"class":298},[288,43077,43078,43080,43082],{"class":290,"line":17100},[288,43079,31462],{"class":298},[288,43081,344],{"class":294},[288,43083,43084],{"class":298},"GoogLeNet(Inception).to(device)\n",[288,43086,43087,43089,43091,43093,43095,43097,43099,43101],{"class":290,"line":17105},[288,43088,31472],{"class":347},[288,43090,31475],{"class":298},[288,43092,516],{"class":347},[288,43094,675],{"class":298},[288,43096,31674],{"class":347},[288,43098,675],{"class":298},[288,43100,31674],{"class":347},[288,43102,31488],{"class":298},[243,43104,43105],{"start":206},[246,43106,39356],{},[280,43108,43110],{"className":30551,"code":43109,"language":30553,"meta":205,"style":205},"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",[25,43111,43112,43118,43124,43134,43140,43150,43160,43170,43180,43190,43194,43205,43215,43219,43223,43227,43235,43247,43257,43273,43283,43315,43329,43339,43349,43353,43363,43377,43387,43397,43407,43413,43417,43421,43425,43429,43433,43441,43461,43465,43469,43473,43477,43481,43497,43501,43505,43513,43517,43521,43529,43533,43537,43541,43549,43553,43557,43561,43565,43573,43577,43585,43589,43597,43601,43609,43613,43621,43625,43629,43637,43641,43645,43649,43661,43685,43699,43703,43707,43711,43719,43723,43731,43735,43743,43747,43755,43759,43767,43771,43779,43783,43795,43799,43807,43811,43819,43823,43827,43831,43835,43843,43847,43863,43867,43875,43879,43883,43887,43891,43895,43899,43903,43919,43923,43935,43939,43951,43955,43967,43971,43979,43983,43991,43995,43999,44003,44009,44013,44021,44025,44041,44045,44053,44057,44073,44085,44089,44101,44105,44109,44117,44121,44125,44133,44137,44145,44149,44157,44161,44165,44207,44249,44253,44257,44273,44277,44293,44297,44301,44309,44313,44317,44329,44367,44371,44375,44383,44387,44401,44411,44417,44423,44429,44435,44439,44443,44449,44453,44457,44465,44469,44487,44491,44495,44499,44515,44519,44523,44527,44531,44535,44555,44575,44579,44583,44587,44595,44603,44607,44623,44643,44663,44667,44671,44679,44687,44691,44695,44699,44711,44715,44725,44733,44750],{"__ignoreMap":205},[288,43113,43114,43116],{"class":290,"line":291},[288,43115,30565],{"class":294},[288,43117,31995],{"class":298},[288,43119,43120,43122],{"class":290,"line":206},[288,43121,30565],{"class":294},[288,43123,32002],{"class":298},[288,43125,43126,43128,43130,43132],{"class":290,"line":1352},[288,43127,30565],{"class":294},[288,43129,32013],{"class":298},[288,43131,31556],{"class":294},[288,43133,32018],{"class":298},[288,43135,43136,43138],{"class":290,"line":1367},[288,43137,30565],{"class":294},[288,43139,30568],{"class":298},[288,43141,43142,43144,43146,43148],{"class":290,"line":1373},[288,43143,30910],{"class":294},[288,43145,31588],{"class":298},[288,43147,30565],{"class":294},[288,43149,32035],{"class":298},[288,43151,43152,43154,43156,43158],{"class":290,"line":1387},[288,43153,30910],{"class":294},[288,43155,31541],{"class":298},[288,43157,30565],{"class":294},[288,43159,31546],{"class":298},[288,43161,43162,43164,43166,43168],{"class":290,"line":1393},[288,43163,30910],{"class":294},[288,43165,31571],{"class":298},[288,43167,30565],{"class":294},[288,43169,31576],{"class":298},[288,43171,43172,43174,43176,43178],{"class":290,"line":1484},[288,43173,30565],{"class":294},[288,43175,31588],{"class":298},[288,43177,31556],{"class":294},[288,43179,31593],{"class":298},[288,43181,43182,43184,43186,43188],{"class":290,"line":1490},[288,43183,30565],{"class":294},[288,43185,31605],{"class":298},[288,43187,31556],{"class":294},[288,43189,31610],{"class":298},[288,43191,43192],{"class":290,"line":1502},[288,43193,32080],{"class":357},[288,43195,43196,43198,43200,43202],{"class":290,"line":1784},[288,43197,30910],{"class":294},[288,43199,32087],{"class":298},[288,43201,30565],{"class":294},[288,43203,43204],{"class":298}," GoogLeNet, Inception\n",[288,43206,43207,43209,43211,43213],{"class":290,"line":1789},[288,43208,30910],{"class":294},[288,43210,30913],{"class":298},[288,43212,30565],{"class":294},[288,43214,30918],{"class":298},[288,43216,43217],{"class":290,"line":1795},[288,43218,2572],{"emptyLinePlaceholder":217},[288,43220,43221],{"class":290,"line":1800},[288,43222,2572],{"emptyLinePlaceholder":217},[288,43224,43225],{"class":290,"line":1814},[288,43226,32115],{"class":357},[288,43228,43229,43231,43233],{"class":290,"line":1819},[288,43230,32120],{"class":294},[288,43232,32123],{"class":2135},[288,43234,32126],{"class":298},[288,43236,43237,43239,43241,43243,43245],{"class":290,"line":1825},[288,43238,32131],{"class":298},[288,43240,344],{"class":294},[288,43242,31628],{"class":298},[288,43244,31636],{"class":403},[288,43246,31639],{"class":298},[288,43248,43249,43251,43253,43255],{"class":290,"line":1846},[288,43250,32144],{"class":5389},[288,43252,344],{"class":294},[288,43254,31649],{"class":347},[288,43256,31639],{"class":298},[288,43258,43259,43261,43263,43265,43267,43269,43271],{"class":290,"line":1851},[288,43260,32155],{"class":5389},[288,43262,344],{"class":294},[288,43264,31666],{"class":298},[288,43266,31669],{"class":5389},[288,43268,344],{"class":294},[288,43270,35622],{"class":347},[288,43272,31677],{"class":298},[288,43274,43275,43277,43279,43281],{"class":290,"line":1865},[288,43276,32172],{"class":5389},[288,43278,344],{"class":294},[288,43280,31649],{"class":347},[288,43282,305],{"class":298},[288,43284,43285,43287,43289,43291,43293,43295,43297,43299,43301,43303,43305,43307,43309,43311,43313],{"class":290,"line":1870},[288,43286,32183],{"class":298},[288,43288,344],{"class":294},[288,43290,32188],{"class":298},[288,43292,32191],{"class":347},[288,43294,299],{"class":298},[288,43296,32196],{"class":347},[288,43298,752],{"class":294},[288,43300,7531],{"class":347},[288,43302,32203],{"class":298},[288,43304,32191],{"class":347},[288,43306,299],{"class":298},[288,43308,32210],{"class":347},[288,43310,752],{"class":294},[288,43312,7531],{"class":347},[288,43314,32217],{"class":298},[288,43316,43317,43319,43321,43323,43325,43327],{"class":290,"line":1899},[288,43318,32222],{"class":298},[288,43320,344],{"class":294},[288,43322,32227],{"class":298},[288,43324,31710],{"class":5389},[288,43326,344],{"class":294},[288,43328,31715],{"class":298},[288,43330,43331,43333,43335,43337],{"class":290,"line":1904},[288,43332,32238],{"class":5389},[288,43334,344],{"class":294},[288,43336,496],{"class":347},[288,43338,31639],{"class":298},[288,43340,43341,43343,43345,43347],{"class":290,"line":1921},[288,43342,32250],{"class":5389},[288,43344,344],{"class":294},[288,43346,31649],{"class":347},[288,43348,31639],{"class":298},[288,43350,43351],{"class":290,"line":1926},[288,43352,32261],{"class":357},[288,43354,43355,43357,43359,43361],{"class":290,"line":1931},[288,43356,32266],{"class":5389},[288,43358,344],{"class":294},[288,43360,692],{"class":347},[288,43362,305],{"class":298},[288,43364,43365,43367,43369,43371,43373,43375],{"class":290,"line":1936},[288,43366,32277],{"class":298},[288,43368,344],{"class":294},[288,43370,31707],{"class":298},[288,43372,31710],{"class":5389},[288,43374,344],{"class":294},[288,43376,32288],{"class":298},[288,43378,43379,43381,43383,43385],{"class":290,"line":1950},[288,43380,32293],{"class":5389},[288,43382,344],{"class":294},[288,43384,496],{"class":347},[288,43386,31639],{"class":298},[288,43388,43389,43391,43393,43395],{"class":290,"line":1955},[288,43390,32304],{"class":5389},[288,43392,344],{"class":294},[288,43394,31649],{"class":347},[288,43396,31639],{"class":298},[288,43398,43399,43401,43403,43405],{"class":290,"line":2749},[288,43400,32315],{"class":5389},[288,43402,344],{"class":294},[288,43404,692],{"class":347},[288,43406,305],{"class":298},[288,43408,43409,43411],{"class":290,"line":2763},[288,43410,4262],{"class":294},[288,43412,32328],{"class":298},[288,43414,43415],{"class":290,"line":2771},[288,43416,2572],{"emptyLinePlaceholder":217},[288,43418,43419],{"class":290,"line":2776},[288,43420,32337],{"class":357},[288,43422,43423],{"class":290,"line":2782},[288,43424,32342],{"class":357},[288,43426,43427],{"class":290,"line":2788},[288,43428,2572],{"emptyLinePlaceholder":217},[288,43430,43431],{"class":290,"line":2793},[288,43432,32351],{"class":357},[288,43434,43435,43437,43439],{"class":290,"line":8121},[288,43436,32120],{"class":294},[288,43438,32358],{"class":2135},[288,43440,32361],{"class":298},[288,43442,43443,43445,43447,43449,43451,43453,43455,43457,43459],{"class":290,"line":8145},[288,43444,31410],{"class":298},[288,43446,344],{"class":294},[288,43448,30624],{"class":298},[288,43450,31417],{"class":403},[288,43452,1876],{"class":294},[288,43454,31422],{"class":298},[288,43456,1873],{"class":294},[288,43458,32380],{"class":403},[288,43460,305],{"class":298},[288,43462,43463],{"class":290,"line":8150},[288,43464,2572],{"emptyLinePlaceholder":217},[288,43466,43467],{"class":290,"line":8156},[288,43468,2572],{"emptyLinePlaceholder":217},[288,43470,43471],{"class":290,"line":8183},[288,43472,32395],{"class":357},[288,43474,43475],{"class":290,"line":8188},[288,43476,32400],{"class":357},[288,43478,43479],{"class":290,"line":8194},[288,43480,32405],{"class":357},[288,43482,43483,43485,43487,43489,43491,43493,43495],{"class":290,"line":8206},[288,43484,32410],{"class":298},[288,43486,344],{"class":294},[288,43488,32415],{"class":298},[288,43490,32418],{"class":5389},[288,43492,344],{"class":294},[288,43494,32423],{"class":347},[288,43496,305],{"class":298},[288,43498,43499],{"class":290,"line":8218},[288,43500,2572],{"emptyLinePlaceholder":217},[288,43502,43503],{"class":290,"line":8230},[288,43504,32434],{"class":357},[288,43506,43507,43509,43511],{"class":290,"line":9889},[288,43508,32439],{"class":298},[288,43510,344],{"class":294},[288,43512,32444],{"class":298},[288,43514,43515],{"class":290,"line":9914},[288,43516,2572],{"emptyLinePlaceholder":217},[288,43518,43519],{"class":290,"line":9937},[288,43520,32453],{"class":357},[288,43522,43523,43525,43527],{"class":290,"line":9961},[288,43524,31462],{"class":298},[288,43526,344],{"class":294},[288,43528,32462],{"class":298},[288,43530,43531],{"class":290,"line":9966},[288,43532,32467],{"class":357},[288,43534,43535],{"class":290,"line":9971},[288,43536,32472],{"class":357},[288,43538,43539],{"class":290,"line":9976},[288,43540,32477],{"class":357},[288,43542,43543,43545,43547],{"class":290,"line":9985},[288,43544,32482],{"class":298},[288,43546,344],{"class":294},[288,43548,32487],{"class":298},[288,43550,43551],{"class":290,"line":9990},[288,43552,2572],{"emptyLinePlaceholder":217},[288,43554,43555],{"class":290,"line":9996},[288,43556,2572],{"emptyLinePlaceholder":217},[288,43558,43559],{"class":290,"line":10017},[288,43560,32500],{"class":357},[288,43562,43563],{"class":290,"line":10023},[288,43564,32505],{"class":357},[288,43566,43567,43569,43571],{"class":290,"line":10037},[288,43568,32510],{"class":298},[288,43570,344],{"class":294},[288,43572,32515],{"class":347},[288,43574,43575],{"class":290,"line":10043},[288,43576,32520],{"class":357},[288,43578,43579,43581,43583],{"class":290,"line":10070},[288,43580,32525],{"class":298},[288,43582,344],{"class":294},[288,43584,32530],{"class":298},[288,43586,43587],{"class":290,"line":10079},[288,43588,32535],{"class":357},[288,43590,43591,43593,43595],{"class":290,"line":10085},[288,43592,32540],{"class":298},[288,43594,344],{"class":294},[288,43596,32530],{"class":298},[288,43598,43599],{"class":290,"line":10093},[288,43600,32549],{"class":357},[288,43602,43603,43605,43607],{"class":290,"line":10098},[288,43604,32554],{"class":298},[288,43606,344],{"class":294},[288,43608,32530],{"class":298},[288,43610,43611],{"class":290,"line":16777},[288,43612,32563],{"class":357},[288,43614,43615,43617,43619],{"class":290,"line":16783},[288,43616,32568],{"class":298},[288,43618,344],{"class":294},[288,43620,32530],{"class":298},[288,43622,43623],{"class":290,"line":16806},[288,43624,2572],{"emptyLinePlaceholder":217},[288,43626,43627],{"class":290,"line":16812},[288,43628,32581],{"class":357},[288,43630,43631,43633,43635],{"class":290,"line":16835},[288,43632,32586],{"class":298},[288,43634,344],{"class":294},[288,43636,32591],{"class":298},[288,43638,43639],{"class":290,"line":16849},[288,43640,2572],{"emptyLinePlaceholder":217},[288,43642,43643],{"class":290,"line":16869},[288,43644,2572],{"emptyLinePlaceholder":217},[288,43646,43647],{"class":290,"line":16875},[288,43648,32604],{"class":357},[288,43650,43651,43653,43655,43657,43659],{"class":290,"line":16886},[288,43652,3373],{"class":294},[288,43654,32611],{"class":298},[288,43656,26216],{"class":294},[288,43658,32616],{"class":347},[288,43660,32619],{"class":298},[288,43662,43663,43665,43667,43669,43671,43673,43675,43677,43679,43681,43683],{"class":290,"line":16909},[288,43664,32624],{"class":347},[288,43666,299],{"class":298},[288,43668,32629],{"class":403},[288,43670,32632],{"class":347},[288,43672,881],{"class":403},[288,43674,32632],{"class":347},[288,43676,109],{"class":403},[288,43678,32641],{"class":298},[288,43680,829],{"class":294},[288,43682,516],{"class":347},[288,43684,30670],{"class":298},[288,43686,43687,43689,43691,43693,43695,43697],{"class":290,"line":16931},[288,43688,32624],{"class":347},[288,43690,299],{"class":298},[288,43692,32656],{"class":403},[288,43694,752],{"class":294},[288,43696,743],{"class":347},[288,43698,305],{"class":298},[288,43700,43701],{"class":290,"line":16936},[288,43702,2572],{"emptyLinePlaceholder":217},[288,43704,43705],{"class":290,"line":16942},[288,43706,32671],{"class":357},[288,43708,43709],{"class":290,"line":16956},[288,43710,32676],{"class":357},[288,43712,43713,43715,43717],{"class":290,"line":16969},[288,43714,32681],{"class":298},[288,43716,344],{"class":294},[288,43718,32515],{"class":347},[288,43720,43721],{"class":290,"line":16974},[288,43722,32690],{"class":357},[288,43724,43725,43727,43729],{"class":290,"line":16988},[288,43726,32695],{"class":298},[288,43728,344],{"class":294},[288,43730,3257],{"class":347},[288,43732,43733],{"class":290,"line":16993},[288,43734,32704],{"class":357},[288,43736,43737,43739,43741],{"class":290,"line":16999},[288,43738,32709],{"class":298},[288,43740,344],{"class":294},[288,43742,32515],{"class":347},[288,43744,43745],{"class":290,"line":17004},[288,43746,32718],{"class":357},[288,43748,43749,43751,43753],{"class":290,"line":17018},[288,43750,32723],{"class":298},[288,43752,344],{"class":294},[288,43754,3257],{"class":347},[288,43756,43757],{"class":290,"line":17023},[288,43758,32732],{"class":357},[288,43760,43761,43763,43765],{"class":290,"line":17028},[288,43762,32737],{"class":298},[288,43764,344],{"class":294},[288,43766,3257],{"class":347},[288,43768,43769],{"class":290,"line":17042},[288,43770,32746],{"class":357},[288,43772,43773,43775,43777],{"class":290,"line":17054},[288,43774,32751],{"class":298},[288,43776,344],{"class":294},[288,43778,3257],{"class":347},[288,43780,43781],{"class":290,"line":17059},[288,43782,32760],{"class":357},[288,43784,43785,43787,43789,43791,43793],{"class":290,"line":17072},[288,43786,3575],{"class":294},[288,43788,31774],{"class":298},[288,43790,26216],{"class":294},[288,43792,31779],{"class":347},[288,43794,32773],{"class":298},[288,43796,43797],{"class":290,"line":17077},[288,43798,32778],{"class":357},[288,43800,43801,43803,43805],{"class":290,"line":17082},[288,43802,32783],{"class":298},[288,43804,344],{"class":294},[288,43806,32788],{"class":298},[288,43808,43809],{"class":290,"line":17087},[288,43810,32793],{"class":357},[288,43812,43813,43815,43817],{"class":290,"line":17100},[288,43814,32798],{"class":298},[288,43816,344],{"class":294},[288,43818,32803],{"class":298},[288,43820,43821],{"class":290,"line":17105},[288,43822,32809],{"class":357},[288,43824,43825],{"class":290,"line":32806},[288,43826,32815],{"class":298},[288,43828,43829],{"class":290,"line":32812},[288,43830,32821],{"class":357},[288,43832,43833],{"class":290,"line":32818},[288,43834,32827],{"class":357},[288,43836,43837,43839,43841],{"class":290,"line":32824},[288,43838,32833],{"class":298},[288,43840,344],{"class":294},[288,43842,32838],{"class":298},[288,43844,43845],{"class":290,"line":32830},[288,43846,32844],{"class":357},[288,43848,43849,43851,43853,43855,43857,43859,43861],{"class":290,"line":32841},[288,43850,32850],{"class":298},[288,43852,344],{"class":294},[288,43854,32855],{"class":298},[288,43856,32858],{"class":5389},[288,43858,344],{"class":294},[288,43860,516],{"class":347},[288,43862,305],{"class":298},[288,43864,43865],{"class":290,"line":32847},[288,43866,32870],{"class":357},[288,43868,43869,43871,43873],{"class":290,"line":32867},[288,43870,32876],{"class":298},[288,43872,344],{"class":294},[288,43874,32881],{"class":298},[288,43876,43877],{"class":290,"line":32873},[288,43878,32887],{"class":357},[288,43880,43881],{"class":290,"line":32884},[288,43882,32893],{"class":298},[288,43884,43885],{"class":290,"line":32890},[288,43886,32899],{"class":357},[288,43888,43889],{"class":290,"line":32896},[288,43890,32905],{"class":298},[288,43892,43893],{"class":290,"line":32902},[288,43894,32911],{"class":357},[288,43896,43897],{"class":290,"line":32908},[288,43898,32917],{"class":298},[288,43900,43901],{"class":290,"line":32914},[288,43902,32923],{"class":357},[288,43904,43905,43907,43909,43911,43913,43915,43917],{"class":290,"line":32920},[288,43906,32929],{"class":298},[288,43908,9650],{"class":294},[288,43910,32934],{"class":298},[288,43912,752],{"class":294},[288,43914,32939],{"class":298},[288,43916,490],{"class":347},[288,43918,305],{"class":298},[288,43920,43921],{"class":290,"line":32926},[288,43922,32949],{"class":357},[288,43924,43925,43927,43929,43931,43933],{"class":290,"line":32946},[288,43926,32955],{"class":298},[288,43928,9650],{"class":294},[288,43930,32960],{"class":298},[288,43932,3121],{"class":294},[288,43934,32965],{"class":298},[288,43936,43937],{"class":290,"line":32952},[288,43938,32971],{"class":357},[288,43940,43941,43943,43945,43947,43949],{"class":290,"line":32968},[288,43942,32977],{"class":298},[288,43944,9650],{"class":294},[288,43946,32939],{"class":298},[288,43948,490],{"class":347},[288,43950,305],{"class":298},[288,43952,43953],{"class":290,"line":32974},[288,43954,32991],{"class":357},[288,43956,43957,43959,43961,43963,43965],{"class":290,"line":32988},[288,43958,3575],{"class":294},[288,43960,32999],{"class":298},[288,43962,26216],{"class":294},[288,43964,31779],{"class":347},[288,43966,33006],{"class":298},[288,43968,43969],{"class":290,"line":32994},[288,43970,33012],{"class":357},[288,43972,43973,43975,43977],{"class":290,"line":33009},[288,43974,32783],{"class":298},[288,43976,344],{"class":294},[288,43978,32788],{"class":298},[288,43980,43981],{"class":290,"line":33015},[288,43982,33027],{"class":357},[288,43984,43985,43987,43989],{"class":290,"line":33024},[288,43986,32798],{"class":298},[288,43988,344],{"class":294},[288,43990,32803],{"class":298},[288,43992,43993],{"class":290,"line":33030},[288,43994,33042],{"class":357},[288,43996,43997],{"class":290,"line":33039},[288,43998,33048],{"class":298},[288,44000,44001],{"class":290,"line":33045},[288,44002,36529],{"class":357},[288,44004,44005,44007],{"class":290,"line":33051},[288,44006,33054],{"class":294},[288,44008,33057],{"class":298},[288,44010,44011],{"class":290,"line":33060},[288,44012,33063],{"class":357},[288,44014,44015,44017,44019],{"class":290,"line":33066},[288,44016,36544],{"class":298},[288,44018,344],{"class":294},[288,44020,32838],{"class":298},[288,44022,44023],{"class":290,"line":33077},[288,44024,33080],{"class":357},[288,44026,44027,44029,44031,44033,44035,44037,44039],{"class":290,"line":33083},[288,44028,36557],{"class":298},[288,44030,344],{"class":294},[288,44032,32855],{"class":298},[288,44034,32858],{"class":5389},[288,44036,344],{"class":294},[288,44038,516],{"class":347},[288,44040,305],{"class":298},[288,44042,44043],{"class":290,"line":33102},[288,44044,33105],{"class":357},[288,44046,44047,44049,44051],{"class":290,"line":33108},[288,44048,36578],{"class":298},[288,44050,344],{"class":294},[288,44052,32881],{"class":298},[288,44054,44055],{"class":290,"line":33119},[288,44056,33122],{"class":357},[288,44058,44059,44061,44063,44065,44067,44069,44071],{"class":290,"line":33125},[288,44060,36591],{"class":298},[288,44062,9650],{"class":294},[288,44064,36596],{"class":298},[288,44066,752],{"class":294},[288,44068,32939],{"class":298},[288,44070,490],{"class":347},[288,44072,305],{"class":298},[288,44074,44075,44077,44079,44081,44083],{"class":290,"line":33145},[288,44076,36609],{"class":298},[288,44078,9650],{"class":294},[288,44080,32960],{"class":298},[288,44082,3121],{"class":294},[288,44084,32965],{"class":298},[288,44086,44087],{"class":290,"line":33161},[288,44088,36622],{"class":357},[288,44090,44091,44093,44095,44097,44099],{"class":290,"line":33167},[288,44092,36627],{"class":298},[288,44094,9650],{"class":294},[288,44096,32939],{"class":298},[288,44098,490],{"class":347},[288,44100,305],{"class":298},[288,44102,44103],{"class":290,"line":33181},[288,44104,33184],{"class":357},[288,44106,44107],{"class":290,"line":33187},[288,44108,33190],{"class":357},[288,44110,44111,44113,44115],{"class":290,"line":33193},[288,44112,33196],{"class":298},[288,44114,881],{"class":294},[288,44116,33201],{"class":298},[288,44118,44119],{"class":290,"line":33204},[288,44120,33207],{"class":357},[288,44122,44123],{"class":290,"line":33210},[288,44124,33213],{"class":357},[288,44126,44127,44129,44131],{"class":290,"line":33216},[288,44128,33219],{"class":298},[288,44130,881],{"class":294},[288,44132,33201],{"class":298},[288,44134,44135],{"class":290,"line":33226},[288,44136,33229],{"class":357},[288,44138,44139,44141,44143],{"class":290,"line":33232},[288,44140,33235],{"class":298},[288,44142,881],{"class":294},[288,44144,33240],{"class":298},[288,44146,44147],{"class":290,"line":33243},[288,44148,33246],{"class":357},[288,44150,44151,44153,44155],{"class":290,"line":33249},[288,44152,33252],{"class":298},[288,44154,881],{"class":294},[288,44156,33240],{"class":298},[288,44158,44159],{"class":290,"line":33259},[288,44160,2572],{"emptyLinePlaceholder":217},[288,44162,44163],{"class":290,"line":33264},[288,44164,33267],{"class":357},[288,44166,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205],{"class":290,"line":33270},[288,44168,32624],{"class":347},[288,44170,299],{"class":298},[288,44172,3764],{"class":403},[288,44174,32632],{"class":347},[288,44176,33281],{"class":403},[288,44178,1193],{"class":347},[288,44180,33286],{"class":294},[288,44182,1243],{"class":347},[288,44184,33291],{"class":403},[288,44186,1193],{"class":347},[288,44188,33286],{"class":294},[288,44190,1243],{"class":347},[288,44192,3764],{"class":403},[288,44194,33302],{"class":298},[288,44196,829],{"class":294},[288,44198,516],{"class":347},[288,44200,33309],{"class":298},[288,44202,829],{"class":294},[288,44204,516],{"class":347},[288,44206,33316],{"class":298},[288,44208,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247],{"class":290,"line":33319},[288,44210,32624],{"class":347},[288,44212,299],{"class":298},[288,44214,3764],{"class":403},[288,44216,32632],{"class":347},[288,44218,33330],{"class":403},[288,44220,1193],{"class":347},[288,44222,33286],{"class":294},[288,44224,1243],{"class":347},[288,44226,33339],{"class":403},[288,44228,1193],{"class":347},[288,44230,33286],{"class":294},[288,44232,1243],{"class":347},[288,44234,3764],{"class":403},[288,44236,33350],{"class":298},[288,44238,829],{"class":294},[288,44240,516],{"class":347},[288,44242,33357],{"class":298},[288,44244,829],{"class":294},[288,44246,516],{"class":347},[288,44248,33316],{"class":298},[288,44250,44251],{"class":290,"line":33366},[288,44252,2572],{"emptyLinePlaceholder":217},[288,44254,44255],{"class":290,"line":33371},[288,44256,33374],{"class":357},[288,44258,44259,44261,44263,44265,44267,44269,44271],{"class":290,"line":33377},[288,44260,2669],{"class":294},[288,44262,33382],{"class":298},[288,44264,829],{"class":294},[288,44266,516],{"class":347},[288,44268,1237],{"class":298},[288,44270,1257],{"class":294},[288,44272,33393],{"class":298},[288,44274,44275],{"class":290,"line":33396},[288,44276,33399],{"class":357},[288,44278,44279,44281,44283,44285,44287,44289,44291],{"class":290,"line":33402},[288,44280,33405],{"class":298},[288,44282,338],{"class":347},[288,44284,344],{"class":294},[288,44286,33412],{"class":298},[288,44288,829],{"class":294},[288,44290,516],{"class":347},[288,44292,33419],{"class":298},[288,44294,44295],{"class":290,"line":33422},[288,44296,33425],{"class":357},[288,44298,44299],{"class":290,"line":33428},[288,44300,33431],{"class":357},[288,44302,44303,44305,44307],{"class":290,"line":33434},[288,44304,33437],{"class":298},[288,44306,344],{"class":294},[288,44308,32487],{"class":298},[288,44310,44311],{"class":290,"line":33444},[288,44312,2572],{"emptyLinePlaceholder":217},[288,44314,44315],{"class":290,"line":33449},[288,44316,33452],{"class":357},[288,44318,44319,44321,44323,44325,44327],{"class":290,"line":33455},[288,44320,33458],{"class":298},[288,44322,344],{"class":294},[288,44324,33463],{"class":298},[288,44326,829],{"class":294},[288,44328,33468],{"class":298},[288,44330,44331,44333,44335,44337,44339,44341,44343,44345,44347,44349,44351,44353,44355,44357,44359,44361,44363,44365],{"class":290,"line":33471},[288,44332,32624],{"class":347},[288,44334,299],{"class":298},[288,44336,33478],{"class":403},[288,44338,1193],{"class":347},[288,44340,33483],{"class":294},[288,44342,1243],{"class":347},[288,44344,841],{"class":403},[288,44346,1193],{"class":347},[288,44348,33483],{"class":294},[288,44350,1243],{"class":347},[288,44352,33496],{"class":403},[288,44354,33499],{"class":298},[288,44356,33502],{"class":294},[288,44358,1204],{"class":347},[288,44360,33507],{"class":298},[288,44362,625],{"class":294},[288,44364,1204],{"class":347},[288,44366,30670],{"class":298},[288,44368,44369],{"class":290,"line":33516},[288,44370,36906],{"class":357},[288,44372,44373],{"class":290,"line":33522},[288,44374,36911],{"class":357},[288,44376,44377,44379,44381],{"class":290,"line":33528},[288,44378,36916],{"class":298},[288,44380,33540],{"class":403},[288,44382,305],{"class":298},[288,44384,44385],{"class":290,"line":33534},[288,44386,33560],{"class":357},[288,44388,44389,44391,44393,44395,44397,44399],{"class":290,"line":33545},[288,44390,33566],{"class":298},[288,44392,344],{"class":294},[288,44394,33571],{"class":298},[288,44396,33574],{"class":5389},[288,44398,344],{"class":294},[288,44400,1718],{"class":298},[288,44402,44403,44405,44407,44409],{"class":290,"line":33551},[288,44404,33584],{"class":403},[288,44406,1156],{"class":298},[288,44408,33589],{"class":347},[288,44410,33592],{"class":298},[288,44412,44413,44415],{"class":290,"line":33557},[288,44414,33598],{"class":403},[288,44416,33601],{"class":298},[288,44418,44419,44421],{"class":290,"line":33563},[288,44420,33607],{"class":403},[288,44422,33610],{"class":298},[288,44424,44425,44427],{"class":290,"line":33581},[288,44426,33616],{"class":403},[288,44428,33619],{"class":298},[288,44430,44431,44433],{"class":290,"line":33595},[288,44432,33625],{"class":403},[288,44434,33628],{"class":298},[288,44436,44437],{"class":290,"line":33604},[288,44438,33634],{"class":298},[288,44440,44441],{"class":290,"line":33613},[288,44442,33640],{"class":357},[288,44444,44445,44447],{"class":290,"line":33622},[288,44446,4262],{"class":294},[288,44448,33648],{"class":298},[288,44450,44451],{"class":290,"line":33631},[288,44452,2572],{"emptyLinePlaceholder":217},[288,44454,44455],{"class":290,"line":33637},[288,44456,33659],{"class":357},[288,44458,44459,44461,44463],{"class":290,"line":33643},[288,44460,32120],{"class":294},[288,44462,33667],{"class":2135},[288,44464,33670],{"class":298},[288,44466,44467],{"class":290,"line":33651},[288,44468,33676],{"class":357},[288,44470,44471,44473,44475,44477,44479,44481,44483,44485],{"class":290,"line":33656},[288,44472,33682],{"class":298},[288,44474,31866],{"class":5389},[288,44476,344],{"class":294},[288,44478,299],{"class":298},[288,44480,795],{"class":347},[288,44482,675],{"class":298},[288,44484,590],{"class":347},[288,44486,30670],{"class":298},[288,44488,44489],{"class":290,"line":33662},[288,44490,33702],{"class":357},[288,44492,44493],{"class":290,"line":33673},[288,44494,33708],{"class":357},[288,44496,44497],{"class":290,"line":33679},[288,44498,33714],{"class":357},[288,44500,44501,44503,44505,44507,44509,44511,44513],{"class":290,"line":33699},[288,44502,31900],{"class":298},[288,44504,516],{"class":347},[288,44506,675],{"class":298},[288,44508,376],{"class":347},[288,44510,675],{"class":298},[288,44512,516],{"class":347},[288,44514,305],{"class":298},[288,44516,44517],{"class":290,"line":33705},[288,44518,33737],{"class":357},[288,44520,44521],{"class":290,"line":33711},[288,44522,33743],{"class":357},[288,44524,44525],{"class":290,"line":33717},[288,44526,33749],{"class":357},[288,44528,44529],{"class":290,"line":33734},[288,44530,33755],{"class":357},[288,44532,44533],{"class":290,"line":33740},[288,44534,33761],{"class":357},[288,44536,44537,44539,44541,44543,44545,44547,44549,44551,44553],{"class":290,"line":33746},[288,44538,33767],{"class":298},[288,44540,33770],{"class":403},[288,44542,33773],{"class":298},[288,44544,33776],{"class":403},[288,44546,675],{"class":298},[288,44548,33781],{"class":5389},[288,44550,344],{"class":294},[288,44552,33786],{"class":403},[288,44554,305],{"class":298},[288,44556,44557,44559,44561,44563,44565,44567,44569,44571,44573],{"class":290,"line":33752},[288,44558,33767],{"class":298},[288,44560,33770],{"class":403},[288,44562,33798],{"class":298},[288,44564,33801],{"class":403},[288,44566,675],{"class":298},[288,44568,33781],{"class":5389},[288,44570,344],{"class":294},[288,44572,33810],{"class":403},[288,44574,305],{"class":298},[288,44576,44577],{"class":290,"line":33758},[288,44578,33818],{"class":357},[288,44580,44581],{"class":290,"line":33764},[288,44582,33824],{"class":298},[288,44584,44585],{"class":290,"line":33791},[288,44586,33830],{"class":357},[288,44588,44589,44591,44593],{"class":290,"line":33815},[288,44590,33836],{"class":298},[288,44592,33839],{"class":403},[288,44594,305],{"class":298},[288,44596,44597,44599,44601],{"class":290,"line":33821},[288,44598,33847],{"class":298},[288,44600,33850],{"class":403},[288,44602,305],{"class":298},[288,44604,44605],{"class":290,"line":33827},[288,44606,33858],{"class":357},[288,44608,44609,44611,44613,44615,44617,44619,44621],{"class":290,"line":33833},[288,44610,31900],{"class":298},[288,44612,516],{"class":347},[288,44614,675],{"class":298},[288,44616,376],{"class":347},[288,44618,675],{"class":298},[288,44620,376],{"class":347},[288,44622,305],{"class":298},[288,44624,44625,44627,44629,44631,44633,44635,44637,44639,44641],{"class":290,"line":33844},[288,44626,33767],{"class":298},[288,44628,33770],{"class":403},[288,44630,33885],{"class":298},[288,44632,33776],{"class":403},[288,44634,675],{"class":298},[288,44636,33781],{"class":5389},[288,44638,344],{"class":294},[288,44640,33896],{"class":403},[288,44642,305],{"class":298},[288,44644,44645,44647,44649,44651,44653,44655,44657,44659,44661],{"class":290,"line":33855},[288,44646,33767],{"class":298},[288,44648,33770],{"class":403},[288,44650,33908],{"class":298},[288,44652,33801],{"class":403},[288,44654,675],{"class":298},[288,44656,33781],{"class":5389},[288,44658,344],{"class":294},[288,44660,33919],{"class":403},[288,44662,305],{"class":298},[288,44664,44665],{"class":290,"line":33861},[288,44666,33927],{"class":357},[288,44668,44669],{"class":290,"line":33878},[288,44670,33824],{"class":298},[288,44672,44673,44675,44677],{"class":290,"line":33901},[288,44674,33836],{"class":298},[288,44676,33770],{"class":403},[288,44678,305],{"class":298},[288,44680,44681,44683,44685],{"class":290,"line":33924},[288,44682,33847],{"class":298},[288,44684,33949],{"class":403},[288,44686,305],{"class":298},[288,44688,44689],{"class":290,"line":33930},[288,44690,33957],{"class":298},[288,44692,44693],{"class":290,"line":33935},[288,44694,2572],{"emptyLinePlaceholder":217},[288,44696,44697],{"class":290,"line":33944},[288,44698,33968],{"class":357},[288,44700,44701,44703,44705,44707,44709],{"class":290,"line":33954},[288,44702,1703],{"class":294},[288,44704,31393],{"class":347},[288,44706,3121],{"class":294},[288,44708,31398],{"class":403},[288,44710,3911],{"class":298},[288,44712,44713],{"class":290,"line":33960},[288,44714,33987],{"class":357},[288,44716,44717,44720,44722],{"class":290,"line":33965},[288,44718,44719],{"class":298},"    GoogLeNet",[288,44721,344],{"class":294},[288,44723,44724],{"class":298},"GoogLeNet(Inception)\n",[288,44726,44727,44729,44731],{"class":290,"line":33971},[288,44728,34004],{"class":298},[288,44730,344],{"class":294},[288,44732,34009],{"class":298},[288,44734,44735,44737,44739,44742,44744,44746,44748],{"class":290,"line":33984},[288,44736,33566],{"class":298},[288,44738,344],{"class":294},[288,44740,44741],{"class":298},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[288,44743,34022],{"class":5389},[288,44745,344],{"class":294},[288,44747,1248],{"class":347},[288,44749,305],{"class":298},[288,44751,44752],{"class":290,"line":33990},[288,44753,34034],{"class":298},[243,44755,44756],{"start":1352},[246,44757,40747],{},[280,44759,44761],{"className":30551,"code":44760,"language":30553,"meta":205,"style":205},"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",[25,44762,44763,44769,44779,44789,44793,44803,44814,44818,44822,44826,44834,44850,44860,44876,44886,44900,44904,44914,44924,44934,44940,44944,44948,44956,44960,44976,44984,44988,44992,45000,45008,45012,45016,45020,45024,45030,45034,45044,45052,45060,45064,45068,45072,45080,45084,45100,45104,45108,45112,45124,45128,45140,45144,45148,45160,45164,45174,45178,45182,45194,45198,45206,45210,45214,45222,45226,45234,45238,45242,45246,45250,45254,45270,45278,45282,45286,45334,45340,45344,45354,45362,45370,45374,45378,45382,45386,45394,45398,45414,45418,45426,45434],{"__ignoreMap":205},[288,44764,44765,44767],{"class":290,"line":291},[288,44766,30565],{"class":294},[288,44768,30568],{"class":298},[288,44770,44771,44773,44775,44777],{"class":290,"line":206},[288,44772,30565],{"class":294},[288,44774,31588],{"class":298},[288,44776,31556],{"class":294},[288,44778,31593],{"class":298},[288,44780,44781,44783,44785,44787],{"class":290,"line":1352},[288,44782,30910],{"class":294},[288,44784,31571],{"class":298},[288,44786,30565],{"class":294},[288,44788,31576],{"class":298},[288,44790,44791],{"class":290,"line":1367},[288,44792,34095],{"class":357},[288,44794,44795,44797,44799,44801],{"class":290,"line":1373},[288,44796,30910],{"class":294},[288,44798,31541],{"class":298},[288,44800,30565],{"class":294},[288,44802,31546],{"class":298},[288,44804,44805,44807,44809,44811],{"class":290,"line":1387},[288,44806,30910],{"class":294},[288,44808,32087],{"class":298},[288,44810,30565],{"class":294},[288,44812,44813],{"class":298}," GoogLeNet,Inception\n",[288,44815,44816],{"class":290,"line":1393},[288,44817,2572],{"emptyLinePlaceholder":217},[288,44819,44820],{"class":290,"line":1484},[288,44821,2572],{"emptyLinePlaceholder":217},[288,44823,44824],{"class":290,"line":1490},[288,44825,34124],{"class":357},[288,44827,44828,44830,44832],{"class":290,"line":1502},[288,44829,32120],{"class":294},[288,44831,34131],{"class":2135},[288,44833,32126],{"class":298},[288,44835,44836,44838,44840,44842,44844,44846,44848],{"class":290,"line":1784},[288,44837,34138],{"class":298},[288,44839,344],{"class":294},[288,44841,31628],{"class":298},[288,44843,31631],{"class":5389},[288,44845,344],{"class":294},[288,44847,31636],{"class":403},[288,44849,31639],{"class":298},[288,44851,44852,44854,44856,44858],{"class":290,"line":1789},[288,44853,34155],{"class":5389},[288,44855,344],{"class":294},[288,44857,34160],{"class":347},[288,44859,31639],{"class":298},[288,44861,44862,44864,44866,44868,44870,44872,44874],{"class":290,"line":1795},[288,44863,34167],{"class":5389},[288,44865,344],{"class":294},[288,44867,31666],{"class":298},[288,44869,31669],{"class":5389},[288,44871,344],{"class":294},[288,44873,35622],{"class":347},[288,44875,31677],{"class":298},[288,44877,44878,44880,44882,44884],{"class":290,"line":1800},[288,44879,34184],{"class":5389},[288,44881,344],{"class":294},[288,44883,31649],{"class":347},[288,44885,305],{"class":298},[288,44887,44888,44890,44892,44894,44896,44898],{"class":290,"line":1814},[288,44889,34195],{"class":298},[288,44891,344],{"class":294},[288,44893,31707],{"class":298},[288,44895,31710],{"class":5389},[288,44897,344],{"class":294},[288,44899,34206],{"class":298},[288,44901,44902],{"class":290,"line":1819},[288,44903,34211],{"class":357},[288,44905,44906,44908,44910,44912],{"class":290,"line":1825},[288,44907,34216],{"class":5389},[288,44909,344],{"class":294},[288,44911,516],{"class":347},[288,44913,31639],{"class":298},[288,44915,44916,44918,44920,44922],{"class":290,"line":1846},[288,44917,34227],{"class":5389},[288,44919,344],{"class":294},[288,44921,31649],{"class":347},[288,44923,31639],{"class":298},[288,44925,44926,44928,44930,44932],{"class":290,"line":1851},[288,44927,34238],{"class":5389},[288,44929,344],{"class":294},[288,44931,490],{"class":347},[288,44933,305],{"class":298},[288,44935,44936,44938],{"class":290,"line":1865},[288,44937,4262],{"class":294},[288,44939,34251],{"class":298},[288,44941,44942],{"class":290,"line":1870},[288,44943,2572],{"emptyLinePlaceholder":217},[288,44945,44946],{"class":290,"line":1899},[288,44947,34260],{"class":357},[288,44949,44950,44952,44954],{"class":290,"line":1904},[288,44951,32120],{"class":294},[288,44953,34267],{"class":2135},[288,44955,34270],{"class":298},[288,44957,44958],{"class":290,"line":1921},[288,44959,34275],{"class":357},[288,44961,44962,44964,44966,44968,44970,44972,44974],{"class":290,"line":1926},[288,44963,31410],{"class":298},[288,44965,344],{"class":294},[288,44967,31417],{"class":403},[288,44969,1876],{"class":294},[288,44971,31422],{"class":298},[288,44973,1873],{"class":294},[288,44975,34292],{"class":403},[288,44977,44978,44980,44982],{"class":290,"line":1931},[288,44979,31462],{"class":298},[288,44981,344],{"class":294},[288,44983,32462],{"class":298},[288,44985,44986],{"class":290,"line":1936},[288,44987,2572],{"emptyLinePlaceholder":217},[288,44989,44990],{"class":290,"line":1950},[288,44991,34309],{"class":357},[288,44993,44994,44996,44998],{"class":290,"line":1955},[288,44995,34314],{"class":298},[288,44997,344],{"class":294},[288,44999,32515],{"class":347},[288,45001,45002,45004,45006],{"class":290,"line":2749},[288,45003,34323],{"class":298},[288,45005,344],{"class":294},[288,45007,3257],{"class":347},[288,45009,45010],{"class":290,"line":2763},[288,45011,2572],{"emptyLinePlaceholder":217},[288,45013,45014],{"class":290,"line":2771},[288,45015,34336],{"class":357},[288,45017,45018],{"class":290,"line":2776},[288,45019,34341],{"class":357},[288,45021,45022],{"class":290,"line":2782},[288,45023,34346],{"class":357},[288,45025,45026,45028],{"class":290,"line":2788},[288,45027,34351],{"class":294},[288,45029,33057],{"class":298},[288,45031,45032],{"class":290,"line":2793},[288,45033,34358],{"class":357},[288,45035,45036,45038,45040,45042],{"class":290,"line":8121},[288,45037,3575],{"class":294},[288,45039,34365],{"class":298},[288,45041,26216],{"class":294},[288,45043,34370],{"class":298},[288,45045,45046,45048,45050],{"class":290,"line":8145},[288,45047,34375],{"class":298},[288,45049,344],{"class":294},[288,45051,34380],{"class":298},[288,45053,45054,45056,45058],{"class":290,"line":8150},[288,45055,34385],{"class":298},[288,45057,344],{"class":294},[288,45059,34390],{"class":298},[288,45061,45062],{"class":290,"line":8156},[288,45063,34395],{"class":357},[288,45065,45066],{"class":290,"line":8183},[288,45067,33048],{"class":298},[288,45069,45070],{"class":290,"line":8188},[288,45071,34404],{"class":357},[288,45073,45074,45076,45078],{"class":290,"line":8194},[288,45075,32833],{"class":298},[288,45077,344],{"class":294},[288,45079,34413],{"class":298},[288,45081,45082],{"class":290,"line":8206},[288,45083,34418],{"class":357},[288,45085,45086,45088,45090,45092,45094,45096,45098],{"class":290,"line":8218},[288,45087,32850],{"class":298},[288,45089,344],{"class":294},[288,45091,32855],{"class":298},[288,45093,32858],{"class":5389},[288,45095,344],{"class":294},[288,45097,516],{"class":347},[288,45099,305],{"class":298},[288,45101,45102],{"class":290,"line":8230},[288,45103,34439],{"class":357},[288,45105,45106],{"class":290,"line":9889},[288,45107,34444],{"class":357},[288,45109,45110],{"class":290,"line":9914},[288,45111,34449],{"class":357},[288,45113,45114,45116,45118,45120,45122],{"class":290,"line":9937},[288,45115,34454],{"class":298},[288,45117,9650],{"class":294},[288,45119,32960],{"class":298},[288,45121,3121],{"class":294},[288,45123,34463],{"class":298},[288,45125,45126],{"class":290,"line":9961},[288,45127,34468],{"class":357},[288,45129,45130,45132,45134,45136,45138],{"class":290,"line":9966},[288,45131,34473],{"class":298},[288,45133,9650],{"class":294},[288,45135,34478],{"class":298},[288,45137,490],{"class":347},[288,45139,305],{"class":298},[288,45141,45142],{"class":290,"line":9971},[288,45143,2572],{"emptyLinePlaceholder":217},[288,45145,45146],{"class":290,"line":9976},[288,45147,34491],{"class":357},[288,45149,45150,45152,45154,45156,45158],{"class":290,"line":9985},[288,45151,34496],{"class":298},[288,45153,344],{"class":294},[288,45155,34501],{"class":298},[288,45157,881],{"class":294},[288,45159,34506],{"class":298},[288,45161,45162],{"class":290,"line":9990},[288,45163,34511],{"class":357},[288,45165,45166,45168,45170,45172],{"class":290,"line":9996},[288,45167,32624],{"class":347},[288,45169,299],{"class":298},[288,45171,34520],{"class":403},[288,45173,34523],{"class":298},[288,45175,45176],{"class":290,"line":10017},[288,45177,2572],{"emptyLinePlaceholder":217},[288,45179,45180],{"class":290,"line":10023},[288,45181,34532],{"class":357},[288,45183,45184,45186,45188,45190,45192],{"class":290,"line":10037},[288,45185,1703],{"class":294},[288,45187,31393],{"class":347},[288,45189,3121],{"class":294},[288,45191,31398],{"class":403},[288,45193,3911],{"class":298},[288,45195,45196],{"class":290,"line":10043},[288,45197,34549],{"class":357},[288,45199,45200,45202,45204],{"class":290,"line":10070},[288,45201,31462],{"class":298},[288,45203,344],{"class":294},[288,45205,44724],{"class":298},[288,45207,45208],{"class":290,"line":10079},[288,45209,34562],{"class":357},[288,45211,45212],{"class":290,"line":10085},[288,45213,34567],{"class":357},[288,45215,45216,45218,45220],{"class":290,"line":10093},[288,45217,34572],{"class":298},[288,45219,34575],{"class":403},[288,45221,30670],{"class":298},[288,45223,45224],{"class":290,"line":10098},[288,45225,34582],{"class":357},[288,45227,45228,45230,45232],{"class":290,"line":16777},[288,45229,34195],{"class":298},[288,45231,344],{"class":294},[288,45233,34591],{"class":298},[288,45235,45236],{"class":290,"line":16783},[288,45237,34596],{"class":357},[288,45239,45240],{"class":290,"line":16806},[288,45241,34601],{"class":298},[288,45243,45244],{"class":290,"line":16812},[288,45245,2572],{"emptyLinePlaceholder":217},[288,45247,45248],{"class":290,"line":16835},[288,45249,34610],{"class":357},[288,45251,45252],{"class":290,"line":16849},[288,45253,34615],{"class":357},[288,45255,45256,45258,45260,45262,45264,45266,45268],{"class":290,"line":16869},[288,45257,31410],{"class":298},[288,45259,344],{"class":294},[288,45261,31417],{"class":403},[288,45263,1876],{"class":294},[288,45265,31422],{"class":298},[288,45267,1873],{"class":294},[288,45269,34292],{"class":403},[288,45271,45272,45274,45276],{"class":290,"line":16875},[288,45273,31462],{"class":298},[288,45275,344],{"class":294},[288,45277,32462],{"class":298},[288,45279,45280],{"class":290,"line":16886},[288,45281,34644],{"class":357},[288,45283,45284],{"class":290,"line":16909},[288,45285,34649],{"class":357},[288,45287,45288,45290,45292,45294,45296,45298,45300,45302,45304,45306,45308,45310,45312,45314,45316,45318,45320,45322,45324,45326,45328,45330,45332],{"class":290,"line":16931},[288,45289,34654],{"class":298},[288,45291,344],{"class":294},[288,45293,1187],{"class":298},[288,45295,34661],{"class":403},[288,45297,675],{"class":298},[288,45299,34666],{"class":403},[288,45301,675],{"class":298},[288,45303,34671],{"class":403},[288,45305,675],{"class":298},[288,45307,34676],{"class":403},[288,45309,675],{"class":298},[288,45311,34681],{"class":403},[288,45313,675],{"class":298},[288,45315,34686],{"class":403},[288,45317,675],{"class":298},[288,45319,34691],{"class":403},[288,45321,675],{"class":298},[288,45323,34696],{"class":403},[288,45325,675],{"class":298},[288,45327,34701],{"class":403},[288,45329,675],{"class":298},[288,45331,34706],{"class":403},[288,45333,33419],{"class":298},[288,45335,45336,45338],{"class":290,"line":16936},[288,45337,34351],{"class":294},[288,45339,33057],{"class":298},[288,45341,45342],{"class":290,"line":16942},[288,45343,34719],{"class":357},[288,45345,45346,45348,45350,45352],{"class":290,"line":16956},[288,45347,3575],{"class":294},[288,45349,34726],{"class":298},[288,45351,26216],{"class":294},[288,45353,34370],{"class":298},[288,45355,45356,45358,45360],{"class":290,"line":16969},[288,45357,32783],{"class":298},[288,45359,344],{"class":294},[288,45361,32788],{"class":298},[288,45363,45364,45366,45368],{"class":290,"line":16974},[288,45365,32798],{"class":298},[288,45367,344],{"class":294},[288,45369,32803],{"class":298},[288,45371,45372],{"class":290,"line":16988},[288,45373,2572],{"emptyLinePlaceholder":217},[288,45375,45376],{"class":290,"line":16993},[288,45377,34755],{"class":357},[288,45379,45380],{"class":290,"line":16999},[288,45381,33048],{"class":298},[288,45383,45384],{"class":290,"line":17004},[288,45385,34764],{"class":357},[288,45387,45388,45390,45392],{"class":290,"line":17018},[288,45389,32833],{"class":298},[288,45391,344],{"class":294},[288,45393,32838],{"class":298},[288,45395,45396],{"class":290,"line":17023},[288,45397,34777],{"class":357},[288,45399,45400,45402,45404,45406,45408,45410,45412],{"class":290,"line":17028},[288,45401,32850],{"class":298},[288,45403,344],{"class":294},[288,45405,32855],{"class":298},[288,45407,32858],{"class":5389},[288,45409,344],{"class":294},[288,45411,516],{"class":347},[288,45413,305],{"class":298},[288,45415,45416],{"class":290,"line":17042},[288,45417,34798],{"class":357},[288,45419,45420,45422,45424],{"class":290,"line":17054},[288,45421,34803],{"class":298},[288,45423,344],{"class":294},[288,45425,34808],{"class":298},[288,45427,45428,45430,45432],{"class":290,"line":17059},[288,45429,34813],{"class":298},[288,45431,344],{"class":294},[288,45433,34818],{"class":298},[288,45435,45436,45438,45440,45442,45444,45446,45448,45450],{"class":290,"line":17072},[288,45437,34823],{"class":347},[288,45439,299],{"class":298},[288,45441,34828],{"class":403},[288,45443,34831],{"class":298},[288,45445,34834],{"class":403},[288,45447,675],{"class":298},[288,45449,34839],{"class":403},[288,45451,34842],{"class":298},[260,45453,45455],{"id":45454},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45457,45458],{},"猫狗分类任务",[19,45460,45461],{},"划分数据集和验证集",[280,45463,45465],{"className":30551,"code":45464,"language":30553,"meta":205,"style":205},"# 创建脚本，用于划分数据集和验证集\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",[25,45466,45467,45472,45479,45484,45495,45502,45506,45516,45530,45539,45543,45548,45558,45578,45582,45587,45597,45608,45621,45625,45630,45639,45649,45660,45664,45669,45679,45683,45688,45693,45698,45703,45708,45712,45722,45749,45762,45774,45801,45806,45811,45825,45830,45842,45857,45872,45880,45884,45889,45895,45907,45920,45925,45930,45935,45985,45991,45995],{"__ignoreMap":205},[288,45468,45469],{"class":290,"line":291},[288,45470,45471],{"class":357},"# 创建脚本，用于划分数据集和验证集\n",[288,45473,45474,45476],{"class":290,"line":206},[288,45475,30565],{"class":294},[288,45477,45478],{"class":298}," os\n",[288,45480,45481],{"class":290,"line":1352},[288,45482,45483],{"class":357},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[288,45485,45486,45488,45491,45493],{"class":290,"line":1367},[288,45487,30910],{"class":294},[288,45489,45490],{"class":298}," shutil ",[288,45492,30565],{"class":294},[288,45494,31995],{"class":298},[288,45496,45497,45499],{"class":290,"line":1373},[288,45498,30565],{"class":294},[288,45500,45501],{"class":298}," random\n",[288,45503,45504],{"class":290,"line":1387},[288,45505,2572],{"emptyLinePlaceholder":217},[288,45507,45508,45510,45513],{"class":290,"line":1393},[288,45509,32120],{"class":294},[288,45511,45512],{"class":2135}," mkfile",[288,45514,45515],{"class":298},"(file):\n",[288,45517,45518,45520,45522,45525,45528],{"class":290,"line":1484},[288,45519,3273],{"class":294},[288,45521,39103],{"class":294},[288,45523,45524],{"class":298}," os.path.exists(",[288,45526,45527],{"class":5389},"file",[288,45529,30959],{"class":298},[288,45531,45532,45535,45537],{"class":290,"line":1490},[288,45533,45534],{"class":298},"        os.makedirs(",[288,45536,45527],{"class":5389},[288,45538,305],{"class":298},[288,45540,45541],{"class":290,"line":1502},[288,45542,2572],{"emptyLinePlaceholder":217},[288,45544,45545],{"class":290,"line":1784},[288,45546,45547],{"class":357},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[288,45549,45550,45553,45555],{"class":290,"line":1789},[288,45551,45552],{"class":298},"file_path",[288,45554,344],{"class":294},[288,45556,45557],{"class":403},"'data_cat_dog'\n",[288,45559,45560,45563,45565,45568,45570,45573,45575],{"class":290,"line":1795},[288,45561,45562],{"class":298},"flower_class",[288,45564,344],{"class":294},[288,45566,45567],{"class":298},"[cla ",[288,45569,3197],{"class":294},[288,45571,45572],{"class":298}," cla ",[288,45574,26216],{"class":294},[288,45576,45577],{"class":298}," os.listdir(file_path)]\n",[288,45579,45580],{"class":290,"line":1800},[288,45581,2572],{"emptyLinePlaceholder":217},[288,45583,45584],{"class":290,"line":1814},[288,45585,45586],{"class":357},"# 创建训练集train文件夹\n",[288,45588,45589,45592,45595],{"class":290,"line":1819},[288,45590,45591],{"class":298},"mkfile(",[288,45593,45594],{"class":403},"'data\u002Ftrain'",[288,45596,305],{"class":298},[288,45598,45599,45601,45603,45605],{"class":290,"line":1825},[288,45600,3197],{"class":294},[288,45602,45572],{"class":298},[288,45604,26216],{"class":294},[288,45606,45607],{"class":298}," flower_class:\n",[288,45609,45610,45613,45616,45618],{"class":290,"line":1846},[288,45611,45612],{"class":298},"    mkfile(",[288,45614,45615],{"class":403},"'data\u002Ftrain\u002F'",[288,45617,778],{"class":294},[288,45619,45620],{"class":298},"cla)\n",[288,45622,45623],{"class":290,"line":1851},[288,45624,2572],{"emptyLinePlaceholder":217},[288,45626,45627],{"class":290,"line":1865},[288,45628,45629],{"class":357},"# 创建验证集val文件夹\n",[288,45631,45632,45634,45637],{"class":290,"line":1870},[288,45633,45591],{"class":298},[288,45635,45636],{"class":403},"'data\u002Ftest'",[288,45638,305],{"class":298},[288,45640,45641,45643,45645,45647],{"class":290,"line":1899},[288,45642,3197],{"class":294},[288,45644,45572],{"class":298},[288,45646,26216],{"class":294},[288,45648,45607],{"class":298},[288,45650,45651,45653,45656,45658],{"class":290,"line":1904},[288,45652,45612],{"class":298},[288,45654,45655],{"class":403},"'data\u002Ftest\u002F'",[288,45657,778],{"class":294},[288,45659,45620],{"class":298},[288,45661,45662],{"class":290,"line":1921},[288,45663,2572],{"emptyLinePlaceholder":217},[288,45665,45666],{"class":290,"line":1926},[288,45667,45668],{"class":357},"# 划分比例，训练集：测试集=9：1\n",[288,45670,45671,45674,45676],{"class":290,"line":1931},[288,45672,45673],{"class":298},"split_rate",[288,45675,344],{"class":294},[288,45677,45678],{"class":347},"0.1\n",[288,45680,45681],{"class":290,"line":1936},[288,45682,2572],{"emptyLinePlaceholder":217},[288,45684,45685],{"class":290,"line":1950},[288,45686,45687],{"class":357},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[288,45689,45690],{"class":290,"line":1955},[288,45691,45692],{"class":357},"# cla_path：当前类别的原始图片路径\n",[288,45694,45695],{"class":290,"line":2749},[288,45696,45697],{"class":357},"# images：当前类别下所有图片的文件名列表\n",[288,45699,45700],{"class":290,"line":2763},[288,45701,45702],{"class":357},"# num：该类别图片总数\n",[288,45704,45705],{"class":290,"line":2771},[288,45706,45707],{"class":357},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[288,45709,45710],{"class":290,"line":2776},[288,45711,2572],{"emptyLinePlaceholder":217},[288,45713,45714,45716,45718,45720],{"class":290,"line":2782},[288,45715,3197],{"class":294},[288,45717,45572],{"class":298},[288,45719,26216],{"class":294},[288,45721,45607],{"class":298},[288,45723,45724,45727,45729,45732,45734,45737,45740,45742,45744,45746],{"class":290,"line":2788},[288,45725,45726],{"class":298},"    cla_path ",[288,45728,344],{"class":294},[288,45730,45731],{"class":298}," file_path ",[288,45733,778],{"class":294},[288,45735,45736],{"class":403}," '\u002F'",[288,45738,45739],{"class":294}," +",[288,45741,45572],{"class":298},[288,45743,778],{"class":294},[288,45745,45736],{"class":403},[288,45747,45748],{"class":357},"  # 某一类别的子目录\n",[288,45750,45751,45754,45756,45759],{"class":290,"line":2793},[288,45752,45753],{"class":298},"    images ",[288,45755,344],{"class":294},[288,45757,45758],{"class":298}," os.listdir(cla_path)  ",[288,45760,45761],{"class":357},"# iamges 列表存储了该目录下所有图像的名称\n",[288,45763,45764,45767,45769,45771],{"class":290,"line":8121},[288,45765,45766],{"class":298},"    num ",[288,45768,344],{"class":294},[288,45770,7504],{"class":347},[288,45772,45773],{"class":298},"(images)\n",[288,45775,45776,45779,45781,45784,45786,45788,45790,45793,45795,45798],{"class":290,"line":8145},[288,45777,45778],{"class":298},"    eval_index ",[288,45780,344],{"class":294},[288,45782,45783],{"class":298}," random.sample(images, ",[288,45785,790],{"class":5389},[288,45787,344],{"class":294},[288,45789,302],{"class":347},[288,45791,45792],{"class":298},"(num ",[288,45794,752],{"class":294},[288,45796,45797],{"class":298}," split_rate))  ",[288,45799,45800],{"class":357},"# 从images列表中随机抽取 k 个图像名称\n",[288,45802,45803],{"class":290,"line":8150},[288,45804,45805],{"class":357},"    # 遍历该类别下的所有图片\n",[288,45807,45808],{"class":290,"line":8156},[288,45809,45810],{"class":357},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[288,45812,45813,45815,45818,45820,45822],{"class":290,"line":8183},[288,45814,3373],{"class":294},[288,45816,45817],{"class":298}," index, image ",[288,45819,26216],{"class":294},[288,45821,31779],{"class":347},[288,45823,45824],{"class":298},"(images):\n",[288,45826,45827],{"class":290,"line":8188},[288,45828,45829],{"class":357},"        # eval_index 中保存验证集val的图像名称\n",[288,45831,45832,45834,45837,45839],{"class":290,"line":8194},[288,45833,2669],{"class":294},[288,45835,45836],{"class":298}," image ",[288,45838,26216],{"class":294},[288,45840,45841],{"class":298}," eval_index:\n",[288,45843,45844,45847,45849,45852,45854],{"class":290,"line":8206},[288,45845,45846],{"class":298},"            image_path ",[288,45848,344],{"class":294},[288,45850,45851],{"class":298}," cla_path ",[288,45853,778],{"class":294},[288,45855,45856],{"class":298}," image\n",[288,45858,45859,45862,45864,45867,45869],{"class":290,"line":8218},[288,45860,45861],{"class":298},"            new_path ",[288,45863,344],{"class":294},[288,45865,45866],{"class":403}," 'data\u002Ftest\u002F'",[288,45868,45739],{"class":294},[288,45870,45871],{"class":298}," cla\n",[288,45873,45874,45877],{"class":290,"line":8230},[288,45875,45876],{"class":298},"            copy(image_path, new_path)  ",[288,45878,45879],{"class":357},"# 将选中的图像复制到新路径\n",[288,45881,45882],{"class":290,"line":9889},[288,45883,2572],{"emptyLinePlaceholder":217},[288,45885,45886],{"class":290,"line":9914},[288,45887,45888],{"class":357},"        # 其余的图像保存在训练集train中\n",[288,45890,45891,45893],{"class":290,"line":9937},[288,45892,2706],{"class":294},[288,45894,3911],{"class":298},[288,45896,45897,45899,45901,45903,45905],{"class":290,"line":9961},[288,45898,45846],{"class":298},[288,45900,344],{"class":294},[288,45902,45851],{"class":298},[288,45904,778],{"class":294},[288,45906,45856],{"class":298},[288,45908,45909,45911,45913,45916,45918],{"class":290,"line":9966},[288,45910,45861],{"class":298},[288,45912,344],{"class":294},[288,45914,45915],{"class":403}," 'data\u002Ftrain\u002F'",[288,45917,45739],{"class":294},[288,45919,45871],{"class":298},[288,45921,45922],{"class":290,"line":9971},[288,45923,45924],{"class":298},"            copy(image_path, new_path)\n",[288,45926,45927],{"class":290,"line":9976},[288,45928,45929],{"class":357},"            # 打印进度条信息\n",[288,45931,45932],{"class":290,"line":9985},[288,45933,45934],{"class":357},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[288,45936,45937,45939,45941,45943,45946,45948,45950,45953,45955,45957,45959,45962,45965,45967,45969,45972,45975,45977,45979,45982],{"class":290,"line":9990},[288,45938,32624],{"class":347},[288,45940,299],{"class":298},[288,45942,109],{"class":403},[288,45944,45945],{"class":347},"\\r",[288,45947,1187],{"class":403},[288,45949,32632],{"class":347},[288,45951,45952],{"class":403},"] processing [",[288,45954,32632],{"class":347},[288,45956,881],{"class":403},[288,45958,32632],{"class":347},[288,45960,45961],{"class":403},"]\"",[288,45963,45964],{"class":298},".format(cla, index ",[288,45966,778],{"class":294},[288,45968,25291],{"class":347},[288,45970,45971],{"class":298},", num), ",[288,45973,45974],{"class":5389},"end",[288,45976,344],{"class":294},[288,45978,7825],{"class":403},[288,45980,45981],{"class":298},")  ",[288,45983,45984],{"class":357},"# processing bar\n",[288,45986,45987,45989],{"class":290,"line":9996},[288,45988,31472],{"class":347},[288,45990,2148],{"class":298},[288,45992,45993],{"class":290,"line":10017},[288,45994,2572],{"emptyLinePlaceholder":217},[288,45996,45997,45999,46001,46004],{"class":290,"line":10023},[288,45998,30588],{"class":347},[288,46000,299],{"class":298},[288,46002,46003],{"class":403},"\"processing done!\"",[288,46005,305],{"class":298},[19,46007,46008],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22171,46010,46012],{"id":46011},"_242模型代码","2.4.2.模型代码",[19,46014,46015],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[280,46017,46019],{"className":30551,"code":46018,"language":30553,"meta":205,"style":205},"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",[25,46020,46021,46027,46037,46047,46051,46067,46075,46089,46099,46103,46133,46137,46171,46217,46221,46255,46301,46305,46309,46343,46373,46377,46385,46399,46421,46443,46461,46465,46479,46483,46487,46503,46507,46515,46529,46539,46583,46587,46615,46619,46629,46657,46661,46697,46701,46729,46733,46743,46775,46807,46835,46839,46849,46881,46913,46945,46977,47009,47037,47041,47051,47083,47115,47127,47131,47143,47147,47151,47163,47171,47191,47195,47199,47203,47207,47211,47215,47229,47237,47245,47257,47271,47279,47283,47291,47301,47311,47321,47331,47341,47347,47351,47355,47367,47387,47395],{"__ignoreMap":205},[288,46022,46023,46025],{"class":290,"line":291},[288,46024,30565],{"class":294},[288,46026,30568],{"class":298},[288,46028,46029,46031,46033,46035],{"class":290,"line":206},[288,46030,30910],{"class":294},[288,46032,30913],{"class":298},[288,46034,30565],{"class":294},[288,46036,30918],{"class":298},[288,46038,46039,46041,46043,46045],{"class":290,"line":1352},[288,46040,30910],{"class":294},[288,46042,30930],{"class":298},[288,46044,30565],{"class":294},[288,46046,30935],{"class":298},[288,46048,46049],{"class":290,"line":1367},[288,46050,2572],{"emptyLinePlaceholder":217},[288,46052,46053,46055,46057,46059,46061,46063,46065],{"class":290,"line":1373},[288,46054,14867],{"class":294},[288,46056,41666],{"class":2135},[288,46058,299],{"class":298},[288,46060,30951],{"class":2135},[288,46062,855],{"class":298},[288,46064,30956],{"class":2135},[288,46066,30959],{"class":298},[288,46068,46069,46071,46073],{"class":290,"line":1387},[288,46070,30974],{"class":294},[288,46072,30977],{"class":347},[288,46074,41685],{"class":298},[288,46076,46077,46079,46081,46083,46085,46087],{"class":290,"line":1393},[288,46078,30990],{"class":347},[288,46080,41692],{"class":298},[288,46082,30996],{"class":347},[288,46084,30999],{"class":298},[288,46086,31002],{"class":347},[288,46088,2148],{"class":298},[288,46090,46091,46093,46095,46097],{"class":290,"line":1484},[288,46092,31018],{"class":347},[288,46094,34944],{"class":298},[288,46096,344],{"class":294},[288,46098,34949],{"class":298},[288,46100,46101],{"class":290,"line":1490},[288,46102,41715],{"class":357},[288,46104,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131],{"class":290,"line":1502},[288,46106,31018],{"class":347},[288,46108,41722],{"class":298},[288,46110,344],{"class":294},[288,46112,31026],{"class":298},[288,46114,31029],{"class":5389},[288,46116,344],{"class":294},[288,46118,41733],{"class":298},[288,46120,31038],{"class":5389},[288,46122,344],{"class":294},[288,46124,41740],{"class":298},[288,46126,31047],{"class":5389},[288,46128,344],{"class":294},[288,46130,516],{"class":347},[288,46132,305],{"class":298},[288,46134,46135],{"class":290,"line":1784},[288,46136,41753],{"class":357},[288,46138,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169],{"class":290,"line":1789},[288,46140,31018],{"class":347},[288,46142,41760],{"class":298},[288,46144,344],{"class":294},[288,46146,31026],{"class":298},[288,46148,31029],{"class":5389},[288,46150,344],{"class":294},[288,46152,41733],{"class":298},[288,46154,31038],{"class":5389},[288,46156,344],{"class":294},[288,46158,41777],{"class":298},[288,46160,490],{"class":347},[288,46162,41782],{"class":298},[288,46164,31047],{"class":5389},[288,46166,344],{"class":294},[288,46168,516],{"class":347},[288,46170,305],{"class":298},[288,46172,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215],{"class":290,"line":1795},[288,46174,31018],{"class":347},[288,46176,41797],{"class":298},[288,46178,344],{"class":294},[288,46180,31026],{"class":298},[288,46182,31029],{"class":5389},[288,46184,344],{"class":294},[288,46186,41777],{"class":298},[288,46188,490],{"class":347},[288,46190,41782],{"class":298},[288,46192,31038],{"class":5389},[288,46194,344],{"class":294},[288,46196,41777],{"class":298},[288,46198,516],{"class":347},[288,46200,41782],{"class":298},[288,46202,31047],{"class":5389},[288,46204,344],{"class":294},[288,46206,370],{"class":347},[288,46208,675],{"class":298},[288,46210,31056],{"class":5389},[288,46212,344],{"class":294},[288,46214,516],{"class":347},[288,46216,305],{"class":298},[288,46218,46219],{"class":290,"line":1800},[288,46220,41842],{"class":357},[288,46222,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253],{"class":290,"line":1814},[288,46224,31018],{"class":347},[288,46226,41849],{"class":298},[288,46228,344],{"class":294},[288,46230,31026],{"class":298},[288,46232,31029],{"class":5389},[288,46234,344],{"class":294},[288,46236,41733],{"class":298},[288,46238,31038],{"class":5389},[288,46240,344],{"class":294},[288,46242,41866],{"class":298},[288,46244,490],{"class":347},[288,46246,41782],{"class":298},[288,46248,31047],{"class":5389},[288,46250,344],{"class":294},[288,46252,516],{"class":347},[288,46254,305],{"class":298},[288,46256,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297,46299],{"class":290,"line":1819},[288,46258,31018],{"class":347},[288,46260,41885],{"class":298},[288,46262,344],{"class":294},[288,46264,31026],{"class":298},[288,46266,31029],{"class":5389},[288,46268,344],{"class":294},[288,46270,41866],{"class":298},[288,46272,490],{"class":347},[288,46274,41782],{"class":298},[288,46276,31038],{"class":5389},[288,46278,344],{"class":294},[288,46280,41866],{"class":298},[288,46282,516],{"class":347},[288,46284,41782],{"class":298},[288,46286,31047],{"class":5389},[288,46288,344],{"class":294},[288,46290,616],{"class":347},[288,46292,675],{"class":298},[288,46294,31056],{"class":5389},[288,46296,344],{"class":294},[288,46298,376],{"class":347},[288,46300,305],{"class":298},[288,46302,46303],{"class":290,"line":1825},[288,46304,41930],{"class":357},[288,46306,46307],{"class":290,"line":1846},[288,46308,41935],{"class":357},[288,46310,46311,46313,46315,46317,46319,46321,46323,46325,46327,46329,46331,46333,46335,46337,46339,46341],{"class":290,"line":1851},[288,46312,31018],{"class":347},[288,46314,41942],{"class":298},[288,46316,344],{"class":294},[288,46318,35002],{"class":298},[288,46320,31047],{"class":5389},[288,46322,344],{"class":294},[288,46324,370],{"class":347},[288,46326,675],{"class":298},[288,46328,31102],{"class":5389},[288,46330,344],{"class":294},[288,46332,516],{"class":347},[288,46334,675],{"class":298},[288,46336,31056],{"class":5389},[288,46338,344],{"class":294},[288,46340,516],{"class":347},[288,46342,305],{"class":298},[288,46344,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371],{"class":290,"line":1865},[288,46346,31018],{"class":347},[288,46348,41977],{"class":298},[288,46350,344],{"class":294},[288,46352,31026],{"class":298},[288,46354,31029],{"class":5389},[288,46356,344],{"class":294},[288,46358,41733],{"class":298},[288,46360,31038],{"class":5389},[288,46362,344],{"class":294},[288,46364,41994],{"class":298},[288,46366,31047],{"class":5389},[288,46368,344],{"class":294},[288,46370,516],{"class":347},[288,46372,305],{"class":298},[288,46374,46375],{"class":290,"line":1870},[288,46376,2572],{"emptyLinePlaceholder":217},[288,46378,46379,46381,46383],{"class":290,"line":1899},[288,46380,30974],{"class":294},[288,46382,31266],{"class":2135},[288,46384,31269],{"class":298},[288,46386,46387,46389,46391,46393,46395,46397],{"class":290,"line":1904},[288,46388,42019],{"class":298},[288,46390,344],{"class":294},[288,46392,30996],{"class":347},[288,46394,35357],{"class":298},[288,46396,30996],{"class":347},[288,46398,42030],{"class":298},[288,46400,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419],{"class":290,"line":1921},[288,46402,7258],{"class":298},[288,46404,344],{"class":294},[288,46406,30996],{"class":347},[288,46408,35357],{"class":298},[288,46410,30996],{"class":347},[288,46412,42045],{"class":298},[288,46414,30996],{"class":347},[288,46416,35357],{"class":298},[288,46418,30996],{"class":347},[288,46420,42054],{"class":298},[288,46422,46423,46425,46427,46429,46431,46433,46435,46437,46439,46441],{"class":290,"line":1926},[288,46424,42059],{"class":298},[288,46426,344],{"class":294},[288,46428,30996],{"class":347},[288,46430,35357],{"class":298},[288,46432,30996],{"class":347},[288,46434,42070],{"class":298},[288,46436,30996],{"class":347},[288,46438,35357],{"class":298},[288,46440,30996],{"class":347},[288,46442,42079],{"class":298},[288,46444,46445,46447,46449,46451,46453,46455,46457,46459],{"class":290,"line":1931},[288,46446,42084],{"class":298},[288,46448,344],{"class":294},[288,46450,30996],{"class":347},[288,46452,35357],{"class":298},[288,46454,30996],{"class":347},[288,46456,42095],{"class":298},[288,46458,30996],{"class":347},[288,46460,42100],{"class":298},[288,46462,46463],{"class":290,"line":1936},[288,46464,42105],{"class":357},[288,46466,46467,46469,46471,46473,46475,46477],{"class":290,"line":1950},[288,46468,14925],{"class":294},[288,46470,42112],{"class":298},[288,46472,32858],{"class":5389},[288,46474,344],{"class":294},[288,46476,516],{"class":347},[288,46478,305],{"class":298},[288,46480,46481],{"class":290,"line":1955},[288,46482,2572],{"emptyLinePlaceholder":217},[288,46484,46485],{"class":290,"line":2749},[288,46486,42133],{"class":357},[288,46488,46489,46491,46493,46495,46497,46499,46501],{"class":290,"line":2763},[288,46490,14867],{"class":294},[288,46492,42140],{"class":2135},[288,46494,299],{"class":298},[288,46496,30951],{"class":2135},[288,46498,855],{"class":298},[288,46500,30956],{"class":2135},[288,46502,30959],{"class":298},[288,46504,46505],{"class":290,"line":2771},[288,46506,42155],{"class":357},[288,46508,46509,46511,46513],{"class":290,"line":2776},[288,46510,30974],{"class":294},[288,46512,30977],{"class":347},[288,46514,42164],{"class":298},[288,46516,46517,46519,46521,46523,46525,46527],{"class":290,"line":2782},[288,46518,30990],{"class":347},[288,46520,42171],{"class":298},[288,46522,30996],{"class":347},[288,46524,30999],{"class":298},[288,46526,31002],{"class":347},[288,46528,2148],{"class":298},[288,46530,46531,46533,46535,46537],{"class":290,"line":2788},[288,46532,31018],{"class":347},[288,46534,42186],{"class":298},[288,46536,344],{"class":294},[288,46538,38182],{"class":298},[288,46540,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581],{"class":290,"line":2793},[288,46542,38187],{"class":298},[288,46544,31029],{"class":5389},[288,46546,344],{"class":294},[288,46548,370],{"class":347},[288,46550,675],{"class":298},[288,46552,31038],{"class":5389},[288,46554,344],{"class":294},[288,46556,502],{"class":347},[288,46558,675],{"class":298},[288,46560,31047],{"class":5389},[288,46562,344],{"class":294},[288,46564,666],{"class":347},[288,46566,675],{"class":298},[288,46568,31102],{"class":5389},[288,46570,344],{"class":294},[288,46572,376],{"class":347},[288,46574,675],{"class":298},[288,46576,31056],{"class":5389},[288,46578,344],{"class":294},[288,46580,370],{"class":347},[288,46582,38220],{"class":298},[288,46584,46585],{"class":290,"line":8121},[288,46586,38225],{"class":298},[288,46588,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613],{"class":290,"line":8145},[288,46590,38270],{"class":298},[288,46592,31047],{"class":5389},[288,46594,344],{"class":294},[288,46596,370],{"class":347},[288,46598,675],{"class":298},[288,46600,31102],{"class":5389},[288,46602,344],{"class":294},[288,46604,376],{"class":347},[288,46606,675],{"class":298},[288,46608,31056],{"class":5389},[288,46610,344],{"class":294},[288,46612,516],{"class":347},[288,46614,305],{"class":298},[288,46616,46617],{"class":290,"line":8150},[288,46618,38299],{"class":298},[288,46620,46621,46623,46625,46627],{"class":290,"line":8156},[288,46622,31018],{"class":347},[288,46624,42277],{"class":298},[288,46626,344],{"class":294},[288,46628,38182],{"class":298},[288,46630,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655],{"class":290,"line":8183},[288,46632,38187],{"class":298},[288,46634,31029],{"class":5389},[288,46636,344],{"class":294},[288,46638,502],{"class":347},[288,46640,675],{"class":298},[288,46642,31038],{"class":5389},[288,46644,344],{"class":294},[288,46646,502],{"class":347},[288,46648,675],{"class":298},[288,46650,31047],{"class":5389},[288,46652,344],{"class":294},[288,46654,516],{"class":347},[288,46656,38220],{"class":298},[288,46658,46659],{"class":290,"line":8188},[288,46660,38225],{"class":298},[288,46662,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695],{"class":290,"line":8194},[288,46664,38187],{"class":298},[288,46666,31029],{"class":5389},[288,46668,344],{"class":294},[288,46670,502],{"class":347},[288,46672,675],{"class":298},[288,46674,31038],{"class":5389},[288,46676,344],{"class":294},[288,46678,42332],{"class":347},[288,46680,675],{"class":298},[288,46682,31047],{"class":5389},[288,46684,344],{"class":294},[288,46686,370],{"class":347},[288,46688,675],{"class":298},[288,46690,31056],{"class":5389},[288,46692,344],{"class":294},[288,46694,516],{"class":347},[288,46696,38220],{"class":298},[288,46698,46699],{"class":290,"line":8206},[288,46700,38225],{"class":298},[288,46702,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727],{"class":290,"line":8218},[288,46704,38270],{"class":298},[288,46706,31047],{"class":5389},[288,46708,344],{"class":294},[288,46710,370],{"class":347},[288,46712,675],{"class":298},[288,46714,31102],{"class":5389},[288,46716,344],{"class":294},[288,46718,376],{"class":347},[288,46720,675],{"class":298},[288,46722,31056],{"class":5389},[288,46724,344],{"class":294},[288,46726,516],{"class":347},[288,46728,305],{"class":298},[288,46730,46731],{"class":290,"line":8230},[288,46732,38299],{"class":298},[288,46734,46735,46737,46739,46741],{"class":290,"line":9889},[288,46736,31018],{"class":347},[288,46738,42393],{"class":298},[288,46740,344],{"class":294},[288,46742,38182],{"class":298},[288,46744,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773],{"class":290,"line":9914},[288,46746,42402],{"class":298},[288,46748,42332],{"class":347},[288,46750,675],{"class":298},[288,46752,502],{"class":347},[288,46754,42411],{"class":298},[288,46756,508],{"class":347},[288,46758,675],{"class":298},[288,46760,32243],{"class":347},[288,46762,42420],{"class":298},[288,46764,898],{"class":347},[288,46766,675],{"class":298},[288,46768,496],{"class":347},[288,46770,42429],{"class":298},[288,46772,496],{"class":347},[288,46774,38220],{"class":298},[288,46776,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805],{"class":290,"line":9937},[288,46778,42402],{"class":298},[288,46780,35043],{"class":347},[288,46782,675],{"class":298},[288,46784,32243],{"class":347},[288,46786,42411],{"class":298},[288,46788,32243],{"class":347},[288,46790,675],{"class":298},[288,46792,42332],{"class":347},[288,46794,42420],{"class":298},[288,46796,496],{"class":347},[288,46798,675],{"class":298},[288,46800,508],{"class":347},[288,46802,42429],{"class":298},[288,46804,502],{"class":347},[288,46806,38220],{"class":298},[288,46808,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833],{"class":290,"line":9961},[288,46810,38270],{"class":298},[288,46812,31047],{"class":5389},[288,46814,344],{"class":294},[288,46816,370],{"class":347},[288,46818,675],{"class":298},[288,46820,31102],{"class":5389},[288,46822,344],{"class":294},[288,46824,376],{"class":347},[288,46826,675],{"class":298},[288,46828,31056],{"class":5389},[288,46830,344],{"class":294},[288,46832,516],{"class":347},[288,46834,305],{"class":298},[288,46836,46837],{"class":290,"line":9966},[288,46838,38299],{"class":298},[288,46840,46841,46843,46845,46847],{"class":290,"line":9971},[288,46842,31018],{"class":347},[288,46844,42504],{"class":298},[288,46846,344],{"class":294},[288,46848,38182],{"class":298},[288,46850,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879],{"class":290,"line":9976},[288,46852,42402],{"class":298},[288,46854,42515],{"class":347},[288,46856,675],{"class":298},[288,46858,42332],{"class":347},[288,46860,42411],{"class":298},[288,46862,508],{"class":347},[288,46864,675],{"class":298},[288,46866,42528],{"class":347},[288,46868,42420],{"class":298},[288,46870,898],{"class":347},[288,46872,675],{"class":298},[288,46874,904],{"class":347},[288,46876,42429],{"class":298},[288,46878,502],{"class":347},[288,46880,38220],{"class":298},[288,46882,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911],{"class":290,"line":9985},[288,46884,42402],{"class":298},[288,46886,38630],{"class":347},[288,46888,675],{"class":298},[288,46890,21221],{"class":347},[288,46892,42411],{"class":298},[288,46894,915],{"class":347},[288,46896,675],{"class":298},[288,46898,31674],{"class":347},[288,46900,42420],{"class":298},[288,46902,1097],{"class":347},[288,46904,675],{"class":298},[288,46906,502],{"class":347},[288,46908,42429],{"class":298},[288,46910,502],{"class":347},[288,46912,38220],{"class":298},[288,46914,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943],{"class":290,"line":9990},[288,46916,42402],{"class":298},[288,46918,38630],{"class":347},[288,46920,675],{"class":298},[288,46922,32243],{"class":347},[288,46924,42411],{"class":298},[288,46926,32243],{"class":347},[288,46928,675],{"class":298},[288,46930,35043],{"class":347},[288,46932,42420],{"class":298},[288,46934,1097],{"class":347},[288,46936,675],{"class":298},[288,46938,502],{"class":347},[288,46940,42429],{"class":298},[288,46942,502],{"class":347},[288,46944,38220],{"class":298},[288,46946,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975],{"class":290,"line":9996},[288,46948,42402],{"class":298},[288,46950,38630],{"class":347},[288,46952,675],{"class":298},[288,46954,915],{"class":347},[288,46956,42411],{"class":298},[288,46958,32243],{"class":347},[288,46960,675],{"class":298},[288,46962,42625],{"class":347},[288,46964,42420],{"class":298},[288,46966,496],{"class":347},[288,46968,675],{"class":298},[288,46970,502],{"class":347},[288,46972,42429],{"class":298},[288,46974,502],{"class":347},[288,46976,38220],{"class":298},[288,46978,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007],{"class":290,"line":10017},[288,46980,42402],{"class":298},[288,46982,42646],{"class":347},[288,46984,675],{"class":298},[288,46986,35043],{"class":347},[288,46988,42411],{"class":298},[288,46990,21221],{"class":347},[288,46992,675],{"class":298},[288,46994,42659],{"class":347},[288,46996,42420],{"class":298},[288,46998,496],{"class":347},[288,47000,675],{"class":298},[288,47002,32243],{"class":347},[288,47004,42429],{"class":298},[288,47006,32243],{"class":347},[288,47008,38220],{"class":298},[288,47010,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033,47035],{"class":290,"line":10023},[288,47012,38270],{"class":298},[288,47014,31047],{"class":5389},[288,47016,344],{"class":294},[288,47018,370],{"class":347},[288,47020,675],{"class":298},[288,47022,31102],{"class":5389},[288,47024,344],{"class":294},[288,47026,376],{"class":347},[288,47028,675],{"class":298},[288,47030,31056],{"class":5389},[288,47032,344],{"class":294},[288,47034,516],{"class":347},[288,47036,305],{"class":298},[288,47038,47039],{"class":290,"line":10037},[288,47040,38299],{"class":298},[288,47042,47043,47045,47047,47049],{"class":290,"line":10043},[288,47044,31018],{"class":347},[288,47046,42712],{"class":298},[288,47048,344],{"class":294},[288,47050,38182],{"class":298},[288,47052,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081],{"class":290,"line":10070},[288,47054,42402],{"class":298},[288,47056,42723],{"class":347},[288,47058,675],{"class":298},[288,47060,35043],{"class":347},[288,47062,42411],{"class":298},[288,47064,21221],{"class":347},[288,47066,675],{"class":298},[288,47068,42659],{"class":347},[288,47070,42420],{"class":298},[288,47072,496],{"class":347},[288,47074,675],{"class":298},[288,47076,32243],{"class":347},[288,47078,42429],{"class":298},[288,47080,32243],{"class":347},[288,47082,38220],{"class":298},[288,47084,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107,47109,47111,47113],{"class":290,"line":10079},[288,47086,42402],{"class":298},[288,47088,42723],{"class":347},[288,47090,675],{"class":298},[288,47092,35113],{"class":347},[288,47094,42411],{"class":298},[288,47096,42332],{"class":347},[288,47098,675],{"class":298},[288,47100,35113],{"class":347},[288,47102,42420],{"class":298},[288,47104,904],{"class":347},[288,47106,675],{"class":298},[288,47108,32243],{"class":347},[288,47110,42429],{"class":298},[288,47112,32243],{"class":347},[288,47114,38220],{"class":298},[288,47116,47117,47119,47121,47123,47125],{"class":290,"line":10085},[288,47118,42786],{"class":298},[288,47120,516],{"class":347},[288,47122,675],{"class":298},[288,47124,516],{"class":347},[288,47126,42795],{"class":298},[288,47128,47129],{"class":290,"line":10093},[288,47130,38963],{"class":298},[288,47132,47133,47135,47137,47139,47141],{"class":290,"line":10098},[288,47134,38968],{"class":298},[288,47136,42806],{"class":347},[288,47138,675],{"class":298},[288,47140,376],{"class":347},[288,47142,305],{"class":298},[288,47144,47145],{"class":290,"line":16777},[288,47146,38299],{"class":298},[288,47148,47149],{"class":290,"line":16783},[288,47150,42821],{"class":357},[288,47152,47153,47155,47157,47159,47161],{"class":290,"line":16806},[288,47154,3575],{"class":294},[288,47156,39041],{"class":298},[288,47158,26216],{"class":294},[288,47160,39046],{"class":347},[288,47162,39049],{"class":298},[288,47164,47165,47167,47169],{"class":290,"line":16812},[288,47166,4814],{"class":294},[288,47168,39061],{"class":347},[288,47170,39064],{"class":298},[288,47172,47173,47175,47177,47179,47181,47183,47185,47187,47189],{"class":290,"line":16835},[288,47174,39074],{"class":298},[288,47176,42848],{"class":5389},[288,47178,344],{"class":294},[288,47180,42853],{"class":403},[288,47182,675],{"class":298},[288,47184,39077],{"class":5389},[288,47186,344],{"class":294},[288,47188,39082],{"class":403},[288,47190,305],{"class":298},[288,47192,47193],{"class":290,"line":16849},[288,47194,42868],{"class":357},[288,47196,47197],{"class":290,"line":16869},[288,47198,42873],{"class":357},[288,47200,47201],{"class":290,"line":16875},[288,47202,42878],{"class":357},[288,47204,47205],{"class":290,"line":16886},[288,47206,42883],{"class":357},[288,47208,47209],{"class":290,"line":16909},[288,47210,42888],{"class":357},[288,47212,47213],{"class":290,"line":16931},[288,47214,42893],{"class":357},[288,47216,47217,47219,47221,47223,47225,47227],{"class":290,"line":16936},[288,47218,39094],{"class":294},[288,47220,39097],{"class":298},[288,47222,39100],{"class":294},[288,47224,39103],{"class":294},[288,47226,39106],{"class":347},[288,47228,3911],{"class":298},[288,47230,47231,47233,47235],{"class":290,"line":16942},[288,47232,39118],{"class":298},[288,47234,490],{"class":347},[288,47236,305],{"class":298},[288,47238,47239,47241,47243],{"class":290,"line":16956},[288,47240,42920],{"class":294},[288,47242,39061],{"class":347},[288,47244,39137],{"class":298},[288,47246,47247,47249,47251,47253,47255],{"class":290,"line":16969},[288,47248,42929],{"class":298},[288,47250,490],{"class":347},[288,47252,675],{"class":298},[288,47254,39159],{"class":347},[288,47256,305],{"class":298},[288,47258,47259,47261,47263,47265,47267,47269],{"class":290,"line":16974},[288,47260,42942],{"class":294},[288,47262,39097],{"class":298},[288,47264,39100],{"class":294},[288,47266,39103],{"class":294},[288,47268,39106],{"class":347},[288,47270,3911],{"class":298},[288,47272,47273,47275,47277],{"class":290,"line":16988},[288,47274,42957],{"class":298},[288,47276,490],{"class":347},[288,47278,305],{"class":298},[288,47280,47281],{"class":290,"line":16993},[288,47282,35338],{"class":357},[288,47284,47285,47287,47289],{"class":290,"line":16999},[288,47286,30974],{"class":294},[288,47288,31266],{"class":2135},[288,47290,31269],{"class":298},[288,47292,47293,47295,47297,47299],{"class":290,"line":17004},[288,47294,31274],{"class":298},[288,47296,344],{"class":294},[288,47298,30996],{"class":347},[288,47300,42984],{"class":298},[288,47302,47303,47305,47307,47309],{"class":290,"line":17018},[288,47304,31274],{"class":298},[288,47306,344],{"class":294},[288,47308,30996],{"class":347},[288,47310,42995],{"class":298},[288,47312,47313,47315,47317,47319],{"class":290,"line":17023},[288,47314,31274],{"class":298},[288,47316,344],{"class":294},[288,47318,30996],{"class":347},[288,47320,43006],{"class":298},[288,47322,47323,47325,47327,47329],{"class":290,"line":17028},[288,47324,31274],{"class":298},[288,47326,344],{"class":294},[288,47328,30996],{"class":347},[288,47330,43017],{"class":298},[288,47332,47333,47335,47337,47339],{"class":290,"line":17042},[288,47334,31274],{"class":298},[288,47336,344],{"class":294},[288,47338,30996],{"class":347},[288,47340,43028],{"class":298},[288,47342,47343,47345],{"class":290,"line":17054},[288,47344,14925],{"class":294},[288,47346,31382],{"class":298},[288,47348,47349],{"class":290,"line":17059},[288,47350,2572],{"emptyLinePlaceholder":217},[288,47352,47353],{"class":290,"line":17072},[288,47354,43043],{"class":357},[288,47356,47357,47359,47361,47363,47365],{"class":290,"line":17077},[288,47358,1703],{"class":294},[288,47360,31393],{"class":347},[288,47362,3121],{"class":294},[288,47364,31398],{"class":403},[288,47366,3911],{"class":298},[288,47368,47369,47371,47373,47375,47377,47379,47381,47383,47385],{"class":290,"line":17082},[288,47370,31410],{"class":298},[288,47372,344],{"class":294},[288,47374,30624],{"class":298},[288,47376,31417],{"class":403},[288,47378,1876],{"class":294},[288,47380,31422],{"class":298},[288,47382,1873],{"class":294},[288,47384,30649],{"class":403},[288,47386,305],{"class":298},[288,47388,47389,47391,47393],{"class":290,"line":17087},[288,47390,31462],{"class":298},[288,47392,344],{"class":294},[288,47394,43084],{"class":298},[288,47396,47397,47399,47401,47403,47405,47407,47409,47411],{"class":290,"line":17100},[288,47398,31472],{"class":347},[288,47400,31475],{"class":298},[288,47402,516],{"class":347},[288,47404,675],{"class":298},[288,47406,31674],{"class":347},[288,47408,675],{"class":298},[288,47410,31674],{"class":347},[288,47412,31488],{"class":298},[22171,47414,47416],{"id":47415},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47418,47419],{},"计算图片的均值与方差，用于训练中归一化处理操作",[280,47421,47423],{"className":30551,"code":47422,"language":30553,"meta":205,"style":205},"# 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",[25,47424,47425,47430,47443,47448,47454,47459,47469,47473,47478,47488,47492,47497,47507,47524,47528,47533,47545,47557,47588,47597,47607,47617,47621,47626,47641,47645,47650,47655,47660,47670,47675,47700,47704,47709,47724,47728,47741,47745,47750,47755,47760,47765,47770,47780,47790,47813,47821,47829,47837,47841,47853,47857,47862,47866,47870,47877,47897,47921,47928,47942,47947,47952,47956,47970,47974,47986],{"__ignoreMap":205},[288,47426,47427],{"class":290,"line":291},[288,47428,47429],{"class":357},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[288,47431,47432,47434,47437,47440],{"class":290,"line":206},[288,47433,30910],{"class":294},[288,47435,47436],{"class":347}," PIL",[288,47438,47439],{"class":294}," import",[288,47441,47442],{"class":298}," Image\n",[288,47444,47445],{"class":290,"line":1352},[288,47446,47447],{"class":357},"# os 用来处理文件夹和文件路径\n",[288,47449,47450,47452],{"class":290,"line":1367},[288,47451,30565],{"class":294},[288,47453,45478],{"class":298},[288,47455,47456],{"class":290,"line":1373},[288,47457,47458],{"class":357},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[288,47460,47461,47463,47465,47467],{"class":290,"line":1387},[288,47462,30565],{"class":294},[288,47464,31553],{"class":298},[288,47466,31556],{"class":294},[288,47468,31559],{"class":298},[288,47470,47471],{"class":290,"line":1393},[288,47472,2572],{"emptyLinePlaceholder":217},[288,47474,47475],{"class":290,"line":1484},[288,47476,47477],{"class":357},"# 文件夹路径，包含所有图片文件\n",[288,47479,47480,47483,47485],{"class":290,"line":1490},[288,47481,47482],{"class":298},"folder_path ",[288,47484,344],{"class":294},[288,47486,47487],{"class":403}," 'data_cat_dog'\n",[288,47489,47490],{"class":290,"line":1502},[288,47491,2572],{"emptyLinePlaceholder":217},[288,47493,47494],{"class":290,"line":1784},[288,47495,47496],{"class":357},"# 初始化累积变量\n",[288,47498,47499,47502,47504],{"class":290,"line":1789},[288,47500,47501],{"class":298},"total_pixels ",[288,47503,344],{"class":294},[288,47505,47506],{"class":347}," 0\n",[288,47508,47509,47512,47514,47517,47519,47521],{"class":290,"line":1795},[288,47510,47511],{"class":298},"sum_normalized_pixel_values ",[288,47513,344],{"class":294},[288,47515,47516],{"class":298}," np.zeros(",[288,47518,370],{"class":347},[288,47520,45981],{"class":298},[288,47522,47523],{"class":357},"# 如果是RGB图像，需要三个通道的均值和方差\n",[288,47525,47526],{"class":290,"line":1800},[288,47527,2572],{"emptyLinePlaceholder":217},[288,47529,47530],{"class":290,"line":1814},[288,47531,47532],{"class":357},"# 遍历文件夹中的图片文件\n",[288,47534,47535,47537,47540,47542],{"class":290,"line":1819},[288,47536,3197],{"class":294},[288,47538,47539],{"class":298}," root, dirs, files ",[288,47541,26216],{"class":294},[288,47543,47544],{"class":298}," os.walk(folder_path):\n",[288,47546,47547,47549,47552,47554],{"class":290,"line":1825},[288,47548,3373],{"class":294},[288,47550,47551],{"class":298}," filename ",[288,47553,26216],{"class":294},[288,47555,47556],{"class":298}," files:\n",[288,47558,47559,47561,47564,47567,47569,47572,47574,47577,47579,47582,47585],{"class":290,"line":1846},[288,47560,2669],{"class":294},[288,47562,47563],{"class":298}," filename.endswith((",[288,47565,47566],{"class":403},"'.jpg'",[288,47568,12608],{"class":298},[288,47570,47571],{"class":403},"'.jpeg'",[288,47573,12608],{"class":298},[288,47575,47576],{"class":403},"'.png'",[288,47578,12608],{"class":298},[288,47580,47581],{"class":403},"'.bmp'",[288,47583,47584],{"class":298},")):  ",[288,47586,47587],{"class":357},"# 可根据实际情况添加其他格式\n",[288,47589,47590,47592,47594],{"class":290,"line":1851},[288,47591,45846],{"class":298},[288,47593,344],{"class":294},[288,47595,47596],{"class":298}," os.path.join(root, filename)\n",[288,47598,47599,47602,47604],{"class":290,"line":1865},[288,47600,47601],{"class":298},"            image ",[288,47603,344],{"class":294},[288,47605,47606],{"class":298}," Image.open(image_path)\n",[288,47608,47609,47612,47614],{"class":290,"line":1870},[288,47610,47611],{"class":298},"            image_array ",[288,47613,344],{"class":294},[288,47615,47616],{"class":298}," np.array(image)\n",[288,47618,47619],{"class":290,"line":1899},[288,47620,2572],{"emptyLinePlaceholder":217},[288,47622,47623],{"class":290,"line":1904},[288,47624,47625],{"class":357},"            # 归一化像素值到0-1之间\n",[288,47627,47628,47631,47633,47636,47638],{"class":290,"line":1921},[288,47629,47630],{"class":298},"            normalized_image_array ",[288,47632,344],{"class":294},[288,47634,47635],{"class":298}," image_array ",[288,47637,881],{"class":294},[288,47639,47640],{"class":347}," 255.0\n",[288,47642,47643],{"class":290,"line":1926},[288,47644,2572],{"emptyLinePlaceholder":217},[288,47646,47647],{"class":290,"line":1931},[288,47648,47649],{"class":357},"            # print(image_path)\n",[288,47651,47652],{"class":290,"line":1936},[288,47653,47654],{"class":357},"            # print(normalized_image_array.shape)\n",[288,47656,47657],{"class":290,"line":1950},[288,47658,47659],{"class":357},"            # 累积归一化后的像素值和像素数量\n",[288,47661,47662,47665,47667],{"class":290,"line":1955},[288,47663,47664],{"class":298},"            total_pixels ",[288,47666,9650],{"class":294},[288,47668,47669],{"class":298}," normalized_image_array.size\n",[288,47671,47672],{"class":290,"line":2749},[288,47673,47674],{"class":357},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[288,47676,47677,47680,47682,47685,47688,47690,47692,47694,47696,47698],{"class":290,"line":2763},[288,47678,47679],{"class":298},"            sum_normalized_pixel_values ",[288,47681,9650],{"class":294},[288,47683,47684],{"class":298}," np.sum(normalized_image_array, ",[288,47686,47687],{"class":5389},"axis",[288,47689,344],{"class":294},[288,47691,299],{"class":298},[288,47693,490],{"class":347},[288,47695,12608],{"class":298},[288,47697,516],{"class":347},[288,47699,30670],{"class":298},[288,47701,47702],{"class":290,"line":2771},[288,47703,2572],{"emptyLinePlaceholder":217},[288,47705,47706],{"class":290,"line":2776},[288,47707,47708],{"class":357},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[288,47710,47711,47714,47716,47719,47721],{"class":290,"line":2782},[288,47712,47713],{"class":298},"mean ",[288,47715,344],{"class":294},[288,47717,47718],{"class":298}," sum_normalized_pixel_values ",[288,47720,881],{"class":294},[288,47722,47723],{"class":298}," total_pixels\n",[288,47725,47726],{"class":290,"line":2788},[288,47727,2572],{"emptyLinePlaceholder":217},[288,47729,47730,47733,47735,47737,47739],{"class":290,"line":2793},[288,47731,47732],{"class":298},"sum_squared_diff ",[288,47734,344],{"class":294},[288,47736,47516],{"class":298},[288,47738,370],{"class":347},[288,47740,305],{"class":298},[288,47742,47743],{"class":290,"line":8121},[288,47744,2572],{"emptyLinePlaceholder":217},[288,47746,47747],{"class":290,"line":8145},[288,47748,47749],{"class":357},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[288,47751,47752],{"class":290,"line":8150},[288,47753,47754],{"class":357},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[288,47756,47757],{"class":290,"line":8156},[288,47758,47759],{"class":357},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[288,47761,47762],{"class":290,"line":8183},[288,47763,47764],{"class":357},"# Image.open(image_path)：打开图片\n",[288,47766,47767],{"class":290,"line":8188},[288,47768,47769],{"class":357},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[288,47771,47772,47774,47776,47778],{"class":290,"line":8194},[288,47773,3197],{"class":294},[288,47775,47539],{"class":298},[288,47777,26216],{"class":294},[288,47779,47544],{"class":298},[288,47781,47782,47784,47786,47788],{"class":290,"line":8206},[288,47783,3373],{"class":294},[288,47785,47551],{"class":298},[288,47787,26216],{"class":294},[288,47789,47556],{"class":298},[288,47791,47792,47794,47796,47798,47800,47802,47804,47806,47808,47810],{"class":290,"line":8218},[288,47793,2669],{"class":294},[288,47795,47563],{"class":298},[288,47797,47566],{"class":403},[288,47799,12608],{"class":298},[288,47801,47571],{"class":403},[288,47803,12608],{"class":298},[288,47805,47576],{"class":403},[288,47807,12608],{"class":298},[288,47809,47581],{"class":403},[288,47811,47812],{"class":298},")):\n",[288,47814,47815,47817,47819],{"class":290,"line":8230},[288,47816,45846],{"class":298},[288,47818,344],{"class":294},[288,47820,47596],{"class":298},[288,47822,47823,47825,47827],{"class":290,"line":9889},[288,47824,47601],{"class":298},[288,47826,344],{"class":294},[288,47828,47606],{"class":298},[288,47830,47831,47833,47835],{"class":290,"line":9914},[288,47832,47611],{"class":298},[288,47834,344],{"class":294},[288,47836,47616],{"class":298},[288,47838,47839],{"class":290,"line":9937},[288,47840,47625],{"class":357},[288,47842,47843,47845,47847,47849,47851],{"class":290,"line":9961},[288,47844,47630],{"class":298},[288,47846,344],{"class":294},[288,47848,47635],{"class":298},[288,47850,881],{"class":294},[288,47852,47640],{"class":347},[288,47854,47855],{"class":290,"line":9966},[288,47856,47654],{"class":357},[288,47858,47859],{"class":290,"line":9971},[288,47860,47861],{"class":357},"            # print(mean.shape)\n",[288,47863,47864],{"class":290,"line":9976},[288,47865,47649],{"class":357},[288,47867,47868],{"class":290,"line":9985},[288,47869,2572],{"emptyLinePlaceholder":217},[288,47871,47872,47875],{"class":290,"line":9990},[288,47873,47874],{"class":294},"            try",[288,47876,3911],{"class":298},[288,47878,47879,47882,47884,47887,47889,47892,47894],{"class":290,"line":9996},[288,47880,47881],{"class":298},"                diff ",[288,47883,344],{"class":294},[288,47885,47886],{"class":298}," (normalized_image_array ",[288,47888,829],{"class":294},[288,47890,47891],{"class":298}," mean) ",[288,47893,10834],{"class":294},[288,47895,47896],{"class":347}," 2\n",[288,47898,47899,47902,47904,47907,47909,47911,47913,47915,47917,47919],{"class":290,"line":10017},[288,47900,47901],{"class":298},"                sum_squared_diff ",[288,47903,9650],{"class":294},[288,47905,47906],{"class":298}," np.sum(diff, ",[288,47908,47687],{"class":5389},[288,47910,344],{"class":294},[288,47912,299],{"class":298},[288,47914,490],{"class":347},[288,47916,12608],{"class":298},[288,47918,516],{"class":347},[288,47920,30670],{"class":298},[288,47922,47923,47926],{"class":290,"line":10023},[288,47924,47925],{"class":294},"            except",[288,47927,3911],{"class":298},[288,47929,47930,47933,47935,47937,47940],{"class":290,"line":10037},[288,47931,47932],{"class":347},"                print",[288,47934,299],{"class":298},[288,47936,351],{"class":294},[288,47938,47939],{"class":403},"\"捕获到自定义异常\"",[288,47941,305],{"class":298},[288,47943,47944],{"class":290,"line":10043},[288,47945,47946],{"class":357},"            # diff = (normalized_image_array - mean) ** 2\n",[288,47948,47949],{"class":290,"line":10070},[288,47950,47951],{"class":357},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[288,47953,47954],{"class":290,"line":10079},[288,47955,2572],{"emptyLinePlaceholder":217},[288,47957,47958,47961,47963,47966,47968],{"class":290,"line":10085},[288,47959,47960],{"class":298},"variance ",[288,47962,344],{"class":294},[288,47964,47965],{"class":298}," sum_squared_diff ",[288,47967,881],{"class":294},[288,47969,47723],{"class":298},[288,47971,47972],{"class":290,"line":10093},[288,47973,2572],{"emptyLinePlaceholder":217},[288,47975,47976,47978,47980,47983],{"class":290,"line":10098},[288,47977,30588],{"class":347},[288,47979,299],{"class":298},[288,47981,47982],{"class":403},"\"Mean:\"",[288,47984,47985],{"class":298},", mean)\n",[288,47987,47988,47990,47992,47995],{"class":290,"line":16777},[288,47989,30588],{"class":347},[288,47991,299],{"class":298},[288,47993,47994],{"class":403},"\"Variance:\"",[288,47996,47997],{"class":298},", variance)\n",[280,47999,48001],{"className":30551,"code":48000,"language":30553,"meta":205,"style":205},"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",[25,48002,48003,48009,48015,48025,48031,48041,48055,48065,48075,48085,48089,48099,48109,48113,48117,48125,48130,48135,48154,48158,48163,48168,48173,48178,48219,48224,48234,48239,48252,48257,48262,48267,48272,48277,48281,48286,48291,48313,48317,48349,48363,48373,48383,48387,48397,48411,48421,48431,48441,48447,48451,48455,48459,48463,48467,48475,48495,48499,48503,48507,48511,48527,48531,48535,48543,48547,48551,48559,48563,48567,48571,48579,48583,48587,48591,48599,48603,48611,48615,48623,48627,48635,48639,48647,48651,48655,48663,48667,48671,48683,48707,48721,48725,48729,48733,48741,48745,48753,48757,48765,48769,48777,48781,48789,48793,48801,48805,48817,48821,48829,48833,48841,48845,48849,48853,48857,48865,48869,48885,48889,48897,48901,48905,48909,48913,48917,48921,48925,48941,48945,48957,48961,48973,48977,48989,48993,49001,49005,49013,49017,49021,49025,49031,49035,49043,49047,49063,49067,49075,49079,49095,49107,49111,49123,49127,49131,49139,49143,49147,49155,49159,49167,49171,49179,49183,49187,49229,49271,49275,49279,49295,49299,49315,49319,49323,49331,49335,49339,49351,49389,49393,49397,49405,49409,49423,49433,49439,49445,49451,49457,49461,49465,49471,49475,49479,49487,49491,49509,49513,49517,49521,49537,49541,49545,49549,49553,49557,49577,49597,49601,49605,49609,49617,49625,49629,49645,49665,49685,49689,49694,49703,49712,49717,49722,49727,49740,49745,49754,49763,49780],{"__ignoreMap":205},[288,48004,48005,48007],{"class":290,"line":291},[288,48006,30565],{"class":294},[288,48008,31995],{"class":298},[288,48010,48011,48013],{"class":290,"line":206},[288,48012,30565],{"class":294},[288,48014,32002],{"class":298},[288,48016,48017,48019,48021,48023],{"class":290,"line":1352},[288,48018,30565],{"class":294},[288,48020,32013],{"class":298},[288,48022,31556],{"class":294},[288,48024,32018],{"class":298},[288,48026,48027,48029],{"class":290,"line":1367},[288,48028,30565],{"class":294},[288,48030,30568],{"class":298},[288,48032,48033,48035,48037,48039],{"class":290,"line":1373},[288,48034,30910],{"class":294},[288,48036,31588],{"class":298},[288,48038,30565],{"class":294},[288,48040,32035],{"class":298},[288,48042,48043,48045,48047,48049,48052],{"class":290,"line":1387},[288,48044,30910],{"class":294},[288,48046,31541],{"class":298},[288,48048,30565],{"class":294},[288,48050,48051],{"class":298}," ImageFolder ",[288,48053,48054],{"class":357},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[288,48056,48057,48059,48061,48063],{"class":290,"line":1393},[288,48058,30910],{"class":294},[288,48060,31571],{"class":298},[288,48062,30565],{"class":294},[288,48064,31576],{"class":298},[288,48066,48067,48069,48071,48073],{"class":290,"line":1484},[288,48068,30565],{"class":294},[288,48070,31588],{"class":298},[288,48072,31556],{"class":294},[288,48074,31593],{"class":298},[288,48076,48077,48079,48081,48083],{"class":290,"line":1490},[288,48078,30565],{"class":294},[288,48080,31605],{"class":298},[288,48082,31556],{"class":294},[288,48084,31610],{"class":298},[288,48086,48087],{"class":290,"line":1502},[288,48088,32080],{"class":357},[288,48090,48091,48093,48095,48097],{"class":290,"line":1784},[288,48092,30910],{"class":294},[288,48094,32087],{"class":298},[288,48096,30565],{"class":294},[288,48098,43204],{"class":298},[288,48100,48101,48103,48105,48107],{"class":290,"line":1789},[288,48102,30910],{"class":294},[288,48104,30913],{"class":298},[288,48106,30565],{"class":294},[288,48108,30918],{"class":298},[288,48110,48111],{"class":290,"line":1795},[288,48112,2572],{"emptyLinePlaceholder":217},[288,48114,48115],{"class":290,"line":1800},[288,48116,32115],{"class":357},[288,48118,48119,48121,48123],{"class":290,"line":1814},[288,48120,32120],{"class":294},[288,48122,32123],{"class":2135},[288,48124,32126],{"class":298},[288,48126,48127],{"class":290,"line":1819},[288,48128,48129],{"class":357},"    # 导入自己的数据集，并进行数据处理\n",[288,48131,48132],{"class":290,"line":1825},[288,48133,48134],{"class":357},"    # 定义数据集的路径\n",[288,48136,48137,48140,48142,48144,48146,48148,48152],{"class":290,"line":1846},[288,48138,48139],{"class":347},"    ROOT_PATH",[288,48141,344],{"class":294},[288,48143,967],{"class":294},[288,48145,109],{"class":403},[288,48147,855],{"class":347},[288,48149,48151],{"class":48150},"sA_wV","\u002Fdata\u002Ftrain",[288,48153,25306],{"class":403},[288,48155,48156],{"class":290,"line":1851},[288,48157,2572],{"emptyLinePlaceholder":217},[288,48159,48160],{"class":290,"line":1865},[288,48161,48162],{"class":357},"    # 定义归一化方法\n",[288,48164,48165],{"class":290,"line":1870},[288,48166,48167],{"class":357},"    # 这里需要先计算一下数据集的均值和方差\n",[288,48169,48170],{"class":290,"line":1899},[288,48171,48172],{"class":357},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[288,48174,48175],{"class":290,"line":1904},[288,48176,48177],{"class":357},"    # 第一个参数是均值，第二个参数是方差\n",[288,48179,48180,48183,48185,48188,48191,48193,48196,48198,48201,48204,48207,48209,48212,48214,48217],{"class":290,"line":1921},[288,48181,48182],{"class":298},"    normalize",[288,48184,344],{"class":294},[288,48186,48187],{"class":298},"transforms.Normalize([",[288,48189,48190],{"class":347},"0.162",[288,48192,675],{"class":298},[288,48194,48195],{"class":347},"0.151",[288,48197,675],{"class":298},[288,48199,48200],{"class":347},"0.138",[288,48202,48203],{"class":298},"],[",[288,48205,48206],{"class":347},"0.058",[288,48208,675],{"class":298},[288,48210,48211],{"class":347},"0.052",[288,48213,675],{"class":298},[288,48215,48216],{"class":347},"0.048",[288,48218,4829],{"class":298},[288,48220,48221],{"class":290,"line":1926},[288,48222,48223],{"class":357},"    # 定义数据集处理方法变量\n",[288,48225,48226,48229,48231],{"class":290,"line":1931},[288,48227,48228],{"class":298},"    train_transform",[288,48230,344],{"class":294},[288,48232,48233],{"class":298},"transforms.Compose([\n",[288,48235,48236],{"class":290,"line":1936},[288,48237,48238],{"class":357},"        # 调整图像大小为224*224\n",[288,48240,48241,48244,48246,48248,48250],{"class":290,"line":1950},[288,48242,48243],{"class":298},"        transforms.Resize((",[288,48245,31674],{"class":347},[288,48247,675],{"class":298},[288,48249,31674],{"class":347},[288,48251,42795],{"class":298},[288,48253,48254],{"class":290,"line":1955},[288,48255,48256],{"class":357},"        # 将图像转换为张量\n",[288,48258,48259],{"class":290,"line":2749},[288,48260,48261],{"class":298},"        transforms.ToTensor(),\n",[288,48263,48264],{"class":290,"line":2763},[288,48265,48266],{"class":298},"        normalize])\n",[288,48268,48269],{"class":290,"line":2771},[288,48270,48271],{"class":357},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[288,48273,48274],{"class":290,"line":2776},[288,48275,48276],{"class":357},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[288,48278,48279],{"class":290,"line":2782},[288,48280,2572],{"emptyLinePlaceholder":217},[288,48282,48283],{"class":290,"line":2788},[288,48284,48285],{"class":357},"    # 加载数据集\n",[288,48287,48288],{"class":290,"line":2793},[288,48289,48290],{"class":357},"    # 传入数据集路径与处理方法\n",[288,48292,48293,48295,48297,48300,48303,48305,48308,48310],{"class":290,"line":8121},[288,48294,32131],{"class":298},[288,48296,344],{"class":294},[288,48298,48299],{"class":298},"ImageFolder(",[288,48301,48302],{"class":347},"ROOT_PATH",[288,48304,675],{"class":298},[288,48306,48307],{"class":5389},"transform",[288,48309,344],{"class":294},[288,48311,48312],{"class":298},"train_transform)\n",[288,48314,48315],{"class":290,"line":8145},[288,48316,2572],{"emptyLinePlaceholder":217},[288,48318,48319,48321,48323,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345,48347],{"class":290,"line":8150},[288,48320,32183],{"class":298},[288,48322,344],{"class":294},[288,48324,32188],{"class":298},[288,48326,32191],{"class":347},[288,48328,299],{"class":298},[288,48330,32196],{"class":347},[288,48332,752],{"class":294},[288,48334,7531],{"class":347},[288,48336,32203],{"class":298},[288,48338,32191],{"class":347},[288,48340,299],{"class":298},[288,48342,32210],{"class":347},[288,48344,752],{"class":294},[288,48346,7531],{"class":347},[288,48348,32217],{"class":298},[288,48350,48351,48353,48355,48357,48359,48361],{"class":290,"line":8156},[288,48352,32222],{"class":298},[288,48354,344],{"class":294},[288,48356,32227],{"class":298},[288,48358,31710],{"class":5389},[288,48360,344],{"class":294},[288,48362,31715],{"class":298},[288,48364,48365,48367,48369,48371],{"class":290,"line":8183},[288,48366,32238],{"class":5389},[288,48368,344],{"class":294},[288,48370,496],{"class":347},[288,48372,31639],{"class":298},[288,48374,48375,48377,48379,48381],{"class":290,"line":8188},[288,48376,32250],{"class":5389},[288,48378,344],{"class":294},[288,48380,31649],{"class":347},[288,48382,31639],{"class":298},[288,48384,48385],{"class":290,"line":8194},[288,48386,32261],{"class":357},[288,48388,48389,48391,48393,48395],{"class":290,"line":8206},[288,48390,32266],{"class":5389},[288,48392,344],{"class":294},[288,48394,692],{"class":347},[288,48396,305],{"class":298},[288,48398,48399,48401,48403,48405,48407,48409],{"class":290,"line":8218},[288,48400,32277],{"class":298},[288,48402,344],{"class":294},[288,48404,31707],{"class":298},[288,48406,31710],{"class":5389},[288,48408,344],{"class":294},[288,48410,32288],{"class":298},[288,48412,48413,48415,48417,48419],{"class":290,"line":8230},[288,48414,32293],{"class":5389},[288,48416,344],{"class":294},[288,48418,496],{"class":347},[288,48420,31639],{"class":298},[288,48422,48423,48425,48427,48429],{"class":290,"line":9889},[288,48424,32304],{"class":5389},[288,48426,344],{"class":294},[288,48428,31649],{"class":347},[288,48430,31639],{"class":298},[288,48432,48433,48435,48437,48439],{"class":290,"line":9914},[288,48434,32315],{"class":5389},[288,48436,344],{"class":294},[288,48438,692],{"class":347},[288,48440,305],{"class":298},[288,48442,48443,48445],{"class":290,"line":9937},[288,48444,4262],{"class":294},[288,48446,32328],{"class":298},[288,48448,48449],{"class":290,"line":9961},[288,48450,2572],{"emptyLinePlaceholder":217},[288,48452,48453],{"class":290,"line":9966},[288,48454,32337],{"class":357},[288,48456,48457],{"class":290,"line":9971},[288,48458,32342],{"class":357},[288,48460,48461],{"class":290,"line":9976},[288,48462,2572],{"emptyLinePlaceholder":217},[288,48464,48465],{"class":290,"line":9985},[288,48466,32351],{"class":357},[288,48468,48469,48471,48473],{"class":290,"line":9990},[288,48470,32120],{"class":294},[288,48472,32358],{"class":2135},[288,48474,32361],{"class":298},[288,48476,48477,48479,48481,48483,48485,48487,48489,48491,48493],{"class":290,"line":9996},[288,48478,31410],{"class":298},[288,48480,344],{"class":294},[288,48482,30624],{"class":298},[288,48484,31417],{"class":403},[288,48486,1876],{"class":294},[288,48488,31422],{"class":298},[288,48490,1873],{"class":294},[288,48492,32380],{"class":403},[288,48494,305],{"class":298},[288,48496,48497],{"class":290,"line":10017},[288,48498,2572],{"emptyLinePlaceholder":217},[288,48500,48501],{"class":290,"line":10023},[288,48502,32395],{"class":357},[288,48504,48505],{"class":290,"line":10037},[288,48506,32400],{"class":357},[288,48508,48509],{"class":290,"line":10043},[288,48510,32405],{"class":357},[288,48512,48513,48515,48517,48519,48521,48523,48525],{"class":290,"line":10070},[288,48514,32410],{"class":298},[288,48516,344],{"class":294},[288,48518,32415],{"class":298},[288,48520,32418],{"class":5389},[288,48522,344],{"class":294},[288,48524,32423],{"class":347},[288,48526,305],{"class":298},[288,48528,48529],{"class":290,"line":10079},[288,48530,2572],{"emptyLinePlaceholder":217},[288,48532,48533],{"class":290,"line":10085},[288,48534,32434],{"class":357},[288,48536,48537,48539,48541],{"class":290,"line":10093},[288,48538,32439],{"class":298},[288,48540,344],{"class":294},[288,48542,32444],{"class":298},[288,48544,48545],{"class":290,"line":10098},[288,48546,2572],{"emptyLinePlaceholder":217},[288,48548,48549],{"class":290,"line":16777},[288,48550,32453],{"class":357},[288,48552,48553,48555,48557],{"class":290,"line":16783},[288,48554,31462],{"class":298},[288,48556,344],{"class":294},[288,48558,32462],{"class":298},[288,48560,48561],{"class":290,"line":16806},[288,48562,32467],{"class":357},[288,48564,48565],{"class":290,"line":16812},[288,48566,32472],{"class":357},[288,48568,48569],{"class":290,"line":16835},[288,48570,32477],{"class":357},[288,48572,48573,48575,48577],{"class":290,"line":16849},[288,48574,32482],{"class":298},[288,48576,344],{"class":294},[288,48578,32487],{"class":298},[288,48580,48581],{"class":290,"line":16869},[288,48582,2572],{"emptyLinePlaceholder":217},[288,48584,48585],{"class":290,"line":16875},[288,48586,32500],{"class":357},[288,48588,48589],{"class":290,"line":16886},[288,48590,32505],{"class":357},[288,48592,48593,48595,48597],{"class":290,"line":16909},[288,48594,32510],{"class":298},[288,48596,344],{"class":294},[288,48598,32515],{"class":347},[288,48600,48601],{"class":290,"line":16931},[288,48602,32520],{"class":357},[288,48604,48605,48607,48609],{"class":290,"line":16936},[288,48606,32525],{"class":298},[288,48608,344],{"class":294},[288,48610,32530],{"class":298},[288,48612,48613],{"class":290,"line":16942},[288,48614,32535],{"class":357},[288,48616,48617,48619,48621],{"class":290,"line":16956},[288,48618,32540],{"class":298},[288,48620,344],{"class":294},[288,48622,32530],{"class":298},[288,48624,48625],{"class":290,"line":16969},[288,48626,32549],{"class":357},[288,48628,48629,48631,48633],{"class":290,"line":16974},[288,48630,32554],{"class":298},[288,48632,344],{"class":294},[288,48634,32530],{"class":298},[288,48636,48637],{"class":290,"line":16988},[288,48638,32563],{"class":357},[288,48640,48641,48643,48645],{"class":290,"line":16993},[288,48642,32568],{"class":298},[288,48644,344],{"class":294},[288,48646,32530],{"class":298},[288,48648,48649],{"class":290,"line":16999},[288,48650,2572],{"emptyLinePlaceholder":217},[288,48652,48653],{"class":290,"line":17004},[288,48654,32581],{"class":357},[288,48656,48657,48659,48661],{"class":290,"line":17018},[288,48658,32586],{"class":298},[288,48660,344],{"class":294},[288,48662,32591],{"class":298},[288,48664,48665],{"class":290,"line":17023},[288,48666,2572],{"emptyLinePlaceholder":217},[288,48668,48669],{"class":290,"line":17028},[288,48670,32604],{"class":357},[288,48672,48673,48675,48677,48679,48681],{"class":290,"line":17042},[288,48674,3373],{"class":294},[288,48676,32611],{"class":298},[288,48678,26216],{"class":294},[288,48680,32616],{"class":347},[288,48682,32619],{"class":298},[288,48684,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703,48705],{"class":290,"line":17054},[288,48686,32624],{"class":347},[288,48688,299],{"class":298},[288,48690,32629],{"class":403},[288,48692,32632],{"class":347},[288,48694,881],{"class":403},[288,48696,32632],{"class":347},[288,48698,109],{"class":403},[288,48700,32641],{"class":298},[288,48702,829],{"class":294},[288,48704,516],{"class":347},[288,48706,30670],{"class":298},[288,48708,48709,48711,48713,48715,48717,48719],{"class":290,"line":17059},[288,48710,32624],{"class":347},[288,48712,299],{"class":298},[288,48714,32656],{"class":403},[288,48716,752],{"class":294},[288,48718,743],{"class":347},[288,48720,305],{"class":298},[288,48722,48723],{"class":290,"line":17072},[288,48724,2572],{"emptyLinePlaceholder":217},[288,48726,48727],{"class":290,"line":17077},[288,48728,32671],{"class":357},[288,48730,48731],{"class":290,"line":17082},[288,48732,32676],{"class":357},[288,48734,48735,48737,48739],{"class":290,"line":17087},[288,48736,32681],{"class":298},[288,48738,344],{"class":294},[288,48740,32515],{"class":347},[288,48742,48743],{"class":290,"line":17100},[288,48744,32690],{"class":357},[288,48746,48747,48749,48751],{"class":290,"line":17105},[288,48748,32695],{"class":298},[288,48750,344],{"class":294},[288,48752,3257],{"class":347},[288,48754,48755],{"class":290,"line":32806},[288,48756,32704],{"class":357},[288,48758,48759,48761,48763],{"class":290,"line":32812},[288,48760,32709],{"class":298},[288,48762,344],{"class":294},[288,48764,32515],{"class":347},[288,48766,48767],{"class":290,"line":32818},[288,48768,32718],{"class":357},[288,48770,48771,48773,48775],{"class":290,"line":32824},[288,48772,32723],{"class":298},[288,48774,344],{"class":294},[288,48776,3257],{"class":347},[288,48778,48779],{"class":290,"line":32830},[288,48780,32732],{"class":357},[288,48782,48783,48785,48787],{"class":290,"line":32841},[288,48784,32737],{"class":298},[288,48786,344],{"class":294},[288,48788,3257],{"class":347},[288,48790,48791],{"class":290,"line":32847},[288,48792,32746],{"class":357},[288,48794,48795,48797,48799],{"class":290,"line":32867},[288,48796,32751],{"class":298},[288,48798,344],{"class":294},[288,48800,3257],{"class":347},[288,48802,48803],{"class":290,"line":32873},[288,48804,32760],{"class":357},[288,48806,48807,48809,48811,48813,48815],{"class":290,"line":32884},[288,48808,3575],{"class":294},[288,48810,31774],{"class":298},[288,48812,26216],{"class":294},[288,48814,31779],{"class":347},[288,48816,32773],{"class":298},[288,48818,48819],{"class":290,"line":32890},[288,48820,32778],{"class":357},[288,48822,48823,48825,48827],{"class":290,"line":32896},[288,48824,32783],{"class":298},[288,48826,344],{"class":294},[288,48828,32788],{"class":298},[288,48830,48831],{"class":290,"line":32902},[288,48832,32793],{"class":357},[288,48834,48835,48837,48839],{"class":290,"line":32908},[288,48836,32798],{"class":298},[288,48838,344],{"class":294},[288,48840,32803],{"class":298},[288,48842,48843],{"class":290,"line":32914},[288,48844,32809],{"class":357},[288,48846,48847],{"class":290,"line":32920},[288,48848,32815],{"class":298},[288,48850,48851],{"class":290,"line":32926},[288,48852,32821],{"class":357},[288,48854,48855],{"class":290,"line":32946},[288,48856,32827],{"class":357},[288,48858,48859,48861,48863],{"class":290,"line":32952},[288,48860,32833],{"class":298},[288,48862,344],{"class":294},[288,48864,32838],{"class":298},[288,48866,48867],{"class":290,"line":32968},[288,48868,32844],{"class":357},[288,48870,48871,48873,48875,48877,48879,48881,48883],{"class":290,"line":32974},[288,48872,32850],{"class":298},[288,48874,344],{"class":294},[288,48876,32855],{"class":298},[288,48878,32858],{"class":5389},[288,48880,344],{"class":294},[288,48882,516],{"class":347},[288,48884,305],{"class":298},[288,48886,48887],{"class":290,"line":32988},[288,48888,32870],{"class":357},[288,48890,48891,48893,48895],{"class":290,"line":32994},[288,48892,32876],{"class":298},[288,48894,344],{"class":294},[288,48896,32881],{"class":298},[288,48898,48899],{"class":290,"line":33009},[288,48900,32887],{"class":357},[288,48902,48903],{"class":290,"line":33015},[288,48904,32893],{"class":298},[288,48906,48907],{"class":290,"line":33024},[288,48908,32899],{"class":357},[288,48910,48911],{"class":290,"line":33030},[288,48912,32905],{"class":298},[288,48914,48915],{"class":290,"line":33039},[288,48916,32911],{"class":357},[288,48918,48919],{"class":290,"line":33045},[288,48920,32917],{"class":298},[288,48922,48923],{"class":290,"line":33051},[288,48924,32923],{"class":357},[288,48926,48927,48929,48931,48933,48935,48937,48939],{"class":290,"line":33060},[288,48928,32929],{"class":298},[288,48930,9650],{"class":294},[288,48932,32934],{"class":298},[288,48934,752],{"class":294},[288,48936,32939],{"class":298},[288,48938,490],{"class":347},[288,48940,305],{"class":298},[288,48942,48943],{"class":290,"line":33066},[288,48944,32949],{"class":357},[288,48946,48947,48949,48951,48953,48955],{"class":290,"line":33077},[288,48948,32955],{"class":298},[288,48950,9650],{"class":294},[288,48952,32960],{"class":298},[288,48954,3121],{"class":294},[288,48956,32965],{"class":298},[288,48958,48959],{"class":290,"line":33083},[288,48960,32971],{"class":357},[288,48962,48963,48965,48967,48969,48971],{"class":290,"line":33102},[288,48964,32977],{"class":298},[288,48966,9650],{"class":294},[288,48968,32939],{"class":298},[288,48970,490],{"class":347},[288,48972,305],{"class":298},[288,48974,48975],{"class":290,"line":33108},[288,48976,32991],{"class":357},[288,48978,48979,48981,48983,48985,48987],{"class":290,"line":33119},[288,48980,3575],{"class":294},[288,48982,32999],{"class":298},[288,48984,26216],{"class":294},[288,48986,31779],{"class":347},[288,48988,33006],{"class":298},[288,48990,48991],{"class":290,"line":33125},[288,48992,33012],{"class":357},[288,48994,48995,48997,48999],{"class":290,"line":33145},[288,48996,32783],{"class":298},[288,48998,344],{"class":294},[288,49000,32788],{"class":298},[288,49002,49003],{"class":290,"line":33161},[288,49004,33027],{"class":357},[288,49006,49007,49009,49011],{"class":290,"line":33167},[288,49008,32798],{"class":298},[288,49010,344],{"class":294},[288,49012,32803],{"class":298},[288,49014,49015],{"class":290,"line":33181},[288,49016,33042],{"class":357},[288,49018,49019],{"class":290,"line":33187},[288,49020,33048],{"class":298},[288,49022,49023],{"class":290,"line":33193},[288,49024,36529],{"class":357},[288,49026,49027,49029],{"class":290,"line":33204},[288,49028,33054],{"class":294},[288,49030,33057],{"class":298},[288,49032,49033],{"class":290,"line":33210},[288,49034,33063],{"class":357},[288,49036,49037,49039,49041],{"class":290,"line":33216},[288,49038,36544],{"class":298},[288,49040,344],{"class":294},[288,49042,32838],{"class":298},[288,49044,49045],{"class":290,"line":33226},[288,49046,33080],{"class":357},[288,49048,49049,49051,49053,49055,49057,49059,49061],{"class":290,"line":33232},[288,49050,36557],{"class":298},[288,49052,344],{"class":294},[288,49054,32855],{"class":298},[288,49056,32858],{"class":5389},[288,49058,344],{"class":294},[288,49060,516],{"class":347},[288,49062,305],{"class":298},[288,49064,49065],{"class":290,"line":33243},[288,49066,33105],{"class":357},[288,49068,49069,49071,49073],{"class":290,"line":33249},[288,49070,36578],{"class":298},[288,49072,344],{"class":294},[288,49074,32881],{"class":298},[288,49076,49077],{"class":290,"line":33259},[288,49078,33122],{"class":357},[288,49080,49081,49083,49085,49087,49089,49091,49093],{"class":290,"line":33264},[288,49082,36591],{"class":298},[288,49084,9650],{"class":294},[288,49086,36596],{"class":298},[288,49088,752],{"class":294},[288,49090,32939],{"class":298},[288,49092,490],{"class":347},[288,49094,305],{"class":298},[288,49096,49097,49099,49101,49103,49105],{"class":290,"line":33270},[288,49098,36609],{"class":298},[288,49100,9650],{"class":294},[288,49102,32960],{"class":298},[288,49104,3121],{"class":294},[288,49106,32965],{"class":298},[288,49108,49109],{"class":290,"line":33319},[288,49110,36622],{"class":357},[288,49112,49113,49115,49117,49119,49121],{"class":290,"line":33366},[288,49114,36627],{"class":298},[288,49116,9650],{"class":294},[288,49118,32939],{"class":298},[288,49120,490],{"class":347},[288,49122,305],{"class":298},[288,49124,49125],{"class":290,"line":33371},[288,49126,33184],{"class":357},[288,49128,49129],{"class":290,"line":33377},[288,49130,33190],{"class":357},[288,49132,49133,49135,49137],{"class":290,"line":33396},[288,49134,33196],{"class":298},[288,49136,881],{"class":294},[288,49138,33201],{"class":298},[288,49140,49141],{"class":290,"line":33402},[288,49142,33207],{"class":357},[288,49144,49145],{"class":290,"line":33422},[288,49146,33213],{"class":357},[288,49148,49149,49151,49153],{"class":290,"line":33428},[288,49150,33219],{"class":298},[288,49152,881],{"class":294},[288,49154,33201],{"class":298},[288,49156,49157],{"class":290,"line":33434},[288,49158,33229],{"class":357},[288,49160,49161,49163,49165],{"class":290,"line":33444},[288,49162,33235],{"class":298},[288,49164,881],{"class":294},[288,49166,33240],{"class":298},[288,49168,49169],{"class":290,"line":33449},[288,49170,33246],{"class":357},[288,49172,49173,49175,49177],{"class":290,"line":33455},[288,49174,33252],{"class":298},[288,49176,881],{"class":294},[288,49178,33240],{"class":298},[288,49180,49181],{"class":290,"line":33471},[288,49182,2572],{"emptyLinePlaceholder":217},[288,49184,49185],{"class":290,"line":33516},[288,49186,33267],{"class":357},[288,49188,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227],{"class":290,"line":33522},[288,49190,32624],{"class":347},[288,49192,299],{"class":298},[288,49194,3764],{"class":403},[288,49196,32632],{"class":347},[288,49198,33281],{"class":403},[288,49200,1193],{"class":347},[288,49202,33286],{"class":294},[288,49204,1243],{"class":347},[288,49206,33291],{"class":403},[288,49208,1193],{"class":347},[288,49210,33286],{"class":294},[288,49212,1243],{"class":347},[288,49214,3764],{"class":403},[288,49216,33302],{"class":298},[288,49218,829],{"class":294},[288,49220,516],{"class":347},[288,49222,33309],{"class":298},[288,49224,829],{"class":294},[288,49226,516],{"class":347},[288,49228,33316],{"class":298},[288,49230,49231,49233,49235,49237,49239,49241,49243,49245,49247,49249,49251,49253,49255,49257,49259,49261,49263,49265,49267,49269],{"class":290,"line":33528},[288,49232,32624],{"class":347},[288,49234,299],{"class":298},[288,49236,3764],{"class":403},[288,49238,32632],{"class":347},[288,49240,33330],{"class":403},[288,49242,1193],{"class":347},[288,49244,33286],{"class":294},[288,49246,1243],{"class":347},[288,49248,33339],{"class":403},[288,49250,1193],{"class":347},[288,49252,33286],{"class":294},[288,49254,1243],{"class":347},[288,49256,3764],{"class":403},[288,49258,33350],{"class":298},[288,49260,829],{"class":294},[288,49262,516],{"class":347},[288,49264,33357],{"class":298},[288,49266,829],{"class":294},[288,49268,516],{"class":347},[288,49270,33316],{"class":298},[288,49272,49273],{"class":290,"line":33534},[288,49274,2572],{"emptyLinePlaceholder":217},[288,49276,49277],{"class":290,"line":33545},[288,49278,33374],{"class":357},[288,49280,49281,49283,49285,49287,49289,49291,49293],{"class":290,"line":33551},[288,49282,2669],{"class":294},[288,49284,33382],{"class":298},[288,49286,829],{"class":294},[288,49288,516],{"class":347},[288,49290,1237],{"class":298},[288,49292,1257],{"class":294},[288,49294,33393],{"class":298},[288,49296,49297],{"class":290,"line":33557},[288,49298,33399],{"class":357},[288,49300,49301,49303,49305,49307,49309,49311,49313],{"class":290,"line":33563},[288,49302,33405],{"class":298},[288,49304,338],{"class":347},[288,49306,344],{"class":294},[288,49308,33412],{"class":298},[288,49310,829],{"class":294},[288,49312,516],{"class":347},[288,49314,33419],{"class":298},[288,49316,49317],{"class":290,"line":33581},[288,49318,33425],{"class":357},[288,49320,49321],{"class":290,"line":33595},[288,49322,33431],{"class":357},[288,49324,49325,49327,49329],{"class":290,"line":33604},[288,49326,33437],{"class":298},[288,49328,344],{"class":294},[288,49330,32487],{"class":298},[288,49332,49333],{"class":290,"line":33613},[288,49334,2572],{"emptyLinePlaceholder":217},[288,49336,49337],{"class":290,"line":33622},[288,49338,33452],{"class":357},[288,49340,49341,49343,49345,49347,49349],{"class":290,"line":33631},[288,49342,33458],{"class":298},[288,49344,344],{"class":294},[288,49346,33463],{"class":298},[288,49348,829],{"class":294},[288,49350,33468],{"class":298},[288,49352,49353,49355,49357,49359,49361,49363,49365,49367,49369,49371,49373,49375,49377,49379,49381,49383,49385,49387],{"class":290,"line":33637},[288,49354,32624],{"class":347},[288,49356,299],{"class":298},[288,49358,33478],{"class":403},[288,49360,1193],{"class":347},[288,49362,33483],{"class":294},[288,49364,1243],{"class":347},[288,49366,841],{"class":403},[288,49368,1193],{"class":347},[288,49370,33483],{"class":294},[288,49372,1243],{"class":347},[288,49374,33496],{"class":403},[288,49376,33499],{"class":298},[288,49378,33502],{"class":294},[288,49380,1204],{"class":347},[288,49382,33507],{"class":298},[288,49384,625],{"class":294},[288,49386,1204],{"class":347},[288,49388,30670],{"class":298},[288,49390,49391],{"class":290,"line":33643},[288,49392,36906],{"class":357},[288,49394,49395],{"class":290,"line":33651},[288,49396,36911],{"class":357},[288,49398,49399,49401,49403],{"class":290,"line":33656},[288,49400,36916],{"class":298},[288,49402,33540],{"class":403},[288,49404,305],{"class":298},[288,49406,49407],{"class":290,"line":33662},[288,49408,33560],{"class":357},[288,49410,49411,49413,49415,49417,49419,49421],{"class":290,"line":33673},[288,49412,33566],{"class":298},[288,49414,344],{"class":294},[288,49416,33571],{"class":298},[288,49418,33574],{"class":5389},[288,49420,344],{"class":294},[288,49422,1718],{"class":298},[288,49424,49425,49427,49429,49431],{"class":290,"line":33679},[288,49426,33584],{"class":403},[288,49428,1156],{"class":298},[288,49430,33589],{"class":347},[288,49432,33592],{"class":298},[288,49434,49435,49437],{"class":290,"line":33699},[288,49436,33598],{"class":403},[288,49438,33601],{"class":298},[288,49440,49441,49443],{"class":290,"line":33705},[288,49442,33607],{"class":403},[288,49444,33610],{"class":298},[288,49446,49447,49449],{"class":290,"line":33711},[288,49448,33616],{"class":403},[288,49450,33619],{"class":298},[288,49452,49453,49455],{"class":290,"line":33717},[288,49454,33625],{"class":403},[288,49456,33628],{"class":298},[288,49458,49459],{"class":290,"line":33734},[288,49460,33634],{"class":298},[288,49462,49463],{"class":290,"line":33740},[288,49464,33640],{"class":357},[288,49466,49467,49469],{"class":290,"line":33746},[288,49468,4262],{"class":294},[288,49470,33648],{"class":298},[288,49472,49473],{"class":290,"line":33752},[288,49474,2572],{"emptyLinePlaceholder":217},[288,49476,49477],{"class":290,"line":33758},[288,49478,33659],{"class":357},[288,49480,49481,49483,49485],{"class":290,"line":33764},[288,49482,32120],{"class":294},[288,49484,33667],{"class":2135},[288,49486,33670],{"class":298},[288,49488,49489],{"class":290,"line":33791},[288,49490,33676],{"class":357},[288,49492,49493,49495,49497,49499,49501,49503,49505,49507],{"class":290,"line":33815},[288,49494,33682],{"class":298},[288,49496,31866],{"class":5389},[288,49498,344],{"class":294},[288,49500,299],{"class":298},[288,49502,795],{"class":347},[288,49504,675],{"class":298},[288,49506,590],{"class":347},[288,49508,30670],{"class":298},[288,49510,49511],{"class":290,"line":33821},[288,49512,33702],{"class":357},[288,49514,49515],{"class":290,"line":33827},[288,49516,33708],{"class":357},[288,49518,49519],{"class":290,"line":33833},[288,49520,33714],{"class":357},[288,49522,49523,49525,49527,49529,49531,49533,49535],{"class":290,"line":33844},[288,49524,31900],{"class":298},[288,49526,516],{"class":347},[288,49528,675],{"class":298},[288,49530,376],{"class":347},[288,49532,675],{"class":298},[288,49534,516],{"class":347},[288,49536,305],{"class":298},[288,49538,49539],{"class":290,"line":33855},[288,49540,33737],{"class":357},[288,49542,49543],{"class":290,"line":33861},[288,49544,33743],{"class":357},[288,49546,49547],{"class":290,"line":33878},[288,49548,33749],{"class":357},[288,49550,49551],{"class":290,"line":33901},[288,49552,33755],{"class":357},[288,49554,49555],{"class":290,"line":33924},[288,49556,33761],{"class":357},[288,49558,49559,49561,49563,49565,49567,49569,49571,49573,49575],{"class":290,"line":33930},[288,49560,33767],{"class":298},[288,49562,33770],{"class":403},[288,49564,33773],{"class":298},[288,49566,33776],{"class":403},[288,49568,675],{"class":298},[288,49570,33781],{"class":5389},[288,49572,344],{"class":294},[288,49574,33786],{"class":403},[288,49576,305],{"class":298},[288,49578,49579,49581,49583,49585,49587,49589,49591,49593,49595],{"class":290,"line":33935},[288,49580,33767],{"class":298},[288,49582,33770],{"class":403},[288,49584,33798],{"class":298},[288,49586,33801],{"class":403},[288,49588,675],{"class":298},[288,49590,33781],{"class":5389},[288,49592,344],{"class":294},[288,49594,33810],{"class":403},[288,49596,305],{"class":298},[288,49598,49599],{"class":290,"line":33944},[288,49600,33818],{"class":357},[288,49602,49603],{"class":290,"line":33954},[288,49604,33824],{"class":298},[288,49606,49607],{"class":290,"line":33960},[288,49608,33830],{"class":357},[288,49610,49611,49613,49615],{"class":290,"line":33965},[288,49612,33836],{"class":298},[288,49614,33839],{"class":403},[288,49616,305],{"class":298},[288,49618,49619,49621,49623],{"class":290,"line":33971},[288,49620,33847],{"class":298},[288,49622,33850],{"class":403},[288,49624,305],{"class":298},[288,49626,49627],{"class":290,"line":33984},[288,49628,33858],{"class":357},[288,49630,49631,49633,49635,49637,49639,49641,49643],{"class":290,"line":33990},[288,49632,31900],{"class":298},[288,49634,516],{"class":347},[288,49636,675],{"class":298},[288,49638,376],{"class":347},[288,49640,675],{"class":298},[288,49642,376],{"class":347},[288,49644,305],{"class":298},[288,49646,49647,49649,49651,49653,49655,49657,49659,49661,49663],{"class":290,"line":34001},[288,49648,33767],{"class":298},[288,49650,33770],{"class":403},[288,49652,33885],{"class":298},[288,49654,33776],{"class":403},[288,49656,675],{"class":298},[288,49658,33781],{"class":5389},[288,49660,344],{"class":294},[288,49662,33896],{"class":403},[288,49664,305],{"class":298},[288,49666,49667,49669,49671,49673,49675,49677,49679,49681,49683],{"class":290,"line":34012},[288,49668,33767],{"class":298},[288,49670,33770],{"class":403},[288,49672,33908],{"class":298},[288,49674,33801],{"class":403},[288,49676,675],{"class":298},[288,49678,33781],{"class":5389},[288,49680,344],{"class":294},[288,49682,33919],{"class":403},[288,49684,305],{"class":298},[288,49686,49687],{"class":290,"line":34031},[288,49688,33927],{"class":357},[288,49690,49692],{"class":290,"line":49691},219,[288,49693,33824],{"class":298},[288,49695,49697,49699,49701],{"class":290,"line":49696},220,[288,49698,33836],{"class":298},[288,49700,33770],{"class":403},[288,49702,305],{"class":298},[288,49704,49706,49708,49710],{"class":290,"line":49705},221,[288,49707,33847],{"class":298},[288,49709,33949],{"class":403},[288,49711,305],{"class":298},[288,49713,49715],{"class":290,"line":49714},222,[288,49716,33957],{"class":298},[288,49718,49720],{"class":290,"line":49719},223,[288,49721,2572],{"emptyLinePlaceholder":217},[288,49723,49725],{"class":290,"line":49724},224,[288,49726,33968],{"class":357},[288,49728,49730,49732,49734,49736,49738],{"class":290,"line":49729},225,[288,49731,1703],{"class":294},[288,49733,31393],{"class":347},[288,49735,3121],{"class":294},[288,49737,31398],{"class":403},[288,49739,3911],{"class":298},[288,49741,49743],{"class":290,"line":49742},226,[288,49744,33987],{"class":357},[288,49746,49748,49750,49752],{"class":290,"line":49747},227,[288,49749,44719],{"class":298},[288,49751,344],{"class":294},[288,49753,44724],{"class":298},[288,49755,49757,49759,49761],{"class":290,"line":49756},228,[288,49758,34004],{"class":298},[288,49760,344],{"class":294},[288,49762,34009],{"class":298},[288,49764,49766,49768,49770,49772,49774,49776,49778],{"class":290,"line":49765},229,[288,49767,33566],{"class":298},[288,49769,344],{"class":294},[288,49771,44741],{"class":298},[288,49773,34022],{"class":5389},[288,49775,344],{"class":294},[288,49777,1204],{"class":347},[288,49779,305],{"class":298},[288,49781,49783],{"class":290,"line":49782},230,[288,49784,34034],{"class":298},[22171,49786,49788],{"id":49787},"_242测试代码","2.4.2.测试代码",[19,49790,49791],{},"使用测试集进行测试与推理",[280,49793,49795],{"className":30551,"code":49794,"language":30553,"meta":205,"style":205},"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",[25,49796,49797,49803,49813,49823,49834,49844,49848,49852,49860,49865,49869,49886,49890,49894,49898,49902,49906,49938,49942,49950,49954,49966,49970,49974,49978,49982,49986,49990,49994,49998,50016,50030,50034,50044,50054,50064,50070,50074,50078,50086,50090,50106,50114,50118,50122,50130,50138,50142,50146,50150,50154,50160,50164,50174,50182,50190,50194,50198,50202,50210,50214,50230,50234,50238,50242,50254,50258,50270,50274,50278,50290,50294,50304,50308,50312,50324,50328,50336,50340,50344,50352,50356,50364,50368,50372,50376,50380,50384,50400,50408,50412,50416,50434,50440,50444,50454,50462,50470,50474,50478,50482,50486,50494,50498,50514,50518,50526,50534],{"__ignoreMap":205},[288,49798,49799,49801],{"class":290,"line":291},[288,49800,30565],{"class":294},[288,49802,30568],{"class":298},[288,49804,49805,49807,49809,49811],{"class":290,"line":206},[288,49806,30565],{"class":294},[288,49808,31588],{"class":298},[288,49810,31556],{"class":294},[288,49812,31593],{"class":298},[288,49814,49815,49817,49819,49821],{"class":290,"line":1352},[288,49816,30910],{"class":294},[288,49818,31571],{"class":298},[288,49820,30565],{"class":294},[288,49822,31576],{"class":298},[288,49824,49825,49827,49829,49831],{"class":290,"line":1367},[288,49826,30910],{"class":294},[288,49828,31541],{"class":298},[288,49830,30565],{"class":294},[288,49832,49833],{"class":298}," ImageFolder\n",[288,49835,49836,49838,49840,49842],{"class":290,"line":1373},[288,49837,30910],{"class":294},[288,49839,32087],{"class":298},[288,49841,30565],{"class":294},[288,49843,44813],{"class":298},[288,49845,49846],{"class":290,"line":1387},[288,49847,2572],{"emptyLinePlaceholder":217},[288,49849,49850],{"class":290,"line":1393},[288,49851,34124],{"class":357},[288,49853,49854,49856,49858],{"class":290,"line":1484},[288,49855,32120],{"class":294},[288,49857,34131],{"class":2135},[288,49859,32126],{"class":298},[288,49861,49862],{"class":290,"line":1490},[288,49863,49864],{"class":357},"   # 导入自己的数据集，并进行数据处理\n",[288,49866,49867],{"class":290,"line":1502},[288,49868,48134],{"class":357},[288,49870,49871,49873,49875,49877,49879,49881,49884],{"class":290,"line":1784},[288,49872,48139],{"class":347},[288,49874,344],{"class":294},[288,49876,967],{"class":294},[288,49878,109],{"class":403},[288,49880,855],{"class":347},[288,49882,49883],{"class":48150},"\u002Fdata\u002Ftest",[288,49885,25306],{"class":403},[288,49887,49888],{"class":290,"line":1789},[288,49889,2572],{"emptyLinePlaceholder":217},[288,49891,49892],{"class":290,"line":1795},[288,49893,48162],{"class":357},[288,49895,49896],{"class":290,"line":1800},[288,49897,48167],{"class":357},[288,49899,49900],{"class":290,"line":1814},[288,49901,48172],{"class":357},[288,49903,49904],{"class":290,"line":1819},[288,49905,48177],{"class":357},[288,49907,49908,49910,49912,49914,49916,49918,49920,49922,49924,49926,49928,49930,49932,49934,49936],{"class":290,"line":1825},[288,49909,48182],{"class":298},[288,49911,344],{"class":294},[288,49913,48187],{"class":298},[288,49915,48190],{"class":347},[288,49917,675],{"class":298},[288,49919,48195],{"class":347},[288,49921,675],{"class":298},[288,49923,48200],{"class":347},[288,49925,48203],{"class":298},[288,49927,48206],{"class":347},[288,49929,675],{"class":298},[288,49931,48211],{"class":347},[288,49933,675],{"class":298},[288,49935,48216],{"class":347},[288,49937,4829],{"class":298},[288,49939,49940],{"class":290,"line":1846},[288,49941,48223],{"class":357},[288,49943,49944,49946,49948],{"class":290,"line":1851},[288,49945,48228],{"class":298},[288,49947,344],{"class":294},[288,49949,48233],{"class":298},[288,49951,49952],{"class":290,"line":1865},[288,49953,48238],{"class":357},[288,49955,49956,49958,49960,49962,49964],{"class":290,"line":1870},[288,49957,48243],{"class":298},[288,49959,31674],{"class":347},[288,49961,675],{"class":298},[288,49963,31674],{"class":347},[288,49965,42795],{"class":298},[288,49967,49968],{"class":290,"line":1899},[288,49969,48256],{"class":357},[288,49971,49972],{"class":290,"line":1904},[288,49973,48261],{"class":298},[288,49975,49976],{"class":290,"line":1921},[288,49977,48266],{"class":298},[288,49979,49980],{"class":290,"line":1926},[288,49981,48271],{"class":357},[288,49983,49984],{"class":290,"line":1931},[288,49985,48276],{"class":357},[288,49987,49988],{"class":290,"line":1936},[288,49989,2572],{"emptyLinePlaceholder":217},[288,49991,49992],{"class":290,"line":1950},[288,49993,48285],{"class":357},[288,49995,49996],{"class":290,"line":1955},[288,49997,48290],{"class":357},[288,49999,50000,50002,50004,50006,50008,50010,50012,50014],{"class":290,"line":2749},[288,50001,34138],{"class":298},[288,50003,344],{"class":294},[288,50005,48299],{"class":298},[288,50007,48302],{"class":347},[288,50009,675],{"class":298},[288,50011,48307],{"class":5389},[288,50013,344],{"class":294},[288,50015,48312],{"class":298},[288,50017,50018,50020,50022,50024,50026,50028],{"class":290,"line":2763},[288,50019,34195],{"class":298},[288,50021,344],{"class":294},[288,50023,31707],{"class":298},[288,50025,31710],{"class":5389},[288,50027,344],{"class":294},[288,50029,34206],{"class":298},[288,50031,50032],{"class":290,"line":2771},[288,50033,34211],{"class":357},[288,50035,50036,50038,50040,50042],{"class":290,"line":2776},[288,50037,34216],{"class":5389},[288,50039,344],{"class":294},[288,50041,516],{"class":347},[288,50043,31639],{"class":298},[288,50045,50046,50048,50050,50052],{"class":290,"line":2782},[288,50047,34227],{"class":5389},[288,50049,344],{"class":294},[288,50051,31649],{"class":347},[288,50053,31639],{"class":298},[288,50055,50056,50058,50060,50062],{"class":290,"line":2788},[288,50057,34238],{"class":5389},[288,50059,344],{"class":294},[288,50061,490],{"class":347},[288,50063,305],{"class":298},[288,50065,50066,50068],{"class":290,"line":2793},[288,50067,4262],{"class":294},[288,50069,34251],{"class":298},[288,50071,50072],{"class":290,"line":8121},[288,50073,2572],{"emptyLinePlaceholder":217},[288,50075,50076],{"class":290,"line":8145},[288,50077,34260],{"class":357},[288,50079,50080,50082,50084],{"class":290,"line":8150},[288,50081,32120],{"class":294},[288,50083,34267],{"class":2135},[288,50085,34270],{"class":298},[288,50087,50088],{"class":290,"line":8156},[288,50089,34275],{"class":357},[288,50091,50092,50094,50096,50098,50100,50102,50104],{"class":290,"line":8183},[288,50093,31410],{"class":298},[288,50095,344],{"class":294},[288,50097,31417],{"class":403},[288,50099,1876],{"class":294},[288,50101,31422],{"class":298},[288,50103,1873],{"class":294},[288,50105,34292],{"class":403},[288,50107,50108,50110,50112],{"class":290,"line":8188},[288,50109,31462],{"class":298},[288,50111,344],{"class":294},[288,50113,32462],{"class":298},[288,50115,50116],{"class":290,"line":8194},[288,50117,2572],{"emptyLinePlaceholder":217},[288,50119,50120],{"class":290,"line":8206},[288,50121,34309],{"class":357},[288,50123,50124,50126,50128],{"class":290,"line":8218},[288,50125,34314],{"class":298},[288,50127,344],{"class":294},[288,50129,32515],{"class":347},[288,50131,50132,50134,50136],{"class":290,"line":8230},[288,50133,34323],{"class":298},[288,50135,344],{"class":294},[288,50137,3257],{"class":347},[288,50139,50140],{"class":290,"line":9889},[288,50141,2572],{"emptyLinePlaceholder":217},[288,50143,50144],{"class":290,"line":9914},[288,50145,34336],{"class":357},[288,50147,50148],{"class":290,"line":9937},[288,50149,34341],{"class":357},[288,50151,50152],{"class":290,"line":9961},[288,50153,34346],{"class":357},[288,50155,50156,50158],{"class":290,"line":9966},[288,50157,34351],{"class":294},[288,50159,33057],{"class":298},[288,50161,50162],{"class":290,"line":9971},[288,50163,34358],{"class":357},[288,50165,50166,50168,50170,50172],{"class":290,"line":9976},[288,50167,3575],{"class":294},[288,50169,34365],{"class":298},[288,50171,26216],{"class":294},[288,50173,34370],{"class":298},[288,50175,50176,50178,50180],{"class":290,"line":9985},[288,50177,34375],{"class":298},[288,50179,344],{"class":294},[288,50181,34380],{"class":298},[288,50183,50184,50186,50188],{"class":290,"line":9990},[288,50185,34385],{"class":298},[288,50187,344],{"class":294},[288,50189,34390],{"class":298},[288,50191,50192],{"class":290,"line":9996},[288,50193,34395],{"class":357},[288,50195,50196],{"class":290,"line":10017},[288,50197,33048],{"class":298},[288,50199,50200],{"class":290,"line":10023},[288,50201,34404],{"class":357},[288,50203,50204,50206,50208],{"class":290,"line":10037},[288,50205,32833],{"class":298},[288,50207,344],{"class":294},[288,50209,34413],{"class":298},[288,50211,50212],{"class":290,"line":10043},[288,50213,34418],{"class":357},[288,50215,50216,50218,50220,50222,50224,50226,50228],{"class":290,"line":10070},[288,50217,32850],{"class":298},[288,50219,344],{"class":294},[288,50221,32855],{"class":298},[288,50223,32858],{"class":5389},[288,50225,344],{"class":294},[288,50227,516],{"class":347},[288,50229,305],{"class":298},[288,50231,50232],{"class":290,"line":10079},[288,50233,34439],{"class":357},[288,50235,50236],{"class":290,"line":10085},[288,50237,34444],{"class":357},[288,50239,50240],{"class":290,"line":10093},[288,50241,34449],{"class":357},[288,50243,50244,50246,50248,50250,50252],{"class":290,"line":10098},[288,50245,34454],{"class":298},[288,50247,9650],{"class":294},[288,50249,32960],{"class":298},[288,50251,3121],{"class":294},[288,50253,34463],{"class":298},[288,50255,50256],{"class":290,"line":16777},[288,50257,34468],{"class":357},[288,50259,50260,50262,50264,50266,50268],{"class":290,"line":16783},[288,50261,34473],{"class":298},[288,50263,9650],{"class":294},[288,50265,34478],{"class":298},[288,50267,490],{"class":347},[288,50269,305],{"class":298},[288,50271,50272],{"class":290,"line":16806},[288,50273,2572],{"emptyLinePlaceholder":217},[288,50275,50276],{"class":290,"line":16812},[288,50277,34491],{"class":357},[288,50279,50280,50282,50284,50286,50288],{"class":290,"line":16835},[288,50281,34496],{"class":298},[288,50283,344],{"class":294},[288,50285,34501],{"class":298},[288,50287,881],{"class":294},[288,50289,34506],{"class":298},[288,50291,50292],{"class":290,"line":16849},[288,50293,34511],{"class":357},[288,50295,50296,50298,50300,50302],{"class":290,"line":16869},[288,50297,32624],{"class":347},[288,50299,299],{"class":298},[288,50301,34520],{"class":403},[288,50303,34523],{"class":298},[288,50305,50306],{"class":290,"line":16875},[288,50307,2572],{"emptyLinePlaceholder":217},[288,50309,50310],{"class":290,"line":16886},[288,50311,34532],{"class":357},[288,50313,50314,50316,50318,50320,50322],{"class":290,"line":16909},[288,50315,1703],{"class":294},[288,50317,31393],{"class":347},[288,50319,3121],{"class":294},[288,50321,31398],{"class":403},[288,50323,3911],{"class":298},[288,50325,50326],{"class":290,"line":16931},[288,50327,34549],{"class":357},[288,50329,50330,50332,50334],{"class":290,"line":16936},[288,50331,31462],{"class":298},[288,50333,344],{"class":294},[288,50335,44724],{"class":298},[288,50337,50338],{"class":290,"line":16942},[288,50339,34562],{"class":357},[288,50341,50342],{"class":290,"line":16956},[288,50343,34567],{"class":357},[288,50345,50346,50348,50350],{"class":290,"line":16969},[288,50347,34572],{"class":298},[288,50349,34575],{"class":403},[288,50351,30670],{"class":298},[288,50353,50354],{"class":290,"line":16974},[288,50355,34582],{"class":357},[288,50357,50358,50360,50362],{"class":290,"line":16988},[288,50359,34195],{"class":298},[288,50361,344],{"class":294},[288,50363,34591],{"class":298},[288,50365,50366],{"class":290,"line":16993},[288,50367,34596],{"class":357},[288,50369,50370],{"class":290,"line":16999},[288,50371,34601],{"class":298},[288,50373,50374],{"class":290,"line":17004},[288,50375,2572],{"emptyLinePlaceholder":217},[288,50377,50378],{"class":290,"line":17018},[288,50379,34610],{"class":357},[288,50381,50382],{"class":290,"line":17023},[288,50383,34615],{"class":357},[288,50385,50386,50388,50390,50392,50394,50396,50398],{"class":290,"line":17028},[288,50387,31410],{"class":298},[288,50389,344],{"class":294},[288,50391,31417],{"class":403},[288,50393,1876],{"class":294},[288,50395,31422],{"class":298},[288,50397,1873],{"class":294},[288,50399,34292],{"class":403},[288,50401,50402,50404,50406],{"class":290,"line":17042},[288,50403,31462],{"class":298},[288,50405,344],{"class":294},[288,50407,32462],{"class":298},[288,50409,50410],{"class":290,"line":17054},[288,50411,34644],{"class":357},[288,50413,50414],{"class":290,"line":17059},[288,50415,34649],{"class":357},[288,50417,50418,50420,50422,50424,50427,50429,50432],{"class":290,"line":17072},[288,50419,34654],{"class":298},[288,50421,344],{"class":294},[288,50423,1187],{"class":298},[288,50425,50426],{"class":403},"'猫'",[288,50428,675],{"class":298},[288,50430,50431],{"class":403},"'狗'",[288,50433,33419],{"class":298},[288,50435,50436,50438],{"class":290,"line":17077},[288,50437,34351],{"class":294},[288,50439,33057],{"class":298},[288,50441,50442],{"class":290,"line":17082},[288,50443,34719],{"class":357},[288,50445,50446,50448,50450,50452],{"class":290,"line":17087},[288,50447,3575],{"class":294},[288,50449,34726],{"class":298},[288,50451,26216],{"class":294},[288,50453,34370],{"class":298},[288,50455,50456,50458,50460],{"class":290,"line":17100},[288,50457,32783],{"class":298},[288,50459,344],{"class":294},[288,50461,32788],{"class":298},[288,50463,50464,50466,50468],{"class":290,"line":17105},[288,50465,32798],{"class":298},[288,50467,344],{"class":294},[288,50469,32803],{"class":298},[288,50471,50472],{"class":290,"line":32806},[288,50473,2572],{"emptyLinePlaceholder":217},[288,50475,50476],{"class":290,"line":32812},[288,50477,34755],{"class":357},[288,50479,50480],{"class":290,"line":32818},[288,50481,33048],{"class":298},[288,50483,50484],{"class":290,"line":32824},[288,50485,34764],{"class":357},[288,50487,50488,50490,50492],{"class":290,"line":32830},[288,50489,32833],{"class":298},[288,50491,344],{"class":294},[288,50493,32838],{"class":298},[288,50495,50496],{"class":290,"line":32841},[288,50497,34777],{"class":357},[288,50499,50500,50502,50504,50506,50508,50510,50512],{"class":290,"line":32847},[288,50501,32850],{"class":298},[288,50503,344],{"class":294},[288,50505,32855],{"class":298},[288,50507,32858],{"class":5389},[288,50509,344],{"class":294},[288,50511,516],{"class":347},[288,50513,305],{"class":298},[288,50515,50516],{"class":290,"line":32867},[288,50517,34798],{"class":357},[288,50519,50520,50522,50524],{"class":290,"line":32873},[288,50521,34803],{"class":298},[288,50523,344],{"class":294},[288,50525,34808],{"class":298},[288,50527,50528,50530,50532],{"class":290,"line":32884},[288,50529,34813],{"class":298},[288,50531,344],{"class":294},[288,50533,34818],{"class":298},[288,50535,50536,50538,50540,50542,50544,50546,50548,50550],{"class":290,"line":32890},[288,50537,34823],{"class":347},[288,50539,299],{"class":298},[288,50541,34828],{"class":403},[288,50543,34831],{"class":298},[288,50545,34834],{"class":403},[288,50547,675],{"class":298},[288,50549,34839],{"class":403},[288,50551,34842],{"class":298},[5299,50553,50554],{},"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":205,"searchDepth":206,"depth":206,"links":50556},[50557,50558,50559,50560],{"id":30764,"depth":1352,"text":30765},{"id":38012,"depth":1352,"text":38013},{"id":41445,"depth":1352,"text":41446},{"id":45454,"depth":1352,"text":45455},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30756,"description":214},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50567,"title":50568,"body":50569,"description":214,"extension":215,"meta":50576,"navigation":217,"path":50577,"seo":50578,"stem":50579,"__hash__":50580},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50570,"toc":50574},[50571],[10,50572,50568],{"id":50573},"_3yolo模型学习",{"title":205,"searchDepth":206,"depth":206,"links":50575},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50568,"description":214},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50582,"title":50583,"body":50584,"description":50591,"extension":215,"meta":50592,"navigation":217,"path":50594,"seo":50595,"stem":50596,"__hash__":50597},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50585,"toc":50589},[50586],[19,50587,50588],{},"yolo模型还未补充",{"title":205,"searchDepth":206,"depth":206,"links":50590},[],"深度学习学习",{"category":50593},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50583,"description":50591},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50599,"title":50600,"body":50601,"description":214,"extension":215,"meta":50626,"navigation":217,"path":50627,"seo":50628,"stem":50629,"__hash__":50630},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50602,"toc":50624},[50603,50606,50609,50614,50621],[10,50604,50600],{"id":50605},"_1工具",[19,50607,50608],{},"提示错误插件：有问题会提前报错",[19,50610,50611],{},[200,50612],{"alt":205,"src":50613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50615,50616],{},[104,50617,50620],{"href":50618,"rel":50619},"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",[108],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50622,50623],{},"alt键加上下箭头可以实现语句的移动",{"title":205,"searchDepth":206,"depth":206,"links":50625},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50600,"description":214},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50632,"title":50633,"body":50634,"description":214,"extension":215,"meta":53498,"navigation":217,"path":53499,"seo":53500,"stem":53501,"__hash__":53502},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50635,"toc":53449},[50636,50639,50643,50647,50652,50655,50660,50664,50671,50676,50683,50688,50695,50700,50704,50709,50712,50716,50721,50725,50730,50733,50736,50739,50742,50745,50748,50751,50754,50759,50764,50769,50773,50776,50779,50783,50788,50791,50799,50804,50821,50829,50834,50839,50844,50849,50854,50857,50862,50867,50871,50880,50885,50890,50894,50899,50902,50906,50911,50919,50924,50929,50932,50937,50942,50947,50950,50953,50956,50961,50966,50969,50974,50977,50982,50985,50988,50991,50996,50999,51002,51017,51022,51027,51032,51035,51038,51041,51055,51058,51063,51068,51071,51074,51077,51080,51083,51086,51089,51093,51097,51102,51106,51109,51114,51119,51122,51127,51130,51134,51139,51142,51145,51148,51151,51154,51157,51160,51163,51166,51170,51175,51180,51185,51188,51191,51195,51200,51203,51207,51210,51213,51218,51221,51224,51228,51232,51235,51240,51245,51248,51277,51282,51287,51292,51297,51301,51306,51310,51315,51318,51322,51326,51331,51335,51340,51345,51349,51354,51357,51359,51362,51367,51371,51376,51380,51384,51389,51394,51399,51404,51408,51413,51418,51423,51426,51429,51434,51437,51442,51447,51452,51457,51461,52268,52272,52615,52620,52623,52626,52629,52632,52635,52638,52641,52644,52646,52649,52651,52654,52658,52663,52666,52669,52672,52676,52681,52686,52706,52709,52713,52718,52723,52740,52744,52773,52777,52799,52801,52840,52848,52854,52858,52861,52864,52869,52874,52877,52880,52883,52888,52893,52896,52899,52902,52905,52908,52911,52914,52917,52920,52923,52926,52928,52931,52934,52937,52940,52943,52946,52949,52952,52956,52961,52964,52969,52972,52975,52978,52981,52984,52987,52990,52992,52995,52998,53001,53004,53007,53010,53014,53017,53026,53029,53034,53037,53042,53045,53048,53051,53054,53057,53060,53063,53067,53071,53074,53077,53082,53087,53092,53096,53101,53106,53109,53112,53115,53118,53121,53126,53129,53134,53136,53141,53144,53148,53153,53156,53159,53164,53168,53171,53176,53179,53182,53211,53216,53219,53222,53225,53228,53231,53235,53238,53324,53328,53331,53336,53341,53348,53351,53354,53357,53360,53363,53368,53373,53376,53379,53382,53385,53388,53391,53394,53397,53400,53402,53405,53409,53414,53419,53424,53427,53432,53437,53440,53443,53446],[10,50637,50633],{"id":50638},"_2基础语法",[14,50640,50642],{"id":50641},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[260,50644,50646],{"id":50645},"_211-js组成","2.1.1 js组成",[243,50648,50649],{},[246,50650,50651],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50653,50654],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[243,50656,50657],{"start":206},[246,50658,50659],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[260,50661,50663],{"id":50662},"_212-js书写位置","2.1.2 js书写位置",[243,50665,50666],{},[246,50667,50668],{},[448,50669,50670],{},"内部 JavaScript",[19,50672,50673],{},[200,50674],{"alt":205,"src":50675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[243,50677,50678],{"start":206},[246,50679,50680],{},[448,50681,50682],{},"外部 JavaScript",[19,50684,50685],{},[200,50686],{"alt":205,"src":50687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[243,50689,50690],{"start":1352},[246,50691,50692],{},[448,50693,50694],{},"内联 JavaScript",[19,50696,50697],{},[200,50698],{"alt":205,"src":50699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[260,50701,50703],{"id":50702},"_213-javascript注释","2.1.3 JavaScript注释",[19,50705,50706],{},[200,50707],{"alt":205,"src":50708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50710,50711],{},"alt+shift+a一定要记住！",[260,50713,50715],{"id":50714},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50717,50718],{},[200,50719],{"alt":205,"src":50720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[260,50722,50724],{"id":50723},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[243,50726,50727],{},[246,50728,50729],{},"输出语法：",[19,50731,50732],{},"①document.write('要出的内容')",[19,50734,50735],{},"向body内输出内容；",[19,50737,50738],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50740,50741],{},"②alert('要出的内容')",[19,50743,50744],{},"页面弹出警告对话框",[19,50746,50747],{},"③console.log('控制台打印')",[19,50749,50750],{},"控制台输出语法，程序员调试使用",[19,50752,50753],{},"输入log就行，自动生成：",[19,50755,50756],{},[200,50757],{"alt":205,"src":50758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[243,50760,50761],{"start":206},[246,50762,50763],{},"输入语法：",[19,50765,50766],{},[200,50767],{"alt":205,"src":50768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[260,50770,50772],{"id":50771},"_2116-字面量","21.1.6 字面量",[19,50774,50775],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50777,50778],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50780,50782],{"id":50781},"_22-变量","2.2 变量",[243,50784,50785],{},[246,50786,50787],{},"变量声明",[19,50789,50790],{},"let 变量名",[1304,50792,50793,50796],{},[246,50794,50795],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[246,50797,50798],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[243,50800,50801],{"start":206},[246,50802,50803],{},"变量赋值",[280,50805,50809],{"className":50806,"code":50807,"language":50808,"meta":205,"style":205},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[25,50810,50811,50816],{"__ignoreMap":205},[288,50812,50813],{"class":290,"line":291},[288,50814,50815],{"class":298},"let age\n",[288,50817,50818],{"class":290,"line":206},[288,50819,50820],{"class":298},"age=18\n",[243,50822,50823,50826],{"start":1352},[246,50824,50825],{},"连这些（变量的初始化）：let age=18",[246,50827,50828],{},"更新变量",[19,50830,50831],{},[200,50832],{"alt":205,"src":50833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[243,50835,50836],{"start":1373},[246,50837,50838],{},"声明多个变量",[19,50840,50841],{},[200,50842],{"alt":205,"src":50843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[243,50845,50846],{"start":1387},[246,50847,50848],{},"变量命名规则与规范",[19,50850,50851],{},[200,50852],{"alt":205,"src":50853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50855,50856],{},"遵守小驼峰！",[243,50858,50859],{"start":1393},[246,50860,50861],{},"变量拓展-let和var的区别",[19,50863,50864],{},[200,50865],{"alt":205,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50868,50870],{"id":50869},"_23-数组","2.3 数组",[280,50872,50874],{"className":50806,"code":50873,"language":50808,"meta":205,"style":205},"let arr = []\n",[25,50875,50876],{"__ignoreMap":205},[288,50877,50878],{"class":290,"line":291},[288,50879,50873],{"class":298},[19,50881,50882],{},[200,50883],{"alt":205,"src":50884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50886,50887],{},[200,50888],{"alt":205,"src":50889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50891,50893],{"id":50892},"_24-常量","2.4 常量",[19,50895,50896],{},[200,50897],{"alt":205,"src":50898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50900,50901],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50903,50905],{"id":50904},"_25-数据类型","2.5 数据类型",[19,50907,50908],{},[200,50909],{"alt":205,"src":50910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[243,50912,50913,50916],{},[246,50914,50915],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[246,50917,50918],{},"算数运算符：",[19,50920,50921],{},[200,50922],{"alt":205,"src":50923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[243,50925,50926],{"start":1352},[246,50927,50928],{},"数字类型（Number）",[19,50930,50931],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50933,50934],{},[200,50935],{"alt":205,"src":50936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[243,50938,50939],{"start":1367},[246,50940,50941],{},"字符串类型（string）",[19,50943,50944],{},[200,50945],{"alt":205,"src":50946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50948,50949],{},"反引号也是可以使用的",[19,50951,50952],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50954,50955],{},"例如：document.write(\"我今年\"+age+\"岁\")",[243,50957,50958],{"start":1373},[246,50959,50960],{},"模板字符串",[19,50962,50963],{},[200,50964],{"alt":205,"src":50965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50967,50968],{},"类似于python的字符串格式化",[243,50970,50971],{"start":1387},[246,50972,50973],{},"布尔类型",[19,50975,50976],{},"true 和 false",[243,50978,50979],{"start":1393},[246,50980,50981],{},"未定义类型（underfined）",[19,50983,50984],{},"表示没有赋值",[19,50986,50987],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50989,50990],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[243,50992,50993],{"start":1484},[246,50994,50995],{},"null（空类型）",[19,50997,50998],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51000,51001],{},"赋值了，但是内容为空",[280,51003,51005],{"className":50806,"code":51004,"language":50808,"meta":205,"style":205},"typeof null\n输出的是'object'，是一个对象数据类型\n",[25,51006,51007,51012],{"__ignoreMap":205},[288,51008,51009],{"class":290,"line":291},[288,51010,51011],{"class":298},"typeof null\n",[288,51013,51014],{"class":290,"line":206},[288,51015,51016],{"class":298},"输出的是'object'，是一个对象数据类型\n",[243,51018,51019],{"start":1490},[246,51020,51021],{},"控制台检测数据类型",[19,51023,51024],{},[200,51025],{"alt":205,"src":51026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[243,51028,51029],{"start":1502},[246,51030,51031],{},"类型转换",[19,51033,51034],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51036,51037],{},"转换方式：隐式转换和显示转换",[19,51039,51040],{},"①隐式转换",[1304,51042,51043,51046,51049,51052],{},[246,51044,51045],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[246,51047,51048],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[246,51050,51051],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[246,51053,51054],{},"任何数据和字符串相加结果都是字符串",[19,51056,51057],{},"②显示转换",[19,51059,51060],{},[200,51061],{"alt":205,"src":51062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51064,51065],{},[200,51066],{"alt":205,"src":51067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51069,51070],{},"在输入的时候要用好隐式转换，简单写起来",[19,51072,51073],{},"let num = +prompt(’请输入数字：‘)",[19,51075,51076],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51078,51079],{},"console.log(parseInt('12.333px'))",[19,51081,51082],{},"输出为：12",[19,51084,51085],{},"console.log(parseInt('a'a'a12.333px'))",[19,51087,51088],{},"输出：NaN",[14,51090,51092],{"id":51091},"_26-运算符","2.6 运算符",[260,51094,51096],{"id":51095},"_261-赋值运算符","2.6.1 赋值运算符",[19,51098,51099],{},[200,51100],{"alt":205,"src":51101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[260,51103,51105],{"id":51104},"_262-一元运算符","2.6.2 一元运算符",[19,51107,51108],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51110,51111],{},[200,51112],{"alt":205,"src":51113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51115,51116],{},[200,51117],{"alt":205,"src":51118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51120,51121],{},"两者的区别：",[19,51123,51124],{},[200,51125],{"alt":205,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51128,51129],{},"前置先自加；后置后加，代码执行完之后再加",[260,51131,51133],{"id":51132},"_263-比较运算符","2.6.3 比较运算符",[19,51135,51136],{},[200,51137],{"alt":205,"src":51138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51140,51141],{},"比较运算符也有隐式转换",[19,51143,51144],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51146,51147],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51149,51150],{},"要使用三等，开发的时候",[19,51152,51153],{},"NaN不等于任何人，包括它自己",[19,51155,51156],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51158,51159],{},"7\u002F10=0.7",[19,51161,51162],{},"最后：0.5+0.2=0.7",[19,51164,51165],{},"字符串比较，比较的是字符对应的ASCII码",[260,51167,51169],{"id":51168},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51171,51172],{},[200,51173],{"alt":205,"src":51174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51176,51177],{},[200,51178],{"alt":205,"src":51179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51181,51182],{},[200,51183],{"alt":205,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51186,51187],{},"上述题目选D",[19,51189,51190],{},"与真2假1；或真1假2",[260,51192,51194],{"id":51193},"_265-运算符优先级","2.6.5 运算符优先级",[19,51196,51197],{},[200,51198],{"alt":205,"src":51199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51201,51202],{},"先算逻辑与，后算逻辑或",[14,51204,51206],{"id":51205},"_27-语句","2.7 语句",[19,51208,51209],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51211,51212],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51214,51215],{},[200,51216],{"alt":205,"src":51217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51219,51220],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51222,51223],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[260,51225,51227],{"id":51226},"_271-分支语句","2.7.1 分支语句",[22171,51229,51231],{"id":51230},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51233,51234],{},"if语句单行简单的话，可以不写{}，写在一行就行",[243,51236,51237],{},[246,51238,51239],{},"单分支语句",[19,51241,51242],{},[200,51243],{"alt":205,"src":51244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51246,51247],{},"除了0，所有数字都为真",[280,51249,51251],{"className":50806,"code":51250,"language":50808,"meta":205,"style":205},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[25,51252,51253,51258,51263,51268,51272],{"__ignoreMap":205},[288,51254,51255],{"class":290,"line":291},[288,51256,51257],{"class":298},"if（0) {\n",[288,51259,51260],{"class":290,"line":206},[288,51261,51262],{"class":298},"    let a=1\n",[288,51264,51265],{"class":290,"line":1352},[288,51266,51267],{"class":298},"    alert(typeof a)\n",[288,51269,51270],{"class":290,"line":1367},[288,51271,1737],{"class":298},[288,51273,51274],{"class":290,"line":1373},[288,51275,51276],{"class":298},"不输出，括号为假\n",[243,51278,51279],{"start":206},[246,51280,51281],{},"双分支语句",[19,51283,51284],{},[200,51285],{"alt":205,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[243,51288,51289],{"start":1352},[246,51290,51291],{},"多分支语句",[19,51293,51294],{},[200,51295],{"alt":205,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22171,51298,51300],{"id":51299},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51302,51303],{},[200,51304],{"alt":205,"src":51305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22171,51307,51309],{"id":51308},"_2713-switch语句","2.7.1.3 switch语句",[19,51311,51312],{},[200,51313],{"alt":205,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51316,51317],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[260,51319,51321],{"id":51320},"_272-循环语句","2.7.2 循环语句",[22171,51323,51325],{"id":51324},"_2721-断点演示","2.7.2.1 断点演示",[19,51327,51328],{},[200,51329],{"alt":205,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22171,51332,51334],{"id":51333},"_2722-while循环","2.7.2.2 while循环",[19,51336,51337],{},[200,51338],{"alt":205,"src":51339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51341,51342],{},[200,51343],{"alt":205,"src":51344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22171,51346,51348],{"id":51347},"_2723-for循环","2.7.2.3 for循环",[19,51350,51351],{},[200,51352],{"alt":205,"src":51353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51355,51356],{},"for(;;) {",[19,51358,1243],{},[19,51360,51361],{},"表示无限循环",[19,51363,51364],{},[200,51365],{"alt":205,"src":51366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22171,51368,51370],{"id":51369},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51372,51373],{},[200,51374],{"alt":205,"src":51375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51377,51379],{"id":51378},"_28-数组","2.8 数组",[260,51381,51383],{"id":51382},"_281-基础认识","2.8.1 基础认识",[19,51385,51386],{},[200,51387],{"alt":205,"src":51388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51390,51391],{},[200,51392],{"alt":205,"src":51393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51395,51396],{},[200,51397],{"alt":205,"src":51398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51400,51401],{},[200,51402],{"alt":205,"src":51403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[260,51405,51407],{"id":51406},"_282-操作数组","2.8.2 操作数组",[19,51409,51410],{},[200,51411],{"alt":205,"src":51412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[243,51414,51415],{},[246,51416,51417],{},"添加元素",[19,51419,51420],{},[200,51421],{"alt":205,"src":51422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51424,51425],{},"console.log(arr.push('green'))",[19,51427,51428],{},"输出结果：为新数组的长度",[19,51430,51431],{},[200,51432],{"alt":205,"src":51433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51435,51436],{},"push用的非常多，一定要记住",[243,51438,51439],{},[246,51440,51441],{},"删除元素",[19,51443,51444],{},[200,51445],{"alt":205,"src":51446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51448,51449],{},[200,51450],{"alt":205,"src":51451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51453,51454],{},[200,51455],{"alt":205,"src":51456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[260,51458,51460],{"id":51459},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[280,51462,51464],{"className":50806,"code":51463,"language":50808,"meta":205,"style":205},"\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",[25,51465,51466,51481,51497,51501,51510,51528,51552,51574,51588,51596,51603,51615,51626,51630,51634,51641,51653,51668,51681,51700,51717,51732,51744,51756,51768,51772,51776,51787,51797,51809,51821,51833,51844,51848,51852,51864,51868,51882,51886,51890,51901,51915,51927,51941,51945,51954,51963,51967,51976,51980,51989,51994,51999,52012,52040,52045,52050,52075,52080,52084,52089,52094,52109,52113,52118,52148,52160,52176,52192,52206,52211,52218,52222,52227,52240,52248,52256,52260],{"__ignoreMap":205},[288,51467,51468,51471,51475,51478],{"class":290,"line":291},[288,51469,51470],{"class":298},"\u003C!",[288,51472,51474],{"class":51473},"s9eBZ","DOCTYPE",[288,51476,51477],{"class":2135}," html",[288,51479,51480],{"class":298},">\n",[288,51482,51483,51485,51487,51490,51492,51495],{"class":290,"line":206},[288,51484,1207],{"class":298},[288,51486,50808],{"class":51473},[288,51488,51489],{"class":2135}," lang",[288,51491,344],{"class":298},[288,51493,51494],{"class":403},"\"en\"",[288,51496,51480],{"class":298},[288,51498,51499],{"class":290,"line":1352},[288,51500,2572],{"emptyLinePlaceholder":217},[288,51502,51503,51505,51508],{"class":290,"line":1367},[288,51504,1207],{"class":298},[288,51506,51507],{"class":51473},"head",[288,51509,51480],{"class":298},[288,51511,51512,51515,51518,51521,51523,51526],{"class":290,"line":1373},[288,51513,51514],{"class":298},"    \u003C",[288,51516,51517],{"class":51473},"meta",[288,51519,51520],{"class":2135}," charset",[288,51522,344],{"class":298},[288,51524,51525],{"class":403},"\"UTF-8\"",[288,51527,51480],{"class":298},[288,51529,51530,51532,51534,51537,51539,51542,51545,51547,51550],{"class":290,"line":1387},[288,51531,51514],{"class":298},[288,51533,51517],{"class":51473},[288,51535,51536],{"class":2135}," http-equiv",[288,51538,344],{"class":298},[288,51540,51541],{"class":403},"\"X-UA-Compatible\"",[288,51543,51544],{"class":2135}," content",[288,51546,344],{"class":298},[288,51548,51549],{"class":403},"\"IE=edge\"",[288,51551,51480],{"class":298},[288,51553,51554,51556,51558,51560,51562,51565,51567,51569,51572],{"class":290,"line":1393},[288,51555,51514],{"class":298},[288,51557,51517],{"class":51473},[288,51559,15093],{"class":2135},[288,51561,344],{"class":298},[288,51563,51564],{"class":403},"\"viewport\"",[288,51566,51544],{"class":2135},[288,51568,344],{"class":298},[288,51570,51571],{"class":403},"\"width=device-width, initial-scale=1.0\"",[288,51573,51480],{"class":298},[288,51575,51576,51578,51581,51584,51586],{"class":290,"line":1484},[288,51577,51514],{"class":298},[288,51579,51580],{"class":51473},"title",[288,51582,51583],{"class":298},">Document\u003C\u002F",[288,51585,51580],{"class":51473},[288,51587,51480],{"class":298},[288,51589,51590,51592,51594],{"class":290,"line":1490},[288,51591,51514],{"class":298},[288,51593,5299],{"class":51473},[288,51595,51480],{"class":298},[288,51597,51598,51601],{"class":290,"line":1502},[288,51599,51600],{"class":51473},"        *",[288,51602,15745],{"class":298},[288,51604,51605,51608,51611,51613],{"class":290,"line":1784},[288,51606,51607],{"class":347},"            margin",[288,51609,51610],{"class":298},": ",[288,51612,490],{"class":347},[288,51614,1463],{"class":298},[288,51616,51617,51620,51622,51624],{"class":290,"line":1789},[288,51618,51619],{"class":347},"            padding",[288,51621,51610],{"class":298},[288,51623,490],{"class":347},[288,51625,1463],{"class":298},[288,51627,51628],{"class":290,"line":1795},[288,51629,2701],{"class":298},[288,51631,51632],{"class":290,"line":1800},[288,51633,2572],{"emptyLinePlaceholder":217},[288,51635,51636,51639],{"class":290,"line":1814},[288,51637,51638],{"class":2135},"        .box",[288,51640,15745],{"class":298},[288,51642,51643,51646,51648,51651],{"class":290,"line":1819},[288,51644,51645],{"class":347},"            display",[288,51647,51610],{"class":298},[288,51649,51650],{"class":347},"flex",[288,51652,1463],{"class":298},[288,51654,51655,51658,51660,51663,51666],{"class":290,"line":1825},[288,51656,51657],{"class":347},"            width",[288,51659,51610],{"class":298},[288,51661,51662],{"class":347},"700",[288,51664,51665],{"class":294},"px",[288,51667,1463],{"class":298},[288,51669,51670,51673,51675,51677,51679],{"class":290,"line":1846},[288,51671,51672],{"class":347},"            height",[288,51674,51610],{"class":298},[288,51676,4145],{"class":347},[288,51678,51665],{"class":294},[288,51680,1463],{"class":298},[288,51682,51683,51686,51688,51690,51692,51695,51698],{"class":290,"line":1851},[288,51684,51685],{"class":347},"            border-left",[288,51687,51610],{"class":298},[288,51689,516],{"class":347},[288,51691,51665],{"class":294},[288,51693,51694],{"class":347}," solid",[288,51696,51697],{"class":347}," pink",[288,51699,1463],{"class":298},[288,51701,51702,51705,51707,51709,51711,51713,51715],{"class":290,"line":1865},[288,51703,51704],{"class":347},"            border-bottom",[288,51706,51610],{"class":298},[288,51708,516],{"class":347},[288,51710,51665],{"class":294},[288,51712,51694],{"class":347},[288,51714,51697],{"class":347},[288,51716,1463],{"class":298},[288,51718,51719,51721,51723,51725,51727,51730],{"class":290,"line":1870},[288,51720,51607],{"class":347},[288,51722,51610],{"class":298},[288,51724,953],{"class":347},[288,51726,51665],{"class":294},[288,51728,51729],{"class":347}," auto",[288,51731,1463],{"class":298},[288,51733,51734,51737,51739,51742],{"class":290,"line":1899},[288,51735,51736],{"class":347},"            justify-content",[288,51738,51610],{"class":298},[288,51740,51741],{"class":347},"space-around",[288,51743,1463],{"class":298},[288,51745,51746,51749,51751,51754],{"class":290,"line":1904},[288,51747,51748],{"class":347},"            align-items",[288,51750,51610],{"class":298},[288,51752,51753],{"class":347},"flex-end",[288,51755,1463],{"class":298},[288,51757,51758,51761,51763,51766],{"class":290,"line":1921},[288,51759,51760],{"class":347},"            text-align",[288,51762,51610],{"class":298},[288,51764,51765],{"class":347},"center",[288,51767,1463],{"class":298},[288,51769,51770],{"class":290,"line":1926},[288,51771,2701],{"class":298},[288,51773,51774],{"class":290,"line":1931},[288,51775,2572],{"emptyLinePlaceholder":217},[288,51777,51778,51780,51782,51785],{"class":290,"line":1936},[288,51779,51638],{"class":2135},[288,51781,1257],{"class":294},[288,51783,51784],{"class":51473},"div",[288,51786,15745],{"class":298},[288,51788,51789,51791,51793,51795],{"class":290,"line":1950},[288,51790,51645],{"class":347},[288,51792,51610],{"class":298},[288,51794,51650],{"class":347},[288,51796,1463],{"class":298},[288,51798,51799,51801,51803,51805,51807],{"class":290,"line":1955},[288,51800,51657],{"class":347},[288,51802,51610],{"class":298},[288,51804,953],{"class":347},[288,51806,51665],{"class":294},[288,51808,1463],{"class":298},[288,51810,51811,51814,51816,51819],{"class":290,"line":2749},[288,51812,51813],{"class":347},"            background-color",[288,51815,51610],{"class":298},[288,51817,51818],{"class":347},"pink",[288,51820,1463],{"class":298},[288,51822,51823,51826,51828,51831],{"class":290,"line":2763},[288,51824,51825],{"class":347},"            flex-direction",[288,51827,51610],{"class":298},[288,51829,51830],{"class":347},"column",[288,51832,1463],{"class":298},[288,51834,51835,51837,51839,51842],{"class":290,"line":2771},[288,51836,51736],{"class":347},[288,51838,51610],{"class":298},[288,51840,51841],{"class":347},"space-between",[288,51843,1463],{"class":298},[288,51845,51846],{"class":290,"line":2776},[288,51847,2701],{"class":298},[288,51849,51850],{"class":290,"line":2782},[288,51851,2572],{"emptyLinePlaceholder":217},[288,51853,51854,51856,51859,51862],{"class":290,"line":2788},[288,51855,51638],{"class":2135},[288,51857,51858],{"class":51473}," div",[288,51860,51861],{"class":51473}," span",[288,51863,15745],{"class":298},[288,51865,51866],{"class":290,"line":2793},[288,51867,2572],{"emptyLinePlaceholder":217},[288,51869,51870,51873,51875,51878,51880],{"class":290,"line":8121},[288,51871,51872],{"class":347},"            margin-top",[288,51874,51610],{"class":298},[288,51876,51877],{"class":347},"-20",[288,51879,51665],{"class":294},[288,51881,1463],{"class":298},[288,51883,51884],{"class":290,"line":8145},[288,51885,2701],{"class":298},[288,51887,51888],{"class":290,"line":8150},[288,51889,2572],{"emptyLinePlaceholder":217},[288,51891,51892,51894,51896,51899],{"class":290,"line":8156},[288,51893,51638],{"class":2135},[288,51895,51858],{"class":51473},[288,51897,51898],{"class":51473}," h4",[288,51900,15745],{"class":298},[288,51902,51903,51906,51908,51911,51913],{"class":290,"line":8183},[288,51904,51905],{"class":347},"            margin-bottom",[288,51907,51610],{"class":298},[288,51909,51910],{"class":347},"-35",[288,51912,51665],{"class":294},[288,51914,1463],{"class":298},[288,51916,51917,51919,51921,51923,51925],{"class":290,"line":8188},[288,51918,51657],{"class":347},[288,51920,51610],{"class":298},[288,51922,653],{"class":347},[288,51924,51665],{"class":294},[288,51926,1463],{"class":298},[288,51928,51929,51932,51934,51937,51939],{"class":290,"line":8194},[288,51930,51931],{"class":347},"            margin-left",[288,51933,51610],{"class":298},[288,51935,51936],{"class":347},"-10",[288,51938,51665],{"class":294},[288,51940,1463],{"class":298},[288,51942,51943],{"class":290,"line":8206},[288,51944,2701],{"class":298},[288,51946,51947,51950,51952],{"class":290,"line":8218},[288,51948,51949],{"class":298},"    \u003C\u002F",[288,51951,5299],{"class":51473},[288,51953,51480],{"class":298},[288,51955,51956,51959,51961],{"class":290,"line":8230},[288,51957,51958],{"class":298},"\u003C\u002F",[288,51960,51507],{"class":51473},[288,51962,51480],{"class":298},[288,51964,51965],{"class":290,"line":9889},[288,51966,2572],{"emptyLinePlaceholder":217},[288,51968,51969,51971,51974],{"class":290,"line":9914},[288,51970,1207],{"class":298},[288,51972,51973],{"class":51473},"body",[288,51975,51480],{"class":298},[288,51977,51978],{"class":290,"line":9937},[288,51979,2572],{"emptyLinePlaceholder":217},[288,51981,51982,51984,51987],{"class":290,"line":9961},[288,51983,51514],{"class":298},[288,51985,51986],{"class":51473},"script",[288,51988,51480],{"class":298},[288,51990,51991],{"class":290,"line":9966},[288,51992,51993],{"class":357},"        \u002F\u002F 1. 四次弹框效果\n",[288,51995,51996],{"class":290,"line":9971},[288,51997,51998],{"class":357},"        \u002F\u002F 声明一个新的数组\n",[288,52000,52001,52004,52007,52009],{"class":290,"line":9976},[288,52002,52003],{"class":294},"        let",[288,52005,52006],{"class":298}," arr ",[288,52008,344],{"class":294},[288,52010,52011],{"class":298}," []\n",[288,52013,52014,52016,52018,52021,52023,52025,52027,52029,52031,52034,52036,52038],{"class":290,"line":9985},[288,52015,3575],{"class":294},[288,52017,1830],{"class":298},[288,52019,52020],{"class":294},"let",[288,52022,9611],{"class":298},[288,52024,344],{"class":294},[288,52026,25291],{"class":347},[288,52028,9618],{"class":298},[288,52030,1760],{"class":294},[288,52032,52033],{"class":347}," 4",[288,52035,3386],{"class":298},[288,52037,2464],{"class":294},[288,52039,12615],{"class":298},[288,52041,52042],{"class":290,"line":9990},[288,52043,52044],{"class":357},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[288,52046,52047],{"class":290,"line":9996},[288,52048,52049],{"class":357},"            \u002F\u002F arr.push(num)\n",[288,52051,52052,52055,52058,52060,52063,52065,52068,52070,52073],{"class":290,"line":10017},[288,52053,52054],{"class":298},"            arr.",[288,52056,52057],{"class":2135},"push",[288,52059,299],{"class":298},[288,52061,52062],{"class":2135},"prompt",[288,52064,299],{"class":298},[288,52066,52067],{"class":403},"`请输入第${",[288,52069,738],{"class":298},[288,52071,52072],{"class":403},"}季度的数据:`",[288,52074,30670],{"class":298},[288,52076,52077],{"class":290,"line":10023},[288,52078,52079],{"class":357},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[288,52081,52082],{"class":290,"line":10037},[288,52083,2701],{"class":298},[288,52085,52086],{"class":290,"line":10043},[288,52087,52088],{"class":357},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[288,52090,52091],{"class":290,"line":10070},[288,52092,52093],{"class":357},"        \u002F\u002F 盒子开头\n",[288,52095,52096,52099,52102,52104,52107],{"class":290,"line":10079},[288,52097,52098],{"class":298},"        document.",[288,52100,52101],{"class":2135},"write",[288,52103,299],{"class":298},[288,52105,52106],{"class":403},"` \u003Cdiv class=\"box\">`",[288,52108,305],{"class":298},[288,52110,52111],{"class":290,"line":10085},[288,52112,2572],{"emptyLinePlaceholder":217},[288,52114,52115],{"class":290,"line":10093},[288,52116,52117],{"class":357},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[288,52119,52120,52122,52124,52126,52128,52130,52132,52134,52136,52139,52142,52144,52146],{"class":290,"line":10098},[288,52121,3575],{"class":294},[288,52123,1830],{"class":298},[288,52125,52020],{"class":294},[288,52127,9611],{"class":298},[288,52129,344],{"class":294},[288,52131,4265],{"class":347},[288,52133,9618],{"class":298},[288,52135,1207],{"class":294},[288,52137,52138],{"class":298}," arr.",[288,52140,52141],{"class":347},"length",[288,52143,3386],{"class":298},[288,52145,2464],{"class":294},[288,52147,12615],{"class":298},[288,52149,52150,52153,52155,52157],{"class":290,"line":16777},[288,52151,52152],{"class":298},"            document.",[288,52154,52101],{"class":2135},[288,52156,299],{"class":298},[288,52158,52159],{"class":403},"`\n",[288,52161,52162,52165,52167,52169,52171,52173],{"class":290,"line":16783},[288,52163,52164],{"class":403},"              \u003Cdiv style=\"height: ${",[288,52166,4052],{"class":298},[288,52168,1187],{"class":403},[288,52170,738],{"class":298},[288,52172,1237],{"class":403},[288,52174,52175],{"class":403},"}px;\">\n",[288,52177,52178,52181,52183,52185,52187,52189],{"class":290,"line":16806},[288,52179,52180],{"class":403},"                \u003Cspan>${",[288,52182,4052],{"class":298},[288,52184,1187],{"class":403},[288,52186,738],{"class":298},[288,52188,1237],{"class":403},[288,52190,52191],{"class":403},"}\u003C\u002Fspan>\n",[288,52193,52194,52197,52199,52201,52203],{"class":290,"line":16812},[288,52195,52196],{"class":403},"                \u003Ch4>第${",[288,52198,738],{"class":298},[288,52200,45739],{"class":294},[288,52202,25291],{"class":347},[288,52204,52205],{"class":403},"}季度\u003C\u002Fh4>\n",[288,52207,52208],{"class":290,"line":16835},[288,52209,52210],{"class":403},"              \u003C\u002Fdiv>          \n",[288,52212,52213,52216],{"class":290,"line":16849},[288,52214,52215],{"class":403},"            `",[288,52217,305],{"class":298},[288,52219,52220],{"class":290,"line":16869},[288,52221,2701],{"class":298},[288,52223,52224],{"class":290,"line":16875},[288,52225,52226],{"class":357},"        \u002F\u002F 盒子结尾\n",[288,52228,52229,52231,52233,52235,52238],{"class":290,"line":16886},[288,52230,52098],{"class":298},[288,52232,52101],{"class":2135},[288,52234,299],{"class":298},[288,52236,52237],{"class":403},"` \u003C\u002Fdiv>`",[288,52239,305],{"class":298},[288,52241,52242,52244,52246],{"class":290,"line":16909},[288,52243,51949],{"class":298},[288,52245,51986],{"class":51473},[288,52247,51480],{"class":298},[288,52249,52250,52252,52254],{"class":290,"line":16931},[288,52251,51958],{"class":298},[288,52253,51973],{"class":51473},[288,52255,51480],{"class":298},[288,52257,52258],{"class":290,"line":16936},[288,52259,2572],{"emptyLinePlaceholder":217},[288,52261,52262,52264,52266],{"class":290,"line":16942},[288,52263,51958],{"class":298},[288,52265,50808],{"class":51473},[288,52267,51480],{"class":298},[260,52269,52271],{"id":52270},"_284-冒泡排序","2.8.4 冒泡排序",[280,52273,52275],{"className":50806,"code":52274,"language":50808,"meta":205,"style":205},"\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",[25,52276,52277,52287,52301,52305,52313,52328,52348,52360,52368,52372,52380,52388,52420,52453,52490,52495,52514,52519,52532,52547,52563,52567,52572,52576,52586,52595,52603,52607],{"__ignoreMap":205},[288,52278,52279,52281,52283,52285],{"class":290,"line":291},[288,52280,51470],{"class":298},[288,52282,51474],{"class":51473},[288,52284,51477],{"class":2135},[288,52286,51480],{"class":298},[288,52288,52289,52291,52293,52295,52297,52299],{"class":290,"line":206},[288,52290,1207],{"class":298},[288,52292,50808],{"class":51473},[288,52294,51489],{"class":2135},[288,52296,344],{"class":298},[288,52298,51494],{"class":403},[288,52300,51480],{"class":298},[288,52302,52303],{"class":290,"line":1352},[288,52304,2572],{"emptyLinePlaceholder":217},[288,52306,52307,52309,52311],{"class":290,"line":1367},[288,52308,1207],{"class":298},[288,52310,51507],{"class":51473},[288,52312,51480],{"class":298},[288,52314,52315,52318,52320,52322,52324,52326],{"class":290,"line":1373},[288,52316,52317],{"class":298},"  \u003C",[288,52319,51517],{"class":51473},[288,52321,51520],{"class":2135},[288,52323,344],{"class":298},[288,52325,51525],{"class":403},[288,52327,51480],{"class":298},[288,52329,52330,52332,52334,52336,52338,52340,52342,52344,52346],{"class":290,"line":1387},[288,52331,52317],{"class":298},[288,52333,51517],{"class":51473},[288,52335,15093],{"class":2135},[288,52337,344],{"class":298},[288,52339,51564],{"class":403},[288,52341,51544],{"class":2135},[288,52343,344],{"class":298},[288,52345,51571],{"class":403},[288,52347,51480],{"class":298},[288,52349,52350,52352,52354,52356,52358],{"class":290,"line":1393},[288,52351,52317],{"class":298},[288,52353,51580],{"class":51473},[288,52355,51583],{"class":298},[288,52357,51580],{"class":51473},[288,52359,51480],{"class":298},[288,52361,52362,52364,52366],{"class":290,"line":1484},[288,52363,51958],{"class":298},[288,52365,51507],{"class":51473},[288,52367,51480],{"class":298},[288,52369,52370],{"class":290,"line":1490},[288,52371,2572],{"emptyLinePlaceholder":217},[288,52373,52374,52376,52378],{"class":290,"line":1502},[288,52375,1207],{"class":298},[288,52377,51973],{"class":51473},[288,52379,51480],{"class":298},[288,52381,52382,52384,52386],{"class":290,"line":1784},[288,52383,52317],{"class":298},[288,52385,51986],{"class":51473},[288,52387,51480],{"class":298},[288,52389,52390,52393,52395,52397,52400,52402,52404,52406,52408,52410,52412,52414,52416,52418],{"class":290,"line":1789},[288,52391,52392],{"class":294},"    let",[288,52394,52006],{"class":298},[288,52396,344],{"class":294},[288,52398,52399],{"class":298}," [",[288,52401,616],{"class":347},[288,52403,12608],{"class":298},[288,52405,590],{"class":347},[288,52407,12608],{"class":298},[288,52409,370],{"class":347},[288,52411,12608],{"class":298},[288,52413,376],{"class":347},[288,52415,12608],{"class":298},[288,52417,516],{"class":347},[288,52419,33419],{"class":298},[288,52421,52422,52424,52426,52428,52430,52432,52434,52436,52438,52440,52442,52445,52447,52449,52451],{"class":290,"line":1795},[288,52423,3373],{"class":294},[288,52425,1830],{"class":298},[288,52427,52020],{"class":294},[288,52429,9611],{"class":298},[288,52431,344],{"class":294},[288,52433,4265],{"class":347},[288,52435,9618],{"class":298},[288,52437,1207],{"class":294},[288,52439,52138],{"class":298},[288,52441,52141],{"class":347},[288,52443,52444],{"class":294}," -",[288,52446,25291],{"class":347},[288,52448,3386],{"class":298},[288,52450,2464],{"class":294},[288,52452,12615],{"class":298},[288,52454,52455,52458,52460,52462,52464,52466,52468,52470,52472,52474,52476,52478,52480,52482,52484,52486,52488],{"class":290,"line":1800},[288,52456,52457],{"class":294},"      for",[288,52459,1830],{"class":298},[288,52461,52020],{"class":294},[288,52463,9673],{"class":298},[288,52465,344],{"class":294},[288,52467,4265],{"class":347},[288,52469,9680],{"class":298},[288,52471,1207],{"class":294},[288,52473,52138],{"class":298},[288,52475,52141],{"class":347},[288,52477,52444],{"class":294},[288,52479,9611],{"class":298},[288,52481,829],{"class":294},[288,52483,25291],{"class":347},[288,52485,9687],{"class":298},[288,52487,2464],{"class":294},[288,52489,12615],{"class":298},[288,52491,52492],{"class":290,"line":1814},[288,52493,52494],{"class":357},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[288,52496,52497,52499,52502,52504,52507,52509,52511],{"class":290,"line":1819},[288,52498,2669],{"class":294},[288,52500,52501],{"class":298}," (arr[j] ",[288,52503,1257],{"class":294},[288,52505,52506],{"class":298}," arr[j ",[288,52508,778],{"class":294},[288,52510,25291],{"class":347},[288,52512,52513],{"class":298},"]) {\n",[288,52515,52516],{"class":290,"line":1825},[288,52517,52518],{"class":357},"          \u002F\u002F 交换两个变量\n",[288,52520,52521,52524,52527,52529],{"class":290,"line":1846},[288,52522,52523],{"class":294},"          let",[288,52525,52526],{"class":298}," tmp ",[288,52528,344],{"class":294},[288,52530,52531],{"class":298}," arr[j]\n",[288,52533,52534,52537,52539,52541,52543,52545],{"class":290,"line":1851},[288,52535,52536],{"class":298},"          arr[j] ",[288,52538,344],{"class":294},[288,52540,52506],{"class":298},[288,52542,778],{"class":294},[288,52544,25291],{"class":347},[288,52546,33419],{"class":298},[288,52548,52549,52552,52554,52556,52558,52560],{"class":290,"line":1865},[288,52550,52551],{"class":298},"          arr[j ",[288,52553,778],{"class":294},[288,52555,25291],{"class":347},[288,52557,4615],{"class":298},[288,52559,344],{"class":294},[288,52561,52562],{"class":298}," tmp\n",[288,52564,52565],{"class":290,"line":1870},[288,52566,2701],{"class":298},[288,52568,52569],{"class":290,"line":1899},[288,52570,52571],{"class":298},"      }\n",[288,52573,52574],{"class":290,"line":1904},[288,52575,2359],{"class":298},[288,52577,52578,52581,52583],{"class":290,"line":1921},[288,52579,52580],{"class":298},"    document.",[288,52582,52101],{"class":2135},[288,52584,52585],{"class":298},"(arr)\n",[288,52587,52588,52591,52593],{"class":290,"line":1926},[288,52589,52590],{"class":298},"  \u003C\u002F",[288,52592,51986],{"class":51473},[288,52594,51480],{"class":298},[288,52596,52597,52599,52601],{"class":290,"line":1931},[288,52598,51958],{"class":298},[288,52600,51973],{"class":51473},[288,52602,51480],{"class":298},[288,52604,52605],{"class":290,"line":1936},[288,52606,2572],{"emptyLinePlaceholder":217},[288,52608,52609,52611,52613],{"class":290,"line":1950},[288,52610,51958],{"class":298},[288,52612,50808],{"class":51473},[288,52614,51480],{"class":298},[19,52616,52617],{},[200,52618],{"alt":205,"src":52619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52621,52622],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52624,52625],{},"let arr = [4, 2, 5, 1, 3]",[19,52627,52628],{},"\u002F\u002F 1.升序排列写法",[19,52630,52631],{},"arr.sort(function (a, b) {",[19,52633,52634],{},"return a - b",[19,52636,52637],{},"})",[19,52639,52640],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52642,52643],{},"\u002F\u002F 降序排列写法",[19,52645,52631],{},[19,52647,52648],{},"return b - a",[19,52650,52637],{},[19,52652,52653],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52655,52657],{"id":52656},"_29-函数","2.9 函数",[19,52659,52660],{},[200,52661],{"alt":205,"src":52662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52664,52665],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52667,52668],{},"函数的声明用function",[19,52670,52671],{},"函数里边可以嵌套函数",[260,52673,52675],{"id":52674},"_291-函数传参","2.9.1 函数传参",[19,52677,52678],{},[200,52679],{"alt":205,"src":52680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52682,52683],{},[200,52684],{"alt":205,"src":52685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1304,52687,52688,52691,52694,52697,52700,52703],{},[246,52689,52690],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[246,52692,52693],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[246,52695,52696],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[246,52698,52699],{},"开发中尽量保持形参和实参个数一致",[246,52701,52702],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[246,52704,52705],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52707,52708],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[260,52710,52712],{"id":52711},"_292-函数的返回值","2.9.2 函数的返回值",[19,52714,52715],{},[200,52716],{"alt":205,"src":52717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52719,52720],{},[200,52721],{"alt":205,"src":52722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1304,52724,52725,52728,52731,52734,52737],{},[246,52726,52727],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[246,52729,52730],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[246,52732,52733],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[246,52735,52736],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[246,52738,52739],{},"断点调试:进入函数内部看执行过程F11",[260,52741,52743],{"id":52742},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[280,52745,52747],{"className":50806,"code":52746,"language":50808,"meta":205,"style":205},"    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",[25,52748,52749,52754,52759,52763,52768],{"__ignoreMap":205},[288,52750,52751],{"class":290,"line":291},[288,52752,52753],{"class":298},"    function fn(a, b) {\n",[288,52755,52756],{"class":290,"line":206},[288,52757,52758],{"class":298},"      console.log(a + b);\n",[288,52760,52761],{"class":290,"line":1352},[288,52762,2359],{"class":298},[288,52764,52765],{"class":290,"line":1367},[288,52766,52767],{"class":298},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[288,52769,52770],{"class":290,"line":1373},[288,52771,52772],{"class":298},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[260,52774,52776],{"id":52775},"_294-作用域","2.9.4 作用域",[1304,52778,52779,52785,52790,52793,52796],{},[246,52780,52781,52782],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[448,52783,52784],{},"作用域",[246,52786,52787],{},[448,52788,52789],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[246,52791,52792],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[246,52794,52795],{},"函数内部可以直接所使用全局变量",[246,52797,52798],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52800,14806],{},[280,52802,52804],{"className":50806,"code":52803,"language":50808,"meta":205,"style":205},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[25,52805,52806,52811,52816,52820,52825,52830,52835],{"__ignoreMap":205},[288,52807,52808],{"class":290,"line":291},[288,52809,52810],{"class":298},"    function fun() {\n",[288,52812,52813],{"class":290,"line":206},[288,52814,52815],{"class":298},"      num = 10\n",[288,52817,52818],{"class":290,"line":1352},[288,52819,2359],{"class":298},[288,52821,52822],{"class":290,"line":1367},[288,52823,52824],{"class":298},"    fun()\n",[288,52826,52827],{"class":290,"line":1373},[288,52828,52829],{"class":298},"    console.log(num)\n",[288,52831,52832],{"class":290,"line":1387},[288,52833,52834],{"class":298},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[288,52836,52837],{"class":290,"line":1393},[288,52838,52839],{"class":298},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1304,52841,52842,52845],{},[246,52843,52844],{},"函数内部的形参可以看做是局部变量",[246,52846,52847],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52849,52850,52851],{},"变量访问原则： ",[448,52852,52853],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[260,52855,52857],{"id":52856},"_295-匿名函数","2.9.5 匿名函数",[19,52859,52860],{},"函数可以分为具名函数和匿名函数",[19,52862,52863],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[243,52865,52866],{},[246,52867,52868],{},"函数表达式",[19,52870,52871],{},[200,52872],{"alt":205,"src":52873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52875,52876],{},"里边也可以写参数",[19,52878,52879],{},"具名函数调用位置可以随意调整；",[19,52881,52882],{},"匿名函数函数表达式形式只能在声明后才可以使用",[243,52884,52885],{"start":206},[246,52886,52887],{},"立即执行函数",[19,52889,52890],{},[200,52891],{"alt":205,"src":52892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52894,52895],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52897,52898],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52900,52901],{},"(function () {})();",[19,52903,52904],{},"不要落下最后的;",[19,52906,52907],{},"立即执行函数必须要加;",[19,52909,52910],{},"分号写前写后都没问题",[19,52912,52913],{},"写前：",[19,52915,52916],{},"(function() {})()",[19,52918,52919],{},";(function () {})();",[19,52921,52922],{},"写后:",[19,52924,52925],{},"(function() {})();",[19,52927,52901],{},[19,52929,52930],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52932,52933],{},"还有一种写法：",[19,52935,52936],{},"(function(){}());",[19,52938,52939],{},"或者:",[19,52941,52942],{},"!function(){}();",[19,52944,52945],{},"立即执行函数有时候也是可以加名字的：",[19,52947,52948],{},"(function flexible(window,document) {}(window,document));",[19,52950,52951],{},"省一些调用方法",[260,52953,52955],{"id":52954},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52957,52958],{},[200,52959],{"alt":205,"src":52960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52962,52963],{},"这样就不用非得给x,y初始化了",[19,52965,52966],{},[200,52967],{"alt":205,"src":52968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52970,52971],{},"代码执行时先看左边",[19,52973,52974],{},"例如：console.log(false && 3+5)",[19,52976,52977],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52979,52980],{},"&&都是真时，就返回最后一个真值",[19,52982,52983],{},"console.log(11 && 22)",[19,52985,52986],{},"输出22",[19,52988,52989],{},"逻辑与：遇真则真",[19,52991,14806],{},[19,52993,52994],{},"let age=1",[19,52996,52997],{},"console.log(11 || age++)",[19,52999,53000],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53002,53003],{},"console.log(11 || 22)",[19,53005,53006],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53008,53009],{},"||如果都是假的话，就取最后一个假的值了",[260,53011,53013],{"id":53012},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53015,53016],{},"显示转换：",[19,53018,53019,53022,53023],{},[448,53020,53021],{},"记忆","： ",[448,53024,53025],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53027,53028],{},"空字符串为假，其他字符串全为真",[19,53030,53031],{},[200,53032],{"alt":205,"src":53033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53035,53036],{},"隐式转换：",[19,53038,53039],{},[200,53040],{"alt":205,"src":53041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53043,53044],{},"隐式转换:",[19,53046,53047],{},"null+3=3",[19,53049,53050],{},"undefined+3=NaN",[19,53052,53053],{},"null==undefined 输出true,他两个都当0看",[19,53055,53056],{},"null===undefined 输出false",[19,53058,53059],{},"undefined做任何操作都是NaN",[19,53061,53062],{},"NaN不等于NaN，NaN表示计算错误",[14,53064,53066],{"id":53065},"_210-对象","2.10 对象",[260,53068,53070],{"id":53069},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53072,53073],{},"对象也是一种数据类型，里边的数据是无序的",[19,53075,53076],{},"对象由属性和方法组成",[19,53078,53079],{},[200,53080],{"alt":205,"src":53081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53083,53084],{},[200,53085],{"alt":205,"src":53086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53088,53089],{},[200,53090],{"alt":205,"src":53091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[260,53093,53095],{"id":53094},"_2102-对象属性","2.10.2 对象属性",[19,53097,53098],{},[200,53099],{"alt":205,"src":53100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[243,53102,53103],{},[246,53104,53105],{},"查询对象",[19,53107,53108],{},"对象名.属性 goods.uname",[19,53110,53111],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53113,53114],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53116,53117],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53119,53120],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[243,53122,53123],{"start":206},[246,53124,53125],{},"重新赋值",[19,53127,53128],{},"对象名.属性=新值",[243,53130,53131],{"start":1352},[246,53132,53133],{},"增加新数据",[19,53135,53128],{},[243,53137,53138],{"start":1367},[246,53139,53140],{},"删除对象中的属性",[19,53142,53143],{},"delete 对象名.属性",[260,53145,53147],{"id":53146},"_2103-对象方法","2.10.3 对象方法",[19,53149,53150],{},[200,53151],{"alt":205,"src":53152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53154,53155],{},"后边跟的是匿名函数",[19,53157,53158],{},"对象外面的叫函数；对象内部的叫方法",[19,53160,53161],{},[200,53162],{"alt":205,"src":53163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[260,53165,53167],{"id":53166},"_2104-遍历对象","2.10.4 遍历对象",[19,53169,53170],{},"理解为加括号的python字典遍历",[19,53172,53173],{},[200,53174],{"alt":205,"src":53175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53177,53178],{},"k是字符串类型",[19,53180,53181],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[280,53183,53185],{"className":50806,"code":53184,"language":50808,"meta":205,"style":205},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[25,53186,53187,53192,53197,53202,53207],{"__ignoreMap":205},[288,53188,53189],{"class":290,"line":291},[288,53190,53191],{"class":298},"   let arr = [1, 2, 3]\n",[288,53193,53194],{"class":290,"line":206},[288,53195,53196],{"class":298},"    for (let k in arr) {\n",[288,53198,53199],{"class":290,"line":1352},[288,53200,53201],{"class":298},"      console.log(k)\n",[288,53203,53204],{"class":290,"line":1367},[288,53205,53206],{"class":298},"      console.log(arr[k])\n",[288,53208,53209],{"class":290,"line":1373},[288,53210,2359],{"class":298},[19,53212,53213],{},[200,53214],{"alt":205,"src":53215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53217,53218],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53220,53221],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53223,53224],{},"for in 得到的k是属性名",[51986,53226,53227],{},"\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",[19,53229,53230],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[260,53232,53234],{"id":53233},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53236,53237],{},"数组中放对象信息",[280,53239,53243],{"className":53240,"code":53241,"language":53242,"meta":205,"style":205},"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",[25,53244,53245,53253,53258,53263,53268,53273,53278,53283,53288,53293,53298,53303,53308,53312,53316],{"__ignoreMap":205},[288,53246,53247,53249,53251],{"class":290,"line":291},[288,53248,1207],{"class":298},[288,53250,51986],{"class":51473},[288,53252,51480],{"class":298},[288,53254,53255],{"class":290,"line":206},[288,53256,53257],{"class":298},"    let students = [\n",[288,53259,53260],{"class":290,"line":1352},[288,53261,53262],{"class":298},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[288,53264,53265],{"class":290,"line":1367},[288,53266,53267],{"class":298},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[288,53269,53270],{"class":290,"line":1373},[288,53271,53272],{"class":298},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[288,53274,53275],{"class":290,"line":1387},[288,53276,53277],{"class":298},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[288,53279,53280],{"class":290,"line":1393},[288,53281,53282],{"class":298},"    ]\n",[288,53284,53285],{"class":290,"line":1484},[288,53286,53287],{"class":298},"    for (let i = 0; i \u003C students.length; i++) {\n",[288,53289,53290],{"class":290,"line":1490},[288,53291,53292],{"class":298},"      for (let k in students[i]) {\n",[288,53294,53295],{"class":290,"line":1502},[288,53296,53297],{"class":298},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[288,53299,53300],{"class":290,"line":1784},[288,53301,53302],{"class":298},"        \u002F\u002F输出每个人的名字：\n",[288,53304,53305],{"class":290,"line":1789},[288,53306,53307],{"class":298},"        \u002F\u002Fconsole.log(students[i].name)\n",[288,53309,53310],{"class":290,"line":1795},[288,53311,52571],{"class":298},[288,53313,53314],{"class":290,"line":1800},[288,53315,2359],{"class":298},[288,53317,53318,53320,53322],{"class":290,"line":1814},[288,53319,52590],{"class":298},[288,53321,51986],{"class":51473},[288,53323,51480],{"class":298},[260,53325,53327],{"id":53326},"_2106-内置对象","2.10.6 内置对象",[19,53329,53330],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[243,53332,53333],{},[246,53334,53335],{},"数学对象Math",[19,53337,53338],{},[200,53339],{"alt":205,"src":53340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53342,53343],{},[104,53344,53347],{"href":53345,"rel":53346},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[108],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53349,53350],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53352,53353],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53355,53356],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53358,53359],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53361,53362],{},"null属于对象数据类型",[243,53364,53365],{"start":206},[246,53366,53367],{},"生成任意范围随机数",[19,53369,53370],{},[200,53371],{"alt":205,"src":53372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53374,53375],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53377,53378],{},"乘以几就取不到几",[19,53380,53381],{},"取数组中的随机元素：",[19,53383,53384],{},"let arr = ['red', 'green', 'blue']",[19,53386,53387],{},"let random = Math.floor(Math.random() * arr.length)",[19,53389,53390],{},"console.log(arr[random])",[19,53392,53393],{},"这个函数得到的是全闭区间",[19,53395,53396],{},"function getRandom(N, M) {",[19,53398,53399],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53401,1243],{},[19,53403,53404],{},"console.log(getRandom(4, 8))",[260,53406,53408],{"id":53407},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53410,53411],{},[200,53412],{"alt":205,"src":53413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53415,53416],{},[200,53417],{"alt":205,"src":53418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53420,53421],{},[200,53422],{"alt":205,"src":53423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53425,53426],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53428,53429],{},[200,53430],{"alt":205,"src":53431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53433,53434],{},[200,53435],{"alt":205,"src":53436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53438,53439],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53441,53442],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53444,53445],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5299,53447,53448],{},"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":205,"searchDepth":206,"depth":206,"links":53450},[53451,53459,53460,53461,53462,53463,53470,53474,53480,53489],{"id":50641,"depth":206,"text":50642,"children":53452},[53453,53454,53455,53456,53457,53458],{"id":50645,"depth":1352,"text":50646},{"id":50662,"depth":1352,"text":50663},{"id":50702,"depth":1352,"text":50703},{"id":50714,"depth":1352,"text":50715},{"id":50723,"depth":1352,"text":50724},{"id":50771,"depth":1352,"text":50772},{"id":50781,"depth":206,"text":50782},{"id":50869,"depth":206,"text":50870},{"id":50892,"depth":206,"text":50893},{"id":50904,"depth":206,"text":50905},{"id":51091,"depth":206,"text":51092,"children":53464},[53465,53466,53467,53468,53469],{"id":51095,"depth":1352,"text":51096},{"id":51104,"depth":1352,"text":51105},{"id":51132,"depth":1352,"text":51133},{"id":51168,"depth":1352,"text":51169},{"id":51193,"depth":1352,"text":51194},{"id":51205,"depth":206,"text":51206,"children":53471},[53472,53473],{"id":51226,"depth":1352,"text":51227},{"id":51320,"depth":1352,"text":51321},{"id":51378,"depth":206,"text":51379,"children":53475},[53476,53477,53478,53479],{"id":51382,"depth":1352,"text":51383},{"id":51406,"depth":1352,"text":51407},{"id":51459,"depth":1352,"text":51460},{"id":52270,"depth":1352,"text":52271},{"id":52656,"depth":206,"text":52657,"children":53481},[53482,53483,53484,53485,53486,53487,53488],{"id":52674,"depth":1352,"text":52675},{"id":52711,"depth":1352,"text":52712},{"id":52742,"depth":1352,"text":52743},{"id":52775,"depth":1352,"text":52776},{"id":52856,"depth":1352,"text":52857},{"id":52954,"depth":1352,"text":52955},{"id":53012,"depth":1352,"text":53013},{"id":53065,"depth":206,"text":53066,"children":53490},[53491,53492,53493,53494,53495,53496,53497],{"id":53069,"depth":1352,"text":53070},{"id":53094,"depth":1352,"text":53095},{"id":53146,"depth":1352,"text":53147},{"id":53166,"depth":1352,"text":53167},{"id":53233,"depth":1352,"text":53234},{"id":53326,"depth":1352,"text":53327},{"id":53407,"depth":1352,"text":53408},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50633,"description":214},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53504,"title":53505,"body":53506,"description":214,"extension":215,"meta":76846,"navigation":217,"path":76847,"seo":76848,"stem":76849,"__hash__":76850},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53507,"toc":76786},[53508,53511,53514,53517,53522,53525,53528,53531,53535,53539,53545,53550,53558,53565,53568,53572,53577,53582,53587,53590,53593,53604,53607,53611,53614,53617,53622,53627,53632,53635,53638,53730,53733,53738,53741,53746,53749,53752,53757,53760,53765,53769,53772,53786,53790,53795,53798,53801,53805,53810,53813,53817,53821,53826,53830,53835,53838,53841,53844,53847,53850,53853,53858,53863,53891,53894,53897,53900,53905,53908,53911,53914,53917,53921,53950,53954,53959,53964,53967,53970,53973,53978,54093,54098,54103,54264,54269,54272,54276,54281,54286,54289,54292,54295,54298,54301,54304,54307,54310,54313,54316,54319,54322,54325,54328,54330,54333,54336,54339,54344,54348,54745,54748,54754,54758,54763,56045,56050,56053,56056,56059,56064,57260,57264,57270,57275,57278,57283,57288,57292,57296,57301,57304,57309,57312,57315,57319,58227,58230,58234,58455,58458,58461,58464,58690,58693,58917,58920,58924,58929,58932,58935,59163,59166,59199,59202,59206,59211,59215,59218,59221,59224,59227,59230,59233,59236,59241,60521,60525,60528,61621,61625,61628,61631,61634,61637,61641,61644,61647,61649,61657,63138,63142,63145,63148,63151,63360,63363,63367,63371,63376,63381,63384,63387,63392,63396,63401,63404,63513,63517,63522,63527,63530,63533,63537,63542,63547,63552,63555,63558,63569,63572,63577,63582,63585,63588,63661,63665,63670,63673,63675,63686,63690,63695,65021,65024,65027,65030,65032,65035,65038,65041,65044,65047,65050,65053,65056,65059,65062,65065,65068,65070,65072,65075,65079,66173,66176,66179,66195,66209,66212,66217,66223,66228,66232,66236,66241,66245,66250,66692,66697,66700,66704,66709,66712,66715,66719,66724,66728,66733,66738,66742,66747,66752,66755,66760,66765,66769,66774,66779,66883,66886,66890,66895,67261,67264,67267,67270,67273,67276,67279,67282,67285,68581,68585,68590,68595,68598,68601,68604,68607,68609,68614,68619,68622,68626,68631,68636,68641,68644,68647,68650,68653,68656,68661,68664,68668,68673,68678,68682,68687,68690,68695,68698,68701,68704,68707,68710,68715,68718,68721,68724,68727,68731,68736,68739,68743,68748,68751,68754,68758,68787,68790,68794,68798,68803,68807,68812,68815,68818,68821,68824,68827,68830,68833,68836,68839,68842,68845,68848,68851,68854,68858,68863,68868,68871,68875,68879,68884,68887,68891,68894,68897,68902,68907,68912,68917,68922,68925,68928,68933,68938,68942,68947,68950,68955,68958,68961,68964,68967,68972,68975,68984,68988,68993,68996,68999,69003,69006,69011,69015,69018,69024,69030,69034,69060,69063,70624,70627,71123,71126,71131,71136,71141,71145,71150,71155,71160,71164,71169,71172,71175,71178,71181,71185,71188,71193,71196,71201,71205,71210,71213,71218,71223,71228,71231,71234,71239,71244,71247,71250,71254,71257,71262,71265,71270,71273,71278,71283,71288,71291,71296,71361,71364,71375,71379,71384,71556,71560,71565,71568,71571,71574,71578,71589,71593,71596,71601,71606,71609,71612,71615,71618,71621,71623,71626,71629,71632,71637,71640,71645,71648,71652,71655,71658,71672,71676,71679,71734,71739,71742,71745,71750,71753,71757,71762,71892,71896,71901,71906,71987,71992,71996,71999,72004,72009,72015,72018,72021,72024,72028,72033,72036,72047,72051,72068,75115,75119,75122,75125,75128,75149,75153,75156,75164,75167,75172,75175,75178,75183,75188,75192,75213,75217,75222,75225,75228,75231,75234,75238,75243,75246,75250,75255,75258,75263,75266,75271,75274,75279,76482,76486,76491,76494,76499,76783],[10,53509,53505],{"id":53510},"_3web-apis",[19,53512,53513],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53515,53516],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53518,53519],{},[200,53520],{"alt":205,"src":53521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53523,53524],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53526,53527],{},"建议数组和对象使用 const 来声明",[19,53529,53530],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53532,53534],{"id":53533},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[260,53536,53538],{"id":53537},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53540,53541,53544],{},[25,53542,53543],{},"document"," = HTML 文件解析后的对象化表示；",[19,53546,53547,53549],{},[25,53548,53543],{}," ≠ HTML 文件本身",[19,53551,53552,53557],{},[448,53553,53554],{},[25,53555,53556],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53559,53560,53564],{},[448,53561,53562],{},[25,53563,53543],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53566,53567],{},"document实际上为window.document的简写",[260,53569,53571],{"id":53570},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53573,53574],{},[200,53575],{"alt":205,"src":53576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53578,53579],{},[200,53580],{"alt":205,"src":53581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53583,53584],{},[200,53585],{"alt":205,"src":53586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53588,53589],{},"console.dir()",[19,53591,53592],{},"dir用来打印对象",[1304,53594,53595,53598,53601],{},[246,53596,53597],{},"任何一个标签，都是一个对象",[246,53599,53600],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[246,53602,53603],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53605,53606],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[260,53608,53610],{"id":53609},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53612,53613],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53615,53616],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53618,53619],{},[448,53620,53621],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[243,53623,53624],{},[246,53625,53626],{},"利用CSS选择器来获取标签元素",[19,53628,53629],{},[200,53630],{"alt":205,"src":53631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53633,53634],{},"里边的选择器必须必须加引号！！！",[19,53636,53637],{},"只选择第一个元素",[280,53639,53641],{"className":53240,"code":53640,"language":53242,"meta":205,"style":205},"\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",[25,53642,53643,53651,53672,53691,53699,53704,53709,53714,53722],{"__ignoreMap":205},[288,53644,53645,53647,53649],{"class":290,"line":291},[288,53646,1207],{"class":298},[288,53648,51973],{"class":51473},[288,53650,51480],{"class":298},[288,53652,53653,53655,53657,53660,53662,53665,53668,53670],{"class":290,"line":206},[288,53654,52317],{"class":298},[288,53656,51784],{"class":51473},[288,53658,53659],{"class":2135}," class",[288,53661,344],{"class":298},[288,53663,53664],{"class":403},"\"box\"",[288,53666,53667],{"class":298},">123\u003C\u002F",[288,53669,51784],{"class":51473},[288,53671,51480],{"class":298},[288,53673,53674,53676,53678,53680,53682,53684,53687,53689],{"class":290,"line":1352},[288,53675,52317],{"class":298},[288,53677,51784],{"class":51473},[288,53679,53659],{"class":2135},[288,53681,344],{"class":298},[288,53683,53664],{"class":403},[288,53685,53686],{"class":298},">456\u003C\u002F",[288,53688,51784],{"class":51473},[288,53690,51480],{"class":298},[288,53692,53693,53695,53697],{"class":290,"line":1367},[288,53694,52317],{"class":298},[288,53696,51986],{"class":51473},[288,53698,51480],{"class":298},[288,53700,53701],{"class":290,"line":1373},[288,53702,53703],{"class":298},"    \u002F\u002F 1.获取匹配的第一个元素\n",[288,53705,53706],{"class":290,"line":1387},[288,53707,53708],{"class":298},"    const box = document.querySelector('div')\n",[288,53710,53711],{"class":290,"line":1393},[288,53712,53713],{"class":298},"    console.dir(box)\n",[288,53715,53716,53718,53720],{"class":290,"line":1484},[288,53717,52590],{"class":298},[288,53719,51986],{"class":51473},[288,53721,51480],{"class":298},[288,53723,53724,53726,53728],{"class":290,"line":1490},[288,53725,51958],{"class":298},[288,53727,51973],{"class":51473},[288,53729,51480],{"class":298},[19,53731,53732],{},"只选123，不选456",[19,53734,53735],{},[200,53736],{"alt":205,"src":53737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53739,53740],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53742,53743],{},[200,53744],{"alt":205,"src":53745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53747,53748],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53750,53751],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[243,53753,53754],{"start":206},[246,53755,53756],{},"其他方法来获取标签元素",[19,53758,53759],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53761,53762],{},[200,53763],{"alt":205,"src":53764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[260,53766,53768],{"id":53767},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53770,53771],{},"设置修改DOM元素内容有两种方式：",[1304,53773,53774,53777,53780,53783],{},[246,53775,53776],{},"元素.innerText=''",[246,53778,53779],{},"元素.innerHTML=''",[246,53781,53782],{},"不写字符串输出数字也是可以的",[246,53784,53785],{},"元素.innerHtml=1",[22171,53787,53789],{"id":53788},"_3131-innertext","3.1.3.1 innerText",[19,53791,53792],{},[200,53793],{"alt":205,"src":53794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53796,53797],{},"思路：实现了修改盒子中的内容！",[19,53799,53800],{},"它只显示纯文本，不解析标签",[22171,53802,53804],{"id":53803},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53806,53807],{},[200,53808],{"alt":205,"src":53809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53811,53812],{},"相比于innerText，他的强大之处在于可以解析标签",[260,53814,53816],{"id":53815},"_314-操作元素属性","3.1.4 操作元素属性",[22171,53818,53820],{"id":53819},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53822,53823],{},[200,53824],{"alt":205,"src":53825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22171,53827,53829],{"id":53828},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53831,53832],{},[200,53833],{"alt":205,"src":53834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53836,53837],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53839,53840],{},"div.style.backgroundColor = 'hotpink'",[19,53842,53843],{},"如果按照css的写法，-表示减，就会出错",[19,53845,53846],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53848,53849],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53851,53852],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53854,53855],{},[200,53856],{"alt":205,"src":53857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53859,53860],{},[200,53861],{"alt":205,"src":53862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[243,53864,53865,53868,53871,53874,53877,53880],{},[246,53866,53867],{},"className这个方式就是修改很多样式的时候来使用的！",[246,53869,53870],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[246,53872,53873],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[246,53875,53876],{},"className为属性名，如果还用class的话就导致与关键字冲突",[246,53878,53879],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[246,53881,53882,53883,53888],{},"解析标签的时候就变为了",[51784,53884],{"className":53885},[53886,53887],"nav","box",[53889,53890],"br",{},[19,53892,53893],{},"例子：",[51784,53895],{"className":53896},[53886],[51986,53898,53899],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53901,53902],{},[200,53903],{"alt":205,"src":53904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53906,53907],{},"追加和删除类名用classList",[19,53909,53910],{},"常用于类似于开关的操作",[19,53912,53913],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53915,53916],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22171,53918,53920],{"id":53919},"_3143-牢记点","3.1.4.3 牢记点",[243,53922,53923,53926,53929,53932,53935,53938,53941,53944,53947],{},[246,53924,53925],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[246,53927,53928],{},"使用style属性操作css时不要忘记引号",[246,53930,53931],{},"使用className或者classList时也不要忘记引号",[246,53933,53934],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[246,53936,53937],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[246,53939,53940],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[246,53942,53943],{},"若： let arr=['1','2',3] arr[0]=1",[246,53945,53946],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[246,53948,53949],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[260,53951,53953],{"id":53952},"_315-操作表单元素","3.1.5 操作表单元素",[243,53955,53956],{},[246,53957,53958],{},"天生的属性",[19,53960,53961],{},[200,53962],{"alt":205,"src":53963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53965,53966],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53968,53969],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53971,53972],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53974,53975],{},[200,53976],{"alt":205,"src":53977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[280,53979,53981],{"className":50806,"code":53980,"language":50808,"meta":205,"style":205},"在复选框中如果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",[25,53982,53983,53988,54020,54025,54030,54035,54040,54044,54049,54054,54071,54083,54088],{"__ignoreMap":205},[288,53984,53985],{"class":290,"line":291},[288,53986,53987],{"class":298},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[288,53989,53990,53992,53995,53998,54000,54003,54005,54007,54009,54011,54013,54015,54018],{"class":290,"line":206},[288,53991,1207],{"class":298},[288,53993,53994],{"class":51473},"input",[288,53996,53997],{"class":2135}," type",[288,53999,344],{"class":298},[288,54001,54002],{"class":403},"\"checkbox\"",[288,54004,15093],{"class":2135},[288,54006,344],{"class":298},[288,54008,7825],{"class":403},[288,54010,15132],{"class":2135},[288,54012,344],{"class":298},[288,54014,7825],{"class":403},[288,54016,54017],{"class":2135}," checked",[288,54019,51480],{"class":298},[288,54021,54022],{"class":290,"line":1352},[288,54023,54024],{"class":298},"不选的话：\n",[288,54026,54027],{"class":290,"line":1367},[288,54028,54029],{"class":298},"const input = document.querySelector('input')\n",[288,54031,54032],{"class":290,"line":1373},[288,54033,54034],{"class":298},"input.checked=false\n",[288,54036,54037],{"class":290,"line":1387},[288,54038,54039],{"class":298},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[288,54041,54042],{"class":290,"line":1393},[288,54043,2572],{"emptyLinePlaceholder":217},[288,54045,54046],{"class":290,"line":1484},[288,54047,54048],{"class":298},"禁用按钮：\n",[288,54050,54051],{"class":290,"line":1490},[288,54052,54053],{"class":298},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[288,54055,54056,54058,54061,54064,54067,54069],{"class":290,"line":1502},[288,54057,1207],{"class":298},[288,54059,54060],{"class":51473},"button",[288,54062,54063],{"class":2135}," disabled",[288,54065,54066],{"class":298},">点击\u003C\u002F",[288,54068,54060],{"class":51473},[288,54070,51480],{"class":298},[288,54072,54073,54075,54077,54079,54081],{"class":290,"line":1784},[288,54074,1207],{"class":298},[288,54076,54060],{"class":51473},[288,54078,54066],{"class":298},[288,54080,54060],{"class":51473},[288,54082,51480],{"class":298},[288,54084,54085],{"class":290,"line":1789},[288,54086,54087],{"class":298},"const bt = document.querySelector('button')\n",[288,54089,54090],{"class":290,"line":1795},[288,54091,54092],{"class":298},"bt.disabled = false\n",[243,54094,54095],{"start":206},[246,54096,54097],{},"自定义属性",[19,54099,54100],{},[200,54101],{"alt":205,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[280,54104,54106],{"className":53240,"code":54105,"language":53242,"meta":205,"style":205},"\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",[25,54107,54108,54116,54144,54163,54182,54201,54220,54228,54233,54238,54243,54248,54256],{"__ignoreMap":205},[288,54109,54110,54112,54114],{"class":290,"line":291},[288,54111,1207],{"class":298},[288,54113,51973],{"class":51473},[288,54115,51480],{"class":298},[288,54117,54118,54120,54122,54125,54127,54129,54132,54134,54137,54140,54142],{"class":290,"line":206},[288,54119,52317],{"class":298},[288,54121,51784],{"class":51473},[288,54123,54124],{"class":2135}," data-id",[288,54126,344],{"class":298},[288,54128,3850],{"class":403},[288,54130,54131],{"class":2135}," data-spm",[288,54133,344],{"class":298},[288,54135,54136],{"class":403},"\"我不知道\"",[288,54138,54139],{"class":298},">1\u003C\u002F",[288,54141,51784],{"class":51473},[288,54143,51480],{"class":298},[288,54145,54146,54148,54150,54152,54154,54156,54159,54161],{"class":290,"line":1352},[288,54147,52317],{"class":298},[288,54149,51784],{"class":51473},[288,54151,54124],{"class":2135},[288,54153,344],{"class":298},[288,54155,3873],{"class":403},[288,54157,54158],{"class":298},">2\u003C\u002F",[288,54160,51784],{"class":51473},[288,54162,51480],{"class":298},[288,54164,54165,54167,54169,54171,54173,54175,54178,54180],{"class":290,"line":1367},[288,54166,52317],{"class":298},[288,54168,51784],{"class":51473},[288,54170,54124],{"class":2135},[288,54172,344],{"class":298},[288,54174,3886],{"class":403},[288,54176,54177],{"class":298},">3\u003C\u002F",[288,54179,51784],{"class":51473},[288,54181,51480],{"class":298},[288,54183,54184,54186,54188,54190,54192,54194,54197,54199],{"class":290,"line":1373},[288,54185,52317],{"class":298},[288,54187,51784],{"class":51473},[288,54189,54124],{"class":2135},[288,54191,344],{"class":298},[288,54193,3899],{"class":403},[288,54195,54196],{"class":298},">4\u003C\u002F",[288,54198,51784],{"class":51473},[288,54200,51480],{"class":298},[288,54202,54203,54205,54207,54209,54211,54213,54216,54218],{"class":290,"line":1387},[288,54204,52317],{"class":298},[288,54206,51784],{"class":51473},[288,54208,54124],{"class":2135},[288,54210,344],{"class":298},[288,54212,3920],{"class":403},[288,54214,54215],{"class":298},">5\u003C\u002F",[288,54217,51784],{"class":51473},[288,54219,51480],{"class":298},[288,54221,54222,54224,54226],{"class":290,"line":1393},[288,54223,52317],{"class":298},[288,54225,51986],{"class":51473},[288,54227,51480],{"class":298},[288,54229,54230],{"class":290,"line":1484},[288,54231,54232],{"class":298},"    const one = document.querySelector('div')\n",[288,54234,54235],{"class":290,"line":1490},[288,54236,54237],{"class":298},"    console.log(one.dataset)\n",[288,54239,54240],{"class":290,"line":1502},[288,54241,54242],{"class":298},"    console.log(one.dataset.id)\n",[288,54244,54245],{"class":290,"line":1784},[288,54246,54247],{"class":298},"    console.log(one.dataset.spm)\n",[288,54249,54250,54252,54254],{"class":290,"line":1789},[288,54251,52590],{"class":298},[288,54253,51986],{"class":51473},[288,54255,51480],{"class":298},[288,54257,54258,54260,54262],{"class":290,"line":1795},[288,54259,51958],{"class":298},[288,54261,51973],{"class":51473},[288,54263,51480],{"class":298},[19,54265,54266],{},[200,54267],{"alt":205,"src":54268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54270,54271],{},"document.querySelector选择的是第一个对象（元素）",[260,54273,54275],{"id":54274},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54277,54278],{},[200,54279],{"alt":205,"src":54280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54282,54283],{},[200,54284],{"alt":205,"src":54285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54287,54288],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51986,54290,54291],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54293,54294],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51986,54296,54297],{},"\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",[19,54299,54300],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54302,54303],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54305,54306],{},"单位为毫秒！！！",[19,54308,54309],{},"可以搭配匿名函数来用！！！",[19,54311,54312],{},"setInterval(function () {",[19,54314,54315],{},"alert('两秒执行一次')",[19,54317,54318],{},"}, 2000)",[19,54320,54321],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54323,54324],{},"function fn() {",[19,54326,54327],{},"document.write(1)",[19,54329,1243],{},[19,54331,54332],{},"setInterval(fn, 1000)",[19,54334,54335],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54337,54338],{},"setInterval('fn()', 1000)",[19,54340,54341],{},[200,54342],{"alt":205,"src":54343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22171,54345,54347],{"id":54346},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[280,54349,54351],{"className":50806,"code":54350,"language":50808,"meta":205,"style":205},"\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",[25,54352,54353,54363,54377,54381,54389,54403,54423,54435,54443,54447,54455,54492,54497,54502,54507,54515,54523,54545,54553,54558,54580,54585,54590,54601,54606,54626,54634,54649,54664,54675,54680,54690,54700,54704,54713,54717,54725,54733,54737],{"__ignoreMap":205},[288,54354,54355,54357,54359,54361],{"class":290,"line":291},[288,54356,51470],{"class":298},[288,54358,51474],{"class":51473},[288,54360,51477],{"class":2135},[288,54362,51480],{"class":298},[288,54364,54365,54367,54369,54371,54373,54375],{"class":290,"line":206},[288,54366,1207],{"class":298},[288,54368,50808],{"class":51473},[288,54370,51489],{"class":2135},[288,54372,344],{"class":298},[288,54374,51494],{"class":403},[288,54376,51480],{"class":298},[288,54378,54379],{"class":290,"line":1352},[288,54380,2572],{"emptyLinePlaceholder":217},[288,54382,54383,54385,54387],{"class":290,"line":1367},[288,54384,1207],{"class":298},[288,54386,51507],{"class":51473},[288,54388,51480],{"class":298},[288,54390,54391,54393,54395,54397,54399,54401],{"class":290,"line":1373},[288,54392,52317],{"class":298},[288,54394,51517],{"class":51473},[288,54396,51520],{"class":2135},[288,54398,344],{"class":298},[288,54400,51525],{"class":403},[288,54402,51480],{"class":298},[288,54404,54405,54407,54409,54411,54413,54415,54417,54419,54421],{"class":290,"line":1387},[288,54406,52317],{"class":298},[288,54408,51517],{"class":51473},[288,54410,15093],{"class":2135},[288,54412,344],{"class":298},[288,54414,51564],{"class":403},[288,54416,51544],{"class":2135},[288,54418,344],{"class":298},[288,54420,51571],{"class":403},[288,54422,51480],{"class":298},[288,54424,54425,54427,54429,54431,54433],{"class":290,"line":1393},[288,54426,52317],{"class":298},[288,54428,51580],{"class":51473},[288,54430,51583],{"class":298},[288,54432,51580],{"class":51473},[288,54434,51480],{"class":298},[288,54436,54437,54439,54441],{"class":290,"line":1484},[288,54438,51958],{"class":298},[288,54440,51507],{"class":51473},[288,54442,51480],{"class":298},[288,54444,54445],{"class":290,"line":1490},[288,54446,2572],{"emptyLinePlaceholder":217},[288,54448,54449,54451,54453],{"class":290,"line":1502},[288,54450,1207],{"class":298},[288,54452,51973],{"class":51473},[288,54454,51480],{"class":298},[288,54456,54457,54459,54462,54464,54466,54468,54470,54472,54474,54477,54479,54482,54485,54487,54490],{"class":290,"line":1784},[288,54458,52317],{"class":298},[288,54460,54461],{"class":51473},"textarea",[288,54463,15093],{"class":2135},[288,54465,344],{"class":298},[288,54467,7825],{"class":403},[288,54469,15132],{"class":2135},[288,54471,344],{"class":298},[288,54473,7825],{"class":403},[288,54475,54476],{"class":2135}," cols",[288,54478,344],{"class":298},[288,54480,54481],{"class":403},"\"30\"",[288,54483,54484],{"class":2135}," rows",[288,54486,344],{"class":298},[288,54488,54489],{"class":403},"\"10\"",[288,54491,51480],{"class":298},[288,54493,54494],{"class":290,"line":1789},[288,54495,54496],{"class":298},"        用户注册协议\n",[288,54498,54499],{"class":290,"line":1795},[288,54500,54501],{"class":298},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[288,54503,54504],{"class":290,"line":1800},[288,54505,54506],{"class":298},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[288,54508,54509,54511,54513],{"class":290,"line":1814},[288,54510,51949],{"class":298},[288,54512,54461],{"class":51473},[288,54514,51480],{"class":298},[288,54516,54517,54519,54521],{"class":290,"line":1819},[288,54518,52317],{"class":298},[288,54520,53889],{"class":51473},[288,54522,51480],{"class":298},[288,54524,54525,54527,54529,54531,54533,54536,54538,54541,54543],{"class":290,"line":1825},[288,54526,52317],{"class":298},[288,54528,54060],{"class":51473},[288,54530,53659],{"class":2135},[288,54532,344],{"class":298},[288,54534,54535],{"class":403},"\"btn\"",[288,54537,54063],{"class":2135},[288,54539,54540],{"class":298},">我已经阅读用户协议(5)\u003C\u002F",[288,54542,54060],{"class":51473},[288,54544,51480],{"class":298},[288,54546,54547,54549,54551],{"class":290,"line":1846},[288,54548,52317],{"class":298},[288,54550,51986],{"class":51473},[288,54552,51480],{"class":298},[288,54554,54555],{"class":290,"line":1851},[288,54556,54557],{"class":357},"    \u002F\u002F 1. 获取元素\n",[288,54559,54560,54562,54565,54567,54570,54573,54575,54578],{"class":290,"line":1865},[288,54561,11394],{"class":294},[288,54563,54564],{"class":347}," btn",[288,54566,13737],{"class":294},[288,54568,54569],{"class":298}," document.",[288,54571,54572],{"class":2135},"querySelector",[288,54574,299],{"class":298},[288,54576,54577],{"class":403},"'.btn'",[288,54579,305],{"class":298},[288,54581,54582],{"class":290,"line":1870},[288,54583,54584],{"class":357},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[288,54586,54587],{"class":290,"line":1899},[288,54588,54589],{"class":357},"    \u002F\u002F 2. 倒计时\n",[288,54591,54592,54594,54596,54598],{"class":290,"line":1904},[288,54593,52392],{"class":294},[288,54595,9611],{"class":298},[288,54597,344],{"class":294},[288,54599,54600],{"class":347}," 5\n",[288,54602,54603],{"class":290,"line":1921},[288,54604,54605],{"class":357},"    \u002F\u002F 2.1 开启定时器\n",[288,54607,54608,54610,54613,54615,54618,54620,54623],{"class":290,"line":1926},[288,54609,52392],{"class":294},[288,54611,54612],{"class":298}," n ",[288,54614,344],{"class":294},[288,54616,54617],{"class":2135}," setInterval",[288,54619,299],{"class":298},[288,54621,54622],{"class":294},"function",[288,54624,54625],{"class":298}," () {\n",[288,54627,54628,54631],{"class":290,"line":1931},[288,54629,54630],{"class":298},"      i",[288,54632,54633],{"class":294},"--\n",[288,54635,54636,54639,54641,54644,54646],{"class":290,"line":1936},[288,54637,54638],{"class":298},"      btn.innerHTML ",[288,54640,344],{"class":294},[288,54642,54643],{"class":403}," `我已经阅读用户协议(${",[288,54645,738],{"class":298},[288,54647,54648],{"class":403},"})`\n",[288,54650,54651,54654,54657,54660,54662],{"class":290,"line":1950},[288,54652,54653],{"class":294},"      if",[288,54655,54656],{"class":298}," (i ",[288,54658,54659],{"class":294},"===",[288,54661,4265],{"class":347},[288,54663,12615],{"class":298},[288,54665,54666,54669,54672],{"class":290,"line":1955},[288,54667,54668],{"class":2135},"        clearInterval",[288,54670,54671],{"class":298},"(n)  ",[288,54673,54674],{"class":357},"\u002F\u002F 关闭定时器\n",[288,54676,54677],{"class":290,"line":2749},[288,54678,54679],{"class":357},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[288,54681,54682,54685,54687],{"class":290,"line":2763},[288,54683,54684],{"class":298},"        btn.disabled ",[288,54686,344],{"class":294},[288,54688,54689],{"class":347}," false\n",[288,54691,54692,54695,54697],{"class":290,"line":2771},[288,54693,54694],{"class":298},"        btn.innerHTML ",[288,54696,344],{"class":294},[288,54698,54699],{"class":403}," '同意'\n",[288,54701,54702],{"class":290,"line":2776},[288,54703,52571],{"class":298},[288,54705,54706,54709,54711],{"class":290,"line":2782},[288,54707,54708],{"class":298},"    }, ",[288,54710,6583],{"class":347},[288,54712,305],{"class":298},[288,54714,54715],{"class":290,"line":2788},[288,54716,2572],{"emptyLinePlaceholder":217},[288,54718,54719,54721,54723],{"class":290,"line":2793},[288,54720,52590],{"class":298},[288,54722,51986],{"class":51473},[288,54724,51480],{"class":298},[288,54726,54727,54729,54731],{"class":290,"line":8121},[288,54728,51958],{"class":298},[288,54730,51973],{"class":51473},[288,54732,51480],{"class":298},[288,54734,54735],{"class":290,"line":8145},[288,54736,2572],{"emptyLinePlaceholder":217},[288,54738,54739,54741,54743],{"class":290,"line":8150},[288,54740,51958],{"class":298},[288,54742,50808],{"class":51473},[288,54744,51480],{"class":298},[19,54746,54747],{},"不要一直想着用死循环,避免死循环",[19,54749,54750,54753],{},[25,54751,54752],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22171,54755,54757],{"id":54756},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[243,54759,54760],{},[246,54761,54762],{},"法1",[280,54764,54766],{"className":50806,"code":54765,"language":50808,"meta":205,"style":205},"\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",[25,54767,54768,54778,54792,54796,54804,54818,54838,54850,54858,54864,54875,54886,54890,54894,54901,54913,54917,54921,54928,54940,54954,54967,54981,54985,54989,54996,55007,55018,55029,55041,55053,55065,55069,55073,55081,55091,55104,55116,55129,55133,55137,55144,55154,55166,55178,55189,55200,55210,55222,55234,55238,55242,55251,55263,55275,55303,55316,55320,55324,55331,55342,55346,55354,55362,55366,55374,55388,55403,55427,55435,55450,55463,55471,55492,55504,55516,55528,55540,55552,55564,55576,55585,55593,55601,55609,55621,55644,55663,55682,55701,55720,55739,55758,55778,55782,55802,55821,55841,55862,55873,55890,55900,55910,55920,55925,55930,55935,55940,55965,55978,55982,56005,56009,56017,56025,56033,56037],{"__ignoreMap":205},[288,54769,54770,54772,54774,54776],{"class":290,"line":291},[288,54771,51470],{"class":298},[288,54773,51474],{"class":51473},[288,54775,51477],{"class":2135},[288,54777,51480],{"class":298},[288,54779,54780,54782,54784,54786,54788,54790],{"class":290,"line":206},[288,54781,1207],{"class":298},[288,54783,50808],{"class":51473},[288,54785,51489],{"class":2135},[288,54787,344],{"class":298},[288,54789,51494],{"class":403},[288,54791,51480],{"class":298},[288,54793,54794],{"class":290,"line":1352},[288,54795,2572],{"emptyLinePlaceholder":217},[288,54797,54798,54800,54802],{"class":290,"line":1367},[288,54799,1207],{"class":298},[288,54801,51507],{"class":51473},[288,54803,51480],{"class":298},[288,54805,54806,54808,54810,54812,54814,54816],{"class":290,"line":1373},[288,54807,52317],{"class":298},[288,54809,51517],{"class":51473},[288,54811,51520],{"class":2135},[288,54813,344],{"class":298},[288,54815,51525],{"class":403},[288,54817,51480],{"class":298},[288,54819,54820,54822,54824,54826,54828,54830,54832,54834,54836],{"class":290,"line":1387},[288,54821,52317],{"class":298},[288,54823,51517],{"class":51473},[288,54825,15093],{"class":2135},[288,54827,344],{"class":298},[288,54829,51564],{"class":403},[288,54831,51544],{"class":2135},[288,54833,344],{"class":298},[288,54835,51571],{"class":403},[288,54837,51480],{"class":298},[288,54839,54840,54842,54844,54846,54848],{"class":290,"line":1393},[288,54841,52317],{"class":298},[288,54843,51580],{"class":51473},[288,54845,51583],{"class":298},[288,54847,51580],{"class":51473},[288,54849,51480],{"class":298},[288,54851,54852,54854,54856],{"class":290,"line":1484},[288,54853,52317],{"class":298},[288,54855,5299],{"class":51473},[288,54857,51480],{"class":298},[288,54859,54860,54862],{"class":290,"line":1490},[288,54861,6576],{"class":51473},[288,54863,15745],{"class":298},[288,54865,54866,54869,54871,54873],{"class":290,"line":1502},[288,54867,54868],{"class":347},"      padding",[288,54870,51610],{"class":298},[288,54872,490],{"class":347},[288,54874,1463],{"class":298},[288,54876,54877,54880,54882,54884],{"class":290,"line":1784},[288,54878,54879],{"class":347},"      margin",[288,54881,51610],{"class":298},[288,54883,490],{"class":347},[288,54885,1463],{"class":298},[288,54887,54888],{"class":290,"line":1789},[288,54889,2359],{"class":298},[288,54891,54892],{"class":290,"line":1795},[288,54893,2572],{"emptyLinePlaceholder":217},[288,54895,54896,54899],{"class":290,"line":1800},[288,54897,54898],{"class":51473},"    li",[288,54900,15745],{"class":298},[288,54902,54903,54906,54908,54911],{"class":290,"line":1814},[288,54904,54905],{"class":347},"      list-style",[288,54907,51610],{"class":298},[288,54909,54910],{"class":347},"none",[288,54912,1463],{"class":298},[288,54914,54915],{"class":290,"line":1819},[288,54916,2359],{"class":298},[288,54918,54919],{"class":290,"line":1825},[288,54920,2572],{"emptyLinePlaceholder":217},[288,54922,54923,54926],{"class":290,"line":1846},[288,54924,54925],{"class":2135},"    .box",[288,54927,15745],{"class":298},[288,54929,54930,54933,54935,54938],{"class":290,"line":1851},[288,54931,54932],{"class":347},"      position",[288,54934,51610],{"class":298},[288,54936,54937],{"class":347},"relative",[288,54939,1463],{"class":298},[288,54941,54942,54945,54947,54950,54952],{"class":290,"line":1865},[288,54943,54944],{"class":347},"      width",[288,54946,51610],{"class":298},[288,54948,54949],{"class":347},"976",[288,54951,51665],{"class":294},[288,54953,1463],{"class":298},[288,54955,54956,54959,54961,54963,54965],{"class":290,"line":1870},[288,54957,54958],{"class":347},"      height",[288,54960,51610],{"class":298},[288,54962,1711],{"class":347},[288,54964,51665],{"class":294},[288,54966,1463],{"class":298},[288,54968,54969,54971,54973,54975,54977,54979],{"class":290,"line":1899},[288,54970,54879],{"class":347},[288,54972,51610],{"class":298},[288,54974,608],{"class":347},[288,54976,51665],{"class":294},[288,54978,51729],{"class":347},[288,54980,1463],{"class":298},[288,54982,54983],{"class":290,"line":1904},[288,54984,2359],{"class":298},[288,54986,54987],{"class":290,"line":1921},[288,54988,2572],{"emptyLinePlaceholder":217},[288,54990,54991,54994],{"class":290,"line":1926},[288,54992,54993],{"class":2135},"    .slider-footer",[288,54995,15745],{"class":298},[288,54997,54998,55000,55002,55005],{"class":290,"line":1931},[288,54999,54932],{"class":347},[288,55001,51610],{"class":298},[288,55003,55004],{"class":347},"absolute",[288,55006,1463],{"class":298},[288,55008,55009,55012,55014,55016],{"class":290,"line":1936},[288,55010,55011],{"class":347},"      left",[288,55013,51610],{"class":298},[288,55015,490],{"class":347},[288,55017,1463],{"class":298},[288,55019,55020,55023,55025,55027],{"class":290,"line":1950},[288,55021,55022],{"class":347},"      bottom",[288,55024,51610],{"class":298},[288,55026,490],{"class":347},[288,55028,1463],{"class":298},[288,55030,55031,55033,55035,55037,55039],{"class":290,"line":1955},[288,55032,54944],{"class":347},[288,55034,51610],{"class":298},[288,55036,608],{"class":347},[288,55038,625],{"class":294},[288,55040,1463],{"class":298},[288,55042,55043,55045,55047,55049,55051],{"class":290,"line":2749},[288,55044,54958],{"class":347},[288,55046,51610],{"class":298},[288,55048,872],{"class":347},[288,55050,625],{"class":294},[288,55052,1463],{"class":298},[288,55054,55055,55058,55060,55063],{"class":290,"line":2763},[288,55056,55057],{"class":347},"      background-color",[288,55059,51610],{"class":298},[288,55061,55062],{"class":347},"skyblue",[288,55064,1463],{"class":298},[288,55066,55067],{"class":290,"line":2771},[288,55068,2359],{"class":298},[288,55070,55071],{"class":290,"line":2776},[288,55072,2572],{"emptyLinePlaceholder":217},[288,55074,55075,55077,55079],{"class":290,"line":2782},[288,55076,54993],{"class":2135},[288,55078,6998],{"class":51473},[288,55080,15745],{"class":298},[288,55082,55083,55085,55087,55089],{"class":290,"line":2788},[288,55084,54932],{"class":347},[288,55086,51610],{"class":298},[288,55088,55004],{"class":347},[288,55090,1463],{"class":298},[288,55092,55093,55096,55098,55100,55102],{"class":290,"line":2793},[288,55094,55095],{"class":347},"      font-size",[288,55097,51610],{"class":298},[288,55099,1198],{"class":347},[288,55101,51665],{"class":294},[288,55103,1463],{"class":298},[288,55105,55106,55108,55110,55112,55114],{"class":290,"line":8121},[288,55107,55011],{"class":347},[288,55109,51610],{"class":298},[288,55111,997],{"class":347},[288,55113,51665],{"class":294},[288,55115,1463],{"class":298},[288,55117,55118,55121,55123,55125,55127],{"class":290,"line":8145},[288,55119,55120],{"class":347},"      top",[288,55122,51610],{"class":298},[288,55124,616],{"class":347},[288,55126,51665],{"class":294},[288,55128,1463],{"class":298},[288,55130,55131],{"class":290,"line":8150},[288,55132,2359],{"class":298},[288,55134,55135],{"class":290,"line":8156},[288,55136,2572],{"emptyLinePlaceholder":217},[288,55138,55139,55142],{"class":290,"line":8183},[288,55140,55141],{"class":51473},"    ul",[288,55143,15745],{"class":298},[288,55145,55146,55148,55150,55152],{"class":290,"line":8188},[288,55147,54932],{"class":347},[288,55149,51610],{"class":298},[288,55151,55004],{"class":347},[288,55153,1463],{"class":298},[288,55155,55156,55158,55160,55162,55164],{"class":290,"line":8194},[288,55157,55120],{"class":347},[288,55159,51610],{"class":298},[288,55161,1078],{"class":347},[288,55163,51665],{"class":294},[288,55165,1463],{"class":298},[288,55167,55168,55170,55172,55174,55176],{"class":290,"line":8206},[288,55169,55011],{"class":347},[288,55171,51610],{"class":298},[288,55173,997],{"class":347},[288,55175,51665],{"class":294},[288,55177,1463],{"class":298},[288,55179,55180,55183,55185,55187],{"class":290,"line":8218},[288,55181,55182],{"class":347},"      display",[288,55184,51610],{"class":298},[288,55186,51650],{"class":347},[288,55188,1463],{"class":298},[288,55190,55191,55194,55196,55198],{"class":290,"line":8230},[288,55192,55193],{"class":347},"      justify-content",[288,55195,51610],{"class":298},[288,55197,51841],{"class":347},[288,55199,1463],{"class":298},[288,55201,55202,55204,55206,55208],{"class":290,"line":9889},[288,55203,54932],{"class":347},[288,55205,51610],{"class":298},[288,55207,55004],{"class":347},[288,55209,1463],{"class":298},[288,55211,55212,55214,55216,55218,55220],{"class":290,"line":9914},[288,55213,54944],{"class":347},[288,55215,51610],{"class":298},[288,55217,4164],{"class":347},[288,55219,51665],{"class":294},[288,55221,1463],{"class":298},[288,55223,55224,55226,55228,55230,55232],{"class":290,"line":9937},[288,55225,54958],{"class":347},[288,55227,51610],{"class":298},[288,55229,997],{"class":347},[288,55231,51665],{"class":294},[288,55233,1463],{"class":298},[288,55235,55236],{"class":290,"line":9961},[288,55237,2359],{"class":298},[288,55239,55240],{"class":290,"line":9966},[288,55241,2572],{"emptyLinePlaceholder":217},[288,55243,55244,55246,55249],{"class":290,"line":9971},[288,55245,55141],{"class":51473},[288,55247,55248],{"class":51473}," li",[288,55250,15745],{"class":298},[288,55252,55253,55255,55257,55259,55261],{"class":290,"line":9976},[288,55254,54944],{"class":347},[288,55256,51610],{"class":298},[288,55258,997],{"class":347},[288,55260,51665],{"class":294},[288,55262,1463],{"class":298},[288,55264,55265,55267,55269,55271,55273],{"class":290,"line":9985},[288,55266,54958],{"class":347},[288,55268,51610],{"class":298},[288,55270,997],{"class":347},[288,55272,51665],{"class":294},[288,55274,1463],{"class":298},[288,55276,55277,55279,55281,55284,55286,55288,55290,55292,55294,55296,55298,55301],{"class":290,"line":9990},[288,55278,55057],{"class":347},[288,55280,51610],{"class":298},[288,55282,55283],{"class":347},"rgba",[288,55285,299],{"class":298},[288,55287,490],{"class":347},[288,55289,12608],{"class":298},[288,55291,490],{"class":347},[288,55293,12608],{"class":298},[288,55295,490],{"class":347},[288,55297,12608],{"class":298},[288,55299,55300],{"class":347},".4",[288,55302,2891],{"class":298},[288,55304,55305,55308,55310,55312,55314],{"class":290,"line":9996},[288,55306,55307],{"class":347},"      border-radius",[288,55309,51610],{"class":298},[288,55311,743],{"class":347},[288,55313,51665],{"class":294},[288,55315,1463],{"class":298},[288,55317,55318],{"class":290,"line":10017},[288,55319,2359],{"class":298},[288,55321,55322],{"class":290,"line":10023},[288,55323,2572],{"emptyLinePlaceholder":217},[288,55325,55326,55329],{"class":290,"line":10037},[288,55327,55328],{"class":2135},"    .activate",[288,55330,15745],{"class":298},[288,55332,55333,55335,55337,55340],{"class":290,"line":10043},[288,55334,55057],{"class":347},[288,55336,51610],{"class":298},[288,55338,55339],{"class":347},"#f7f7f7",[288,55341,1463],{"class":298},[288,55343,55344],{"class":290,"line":10070},[288,55345,2359],{"class":298},[288,55347,55348,55350,55352],{"class":290,"line":10079},[288,55349,52590],{"class":298},[288,55351,5299],{"class":51473},[288,55353,51480],{"class":298},[288,55355,55356,55358,55360],{"class":290,"line":10085},[288,55357,51958],{"class":298},[288,55359,51507],{"class":51473},[288,55361,51480],{"class":298},[288,55363,55364],{"class":290,"line":10093},[288,55365,2572],{"emptyLinePlaceholder":217},[288,55367,55368,55370,55372],{"class":290,"line":10098},[288,55369,1207],{"class":298},[288,55371,51973],{"class":51473},[288,55373,51480],{"class":298},[288,55375,55376,55378,55380,55382,55384,55386],{"class":290,"line":16777},[288,55377,52317],{"class":298},[288,55379,51784],{"class":51473},[288,55381,53659],{"class":2135},[288,55383,344],{"class":298},[288,55385,53664],{"class":403},[288,55387,51480],{"class":298},[288,55389,55390,55392,55394,55396,55398,55401],{"class":290,"line":16783},[288,55391,51514],{"class":298},[288,55393,51784],{"class":51473},[288,55395,53659],{"class":2135},[288,55397,344],{"class":298},[288,55399,55400],{"class":403},"\"slider-wrapper\"",[288,55402,51480],{"class":298},[288,55404,55405,55408,55410,55413,55415,55418,55421,55423,55425],{"class":290,"line":16806},[288,55406,55407],{"class":298},"      \u003C",[288,55409,200],{"class":51473},[288,55411,55412],{"class":2135}," src",[288,55414,344],{"class":298},[288,55416,55417],{"class":403},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[288,55419,55420],{"class":2135}," alt",[288,55422,344],{"class":298},[288,55424,7825],{"class":403},[288,55426,51480],{"class":298},[288,55428,55429,55431,55433],{"class":290,"line":16812},[288,55430,51949],{"class":298},[288,55432,51784],{"class":51473},[288,55434,51480],{"class":298},[288,55436,55437,55439,55441,55443,55445,55448],{"class":290,"line":16835},[288,55438,51514],{"class":298},[288,55440,51784],{"class":51473},[288,55442,53659],{"class":2135},[288,55444,344],{"class":298},[288,55446,55447],{"class":403},"\"slider-footer\"",[288,55449,51480],{"class":298},[288,55451,55452,55454,55456,55459,55461],{"class":290,"line":16849},[288,55453,55407],{"class":298},[288,55455,19],{"class":51473},[288,55457,55458],{"class":298},">对人类来说会不会太超前了?\u003C\u002F",[288,55460,19],{"class":51473},[288,55462,51480],{"class":298},[288,55464,55465,55467,55469],{"class":290,"line":16869},[288,55466,55407],{"class":298},[288,55468,1304],{"class":51473},[288,55470,51480],{"class":298},[288,55472,55473,55476,55478,55480,55482,55485,55488,55490],{"class":290,"line":16875},[288,55474,55475],{"class":298},"        \u003C",[288,55477,246],{"class":51473},[288,55479,53659],{"class":2135},[288,55481,344],{"class":298},[288,55483,55484],{"class":403},"\"activate\"",[288,55486,55487],{"class":298},">\u003C\u002F",[288,55489,246],{"class":51473},[288,55491,51480],{"class":298},[288,55493,55494,55496,55498,55500,55502],{"class":290,"line":16886},[288,55495,55475],{"class":298},[288,55497,246],{"class":51473},[288,55499,55487],{"class":298},[288,55501,246],{"class":51473},[288,55503,51480],{"class":298},[288,55505,55506,55508,55510,55512,55514],{"class":290,"line":16909},[288,55507,55475],{"class":298},[288,55509,246],{"class":51473},[288,55511,55487],{"class":298},[288,55513,246],{"class":51473},[288,55515,51480],{"class":298},[288,55517,55518,55520,55522,55524,55526],{"class":290,"line":16931},[288,55519,55475],{"class":298},[288,55521,246],{"class":51473},[288,55523,55487],{"class":298},[288,55525,246],{"class":51473},[288,55527,51480],{"class":298},[288,55529,55530,55532,55534,55536,55538],{"class":290,"line":16936},[288,55531,55475],{"class":298},[288,55533,246],{"class":51473},[288,55535,55487],{"class":298},[288,55537,246],{"class":51473},[288,55539,51480],{"class":298},[288,55541,55542,55544,55546,55548,55550],{"class":290,"line":16942},[288,55543,55475],{"class":298},[288,55545,246],{"class":51473},[288,55547,55487],{"class":298},[288,55549,246],{"class":51473},[288,55551,51480],{"class":298},[288,55553,55554,55556,55558,55560,55562],{"class":290,"line":16956},[288,55555,55475],{"class":298},[288,55557,246],{"class":51473},[288,55559,55487],{"class":298},[288,55561,246],{"class":51473},[288,55563,51480],{"class":298},[288,55565,55566,55568,55570,55572,55574],{"class":290,"line":16969},[288,55567,55475],{"class":298},[288,55569,246],{"class":51473},[288,55571,55487],{"class":298},[288,55573,246],{"class":51473},[288,55575,51480],{"class":298},[288,55577,55578,55581,55583],{"class":290,"line":16974},[288,55579,55580],{"class":298},"      \u003C\u002F",[288,55582,1304],{"class":51473},[288,55584,51480],{"class":298},[288,55586,55587,55589,55591],{"class":290,"line":16988},[288,55588,51949],{"class":298},[288,55590,51784],{"class":51473},[288,55592,51480],{"class":298},[288,55594,55595,55597,55599],{"class":290,"line":16993},[288,55596,52590],{"class":298},[288,55598,51784],{"class":51473},[288,55600,51480],{"class":298},[288,55602,55603,55605,55607],{"class":290,"line":16999},[288,55604,52317],{"class":298},[288,55606,51986],{"class":51473},[288,55608,51480],{"class":298},[288,55610,55611,55613,55616,55618],{"class":290,"line":17004},[288,55612,11394],{"class":294},[288,55614,55615],{"class":347}," arrImage",[288,55617,13737],{"class":294},[288,55619,55620],{"class":298}," [\n",[288,55622,55623,55626,55629,55632,55635,55638,55641],{"class":290,"line":17018},[288,55624,55625],{"class":298},"      { url: ",[288,55627,55628],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[288,55630,55631],{"class":298},", title: ",[288,55633,55634],{"class":403},"'对人类来说会不会太超前了?'",[288,55636,55637],{"class":298},", color: ",[288,55639,55640],{"class":403},"'rgba(100,67,68)'",[288,55642,55643],{"class":298}," },\n",[288,55645,55646,55648,55651,55653,55656,55658,55661],{"class":290,"line":17023},[288,55647,55625],{"class":298},[288,55649,55650],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[288,55652,55631],{"class":298},[288,55654,55655],{"class":403},"'开启剑与雪的黑暗传说!'",[288,55657,55637],{"class":298},[288,55659,55660],{"class":403},"'rgba(43,35,26)'",[288,55662,55643],{"class":298},[288,55664,55665,55667,55670,55672,55675,55677,55680],{"class":290,"line":17028},[288,55666,55625],{"class":298},[288,55668,55669],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[288,55671,55631],{"class":298},[288,55673,55674],{"class":403},"'真正的jo厨出现了!'",[288,55676,55637],{"class":298},[288,55678,55679],{"class":403},"'rgba(36,31,33)'",[288,55681,55643],{"class":298},[288,55683,55684,55686,55689,55691,55694,55696,55699],{"class":290,"line":17042},[288,55685,55625],{"class":298},[288,55687,55688],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[288,55690,55631],{"class":298},[288,55692,55693],{"class":403},"'李玉刚:让世界通过b站看到东方大国文化'",[288,55695,55637],{"class":298},[288,55697,55698],{"class":403},"'rgba(139,98,66)'",[288,55700,55643],{"class":298},[288,55702,55703,55705,55708,55710,55713,55715,55718],{"class":290,"line":17054},[288,55704,55625],{"class":298},[288,55706,55707],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[288,55709,55631],{"class":298},[288,55711,55712],{"class":403},"'快来分享你的寒假日常吧'",[288,55714,55637],{"class":298},[288,55716,55717],{"class":403},"'rgba(67,90,92)'",[288,55719,55643],{"class":298},[288,55721,55722,55724,55727,55729,55732,55734,55737],{"class":290,"line":17059},[288,55723,55625],{"class":298},[288,55725,55726],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[288,55728,55631],{"class":298},[288,55730,55731],{"class":403},"'哔哩哔哩小年YEAR'",[288,55733,55637],{"class":298},[288,55735,55736],{"class":403},"'rgba(166,131,143)'",[288,55738,55643],{"class":298},[288,55740,55741,55743,55746,55748,55751,55753,55756],{"class":290,"line":17072},[288,55742,55625],{"class":298},[288,55744,55745],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[288,55747,55631],{"class":298},[288,55749,55750],{"class":403},"'一站式解决你的电脑配置问题'",[288,55752,55637],{"class":298},[288,55754,55755],{"class":403},"'rgba(53,29,25)'",[288,55757,55643],{"class":298},[288,55759,55760,55762,55765,55767,55770,55772,55775],{"class":290,"line":17077},[288,55761,55625],{"class":298},[288,55763,55764],{"class":403},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[288,55766,55631],{"class":298},[288,55768,55769],{"class":403},"'谁不想和小猫咪贴贴呢?'",[288,55771,55637],{"class":298},[288,55773,55774],{"class":403},"'rgba(99,72,114)'",[288,55776,55777],{"class":298}," }\n",[288,55779,55780],{"class":290,"line":17082},[288,55781,53282],{"class":298},[288,55783,55784,55786,55789,55791,55793,55795,55797,55800],{"class":290,"line":17087},[288,55785,11394],{"class":294},[288,55787,55788],{"class":347}," img",[288,55790,13737],{"class":294},[288,55792,54569],{"class":298},[288,55794,54572],{"class":2135},[288,55796,299],{"class":298},[288,55798,55799],{"class":403},"'.slider-wrapper img'",[288,55801,305],{"class":298},[288,55803,55804,55806,55808,55810,55812,55814,55816,55819],{"class":290,"line":17100},[288,55805,11394],{"class":294},[288,55807,6998],{"class":347},[288,55809,13737],{"class":294},[288,55811,54569],{"class":298},[288,55813,54572],{"class":2135},[288,55815,299],{"class":298},[288,55817,55818],{"class":403},"'.slider-footer p'",[288,55820,305],{"class":298},[288,55822,55823,55825,55828,55830,55832,55834,55836,55839],{"class":290,"line":17105},[288,55824,11394],{"class":294},[288,55826,55827],{"class":347}," color",[288,55829,13737],{"class":294},[288,55831,54569],{"class":298},[288,55833,54572],{"class":2135},[288,55835,299],{"class":298},[288,55837,55838],{"class":403},"'.slider-footer'",[288,55840,305],{"class":298},[288,55842,55843,55845,55848,55850,55852,55855,55857,55860],{"class":290,"line":32806},[288,55844,11394],{"class":294},[288,55846,55847],{"class":347}," lis",[288,55849,13737],{"class":294},[288,55851,54569],{"class":298},[288,55853,55854],{"class":2135},"querySelectorAll",[288,55856,299],{"class":298},[288,55858,55859],{"class":403},"'.slider-footer ul li'",[288,55861,305],{"class":298},[288,55863,55864,55866,55868,55870],{"class":290,"line":32812},[288,55865,52392],{"class":294},[288,55867,9611],{"class":298},[288,55869,344],{"class":294},[288,55871,55872],{"class":347}," 1\n",[288,55874,55875,55877,55880,55882,55884,55886,55888],{"class":290,"line":32818},[288,55876,52392],{"class":294},[288,55878,55879],{"class":298}," timer ",[288,55881,344],{"class":294},[288,55883,54617],{"class":2135},[288,55885,299],{"class":298},[288,55887,54622],{"class":294},[288,55889,54625],{"class":298},[288,55891,55892,55895,55897],{"class":290,"line":32824},[288,55893,55894],{"class":298},"      img.src ",[288,55896,344],{"class":294},[288,55898,55899],{"class":298}," arrImage[i].url\n",[288,55901,55902,55905,55907],{"class":290,"line":32830},[288,55903,55904],{"class":298},"      p.innerHTML ",[288,55906,344],{"class":294},[288,55908,55909],{"class":298}," arrImage[i].title\n",[288,55911,55912,55915,55917],{"class":290,"line":32841},[288,55913,55914],{"class":298},"      color.style.backgroundColor ",[288,55916,344],{"class":294},[288,55918,55919],{"class":298}," arrImage[i].color\n",[288,55921,55922],{"class":290,"line":32847},[288,55923,55924],{"class":357},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[288,55926,55927],{"class":290,"line":32867},[288,55928,55929],{"class":357},"      \u002F\u002F li.classList.add('activate')\n",[288,55931,55932],{"class":290,"line":32873},[288,55933,55934],{"class":357},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[288,55936,55937],{"class":290,"line":32884},[288,55938,55939],{"class":357},"      \u002F\u002F lis[i].classList.remove('activate')\n",[288,55941,55942,55945,55947,55949,55952,55955,55958,55960,55963],{"class":290,"line":32890},[288,55943,55944],{"class":298},"      document.",[288,55946,54572],{"class":2135},[288,55948,299],{"class":298},[288,55950,55951],{"class":403},"'.activate'",[288,55953,55954],{"class":298},")?.classList.",[288,55956,55957],{"class":2135},"toggle",[288,55959,299],{"class":298},[288,55961,55962],{"class":403},"'activate'",[288,55964,305],{"class":298},[288,55966,55967,55970,55972,55974,55976],{"class":290,"line":32896},[288,55968,55969],{"class":298},"      lis[i].classList.",[288,55971,5507],{"class":2135},[288,55973,299],{"class":298},[288,55975,55962],{"class":403},[288,55977,305],{"class":298},[288,55979,55980],{"class":290,"line":32902},[288,55981,2572],{"emptyLinePlaceholder":217},[288,55983,55984,55987,55989,55991,55993,55995,55997,55999,56002],{"class":290,"line":32908},[288,55985,55986],{"class":298},"      i ",[288,55988,344],{"class":294},[288,55990,54656],{"class":298},[288,55992,778],{"class":294},[288,55994,25291],{"class":347},[288,55996,13887],{"class":298},[288,55998,625],{"class":294},[288,56000,56001],{"class":298}," arrImage.",[288,56003,56004],{"class":347},"length\n",[288,56006,56007],{"class":290,"line":32914},[288,56008,2572],{"emptyLinePlaceholder":217},[288,56010,56011,56013,56015],{"class":290,"line":32920},[288,56012,54708],{"class":298},[288,56014,6583],{"class":347},[288,56016,305],{"class":298},[288,56018,56019,56021,56023],{"class":290,"line":32926},[288,56020,52590],{"class":298},[288,56022,51986],{"class":51473},[288,56024,51480],{"class":298},[288,56026,56027,56029,56031],{"class":290,"line":32946},[288,56028,51958],{"class":298},[288,56030,51973],{"class":51473},[288,56032,51480],{"class":298},[288,56034,56035],{"class":290,"line":32952},[288,56036,2572],{"emptyLinePlaceholder":217},[288,56038,56039,56041,56043],{"class":290,"line":32968},[288,56040,51958],{"class":298},[288,56042,50808],{"class":51473},[288,56044,51480],{"class":298},[19,56046,56047],{},[200,56048],{"alt":205,"src":56049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56051,56052],{},"?.就是短路保护,确保输出正常进行",[19,56054,56055],{},"不要忘记取余%,有时候可以用",[19,56057,56058],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[243,56060,56061],{"start":206},[246,56062,56063],{},"法2",[280,56065,56067],{"className":50806,"code":56066,"language":50808,"meta":205,"style":205},"\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",[25,56068,56069,56079,56093,56097,56105,56119,56139,56151,56159,56165,56175,56185,56189,56193,56199,56209,56213,56217,56223,56233,56245,56257,56271,56275,56279,56285,56295,56305,56315,56327,56339,56349,56353,56357,56365,56375,56387,56399,56411,56415,56419,56425,56435,56447,56459,56469,56479,56489,56501,56513,56517,56521,56529,56541,56553,56579,56591,56595,56599,56605,56615,56619,56627,56635,56639,56647,56661,56675,56695,56703,56717,56729,56737,56755,56767,56779,56791,56803,56815,56827,56839,56847,56855,56863,56871,56882,56898,56914,56930,56946,56962,56978,56994,57010,57014,57019,57037,57055,57065,57070,57075,57086,57092,57107,57116,57120,57125,57134,57139,57148,57153,57158,57163,57186,57216,57220,57228,57232,57240,57248,57252],{"__ignoreMap":205},[288,56070,56071,56073,56075,56077],{"class":290,"line":291},[288,56072,51470],{"class":298},[288,56074,51474],{"class":51473},[288,56076,51477],{"class":2135},[288,56078,51480],{"class":298},[288,56080,56081,56083,56085,56087,56089,56091],{"class":290,"line":206},[288,56082,1207],{"class":298},[288,56084,50808],{"class":51473},[288,56086,51489],{"class":2135},[288,56088,344],{"class":298},[288,56090,51494],{"class":403},[288,56092,51480],{"class":298},[288,56094,56095],{"class":290,"line":1352},[288,56096,2572],{"emptyLinePlaceholder":217},[288,56098,56099,56101,56103],{"class":290,"line":1367},[288,56100,1207],{"class":298},[288,56102,51507],{"class":51473},[288,56104,51480],{"class":298},[288,56106,56107,56109,56111,56113,56115,56117],{"class":290,"line":1373},[288,56108,52317],{"class":298},[288,56110,51517],{"class":51473},[288,56112,51520],{"class":2135},[288,56114,344],{"class":298},[288,56116,51525],{"class":403},[288,56118,51480],{"class":298},[288,56120,56121,56123,56125,56127,56129,56131,56133,56135,56137],{"class":290,"line":1387},[288,56122,52317],{"class":298},[288,56124,51517],{"class":51473},[288,56126,15093],{"class":2135},[288,56128,344],{"class":298},[288,56130,51564],{"class":403},[288,56132,51544],{"class":2135},[288,56134,344],{"class":298},[288,56136,51571],{"class":403},[288,56138,51480],{"class":298},[288,56140,56141,56143,56145,56147,56149],{"class":290,"line":1393},[288,56142,52317],{"class":298},[288,56144,51580],{"class":51473},[288,56146,51583],{"class":298},[288,56148,51580],{"class":51473},[288,56150,51480],{"class":298},[288,56152,56153,56155,56157],{"class":290,"line":1484},[288,56154,52317],{"class":298},[288,56156,5299],{"class":51473},[288,56158,51480],{"class":298},[288,56160,56161,56163],{"class":290,"line":1490},[288,56162,6576],{"class":51473},[288,56164,15745],{"class":298},[288,56166,56167,56169,56171,56173],{"class":290,"line":1502},[288,56168,54868],{"class":347},[288,56170,51610],{"class":298},[288,56172,490],{"class":347},[288,56174,1463],{"class":298},[288,56176,56177,56179,56181,56183],{"class":290,"line":1784},[288,56178,54879],{"class":347},[288,56180,51610],{"class":298},[288,56182,490],{"class":347},[288,56184,1463],{"class":298},[288,56186,56187],{"class":290,"line":1789},[288,56188,2359],{"class":298},[288,56190,56191],{"class":290,"line":1795},[288,56192,2572],{"emptyLinePlaceholder":217},[288,56194,56195,56197],{"class":290,"line":1800},[288,56196,54898],{"class":51473},[288,56198,15745],{"class":298},[288,56200,56201,56203,56205,56207],{"class":290,"line":1814},[288,56202,54905],{"class":347},[288,56204,51610],{"class":298},[288,56206,54910],{"class":347},[288,56208,1463],{"class":298},[288,56210,56211],{"class":290,"line":1819},[288,56212,2359],{"class":298},[288,56214,56215],{"class":290,"line":1825},[288,56216,2572],{"emptyLinePlaceholder":217},[288,56218,56219,56221],{"class":290,"line":1846},[288,56220,54925],{"class":2135},[288,56222,15745],{"class":298},[288,56224,56225,56227,56229,56231],{"class":290,"line":1851},[288,56226,54932],{"class":347},[288,56228,51610],{"class":298},[288,56230,54937],{"class":347},[288,56232,1463],{"class":298},[288,56234,56235,56237,56239,56241,56243],{"class":290,"line":1865},[288,56236,54944],{"class":347},[288,56238,51610],{"class":298},[288,56240,54949],{"class":347},[288,56242,51665],{"class":294},[288,56244,1463],{"class":298},[288,56246,56247,56249,56251,56253,56255],{"class":290,"line":1870},[288,56248,54958],{"class":347},[288,56250,51610],{"class":298},[288,56252,1711],{"class":347},[288,56254,51665],{"class":294},[288,56256,1463],{"class":298},[288,56258,56259,56261,56263,56265,56267,56269],{"class":290,"line":1899},[288,56260,54879],{"class":347},[288,56262,51610],{"class":298},[288,56264,608],{"class":347},[288,56266,51665],{"class":294},[288,56268,51729],{"class":347},[288,56270,1463],{"class":298},[288,56272,56273],{"class":290,"line":1904},[288,56274,2359],{"class":298},[288,56276,56277],{"class":290,"line":1921},[288,56278,2572],{"emptyLinePlaceholder":217},[288,56280,56281,56283],{"class":290,"line":1926},[288,56282,54993],{"class":2135},[288,56284,15745],{"class":298},[288,56286,56287,56289,56291,56293],{"class":290,"line":1931},[288,56288,54932],{"class":347},[288,56290,51610],{"class":298},[288,56292,55004],{"class":347},[288,56294,1463],{"class":298},[288,56296,56297,56299,56301,56303],{"class":290,"line":1936},[288,56298,55011],{"class":347},[288,56300,51610],{"class":298},[288,56302,490],{"class":347},[288,56304,1463],{"class":298},[288,56306,56307,56309,56311,56313],{"class":290,"line":1950},[288,56308,55022],{"class":347},[288,56310,51610],{"class":298},[288,56312,490],{"class":347},[288,56314,1463],{"class":298},[288,56316,56317,56319,56321,56323,56325],{"class":290,"line":1955},[288,56318,54944],{"class":347},[288,56320,51610],{"class":298},[288,56322,608],{"class":347},[288,56324,625],{"class":294},[288,56326,1463],{"class":298},[288,56328,56329,56331,56333,56335,56337],{"class":290,"line":2749},[288,56330,54958],{"class":347},[288,56332,51610],{"class":298},[288,56334,872],{"class":347},[288,56336,625],{"class":294},[288,56338,1463],{"class":298},[288,56340,56341,56343,56345,56347],{"class":290,"line":2763},[288,56342,55057],{"class":347},[288,56344,51610],{"class":298},[288,56346,55062],{"class":347},[288,56348,1463],{"class":298},[288,56350,56351],{"class":290,"line":2771},[288,56352,2359],{"class":298},[288,56354,56355],{"class":290,"line":2776},[288,56356,2572],{"emptyLinePlaceholder":217},[288,56358,56359,56361,56363],{"class":290,"line":2782},[288,56360,54993],{"class":2135},[288,56362,6998],{"class":51473},[288,56364,15745],{"class":298},[288,56366,56367,56369,56371,56373],{"class":290,"line":2788},[288,56368,54932],{"class":347},[288,56370,51610],{"class":298},[288,56372,55004],{"class":347},[288,56374,1463],{"class":298},[288,56376,56377,56379,56381,56383,56385],{"class":290,"line":2793},[288,56378,55095],{"class":347},[288,56380,51610],{"class":298},[288,56382,1198],{"class":347},[288,56384,51665],{"class":294},[288,56386,1463],{"class":298},[288,56388,56389,56391,56393,56395,56397],{"class":290,"line":8121},[288,56390,55011],{"class":347},[288,56392,51610],{"class":298},[288,56394,997],{"class":347},[288,56396,51665],{"class":294},[288,56398,1463],{"class":298},[288,56400,56401,56403,56405,56407,56409],{"class":290,"line":8145},[288,56402,55120],{"class":347},[288,56404,51610],{"class":298},[288,56406,616],{"class":347},[288,56408,51665],{"class":294},[288,56410,1463],{"class":298},[288,56412,56413],{"class":290,"line":8150},[288,56414,2359],{"class":298},[288,56416,56417],{"class":290,"line":8156},[288,56418,2572],{"emptyLinePlaceholder":217},[288,56420,56421,56423],{"class":290,"line":8183},[288,56422,55141],{"class":51473},[288,56424,15745],{"class":298},[288,56426,56427,56429,56431,56433],{"class":290,"line":8188},[288,56428,54932],{"class":347},[288,56430,51610],{"class":298},[288,56432,55004],{"class":347},[288,56434,1463],{"class":298},[288,56436,56437,56439,56441,56443,56445],{"class":290,"line":8194},[288,56438,55120],{"class":347},[288,56440,51610],{"class":298},[288,56442,1078],{"class":347},[288,56444,51665],{"class":294},[288,56446,1463],{"class":298},[288,56448,56449,56451,56453,56455,56457],{"class":290,"line":8206},[288,56450,55011],{"class":347},[288,56452,51610],{"class":298},[288,56454,997],{"class":347},[288,56456,51665],{"class":294},[288,56458,1463],{"class":298},[288,56460,56461,56463,56465,56467],{"class":290,"line":8218},[288,56462,55182],{"class":347},[288,56464,51610],{"class":298},[288,56466,51650],{"class":347},[288,56468,1463],{"class":298},[288,56470,56471,56473,56475,56477],{"class":290,"line":8230},[288,56472,55193],{"class":347},[288,56474,51610],{"class":298},[288,56476,51841],{"class":347},[288,56478,1463],{"class":298},[288,56480,56481,56483,56485,56487],{"class":290,"line":9889},[288,56482,54932],{"class":347},[288,56484,51610],{"class":298},[288,56486,55004],{"class":347},[288,56488,1463],{"class":298},[288,56490,56491,56493,56495,56497,56499],{"class":290,"line":9914},[288,56492,54944],{"class":347},[288,56494,51610],{"class":298},[288,56496,4164],{"class":347},[288,56498,51665],{"class":294},[288,56500,1463],{"class":298},[288,56502,56503,56505,56507,56509,56511],{"class":290,"line":9937},[288,56504,54958],{"class":347},[288,56506,51610],{"class":298},[288,56508,997],{"class":347},[288,56510,51665],{"class":294},[288,56512,1463],{"class":298},[288,56514,56515],{"class":290,"line":9961},[288,56516,2359],{"class":298},[288,56518,56519],{"class":290,"line":9966},[288,56520,2572],{"emptyLinePlaceholder":217},[288,56522,56523,56525,56527],{"class":290,"line":9971},[288,56524,55141],{"class":51473},[288,56526,55248],{"class":51473},[288,56528,15745],{"class":298},[288,56530,56531,56533,56535,56537,56539],{"class":290,"line":9976},[288,56532,54944],{"class":347},[288,56534,51610],{"class":298},[288,56536,997],{"class":347},[288,56538,51665],{"class":294},[288,56540,1463],{"class":298},[288,56542,56543,56545,56547,56549,56551],{"class":290,"line":9985},[288,56544,54958],{"class":347},[288,56546,51610],{"class":298},[288,56548,997],{"class":347},[288,56550,51665],{"class":294},[288,56552,1463],{"class":298},[288,56554,56555,56557,56559,56561,56563,56565,56567,56569,56571,56573,56575,56577],{"class":290,"line":9990},[288,56556,55057],{"class":347},[288,56558,51610],{"class":298},[288,56560,55283],{"class":347},[288,56562,299],{"class":298},[288,56564,490],{"class":347},[288,56566,12608],{"class":298},[288,56568,490],{"class":347},[288,56570,12608],{"class":298},[288,56572,490],{"class":347},[288,56574,12608],{"class":298},[288,56576,55300],{"class":347},[288,56578,2891],{"class":298},[288,56580,56581,56583,56585,56587,56589],{"class":290,"line":9996},[288,56582,55307],{"class":347},[288,56584,51610],{"class":298},[288,56586,743],{"class":347},[288,56588,51665],{"class":294},[288,56590,1463],{"class":298},[288,56592,56593],{"class":290,"line":10017},[288,56594,2359],{"class":298},[288,56596,56597],{"class":290,"line":10023},[288,56598,2572],{"emptyLinePlaceholder":217},[288,56600,56601,56603],{"class":290,"line":10037},[288,56602,55328],{"class":2135},[288,56604,15745],{"class":298},[288,56606,56607,56609,56611,56613],{"class":290,"line":10043},[288,56608,55057],{"class":347},[288,56610,51610],{"class":298},[288,56612,55339],{"class":347},[288,56614,1463],{"class":298},[288,56616,56617],{"class":290,"line":10070},[288,56618,2359],{"class":298},[288,56620,56621,56623,56625],{"class":290,"line":10079},[288,56622,52590],{"class":298},[288,56624,5299],{"class":51473},[288,56626,51480],{"class":298},[288,56628,56629,56631,56633],{"class":290,"line":10085},[288,56630,51958],{"class":298},[288,56632,51507],{"class":51473},[288,56634,51480],{"class":298},[288,56636,56637],{"class":290,"line":10093},[288,56638,2572],{"emptyLinePlaceholder":217},[288,56640,56641,56643,56645],{"class":290,"line":10098},[288,56642,1207],{"class":298},[288,56644,51973],{"class":51473},[288,56646,51480],{"class":298},[288,56648,56649,56651,56653,56655,56657,56659],{"class":290,"line":16777},[288,56650,52317],{"class":298},[288,56652,51784],{"class":51473},[288,56654,53659],{"class":2135},[288,56656,344],{"class":298},[288,56658,53664],{"class":403},[288,56660,51480],{"class":298},[288,56662,56663,56665,56667,56669,56671,56673],{"class":290,"line":16783},[288,56664,51514],{"class":298},[288,56666,51784],{"class":51473},[288,56668,53659],{"class":2135},[288,56670,344],{"class":298},[288,56672,55400],{"class":403},[288,56674,51480],{"class":298},[288,56676,56677,56679,56681,56683,56685,56687,56689,56691,56693],{"class":290,"line":16806},[288,56678,55407],{"class":298},[288,56680,200],{"class":51473},[288,56682,55412],{"class":2135},[288,56684,344],{"class":298},[288,56686,55417],{"class":403},[288,56688,55420],{"class":2135},[288,56690,344],{"class":298},[288,56692,7825],{"class":403},[288,56694,51480],{"class":298},[288,56696,56697,56699,56701],{"class":290,"line":16812},[288,56698,51949],{"class":298},[288,56700,51784],{"class":51473},[288,56702,51480],{"class":298},[288,56704,56705,56707,56709,56711,56713,56715],{"class":290,"line":16835},[288,56706,51514],{"class":298},[288,56708,51784],{"class":51473},[288,56710,53659],{"class":2135},[288,56712,344],{"class":298},[288,56714,55447],{"class":403},[288,56716,51480],{"class":298},[288,56718,56719,56721,56723,56725,56727],{"class":290,"line":16849},[288,56720,55407],{"class":298},[288,56722,19],{"class":51473},[288,56724,55458],{"class":298},[288,56726,19],{"class":51473},[288,56728,51480],{"class":298},[288,56730,56731,56733,56735],{"class":290,"line":16869},[288,56732,55407],{"class":298},[288,56734,1304],{"class":51473},[288,56736,51480],{"class":298},[288,56738,56739,56741,56743,56745,56747,56749,56751,56753],{"class":290,"line":16875},[288,56740,55475],{"class":298},[288,56742,246],{"class":51473},[288,56744,53659],{"class":2135},[288,56746,344],{"class":298},[288,56748,55484],{"class":403},[288,56750,55487],{"class":298},[288,56752,246],{"class":51473},[288,56754,51480],{"class":298},[288,56756,56757,56759,56761,56763,56765],{"class":290,"line":16886},[288,56758,55475],{"class":298},[288,56760,246],{"class":51473},[288,56762,55487],{"class":298},[288,56764,246],{"class":51473},[288,56766,51480],{"class":298},[288,56768,56769,56771,56773,56775,56777],{"class":290,"line":16909},[288,56770,55475],{"class":298},[288,56772,246],{"class":51473},[288,56774,55487],{"class":298},[288,56776,246],{"class":51473},[288,56778,51480],{"class":298},[288,56780,56781,56783,56785,56787,56789],{"class":290,"line":16931},[288,56782,55475],{"class":298},[288,56784,246],{"class":51473},[288,56786,55487],{"class":298},[288,56788,246],{"class":51473},[288,56790,51480],{"class":298},[288,56792,56793,56795,56797,56799,56801],{"class":290,"line":16936},[288,56794,55475],{"class":298},[288,56796,246],{"class":51473},[288,56798,55487],{"class":298},[288,56800,246],{"class":51473},[288,56802,51480],{"class":298},[288,56804,56805,56807,56809,56811,56813],{"class":290,"line":16942},[288,56806,55475],{"class":298},[288,56808,246],{"class":51473},[288,56810,55487],{"class":298},[288,56812,246],{"class":51473},[288,56814,51480],{"class":298},[288,56816,56817,56819,56821,56823,56825],{"class":290,"line":16956},[288,56818,55475],{"class":298},[288,56820,246],{"class":51473},[288,56822,55487],{"class":298},[288,56824,246],{"class":51473},[288,56826,51480],{"class":298},[288,56828,56829,56831,56833,56835,56837],{"class":290,"line":16969},[288,56830,55475],{"class":298},[288,56832,246],{"class":51473},[288,56834,55487],{"class":298},[288,56836,246],{"class":51473},[288,56838,51480],{"class":298},[288,56840,56841,56843,56845],{"class":290,"line":16974},[288,56842,55580],{"class":298},[288,56844,1304],{"class":51473},[288,56846,51480],{"class":298},[288,56848,56849,56851,56853],{"class":290,"line":16988},[288,56850,51949],{"class":298},[288,56852,51784],{"class":51473},[288,56854,51480],{"class":298},[288,56856,56857,56859,56861],{"class":290,"line":16993},[288,56858,52590],{"class":298},[288,56860,51784],{"class":51473},[288,56862,51480],{"class":298},[288,56864,56865,56867,56869],{"class":290,"line":16999},[288,56866,52317],{"class":298},[288,56868,51986],{"class":51473},[288,56870,51480],{"class":298},[288,56872,56873,56875,56878,56880],{"class":290,"line":17004},[288,56874,11394],{"class":294},[288,56876,56877],{"class":347}," sliderData",[288,56879,13737],{"class":294},[288,56881,55620],{"class":298},[288,56883,56884,56886,56888,56890,56892,56894,56896],{"class":290,"line":17018},[288,56885,55625],{"class":298},[288,56887,55628],{"class":403},[288,56889,55631],{"class":298},[288,56891,55634],{"class":403},[288,56893,55637],{"class":298},[288,56895,55640],{"class":403},[288,56897,55643],{"class":298},[288,56899,56900,56902,56904,56906,56908,56910,56912],{"class":290,"line":17023},[288,56901,55625],{"class":298},[288,56903,55650],{"class":403},[288,56905,55631],{"class":298},[288,56907,55655],{"class":403},[288,56909,55637],{"class":298},[288,56911,55660],{"class":403},[288,56913,55643],{"class":298},[288,56915,56916,56918,56920,56922,56924,56926,56928],{"class":290,"line":17028},[288,56917,55625],{"class":298},[288,56919,55669],{"class":403},[288,56921,55631],{"class":298},[288,56923,55674],{"class":403},[288,56925,55637],{"class":298},[288,56927,55679],{"class":403},[288,56929,55643],{"class":298},[288,56931,56932,56934,56936,56938,56940,56942,56944],{"class":290,"line":17042},[288,56933,55625],{"class":298},[288,56935,55688],{"class":403},[288,56937,55631],{"class":298},[288,56939,55693],{"class":403},[288,56941,55637],{"class":298},[288,56943,55698],{"class":403},[288,56945,55643],{"class":298},[288,56947,56948,56950,56952,56954,56956,56958,56960],{"class":290,"line":17054},[288,56949,55625],{"class":298},[288,56951,55707],{"class":403},[288,56953,55631],{"class":298},[288,56955,55712],{"class":403},[288,56957,55637],{"class":298},[288,56959,55717],{"class":403},[288,56961,55643],{"class":298},[288,56963,56964,56966,56968,56970,56972,56974,56976],{"class":290,"line":17059},[288,56965,55625],{"class":298},[288,56967,55726],{"class":403},[288,56969,55631],{"class":298},[288,56971,55731],{"class":403},[288,56973,55637],{"class":298},[288,56975,55736],{"class":403},[288,56977,55643],{"class":298},[288,56979,56980,56982,56984,56986,56988,56990,56992],{"class":290,"line":17072},[288,56981,55625],{"class":298},[288,56983,55745],{"class":403},[288,56985,55631],{"class":298},[288,56987,55750],{"class":403},[288,56989,55637],{"class":298},[288,56991,55755],{"class":403},[288,56993,55643],{"class":298},[288,56995,56996,56998,57000,57002,57004,57006,57008],{"class":290,"line":17077},[288,56997,55625],{"class":298},[288,56999,55764],{"class":403},[288,57001,55631],{"class":298},[288,57003,55769],{"class":403},[288,57005,55637],{"class":298},[288,57007,55774],{"class":403},[288,57009,55777],{"class":298},[288,57011,57012],{"class":290,"line":17082},[288,57013,53282],{"class":298},[288,57015,57016],{"class":290,"line":17087},[288,57017,57018],{"class":357},"    \u002F\u002F 1.获取元素\n",[288,57020,57021,57023,57025,57027,57029,57031,57033,57035],{"class":290,"line":17100},[288,57022,11394],{"class":294},[288,57024,55788],{"class":347},[288,57026,13737],{"class":294},[288,57028,54569],{"class":298},[288,57030,54572],{"class":2135},[288,57032,299],{"class":298},[288,57034,55799],{"class":403},[288,57036,305],{"class":298},[288,57038,57039,57041,57043,57045,57047,57049,57051,57053],{"class":290,"line":17105},[288,57040,11394],{"class":294},[288,57042,6998],{"class":347},[288,57044,13737],{"class":294},[288,57046,54569],{"class":298},[288,57048,54572],{"class":2135},[288,57050,299],{"class":298},[288,57052,55818],{"class":403},[288,57054,305],{"class":298},[288,57056,57057,57059,57061,57063],{"class":290,"line":32806},[288,57058,52392],{"class":294},[288,57060,9611],{"class":298},[288,57062,344],{"class":294},[288,57064,47506],{"class":347},[288,57066,57067],{"class":290,"line":32812},[288,57068,57069],{"class":357},"    \u002F\u002F 2.开启定时器\n",[288,57071,57072],{"class":290,"line":32818},[288,57073,57074],{"class":357},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[288,57076,57077,57080,57082,57084],{"class":290,"line":32824},[288,57078,57079],{"class":2135},"    setInterval",[288,57081,299],{"class":298},[288,57083,54622],{"class":294},[288,57085,54625],{"class":298},[288,57087,57088,57090],{"class":290,"line":32830},[288,57089,54630],{"class":298},[288,57091,2874],{"class":294},[288,57093,57094,57096,57098,57100,57103,57105],{"class":290,"line":32841},[288,57095,54653],{"class":294},[288,57097,54656],{"class":298},[288,57099,1882],{"class":294},[288,57101,57102],{"class":298}," sliderData.",[288,57104,52141],{"class":347},[288,57106,12615],{"class":298},[288,57108,57109,57112,57114],{"class":290,"line":32847},[288,57110,57111],{"class":298},"        i ",[288,57113,344],{"class":294},[288,57115,47506],{"class":347},[288,57117,57118],{"class":290,"line":32867},[288,57119,52571],{"class":298},[288,57121,57122],{"class":290,"line":32873},[288,57123,57124],{"class":357},"      \u002F\u002F 更换图片路径\n",[288,57126,57127,57129,57131],{"class":290,"line":32884},[288,57128,55894],{"class":298},[288,57130,344],{"class":294},[288,57132,57133],{"class":298}," sliderData[i].url\n",[288,57135,57136],{"class":290,"line":32890},[288,57137,57138],{"class":357},"      \u002F\u002F 把文字写到p里面\n",[288,57140,57141,57143,57145],{"class":290,"line":32896},[288,57142,55904],{"class":298},[288,57144,344],{"class":294},[288,57146,57147],{"class":298}," sliderData[i].title\n",[288,57149,57150],{"class":290,"line":32902},[288,57151,57152],{"class":357},"      \u002F\u002F 小圆点\n",[288,57154,57155],{"class":290,"line":32908},[288,57156,57157],{"class":357},"      \u002F\u002F 先删除以前的active\n",[288,57159,57160],{"class":290,"line":32914},[288,57161,57162],{"class":357},"      \u002F\u002F 只让当前li添加active\n",[288,57164,57165,57167,57169,57171,57174,57177,57180,57182,57184],{"class":290,"line":32920},[288,57166,55944],{"class":298},[288,57168,54572],{"class":2135},[288,57170,299],{"class":298},[288,57172,57173],{"class":403},"'.slider-footer .activate'",[288,57175,57176],{"class":298},").classList.",[288,57178,57179],{"class":2135},"remove",[288,57181,299],{"class":298},[288,57183,55962],{"class":403},[288,57185,305],{"class":298},[288,57187,57188,57190,57192,57194,57197,57199,57201,57203,57206,57208,57210,57212,57214],{"class":290,"line":32926},[288,57189,55944],{"class":298},[288,57191,54572],{"class":2135},[288,57193,299],{"class":298},[288,57195,57196],{"class":403},"`.slider-footer ul li:nth-child(${",[288,57198,738],{"class":298},[288,57200,45739],{"class":294},[288,57202,25291],{"class":347},[288,57204,57205],{"class":403},"})`",[288,57207,57176],{"class":298},[288,57209,5507],{"class":2135},[288,57211,299],{"class":298},[288,57213,55962],{"class":403},[288,57215,305],{"class":298},[288,57217,57218],{"class":290,"line":32946},[288,57219,2572],{"emptyLinePlaceholder":217},[288,57221,57222,57224,57226],{"class":290,"line":32952},[288,57223,54708],{"class":298},[288,57225,6583],{"class":347},[288,57227,305],{"class":298},[288,57229,57230],{"class":290,"line":32968},[288,57231,2572],{"emptyLinePlaceholder":217},[288,57233,57234,57236,57238],{"class":290,"line":32974},[288,57235,52590],{"class":298},[288,57237,51986],{"class":51473},[288,57239,51480],{"class":298},[288,57241,57242,57244,57246],{"class":290,"line":32988},[288,57243,51958],{"class":298},[288,57245,51973],{"class":51473},[288,57247,51480],{"class":298},[288,57249,57250],{"class":290,"line":32994},[288,57251,2572],{"emptyLinePlaceholder":217},[288,57253,57254,57256,57258],{"class":290,"line":33009},[288,57255,51958],{"class":298},[288,57257,50808],{"class":51473},[288,57259,51480],{"class":298},[260,57261,57263],{"id":57262},"_317-重要知识点","3.1.7 重要知识点",[19,57265,57266,57267],{},"浏览器在渲染文本时， ",[448,57268,57269],{},"没有空格或换行符就没有“断行点”",[19,57271,57272],{},[200,57273],{"alt":205,"src":57274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57276,57277],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57279,57280],{},[200,57281],{"alt":205,"src":57282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57284,57285],{},[200,57286],{"alt":205,"src":57287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57289,57291],{"id":57290},"_32-dom事件基础","3.2 DOM事件基础",[260,57293,57295],{"id":57294},"_321-事件监听","3.2.1 事件监听",[19,57297,57298],{},[200,57299],{"alt":205,"src":57300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57302,57303],{},"事件监听有响应的发生",[19,57305,57306],{},[200,57307],{"alt":205,"src":57308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57310,57311],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57313,57314],{},"对于有名函数,要执行的函数名后边不要加()",[260,57316,57318],{"id":57317},"_322-随机点名案例","3.2.2 随机点名案例",[280,57320,57322],{"className":50806,"code":57321,"language":50808,"meta":205,"style":205},"\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",[25,57323,57324,57334,57348,57352,57360,57374,57394,57406,57414,57420,57430,57440,57444,57448,57455,57466,57470,57474,57480,57492,57506,57516,57528,57541,57545,57549,57556,57560,57573,57585,57597,57601,57605,57609,57616,57626,57630,57634,57643,57655,57667,57682,57686,57694,57702,57706,57714,57727,57741,57754,57774,57782,57797,57817,57837,57845,57849,57857,57862,57898,57918,57923,57942,57947,57958,57963,57974,57979,57998,58013,58018,58044,58054,58063,58068,58084,58089,58094,58099,58114,58118,58122,58127,58146,58163,58171,58176,58191,58195,58199,58207,58215,58219],{"__ignoreMap":205},[288,57325,57326,57328,57330,57332],{"class":290,"line":291},[288,57327,51470],{"class":298},[288,57329,51474],{"class":51473},[288,57331,51477],{"class":2135},[288,57333,51480],{"class":298},[288,57335,57336,57338,57340,57342,57344,57346],{"class":290,"line":206},[288,57337,1207],{"class":298},[288,57339,50808],{"class":51473},[288,57341,51489],{"class":2135},[288,57343,344],{"class":298},[288,57345,51494],{"class":403},[288,57347,51480],{"class":298},[288,57349,57350],{"class":290,"line":1352},[288,57351,2572],{"emptyLinePlaceholder":217},[288,57353,57354,57356,57358],{"class":290,"line":1367},[288,57355,1207],{"class":298},[288,57357,51507],{"class":51473},[288,57359,51480],{"class":298},[288,57361,57362,57364,57366,57368,57370,57372],{"class":290,"line":1373},[288,57363,52317],{"class":298},[288,57365,51517],{"class":51473},[288,57367,51520],{"class":2135},[288,57369,344],{"class":298},[288,57371,51525],{"class":403},[288,57373,51480],{"class":298},[288,57375,57376,57378,57380,57382,57384,57386,57388,57390,57392],{"class":290,"line":1387},[288,57377,52317],{"class":298},[288,57379,51517],{"class":51473},[288,57381,15093],{"class":2135},[288,57383,344],{"class":298},[288,57385,51564],{"class":403},[288,57387,51544],{"class":2135},[288,57389,344],{"class":298},[288,57391,51571],{"class":403},[288,57393,51480],{"class":298},[288,57395,57396,57398,57400,57402,57404],{"class":290,"line":1393},[288,57397,52317],{"class":298},[288,57399,51580],{"class":51473},[288,57401,51583],{"class":298},[288,57403,51580],{"class":51473},[288,57405,51480],{"class":298},[288,57407,57408,57410,57412],{"class":290,"line":1484},[288,57409,52317],{"class":298},[288,57411,5299],{"class":51473},[288,57413,51480],{"class":298},[288,57415,57416,57418],{"class":290,"line":1490},[288,57417,6576],{"class":51473},[288,57419,15745],{"class":298},[288,57421,57422,57424,57426,57428],{"class":290,"line":1502},[288,57423,54879],{"class":347},[288,57425,51610],{"class":298},[288,57427,490],{"class":347},[288,57429,1463],{"class":298},[288,57431,57432,57434,57436,57438],{"class":290,"line":1784},[288,57433,54868],{"class":347},[288,57435,51610],{"class":298},[288,57437,490],{"class":347},[288,57439,1463],{"class":298},[288,57441,57442],{"class":290,"line":1789},[288,57443,2359],{"class":298},[288,57445,57446],{"class":290,"line":1795},[288,57447,2572],{"emptyLinePlaceholder":217},[288,57449,57450,57453],{"class":290,"line":1800},[288,57451,57452],{"class":51473},"    h2",[288,57454,15745],{"class":298},[288,57456,57457,57460,57462,57464],{"class":290,"line":1814},[288,57458,57459],{"class":347},"      text-align",[288,57461,51610],{"class":298},[288,57463,51765],{"class":347},[288,57465,1463],{"class":298},[288,57467,57468],{"class":290,"line":1819},[288,57469,2359],{"class":298},[288,57471,57472],{"class":290,"line":1825},[288,57473,2572],{"emptyLinePlaceholder":217},[288,57475,57476,57478],{"class":290,"line":1846},[288,57477,54925],{"class":2135},[288,57479,15745],{"class":298},[288,57481,57482,57484,57486,57488,57490],{"class":290,"line":1851},[288,57483,54944],{"class":347},[288,57485,51610],{"class":298},[288,57487,1711],{"class":347},[288,57489,51665],{"class":294},[288,57491,1463],{"class":298},[288,57493,57494,57496,57498,57500,57502,57504],{"class":290,"line":1865},[288,57495,54879],{"class":347},[288,57497,51610],{"class":298},[288,57499,953],{"class":347},[288,57501,51665],{"class":294},[288,57503,51729],{"class":347},[288,57505,1463],{"class":298},[288,57507,57508,57510,57512,57514],{"class":290,"line":1870},[288,57509,55182],{"class":347},[288,57511,51610],{"class":298},[288,57513,51650],{"class":347},[288,57515,1463],{"class":298},[288,57517,57518,57520,57522,57524,57526],{"class":290,"line":1899},[288,57519,55095],{"class":347},[288,57521,51610],{"class":298},[288,57523,1122],{"class":347},[288,57525,51665],{"class":294},[288,57527,1463],{"class":298},[288,57529,57530,57533,57535,57537,57539],{"class":290,"line":1904},[288,57531,57532],{"class":347},"      line-height",[288,57534,51610],{"class":298},[288,57536,698],{"class":347},[288,57538,51665],{"class":294},[288,57540,1463],{"class":298},[288,57542,57543],{"class":290,"line":1921},[288,57544,2359],{"class":298},[288,57546,57547],{"class":290,"line":1926},[288,57548,2572],{"emptyLinePlaceholder":217},[288,57550,57551,57554],{"class":290,"line":1931},[288,57552,57553],{"class":2135},"    .qs",[288,57555,15745],{"class":298},[288,57557,57558],{"class":290,"line":1936},[288,57559,2572],{"emptyLinePlaceholder":217},[288,57561,57562,57564,57566,57569,57571],{"class":290,"line":1950},[288,57563,54944],{"class":347},[288,57565,51610],{"class":298},[288,57567,57568],{"class":347},"450",[288,57570,51665],{"class":294},[288,57572,1463],{"class":298},[288,57574,57575,57577,57579,57581,57583],{"class":290,"line":1955},[288,57576,54958],{"class":347},[288,57578,51610],{"class":298},[288,57580,698],{"class":347},[288,57582,51665],{"class":294},[288,57584,1463],{"class":298},[288,57586,57587,57590,57592,57595],{"class":290,"line":2749},[288,57588,57589],{"class":347},"      color",[288,57591,51610],{"class":298},[288,57593,57594],{"class":347},"red",[288,57596,1463],{"class":298},[288,57598,57599],{"class":290,"line":2763},[288,57600,2572],{"emptyLinePlaceholder":217},[288,57602,57603],{"class":290,"line":2771},[288,57604,2359],{"class":298},[288,57606,57607],{"class":290,"line":2776},[288,57608,2572],{"emptyLinePlaceholder":217},[288,57610,57611,57614],{"class":290,"line":2782},[288,57612,57613],{"class":2135},"    .btns",[288,57615,15745],{"class":298},[288,57617,57618,57620,57622,57624],{"class":290,"line":2788},[288,57619,57459],{"class":347},[288,57621,51610],{"class":298},[288,57623,51765],{"class":347},[288,57625,1463],{"class":298},[288,57627,57628],{"class":290,"line":2793},[288,57629,2359],{"class":298},[288,57631,57632],{"class":290,"line":8121},[288,57633,2572],{"emptyLinePlaceholder":217},[288,57635,57636,57638,57641],{"class":290,"line":8145},[288,57637,57613],{"class":2135},[288,57639,57640],{"class":51473}," button",[288,57642,15745],{"class":298},[288,57644,57645,57647,57649,57651,57653],{"class":290,"line":8150},[288,57646,54944],{"class":347},[288,57648,51610],{"class":298},[288,57650,1114],{"class":347},[288,57652,51665],{"class":294},[288,57654,1463],{"class":298},[288,57656,57657,57659,57661,57663,57665],{"class":290,"line":8156},[288,57658,54958],{"class":347},[288,57660,51610],{"class":298},[288,57662,570],{"class":347},[288,57664,51665],{"class":294},[288,57666,1463],{"class":298},[288,57668,57669,57671,57673,57675,57678,57680],{"class":290,"line":8183},[288,57670,54879],{"class":347},[288,57672,51610],{"class":298},[288,57674,490],{"class":347},[288,57676,57677],{"class":347}," 50",[288,57679,51665],{"class":294},[288,57681,1463],{"class":298},[288,57683,57684],{"class":290,"line":8188},[288,57685,2359],{"class":298},[288,57687,57688,57690,57692],{"class":290,"line":8194},[288,57689,52590],{"class":298},[288,57691,5299],{"class":51473},[288,57693,51480],{"class":298},[288,57695,57696,57698,57700],{"class":290,"line":8206},[288,57697,51958],{"class":298},[288,57699,51507],{"class":51473},[288,57701,51480],{"class":298},[288,57703,57704],{"class":290,"line":8218},[288,57705,2572],{"emptyLinePlaceholder":217},[288,57707,57708,57710,57712],{"class":290,"line":8230},[288,57709,1207],{"class":298},[288,57711,51973],{"class":51473},[288,57713,51480],{"class":298},[288,57715,57716,57718,57720,57723,57725],{"class":290,"line":9889},[288,57717,52317],{"class":298},[288,57719,14],{"class":51473},[288,57721,57722],{"class":298},">随机点名\u003C\u002F",[288,57724,14],{"class":51473},[288,57726,51480],{"class":298},[288,57728,57729,57731,57733,57735,57737,57739],{"class":290,"line":9914},[288,57730,52317],{"class":298},[288,57732,51784],{"class":51473},[288,57734,53659],{"class":2135},[288,57736,344],{"class":298},[288,57738,53664],{"class":403},[288,57740,51480],{"class":298},[288,57742,57743,57745,57747,57750,57752],{"class":290,"line":9937},[288,57744,51514],{"class":298},[288,57746,288],{"class":51473},[288,57748,57749],{"class":298},">名字是：\u003C\u002F",[288,57751,288],{"class":51473},[288,57753,51480],{"class":298},[288,57755,57756,57758,57760,57762,57764,57767,57770,57772],{"class":290,"line":9961},[288,57757,51514],{"class":298},[288,57759,51784],{"class":51473},[288,57761,53659],{"class":2135},[288,57763,344],{"class":298},[288,57765,57766],{"class":403},"\"qs\"",[288,57768,57769],{"class":298},">这里显示姓名\u003C\u002F",[288,57771,51784],{"class":51473},[288,57773,51480],{"class":298},[288,57775,57776,57778,57780],{"class":290,"line":9966},[288,57777,52590],{"class":298},[288,57779,51784],{"class":51473},[288,57781,51480],{"class":298},[288,57783,57784,57786,57788,57790,57792,57795],{"class":290,"line":9971},[288,57785,52317],{"class":298},[288,57787,51784],{"class":51473},[288,57789,53659],{"class":2135},[288,57791,344],{"class":298},[288,57793,57794],{"class":403},"\"btns\"",[288,57796,51480],{"class":298},[288,57798,57799,57801,57803,57805,57807,57810,57813,57815],{"class":290,"line":9976},[288,57800,51514],{"class":298},[288,57802,54060],{"class":51473},[288,57804,53659],{"class":2135},[288,57806,344],{"class":298},[288,57808,57809],{"class":403},"\"start\"",[288,57811,57812],{"class":298},">开始\u003C\u002F",[288,57814,54060],{"class":51473},[288,57816,51480],{"class":298},[288,57818,57819,57821,57823,57825,57827,57830,57833,57835],{"class":290,"line":9985},[288,57820,51514],{"class":298},[288,57822,54060],{"class":51473},[288,57824,53659],{"class":2135},[288,57826,344],{"class":298},[288,57828,57829],{"class":403},"\"end\"",[288,57831,57832],{"class":298},">结束\u003C\u002F",[288,57834,54060],{"class":51473},[288,57836,51480],{"class":298},[288,57838,57839,57841,57843],{"class":290,"line":9990},[288,57840,52590],{"class":298},[288,57842,51784],{"class":51473},[288,57844,51480],{"class":298},[288,57846,57847],{"class":290,"line":9996},[288,57848,2572],{"emptyLinePlaceholder":217},[288,57850,57851,57853,57855],{"class":290,"line":10017},[288,57852,52317],{"class":298},[288,57854,51986],{"class":51473},[288,57856,51480],{"class":298},[288,57858,57859],{"class":290,"line":10023},[288,57860,57861],{"class":357},"    \u002F\u002F 数据数组\n",[288,57863,57864,57866,57869,57871,57873,57876,57878,57881,57883,57886,57888,57891,57893,57896],{"class":290,"line":10037},[288,57865,11394],{"class":294},[288,57867,57868],{"class":347}," arr",[288,57870,13737],{"class":294},[288,57872,52399],{"class":298},[288,57874,57875],{"class":403},"'马超'",[288,57877,12608],{"class":298},[288,57879,57880],{"class":403},"'黄忠'",[288,57882,12608],{"class":298},[288,57884,57885],{"class":403},"'赵云'",[288,57887,12608],{"class":298},[288,57889,57890],{"class":403},"'关羽'",[288,57892,12608],{"class":298},[288,57894,57895],{"class":403},"'张飞'",[288,57897,33419],{"class":298},[288,57899,57900,57902,57905,57907,57909,57911,57913,57916],{"class":290,"line":10043},[288,57901,11394],{"class":294},[288,57903,57904],{"class":347}," qs",[288,57906,13737],{"class":294},[288,57908,54569],{"class":298},[288,57910,54572],{"class":2135},[288,57912,299],{"class":298},[288,57914,57915],{"class":403},"'.qs'",[288,57917,305],{"class":298},[288,57919,57920],{"class":290,"line":10070},[288,57921,57922],{"class":357},"    \u002F\u002F 1.业务1.开始按钮模块\n",[288,57924,57925,57927,57929,57931,57933,57935,57937,57940],{"class":290,"line":10079},[288,57926,11394],{"class":294},[288,57928,4356],{"class":347},[288,57930,13737],{"class":294},[288,57932,54569],{"class":298},[288,57934,54572],{"class":2135},[288,57936,299],{"class":298},[288,57938,57939],{"class":403},"'.start'",[288,57941,305],{"class":298},[288,57943,57944],{"class":290,"line":10085},[288,57945,57946],{"class":357},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[288,57948,57949,57951,57954,57956],{"class":290,"line":10093},[288,57950,52392],{"class":294},[288,57952,57953],{"class":298}," timerId ",[288,57955,344],{"class":294},[288,57957,47506],{"class":347},[288,57959,57960],{"class":290,"line":10098},[288,57961,57962],{"class":357},"    \u002F\u002F 随机号要全局变量\n",[288,57964,57965,57967,57970,57972],{"class":290,"line":16777},[288,57966,52392],{"class":294},[288,57968,57969],{"class":298}," random ",[288,57971,344],{"class":294},[288,57973,47506],{"class":347},[288,57975,57976],{"class":290,"line":16783},[288,57977,57978],{"class":357},"    \u002F\u002F 1.1 添加点击事件\n",[288,57980,57981,57984,57987,57989,57992,57994,57996],{"class":290,"line":16806},[288,57982,57983],{"class":298},"    start.",[288,57985,57986],{"class":2135},"addEventListener",[288,57988,299],{"class":298},[288,57990,57991],{"class":403},"'click'",[288,57993,12608],{"class":298},[288,57995,54622],{"class":294},[288,57997,54625],{"class":298},[288,57999,58000,58003,58005,58007,58009,58011],{"class":290,"line":16812},[288,58001,58002],{"class":298},"      timerId ",[288,58004,344],{"class":294},[288,58006,54617],{"class":2135},[288,58008,299],{"class":298},[288,58010,54622],{"class":294},[288,58012,54625],{"class":298},[288,58014,58015],{"class":290,"line":16835},[288,58016,58017],{"class":357},"        \u002F\u002F 随机数\n",[288,58019,58020,58023,58025,58028,58031,58034,58036,58038,58040,58042],{"class":290,"line":16849},[288,58021,58022],{"class":298},"        random ",[288,58024,344],{"class":294},[288,58026,58027],{"class":2135}," parseInt",[288,58029,58030],{"class":298},"(Math.",[288,58032,58033],{"class":2135},"random",[288,58035,13223],{"class":298},[288,58037,752],{"class":294},[288,58039,52138],{"class":298},[288,58041,52141],{"class":347},[288,58043,305],{"class":298},[288,58045,58046,58049,58051],{"class":290,"line":16869},[288,58047,58048],{"class":298},"        qs.innerHTML ",[288,58050,344],{"class":294},[288,58052,58053],{"class":298}," arr[random]\n",[288,58055,58056,58059,58061],{"class":290,"line":16875},[288,58057,58058],{"class":298},"      }, ",[288,58060,570],{"class":347},[288,58062,305],{"class":298},[288,58064,58065],{"class":290,"line":16886},[288,58066,58067],{"class":357},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[288,58069,58070,58072,58075,58077,58080,58082],{"class":290,"line":16909},[288,58071,54653],{"class":294},[288,58073,58074],{"class":298}," (arr.",[288,58076,52141],{"class":347},[288,58078,58079],{"class":294}," ===",[288,58081,25291],{"class":347},[288,58083,12615],{"class":298},[288,58085,58086],{"class":290,"line":16931},[288,58087,58088],{"class":357},"        \u002F\u002F start.disabled = true\n",[288,58090,58091],{"class":290,"line":16936},[288,58092,58093],{"class":357},"        \u002F\u002F end.disabled = true\n",[288,58095,58096],{"class":290,"line":16942},[288,58097,58098],{"class":357},"        \u002F\u002F 可以合起来写\n",[288,58100,58101,58104,58106,58109,58111],{"class":290,"line":16956},[288,58102,58103],{"class":298},"        start.disabled ",[288,58105,344],{"class":294},[288,58107,58108],{"class":298}," end.disabled ",[288,58110,344],{"class":294},[288,58112,58113],{"class":347}," true\n",[288,58115,58116],{"class":290,"line":16969},[288,58117,52571],{"class":298},[288,58119,58120],{"class":290,"line":16974},[288,58121,33634],{"class":298},[288,58123,58124],{"class":290,"line":16988},[288,58125,58126],{"class":357},"    \u002F\u002F 1.2 关闭按钮模块\n",[288,58128,58129,58131,58133,58135,58137,58139,58141,58144],{"class":290,"line":16993},[288,58130,11394],{"class":294},[288,58132,4372],{"class":347},[288,58134,13737],{"class":294},[288,58136,54569],{"class":298},[288,58138,54572],{"class":2135},[288,58140,299],{"class":298},[288,58142,58143],{"class":403},"'.end'",[288,58145,305],{"class":298},[288,58147,58148,58151,58153,58155,58157,58159,58161],{"class":290,"line":16999},[288,58149,58150],{"class":298},"    end.",[288,58152,57986],{"class":2135},[288,58154,299],{"class":298},[288,58156,57991],{"class":403},[288,58158,12608],{"class":298},[288,58160,54622],{"class":294},[288,58162,54625],{"class":298},[288,58164,58165,58168],{"class":290,"line":17004},[288,58166,58167],{"class":2135},"      clearInterval",[288,58169,58170],{"class":298},"(timerId)\n",[288,58172,58173],{"class":290,"line":17018},[288,58174,58175],{"class":357},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[288,58177,58178,58181,58184,58187,58189],{"class":290,"line":17023},[288,58179,58180],{"class":298},"      arr.",[288,58182,58183],{"class":2135},"splice",[288,58185,58186],{"class":298},"(random, ",[288,58188,516],{"class":347},[288,58190,305],{"class":298},[288,58192,58193],{"class":290,"line":17028},[288,58194,33634],{"class":298},[288,58196,58197],{"class":290,"line":17042},[288,58198,2572],{"emptyLinePlaceholder":217},[288,58200,58201,58203,58205],{"class":290,"line":17054},[288,58202,52590],{"class":298},[288,58204,51986],{"class":51473},[288,58206,51480],{"class":298},[288,58208,58209,58211,58213],{"class":290,"line":17059},[288,58210,51958],{"class":298},[288,58212,51973],{"class":51473},[288,58214,51480],{"class":298},[288,58216,58217],{"class":290,"line":17072},[288,58218,2572],{"emptyLinePlaceholder":217},[288,58220,58221,58223,58225],{"class":290,"line":17077},[288,58222,51958],{"class":298},[288,58224,50808],{"class":51473},[288,58226,51480],{"class":298},[19,58228,58229],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[260,58231,58233],{"id":58232},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[280,58235,58237],{"className":50806,"code":58236,"language":50808,"meta":205,"style":205},"\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",[25,58238,58239,58249,58263,58267,58275,58289,58309,58321,58329,58333,58341,58353,58361,58380,58397,58413,58423,58427,58435,58443,58447],{"__ignoreMap":205},[288,58240,58241,58243,58245,58247],{"class":290,"line":291},[288,58242,51470],{"class":298},[288,58244,51474],{"class":51473},[288,58246,51477],{"class":2135},[288,58248,51480],{"class":298},[288,58250,58251,58253,58255,58257,58259,58261],{"class":290,"line":206},[288,58252,1207],{"class":298},[288,58254,50808],{"class":51473},[288,58256,51489],{"class":2135},[288,58258,344],{"class":298},[288,58260,51494],{"class":403},[288,58262,51480],{"class":298},[288,58264,58265],{"class":290,"line":1352},[288,58266,2572],{"emptyLinePlaceholder":217},[288,58268,58269,58271,58273],{"class":290,"line":1367},[288,58270,1207],{"class":298},[288,58272,51507],{"class":51473},[288,58274,51480],{"class":298},[288,58276,58277,58279,58281,58283,58285,58287],{"class":290,"line":1373},[288,58278,52317],{"class":298},[288,58280,51517],{"class":51473},[288,58282,51520],{"class":2135},[288,58284,344],{"class":298},[288,58286,51525],{"class":403},[288,58288,51480],{"class":298},[288,58290,58291,58293,58295,58297,58299,58301,58303,58305,58307],{"class":290,"line":1387},[288,58292,52317],{"class":298},[288,58294,51517],{"class":51473},[288,58296,15093],{"class":2135},[288,58298,344],{"class":298},[288,58300,51564],{"class":403},[288,58302,51544],{"class":2135},[288,58304,344],{"class":298},[288,58306,51571],{"class":403},[288,58308,51480],{"class":298},[288,58310,58311,58313,58315,58317,58319],{"class":290,"line":1393},[288,58312,52317],{"class":298},[288,58314,51580],{"class":51473},[288,58316,51583],{"class":298},[288,58318,51580],{"class":51473},[288,58320,51480],{"class":298},[288,58322,58323,58325,58327],{"class":290,"line":1484},[288,58324,51958],{"class":298},[288,58326,51507],{"class":51473},[288,58328,51480],{"class":298},[288,58330,58331],{"class":290,"line":1490},[288,58332,2572],{"emptyLinePlaceholder":217},[288,58334,58335,58337,58339],{"class":290,"line":1502},[288,58336,1207],{"class":298},[288,58338,51973],{"class":51473},[288,58340,51480],{"class":298},[288,58342,58343,58345,58347,58349,58351],{"class":290,"line":1784},[288,58344,52317],{"class":298},[288,58346,54060],{"class":51473},[288,58348,54066],{"class":298},[288,58350,54060],{"class":51473},[288,58352,51480],{"class":298},[288,58354,58355,58357,58359],{"class":290,"line":1789},[288,58356,52317],{"class":298},[288,58358,51986],{"class":51473},[288,58360,51480],{"class":298},[288,58362,58363,58365,58367,58369,58371,58373,58375,58378],{"class":290,"line":1795},[288,58364,11394],{"class":294},[288,58366,54564],{"class":347},[288,58368,13737],{"class":294},[288,58370,54569],{"class":298},[288,58372,54572],{"class":2135},[288,58374,299],{"class":298},[288,58376,58377],{"class":403},"'button'",[288,58379,305],{"class":298},[288,58381,58382,58385,58387,58389,58391,58393,58395],{"class":290,"line":1800},[288,58383,58384],{"class":298},"    btn.",[288,58386,57986],{"class":2135},[288,58388,299],{"class":298},[288,58390,57991],{"class":403},[288,58392,12608],{"class":298},[288,58394,54622],{"class":294},[288,58396,54625],{"class":298},[288,58398,58399,58402,58404,58406,58409,58411],{"class":290,"line":1814},[288,58400,58401],{"class":294},"      const",[288,58403,2412],{"class":347},[288,58405,13737],{"class":294},[288,58407,58408],{"class":298}," Math.",[288,58410,58033],{"class":2135},[288,58412,2148],{"class":298},[288,58414,58415,58418,58421],{"class":290,"line":1819},[288,58416,58417],{"class":298},"      console.",[288,58419,58420],{"class":2135},"log",[288,58422,312],{"class":298},[288,58424,58425],{"class":290,"line":1825},[288,58426,33634],{"class":298},[288,58428,58429,58431,58433],{"class":290,"line":1846},[288,58430,52590],{"class":298},[288,58432,51986],{"class":51473},[288,58434,51480],{"class":298},[288,58436,58437,58439,58441],{"class":290,"line":1851},[288,58438,51958],{"class":298},[288,58440,51973],{"class":51473},[288,58442,51480],{"class":298},[288,58444,58445],{"class":290,"line":1865},[288,58446,2572],{"emptyLinePlaceholder":217},[288,58448,58449,58451,58453],{"class":290,"line":1870},[288,58450,51958],{"class":298},[288,58452,50808],{"class":51473},[288,58454,51480],{"class":298},[19,58456,58457],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58459,58460],{},"常量不可以重新赋值",[19,58462,58463],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[280,58465,58467],{"className":50806,"code":58466,"language":50808,"meta":205,"style":205},"\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",[25,58468,58469,58479,58493,58497,58505,58519,58539,58551,58559,58563,58571,58583,58591,58602,58620,58636,58650,58658,58662,58670,58678,58682],{"__ignoreMap":205},[288,58470,58471,58473,58475,58477],{"class":290,"line":291},[288,58472,51470],{"class":298},[288,58474,51474],{"class":51473},[288,58476,51477],{"class":2135},[288,58478,51480],{"class":298},[288,58480,58481,58483,58485,58487,58489,58491],{"class":290,"line":206},[288,58482,1207],{"class":298},[288,58484,50808],{"class":51473},[288,58486,51489],{"class":2135},[288,58488,344],{"class":298},[288,58490,51494],{"class":403},[288,58492,51480],{"class":298},[288,58494,58495],{"class":290,"line":1352},[288,58496,2572],{"emptyLinePlaceholder":217},[288,58498,58499,58501,58503],{"class":290,"line":1367},[288,58500,1207],{"class":298},[288,58502,51507],{"class":51473},[288,58504,51480],{"class":298},[288,58506,58507,58509,58511,58513,58515,58517],{"class":290,"line":1373},[288,58508,52317],{"class":298},[288,58510,51517],{"class":51473},[288,58512,51520],{"class":2135},[288,58514,344],{"class":298},[288,58516,51525],{"class":403},[288,58518,51480],{"class":298},[288,58520,58521,58523,58525,58527,58529,58531,58533,58535,58537],{"class":290,"line":1387},[288,58522,52317],{"class":298},[288,58524,51517],{"class":51473},[288,58526,15093],{"class":2135},[288,58528,344],{"class":298},[288,58530,51564],{"class":403},[288,58532,51544],{"class":2135},[288,58534,344],{"class":298},[288,58536,51571],{"class":403},[288,58538,51480],{"class":298},[288,58540,58541,58543,58545,58547,58549],{"class":290,"line":1393},[288,58542,52317],{"class":298},[288,58544,51580],{"class":51473},[288,58546,51583],{"class":298},[288,58548,51580],{"class":51473},[288,58550,51480],{"class":298},[288,58552,58553,58555,58557],{"class":290,"line":1484},[288,58554,51958],{"class":298},[288,58556,51507],{"class":51473},[288,58558,51480],{"class":298},[288,58560,58561],{"class":290,"line":1490},[288,58562,2572],{"emptyLinePlaceholder":217},[288,58564,58565,58567,58569],{"class":290,"line":1502},[288,58566,1207],{"class":298},[288,58568,51973],{"class":51473},[288,58570,51480],{"class":298},[288,58572,58573,58575,58577,58579,58581],{"class":290,"line":1784},[288,58574,52317],{"class":298},[288,58576,54060],{"class":51473},[288,58578,54066],{"class":298},[288,58580,54060],{"class":51473},[288,58582,51480],{"class":298},[288,58584,58585,58587,58589],{"class":290,"line":1789},[288,58586,52317],{"class":298},[288,58588,51986],{"class":51473},[288,58590,51480],{"class":298},[288,58592,58593,58595,58597,58599],{"class":290,"line":1795},[288,58594,11394],{"class":294},[288,58596,2412],{"class":347},[288,58598,13737],{"class":294},[288,58600,58601],{"class":347}," 10\n",[288,58603,58604,58606,58608,58610,58612,58614,58616,58618],{"class":290,"line":1800},[288,58605,11394],{"class":294},[288,58607,54564],{"class":347},[288,58609,13737],{"class":294},[288,58611,54569],{"class":298},[288,58613,54572],{"class":2135},[288,58615,299],{"class":298},[288,58617,58377],{"class":403},[288,58619,305],{"class":298},[288,58621,58622,58624,58626,58628,58630,58632,58634],{"class":290,"line":1814},[288,58623,58384],{"class":298},[288,58625,57986],{"class":2135},[288,58627,299],{"class":298},[288,58629,57991],{"class":403},[288,58631,12608],{"class":298},[288,58633,54622],{"class":294},[288,58635,54625],{"class":298},[288,58637,58638,58640,58642,58644,58646,58648],{"class":290,"line":1819},[288,58639,58401],{"class":294},[288,58641,2412],{"class":347},[288,58643,13737],{"class":294},[288,58645,58408],{"class":298},[288,58647,58033],{"class":2135},[288,58649,2148],{"class":298},[288,58651,58652,58654,58656],{"class":290,"line":1825},[288,58653,58417],{"class":298},[288,58655,58420],{"class":2135},[288,58657,312],{"class":298},[288,58659,58660],{"class":290,"line":1846},[288,58661,33634],{"class":298},[288,58663,58664,58666,58668],{"class":290,"line":1851},[288,58665,52590],{"class":298},[288,58667,51986],{"class":51473},[288,58669,51480],{"class":298},[288,58671,58672,58674,58676],{"class":290,"line":1865},[288,58673,51958],{"class":298},[288,58675,51973],{"class":51473},[288,58677,51480],{"class":298},[288,58679,58680],{"class":290,"line":1870},[288,58681,2572],{"emptyLinePlaceholder":217},[288,58683,58684,58686,58688],{"class":290,"line":1899},[288,58685,51958],{"class":298},[288,58687,50808],{"class":51473},[288,58689,51480],{"class":298},[19,58691,58692],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[280,58694,58696],{"className":50806,"code":58695,"language":50808,"meta":205,"style":205},"\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",[25,58697,58698,58708,58722,58726,58734,58748,58768,58780,58788,58792,58800,58812,58820,58830,58848,58864,58877,58885,58889,58897,58905,58909],{"__ignoreMap":205},[288,58699,58700,58702,58704,58706],{"class":290,"line":291},[288,58701,51470],{"class":298},[288,58703,51474],{"class":51473},[288,58705,51477],{"class":2135},[288,58707,51480],{"class":298},[288,58709,58710,58712,58714,58716,58718,58720],{"class":290,"line":206},[288,58711,1207],{"class":298},[288,58713,50808],{"class":51473},[288,58715,51489],{"class":2135},[288,58717,344],{"class":298},[288,58719,51494],{"class":403},[288,58721,51480],{"class":298},[288,58723,58724],{"class":290,"line":1352},[288,58725,2572],{"emptyLinePlaceholder":217},[288,58727,58728,58730,58732],{"class":290,"line":1367},[288,58729,1207],{"class":298},[288,58731,51507],{"class":51473},[288,58733,51480],{"class":298},[288,58735,58736,58738,58740,58742,58744,58746],{"class":290,"line":1373},[288,58737,52317],{"class":298},[288,58739,51517],{"class":51473},[288,58741,51520],{"class":2135},[288,58743,344],{"class":298},[288,58745,51525],{"class":403},[288,58747,51480],{"class":298},[288,58749,58750,58752,58754,58756,58758,58760,58762,58764,58766],{"class":290,"line":1387},[288,58751,52317],{"class":298},[288,58753,51517],{"class":51473},[288,58755,15093],{"class":2135},[288,58757,344],{"class":298},[288,58759,51564],{"class":403},[288,58761,51544],{"class":2135},[288,58763,344],{"class":298},[288,58765,51571],{"class":403},[288,58767,51480],{"class":298},[288,58769,58770,58772,58774,58776,58778],{"class":290,"line":1393},[288,58771,52317],{"class":298},[288,58773,51580],{"class":51473},[288,58775,51583],{"class":298},[288,58777,51580],{"class":51473},[288,58779,51480],{"class":298},[288,58781,58782,58784,58786],{"class":290,"line":1484},[288,58783,51958],{"class":298},[288,58785,51507],{"class":51473},[288,58787,51480],{"class":298},[288,58789,58790],{"class":290,"line":1490},[288,58791,2572],{"emptyLinePlaceholder":217},[288,58793,58794,58796,58798],{"class":290,"line":1502},[288,58795,1207],{"class":298},[288,58797,51973],{"class":51473},[288,58799,51480],{"class":298},[288,58801,58802,58804,58806,58808,58810],{"class":290,"line":1784},[288,58803,52317],{"class":298},[288,58805,54060],{"class":51473},[288,58807,54066],{"class":298},[288,58809,54060],{"class":51473},[288,58811,51480],{"class":298},[288,58813,58814,58816,58818],{"class":290,"line":1789},[288,58815,52317],{"class":298},[288,58817,51986],{"class":51473},[288,58819,51480],{"class":298},[288,58821,58822,58824,58826,58828],{"class":290,"line":1795},[288,58823,11394],{"class":294},[288,58825,2412],{"class":347},[288,58827,13737],{"class":294},[288,58829,58601],{"class":347},[288,58831,58832,58834,58836,58838,58840,58842,58844,58846],{"class":290,"line":1800},[288,58833,11394],{"class":294},[288,58835,54564],{"class":347},[288,58837,13737],{"class":294},[288,58839,54569],{"class":298},[288,58841,54572],{"class":2135},[288,58843,299],{"class":298},[288,58845,58377],{"class":403},[288,58847,305],{"class":298},[288,58849,58850,58852,58854,58856,58858,58860,58862],{"class":290,"line":1814},[288,58851,58384],{"class":298},[288,58853,57986],{"class":2135},[288,58855,299],{"class":298},[288,58857,57991],{"class":403},[288,58859,12608],{"class":298},[288,58861,54622],{"class":294},[288,58863,54625],{"class":298},[288,58865,58866,58869,58871,58873,58875],{"class":290,"line":1819},[288,58867,58868],{"class":298},"      num ",[288,58870,344],{"class":294},[288,58872,58408],{"class":298},[288,58874,58033],{"class":2135},[288,58876,2148],{"class":298},[288,58878,58879,58881,58883],{"class":290,"line":1825},[288,58880,58417],{"class":298},[288,58882,58420],{"class":2135},[288,58884,312],{"class":298},[288,58886,58887],{"class":290,"line":1846},[288,58888,33634],{"class":298},[288,58890,58891,58893,58895],{"class":290,"line":1851},[288,58892,52590],{"class":298},[288,58894,51986],{"class":51473},[288,58896,51480],{"class":298},[288,58898,58899,58901,58903],{"class":290,"line":1865},[288,58900,51958],{"class":298},[288,58902,51973],{"class":51473},[288,58904,51480],{"class":298},[288,58906,58907],{"class":290,"line":1870},[288,58908,2572],{"emptyLinePlaceholder":217},[288,58910,58911,58913,58915],{"class":290,"line":1899},[288,58912,51958],{"class":298},[288,58914,50808],{"class":51473},[288,58916,51480],{"class":298},[19,58918,58919],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[260,58921,58923],{"id":58922},"_324-事件监听版本","3.2.4 事件监听版本",[19,58925,58926],{},[200,58927],{"alt":205,"src":58928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58930,58931],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58933,58934],{},"这种方式会覆盖前边的事件监听:",[280,58936,58938],{"className":50806,"code":58937,"language":50808,"meta":205,"style":205},"\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",[25,58939,58940,58950,58964,58968,58976,58990,59010,59022,59030,59034,59042,59054,59062,59080,59094,59105,59109,59121,59131,59135,59143,59151,59155],{"__ignoreMap":205},[288,58941,58942,58944,58946,58948],{"class":290,"line":291},[288,58943,51470],{"class":298},[288,58945,51474],{"class":51473},[288,58947,51477],{"class":2135},[288,58949,51480],{"class":298},[288,58951,58952,58954,58956,58958,58960,58962],{"class":290,"line":206},[288,58953,1207],{"class":298},[288,58955,50808],{"class":51473},[288,58957,51489],{"class":2135},[288,58959,344],{"class":298},[288,58961,51494],{"class":403},[288,58963,51480],{"class":298},[288,58965,58966],{"class":290,"line":1352},[288,58967,2572],{"emptyLinePlaceholder":217},[288,58969,58970,58972,58974],{"class":290,"line":1367},[288,58971,1207],{"class":298},[288,58973,51507],{"class":51473},[288,58975,51480],{"class":298},[288,58977,58978,58980,58982,58984,58986,58988],{"class":290,"line":1373},[288,58979,52317],{"class":298},[288,58981,51517],{"class":51473},[288,58983,51520],{"class":2135},[288,58985,344],{"class":298},[288,58987,51525],{"class":403},[288,58989,51480],{"class":298},[288,58991,58992,58994,58996,58998,59000,59002,59004,59006,59008],{"class":290,"line":1387},[288,58993,52317],{"class":298},[288,58995,51517],{"class":51473},[288,58997,15093],{"class":2135},[288,58999,344],{"class":298},[288,59001,51564],{"class":403},[288,59003,51544],{"class":2135},[288,59005,344],{"class":298},[288,59007,51571],{"class":403},[288,59009,51480],{"class":298},[288,59011,59012,59014,59016,59018,59020],{"class":290,"line":1393},[288,59013,52317],{"class":298},[288,59015,51580],{"class":51473},[288,59017,51583],{"class":298},[288,59019,51580],{"class":51473},[288,59021,51480],{"class":298},[288,59023,59024,59026,59028],{"class":290,"line":1484},[288,59025,51958],{"class":298},[288,59027,51507],{"class":51473},[288,59029,51480],{"class":298},[288,59031,59032],{"class":290,"line":1490},[288,59033,2572],{"emptyLinePlaceholder":217},[288,59035,59036,59038,59040],{"class":290,"line":1502},[288,59037,1207],{"class":298},[288,59039,51973],{"class":51473},[288,59041,51480],{"class":298},[288,59043,59044,59046,59048,59050,59052],{"class":290,"line":1784},[288,59045,52317],{"class":298},[288,59047,54060],{"class":51473},[288,59049,54066],{"class":298},[288,59051,54060],{"class":51473},[288,59053,51480],{"class":298},[288,59055,59056,59058,59060],{"class":290,"line":1789},[288,59057,52317],{"class":298},[288,59059,51986],{"class":51473},[288,59061,51480],{"class":298},[288,59063,59064,59066,59068,59070,59072,59074,59076,59078],{"class":290,"line":1795},[288,59065,11394],{"class":294},[288,59067,54564],{"class":347},[288,59069,13737],{"class":294},[288,59071,54569],{"class":298},[288,59073,54572],{"class":2135},[288,59075,299],{"class":298},[288,59077,58377],{"class":403},[288,59079,305],{"class":298},[288,59081,59082,59084,59087,59089,59092],{"class":290,"line":1800},[288,59083,58384],{"class":298},[288,59085,59086],{"class":2135},"onclick",[288,59088,13737],{"class":294},[288,59090,59091],{"class":294}," function",[288,59093,54625],{"class":298},[288,59095,59096,59099,59101,59103],{"class":290,"line":1814},[288,59097,59098],{"class":2135},"      alert",[288,59100,299],{"class":298},[288,59102,769],{"class":347},[288,59104,305],{"class":298},[288,59106,59107],{"class":290,"line":1819},[288,59108,2359],{"class":298},[288,59110,59111,59113,59115,59117,59119],{"class":290,"line":1825},[288,59112,58384],{"class":298},[288,59114,59086],{"class":2135},[288,59116,13737],{"class":294},[288,59118,59091],{"class":294},[288,59120,54625],{"class":298},[288,59122,59123,59125,59127,59129],{"class":290,"line":1846},[288,59124,59098],{"class":2135},[288,59126,299],{"class":298},[288,59128,1047],{"class":347},[288,59130,305],{"class":298},[288,59132,59133],{"class":290,"line":1851},[288,59134,2359],{"class":298},[288,59136,59137,59139,59141],{"class":290,"line":1865},[288,59138,52590],{"class":298},[288,59140,51986],{"class":51473},[288,59142,51480],{"class":298},[288,59144,59145,59147,59149],{"class":290,"line":1870},[288,59146,51958],{"class":298},[288,59148,51973],{"class":51473},[288,59150,51480],{"class":298},[288,59152,59153],{"class":290,"line":1899},[288,59154,2572],{"emptyLinePlaceholder":217},[288,59156,59157,59159,59161],{"class":290,"line":1904},[288,59158,51958],{"class":298},[288,59160,50808],{"class":51473},[288,59162,51480],{"class":298},[19,59164,59165],{},"只要点击就输出结果为22,前边11被覆盖了",[280,59167,59169],{"className":50806,"code":59168,"language":50808,"meta":205,"style":205},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[25,59170,59171,59176,59181,59185,59190,59195],{"__ignoreMap":205},[288,59172,59173],{"class":290,"line":291},[288,59174,59175],{"class":298},"  btn.addEventListener('click', function () {\n",[288,59177,59178],{"class":290,"line":206},[288,59179,59180],{"class":298},"      alert(11)\n",[288,59182,59183],{"class":290,"line":1352},[288,59184,33634],{"class":298},[288,59186,59187],{"class":290,"line":1367},[288,59188,59189],{"class":298},"    btn.addEventListener('click', function () {\n",[288,59191,59192],{"class":290,"line":1373},[288,59193,59194],{"class":298},"      alert(22)\n",[288,59196,59197],{"class":290,"line":1387},[288,59198,33634],{"class":298},[19,59200,59201],{},"点击第一次输出11,第二次点击为22",[260,59203,59205],{"id":59204},"_325-事件类型","3.2.5 事件类型",[19,59207,59208],{},[200,59209],{"alt":205,"src":59210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22171,59212,59214],{"id":59213},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59216,59217],{},"补充知识:",[19,59219,59220],{},"轮播图自动播放模块,可以使用",[19,59222,59223],{},"let timerId = setInterval(function () {",[19,59225,59226],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59228,59229],{},"用js方法模拟进行点击事件,click必须加()",[19,59231,59232],{},"next.click()",[19,59234,59235],{},"}, 1000)",[19,59237,59238],{},[200,59239],{"alt":205,"src":59240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[280,59242,59244],{"className":53240,"code":59243,"language":53242,"meta":205,"style":205},"\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",[25,59245,59246,59250,59260,59274,59278,59286,59301,59321,59341,59354,59362,59367,59372,59376,59380,59385,59390,59395,59400,59404,59408,59413,59418,59423,59427,59431,59436,59440,59445,59450,59454,59458,59463,59468,59473,59478,59483,59487,59491,59496,59501,59506,59511,59516,59520,59524,59529,59534,59539,59544,59549,59554,59559,59564,59569,59574,59578,59582,59587,59592,59596,59600,59605,59610,59614,59619,59624,59628,59632,59637,59641,59646,59651,59655,59660,59664,59668,59673,59678,59683,59688,59693,59698,59703,59707,59711,59715,59720,59725,59730,59735,59739,59747,59755,59759,59767,59782,59796,59817,59825,59839,59852,59867,59886,59898,59910,59922,59934,59946,59958,59970,59978,59993,60017,60041,60049,60057,60065,60073,60078,60083,60088,60093,60098,60103,60108,60113,60118,60123,60127,60132,60137,60142,60147,60152,60157,60162,60167,60172,60176,60181,60186,60191,60196,60201,60206,60211,60216,60221,60226,60231,60236,60240,60244,60249,60254,60259,60263,60268,60273,60278,60283,60288,60292,60297,60301,60305,60309,60313,60317,60321,60326,60331,60336,60341,60346,60351,60356,60361,60366,60370,60374,60379,60384,60389,60394,60399,60403,60408,60413,60418,60423,60428,60433,60437,60441,60446,60450,60455,60459,60464,60469,60474,60479,60484,60489,60493,60501,60509,60513],{"__ignoreMap":205},[288,59247,59248],{"class":290,"line":291},[288,59249,2572],{"emptyLinePlaceholder":217},[288,59251,59252,59254,59256,59258],{"class":290,"line":206},[288,59253,51470],{"class":298},[288,59255,51474],{"class":294},[288,59257,51477],{"class":347},[288,59259,51480],{"class":298},[288,59261,59262,59264,59266,59268,59270,59272],{"class":290,"line":1352},[288,59263,1207],{"class":298},[288,59265,50808],{"class":51473},[288,59267,51489],{"class":2135},[288,59269,344],{"class":298},[288,59271,51494],{"class":403},[288,59273,51480],{"class":298},[288,59275,59276],{"class":290,"line":1367},[288,59277,2572],{"emptyLinePlaceholder":217},[288,59279,59280,59282,59284],{"class":290,"line":1373},[288,59281,1207],{"class":298},[288,59283,51507],{"class":51473},[288,59285,51480],{"class":298},[288,59287,59288,59290,59292,59294,59296,59298],{"class":290,"line":1387},[288,59289,52317],{"class":298},[288,59291,51517],{"class":51473},[288,59293,51520],{"class":2135},[288,59295,344],{"class":298},[288,59297,51525],{"class":403},[288,59299,59300],{"class":298}," \u002F>\n",[288,59302,59303,59305,59307,59309,59311,59313,59315,59317,59319],{"class":290,"line":1393},[288,59304,52317],{"class":298},[288,59306,51517],{"class":51473},[288,59308,51536],{"class":2135},[288,59310,344],{"class":298},[288,59312,51541],{"class":403},[288,59314,51544],{"class":2135},[288,59316,344],{"class":298},[288,59318,51549],{"class":403},[288,59320,59300],{"class":298},[288,59322,59323,59325,59327,59329,59331,59333,59335,59337,59339],{"class":290,"line":1484},[288,59324,52317],{"class":298},[288,59326,51517],{"class":51473},[288,59328,15093],{"class":2135},[288,59330,344],{"class":298},[288,59332,51564],{"class":403},[288,59334,51544],{"class":2135},[288,59336,344],{"class":298},[288,59338,51571],{"class":403},[288,59340,59300],{"class":298},[288,59342,59343,59345,59347,59350,59352],{"class":290,"line":1490},[288,59344,52317],{"class":298},[288,59346,51580],{"class":51473},[288,59348,59349],{"class":298},">轮播图点击切换\u003C\u002F",[288,59351,51580],{"class":51473},[288,59353,51480],{"class":298},[288,59355,59356,59358,59360],{"class":290,"line":1502},[288,59357,52317],{"class":298},[288,59359,5299],{"class":51473},[288,59361,51480],{"class":298},[288,59363,59364],{"class":290,"line":1784},[288,59365,59366],{"class":298},"    * {\n",[288,59368,59369],{"class":290,"line":1789},[288,59370,59371],{"class":298},"      box-sizing: border-box;\n",[288,59373,59374],{"class":290,"line":1795},[288,59375,2359],{"class":298},[288,59377,59378],{"class":290,"line":1800},[288,59379,2572],{"emptyLinePlaceholder":217},[288,59381,59382],{"class":290,"line":1814},[288,59383,59384],{"class":298},"    .slider {\n",[288,59386,59387],{"class":290,"line":1819},[288,59388,59389],{"class":298},"      width: 560px;\n",[288,59391,59392],{"class":290,"line":1825},[288,59393,59394],{"class":298},"      height: 400px;\n",[288,59396,59397],{"class":290,"line":1846},[288,59398,59399],{"class":298},"      overflow: hidden;\n",[288,59401,59402],{"class":290,"line":1851},[288,59403,2359],{"class":298},[288,59405,59406],{"class":290,"line":1865},[288,59407,2572],{"emptyLinePlaceholder":217},[288,59409,59410],{"class":290,"line":1870},[288,59411,59412],{"class":298},"    .slider-wrapper {\n",[288,59414,59415],{"class":290,"line":1899},[288,59416,59417],{"class":298},"      width: 100%;\n",[288,59419,59420],{"class":290,"line":1904},[288,59421,59422],{"class":298},"      height: 320px;\n",[288,59424,59425],{"class":290,"line":1921},[288,59426,2359],{"class":298},[288,59428,59429],{"class":290,"line":1926},[288,59430,2572],{"emptyLinePlaceholder":217},[288,59432,59433],{"class":290,"line":1931},[288,59434,59435],{"class":298},"    .slider-wrapper img {\n",[288,59437,59438],{"class":290,"line":1936},[288,59439,59417],{"class":298},[288,59441,59442],{"class":290,"line":1950},[288,59443,59444],{"class":298},"      height: 100%;\n",[288,59446,59447],{"class":290,"line":1955},[288,59448,59449],{"class":298},"      display: block;\n",[288,59451,59452],{"class":290,"line":2749},[288,59453,2359],{"class":298},[288,59455,59456],{"class":290,"line":2763},[288,59457,2572],{"emptyLinePlaceholder":217},[288,59459,59460],{"class":290,"line":2771},[288,59461,59462],{"class":298},"    .slider-footer {\n",[288,59464,59465],{"class":290,"line":2776},[288,59466,59467],{"class":298},"      height: 80px;\n",[288,59469,59470],{"class":290,"line":2782},[288,59471,59472],{"class":298},"      background-color: rgb(100, 67, 68);\n",[288,59474,59475],{"class":290,"line":2788},[288,59476,59477],{"class":298},"      padding: 12px 12px 0 12px;\n",[288,59479,59480],{"class":290,"line":2793},[288,59481,59482],{"class":298},"      position: relative;\n",[288,59484,59485],{"class":290,"line":8121},[288,59486,2359],{"class":298},[288,59488,59489],{"class":290,"line":8145},[288,59490,2572],{"emptyLinePlaceholder":217},[288,59492,59493],{"class":290,"line":8150},[288,59494,59495],{"class":298},"    .slider-footer .toggle {\n",[288,59497,59498],{"class":290,"line":8156},[288,59499,59500],{"class":298},"      position: absolute;\n",[288,59502,59503],{"class":290,"line":8183},[288,59504,59505],{"class":298},"      right: 0;\n",[288,59507,59508],{"class":290,"line":8188},[288,59509,59510],{"class":298},"      top: 12px;\n",[288,59512,59513],{"class":290,"line":8194},[288,59514,59515],{"class":298},"      display: flex;\n",[288,59517,59518],{"class":290,"line":8206},[288,59519,2359],{"class":298},[288,59521,59522],{"class":290,"line":8218},[288,59523,2572],{"emptyLinePlaceholder":217},[288,59525,59526],{"class":290,"line":8230},[288,59527,59528],{"class":298},"    .slider-footer .toggle button {\n",[288,59530,59531],{"class":290,"line":9889},[288,59532,59533],{"class":298},"      margin-right: 12px;\n",[288,59535,59536],{"class":290,"line":9914},[288,59537,59538],{"class":298},"      width: 28px;\n",[288,59540,59541],{"class":290,"line":9937},[288,59542,59543],{"class":298},"      height: 28px;\n",[288,59545,59546],{"class":290,"line":9961},[288,59547,59548],{"class":298},"      appearance: none;\n",[288,59550,59551],{"class":290,"line":9966},[288,59552,59553],{"class":298},"      border: none;\n",[288,59555,59556],{"class":290,"line":9971},[288,59557,59558],{"class":298},"      background: rgba(255, 255, 255, 0.1);\n",[288,59560,59561],{"class":290,"line":9976},[288,59562,59563],{"class":298},"      color: #fff;\n",[288,59565,59566],{"class":290,"line":9985},[288,59567,59568],{"class":298},"      border-radius: 4px;\n",[288,59570,59571],{"class":290,"line":9990},[288,59572,59573],{"class":298},"      cursor: pointer;\n",[288,59575,59576],{"class":290,"line":9996},[288,59577,2359],{"class":298},[288,59579,59580],{"class":290,"line":10017},[288,59581,2572],{"emptyLinePlaceholder":217},[288,59583,59584],{"class":290,"line":10023},[288,59585,59586],{"class":298},"    .slider-footer .toggle button:hover {\n",[288,59588,59589],{"class":290,"line":10037},[288,59590,59591],{"class":298},"      background: rgba(255, 255, 255, 0.2);\n",[288,59593,59594],{"class":290,"line":10043},[288,59595,2359],{"class":298},[288,59597,59598],{"class":290,"line":10070},[288,59599,2572],{"emptyLinePlaceholder":217},[288,59601,59602],{"class":290,"line":10079},[288,59603,59604],{"class":298},"    .slider-footer p {\n",[288,59606,59607],{"class":290,"line":10085},[288,59608,59609],{"class":298},"      margin: 0;\n",[288,59611,59612],{"class":290,"line":10093},[288,59613,59563],{"class":298},[288,59615,59616],{"class":290,"line":10098},[288,59617,59618],{"class":298},"      font-size: 18px;\n",[288,59620,59621],{"class":290,"line":16777},[288,59622,59623],{"class":298},"      margin-bottom: 10px;\n",[288,59625,59626],{"class":290,"line":16783},[288,59627,2359],{"class":298},[288,59629,59630],{"class":290,"line":16806},[288,59631,2572],{"emptyLinePlaceholder":217},[288,59633,59634],{"class":290,"line":16812},[288,59635,59636],{"class":298},"    .slider-indicator {\n",[288,59638,59639],{"class":290,"line":16835},[288,59640,59609],{"class":298},[288,59642,59643],{"class":290,"line":16849},[288,59644,59645],{"class":298},"      padding: 0;\n",[288,59647,59648],{"class":290,"line":16869},[288,59649,59650],{"class":298},"      list-style: none;\n",[288,59652,59653],{"class":290,"line":16875},[288,59654,59515],{"class":298},[288,59656,59657],{"class":290,"line":16886},[288,59658,59659],{"class":298},"      align-items: center;\n",[288,59661,59662],{"class":290,"line":16909},[288,59663,2359],{"class":298},[288,59665,59666],{"class":290,"line":16931},[288,59667,2572],{"emptyLinePlaceholder":217},[288,59669,59670],{"class":290,"line":16936},[288,59671,59672],{"class":298},"    .slider-indicator li {\n",[288,59674,59675],{"class":290,"line":16942},[288,59676,59677],{"class":298},"      width: 8px;\n",[288,59679,59680],{"class":290,"line":16956},[288,59681,59682],{"class":298},"      height: 8px;\n",[288,59684,59685],{"class":290,"line":16969},[288,59686,59687],{"class":298},"      margin: 4px;\n",[288,59689,59690],{"class":290,"line":16974},[288,59691,59692],{"class":298},"      border-radius: 50%;\n",[288,59694,59695],{"class":290,"line":16988},[288,59696,59697],{"class":298},"      background: #fff;\n",[288,59699,59700],{"class":290,"line":16993},[288,59701,59702],{"class":298},"      opacity: 0.4;\n",[288,59704,59705],{"class":290,"line":16999},[288,59706,59573],{"class":298},[288,59708,59709],{"class":290,"line":17004},[288,59710,2359],{"class":298},[288,59712,59713],{"class":290,"line":17018},[288,59714,2572],{"emptyLinePlaceholder":217},[288,59716,59717],{"class":290,"line":17023},[288,59718,59719],{"class":298},"    .slider-indicator li.active {\n",[288,59721,59722],{"class":290,"line":17028},[288,59723,59724],{"class":298},"      width: 12px;\n",[288,59726,59727],{"class":290,"line":17042},[288,59728,59729],{"class":298},"      height: 12px;\n",[288,59731,59732],{"class":290,"line":17054},[288,59733,59734],{"class":298},"      opacity: 1;\n",[288,59736,59737],{"class":290,"line":17059},[288,59738,2359],{"class":298},[288,59740,59741,59743,59745],{"class":290,"line":17072},[288,59742,52590],{"class":298},[288,59744,5299],{"class":51473},[288,59746,51480],{"class":298},[288,59748,59749,59751,59753],{"class":290,"line":17077},[288,59750,51958],{"class":298},[288,59752,51507],{"class":51473},[288,59754,51480],{"class":298},[288,59756,59757],{"class":290,"line":17082},[288,59758,2572],{"emptyLinePlaceholder":217},[288,59760,59761,59763,59765],{"class":290,"line":17087},[288,59762,1207],{"class":298},[288,59764,51973],{"class":51473},[288,59766,51480],{"class":298},[288,59768,59769,59771,59773,59775,59777,59780],{"class":290,"line":17100},[288,59770,52317],{"class":298},[288,59772,51784],{"class":51473},[288,59774,53659],{"class":2135},[288,59776,344],{"class":298},[288,59778,59779],{"class":403},"\"slider\"",[288,59781,51480],{"class":298},[288,59783,59784,59786,59788,59790,59792,59794],{"class":290,"line":17105},[288,59785,51514],{"class":298},[288,59787,51784],{"class":51473},[288,59789,53659],{"class":2135},[288,59791,344],{"class":298},[288,59793,55400],{"class":403},[288,59795,51480],{"class":298},[288,59797,59798,59800,59802,59804,59806,59809,59811,59813,59815],{"class":290,"line":32806},[288,59799,55407],{"class":298},[288,59801,200],{"class":51473},[288,59803,55412],{"class":2135},[288,59805,344],{"class":298},[288,59807,59808],{"class":403},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[288,59810,55420],{"class":2135},[288,59812,344],{"class":298},[288,59814,7825],{"class":403},[288,59816,59300],{"class":298},[288,59818,59819,59821,59823],{"class":290,"line":32812},[288,59820,51949],{"class":298},[288,59822,51784],{"class":51473},[288,59824,51480],{"class":298},[288,59826,59827,59829,59831,59833,59835,59837],{"class":290,"line":32818},[288,59828,51514],{"class":298},[288,59830,51784],{"class":51473},[288,59832,53659],{"class":2135},[288,59834,344],{"class":298},[288,59836,55447],{"class":403},[288,59838,51480],{"class":298},[288,59840,59841,59843,59845,59848,59850],{"class":290,"line":32824},[288,59842,55407],{"class":298},[288,59844,19],{"class":51473},[288,59846,59847],{"class":298},">对人类来说会不会太超前了？\u003C\u002F",[288,59849,19],{"class":51473},[288,59851,51480],{"class":298},[288,59853,59854,59856,59858,59860,59862,59865],{"class":290,"line":32830},[288,59855,55407],{"class":298},[288,59857,1304],{"class":51473},[288,59859,53659],{"class":2135},[288,59861,344],{"class":298},[288,59863,59864],{"class":403},"\"slider-indicator\"",[288,59866,51480],{"class":298},[288,59868,59869,59871,59873,59875,59877,59880,59882,59884],{"class":290,"line":32841},[288,59870,55475],{"class":298},[288,59872,246],{"class":51473},[288,59874,53659],{"class":2135},[288,59876,344],{"class":298},[288,59878,59879],{"class":403},"\"active\"",[288,59881,55487],{"class":298},[288,59883,246],{"class":51473},[288,59885,51480],{"class":298},[288,59887,59888,59890,59892,59894,59896],{"class":290,"line":32847},[288,59889,55475],{"class":298},[288,59891,246],{"class":51473},[288,59893,55487],{"class":298},[288,59895,246],{"class":51473},[288,59897,51480],{"class":298},[288,59899,59900,59902,59904,59906,59908],{"class":290,"line":32867},[288,59901,55475],{"class":298},[288,59903,246],{"class":51473},[288,59905,55487],{"class":298},[288,59907,246],{"class":51473},[288,59909,51480],{"class":298},[288,59911,59912,59914,59916,59918,59920],{"class":290,"line":32873},[288,59913,55475],{"class":298},[288,59915,246],{"class":51473},[288,59917,55487],{"class":298},[288,59919,246],{"class":51473},[288,59921,51480],{"class":298},[288,59923,59924,59926,59928,59930,59932],{"class":290,"line":32884},[288,59925,55475],{"class":298},[288,59927,246],{"class":51473},[288,59929,55487],{"class":298},[288,59931,246],{"class":51473},[288,59933,51480],{"class":298},[288,59935,59936,59938,59940,59942,59944],{"class":290,"line":32890},[288,59937,55475],{"class":298},[288,59939,246],{"class":51473},[288,59941,55487],{"class":298},[288,59943,246],{"class":51473},[288,59945,51480],{"class":298},[288,59947,59948,59950,59952,59954,59956],{"class":290,"line":32896},[288,59949,55475],{"class":298},[288,59951,246],{"class":51473},[288,59953,55487],{"class":298},[288,59955,246],{"class":51473},[288,59957,51480],{"class":298},[288,59959,59960,59962,59964,59966,59968],{"class":290,"line":32902},[288,59961,55475],{"class":298},[288,59963,246],{"class":51473},[288,59965,55487],{"class":298},[288,59967,246],{"class":51473},[288,59969,51480],{"class":298},[288,59971,59972,59974,59976],{"class":290,"line":32908},[288,59973,55580],{"class":298},[288,59975,1304],{"class":51473},[288,59977,51480],{"class":298},[288,59979,59980,59982,59984,59986,59988,59991],{"class":290,"line":32914},[288,59981,55407],{"class":298},[288,59983,51784],{"class":51473},[288,59985,53659],{"class":2135},[288,59987,344],{"class":298},[288,59989,59990],{"class":403},"\"toggle\"",[288,59992,51480],{"class":298},[288,59994,59995,59997,59999,60001,60003,60006,60008,60011,60013,60015],{"class":290,"line":32920},[288,59996,55475],{"class":298},[288,59998,54060],{"class":51473},[288,60000,53659],{"class":2135},[288,60002,344],{"class":298},[288,60004,60005],{"class":403},"\"prev\"",[288,60007,1257],{"class":298},[288,60009,60010],{"class":347},"&lt;",[288,60012,51958],{"class":298},[288,60014,54060],{"class":51473},[288,60016,51480],{"class":298},[288,60018,60019,60021,60023,60025,60027,60030,60032,60035,60037,60039],{"class":290,"line":32926},[288,60020,55475],{"class":298},[288,60022,54060],{"class":51473},[288,60024,53659],{"class":2135},[288,60026,344],{"class":298},[288,60028,60029],{"class":403},"\"next\"",[288,60031,1257],{"class":298},[288,60033,60034],{"class":347},"&gt;",[288,60036,51958],{"class":298},[288,60038,54060],{"class":51473},[288,60040,51480],{"class":298},[288,60042,60043,60045,60047],{"class":290,"line":32946},[288,60044,55580],{"class":298},[288,60046,51784],{"class":51473},[288,60048,51480],{"class":298},[288,60050,60051,60053,60055],{"class":290,"line":32952},[288,60052,51949],{"class":298},[288,60054,51784],{"class":51473},[288,60056,51480],{"class":298},[288,60058,60059,60061,60063],{"class":290,"line":32968},[288,60060,52590],{"class":298},[288,60062,51784],{"class":51473},[288,60064,51480],{"class":298},[288,60066,60067,60069,60071],{"class":290,"line":32974},[288,60068,52317],{"class":298},[288,60070,51986],{"class":51473},[288,60072,51480],{"class":298},[288,60074,60075],{"class":290,"line":32988},[288,60076,60077],{"class":298},"    \u002F\u002F 1. 初始数据\n",[288,60079,60080],{"class":290,"line":32994},[288,60081,60082],{"class":298},"    const data = [\n",[288,60084,60085],{"class":290,"line":33009},[288,60086,60087],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[288,60089,60090],{"class":290,"line":33015},[288,60091,60092],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[288,60094,60095],{"class":290,"line":33024},[288,60096,60097],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[288,60099,60100],{"class":290,"line":33030},[288,60101,60102],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[288,60104,60105],{"class":290,"line":33039},[288,60106,60107],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[288,60109,60110],{"class":290,"line":33045},[288,60111,60112],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[288,60114,60115],{"class":290,"line":33051},[288,60116,60117],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[288,60119,60120],{"class":290,"line":33060},[288,60121,60122],{"class":298},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[288,60124,60125],{"class":290,"line":33066},[288,60126,53282],{"class":298},[288,60128,60129],{"class":290,"line":33077},[288,60130,60131],{"class":298},"    \u002F\u002F 获取元素\n",[288,60133,60134],{"class":290,"line":33083},[288,60135,60136],{"class":298},"    const img = document.querySelector('.slider-wrapper img')\n",[288,60138,60139],{"class":290,"line":33102},[288,60140,60141],{"class":298},"    const p = document.querySelector('.slider-footer p')\n",[288,60143,60144],{"class":290,"line":33108},[288,60145,60146],{"class":298},"    const footer = document.querySelector('.slider-footer')\n",[288,60148,60149],{"class":290,"line":33119},[288,60150,60151],{"class":298},"    \u002F\u002F 1. 右按钮业务\n",[288,60153,60154],{"class":290,"line":33125},[288,60155,60156],{"class":298},"    \u002F\u002F 1.1 获取右侧按钮 \n",[288,60158,60159],{"class":290,"line":33145},[288,60160,60161],{"class":298},"    const next = document.querySelector('.next')\n",[288,60163,60164],{"class":290,"line":33161},[288,60165,60166],{"class":298},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[288,60168,60169],{"class":290,"line":33167},[288,60170,60171],{"class":298},"    \u002F\u002F 1.2 注册点击事件\n",[288,60173,60174],{"class":290,"line":33181},[288,60175,2572],{"emptyLinePlaceholder":217},[288,60177,60178],{"class":290,"line":33187},[288,60179,60180],{"class":298},"    next.addEventListener('click', function () {\n",[288,60182,60183],{"class":290,"line":33193},[288,60184,60185],{"class":298},"      \u002F\u002F console.log(11)\n",[288,60187,60188],{"class":290,"line":33204},[288,60189,60190],{"class":298},"      i++\n",[288,60192,60193],{"class":290,"line":33210},[288,60194,60195],{"class":298},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[288,60197,60198],{"class":290,"line":33216},[288,60199,60200],{"class":298},"      \u002F\u002F if (i >= 8) {\n",[288,60202,60203],{"class":290,"line":33226},[288,60204,60205],{"class":298},"      \u002F\u002F   i = 0\n",[288,60207,60208],{"class":290,"line":33232},[288,60209,60210],{"class":298},"      \u002F\u002F }\n",[288,60212,60213],{"class":290,"line":33243},[288,60214,60215],{"class":298},"      i = i >= data.length ? 0 : i\n",[288,60217,60218],{"class":290,"line":33249},[288,60219,60220],{"class":298},"      \u002F\u002F 1.3 得到对应的对象\n",[288,60222,60223],{"class":290,"line":33259},[288,60224,60225],{"class":298},"      \u002F\u002F console.log(data[i])\n",[288,60227,60228],{"class":290,"line":33264},[288,60229,60230],{"class":298},"      \u002F\u002F 调用函数\n",[288,60232,60233],{"class":290,"line":33270},[288,60234,60235],{"class":298},"      toggle()\n",[288,60237,60238],{"class":290,"line":33319},[288,60239,33634],{"class":298},[288,60241,60242],{"class":290,"line":33366},[288,60243,2572],{"emptyLinePlaceholder":217},[288,60245,60246],{"class":290,"line":33371},[288,60247,60248],{"class":298},"    \u002F\u002F 2. 左侧按钮业务\n",[288,60250,60251],{"class":290,"line":33377},[288,60252,60253],{"class":298},"    \u002F\u002F 2.1 获取左侧按钮 \n",[288,60255,60256],{"class":290,"line":33396},[288,60257,60258],{"class":298},"    const prev = document.querySelector('.prev')\n",[288,60260,60261],{"class":290,"line":33402},[288,60262,60171],{"class":298},[288,60264,60265],{"class":290,"line":33422},[288,60266,60267],{"class":298},"    prev.addEventListener('click', function () {\n",[288,60269,60270],{"class":290,"line":33428},[288,60271,60272],{"class":298},"      i--\n",[288,60274,60275],{"class":290,"line":33434},[288,60276,60277],{"class":298},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[288,60279,60280],{"class":290,"line":33444},[288,60281,60282],{"class":298},"      \u002F\u002F if (i \u003C 0) {\n",[288,60284,60285],{"class":290,"line":33449},[288,60286,60287],{"class":298},"      \u002F\u002F   i = 7\n",[288,60289,60290],{"class":290,"line":33455},[288,60291,60210],{"class":298},[288,60293,60294],{"class":290,"line":33471},[288,60295,60296],{"class":298},"      i = i \u003C 0 ? data.length - 1 : i\n",[288,60298,60299],{"class":290,"line":33516},[288,60300,60220],{"class":298},[288,60302,60303],{"class":290,"line":33522},[288,60304,60225],{"class":298},[288,60306,60307],{"class":290,"line":33528},[288,60308,60230],{"class":298},[288,60310,60311],{"class":290,"line":33534},[288,60312,60235],{"class":298},[288,60314,60315],{"class":290,"line":33545},[288,60316,33634],{"class":298},[288,60318,60319],{"class":290,"line":33551},[288,60320,2572],{"emptyLinePlaceholder":217},[288,60322,60323],{"class":290,"line":33557},[288,60324,60325],{"class":298},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[288,60327,60328],{"class":290,"line":33563},[288,60329,60330],{"class":298},"    function toggle() {\n",[288,60332,60333],{"class":290,"line":33581},[288,60334,60335],{"class":298},"      \u002F\u002F 1.4 渲染对应的数据\n",[288,60337,60338],{"class":290,"line":33595},[288,60339,60340],{"class":298},"      img.src = data[i].url\n",[288,60342,60343],{"class":290,"line":33604},[288,60344,60345],{"class":298},"      p.innerHTML = data[i].title\n",[288,60347,60348],{"class":290,"line":33613},[288,60349,60350],{"class":298},"      footer.style.backgroundColor = data[i].color\n",[288,60352,60353],{"class":290,"line":33622},[288,60354,60355],{"class":298},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[288,60357,60358],{"class":290,"line":33631},[288,60359,60360],{"class":298},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[288,60362,60363],{"class":290,"line":33637},[288,60364,60365],{"class":298},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[288,60367,60368],{"class":290,"line":33643},[288,60369,2359],{"class":298},[288,60371,60372],{"class":290,"line":33651},[288,60373,2572],{"emptyLinePlaceholder":217},[288,60375,60376],{"class":290,"line":33656},[288,60377,60378],{"class":298},"    \u002F\u002F 3. 自动播放模块\n",[288,60380,60381],{"class":290,"line":33662},[288,60382,60383],{"class":298},"    let timerId = setInterval(function () {\n",[288,60385,60386],{"class":290,"line":33673},[288,60387,60388],{"class":298},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[288,60390,60391],{"class":290,"line":33679},[288,60392,60393],{"class":298},"      next.click()\n",[288,60395,60396],{"class":290,"line":33699},[288,60397,60398],{"class":298},"    }, 1000)\n",[288,60400,60401],{"class":290,"line":33705},[288,60402,2572],{"emptyLinePlaceholder":217},[288,60404,60405],{"class":290,"line":33711},[288,60406,60407],{"class":298},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[288,60409,60410],{"class":290,"line":33717},[288,60411,60412],{"class":298},"    const slider = document.querySelector('.slider')\n",[288,60414,60415],{"class":290,"line":33734},[288,60416,60417],{"class":298},"    \u002F\u002F 注册事件\n",[288,60419,60420],{"class":290,"line":33740},[288,60421,60422],{"class":298},"    slider.addEventListener('mouseenter', function () {\n",[288,60424,60425],{"class":290,"line":33746},[288,60426,60427],{"class":298},"      \u002F\u002F 停止定时器\n",[288,60429,60430],{"class":290,"line":33752},[288,60431,60432],{"class":298},"      clearInterval(timerId)\n",[288,60434,60435],{"class":290,"line":33758},[288,60436,33634],{"class":298},[288,60438,60439],{"class":290,"line":33764},[288,60440,2572],{"emptyLinePlaceholder":217},[288,60442,60443],{"class":290,"line":33791},[288,60444,60445],{"class":298},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[288,60447,60448],{"class":290,"line":33815},[288,60449,60417],{"class":298},[288,60451,60452],{"class":290,"line":33821},[288,60453,60454],{"class":298},"    slider.addEventListener('mouseleave', function () {\n",[288,60456,60457],{"class":290,"line":33827},[288,60458,60427],{"class":298},[288,60460,60461],{"class":290,"line":33833},[288,60462,60463],{"class":298},"      if (timerId) clearInterval(timerId)\n",[288,60465,60466],{"class":290,"line":33844},[288,60467,60468],{"class":298},"      \u002F\u002F 开启定时器\n",[288,60470,60471],{"class":290,"line":33855},[288,60472,60473],{"class":298},"      timerId = setInterval(function () {\n",[288,60475,60476],{"class":290,"line":33861},[288,60477,60478],{"class":298},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[288,60480,60481],{"class":290,"line":33878},[288,60482,60483],{"class":298},"        next.click()\n",[288,60485,60486],{"class":290,"line":33901},[288,60487,60488],{"class":298},"      }, 1000)\n",[288,60490,60491],{"class":290,"line":33924},[288,60492,33634],{"class":298},[288,60494,60495,60497,60499],{"class":290,"line":33930},[288,60496,52590],{"class":298},[288,60498,51986],{"class":51473},[288,60500,51480],{"class":298},[288,60502,60503,60505,60507],{"class":290,"line":33935},[288,60504,51958],{"class":298},[288,60506,51973],{"class":51473},[288,60508,51480],{"class":298},[288,60510,60511],{"class":290,"line":33944},[288,60512,2572],{"emptyLinePlaceholder":217},[288,60514,60515,60517,60519],{"class":290,"line":33954},[288,60516,51958],{"class":298},[288,60518,50808],{"class":51473},[288,60520,51480],{"class":298},[22171,60522,60524],{"id":60523},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60526,60527],{},"小米搜索框案例：",[280,60529,60531],{"className":50806,"code":60530,"language":50808,"meta":205,"style":205},"\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",[25,60532,60533,60543,60557,60561,60569,60583,60603,60623,60635,60643,60649,60659,60669,60681,60685,60689,60696,60700,60711,60715,60719,60726,60737,60750,60764,60768,60772,60781,60793,60805,60819,60832,60845,60863,60874,60878,60882,60891,60908,60912,60916,60923,60933,60943,60954,60967,60979,60995,61006,61018,61022,61026,61034,61045,61062,61074,61086,61097,61101,61105,61116,61127,61131,61139,61143,61151,61155,61163,61178,61201,61216,61247,61274,61301,61328,61355,61382,61409,61418,61426,61434,61439,61459,61479,61484,61489,61507,61512,61522,61527,61541,61546,61551,61568,61577,61589,61593,61601,61609,61613],{"__ignoreMap":205},[288,60534,60535,60537,60539,60541],{"class":290,"line":291},[288,60536,51470],{"class":298},[288,60538,51474],{"class":51473},[288,60540,51477],{"class":2135},[288,60542,51480],{"class":298},[288,60544,60545,60547,60549,60551,60553,60555],{"class":290,"line":206},[288,60546,1207],{"class":298},[288,60548,50808],{"class":51473},[288,60550,51489],{"class":2135},[288,60552,344],{"class":298},[288,60554,51494],{"class":403},[288,60556,51480],{"class":298},[288,60558,60559],{"class":290,"line":1352},[288,60560,2572],{"emptyLinePlaceholder":217},[288,60562,60563,60565,60567],{"class":290,"line":1367},[288,60564,1207],{"class":298},[288,60566,51507],{"class":51473},[288,60568,51480],{"class":298},[288,60570,60571,60573,60575,60577,60579,60581],{"class":290,"line":1373},[288,60572,51514],{"class":298},[288,60574,51517],{"class":51473},[288,60576,51520],{"class":2135},[288,60578,344],{"class":298},[288,60580,51525],{"class":403},[288,60582,51480],{"class":298},[288,60584,60585,60587,60589,60591,60593,60595,60597,60599,60601],{"class":290,"line":1387},[288,60586,51514],{"class":298},[288,60588,51517],{"class":51473},[288,60590,51536],{"class":2135},[288,60592,344],{"class":298},[288,60594,51541],{"class":403},[288,60596,51544],{"class":2135},[288,60598,344],{"class":298},[288,60600,51549],{"class":403},[288,60602,51480],{"class":298},[288,60604,60605,60607,60609,60611,60613,60615,60617,60619,60621],{"class":290,"line":1393},[288,60606,51514],{"class":298},[288,60608,51517],{"class":51473},[288,60610,15093],{"class":2135},[288,60612,344],{"class":298},[288,60614,51564],{"class":403},[288,60616,51544],{"class":2135},[288,60618,344],{"class":298},[288,60620,51571],{"class":403},[288,60622,51480],{"class":298},[288,60624,60625,60627,60629,60631,60633],{"class":290,"line":1484},[288,60626,51514],{"class":298},[288,60628,51580],{"class":51473},[288,60630,51583],{"class":298},[288,60632,51580],{"class":51473},[288,60634,51480],{"class":298},[288,60636,60637,60639,60641],{"class":290,"line":1490},[288,60638,51514],{"class":298},[288,60640,5299],{"class":51473},[288,60642,51480],{"class":298},[288,60644,60645,60647],{"class":290,"line":1502},[288,60646,51600],{"class":51473},[288,60648,15745],{"class":298},[288,60650,60651,60653,60655,60657],{"class":290,"line":1784},[288,60652,51607],{"class":347},[288,60654,51610],{"class":298},[288,60656,490],{"class":347},[288,60658,1463],{"class":298},[288,60660,60661,60663,60665,60667],{"class":290,"line":1789},[288,60662,51619],{"class":347},[288,60664,51610],{"class":298},[288,60666,490],{"class":347},[288,60668,1463],{"class":298},[288,60670,60671,60674,60676,60679],{"class":290,"line":1795},[288,60672,60673],{"class":347},"            box-sizing",[288,60675,51610],{"class":298},[288,60677,60678],{"class":347},"border-box",[288,60680,1463],{"class":298},[288,60682,60683],{"class":290,"line":1800},[288,60684,2701],{"class":298},[288,60686,60687],{"class":290,"line":1814},[288,60688,2572],{"emptyLinePlaceholder":217},[288,60690,60691,60694],{"class":290,"line":1819},[288,60692,60693],{"class":51473},"        ul",[288,60695,15745],{"class":298},[288,60697,60698],{"class":290,"line":1825},[288,60699,2572],{"emptyLinePlaceholder":217},[288,60701,60702,60705,60707,60709],{"class":290,"line":1846},[288,60703,60704],{"class":347},"            list-style",[288,60706,51610],{"class":298},[288,60708,54910],{"class":347},[288,60710,1463],{"class":298},[288,60712,60713],{"class":290,"line":1851},[288,60714,2701],{"class":298},[288,60716,60717],{"class":290,"line":1865},[288,60718,2572],{"emptyLinePlaceholder":217},[288,60720,60721,60724],{"class":290,"line":1870},[288,60722,60723],{"class":2135},"        .mi",[288,60725,15745],{"class":298},[288,60727,60728,60731,60733,60735],{"class":290,"line":1899},[288,60729,60730],{"class":347},"            position",[288,60732,51610],{"class":298},[288,60734,54937],{"class":347},[288,60736,1463],{"class":298},[288,60738,60739,60741,60743,60746,60748],{"class":290,"line":1904},[288,60740,51657],{"class":347},[288,60742,51610],{"class":298},[288,60744,60745],{"class":347},"223",[288,60747,51665],{"class":294},[288,60749,1463],{"class":298},[288,60751,60752,60754,60756,60758,60760,60762],{"class":290,"line":1921},[288,60753,51607],{"class":347},[288,60755,51610],{"class":298},[288,60757,608],{"class":347},[288,60759,51665],{"class":294},[288,60761,51729],{"class":347},[288,60763,1463],{"class":298},[288,60765,60766],{"class":290,"line":1926},[288,60767,2701],{"class":298},[288,60769,60770],{"class":290,"line":1931},[288,60771,2572],{"emptyLinePlaceholder":217},[288,60773,60774,60776,60779],{"class":290,"line":1936},[288,60775,60723],{"class":2135},[288,60777,60778],{"class":51473}," input",[288,60780,15745],{"class":298},[288,60782,60783,60785,60787,60789,60791],{"class":290,"line":1950},[288,60784,51657],{"class":347},[288,60786,51610],{"class":298},[288,60788,60745],{"class":347},[288,60790,51665],{"class":294},[288,60792,1463],{"class":298},[288,60794,60795,60797,60799,60801,60803],{"class":290,"line":1955},[288,60796,51672],{"class":347},[288,60798,51610],{"class":298},[288,60800,904],{"class":347},[288,60802,51665],{"class":294},[288,60804,1463],{"class":298},[288,60806,60807,60809,60811,60813,60815,60817],{"class":290,"line":2749},[288,60808,51619],{"class":347},[288,60810,51610],{"class":298},[288,60812,490],{"class":347},[288,60814,2210],{"class":347},[288,60816,51665],{"class":294},[288,60818,1463],{"class":298},[288,60820,60821,60824,60826,60828,60830],{"class":290,"line":2763},[288,60822,60823],{"class":347},"            font-size",[288,60825,51610],{"class":298},[288,60827,846],{"class":347},[288,60829,51665],{"class":294},[288,60831,1463],{"class":298},[288,60833,60834,60837,60839,60841,60843],{"class":290,"line":2771},[288,60835,60836],{"class":347},"            line-height",[288,60838,51610],{"class":298},[288,60840,904],{"class":347},[288,60842,51665],{"class":294},[288,60844,1463],{"class":298},[288,60846,60847,60850,60852,60854,60856,60858,60861],{"class":290,"line":2776},[288,60848,60849],{"class":347},"            border",[288,60851,51610],{"class":298},[288,60853,516],{"class":347},[288,60855,51665],{"class":294},[288,60857,51694],{"class":347},[288,60859,60860],{"class":347}," #e0e0e0",[288,60862,1463],{"class":298},[288,60864,60865,60868,60870,60872],{"class":290,"line":2782},[288,60866,60867],{"class":347},"            outline",[288,60869,51610],{"class":298},[288,60871,54910],{"class":347},[288,60873,1463],{"class":298},[288,60875,60876],{"class":290,"line":2788},[288,60877,2701],{"class":298},[288,60879,60880],{"class":290,"line":2793},[288,60881,2572],{"emptyLinePlaceholder":217},[288,60883,60884,60886,60889],{"class":290,"line":8121},[288,60885,60723],{"class":2135},[288,60887,60888],{"class":2135}," .search",[288,60890,15745],{"class":298},[288,60892,60893,60895,60897,60899,60901,60903,60906],{"class":290,"line":8145},[288,60894,60849],{"class":347},[288,60896,51610],{"class":298},[288,60898,516],{"class":347},[288,60900,51665],{"class":294},[288,60902,51694],{"class":347},[288,60904,60905],{"class":347}," #ff6700",[288,60907,1463],{"class":298},[288,60909,60910],{"class":290,"line":8150},[288,60911,2701],{"class":298},[288,60913,60914],{"class":290,"line":8156},[288,60915,2572],{"emptyLinePlaceholder":217},[288,60917,60918,60921],{"class":290,"line":8183},[288,60919,60920],{"class":2135},"        .result-list",[288,60922,15745],{"class":298},[288,60924,60925,60927,60929,60931],{"class":290,"line":8188},[288,60926,51645],{"class":347},[288,60928,51610],{"class":298},[288,60930,54910],{"class":347},[288,60932,1463],{"class":298},[288,60934,60935,60937,60939,60941],{"class":290,"line":8194},[288,60936,60730],{"class":347},[288,60938,51610],{"class":298},[288,60940,55004],{"class":347},[288,60942,1463],{"class":298},[288,60944,60945,60948,60950,60952],{"class":290,"line":8206},[288,60946,60947],{"class":347},"            left",[288,60949,51610],{"class":298},[288,60951,490],{"class":347},[288,60953,1463],{"class":298},[288,60955,60956,60959,60961,60963,60965],{"class":290,"line":8218},[288,60957,60958],{"class":347},"            top",[288,60960,51610],{"class":298},[288,60962,904],{"class":347},[288,60964,51665],{"class":294},[288,60966,1463],{"class":298},[288,60968,60969,60971,60973,60975,60977],{"class":290,"line":8230},[288,60970,51657],{"class":347},[288,60972,51610],{"class":298},[288,60974,60745],{"class":347},[288,60976,51665],{"class":294},[288,60978,1463],{"class":298},[288,60980,60981,60983,60985,60987,60989,60991,60993],{"class":290,"line":9889},[288,60982,60849],{"class":347},[288,60984,51610],{"class":298},[288,60986,516],{"class":347},[288,60988,51665],{"class":294},[288,60990,51694],{"class":347},[288,60992,60905],{"class":347},[288,60994,1463],{"class":298},[288,60996,60997,61000,61002,61004],{"class":290,"line":9914},[288,60998,60999],{"class":347},"            border-top",[288,61001,51610],{"class":298},[288,61003,490],{"class":347},[288,61005,1463],{"class":298},[288,61007,61008,61011,61013,61016],{"class":290,"line":9937},[288,61009,61010],{"class":347},"            background",[288,61012,51610],{"class":298},[288,61014,61015],{"class":347},"#fff",[288,61017,1463],{"class":298},[288,61019,61020],{"class":290,"line":9961},[288,61021,2701],{"class":298},[288,61023,61024],{"class":290,"line":9966},[288,61025,2572],{"emptyLinePlaceholder":217},[288,61027,61028,61030,61032],{"class":290,"line":9971},[288,61029,60920],{"class":2135},[288,61031,1571],{"class":51473},[288,61033,15745],{"class":298},[288,61035,61036,61038,61040,61043],{"class":290,"line":9976},[288,61037,51645],{"class":347},[288,61039,51610],{"class":298},[288,61041,61042],{"class":347},"block",[288,61044,1463],{"class":298},[288,61046,61047,61049,61051,61053,61055,61058,61060],{"class":290,"line":9985},[288,61048,51619],{"class":347},[288,61050,51610],{"class":298},[288,61052,641],{"class":347},[288,61054,51665],{"class":294},[288,61056,61057],{"class":347}," 15",[288,61059,51665],{"class":294},[288,61061,1463],{"class":298},[288,61063,61064,61066,61068,61070,61072],{"class":290,"line":9990},[288,61065,60823],{"class":347},[288,61067,51610],{"class":298},[288,61069,795],{"class":347},[288,61071,51665],{"class":294},[288,61073,1463],{"class":298},[288,61075,61076,61079,61081,61084],{"class":290,"line":9996},[288,61077,61078],{"class":347},"            color",[288,61080,51610],{"class":298},[288,61082,61083],{"class":347},"#424242",[288,61085,1463],{"class":298},[288,61087,61088,61091,61093,61095],{"class":290,"line":10017},[288,61089,61090],{"class":347},"            text-decoration",[288,61092,51610],{"class":298},[288,61094,54910],{"class":347},[288,61096,1463],{"class":298},[288,61098,61099],{"class":290,"line":10023},[288,61100,2701],{"class":298},[288,61102,61103],{"class":290,"line":10037},[288,61104,2572],{"emptyLinePlaceholder":217},[288,61106,61107,61109,61111,61114],{"class":290,"line":10043},[288,61108,60920],{"class":2135},[288,61110,1571],{"class":51473},[288,61112,61113],{"class":2135},":hover",[288,61115,15745],{"class":298},[288,61117,61118,61120,61122,61125],{"class":290,"line":10070},[288,61119,51813],{"class":347},[288,61121,51610],{"class":298},[288,61123,61124],{"class":347},"#eee",[288,61126,1463],{"class":298},[288,61128,61129],{"class":290,"line":10079},[288,61130,2701],{"class":298},[288,61132,61133,61135,61137],{"class":290,"line":10085},[288,61134,51949],{"class":298},[288,61136,5299],{"class":51473},[288,61138,51480],{"class":298},[288,61140,61141],{"class":290,"line":10093},[288,61142,2572],{"emptyLinePlaceholder":217},[288,61144,61145,61147,61149],{"class":290,"line":10098},[288,61146,51958],{"class":298},[288,61148,51507],{"class":51473},[288,61150,51480],{"class":298},[288,61152,61153],{"class":290,"line":16777},[288,61154,2572],{"emptyLinePlaceholder":217},[288,61156,61157,61159,61161],{"class":290,"line":16783},[288,61158,1207],{"class":298},[288,61160,51973],{"class":51473},[288,61162,51480],{"class":298},[288,61164,61165,61167,61169,61171,61173,61176],{"class":290,"line":16806},[288,61166,51514],{"class":298},[288,61168,51784],{"class":51473},[288,61170,53659],{"class":2135},[288,61172,344],{"class":298},[288,61174,61175],{"class":403},"\"mi\"",[288,61177,51480],{"class":298},[288,61179,61180,61182,61184,61186,61188,61191,61194,61196,61199],{"class":290,"line":16812},[288,61181,55475],{"class":298},[288,61183,53994],{"class":51473},[288,61185,53997],{"class":2135},[288,61187,344],{"class":298},[288,61189,61190],{"class":403},"\"search\"",[288,61192,61193],{"class":2135}," placeholder",[288,61195,344],{"class":298},[288,61197,61198],{"class":403},"\"小米笔记本\"",[288,61200,51480],{"class":298},[288,61202,61203,61205,61207,61209,61211,61214],{"class":290,"line":16835},[288,61204,55475],{"class":298},[288,61206,1304],{"class":51473},[288,61208,53659],{"class":2135},[288,61210,344],{"class":298},[288,61212,61213],{"class":403},"\"result-list\"",[288,61215,51480],{"class":298},[288,61217,61218,61221,61223,61226,61228,61231,61233,61236,61239,61241,61243,61245],{"class":290,"line":16849},[288,61219,61220],{"class":298},"            \u003C",[288,61222,246],{"class":51473},[288,61224,61225],{"class":298},">\u003C",[288,61227,104],{"class":51473},[288,61229,61230],{"class":2135}," href",[288,61232,344],{"class":298},[288,61234,61235],{"class":403},"\"#\"",[288,61237,61238],{"class":298},">全部商品\u003C\u002F",[288,61240,104],{"class":51473},[288,61242,55487],{"class":298},[288,61244,246],{"class":51473},[288,61246,51480],{"class":298},[288,61248,61249,61251,61253,61255,61257,61259,61261,61263,61266,61268,61270,61272],{"class":290,"line":16869},[288,61250,61220],{"class":298},[288,61252,246],{"class":51473},[288,61254,61225],{"class":298},[288,61256,104],{"class":51473},[288,61258,61230],{"class":2135},[288,61260,344],{"class":298},[288,61262,61235],{"class":403},[288,61264,61265],{"class":298},">小米11\u003C\u002F",[288,61267,104],{"class":51473},[288,61269,55487],{"class":298},[288,61271,246],{"class":51473},[288,61273,51480],{"class":298},[288,61275,61276,61278,61280,61282,61284,61286,61288,61290,61293,61295,61297,61299],{"class":290,"line":16875},[288,61277,61220],{"class":298},[288,61279,246],{"class":51473},[288,61281,61225],{"class":298},[288,61283,104],{"class":51473},[288,61285,61230],{"class":2135},[288,61287,344],{"class":298},[288,61289,61235],{"class":403},[288,61291,61292],{"class":298},">小米10S\u003C\u002F",[288,61294,104],{"class":51473},[288,61296,55487],{"class":298},[288,61298,246],{"class":51473},[288,61300,51480],{"class":298},[288,61302,61303,61305,61307,61309,61311,61313,61315,61317,61320,61322,61324,61326],{"class":290,"line":16886},[288,61304,61220],{"class":298},[288,61306,246],{"class":51473},[288,61308,61225],{"class":298},[288,61310,104],{"class":51473},[288,61312,61230],{"class":2135},[288,61314,344],{"class":298},[288,61316,61235],{"class":403},[288,61318,61319],{"class":298},">小米笔记本\u003C\u002F",[288,61321,104],{"class":51473},[288,61323,55487],{"class":298},[288,61325,246],{"class":51473},[288,61327,51480],{"class":298},[288,61329,61330,61332,61334,61336,61338,61340,61342,61344,61347,61349,61351,61353],{"class":290,"line":16909},[288,61331,61220],{"class":298},[288,61333,246],{"class":51473},[288,61335,61225],{"class":298},[288,61337,104],{"class":51473},[288,61339,61230],{"class":2135},[288,61341,344],{"class":298},[288,61343,61235],{"class":403},[288,61345,61346],{"class":298},">小米手机\u003C\u002F",[288,61348,104],{"class":51473},[288,61350,55487],{"class":298},[288,61352,246],{"class":51473},[288,61354,51480],{"class":298},[288,61356,61357,61359,61361,61363,61365,61367,61369,61371,61374,61376,61378,61380],{"class":290,"line":16931},[288,61358,61220],{"class":298},[288,61360,246],{"class":51473},[288,61362,61225],{"class":298},[288,61364,104],{"class":51473},[288,61366,61230],{"class":2135},[288,61368,344],{"class":298},[288,61370,61235],{"class":403},[288,61372,61373],{"class":298},">黑鲨4\u003C\u002F",[288,61375,104],{"class":51473},[288,61377,55487],{"class":298},[288,61379,246],{"class":51473},[288,61381,51480],{"class":298},[288,61383,61384,61386,61388,61390,61392,61394,61396,61398,61401,61403,61405,61407],{"class":290,"line":16936},[288,61385,61220],{"class":298},[288,61387,246],{"class":51473},[288,61389,61225],{"class":298},[288,61391,104],{"class":51473},[288,61393,61230],{"class":2135},[288,61395,344],{"class":298},[288,61397,61235],{"class":403},[288,61399,61400],{"class":298},">空调\u003C\u002F",[288,61402,104],{"class":51473},[288,61404,55487],{"class":298},[288,61406,246],{"class":51473},[288,61408,51480],{"class":298},[288,61410,61411,61414,61416],{"class":290,"line":16942},[288,61412,61413],{"class":298},"        \u003C\u002F",[288,61415,1304],{"class":51473},[288,61417,51480],{"class":298},[288,61419,61420,61422,61424],{"class":290,"line":16956},[288,61421,51949],{"class":298},[288,61423,51784],{"class":51473},[288,61425,51480],{"class":298},[288,61427,61428,61430,61432],{"class":290,"line":16969},[288,61429,51514],{"class":298},[288,61431,51986],{"class":51473},[288,61433,51480],{"class":298},[288,61435,61436],{"class":290,"line":16974},[288,61437,61438],{"class":357},"        \u002F\u002F 1. 获取元素\n",[288,61440,61441,61444,61446,61448,61450,61452,61454,61457],{"class":290,"line":16988},[288,61442,61443],{"class":294},"        const",[288,61445,60778],{"class":347},[288,61447,13737],{"class":294},[288,61449,54569],{"class":298},[288,61451,54572],{"class":2135},[288,61453,299],{"class":298},[288,61455,61456],{"class":403},"'[type=search]'",[288,61458,305],{"class":298},[288,61460,61461,61463,61466,61468,61470,61472,61474,61477],{"class":290,"line":16993},[288,61462,61443],{"class":294},[288,61464,61465],{"class":347}," ul",[288,61467,13737],{"class":294},[288,61469,54569],{"class":298},[288,61471,54572],{"class":2135},[288,61473,299],{"class":298},[288,61475,61476],{"class":403},"'.result-list'",[288,61478,305],{"class":298},[288,61480,61481],{"class":290,"line":16999},[288,61482,61483],{"class":357},"        \u002F\u002F console.log(input)\n",[288,61485,61486],{"class":290,"line":17004},[288,61487,61488],{"class":357},"        \u002F\u002F 2. 监听事件 获得焦点\n",[288,61490,61491,61494,61496,61498,61501,61503,61505],{"class":290,"line":17018},[288,61492,61493],{"class":298},"        input.",[288,61495,57986],{"class":2135},[288,61497,299],{"class":298},[288,61499,61500],{"class":403},"'focus'",[288,61502,12608],{"class":298},[288,61504,54622],{"class":294},[288,61506,54625],{"class":298},[288,61508,61509],{"class":290,"line":17023},[288,61510,61511],{"class":357},"            \u002F\u002F ul显示\n",[288,61513,61514,61517,61519],{"class":290,"line":17028},[288,61515,61516],{"class":298},"            ul.style.display ",[288,61518,344],{"class":294},[288,61520,61521],{"class":403}," 'block'\n",[288,61523,61524],{"class":290,"line":17042},[288,61525,61526],{"class":357},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[288,61528,61529,61532,61534,61536,61539],{"class":290,"line":17054},[288,61530,61531],{"class":298},"            input.classList.",[288,61533,5507],{"class":2135},[288,61535,299],{"class":298},[288,61537,61538],{"class":403},"'search'",[288,61540,305],{"class":298},[288,61542,61543],{"class":290,"line":17059},[288,61544,61545],{"class":298},"        })\n",[288,61547,61548],{"class":290,"line":17072},[288,61549,61550],{"class":357},"        \u002F\u002F 3. 监听事件 失去焦点\n",[288,61552,61553,61555,61557,61559,61562,61564,61566],{"class":290,"line":17077},[288,61554,61493],{"class":298},[288,61556,57986],{"class":2135},[288,61558,299],{"class":298},[288,61560,61561],{"class":403},"'blur'",[288,61563,12608],{"class":298},[288,61565,54622],{"class":294},[288,61567,54625],{"class":298},[288,61569,61570,61572,61574],{"class":290,"line":17082},[288,61571,61516],{"class":298},[288,61573,344],{"class":294},[288,61575,61576],{"class":403}," 'none'\n",[288,61578,61579,61581,61583,61585,61587],{"class":290,"line":17087},[288,61580,61531],{"class":298},[288,61582,57179],{"class":2135},[288,61584,299],{"class":298},[288,61586,61538],{"class":403},[288,61588,305],{"class":298},[288,61590,61591],{"class":290,"line":17100},[288,61592,61545],{"class":298},[288,61594,61595,61597,61599],{"class":290,"line":17105},[288,61596,51949],{"class":298},[288,61598,51986],{"class":51473},[288,61600,51480],{"class":298},[288,61602,61603,61605,61607],{"class":290,"line":32806},[288,61604,51958],{"class":298},[288,61606,51973],{"class":51473},[288,61608,51480],{"class":298},[288,61610,61611],{"class":290,"line":32812},[288,61612,2572],{"emptyLinePlaceholder":217},[288,61614,61615,61617,61619],{"class":290,"line":32818},[288,61616,51958],{"class":298},[288,61618,50808],{"class":51473},[288,61620,51480],{"class":298},[22171,61622,61624],{"id":61623},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61626,61627],{},"评论字数统计案例",[19,61629,61630],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61632,61633],{},"牢记focus伪类选择器",[51517,61635],{"charSet":61636},"UTF-8",[51517,61638],{"name":61639,"content":61640},"viewport","width=device-width, initial-scale=1.0",[51580,61642,61643],{},"Document",[5299,61645,61646],{},"\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",[53994,61648],{"type":5360},[1304,61650,61651,61654],{},[246,61652,61653],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[246,61655,61656],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[280,61658,61660],{"className":50806,"code":61659,"language":50808,"meta":205,"style":205},"\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",[25,61661,61662,61672,61686,61690,61698,61712,61732,61752,61765,61773,61780,61793,61807,61817,61827,61831,61835,61842,61854,61866,61878,61890,61919,61932,61936,61940,61949,61960,61972,61983,61994,62006,62017,62029,62045,62057,62061,62065,62076,62087,62097,62109,62113,62117,62125,62136,62146,62157,62169,62182,62194,62206,62210,62214,62223,62235,62246,62259,62270,62284,62288,62292,62299,62311,62323,62333,62337,62341,62350,62362,62372,62376,62380,62391,62401,62420,62433,62437,62441,62451,62461,62465,62469,62480,62491,62503,62515,62519,62523,62534,62545,62559,62563,62567,62578,62588,62600,62604,62612,62620,62624,62632,62647,62666,62706,62719,62727,62741,62761,62769,62784,62807,62825,62840,62860,62880,62900,62908,62916,62924,62932,62952,62972,62977,62994,63003,63007,63012,63028,63036,63040,63045,63062,63067,63092,63096,63100,63105,63110,63118,63126,63130],{"__ignoreMap":205},[288,61663,61664,61666,61668,61670],{"class":290,"line":291},[288,61665,51470],{"class":298},[288,61667,51474],{"class":51473},[288,61669,51477],{"class":2135},[288,61671,51480],{"class":298},[288,61673,61674,61676,61678,61680,61682,61684],{"class":290,"line":206},[288,61675,1207],{"class":298},[288,61677,50808],{"class":51473},[288,61679,51489],{"class":2135},[288,61681,344],{"class":298},[288,61683,51494],{"class":403},[288,61685,51480],{"class":298},[288,61687,61688],{"class":290,"line":1352},[288,61689,2572],{"emptyLinePlaceholder":217},[288,61691,61692,61694,61696],{"class":290,"line":1367},[288,61693,1207],{"class":298},[288,61695,51507],{"class":51473},[288,61697,51480],{"class":298},[288,61699,61700,61702,61704,61706,61708,61710],{"class":290,"line":1373},[288,61701,52317],{"class":298},[288,61703,51517],{"class":51473},[288,61705,51520],{"class":2135},[288,61707,344],{"class":298},[288,61709,51525],{"class":403},[288,61711,51480],{"class":298},[288,61713,61714,61716,61718,61720,61722,61724,61726,61728,61730],{"class":290,"line":1387},[288,61715,52317],{"class":298},[288,61717,51517],{"class":51473},[288,61719,51536],{"class":2135},[288,61721,344],{"class":298},[288,61723,51541],{"class":403},[288,61725,51544],{"class":2135},[288,61727,344],{"class":298},[288,61729,51549],{"class":403},[288,61731,51480],{"class":298},[288,61733,61734,61736,61738,61740,61742,61744,61746,61748,61750],{"class":290,"line":1393},[288,61735,52317],{"class":298},[288,61737,51517],{"class":51473},[288,61739,15093],{"class":2135},[288,61741,344],{"class":298},[288,61743,51564],{"class":403},[288,61745,51544],{"class":2135},[288,61747,344],{"class":298},[288,61749,51571],{"class":403},[288,61751,51480],{"class":298},[288,61753,61754,61756,61758,61761,61763],{"class":290,"line":1484},[288,61755,52317],{"class":298},[288,61757,51580],{"class":51473},[288,61759,61760],{"class":298},">评论回车发布\u003C\u002F",[288,61762,51580],{"class":51473},[288,61764,51480],{"class":298},[288,61766,61767,61769,61771],{"class":290,"line":1490},[288,61768,52317],{"class":298},[288,61770,5299],{"class":51473},[288,61772,51480],{"class":298},[288,61774,61775,61778],{"class":290,"line":1502},[288,61776,61777],{"class":2135},"    .wrapper",[288,61779,15745],{"class":298},[288,61781,61782,61785,61787,61789,61791],{"class":290,"line":1784},[288,61783,61784],{"class":347},"      min-width",[288,61786,51610],{"class":298},[288,61788,4159],{"class":347},[288,61790,51665],{"class":294},[288,61792,1463],{"class":298},[288,61794,61795,61798,61800,61803,61805],{"class":290,"line":1789},[288,61796,61797],{"class":347},"      max-width",[288,61799,51610],{"class":298},[288,61801,61802],{"class":347},"800",[288,61804,51665],{"class":294},[288,61806,1463],{"class":298},[288,61808,61809,61811,61813,61815],{"class":290,"line":1795},[288,61810,55182],{"class":347},[288,61812,51610],{"class":298},[288,61814,51650],{"class":347},[288,61816,1463],{"class":298},[288,61818,61819,61821,61823,61825],{"class":290,"line":1800},[288,61820,55193],{"class":347},[288,61822,51610],{"class":298},[288,61824,51753],{"class":347},[288,61826,1463],{"class":298},[288,61828,61829],{"class":290,"line":1814},[288,61830,2359],{"class":298},[288,61832,61833],{"class":290,"line":1819},[288,61834,2572],{"emptyLinePlaceholder":217},[288,61836,61837,61840],{"class":290,"line":1825},[288,61838,61839],{"class":2135},"    .avatar",[288,61841,15745],{"class":298},[288,61843,61844,61846,61848,61850,61852],{"class":290,"line":1846},[288,61845,54944],{"class":347},[288,61847,51610],{"class":298},[288,61849,904],{"class":347},[288,61851,51665],{"class":294},[288,61853,1463],{"class":298},[288,61855,61856,61858,61860,61862,61864],{"class":290,"line":1851},[288,61857,54958],{"class":347},[288,61859,51610],{"class":298},[288,61861,904],{"class":347},[288,61863,51665],{"class":294},[288,61865,1463],{"class":298},[288,61867,61868,61870,61872,61874,61876],{"class":290,"line":1865},[288,61869,55307],{"class":347},[288,61871,51610],{"class":298},[288,61873,953],{"class":347},[288,61875,625],{"class":294},[288,61877,1463],{"class":298},[288,61879,61880,61883,61885,61888],{"class":290,"line":1870},[288,61881,61882],{"class":347},"      overflow",[288,61884,51610],{"class":298},[288,61886,61887],{"class":347},"hidden",[288,61889,1463],{"class":298},[288,61891,61892,61895,61897,61900,61902,61905,61907,61910,61912,61914,61917],{"class":290,"line":1899},[288,61893,61894],{"class":347},"      background",[288,61896,51610],{"class":298},[288,61898,61899],{"class":347},"url",[288,61901,299],{"class":298},[288,61903,61904],{"class":5389},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[288,61906,13887],{"class":298},[288,61908,61909],{"class":347},"no-repeat",[288,61911,17317],{"class":347},[288,61913,25151],{"class":298},[288,61915,61916],{"class":347},"cover",[288,61918,1463],{"class":298},[288,61920,61921,61924,61926,61928,61930],{"class":290,"line":1904},[288,61922,61923],{"class":347},"      margin-right",[288,61925,51610],{"class":298},[288,61927,997],{"class":347},[288,61929,51665],{"class":294},[288,61931,1463],{"class":298},[288,61933,61934],{"class":290,"line":1921},[288,61935,2359],{"class":298},[288,61937,61938],{"class":290,"line":1926},[288,61939,2572],{"emptyLinePlaceholder":217},[288,61941,61942,61944,61947],{"class":290,"line":1931},[288,61943,61777],{"class":2135},[288,61945,61946],{"class":51473}," textarea",[288,61948,15745],{"class":298},[288,61950,61951,61954,61956,61958],{"class":290,"line":1936},[288,61952,61953],{"class":347},"      outline",[288,61955,51610],{"class":298},[288,61957,54910],{"class":347},[288,61959,1463],{"class":298},[288,61961,61962,61965,61967,61970],{"class":290,"line":1950},[288,61963,61964],{"class":347},"      border-color",[288,61966,51610],{"class":298},[288,61968,61969],{"class":347},"transparent",[288,61971,1463],{"class":298},[288,61973,61974,61977,61979,61981],{"class":290,"line":1955},[288,61975,61976],{"class":347},"      resize",[288,61978,51610],{"class":298},[288,61980,54910],{"class":347},[288,61982,1463],{"class":298},[288,61984,61985,61987,61989,61992],{"class":290,"line":2749},[288,61986,61894],{"class":347},[288,61988,51610],{"class":298},[288,61990,61991],{"class":347},"#f5f5f5",[288,61993,1463],{"class":298},[288,61995,61996,61998,62000,62002,62004],{"class":290,"line":2763},[288,61997,55307],{"class":347},[288,61999,51610],{"class":298},[288,62001,590],{"class":347},[288,62003,51665],{"class":294},[288,62005,1463],{"class":298},[288,62007,62008,62011,62013,62015],{"class":290,"line":2771},[288,62009,62010],{"class":347},"      flex",[288,62012,51610],{"class":298},[288,62014,516],{"class":347},[288,62016,1463],{"class":298},[288,62018,62019,62021,62023,62025,62027],{"class":290,"line":2776},[288,62020,54868],{"class":347},[288,62022,51610],{"class":298},[288,62024,743],{"class":347},[288,62026,51665],{"class":294},[288,62028,1463],{"class":298},[288,62030,62031,62034,62036,62038,62041,62043],{"class":290,"line":2782},[288,62032,62033],{"class":347},"      transition",[288,62035,51610],{"class":298},[288,62037,28294],{"class":347},[288,62039,62040],{"class":347}," 0.5",[288,62042,992],{"class":294},[288,62044,1463],{"class":298},[288,62046,62047,62049,62051,62053,62055],{"class":290,"line":2788},[288,62048,54958],{"class":347},[288,62050,51610],{"class":298},[288,62052,1248],{"class":347},[288,62054,51665],{"class":294},[288,62056,1463],{"class":298},[288,62058,62059],{"class":290,"line":2793},[288,62060,2359],{"class":298},[288,62062,62063],{"class":290,"line":8121},[288,62064,2572],{"emptyLinePlaceholder":217},[288,62066,62067,62069,62071,62074],{"class":290,"line":8145},[288,62068,61777],{"class":2135},[288,62070,61946],{"class":51473},[288,62072,62073],{"class":2135},":focus",[288,62075,15745],{"class":298},[288,62077,62078,62080,62082,62085],{"class":290,"line":8150},[288,62079,61964],{"class":347},[288,62081,51610],{"class":298},[288,62083,62084],{"class":347},"#e4e4e4",[288,62086,1463],{"class":298},[288,62088,62089,62091,62093,62095],{"class":290,"line":8156},[288,62090,61894],{"class":347},[288,62092,51610],{"class":298},[288,62094,61015],{"class":347},[288,62096,1463],{"class":298},[288,62098,62099,62101,62103,62105,62107],{"class":290,"line":8183},[288,62100,54958],{"class":347},[288,62102,51610],{"class":298},[288,62104,953],{"class":347},[288,62106,51665],{"class":294},[288,62108,1463],{"class":298},[288,62110,62111],{"class":290,"line":8188},[288,62112,2359],{"class":298},[288,62114,62115],{"class":290,"line":8194},[288,62116,2572],{"emptyLinePlaceholder":217},[288,62118,62119,62121,62123],{"class":290,"line":8206},[288,62120,61777],{"class":2135},[288,62122,57640],{"class":51473},[288,62124,15745],{"class":298},[288,62126,62127,62129,62131,62134],{"class":290,"line":8218},[288,62128,61894],{"class":347},[288,62130,51610],{"class":298},[288,62132,62133],{"class":347},"#00aeec",[288,62135,1463],{"class":298},[288,62137,62138,62140,62142,62144],{"class":290,"line":8230},[288,62139,57589],{"class":347},[288,62141,51610],{"class":298},[288,62143,61015],{"class":347},[288,62145,1463],{"class":298},[288,62147,62148,62151,62153,62155],{"class":290,"line":9889},[288,62149,62150],{"class":347},"      border",[288,62152,51610],{"class":298},[288,62154,54910],{"class":347},[288,62156,1463],{"class":298},[288,62158,62159,62161,62163,62165,62167],{"class":290,"line":9914},[288,62160,55307],{"class":347},[288,62162,51610],{"class":298},[288,62164,590],{"class":347},[288,62166,51665],{"class":294},[288,62168,1463],{"class":298},[288,62170,62171,62174,62176,62178,62180],{"class":290,"line":9937},[288,62172,62173],{"class":347},"      margin-left",[288,62175,51610],{"class":298},[288,62177,743],{"class":347},[288,62179,51665],{"class":294},[288,62181,1463],{"class":298},[288,62183,62184,62186,62188,62190,62192],{"class":290,"line":9961},[288,62185,54944],{"class":347},[288,62187,51610],{"class":298},[288,62189,653],{"class":347},[288,62191,51665],{"class":294},[288,62193,1463],{"class":298},[288,62195,62196,62199,62201,62204],{"class":290,"line":9966},[288,62197,62198],{"class":347},"      cursor",[288,62200,51610],{"class":298},[288,62202,62203],{"class":347},"pointer",[288,62205,1463],{"class":298},[288,62207,62208],{"class":290,"line":9971},[288,62209,2359],{"class":298},[288,62211,62212],{"class":290,"line":9976},[288,62213,2572],{"emptyLinePlaceholder":217},[288,62215,62216,62218,62221],{"class":290,"line":9985},[288,62217,61777],{"class":2135},[288,62219,62220],{"class":2135}," .total",[288,62222,15745],{"class":298},[288,62224,62225,62227,62229,62231,62233],{"class":290,"line":9990},[288,62226,61923],{"class":347},[288,62228,51610],{"class":298},[288,62230,909],{"class":347},[288,62232,51665],{"class":294},[288,62234,1463],{"class":298},[288,62236,62237,62239,62241,62244],{"class":290,"line":9996},[288,62238,57589],{"class":347},[288,62240,51610],{"class":298},[288,62242,62243],{"class":347},"#999",[288,62245,1463],{"class":298},[288,62247,62248,62251,62253,62255,62257],{"class":290,"line":10017},[288,62249,62250],{"class":347},"      margin-top",[288,62252,51610],{"class":298},[288,62254,616],{"class":347},[288,62256,51665],{"class":294},[288,62258,1463],{"class":298},[288,62260,62261,62264,62266,62268],{"class":290,"line":10023},[288,62262,62263],{"class":347},"      opacity",[288,62265,51610],{"class":298},[288,62267,490],{"class":347},[288,62269,1463],{"class":298},[288,62271,62272,62274,62276,62278,62280,62282],{"class":290,"line":10037},[288,62273,62033],{"class":347},[288,62275,51610],{"class":298},[288,62277,28294],{"class":347},[288,62279,62040],{"class":347},[288,62281,992],{"class":294},[288,62283,1463],{"class":298},[288,62285,62286],{"class":290,"line":10043},[288,62287,2359],{"class":298},[288,62289,62290],{"class":290,"line":10070},[288,62291,2572],{"emptyLinePlaceholder":217},[288,62293,62294,62297],{"class":290,"line":10079},[288,62295,62296],{"class":2135},"    .list",[288,62298,15745],{"class":298},[288,62300,62301,62303,62305,62307,62309],{"class":290,"line":10085},[288,62302,61784],{"class":347},[288,62304,51610],{"class":298},[288,62306,4159],{"class":347},[288,62308,51665],{"class":294},[288,62310,1463],{"class":298},[288,62312,62313,62315,62317,62319,62321],{"class":290,"line":10093},[288,62314,61797],{"class":347},[288,62316,51610],{"class":298},[288,62318,61802],{"class":347},[288,62320,51665],{"class":294},[288,62322,1463],{"class":298},[288,62324,62325,62327,62329,62331],{"class":290,"line":10098},[288,62326,55182],{"class":347},[288,62328,51610],{"class":298},[288,62330,51650],{"class":347},[288,62332,1463],{"class":298},[288,62334,62335],{"class":290,"line":16777},[288,62336,2359],{"class":298},[288,62338,62339],{"class":290,"line":16783},[288,62340,2572],{"emptyLinePlaceholder":217},[288,62342,62343,62345,62348],{"class":290,"line":16806},[288,62344,62296],{"class":2135},[288,62346,62347],{"class":2135}," .item",[288,62349,15745],{"class":298},[288,62351,62352,62354,62356,62358,62360],{"class":290,"line":16812},[288,62353,54944],{"class":347},[288,62355,51610],{"class":298},[288,62357,608],{"class":347},[288,62359,625],{"class":294},[288,62361,1463],{"class":298},[288,62363,62364,62366,62368,62370],{"class":290,"line":16835},[288,62365,55182],{"class":347},[288,62367,51610],{"class":298},[288,62369,51650],{"class":347},[288,62371,1463],{"class":298},[288,62373,62374],{"class":290,"line":16849},[288,62375,2359],{"class":298},[288,62377,62378],{"class":290,"line":16869},[288,62379,2572],{"emptyLinePlaceholder":217},[288,62381,62382,62384,62386,62389],{"class":290,"line":16875},[288,62383,62296],{"class":2135},[288,62385,62347],{"class":2135},[288,62387,62388],{"class":2135}," .info",[288,62390,15745],{"class":298},[288,62392,62393,62395,62397,62399],{"class":290,"line":16886},[288,62394,62010],{"class":347},[288,62396,51610],{"class":298},[288,62398,516],{"class":347},[288,62400,1463],{"class":298},[288,62402,62403,62406,62408,62410,62412,62415,62418],{"class":290,"line":16909},[288,62404,62405],{"class":347},"      border-bottom",[288,62407,51610],{"class":298},[288,62409,516],{"class":347},[288,62411,51665],{"class":294},[288,62413,62414],{"class":347}," dashed",[288,62416,62417],{"class":347}," #e4e4e4",[288,62419,1463],{"class":298},[288,62421,62422,62425,62427,62429,62431],{"class":290,"line":16931},[288,62423,62424],{"class":347},"      padding-bottom",[288,62426,51610],{"class":298},[288,62428,743],{"class":347},[288,62430,51665],{"class":294},[288,62432,1463],{"class":298},[288,62434,62435],{"class":290,"line":16936},[288,62436,2359],{"class":298},[288,62438,62439],{"class":290,"line":16942},[288,62440,2572],{"emptyLinePlaceholder":217},[288,62442,62443,62445,62447,62449],{"class":290,"line":16956},[288,62444,62296],{"class":2135},[288,62446,62347],{"class":2135},[288,62448,6998],{"class":51473},[288,62450,15745],{"class":298},[288,62452,62453,62455,62457,62459],{"class":290,"line":16969},[288,62454,54879],{"class":347},[288,62456,51610],{"class":298},[288,62458,490],{"class":347},[288,62460,1463],{"class":298},[288,62462,62463],{"class":290,"line":16974},[288,62464,2359],{"class":298},[288,62466,62467],{"class":290,"line":16988},[288,62468,2572],{"emptyLinePlaceholder":217},[288,62470,62471,62473,62475,62478],{"class":290,"line":16993},[288,62472,62296],{"class":2135},[288,62474,62347],{"class":2135},[288,62476,62477],{"class":2135}," .name",[288,62479,15745],{"class":298},[288,62481,62482,62484,62486,62489],{"class":290,"line":16999},[288,62483,57589],{"class":347},[288,62485,51610],{"class":298},[288,62487,62488],{"class":347},"#FB7299",[288,62490,1463],{"class":298},[288,62492,62493,62495,62497,62499,62501],{"class":290,"line":17004},[288,62494,55095],{"class":347},[288,62496,51610],{"class":298},[288,62498,846],{"class":347},[288,62500,51665],{"class":294},[288,62502,1463],{"class":298},[288,62504,62505,62508,62510,62513],{"class":290,"line":17018},[288,62506,62507],{"class":347},"      font-weight",[288,62509,51610],{"class":298},[288,62511,62512],{"class":347},"bold",[288,62514,1463],{"class":298},[288,62516,62517],{"class":290,"line":17023},[288,62518,2359],{"class":298},[288,62520,62521],{"class":290,"line":17028},[288,62522,2572],{"emptyLinePlaceholder":217},[288,62524,62525,62527,62529,62532],{"class":290,"line":17042},[288,62526,62296],{"class":2135},[288,62528,62347],{"class":2135},[288,62530,62531],{"class":2135}," .text",[288,62533,15745],{"class":298},[288,62535,62536,62538,62540,62543],{"class":290,"line":17054},[288,62537,57589],{"class":347},[288,62539,51610],{"class":298},[288,62541,62542],{"class":347},"#333",[288,62544,1463],{"class":298},[288,62546,62547,62549,62551,62553,62555,62557],{"class":290,"line":17059},[288,62548,54868],{"class":347},[288,62550,51610],{"class":298},[288,62552,743],{"class":347},[288,62554,51665],{"class":294},[288,62556,4265],{"class":347},[288,62558,1463],{"class":298},[288,62560,62561],{"class":290,"line":17072},[288,62562,2359],{"class":298},[288,62564,62565],{"class":290,"line":17077},[288,62566,2572],{"emptyLinePlaceholder":217},[288,62568,62569,62571,62573,62576],{"class":290,"line":17082},[288,62570,62296],{"class":2135},[288,62572,62347],{"class":2135},[288,62574,62575],{"class":2135}," .time",[288,62577,15745],{"class":298},[288,62579,62580,62582,62584,62586],{"class":290,"line":17087},[288,62581,57589],{"class":347},[288,62583,51610],{"class":298},[288,62585,62243],{"class":347},[288,62587,1463],{"class":298},[288,62589,62590,62592,62594,62596,62598],{"class":290,"line":17100},[288,62591,55095],{"class":347},[288,62593,51610],{"class":298},[288,62595,795],{"class":347},[288,62597,51665],{"class":294},[288,62599,1463],{"class":298},[288,62601,62602],{"class":290,"line":17105},[288,62603,2359],{"class":298},[288,62605,62606,62608,62610],{"class":290,"line":32806},[288,62607,52590],{"class":298},[288,62609,5299],{"class":51473},[288,62611,51480],{"class":298},[288,62613,62614,62616,62618],{"class":290,"line":32812},[288,62615,51958],{"class":298},[288,62617,51507],{"class":51473},[288,62619,51480],{"class":298},[288,62621,62622],{"class":290,"line":32818},[288,62623,2572],{"emptyLinePlaceholder":217},[288,62625,62626,62628,62630],{"class":290,"line":32824},[288,62627,1207],{"class":298},[288,62629,51973],{"class":51473},[288,62631,51480],{"class":298},[288,62633,62634,62636,62638,62640,62642,62645],{"class":290,"line":32830},[288,62635,52317],{"class":298},[288,62637,51784],{"class":51473},[288,62639,53659],{"class":2135},[288,62641,344],{"class":298},[288,62643,62644],{"class":403},"\"wrapper\"",[288,62646,51480],{"class":298},[288,62648,62649,62651,62653,62655,62657,62660,62662,62664],{"class":290,"line":32841},[288,62650,51514],{"class":298},[288,62652,738],{"class":51473},[288,62654,53659],{"class":2135},[288,62656,344],{"class":298},[288,62658,62659],{"class":403},"\"avatar\"",[288,62661,55487],{"class":298},[288,62663,738],{"class":51473},[288,62665,51480],{"class":298},[288,62667,62668,62670,62672,62674,62676,62679,62681,62683,62686,62688,62690,62692,62695,62697,62700,62702,62704],{"class":290,"line":32847},[288,62669,51514],{"class":298},[288,62671,54461],{"class":51473},[288,62673,15132],{"class":2135},[288,62675,344],{"class":298},[288,62677,62678],{"class":403},"\"tx\"",[288,62680,61193],{"class":2135},[288,62682,344],{"class":298},[288,62684,62685],{"class":403},"\"发一条友善的评论\"",[288,62687,54484],{"class":2135},[288,62689,344],{"class":298},[288,62691,3873],{"class":403},[288,62693,62694],{"class":2135}," maxlength",[288,62696,344],{"class":298},[288,62698,62699],{"class":403},"\"200\"",[288,62701,55487],{"class":298},[288,62703,54461],{"class":51473},[288,62705,51480],{"class":298},[288,62707,62708,62710,62712,62715,62717],{"class":290,"line":32867},[288,62709,51514],{"class":298},[288,62711,54060],{"class":51473},[288,62713,62714],{"class":298},">发布\u003C\u002F",[288,62716,54060],{"class":51473},[288,62718,51480],{"class":298},[288,62720,62721,62723,62725],{"class":290,"line":32873},[288,62722,52590],{"class":298},[288,62724,51784],{"class":51473},[288,62726,51480],{"class":298},[288,62728,62729,62731,62733,62735,62737,62739],{"class":290,"line":32884},[288,62730,52317],{"class":298},[288,62732,51784],{"class":51473},[288,62734,53659],{"class":2135},[288,62736,344],{"class":298},[288,62738,62644],{"class":403},[288,62740,51480],{"class":298},[288,62742,62743,62745,62747,62749,62751,62754,62757,62759],{"class":290,"line":32890},[288,62744,51514],{"class":298},[288,62746,288],{"class":51473},[288,62748,53659],{"class":2135},[288,62750,344],{"class":298},[288,62752,62753],{"class":403},"\"total\"",[288,62755,62756],{"class":298},">0\u002F200字\u003C\u002F",[288,62758,288],{"class":51473},[288,62760,51480],{"class":298},[288,62762,62763,62765,62767],{"class":290,"line":32896},[288,62764,52590],{"class":298},[288,62766,51784],{"class":51473},[288,62768,51480],{"class":298},[288,62770,62771,62773,62775,62777,62779,62782],{"class":290,"line":32902},[288,62772,52317],{"class":298},[288,62774,51784],{"class":51473},[288,62776,53659],{"class":2135},[288,62778,344],{"class":298},[288,62780,62781],{"class":403},"\"list\"",[288,62783,51480],{"class":298},[288,62785,62786,62788,62790,62792,62794,62797,62800,62802,62805],{"class":290,"line":32908},[288,62787,51514],{"class":298},[288,62789,51784],{"class":51473},[288,62791,53659],{"class":2135},[288,62793,344],{"class":298},[288,62795,62796],{"class":403},"\"item\"",[288,62798,62799],{"class":2135}," style",[288,62801,344],{"class":298},[288,62803,62804],{"class":403},"\"display: none;\"",[288,62806,51480],{"class":298},[288,62808,62809,62811,62813,62815,62817,62819,62821,62823],{"class":290,"line":32914},[288,62810,55407],{"class":298},[288,62812,738],{"class":51473},[288,62814,53659],{"class":2135},[288,62816,344],{"class":298},[288,62818,62659],{"class":403},[288,62820,55487],{"class":298},[288,62822,738],{"class":51473},[288,62824,51480],{"class":298},[288,62826,62827,62829,62831,62833,62835,62838],{"class":290,"line":32920},[288,62828,55407],{"class":298},[288,62830,51784],{"class":51473},[288,62832,53659],{"class":2135},[288,62834,344],{"class":298},[288,62836,62837],{"class":403},"\"info\"",[288,62839,51480],{"class":298},[288,62841,62842,62844,62846,62848,62850,62853,62856,62858],{"class":290,"line":32926},[288,62843,55475],{"class":298},[288,62845,19],{"class":51473},[288,62847,53659],{"class":2135},[288,62849,344],{"class":298},[288,62851,62852],{"class":403},"\"name\"",[288,62854,62855],{"class":298},">清风徐来\u003C\u002F",[288,62857,19],{"class":51473},[288,62859,51480],{"class":298},[288,62861,62862,62864,62866,62868,62870,62873,62876,62878],{"class":290,"line":32946},[288,62863,55475],{"class":298},[288,62865,19],{"class":51473},[288,62867,53659],{"class":2135},[288,62869,344],{"class":298},[288,62871,62872],{"class":403},"\"text\"",[288,62874,62875],{"class":298},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[288,62877,19],{"class":51473},[288,62879,51480],{"class":298},[288,62881,62882,62884,62886,62888,62890,62893,62896,62898],{"class":290,"line":32952},[288,62883,55475],{"class":298},[288,62885,19],{"class":51473},[288,62887,53659],{"class":2135},[288,62889,344],{"class":298},[288,62891,62892],{"class":403},"\"time\"",[288,62894,62895],{"class":298},">2022-10-10 20:29:21\u003C\u002F",[288,62897,19],{"class":51473},[288,62899,51480],{"class":298},[288,62901,62902,62904,62906],{"class":290,"line":32968},[288,62903,55580],{"class":298},[288,62905,51784],{"class":51473},[288,62907,51480],{"class":298},[288,62909,62910,62912,62914],{"class":290,"line":32974},[288,62911,51949],{"class":298},[288,62913,51784],{"class":51473},[288,62915,51480],{"class":298},[288,62917,62918,62920,62922],{"class":290,"line":32988},[288,62919,52590],{"class":298},[288,62921,51784],{"class":51473},[288,62923,51480],{"class":298},[288,62925,62926,62928,62930],{"class":290,"line":32994},[288,62927,52317],{"class":298},[288,62929,51986],{"class":51473},[288,62931,51480],{"class":298},[288,62933,62934,62936,62939,62941,62943,62945,62947,62950],{"class":290,"line":33009},[288,62935,11394],{"class":294},[288,62937,62938],{"class":347}," tx",[288,62940,13737],{"class":294},[288,62942,54569],{"class":298},[288,62944,54572],{"class":2135},[288,62946,299],{"class":298},[288,62948,62949],{"class":403},"'#tx'",[288,62951,305],{"class":298},[288,62953,62954,62956,62959,62961,62963,62965,62967,62970],{"class":290,"line":33015},[288,62955,11394],{"class":294},[288,62957,62958],{"class":347}," total",[288,62960,13737],{"class":294},[288,62962,54569],{"class":298},[288,62964,54572],{"class":2135},[288,62966,299],{"class":298},[288,62968,62969],{"class":403},"'.total'",[288,62971,305],{"class":298},[288,62973,62974],{"class":290,"line":33024},[288,62975,62976],{"class":357},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[288,62978,62979,62982,62984,62986,62988,62990,62992],{"class":290,"line":33030},[288,62980,62981],{"class":298},"    tx.",[288,62983,57986],{"class":2135},[288,62985,299],{"class":298},[288,62987,61500],{"class":403},[288,62989,12608],{"class":298},[288,62991,54622],{"class":294},[288,62993,54625],{"class":298},[288,62995,62996,62999,63001],{"class":290,"line":33039},[288,62997,62998],{"class":298},"      total.style.opacity ",[288,63000,344],{"class":294},[288,63002,55872],{"class":347},[288,63004,63005],{"class":290,"line":33045},[288,63006,33634],{"class":298},[288,63008,63009],{"class":290,"line":33051},[288,63010,63011],{"class":357},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[288,63013,63014,63016,63018,63020,63022,63024,63026],{"class":290,"line":33060},[288,63015,62981],{"class":298},[288,63017,57986],{"class":2135},[288,63019,299],{"class":298},[288,63021,61561],{"class":403},[288,63023,12608],{"class":298},[288,63025,54622],{"class":294},[288,63027,54625],{"class":298},[288,63029,63030,63032,63034],{"class":290,"line":33066},[288,63031,62998],{"class":298},[288,63033,344],{"class":294},[288,63035,47506],{"class":347},[288,63037,63038],{"class":290,"line":33077},[288,63039,33634],{"class":298},[288,63041,63042],{"class":290,"line":33083},[288,63043,63044],{"class":357},"    \u002F\u002F 3. 检测用户输入\n",[288,63046,63047,63049,63051,63053,63056,63058,63060],{"class":290,"line":33102},[288,63048,62981],{"class":298},[288,63050,57986],{"class":2135},[288,63052,299],{"class":298},[288,63054,63055],{"class":403},"'input'",[288,63057,12608],{"class":298},[288,63059,54622],{"class":294},[288,63061,54625],{"class":298},[288,63063,63064],{"class":290,"line":33108},[288,63065,63066],{"class":357},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[288,63068,63069,63072,63074,63077,63080,63082,63085,63087,63089],{"class":290,"line":33119},[288,63070,63071],{"class":298},"      total.innerHTML ",[288,63073,344],{"class":294},[288,63075,63076],{"class":403}," `${",[288,63078,63079],{"class":298},"tx",[288,63081,855],{"class":403},[288,63083,63084],{"class":298},"value",[288,63086,855],{"class":403},[288,63088,52141],{"class":347},[288,63090,63091],{"class":403},"}\u002F200字`\n",[288,63093,63094],{"class":290,"line":33125},[288,63095,33634],{"class":298},[288,63097,63098],{"class":290,"line":33145},[288,63099,2572],{"emptyLinePlaceholder":217},[288,63101,63102],{"class":290,"line":33161},[288,63103,63104],{"class":357},"    \u002F\u002F const str = 'andy'\n",[288,63106,63107],{"class":290,"line":33167},[288,63108,63109],{"class":357},"    \u002F\u002F console.log(str.length)\n",[288,63111,63112,63114,63116],{"class":290,"line":33181},[288,63113,52590],{"class":298},[288,63115,51986],{"class":51473},[288,63117,51480],{"class":298},[288,63119,63120,63122,63124],{"class":290,"line":33187},[288,63121,51958],{"class":298},[288,63123,51973],{"class":51473},[288,63125,51480],{"class":298},[288,63127,63128],{"class":290,"line":33193},[288,63129,2572],{"emptyLinePlaceholder":217},[288,63131,63132,63134,63136],{"class":290,"line":33204},[288,63133,51958],{"class":298},[288,63135,50808],{"class":51473},[288,63137,51480],{"class":298},[22171,63139,63141],{"id":63140},"_3254-change事件","3.2.5.4 change事件",[19,63143,63144],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63146,63147],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63149,63150],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[280,63152,63154],{"className":50806,"code":63153,"language":50808,"meta":205,"style":205},"\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",[25,63155,63156,63166,63180,63184,63192,63206,63226,63238,63246,63250,63258,63272,63280,63298,63316,63328,63332,63340,63348,63352],{"__ignoreMap":205},[288,63157,63158,63160,63162,63164],{"class":290,"line":291},[288,63159,51470],{"class":298},[288,63161,51474],{"class":51473},[288,63163,51477],{"class":2135},[288,63165,51480],{"class":298},[288,63167,63168,63170,63172,63174,63176,63178],{"class":290,"line":206},[288,63169,1207],{"class":298},[288,63171,50808],{"class":51473},[288,63173,51489],{"class":2135},[288,63175,344],{"class":298},[288,63177,51494],{"class":403},[288,63179,51480],{"class":298},[288,63181,63182],{"class":290,"line":1352},[288,63183,2572],{"emptyLinePlaceholder":217},[288,63185,63186,63188,63190],{"class":290,"line":1367},[288,63187,1207],{"class":298},[288,63189,51507],{"class":51473},[288,63191,51480],{"class":298},[288,63193,63194,63196,63198,63200,63202,63204],{"class":290,"line":1373},[288,63195,52317],{"class":298},[288,63197,51517],{"class":51473},[288,63199,51520],{"class":2135},[288,63201,344],{"class":298},[288,63203,51525],{"class":403},[288,63205,51480],{"class":298},[288,63207,63208,63210,63212,63214,63216,63218,63220,63222,63224],{"class":290,"line":1387},[288,63209,52317],{"class":298},[288,63211,51517],{"class":51473},[288,63213,15093],{"class":2135},[288,63215,344],{"class":298},[288,63217,51564],{"class":403},[288,63219,51544],{"class":2135},[288,63221,344],{"class":298},[288,63223,51571],{"class":403},[288,63225,51480],{"class":298},[288,63227,63228,63230,63232,63234,63236],{"class":290,"line":1393},[288,63229,52317],{"class":298},[288,63231,51580],{"class":51473},[288,63233,51583],{"class":298},[288,63235,51580],{"class":51473},[288,63237,51480],{"class":298},[288,63239,63240,63242,63244],{"class":290,"line":1484},[288,63241,51958],{"class":298},[288,63243,51507],{"class":51473},[288,63245,51480],{"class":298},[288,63247,63248],{"class":290,"line":1490},[288,63249,2572],{"emptyLinePlaceholder":217},[288,63251,63252,63254,63256],{"class":290,"line":1502},[288,63253,1207],{"class":298},[288,63255,51973],{"class":51473},[288,63257,51480],{"class":298},[288,63259,63260,63262,63264,63266,63268,63270],{"class":290,"line":1784},[288,63261,52317],{"class":298},[288,63263,53994],{"class":51473},[288,63265,53997],{"class":2135},[288,63267,344],{"class":298},[288,63269,62872],{"class":403},[288,63271,51480],{"class":298},[288,63273,63274,63276,63278],{"class":290,"line":1789},[288,63275,52317],{"class":298},[288,63277,51986],{"class":51473},[288,63279,51480],{"class":298},[288,63281,63282,63284,63286,63288,63290,63292,63294,63296],{"class":290,"line":1795},[288,63283,11394],{"class":294},[288,63285,60778],{"class":347},[288,63287,13737],{"class":294},[288,63289,54569],{"class":298},[288,63291,54572],{"class":2135},[288,63293,299],{"class":298},[288,63295,63055],{"class":403},[288,63297,305],{"class":298},[288,63299,63300,63303,63305,63307,63310,63312,63314],{"class":290,"line":1800},[288,63301,63302],{"class":298},"    input.",[288,63304,57986],{"class":2135},[288,63306,299],{"class":298},[288,63308,63309],{"class":403},"'change'",[288,63311,12608],{"class":298},[288,63313,54622],{"class":294},[288,63315,54625],{"class":298},[288,63317,63318,63320,63322,63324,63326],{"class":290,"line":1814},[288,63319,58417],{"class":298},[288,63321,58420],{"class":2135},[288,63323,299],{"class":298},[288,63325,890],{"class":347},[288,63327,305],{"class":298},[288,63329,63330],{"class":290,"line":1819},[288,63331,33634],{"class":298},[288,63333,63334,63336,63338],{"class":290,"line":1825},[288,63335,52590],{"class":298},[288,63337,51986],{"class":51473},[288,63339,51480],{"class":298},[288,63341,63342,63344,63346],{"class":290,"line":1846},[288,63343,51958],{"class":298},[288,63345,51973],{"class":51473},[288,63347,51480],{"class":298},[288,63349,63350],{"class":290,"line":1851},[288,63351,2572],{"emptyLinePlaceholder":217},[288,63353,63354,63356,63358],{"class":290,"line":1865},[288,63355,51958],{"class":298},[288,63357,50808],{"class":51473},[288,63359,51480],{"class":298},[19,63361,63362],{},"总结：内容发生改变才回去触发",[260,63364,63366],{"id":63365},"_326-事件对象","3.2.6 事件对象",[22171,63368,63370],{"id":63369},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63372,63373],{},[200,63374],{"alt":205,"src":63375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63377,63378],{},[200,63379],{"alt":205,"src":63380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63382,63383],{},"点击一次，就输出了事件对象，它是个对象",[19,63385,63386],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63388,63389],{},[200,63390],{"alt":205,"src":63391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22171,63393,63395],{"id":63394},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63397,63398],{},[200,63399],{"alt":205,"src":63400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63402,63403],{},"实现按特殊字符才是实现打印输出效果：",[280,63405,63407],{"className":53240,"code":63406,"language":53242,"meta":205,"style":205},"\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",[25,63408,63409,63417,63422,63436,63444,63449,63454,63459,63464,63469,63474,63479,63484,63489,63493,63497,63505],{"__ignoreMap":205},[288,63410,63411,63413,63415],{"class":290,"line":291},[288,63412,1207],{"class":298},[288,63414,51973],{"class":51473},[288,63416,51480],{"class":298},[288,63418,63419],{"class":290,"line":206},[288,63420,63421],{"class":357},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[288,63423,63424,63426,63428,63430,63432,63434],{"class":290,"line":1352},[288,63425,52317],{"class":298},[288,63427,53994],{"class":51473},[288,63429,53997],{"class":2135},[288,63431,344],{"class":298},[288,63433,62872],{"class":403},[288,63435,51480],{"class":298},[288,63437,63438,63440,63442],{"class":290,"line":1367},[288,63439,52317],{"class":298},[288,63441,51986],{"class":51473},[288,63443,51480],{"class":298},[288,63445,63446],{"class":290,"line":1373},[288,63447,63448],{"class":298},"    \u002F\u002F const btn = document.querySelector('button')\n",[288,63450,63451],{"class":290,"line":1387},[288,63452,63453],{"class":298},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[288,63455,63456],{"class":290,"line":1393},[288,63457,63458],{"class":298},"    \u002F\u002F   console.log(e);\n",[288,63460,63461],{"class":290,"line":1484},[288,63462,63463],{"class":298},"    \u002F\u002F })\n",[288,63465,63466],{"class":290,"line":1490},[288,63467,63468],{"class":298},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[288,63470,63471],{"class":290,"line":1502},[288,63472,63473],{"class":298},"    const input = document.querySelector('input')\n",[288,63475,63476],{"class":290,"line":1784},[288,63477,63478],{"class":298},"    input.addEventListener('keyup', function (e) {\n",[288,63480,63481],{"class":290,"line":1789},[288,63482,63483],{"class":298},"      if (e.key === 'Enter') {\n",[288,63485,63486],{"class":290,"line":1795},[288,63487,63488],{"class":298},"        console.log('我按下了回车键')\n",[288,63490,63491],{"class":290,"line":1800},[288,63492,52571],{"class":298},[288,63494,63495],{"class":290,"line":1814},[288,63496,33634],{"class":298},[288,63498,63499,63501,63503],{"class":290,"line":1819},[288,63500,52590],{"class":298},[288,63502,51986],{"class":51473},[288,63504,51480],{"class":298},[288,63506,63507,63509,63511],{"class":290,"line":1825},[288,63508,51958],{"class":298},[288,63510,51973],{"class":51473},[288,63512,51480],{"class":298},[22171,63514,63516],{"id":63515},"_3263-trim方法","3.2.6.3 trim方法",[19,63518,63519],{},[200,63520],{"alt":205,"src":63521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63523,63524],{},[200,63525],{"alt":205,"src":63526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63528,63529],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63531,63532],{},"str.trim()",[260,63534,63536],{"id":63535},"_327-环境对象","3.2.7 环境对象",[19,63538,63539],{},[200,63540],{"alt":205,"src":63541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63543,63544],{},[200,63545],{"alt":205,"src":63546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63548,63549],{},[200,63550],{"alt":205,"src":63551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63553,63554],{},"实际函数调用是window.fn()",[19,63556,63557],{},"普通函数里面this指向的是window",[1304,63559,63560,63563,63566],{},[246,63561,63562],{},"在普通函数下，this指向的是window",[246,63564,63565],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[246,63567,63568],{},"箭头函数没有this",[19,63570,63571],{},"粗略记法就是：谁调用，this就指向谁",[19,63573,63574],{},[200,63575],{"alt":205,"src":63576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63578,63579],{},[200,63580],{"alt":205,"src":63581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63583,63584],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63586,63587],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[280,63589,63591],{"className":53240,"code":63590,"language":53242,"meta":205,"style":205},"\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",[25,63592,63593,63601,63613,63621,63626,63631,63636,63641,63645,63653],{"__ignoreMap":205},[288,63594,63595,63597,63599],{"class":290,"line":291},[288,63596,1207],{"class":298},[288,63598,51973],{"class":51473},[288,63600,51480],{"class":298},[288,63602,63603,63605,63607,63609,63611],{"class":290,"line":206},[288,63604,52317],{"class":298},[288,63606,54060],{"class":51473},[288,63608,54066],{"class":298},[288,63610,54060],{"class":51473},[288,63612,51480],{"class":298},[288,63614,63615,63617,63619],{"class":290,"line":1352},[288,63616,52317],{"class":298},[288,63618,51986],{"class":51473},[288,63620,51480],{"class":298},[288,63622,63623],{"class":290,"line":1367},[288,63624,63625],{"class":298},"    const button = document.querySelector('button')\n",[288,63627,63628],{"class":290,"line":1373},[288,63629,63630],{"class":298},"    button.addEventListener('click', function () {\n",[288,63632,63633],{"class":290,"line":1387},[288,63634,63635],{"class":298},"      \u002F\u002F console.log(this);\n",[288,63637,63638],{"class":290,"line":1393},[288,63639,63640],{"class":298},"      this.style.color = 'pink'\n",[288,63642,63643],{"class":290,"line":1484},[288,63644,33634],{"class":298},[288,63646,63647,63649,63651],{"class":290,"line":1490},[288,63648,52590],{"class":298},[288,63650,51986],{"class":51473},[288,63652,51480],{"class":298},[288,63654,63655,63657,63659],{"class":290,"line":1502},[288,63656,51958],{"class":298},[288,63658,51973],{"class":51473},[288,63660,51480],{"class":298},[260,63662,63664],{"id":63663},"_328-回调函数","3.2.8 回调函数",[19,63666,63667],{},[200,63668],{"alt":205,"src":63669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63671,63672],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63674,11505],{},[1304,63676,63677,63680,63683],{},[246,63678,63679],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[246,63681,63682],{},"回调函数本质还是函数，只不过把它当成参数使用",[246,63684,63685],{},"使用匿名函数做为回调函数比较常见",[260,63687,63689],{"id":63688},"_329-tab栏切换","3.2.9 tab栏切换",[19,63691,63692],{},[200,63693],{"alt":205,"src":63694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[280,63696,63698],{"className":50806,"code":63697,"language":50808,"meta":205,"style":205},"\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",[25,63699,63700,63710,63724,63728,63736,63750,63770,63790,63803,63811,63817,63827,63837,63841,63845,63852,63865,63878,63890,63906,63910,63914,63921,63933,63945,63957,63967,63977,63981,63985,63994,64006,64017,64029,64033,64037,64045,64055,64065,64075,64079,64083,64093,64107,64119,64123,64127,64139,64150,64167,64177,64181,64185,64200,64211,64221,64225,64229,64236,64251,64255,64259,64267,64277,64281,64285,64294,64304,64308,64316,64324,64328,64336,64351,64366,64379,64387,64421,64448,64475,64502,64529,64537,64545,64560,64597,64632,64667,64702,64737,64745,64753,64761,64766,64771,64791,64796,64825,64830,64835,64853,64858,64863,64868,64890,64895,64911,64915,64920,64925,64946,64951,64980,64984,64989,64993,65001,65009,65013],{"__ignoreMap":205},[288,63701,63702,63704,63706,63708],{"class":290,"line":291},[288,63703,51470],{"class":298},[288,63705,51474],{"class":51473},[288,63707,51477],{"class":2135},[288,63709,51480],{"class":298},[288,63711,63712,63714,63716,63718,63720,63722],{"class":290,"line":206},[288,63713,1207],{"class":298},[288,63715,50808],{"class":51473},[288,63717,51489],{"class":2135},[288,63719,344],{"class":298},[288,63721,51494],{"class":403},[288,63723,51480],{"class":298},[288,63725,63726],{"class":290,"line":1352},[288,63727,2572],{"emptyLinePlaceholder":217},[288,63729,63730,63732,63734],{"class":290,"line":1367},[288,63731,1207],{"class":298},[288,63733,51507],{"class":51473},[288,63735,51480],{"class":298},[288,63737,63738,63740,63742,63744,63746,63748],{"class":290,"line":1373},[288,63739,52317],{"class":298},[288,63741,51517],{"class":51473},[288,63743,51520],{"class":2135},[288,63745,344],{"class":298},[288,63747,51525],{"class":403},[288,63749,59300],{"class":298},[288,63751,63752,63754,63756,63758,63760,63762,63764,63766,63768],{"class":290,"line":1387},[288,63753,52317],{"class":298},[288,63755,51517],{"class":51473},[288,63757,51536],{"class":2135},[288,63759,344],{"class":298},[288,63761,51541],{"class":403},[288,63763,51544],{"class":2135},[288,63765,344],{"class":298},[288,63767,51549],{"class":403},[288,63769,59300],{"class":298},[288,63771,63772,63774,63776,63778,63780,63782,63784,63786,63788],{"class":290,"line":1393},[288,63773,52317],{"class":298},[288,63775,51517],{"class":51473},[288,63777,15093],{"class":2135},[288,63779,344],{"class":298},[288,63781,51564],{"class":403},[288,63783,51544],{"class":2135},[288,63785,344],{"class":298},[288,63787,51571],{"class":403},[288,63789,59300],{"class":298},[288,63791,63792,63794,63796,63799,63801],{"class":290,"line":1484},[288,63793,52317],{"class":298},[288,63795,51580],{"class":51473},[288,63797,63798],{"class":298},">tab栏切换\u003C\u002F",[288,63800,51580],{"class":51473},[288,63802,51480],{"class":298},[288,63804,63805,63807,63809],{"class":290,"line":1490},[288,63806,52317],{"class":298},[288,63808,5299],{"class":51473},[288,63810,51480],{"class":298},[288,63812,63813,63815],{"class":290,"line":1502},[288,63814,6576],{"class":51473},[288,63816,15745],{"class":298},[288,63818,63819,63821,63823,63825],{"class":290,"line":1784},[288,63820,54879],{"class":347},[288,63822,51610],{"class":298},[288,63824,490],{"class":347},[288,63826,1463],{"class":298},[288,63828,63829,63831,63833,63835],{"class":290,"line":1789},[288,63830,54868],{"class":347},[288,63832,51610],{"class":298},[288,63834,490],{"class":347},[288,63836,1463],{"class":298},[288,63838,63839],{"class":290,"line":1795},[288,63840,2359],{"class":298},[288,63842,63843],{"class":290,"line":1800},[288,63844,2572],{"emptyLinePlaceholder":217},[288,63846,63847,63850],{"class":290,"line":1814},[288,63848,63849],{"class":2135},"    .tab",[288,63851,15745],{"class":298},[288,63853,63854,63856,63858,63861,63863],{"class":290,"line":1819},[288,63855,54944],{"class":347},[288,63857,51610],{"class":298},[288,63859,63860],{"class":347},"590",[288,63862,51665],{"class":294},[288,63864,1463],{"class":298},[288,63866,63867,63869,63871,63874,63876],{"class":290,"line":1825},[288,63868,54958],{"class":347},[288,63870,51610],{"class":298},[288,63872,63873],{"class":347},"340",[288,63875,51665],{"class":294},[288,63877,1463],{"class":298},[288,63879,63880,63882,63884,63886,63888],{"class":290,"line":1846},[288,63881,54879],{"class":347},[288,63883,51610],{"class":298},[288,63885,997],{"class":347},[288,63887,51665],{"class":294},[288,63889,1463],{"class":298},[288,63891,63892,63894,63896,63898,63900,63902,63904],{"class":290,"line":1851},[288,63893,62150],{"class":347},[288,63895,51610],{"class":298},[288,63897,516],{"class":347},[288,63899,51665],{"class":294},[288,63901,51694],{"class":347},[288,63903,62417],{"class":347},[288,63905,1463],{"class":298},[288,63907,63908],{"class":290,"line":1865},[288,63909,2359],{"class":298},[288,63911,63912],{"class":290,"line":1870},[288,63913,2572],{"emptyLinePlaceholder":217},[288,63915,63916,63919],{"class":290,"line":1899},[288,63917,63918],{"class":2135},"    .tab-nav",[288,63920,15745],{"class":298},[288,63922,63923,63925,63927,63929,63931],{"class":290,"line":1904},[288,63924,54944],{"class":347},[288,63926,51610],{"class":298},[288,63928,608],{"class":347},[288,63930,625],{"class":294},[288,63932,1463],{"class":298},[288,63934,63935,63937,63939,63941,63943],{"class":290,"line":1921},[288,63936,54958],{"class":347},[288,63938,51610],{"class":298},[288,63940,1204],{"class":347},[288,63942,51665],{"class":294},[288,63944,1463],{"class":298},[288,63946,63947,63949,63951,63953,63955],{"class":290,"line":1926},[288,63948,57532],{"class":347},[288,63950,51610],{"class":298},[288,63952,1204],{"class":347},[288,63954,51665],{"class":294},[288,63956,1463],{"class":298},[288,63958,63959,63961,63963,63965],{"class":290,"line":1931},[288,63960,55182],{"class":347},[288,63962,51610],{"class":298},[288,63964,51650],{"class":347},[288,63966,1463],{"class":298},[288,63968,63969,63971,63973,63975],{"class":290,"line":1936},[288,63970,55193],{"class":347},[288,63972,51610],{"class":298},[288,63974,51841],{"class":347},[288,63976,1463],{"class":298},[288,63978,63979],{"class":290,"line":1950},[288,63980,2359],{"class":298},[288,63982,63983],{"class":290,"line":1955},[288,63984,2572],{"emptyLinePlaceholder":217},[288,63986,63987,63989,63992],{"class":290,"line":2749},[288,63988,63918],{"class":2135},[288,63990,63991],{"class":51473}," h3",[288,63993,15745],{"class":298},[288,63995,63996,63998,64000,64002,64004],{"class":290,"line":2763},[288,63997,55095],{"class":347},[288,63999,51610],{"class":298},[288,64001,1097],{"class":347},[288,64003,51665],{"class":294},[288,64005,1463],{"class":298},[288,64007,64008,64010,64012,64015],{"class":290,"line":2771},[288,64009,62507],{"class":347},[288,64011,51610],{"class":298},[288,64013,64014],{"class":347},"normal",[288,64016,1463],{"class":298},[288,64018,64019,64021,64023,64025,64027],{"class":290,"line":2776},[288,64020,62173],{"class":347},[288,64022,51610],{"class":298},[288,64024,997],{"class":347},[288,64026,51665],{"class":294},[288,64028,1463],{"class":298},[288,64030,64031],{"class":290,"line":2782},[288,64032,2359],{"class":298},[288,64034,64035],{"class":290,"line":2788},[288,64036,2572],{"emptyLinePlaceholder":217},[288,64038,64039,64041,64043],{"class":290,"line":2793},[288,64040,63918],{"class":2135},[288,64042,61465],{"class":51473},[288,64044,15745],{"class":298},[288,64046,64047,64049,64051,64053],{"class":290,"line":8121},[288,64048,54905],{"class":347},[288,64050,51610],{"class":298},[288,64052,54910],{"class":347},[288,64054,1463],{"class":298},[288,64056,64057,64059,64061,64063],{"class":290,"line":8145},[288,64058,55182],{"class":347},[288,64060,51610],{"class":298},[288,64062,51650],{"class":347},[288,64064,1463],{"class":298},[288,64066,64067,64069,64071,64073],{"class":290,"line":8150},[288,64068,55193],{"class":347},[288,64070,51610],{"class":298},[288,64072,51753],{"class":347},[288,64074,1463],{"class":298},[288,64076,64077],{"class":290,"line":8156},[288,64078,2359],{"class":298},[288,64080,64081],{"class":290,"line":8183},[288,64082,2572],{"emptyLinePlaceholder":217},[288,64084,64085,64087,64089,64091],{"class":290,"line":8188},[288,64086,63918],{"class":2135},[288,64088,61465],{"class":51473},[288,64090,55248],{"class":51473},[288,64092,15745],{"class":298},[288,64094,64095,64097,64099,64101,64103,64105],{"class":290,"line":8194},[288,64096,54879],{"class":347},[288,64098,51610],{"class":298},[288,64100,490],{"class":347},[288,64102,9123],{"class":347},[288,64104,51665],{"class":294},[288,64106,1463],{"class":298},[288,64108,64109,64111,64113,64115,64117],{"class":290,"line":8206},[288,64110,55095],{"class":347},[288,64112,51610],{"class":298},[288,64114,846],{"class":347},[288,64116,51665],{"class":294},[288,64118,1463],{"class":298},[288,64120,64121],{"class":290,"line":8218},[288,64122,2359],{"class":298},[288,64124,64125],{"class":290,"line":8230},[288,64126,2572],{"emptyLinePlaceholder":217},[288,64128,64129,64131,64133,64135,64137],{"class":290,"line":9889},[288,64130,63918],{"class":2135},[288,64132,61465],{"class":51473},[288,64134,55248],{"class":51473},[288,64136,1571],{"class":51473},[288,64138,15745],{"class":298},[288,64140,64141,64144,64146,64148],{"class":290,"line":9914},[288,64142,64143],{"class":347},"      text-decoration",[288,64145,51610],{"class":298},[288,64147,54910],{"class":347},[288,64149,1463],{"class":298},[288,64151,64152,64154,64156,64158,64160,64162,64165],{"class":290,"line":9937},[288,64153,62405],{"class":347},[288,64155,51610],{"class":298},[288,64157,376],{"class":347},[288,64159,51665],{"class":294},[288,64161,51694],{"class":347},[288,64163,64164],{"class":347}," transparent",[288,64166,1463],{"class":298},[288,64168,64169,64171,64173,64175],{"class":290,"line":9961},[288,64170,57589],{"class":347},[288,64172,51610],{"class":298},[288,64174,62542],{"class":347},[288,64176,1463],{"class":298},[288,64178,64179],{"class":290,"line":9966},[288,64180,2359],{"class":298},[288,64182,64183],{"class":290,"line":9971},[288,64184,2572],{"emptyLinePlaceholder":217},[288,64186,64187,64189,64191,64193,64195,64198],{"class":290,"line":9976},[288,64188,63918],{"class":2135},[288,64190,61465],{"class":51473},[288,64192,55248],{"class":51473},[288,64194,1571],{"class":51473},[288,64196,64197],{"class":2135},".active",[288,64199,15745],{"class":298},[288,64201,64202,64204,64206,64209],{"class":290,"line":9985},[288,64203,61964],{"class":347},[288,64205,51610],{"class":298},[288,64207,64208],{"class":347},"#e1251b",[288,64210,1463],{"class":298},[288,64212,64213,64215,64217,64219],{"class":290,"line":9990},[288,64214,57589],{"class":347},[288,64216,51610],{"class":298},[288,64218,64208],{"class":347},[288,64220,1463],{"class":298},[288,64222,64223],{"class":290,"line":9996},[288,64224,2359],{"class":298},[288,64226,64227],{"class":290,"line":10017},[288,64228,2572],{"emptyLinePlaceholder":217},[288,64230,64231,64234],{"class":290,"line":10023},[288,64232,64233],{"class":2135},"    .tab-content",[288,64235,15745],{"class":298},[288,64237,64238,64240,64242,64244,64247,64249],{"class":290,"line":10037},[288,64239,54868],{"class":347},[288,64241,51610],{"class":298},[288,64243,490],{"class":347},[288,64245,64246],{"class":347}," 16",[288,64248,51665],{"class":294},[288,64250,1463],{"class":298},[288,64252,64253],{"class":290,"line":10043},[288,64254,2359],{"class":298},[288,64256,64257],{"class":290,"line":10070},[288,64258,2572],{"emptyLinePlaceholder":217},[288,64260,64261,64263,64265],{"class":290,"line":10079},[288,64262,64233],{"class":2135},[288,64264,62347],{"class":2135},[288,64266,15745],{"class":298},[288,64268,64269,64271,64273,64275],{"class":290,"line":10085},[288,64270,55182],{"class":347},[288,64272,51610],{"class":298},[288,64274,54910],{"class":347},[288,64276,1463],{"class":298},[288,64278,64279],{"class":290,"line":10093},[288,64280,2359],{"class":298},[288,64282,64283],{"class":290,"line":10098},[288,64284,2572],{"emptyLinePlaceholder":217},[288,64286,64287,64289,64292],{"class":290,"line":16777},[288,64288,64233],{"class":2135},[288,64290,64291],{"class":2135}," .item.active",[288,64293,15745],{"class":298},[288,64295,64296,64298,64300,64302],{"class":290,"line":16783},[288,64297,55182],{"class":347},[288,64299,51610],{"class":298},[288,64301,61042],{"class":347},[288,64303,1463],{"class":298},[288,64305,64306],{"class":290,"line":16806},[288,64307,2359],{"class":298},[288,64309,64310,64312,64314],{"class":290,"line":16812},[288,64311,52590],{"class":298},[288,64313,5299],{"class":51473},[288,64315,51480],{"class":298},[288,64317,64318,64320,64322],{"class":290,"line":16835},[288,64319,51958],{"class":298},[288,64321,51507],{"class":51473},[288,64323,51480],{"class":298},[288,64325,64326],{"class":290,"line":16849},[288,64327,2572],{"emptyLinePlaceholder":217},[288,64329,64330,64332,64334],{"class":290,"line":16869},[288,64331,1207],{"class":298},[288,64333,51973],{"class":51473},[288,64335,51480],{"class":298},[288,64337,64338,64340,64342,64344,64346,64349],{"class":290,"line":16875},[288,64339,52317],{"class":298},[288,64341,51784],{"class":51473},[288,64343,53659],{"class":2135},[288,64345,344],{"class":298},[288,64347,64348],{"class":403},"\"tab\"",[288,64350,51480],{"class":298},[288,64352,64353,64355,64357,64359,64361,64364],{"class":290,"line":16886},[288,64354,51514],{"class":298},[288,64356,51784],{"class":51473},[288,64358,53659],{"class":2135},[288,64360,344],{"class":298},[288,64362,64363],{"class":403},"\"tab-nav\"",[288,64365,51480],{"class":298},[288,64367,64368,64370,64372,64375,64377],{"class":290,"line":16909},[288,64369,55407],{"class":298},[288,64371,260],{"class":51473},[288,64373,64374],{"class":298},">每日特价\u003C\u002F",[288,64376,260],{"class":51473},[288,64378,51480],{"class":298},[288,64380,64381,64383,64385],{"class":290,"line":16931},[288,64382,55407],{"class":298},[288,64384,1304],{"class":51473},[288,64386,51480],{"class":298},[288,64388,64389,64391,64393,64395,64397,64399,64401,64403,64405,64407,64410,64413,64415,64417,64419],{"class":290,"line":16936},[288,64390,55475],{"class":298},[288,64392,246],{"class":51473},[288,64394,61225],{"class":298},[288,64396,104],{"class":51473},[288,64398,53659],{"class":2135},[288,64400,344],{"class":298},[288,64402,59879],{"class":403},[288,64404,61230],{"class":2135},[288,64406,344],{"class":298},[288,64408,64409],{"class":403},"\"javascript:;\"",[288,64411,64412],{"class":298},">精选\u003C\u002F",[288,64414,104],{"class":51473},[288,64416,55487],{"class":298},[288,64418,246],{"class":51473},[288,64420,51480],{"class":298},[288,64422,64423,64425,64427,64429,64431,64433,64435,64437,64440,64442,64444,64446],{"class":290,"line":16942},[288,64424,55475],{"class":298},[288,64426,246],{"class":51473},[288,64428,61225],{"class":298},[288,64430,104],{"class":51473},[288,64432,61230],{"class":2135},[288,64434,344],{"class":298},[288,64436,64409],{"class":403},[288,64438,64439],{"class":298},">美食\u003C\u002F",[288,64441,104],{"class":51473},[288,64443,55487],{"class":298},[288,64445,246],{"class":51473},[288,64447,51480],{"class":298},[288,64449,64450,64452,64454,64456,64458,64460,64462,64464,64467,64469,64471,64473],{"class":290,"line":16956},[288,64451,55475],{"class":298},[288,64453,246],{"class":51473},[288,64455,61225],{"class":298},[288,64457,104],{"class":51473},[288,64459,61230],{"class":2135},[288,64461,344],{"class":298},[288,64463,64409],{"class":403},[288,64465,64466],{"class":298},">百货\u003C\u002F",[288,64468,104],{"class":51473},[288,64470,55487],{"class":298},[288,64472,246],{"class":51473},[288,64474,51480],{"class":298},[288,64476,64477,64479,64481,64483,64485,64487,64489,64491,64494,64496,64498,64500],{"class":290,"line":16969},[288,64478,55475],{"class":298},[288,64480,246],{"class":51473},[288,64482,61225],{"class":298},[288,64484,104],{"class":51473},[288,64486,61230],{"class":2135},[288,64488,344],{"class":298},[288,64490,64409],{"class":403},[288,64492,64493],{"class":298},">个护\u003C\u002F",[288,64495,104],{"class":51473},[288,64497,55487],{"class":298},[288,64499,246],{"class":51473},[288,64501,51480],{"class":298},[288,64503,64504,64506,64508,64510,64512,64514,64516,64518,64521,64523,64525,64527],{"class":290,"line":16974},[288,64505,55475],{"class":298},[288,64507,246],{"class":51473},[288,64509,61225],{"class":298},[288,64511,104],{"class":51473},[288,64513,61230],{"class":2135},[288,64515,344],{"class":298},[288,64517,64409],{"class":403},[288,64519,64520],{"class":298},">预告\u003C\u002F",[288,64522,104],{"class":51473},[288,64524,55487],{"class":298},[288,64526,246],{"class":51473},[288,64528,51480],{"class":298},[288,64530,64531,64533,64535],{"class":290,"line":16988},[288,64532,55580],{"class":298},[288,64534,1304],{"class":51473},[288,64536,51480],{"class":298},[288,64538,64539,64541,64543],{"class":290,"line":16993},[288,64540,51949],{"class":298},[288,64542,51784],{"class":51473},[288,64544,51480],{"class":298},[288,64546,64547,64549,64551,64553,64555,64558],{"class":290,"line":16999},[288,64548,51514],{"class":298},[288,64550,51784],{"class":51473},[288,64552,53659],{"class":2135},[288,64554,344],{"class":298},[288,64556,64557],{"class":403},"\"tab-content\"",[288,64559,51480],{"class":298},[288,64561,64562,64564,64566,64568,64570,64573,64575,64577,64579,64581,64584,64586,64588,64590,64593,64595],{"class":290,"line":17004},[288,64563,55407],{"class":298},[288,64565,51784],{"class":51473},[288,64567,53659],{"class":2135},[288,64569,344],{"class":298},[288,64571,64572],{"class":403},"\"item active\"",[288,64574,61225],{"class":298},[288,64576,200],{"class":51473},[288,64578,55412],{"class":2135},[288,64580,344],{"class":298},[288,64582,64583],{"class":403},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[288,64585,55420],{"class":2135},[288,64587,344],{"class":298},[288,64589,7825],{"class":403},[288,64591,64592],{"class":298}," \u002F>\u003C\u002F",[288,64594,51784],{"class":51473},[288,64596,51480],{"class":298},[288,64598,64599,64601,64603,64605,64607,64609,64611,64613,64615,64617,64620,64622,64624,64626,64628,64630],{"class":290,"line":17018},[288,64600,55407],{"class":298},[288,64602,51784],{"class":51473},[288,64604,53659],{"class":2135},[288,64606,344],{"class":298},[288,64608,62796],{"class":403},[288,64610,61225],{"class":298},[288,64612,200],{"class":51473},[288,64614,55412],{"class":2135},[288,64616,344],{"class":298},[288,64618,64619],{"class":403},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[288,64621,55420],{"class":2135},[288,64623,344],{"class":298},[288,64625,7825],{"class":403},[288,64627,64592],{"class":298},[288,64629,51784],{"class":51473},[288,64631,51480],{"class":298},[288,64633,64634,64636,64638,64640,64642,64644,64646,64648,64650,64652,64655,64657,64659,64661,64663,64665],{"class":290,"line":17023},[288,64635,55407],{"class":298},[288,64637,51784],{"class":51473},[288,64639,53659],{"class":2135},[288,64641,344],{"class":298},[288,64643,62796],{"class":403},[288,64645,61225],{"class":298},[288,64647,200],{"class":51473},[288,64649,55412],{"class":2135},[288,64651,344],{"class":298},[288,64653,64654],{"class":403},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[288,64656,55420],{"class":2135},[288,64658,344],{"class":298},[288,64660,7825],{"class":403},[288,64662,64592],{"class":298},[288,64664,51784],{"class":51473},[288,64666,51480],{"class":298},[288,64668,64669,64671,64673,64675,64677,64679,64681,64683,64685,64687,64690,64692,64694,64696,64698,64700],{"class":290,"line":17028},[288,64670,55407],{"class":298},[288,64672,51784],{"class":51473},[288,64674,53659],{"class":2135},[288,64676,344],{"class":298},[288,64678,62796],{"class":403},[288,64680,61225],{"class":298},[288,64682,200],{"class":51473},[288,64684,55412],{"class":2135},[288,64686,344],{"class":298},[288,64688,64689],{"class":403},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[288,64691,55420],{"class":2135},[288,64693,344],{"class":298},[288,64695,7825],{"class":403},[288,64697,64592],{"class":298},[288,64699,51784],{"class":51473},[288,64701,51480],{"class":298},[288,64703,64704,64706,64708,64710,64712,64714,64716,64718,64720,64722,64725,64727,64729,64731,64733,64735],{"class":290,"line":17042},[288,64705,55407],{"class":298},[288,64707,51784],{"class":51473},[288,64709,53659],{"class":2135},[288,64711,344],{"class":298},[288,64713,62796],{"class":403},[288,64715,61225],{"class":298},[288,64717,200],{"class":51473},[288,64719,55412],{"class":2135},[288,64721,344],{"class":298},[288,64723,64724],{"class":403},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[288,64726,55420],{"class":2135},[288,64728,344],{"class":298},[288,64730,7825],{"class":403},[288,64732,64592],{"class":298},[288,64734,51784],{"class":51473},[288,64736,51480],{"class":298},[288,64738,64739,64741,64743],{"class":290,"line":17054},[288,64740,51949],{"class":298},[288,64742,51784],{"class":51473},[288,64744,51480],{"class":298},[288,64746,64747,64749,64751],{"class":290,"line":17059},[288,64748,52590],{"class":298},[288,64750,51784],{"class":51473},[288,64752,51480],{"class":298},[288,64754,64755,64757,64759],{"class":290,"line":17072},[288,64756,52317],{"class":298},[288,64758,51986],{"class":51473},[288,64760,51480],{"class":298},[288,64762,64763],{"class":290,"line":17077},[288,64764,64765],{"class":357},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[288,64767,64768],{"class":290,"line":17082},[288,64769,64770],{"class":357},"    \u002F\u002F 1.1 获取 a 元素 \n",[288,64772,64773,64775,64778,64780,64782,64784,64786,64789],{"class":290,"line":17087},[288,64774,11394],{"class":294},[288,64776,64777],{"class":347}," as",[288,64779,13737],{"class":294},[288,64781,54569],{"class":298},[288,64783,55854],{"class":2135},[288,64785,299],{"class":298},[288,64787,64788],{"class":403},"'.tab-nav a'",[288,64790,305],{"class":298},[288,64792,64793],{"class":290,"line":17100},[288,64794,64795],{"class":357},"    \u002F\u002F console.log(as) \n",[288,64797,64798,64800,64802,64804,64806,64808,64810,64812,64814,64817,64819,64821,64823],{"class":290,"line":17105},[288,64799,3373],{"class":294},[288,64801,1830],{"class":298},[288,64803,52020],{"class":294},[288,64805,9611],{"class":298},[288,64807,344],{"class":294},[288,64809,4265],{"class":347},[288,64811,9618],{"class":298},[288,64813,1207],{"class":294},[288,64815,64816],{"class":298}," as.",[288,64818,52141],{"class":347},[288,64820,3386],{"class":298},[288,64822,2464],{"class":294},[288,64824,12615],{"class":298},[288,64826,64827],{"class":290,"line":32806},[288,64828,64829],{"class":357},"      \u002F\u002F console.log(as[i])\n",[288,64831,64832],{"class":290,"line":32812},[288,64833,64834],{"class":357},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[288,64836,64837,64840,64842,64844,64847,64849,64851],{"class":290,"line":32818},[288,64838,64839],{"class":298},"      as[i].",[288,64841,57986],{"class":2135},[288,64843,299],{"class":298},[288,64845,64846],{"class":403},"'mouseenter'",[288,64848,12608],{"class":298},[288,64850,54622],{"class":294},[288,64852,54625],{"class":298},[288,64854,64855],{"class":290,"line":32824},[288,64856,64857],{"class":357},"        \u002F\u002F console.log('鼠标经过')\n",[288,64859,64860],{"class":290,"line":32830},[288,64861,64862],{"class":357},"        \u002F\u002F 排他思想  \n",[288,64864,64865],{"class":290,"line":32841},[288,64866,64867],{"class":357},"        \u002F\u002F 干掉别人 移除类active\n",[288,64869,64870,64872,64874,64876,64879,64881,64883,64885,64888],{"class":290,"line":32847},[288,64871,52098],{"class":298},[288,64873,54572],{"class":2135},[288,64875,299],{"class":298},[288,64877,64878],{"class":403},"'.tab-nav .active'",[288,64880,57176],{"class":298},[288,64882,57179],{"class":2135},[288,64884,299],{"class":298},[288,64886,64887],{"class":403},"'active'",[288,64889,305],{"class":298},[288,64891,64892],{"class":290,"line":32867},[288,64893,64894],{"class":357},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[288,64896,64897,64900,64903,64905,64907,64909],{"class":290,"line":32873},[288,64898,64899],{"class":347},"        this",[288,64901,64902],{"class":298},".classList.",[288,64904,5507],{"class":2135},[288,64906,299],{"class":298},[288,64908,64887],{"class":403},[288,64910,305],{"class":298},[288,64912,64913],{"class":290,"line":32884},[288,64914,2572],{"emptyLinePlaceholder":217},[288,64916,64917],{"class":290,"line":32890},[288,64918,64919],{"class":357},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[288,64921,64922],{"class":290,"line":32896},[288,64923,64924],{"class":357},"        \u002F\u002F 干掉别人\n",[288,64926,64927,64929,64931,64933,64936,64938,64940,64942,64944],{"class":290,"line":32902},[288,64928,52098],{"class":298},[288,64930,54572],{"class":2135},[288,64932,299],{"class":298},[288,64934,64935],{"class":403},"'.tab-content .active'",[288,64937,57176],{"class":298},[288,64939,57179],{"class":2135},[288,64941,299],{"class":298},[288,64943,64887],{"class":403},[288,64945,305],{"class":298},[288,64947,64948],{"class":290,"line":32908},[288,64949,64950],{"class":357},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[288,64952,64953,64955,64957,64959,64962,64964,64966,64968,64970,64972,64974,64976,64978],{"class":290,"line":32914},[288,64954,52098],{"class":298},[288,64956,54572],{"class":2135},[288,64958,299],{"class":298},[288,64960,64961],{"class":403},"`.tab-content .item:nth-child(${",[288,64963,738],{"class":298},[288,64965,45739],{"class":294},[288,64967,25291],{"class":347},[288,64969,57205],{"class":403},[288,64971,57176],{"class":298},[288,64973,5507],{"class":2135},[288,64975,299],{"class":298},[288,64977,64887],{"class":403},[288,64979,305],{"class":298},[288,64981,64982],{"class":290,"line":32920},[288,64983,2572],{"emptyLinePlaceholder":217},[288,64985,64986],{"class":290,"line":32926},[288,64987,64988],{"class":298},"      })\n",[288,64990,64991],{"class":290,"line":32946},[288,64992,2359],{"class":298},[288,64994,64995,64997,64999],{"class":290,"line":32952},[288,64996,52590],{"class":298},[288,64998,51986],{"class":51473},[288,65000,51480],{"class":298},[288,65002,65003,65005,65007],{"class":290,"line":32968},[288,65004,51958],{"class":298},[288,65006,51973],{"class":51473},[288,65008,51480],{"class":298},[288,65010,65011],{"class":290,"line":32974},[288,65012,2572],{"emptyLinePlaceholder":217},[288,65014,65015,65017,65019],{"class":290,"line":32988},[288,65016,51958],{"class":298},[288,65018,50808],{"class":51473},[288,65020,51480],{"class":298},[19,65022,65023],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65025,65026],{},"在监听事件中，this指向的就是他的调用者",[19,65028,65029],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65031,53893],{},[19,65033,65034],{},"(function () {",[19,65036,65037],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65039,65040],{},"list.addEventListener('click', function (e) {",[19,65042,65043],{},"if (e.target.tagName === 'A') {",[19,65045,65046],{},"\u002F\u002F 排他思想",[19,65048,65049],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65051,65052],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65054,65055],{},"\u002F\u002F console.log(old);",[19,65057,65058],{},"\u002F\u002F 判断",[19,65060,65061],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65063,65064],{},"if (old) old.classList.remove('active')",[19,65066,65067],{},"e.target.classList.add('active')",[19,65069,1243],{},[19,65071,52637],{},[19,65073,65074],{},"})();",[260,65076,65078],{"id":65077},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[280,65080,65082],{"className":50806,"code":65081,"language":50808,"meta":205,"style":205},"\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",[25,65083,65084,65094,65098,65106,65110,65124,65138,65150,65158,65164,65174,65184,65188,65192,65199,65211,65222,65239,65252,65266,65276,65280,65284,65291,65302,65320,65330,65342,65346,65350,65357,65374,65385,65397,65401,65405,65412,65424,65428,65436,65444,65448,65456,65464,65472,65487,65531,65539,65552,65565,65578,65586,65594,65602,65630,65638,65650,65663,65676,65684,65692,65700,65726,65734,65747,65759,65772,65780,65788,65796,65822,65830,65843,65855,65868,65876,65884,65892,65897,65917,65922,65942,65947,65964,65969,65977,65982,66011,66024,66028,66032,66037,66041,66069,66074,66091,66096,66101,66106,66111,66137,66141,66145,66153,66161,66165],{"__ignoreMap":205},[288,65085,65086,65088,65090,65092],{"class":290,"line":291},[288,65087,51470],{"class":298},[288,65089,51474],{"class":51473},[288,65091,51477],{"class":2135},[288,65093,51480],{"class":298},[288,65095,65096],{"class":290,"line":206},[288,65097,2572],{"emptyLinePlaceholder":217},[288,65099,65100,65102,65104],{"class":290,"line":1352},[288,65101,1207],{"class":298},[288,65103,50808],{"class":51473},[288,65105,51480],{"class":298},[288,65107,65108],{"class":290,"line":1367},[288,65109,2572],{"emptyLinePlaceholder":217},[288,65111,65112,65114,65116,65118,65120,65122],{"class":290,"line":1373},[288,65113,1207],{"class":298},[288,65115,51507],{"class":51473},[288,65117,51489],{"class":2135},[288,65119,344],{"class":298},[288,65121,51494],{"class":403},[288,65123,51480],{"class":298},[288,65125,65126,65128,65130,65132,65134,65136],{"class":290,"line":1387},[288,65127,52317],{"class":298},[288,65129,51517],{"class":51473},[288,65131,51520],{"class":2135},[288,65133,344],{"class":298},[288,65135,51525],{"class":403},[288,65137,51480],{"class":298},[288,65139,65140,65142,65144,65146,65148],{"class":290,"line":1393},[288,65141,52317],{"class":298},[288,65143,51580],{"class":51473},[288,65145,55487],{"class":298},[288,65147,51580],{"class":51473},[288,65149,51480],{"class":298},[288,65151,65152,65154,65156],{"class":290,"line":1484},[288,65153,52317],{"class":298},[288,65155,5299],{"class":51473},[288,65157,51480],{"class":298},[288,65159,65160,65162],{"class":290,"line":1490},[288,65161,6576],{"class":51473},[288,65163,15745],{"class":298},[288,65165,65166,65168,65170,65172],{"class":290,"line":1502},[288,65167,54879],{"class":347},[288,65169,51610],{"class":298},[288,65171,490],{"class":347},[288,65173,1463],{"class":298},[288,65175,65176,65178,65180,65182],{"class":290,"line":1784},[288,65177,54868],{"class":347},[288,65179,51610],{"class":298},[288,65181,490],{"class":347},[288,65183,1463],{"class":298},[288,65185,65186],{"class":290,"line":1789},[288,65187,2359],{"class":298},[288,65189,65190],{"class":290,"line":1795},[288,65191,2572],{"emptyLinePlaceholder":217},[288,65193,65194,65197],{"class":290,"line":1800},[288,65195,65196],{"class":51473},"    table",[288,65198,15745],{"class":298},[288,65200,65201,65204,65206,65209],{"class":290,"line":1814},[288,65202,65203],{"class":347},"      border-collapse",[288,65205,51610],{"class":298},[288,65207,65208],{"class":347},"collapse",[288,65210,1463],{"class":298},[288,65212,65213,65216,65218,65220],{"class":290,"line":1819},[288,65214,65215],{"class":347},"      border-spacing",[288,65217,51610],{"class":298},[288,65219,490],{"class":347},[288,65221,1463],{"class":298},[288,65223,65224,65226,65228,65230,65232,65234,65237],{"class":290,"line":1825},[288,65225,62150],{"class":347},[288,65227,51610],{"class":298},[288,65229,516],{"class":347},[288,65231,51665],{"class":294},[288,65233,51694],{"class":347},[288,65235,65236],{"class":347}," #c0c0c0",[288,65238,1463],{"class":298},[288,65240,65241,65243,65245,65248,65250],{"class":290,"line":1846},[288,65242,54944],{"class":347},[288,65244,51610],{"class":298},[288,65246,65247],{"class":347},"500",[288,65249,51665],{"class":294},[288,65251,1463],{"class":298},[288,65253,65254,65256,65258,65260,65262,65264],{"class":290,"line":1851},[288,65255,54879],{"class":347},[288,65257,51610],{"class":298},[288,65259,608],{"class":347},[288,65261,51665],{"class":294},[288,65263,51729],{"class":347},[288,65265,1463],{"class":298},[288,65267,65268,65270,65272,65274],{"class":290,"line":1865},[288,65269,57459],{"class":347},[288,65271,51610],{"class":298},[288,65273,51765],{"class":347},[288,65275,1463],{"class":298},[288,65277,65278],{"class":290,"line":1870},[288,65279,2359],{"class":298},[288,65281,65282],{"class":290,"line":1899},[288,65283,2572],{"emptyLinePlaceholder":217},[288,65285,65286,65289],{"class":290,"line":1904},[288,65287,65288],{"class":51473},"    th",[288,65290,15745],{"class":298},[288,65292,65293,65295,65297,65300],{"class":290,"line":1921},[288,65294,55057],{"class":347},[288,65296,51610],{"class":298},[288,65298,65299],{"class":347},"#09c",[288,65301,1463],{"class":298},[288,65303,65304,65307,65309,65311,65313,65315,65318],{"class":290,"line":1926},[288,65305,65306],{"class":347},"      font",[288,65308,51610],{"class":298},[288,65310,62512],{"class":347},[288,65312,64246],{"class":347},[288,65314,51665],{"class":294},[288,65316,65317],{"class":403}," \"微软雅黑\"",[288,65319,1463],{"class":298},[288,65321,65322,65324,65326,65328],{"class":290,"line":1931},[288,65323,57589],{"class":347},[288,65325,51610],{"class":298},[288,65327,61015],{"class":347},[288,65329,1463],{"class":298},[288,65331,65332,65334,65336,65338,65340],{"class":290,"line":1936},[288,65333,54958],{"class":347},[288,65335,51610],{"class":298},[288,65337,1097],{"class":347},[288,65339,51665],{"class":294},[288,65341,1463],{"class":298},[288,65343,65344],{"class":290,"line":1950},[288,65345,2359],{"class":298},[288,65347,65348],{"class":290,"line":1955},[288,65349,2572],{"emptyLinePlaceholder":217},[288,65351,65352,65355],{"class":290,"line":2749},[288,65353,65354],{"class":51473},"    td",[288,65356,15745],{"class":298},[288,65358,65359,65361,65363,65365,65367,65369,65372],{"class":290,"line":2763},[288,65360,62150],{"class":347},[288,65362,51610],{"class":298},[288,65364,516],{"class":347},[288,65366,51665],{"class":294},[288,65368,51694],{"class":347},[288,65370,65371],{"class":347}," #d0d0d0",[288,65373,1463],{"class":298},[288,65375,65376,65378,65380,65383],{"class":290,"line":2771},[288,65377,57589],{"class":347},[288,65379,51610],{"class":298},[288,65381,65382],{"class":347},"#404060",[288,65384,1463],{"class":298},[288,65386,65387,65389,65391,65393,65395],{"class":290,"line":2776},[288,65388,54868],{"class":347},[288,65390,51610],{"class":298},[288,65392,743],{"class":347},[288,65394,51665],{"class":294},[288,65396,1463],{"class":298},[288,65398,65399],{"class":290,"line":2782},[288,65400,2359],{"class":298},[288,65402,65403],{"class":290,"line":2788},[288,65404,2572],{"emptyLinePlaceholder":217},[288,65406,65407,65410],{"class":290,"line":2793},[288,65408,65409],{"class":2135},"    .allCheck",[288,65411,15745],{"class":298},[288,65413,65414,65416,65418,65420,65422],{"class":290,"line":8121},[288,65415,54944],{"class":347},[288,65417,51610],{"class":298},[288,65419,909],{"class":347},[288,65421,51665],{"class":294},[288,65423,1463],{"class":298},[288,65425,65426],{"class":290,"line":8145},[288,65427,2359],{"class":298},[288,65429,65430,65432,65434],{"class":290,"line":8150},[288,65431,52590],{"class":298},[288,65433,5299],{"class":51473},[288,65435,51480],{"class":298},[288,65437,65438,65440,65442],{"class":290,"line":8156},[288,65439,51958],{"class":298},[288,65441,51507],{"class":51473},[288,65443,51480],{"class":298},[288,65445,65446],{"class":290,"line":8183},[288,65447,2572],{"emptyLinePlaceholder":217},[288,65449,65450,65452,65454],{"class":290,"line":8188},[288,65451,1207],{"class":298},[288,65453,51973],{"class":51473},[288,65455,51480],{"class":298},[288,65457,65458,65460,65462],{"class":290,"line":8194},[288,65459,52317],{"class":298},[288,65461,436],{"class":51473},[288,65463,51480],{"class":298},[288,65465,65466,65468,65470],{"class":290,"line":8206},[288,65467,51514],{"class":298},[288,65469,442],{"class":51473},[288,65471,51480],{"class":298},[288,65473,65474,65476,65478,65480,65482,65485],{"class":290,"line":8218},[288,65475,55407],{"class":298},[288,65477,445],{"class":51473},[288,65479,53659],{"class":2135},[288,65481,344],{"class":298},[288,65483,65484],{"class":403},"\"allCheck\"",[288,65486,51480],{"class":298},[288,65488,65489,65491,65493,65495,65497,65499,65501,65503,65505,65507,65509,65512,65515,65517,65519,65521,65524,65527,65529],{"class":290,"line":8230},[288,65490,55475],{"class":298},[288,65492,53994],{"class":51473},[288,65494,53997],{"class":2135},[288,65496,344],{"class":298},[288,65498,54002],{"class":403},[288,65500,15093],{"class":2135},[288,65502,344],{"class":298},[288,65504,7825],{"class":403},[288,65506,15132],{"class":2135},[288,65508,344],{"class":298},[288,65510,65511],{"class":403},"\"checkAll\"",[288,65513,65514],{"class":298},"> \u003C",[288,65516,288],{"class":51473},[288,65518,53659],{"class":2135},[288,65520,344],{"class":298},[288,65522,65523],{"class":403},"\"all\"",[288,65525,65526],{"class":298},">全选\u003C\u002F",[288,65528,288],{"class":51473},[288,65530,51480],{"class":298},[288,65532,65533,65535,65537],{"class":290,"line":9889},[288,65534,55580],{"class":298},[288,65536,445],{"class":51473},[288,65538,51480],{"class":298},[288,65540,65541,65543,65545,65548,65550],{"class":290,"line":9914},[288,65542,55407],{"class":298},[288,65544,445],{"class":51473},[288,65546,65547],{"class":298},">商品\u003C\u002F",[288,65549,445],{"class":51473},[288,65551,51480],{"class":298},[288,65553,65554,65556,65558,65561,65563],{"class":290,"line":9937},[288,65555,55407],{"class":298},[288,65557,445],{"class":51473},[288,65559,65560],{"class":298},">商家\u003C\u002F",[288,65562,445],{"class":51473},[288,65564,51480],{"class":298},[288,65566,65567,65569,65571,65574,65576],{"class":290,"line":9961},[288,65568,55407],{"class":298},[288,65570,445],{"class":51473},[288,65572,65573],{"class":298},">价格\u003C\u002F",[288,65575,445],{"class":51473},[288,65577,51480],{"class":298},[288,65579,65580,65582,65584],{"class":290,"line":9966},[288,65581,51949],{"class":298},[288,65583,442],{"class":51473},[288,65585,51480],{"class":298},[288,65587,65588,65590,65592],{"class":290,"line":9971},[288,65589,51514],{"class":298},[288,65591,442],{"class":51473},[288,65593,51480],{"class":298},[288,65595,65596,65598,65600],{"class":290,"line":9976},[288,65597,55407],{"class":298},[288,65599,488],{"class":51473},[288,65601,51480],{"class":298},[288,65603,65604,65606,65608,65610,65612,65614,65616,65618,65621,65623,65625,65628],{"class":290,"line":9985},[288,65605,55475],{"class":298},[288,65607,53994],{"class":51473},[288,65609,53997],{"class":2135},[288,65611,344],{"class":298},[288,65613,54002],{"class":403},[288,65615,15093],{"class":2135},[288,65617,344],{"class":298},[288,65619,65620],{"class":403},"\"check\"",[288,65622,53659],{"class":2135},[288,65624,344],{"class":298},[288,65626,65627],{"class":403},"\"ck\"",[288,65629,51480],{"class":298},[288,65631,65632,65634,65636],{"class":290,"line":9990},[288,65633,55580],{"class":298},[288,65635,488],{"class":51473},[288,65637,51480],{"class":298},[288,65639,65640,65642,65644,65646,65648],{"class":290,"line":9996},[288,65641,55407],{"class":298},[288,65643,488],{"class":51473},[288,65645,61346],{"class":298},[288,65647,488],{"class":51473},[288,65649,51480],{"class":298},[288,65651,65652,65654,65656,65659,65661],{"class":290,"line":10017},[288,65653,55407],{"class":298},[288,65655,488],{"class":51473},[288,65657,65658],{"class":298},">小米\u003C\u002F",[288,65660,488],{"class":51473},[288,65662,51480],{"class":298},[288,65664,65665,65667,65669,65672,65674],{"class":290,"line":10023},[288,65666,55407],{"class":298},[288,65668,488],{"class":51473},[288,65670,65671],{"class":298},">￥1999\u003C\u002F",[288,65673,488],{"class":51473},[288,65675,51480],{"class":298},[288,65677,65678,65680,65682],{"class":290,"line":10037},[288,65679,51949],{"class":298},[288,65681,442],{"class":51473},[288,65683,51480],{"class":298},[288,65685,65686,65688,65690],{"class":290,"line":10043},[288,65687,51514],{"class":298},[288,65689,442],{"class":51473},[288,65691,51480],{"class":298},[288,65693,65694,65696,65698],{"class":290,"line":10070},[288,65695,55407],{"class":298},[288,65697,488],{"class":51473},[288,65699,51480],{"class":298},[288,65701,65702,65704,65706,65708,65710,65712,65714,65716,65718,65720,65722,65724],{"class":290,"line":10079},[288,65703,55475],{"class":298},[288,65705,53994],{"class":51473},[288,65707,53997],{"class":2135},[288,65709,344],{"class":298},[288,65711,54002],{"class":403},[288,65713,15093],{"class":2135},[288,65715,344],{"class":298},[288,65717,65620],{"class":403},[288,65719,53659],{"class":2135},[288,65721,344],{"class":298},[288,65723,65627],{"class":403},[288,65725,51480],{"class":298},[288,65727,65728,65730,65732],{"class":290,"line":10085},[288,65729,55580],{"class":298},[288,65731,488],{"class":51473},[288,65733,51480],{"class":298},[288,65735,65736,65738,65740,65743,65745],{"class":290,"line":10093},[288,65737,55407],{"class":298},[288,65739,488],{"class":51473},[288,65741,65742],{"class":298},">小米净水器\u003C\u002F",[288,65744,488],{"class":51473},[288,65746,51480],{"class":298},[288,65748,65749,65751,65753,65755,65757],{"class":290,"line":10098},[288,65750,55407],{"class":298},[288,65752,488],{"class":51473},[288,65754,65658],{"class":298},[288,65756,488],{"class":51473},[288,65758,51480],{"class":298},[288,65760,65761,65763,65765,65768,65770],{"class":290,"line":16777},[288,65762,55407],{"class":298},[288,65764,488],{"class":51473},[288,65766,65767],{"class":298},">￥4999\u003C\u002F",[288,65769,488],{"class":51473},[288,65771,51480],{"class":298},[288,65773,65774,65776,65778],{"class":290,"line":16783},[288,65775,51949],{"class":298},[288,65777,442],{"class":51473},[288,65779,51480],{"class":298},[288,65781,65782,65784,65786],{"class":290,"line":16806},[288,65783,51514],{"class":298},[288,65785,442],{"class":51473},[288,65787,51480],{"class":298},[288,65789,65790,65792,65794],{"class":290,"line":16812},[288,65791,55407],{"class":298},[288,65793,488],{"class":51473},[288,65795,51480],{"class":298},[288,65797,65798,65800,65802,65804,65806,65808,65810,65812,65814,65816,65818,65820],{"class":290,"line":16835},[288,65799,55475],{"class":298},[288,65801,53994],{"class":51473},[288,65803,53997],{"class":2135},[288,65805,344],{"class":298},[288,65807,54002],{"class":403},[288,65809,15093],{"class":2135},[288,65811,344],{"class":298},[288,65813,65620],{"class":403},[288,65815,53659],{"class":2135},[288,65817,344],{"class":298},[288,65819,65627],{"class":403},[288,65821,51480],{"class":298},[288,65823,65824,65826,65828],{"class":290,"line":16849},[288,65825,55580],{"class":298},[288,65827,488],{"class":51473},[288,65829,51480],{"class":298},[288,65831,65832,65834,65836,65839,65841],{"class":290,"line":16869},[288,65833,55407],{"class":298},[288,65835,488],{"class":51473},[288,65837,65838],{"class":298},">小米电视\u003C\u002F",[288,65840,488],{"class":51473},[288,65842,51480],{"class":298},[288,65844,65845,65847,65849,65851,65853],{"class":290,"line":16875},[288,65846,55407],{"class":298},[288,65848,488],{"class":51473},[288,65850,65658],{"class":298},[288,65852,488],{"class":51473},[288,65854,51480],{"class":298},[288,65856,65857,65859,65861,65864,65866],{"class":290,"line":16886},[288,65858,55407],{"class":298},[288,65860,488],{"class":51473},[288,65862,65863],{"class":298},">￥5999\u003C\u002F",[288,65865,488],{"class":51473},[288,65867,51480],{"class":298},[288,65869,65870,65872,65874],{"class":290,"line":16909},[288,65871,51949],{"class":298},[288,65873,442],{"class":51473},[288,65875,51480],{"class":298},[288,65877,65878,65880,65882],{"class":290,"line":16931},[288,65879,52590],{"class":298},[288,65881,436],{"class":51473},[288,65883,51480],{"class":298},[288,65885,65886,65888,65890],{"class":290,"line":16936},[288,65887,52317],{"class":298},[288,65889,51986],{"class":51473},[288,65891,51480],{"class":298},[288,65893,65894],{"class":290,"line":16942},[288,65895,65896],{"class":357},"    \u002F\u002F 1. 获取大复选框\n",[288,65898,65899,65901,65904,65906,65908,65910,65912,65915],{"class":290,"line":16956},[288,65900,11394],{"class":294},[288,65902,65903],{"class":347}," checkAll",[288,65905,13737],{"class":294},[288,65907,54569],{"class":298},[288,65909,54572],{"class":2135},[288,65911,299],{"class":298},[288,65913,65914],{"class":403},"'#checkAll'",[288,65916,305],{"class":298},[288,65918,65919],{"class":290,"line":16969},[288,65920,65921],{"class":357},"    \u002F\u002F 2. 获取所有的小复选框\n",[288,65923,65924,65926,65929,65931,65933,65935,65937,65940],{"class":290,"line":16974},[288,65925,11394],{"class":294},[288,65927,65928],{"class":347}," cks",[288,65930,13737],{"class":294},[288,65932,54569],{"class":298},[288,65934,55854],{"class":2135},[288,65936,299],{"class":298},[288,65938,65939],{"class":403},"'.ck'",[288,65941,305],{"class":298},[288,65943,65944],{"class":290,"line":16988},[288,65945,65946],{"class":357},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[288,65948,65949,65952,65954,65956,65958,65960,65962],{"class":290,"line":16993},[288,65950,65951],{"class":298},"    checkAll.",[288,65953,57986],{"class":2135},[288,65955,299],{"class":298},[288,65957,57991],{"class":403},[288,65959,12608],{"class":298},[288,65961,54622],{"class":294},[288,65963,54625],{"class":298},[288,65965,65966],{"class":290,"line":16999},[288,65967,65968],{"class":357},"      \u002F\u002F 得到当前大复选框的选中状态\n",[288,65970,65971,65974],{"class":290,"line":17004},[288,65972,65973],{"class":357},"      \u002F\u002F console.log(checkAll.checked)",[288,65975,65976],{"class":357},"  \u002F\u002F 得到 是 true 或者是 false\n",[288,65978,65979],{"class":290,"line":17018},[288,65980,65981],{"class":357},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[288,65983,65984,65986,65988,65990,65992,65994,65996,65998,66000,66003,66005,66007,66009],{"class":290,"line":17023},[288,65985,52457],{"class":294},[288,65987,1830],{"class":298},[288,65989,52020],{"class":294},[288,65991,9611],{"class":298},[288,65993,344],{"class":294},[288,65995,4265],{"class":347},[288,65997,9618],{"class":298},[288,65999,1207],{"class":294},[288,66001,66002],{"class":298}," cks.",[288,66004,52141],{"class":347},[288,66006,3386],{"class":298},[288,66008,2464],{"class":294},[288,66010,12615],{"class":298},[288,66012,66013,66016,66018,66021],{"class":290,"line":17028},[288,66014,66015],{"class":298},"        cks[i].checked ",[288,66017,344],{"class":294},[288,66019,66020],{"class":347}," this",[288,66022,66023],{"class":298},".checked\n",[288,66025,66026],{"class":290,"line":17042},[288,66027,52571],{"class":298},[288,66029,66030],{"class":290,"line":17054},[288,66031,33634],{"class":298},[288,66033,66034],{"class":290,"line":17059},[288,66035,66036],{"class":357},"    \u002F\u002F 5. 小复选框控制大复选框\n",[288,66038,66039],{"class":290,"line":17072},[288,66040,2572],{"emptyLinePlaceholder":217},[288,66042,66043,66045,66047,66049,66051,66053,66055,66057,66059,66061,66063,66065,66067],{"class":290,"line":17077},[288,66044,3373],{"class":294},[288,66046,1830],{"class":298},[288,66048,52020],{"class":294},[288,66050,9611],{"class":298},[288,66052,344],{"class":294},[288,66054,4265],{"class":347},[288,66056,9618],{"class":298},[288,66058,1207],{"class":294},[288,66060,66002],{"class":298},[288,66062,52141],{"class":347},[288,66064,3386],{"class":298},[288,66066,2464],{"class":294},[288,66068,12615],{"class":298},[288,66070,66071],{"class":290,"line":17082},[288,66072,66073],{"class":357},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[288,66075,66076,66079,66081,66083,66085,66087,66089],{"class":290,"line":17087},[288,66077,66078],{"class":298},"      cks[i].",[288,66080,57986],{"class":2135},[288,66082,299],{"class":298},[288,66084,57991],{"class":403},[288,66086,12608],{"class":298},[288,66088,54622],{"class":294},[288,66090,54625],{"class":298},[288,66092,66093],{"class":290,"line":17100},[288,66094,66095],{"class":357},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[288,66097,66098],{"class":290,"line":17105},[288,66099,66100],{"class":357},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[288,66102,66103],{"class":290,"line":32806},[288,66104,66105],{"class":357},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[288,66107,66108],{"class":290,"line":32812},[288,66109,66110],{"class":357},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[288,66112,66113,66116,66118,66120,66122,66124,66127,66129,66131,66133,66135],{"class":290,"line":32818},[288,66114,66115],{"class":298},"        checkAll.checked ",[288,66117,344],{"class":294},[288,66119,54569],{"class":298},[288,66121,55854],{"class":2135},[288,66123,299],{"class":298},[288,66125,66126],{"class":403},"'.ck:checked'",[288,66128,30999],{"class":298},[288,66130,52141],{"class":347},[288,66132,58079],{"class":294},[288,66134,66002],{"class":298},[288,66136,56004],{"class":347},[288,66138,66139],{"class":290,"line":32824},[288,66140,64988],{"class":298},[288,66142,66143],{"class":290,"line":32830},[288,66144,2359],{"class":298},[288,66146,66147,66149,66151],{"class":290,"line":32841},[288,66148,52590],{"class":298},[288,66150,51986],{"class":51473},[288,66152,51480],{"class":298},[288,66154,66155,66157,66159],{"class":290,"line":32847},[288,66156,51958],{"class":298},[288,66158,51973],{"class":51473},[288,66160,51480],{"class":298},[288,66162,66163],{"class":290,"line":32867},[288,66164,2572],{"emptyLinePlaceholder":217},[288,66166,66167,66169,66171],{"class":290,"line":32873},[288,66168,51958],{"class":298},[288,66170,50808],{"class":51473},[288,66172,51480],{"class":298},[19,66174,66175],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66177,66178],{},"用好之间比较得到的布尔值！！！",[19,66180,66181,66182,66185,66186,1830,66189,881,66191,66194],{},"在 JS 里访问的时候，",[25,66183,66184],{},"checkbox.checked"," 是一个 ",[448,66187,66188],{},"布尔值",[25,66190,1535],{},[25,66192,66193],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66196,66197,66198,66201,66202],{},"HTML 的 ",[25,66199,66200],{},"checked=\"checked\""," 只是 ",[448,66203,66204,66205,66208],{},"初始值；JS 的 ",[25,66206,66207],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66210,66211],{},"：checked是一个伪类选择器",[19,66213,66214],{},[200,66215],{"alt":205,"src":66216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66218,66219,66222],{},[66220,66221],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66224,66225],{},[200,66226],{"alt":205,"src":66227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66229,66231],{"id":66230},"_33-dom事件进阶","3.3 DOM事件进阶",[260,66233,66235],{"id":66234},"_331-事件流","3.3.1 事件流",[19,66237,66238],{},[200,66239],{"alt":205,"src":66240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22171,66242,66244],{"id":66243},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66246,66247],{},[200,66248],{"alt":205,"src":66249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[280,66251,66253],{"className":50806,"code":66252,"language":50808,"meta":205,"style":205},"\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",[25,66254,66255,66265,66279,66283,66291,66305,66325,66337,66345,66352,66364,66376,66386,66390,66394,66401,66413,66425,66435,66439,66447,66455,66459,66467,66482,66501,66509,66517,66537,66557,66573,66584,66592,66609,66620,66628,66645,66656,66664,66672,66680,66684],{"__ignoreMap":205},[288,66256,66257,66259,66261,66263],{"class":290,"line":291},[288,66258,51470],{"class":298},[288,66260,51474],{"class":51473},[288,66262,51477],{"class":2135},[288,66264,51480],{"class":298},[288,66266,66267,66269,66271,66273,66275,66277],{"class":290,"line":206},[288,66268,1207],{"class":298},[288,66270,50808],{"class":51473},[288,66272,51489],{"class":2135},[288,66274,344],{"class":298},[288,66276,51494],{"class":403},[288,66278,51480],{"class":298},[288,66280,66281],{"class":290,"line":1352},[288,66282,2572],{"emptyLinePlaceholder":217},[288,66284,66285,66287,66289],{"class":290,"line":1367},[288,66286,1207],{"class":298},[288,66288,51507],{"class":51473},[288,66290,51480],{"class":298},[288,66292,66293,66295,66297,66299,66301,66303],{"class":290,"line":1373},[288,66294,52317],{"class":298},[288,66296,51517],{"class":51473},[288,66298,51520],{"class":2135},[288,66300,344],{"class":298},[288,66302,51525],{"class":403},[288,66304,51480],{"class":298},[288,66306,66307,66309,66311,66313,66315,66317,66319,66321,66323],{"class":290,"line":1387},[288,66308,52317],{"class":298},[288,66310,51517],{"class":51473},[288,66312,15093],{"class":2135},[288,66314,344],{"class":298},[288,66316,51564],{"class":403},[288,66318,51544],{"class":2135},[288,66320,344],{"class":298},[288,66322,51571],{"class":403},[288,66324,51480],{"class":298},[288,66326,66327,66329,66331,66333,66335],{"class":290,"line":1393},[288,66328,52317],{"class":298},[288,66330,51580],{"class":51473},[288,66332,51583],{"class":298},[288,66334,51580],{"class":51473},[288,66336,51480],{"class":298},[288,66338,66339,66341,66343],{"class":290,"line":1484},[288,66340,52317],{"class":298},[288,66342,5299],{"class":51473},[288,66344,51480],{"class":298},[288,66346,66347,66350],{"class":290,"line":1490},[288,66348,66349],{"class":2135},"    .father",[288,66351,15745],{"class":298},[288,66353,66354,66356,66358,66360,66362],{"class":290,"line":1502},[288,66355,54944],{"class":347},[288,66357,51610],{"class":298},[288,66359,65247],{"class":347},[288,66361,51665],{"class":294},[288,66363,1463],{"class":298},[288,66365,66366,66368,66370,66372,66374],{"class":290,"line":1784},[288,66367,54958],{"class":347},[288,66369,51610],{"class":298},[288,66371,65247],{"class":347},[288,66373,51665],{"class":294},[288,66375,1463],{"class":298},[288,66377,66378,66380,66382,66384],{"class":290,"line":1789},[288,66379,55057],{"class":347},[288,66381,51610],{"class":298},[288,66383,51818],{"class":347},[288,66385,1463],{"class":298},[288,66387,66388],{"class":290,"line":1795},[288,66389,2359],{"class":298},[288,66391,66392],{"class":290,"line":1800},[288,66393,2572],{"emptyLinePlaceholder":217},[288,66395,66396,66399],{"class":290,"line":1814},[288,66397,66398],{"class":2135},"    .son",[288,66400,15745],{"class":298},[288,66402,66403,66405,66407,66409,66411],{"class":290,"line":1819},[288,66404,54944],{"class":347},[288,66406,51610],{"class":298},[288,66408,1894],{"class":347},[288,66410,51665],{"class":294},[288,66412,1463],{"class":298},[288,66414,66415,66417,66419,66421,66423],{"class":290,"line":1825},[288,66416,54958],{"class":347},[288,66418,51610],{"class":298},[288,66420,1894],{"class":347},[288,66422,51665],{"class":294},[288,66424,1463],{"class":298},[288,66426,66427,66429,66431,66433],{"class":290,"line":1846},[288,66428,55057],{"class":347},[288,66430,51610],{"class":298},[288,66432,55062],{"class":347},[288,66434,1463],{"class":298},[288,66436,66437],{"class":290,"line":1851},[288,66438,2359],{"class":298},[288,66440,66441,66443,66445],{"class":290,"line":1865},[288,66442,52590],{"class":298},[288,66444,5299],{"class":51473},[288,66446,51480],{"class":298},[288,66448,66449,66451,66453],{"class":290,"line":1870},[288,66450,51958],{"class":298},[288,66452,51507],{"class":51473},[288,66454,51480],{"class":298},[288,66456,66457],{"class":290,"line":1899},[288,66458,2572],{"emptyLinePlaceholder":217},[288,66460,66461,66463,66465],{"class":290,"line":1904},[288,66462,1207],{"class":298},[288,66464,51973],{"class":51473},[288,66466,51480],{"class":298},[288,66468,66469,66471,66473,66475,66477,66480],{"class":290,"line":1921},[288,66470,52317],{"class":298},[288,66472,51784],{"class":51473},[288,66474,53659],{"class":2135},[288,66476,344],{"class":298},[288,66478,66479],{"class":403},"\"father\"",[288,66481,51480],{"class":298},[288,66483,66484,66486,66488,66490,66492,66495,66497,66499],{"class":290,"line":1926},[288,66485,51514],{"class":298},[288,66487,51784],{"class":51473},[288,66489,53659],{"class":2135},[288,66491,344],{"class":298},[288,66493,66494],{"class":403},"\"son\"",[288,66496,55487],{"class":298},[288,66498,51784],{"class":51473},[288,66500,51480],{"class":298},[288,66502,66503,66505,66507],{"class":290,"line":1931},[288,66504,52590],{"class":298},[288,66506,51784],{"class":51473},[288,66508,51480],{"class":298},[288,66510,66511,66513,66515],{"class":290,"line":1936},[288,66512,52317],{"class":298},[288,66514,51986],{"class":51473},[288,66516,51480],{"class":298},[288,66518,66519,66521,66524,66526,66528,66530,66532,66535],{"class":290,"line":1950},[288,66520,11394],{"class":294},[288,66522,66523],{"class":347}," fa",[288,66525,13737],{"class":294},[288,66527,54569],{"class":298},[288,66529,54572],{"class":2135},[288,66531,299],{"class":298},[288,66533,66534],{"class":403},"'.father'",[288,66536,305],{"class":298},[288,66538,66539,66541,66544,66546,66548,66550,66552,66555],{"class":290,"line":1955},[288,66540,11394],{"class":294},[288,66542,66543],{"class":347}," son",[288,66545,13737],{"class":294},[288,66547,54569],{"class":298},[288,66549,54572],{"class":2135},[288,66551,299],{"class":298},[288,66553,66554],{"class":403},"'.son'",[288,66556,305],{"class":298},[288,66558,66559,66561,66563,66565,66567,66569,66571],{"class":290,"line":2749},[288,66560,52580],{"class":298},[288,66562,57986],{"class":2135},[288,66564,299],{"class":298},[288,66566,57991],{"class":403},[288,66568,12608],{"class":298},[288,66570,54622],{"class":294},[288,66572,54625],{"class":298},[288,66574,66575,66577,66579,66582],{"class":290,"line":2763},[288,66576,59098],{"class":2135},[288,66578,299],{"class":298},[288,66580,66581],{"class":403},"'woshiu1'",[288,66583,305],{"class":298},[288,66585,66586,66588,66590],{"class":290,"line":2771},[288,66587,54708],{"class":298},[288,66589,1535],{"class":347},[288,66591,305],{"class":298},[288,66593,66594,66597,66599,66601,66603,66605,66607],{"class":290,"line":2776},[288,66595,66596],{"class":298},"    fa.",[288,66598,57986],{"class":2135},[288,66600,299],{"class":298},[288,66602,57991],{"class":403},[288,66604,12608],{"class":298},[288,66606,54622],{"class":294},[288,66608,54625],{"class":298},[288,66610,66611,66613,66615,66618],{"class":290,"line":2782},[288,66612,59098],{"class":2135},[288,66614,299],{"class":298},[288,66616,66617],{"class":403},"'1'",[288,66619,305],{"class":298},[288,66621,66622,66624,66626],{"class":290,"line":2788},[288,66623,54708],{"class":298},[288,66625,1535],{"class":347},[288,66627,305],{"class":298},[288,66629,66630,66633,66635,66637,66639,66641,66643],{"class":290,"line":2793},[288,66631,66632],{"class":298},"    son.",[288,66634,57986],{"class":2135},[288,66636,299],{"class":298},[288,66638,57991],{"class":403},[288,66640,12608],{"class":298},[288,66642,54622],{"class":294},[288,66644,54625],{"class":298},[288,66646,66647,66649,66651,66654],{"class":290,"line":8121},[288,66648,59098],{"class":2135},[288,66650,299],{"class":298},[288,66652,66653],{"class":403},"'2'",[288,66655,305],{"class":298},[288,66657,66658,66660,66662],{"class":290,"line":8145},[288,66659,54708],{"class":298},[288,66661,1535],{"class":347},[288,66663,305],{"class":298},[288,66665,66666,66668,66670],{"class":290,"line":8150},[288,66667,52590],{"class":298},[288,66669,51986],{"class":51473},[288,66671,51480],{"class":298},[288,66673,66674,66676,66678],{"class":290,"line":8156},[288,66675,51958],{"class":298},[288,66677,51973],{"class":51473},[288,66679,51480],{"class":298},[288,66681,66682],{"class":290,"line":8183},[288,66683,2572],{"emptyLinePlaceholder":217},[288,66685,66686,66688,66690],{"class":290,"line":8188},[288,66687,51958],{"class":298},[288,66689,50808],{"class":51473},[288,66691,51480],{"class":298},[19,66693,66694],{},[200,66695],{"alt":205,"src":66696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66698,66699],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22171,66701,66703],{"id":66702},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66705,66706],{},[200,66707],{"alt":205,"src":66708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66710,66711],{},"反着来",[19,66713,66714],{},"注意是同名事件，比如都是‘click’",[22171,66716,66718],{"id":66717},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66720,66721],{},[200,66722],{"alt":205,"src":66723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22171,66725,66727],{"id":66726},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66729,66730],{},[200,66731],{"alt":205,"src":66732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66734,66735],{},[200,66736],{"alt":205,"src":66737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22171,66739,66741],{"id":66740},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[243,66743,66744],{},[246,66745,66746],{},"事件类型的区别",[19,66748,66749],{},[200,66750],{"alt":205,"src":66751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66753,66754],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[243,66756,66757],{"start":206},[246,66758,66759],{},"注册事件的区别",[19,66761,66762],{},[200,66763],{"alt":205,"src":66764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22171,66766,66768],{"id":66767},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66770,66771],{},[200,66772],{"alt":205,"src":66773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66775,66776],{},[200,66777],{"alt":205,"src":66778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[280,66780,66782],{"className":53240,"code":66781,"language":53242,"meta":205,"style":205},"\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",[25,66783,66784,66792,66809,66832,66840,66845,66850,66855,66859,66867,66875],{"__ignoreMap":205},[288,66785,66786,66788,66790],{"class":290,"line":291},[288,66787,1207],{"class":298},[288,66789,51973],{"class":51473},[288,66791,51480],{"class":298},[288,66793,66794,66796,66799,66802,66804,66807],{"class":290,"line":206},[288,66795,52317],{"class":298},[288,66797,66798],{"class":51473},"form",[288,66800,66801],{"class":2135}," action",[288,66803,344],{"class":298},[288,66805,66806],{"class":403},"\"http:\u002F\u002Fwww.itcast.cn\"",[288,66808,51480],{"class":298},[288,66810,66811,66813,66815,66817,66819,66822,66825,66827,66830],{"class":290,"line":1352},[288,66812,51514],{"class":298},[288,66814,53994],{"class":51473},[288,66816,53997],{"class":2135},[288,66818,344],{"class":298},[288,66820,66821],{"class":403},"\"submit\"",[288,66823,66824],{"class":2135}," value",[288,66826,344],{"class":298},[288,66828,66829],{"class":403},"\"免费注册\"",[288,66831,51480],{"class":298},[288,66833,66834,66836,66838],{"class":290,"line":1367},[288,66835,51514],{"class":298},[288,66837,51986],{"class":51473},[288,66839,51480],{"class":298},[288,66841,66842],{"class":290,"line":1373},[288,66843,66844],{"class":298},"      const form = document.querySelector('form')\n",[288,66846,66847],{"class":290,"line":1387},[288,66848,66849],{"class":298},"      form.addEventListener('submit', function (e) {\n",[288,66851,66852],{"class":290,"line":1393},[288,66853,66854],{"class":298},"        e.preventDefault()\n",[288,66856,66857],{"class":290,"line":1484},[288,66858,64988],{"class":298},[288,66860,66861,66863,66865],{"class":290,"line":1490},[288,66862,51949],{"class":298},[288,66864,51986],{"class":51473},[288,66866,51480],{"class":298},[288,66868,66869,66871,66873],{"class":290,"line":1502},[288,66870,52590],{"class":298},[288,66872,66798],{"class":51473},[288,66874,51480],{"class":298},[288,66876,66877,66879,66881],{"class":290,"line":1784},[288,66878,51958],{"class":298},[288,66880,51973],{"class":51473},[288,66882,51480],{"class":298},[19,66884,66885],{},"点击不在跳转！！！",[260,66887,66889],{"id":66888},"_332-事件委托","3.3.2 事件委托",[19,66891,66892],{},[200,66893],{"alt":205,"src":66894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[280,66896,66898],{"className":50806,"code":66897,"language":50808,"meta":205,"style":205},"\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",[25,66899,66900,66910,66924,66928,66936,66950,66970,66982,66990,66994,67002,67010,67022,67034,67046,67058,67070,67083,67091,67099,67104,67123,67144,67149,67154,67159,67164,67173,67177,67187,67191,67196,67201,67215,67225,67229,67233,67241,67249,67253],{"__ignoreMap":205},[288,66901,66902,66904,66906,66908],{"class":290,"line":291},[288,66903,51470],{"class":298},[288,66905,51474],{"class":51473},[288,66907,51477],{"class":2135},[288,66909,51480],{"class":298},[288,66911,66912,66914,66916,66918,66920,66922],{"class":290,"line":206},[288,66913,1207],{"class":298},[288,66915,50808],{"class":51473},[288,66917,51489],{"class":2135},[288,66919,344],{"class":298},[288,66921,51494],{"class":403},[288,66923,51480],{"class":298},[288,66925,66926],{"class":290,"line":1352},[288,66927,2572],{"emptyLinePlaceholder":217},[288,66929,66930,66932,66934],{"class":290,"line":1367},[288,66931,1207],{"class":298},[288,66933,51507],{"class":51473},[288,66935,51480],{"class":298},[288,66937,66938,66940,66942,66944,66946,66948],{"class":290,"line":1373},[288,66939,52317],{"class":298},[288,66941,51517],{"class":51473},[288,66943,51520],{"class":2135},[288,66945,344],{"class":298},[288,66947,51525],{"class":403},[288,66949,51480],{"class":298},[288,66951,66952,66954,66956,66958,66960,66962,66964,66966,66968],{"class":290,"line":1387},[288,66953,52317],{"class":298},[288,66955,51517],{"class":51473},[288,66957,15093],{"class":2135},[288,66959,344],{"class":298},[288,66961,51564],{"class":403},[288,66963,51544],{"class":2135},[288,66965,344],{"class":298},[288,66967,51571],{"class":403},[288,66969,51480],{"class":298},[288,66971,66972,66974,66976,66978,66980],{"class":290,"line":1393},[288,66973,52317],{"class":298},[288,66975,51580],{"class":51473},[288,66977,51583],{"class":298},[288,66979,51580],{"class":51473},[288,66981,51480],{"class":298},[288,66983,66984,66986,66988],{"class":290,"line":1484},[288,66985,51958],{"class":298},[288,66987,51507],{"class":51473},[288,66989,51480],{"class":298},[288,66991,66992],{"class":290,"line":1490},[288,66993,2572],{"emptyLinePlaceholder":217},[288,66995,66996,66998,67000],{"class":290,"line":1502},[288,66997,1207],{"class":298},[288,66999,51973],{"class":51473},[288,67001,51480],{"class":298},[288,67003,67004,67006,67008],{"class":290,"line":1784},[288,67005,52317],{"class":298},[288,67007,1304],{"class":51473},[288,67009,51480],{"class":298},[288,67011,67012,67014,67016,67018,67020],{"class":290,"line":1789},[288,67013,51514],{"class":298},[288,67015,246],{"class":51473},[288,67017,54139],{"class":298},[288,67019,246],{"class":51473},[288,67021,51480],{"class":298},[288,67023,67024,67026,67028,67030,67032],{"class":290,"line":1795},[288,67025,51514],{"class":298},[288,67027,246],{"class":51473},[288,67029,54158],{"class":298},[288,67031,246],{"class":51473},[288,67033,51480],{"class":298},[288,67035,67036,67038,67040,67042,67044],{"class":290,"line":1800},[288,67037,51514],{"class":298},[288,67039,246],{"class":51473},[288,67041,54177],{"class":298},[288,67043,246],{"class":51473},[288,67045,51480],{"class":298},[288,67047,67048,67050,67052,67054,67056],{"class":290,"line":1814},[288,67049,51514],{"class":298},[288,67051,246],{"class":51473},[288,67053,54196],{"class":298},[288,67055,246],{"class":51473},[288,67057,51480],{"class":298},[288,67059,67060,67062,67064,67066,67068],{"class":290,"line":1819},[288,67061,51514],{"class":298},[288,67063,246],{"class":51473},[288,67065,54215],{"class":298},[288,67067,246],{"class":51473},[288,67069,51480],{"class":298},[288,67071,67072,67074,67076,67079,67081],{"class":290,"line":1825},[288,67073,51514],{"class":298},[288,67075,19],{"class":51473},[288,67077,67078],{"class":298},">我不需要变色\u003C\u002F",[288,67080,19],{"class":51473},[288,67082,51480],{"class":298},[288,67084,67085,67087,67089],{"class":290,"line":1846},[288,67086,52590],{"class":298},[288,67088,1304],{"class":51473},[288,67090,51480],{"class":298},[288,67092,67093,67095,67097],{"class":290,"line":1851},[288,67094,52317],{"class":298},[288,67096,51986],{"class":51473},[288,67098,51480],{"class":298},[288,67100,67101],{"class":290,"line":1865},[288,67102,67103],{"class":357},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[288,67105,67106,67108,67110,67112,67114,67116,67118,67121],{"class":290,"line":1870},[288,67107,11394],{"class":294},[288,67109,61465],{"class":347},[288,67111,13737],{"class":294},[288,67113,54569],{"class":298},[288,67115,54572],{"class":2135},[288,67117,299],{"class":298},[288,67119,67120],{"class":403},"'ul'",[288,67122,305],{"class":298},[288,67124,67125,67128,67130,67132,67134,67136,67138,67140,67142],{"class":290,"line":1899},[288,67126,67127],{"class":298},"    ul.",[288,67129,57986],{"class":2135},[288,67131,299],{"class":298},[288,67133,57991],{"class":403},[288,67135,12608],{"class":298},[288,67137,54622],{"class":294},[288,67139,1830],{"class":298},[288,67141,373],{"class":5389},[288,67143,12615],{"class":298},[288,67145,67146],{"class":290,"line":1904},[288,67147,67148],{"class":357},"      \u002F\u002F alert(1)\n",[288,67150,67151],{"class":290,"line":1921},[288,67152,67153],{"class":357},"      \u002F\u002F e.target就是我们点击的对象\n",[288,67155,67156],{"class":290,"line":1926},[288,67157,67158],{"class":357},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[288,67160,67161],{"class":290,"line":1931},[288,67162,67163],{"class":357},"      \u002F\u002F e.target.style.color = 'red'\n",[288,67165,67166,67168,67170],{"class":290,"line":1936},[288,67167,58417],{"class":298},[288,67169,58420],{"class":2135},[288,67171,67172],{"class":298},"(e)\n",[288,67174,67175],{"class":290,"line":1950},[288,67176,2572],{"emptyLinePlaceholder":217},[288,67178,67179,67181,67184],{"class":290,"line":1955},[288,67180,58417],{"class":298},[288,67182,67183],{"class":2135},"dir",[288,67185,67186],{"class":298},"(e.target)\n",[288,67188,67189],{"class":290,"line":2749},[288,67190,2572],{"emptyLinePlaceholder":217},[288,67192,67193],{"class":290,"line":2763},[288,67194,67195],{"class":357},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[288,67197,67198],{"class":290,"line":2771},[288,67199,67200],{"class":357},"      \u002F\u002F 通过tagName来进行判断\n",[288,67202,67203,67205,67208,67210,67213],{"class":290,"line":2776},[288,67204,54653],{"class":294},[288,67206,67207],{"class":298}," (e.target.tagName ",[288,67209,54659],{"class":294},[288,67211,67212],{"class":403}," 'LI'",[288,67214,12615],{"class":298},[288,67216,67217,67220,67222],{"class":290,"line":2782},[288,67218,67219],{"class":298},"        e.target.style.color ",[288,67221,344],{"class":294},[288,67223,67224],{"class":403}," 'red'\n",[288,67226,67227],{"class":290,"line":2788},[288,67228,52571],{"class":298},[288,67230,67231],{"class":290,"line":2793},[288,67232,33634],{"class":298},[288,67234,67235,67237,67239],{"class":290,"line":8121},[288,67236,52590],{"class":298},[288,67238,51986],{"class":51473},[288,67240,51480],{"class":298},[288,67242,67243,67245,67247],{"class":290,"line":8145},[288,67244,51958],{"class":298},[288,67246,51973],{"class":51473},[288,67248,51480],{"class":298},[288,67250,67251],{"class":290,"line":8150},[288,67252,2572],{"emptyLinePlaceholder":217},[288,67254,67255,67257,67259],{"class":290,"line":8156},[288,67256,51958],{"class":298},[288,67258,50808],{"class":51473},[288,67260,51480],{"class":298},[19,67262,67263],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67265,67266],{},"if(e.target.ragName==='P') {}",[19,67268,67269],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67271,67272],{},"通过事件委托的方式实现tab栏切换改造：",[19,67274,67275],{},"一定要记住自定义属性！！！！！！",[19,67277,67278],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67280,67281],{},"id是自定义的属性名",[19,67283,67284],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[280,67286,67288],{"className":50806,"code":67287,"language":50808,"meta":205,"style":205},"\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",[25,67289,67290,67300,67314,67318,67326,67340,67360,67380,67392,67400,67406,67416,67426,67430,67434,67440,67452,67464,67476,67492,67496,67500,67506,67518,67530,67542,67552,67562,67566,67570,67578,67590,67600,67612,67616,67620,67628,67638,67648,67658,67662,67666,67676,67690,67702,67706,67710,67722,67732,67748,67758,67762,67766,67780,67790,67800,67804,67808,67814,67828,67832,67836,67844,67854,67858,67862,67871,67881,67885,67893,67901,67905,67913,67927,67941,67953,67961,68000,68032,68064,68096,68128,68136,68144,68158,68192,68226,68260,68294,68328,68336,68344,68352,68357,68362,68381,68386,68406,68414,68419,68432,68453,68466,68470,68475,68480,68493,68513,68541,68545,68549,68553,68561,68569,68573],{"__ignoreMap":205},[288,67291,67292,67294,67296,67298],{"class":290,"line":291},[288,67293,51470],{"class":298},[288,67295,51474],{"class":51473},[288,67297,51477],{"class":2135},[288,67299,51480],{"class":298},[288,67301,67302,67304,67306,67308,67310,67312],{"class":290,"line":206},[288,67303,1207],{"class":298},[288,67305,50808],{"class":51473},[288,67307,51489],{"class":2135},[288,67309,344],{"class":298},[288,67311,51494],{"class":403},[288,67313,51480],{"class":298},[288,67315,67316],{"class":290,"line":1352},[288,67317,2572],{"emptyLinePlaceholder":217},[288,67319,67320,67322,67324],{"class":290,"line":1367},[288,67321,1207],{"class":298},[288,67323,51507],{"class":51473},[288,67325,51480],{"class":298},[288,67327,67328,67330,67332,67334,67336,67338],{"class":290,"line":1373},[288,67329,52317],{"class":298},[288,67331,51517],{"class":51473},[288,67333,51520],{"class":2135},[288,67335,344],{"class":298},[288,67337,51525],{"class":403},[288,67339,59300],{"class":298},[288,67341,67342,67344,67346,67348,67350,67352,67354,67356,67358],{"class":290,"line":1387},[288,67343,52317],{"class":298},[288,67345,51517],{"class":51473},[288,67347,51536],{"class":2135},[288,67349,344],{"class":298},[288,67351,51541],{"class":403},[288,67353,51544],{"class":2135},[288,67355,344],{"class":298},[288,67357,51549],{"class":403},[288,67359,59300],{"class":298},[288,67361,67362,67364,67366,67368,67370,67372,67374,67376,67378],{"class":290,"line":1393},[288,67363,52317],{"class":298},[288,67365,51517],{"class":51473},[288,67367,15093],{"class":2135},[288,67369,344],{"class":298},[288,67371,51564],{"class":403},[288,67373,51544],{"class":2135},[288,67375,344],{"class":298},[288,67377,51571],{"class":403},[288,67379,59300],{"class":298},[288,67381,67382,67384,67386,67388,67390],{"class":290,"line":1484},[288,67383,52317],{"class":298},[288,67385,51580],{"class":51473},[288,67387,63798],{"class":298},[288,67389,51580],{"class":51473},[288,67391,51480],{"class":298},[288,67393,67394,67396,67398],{"class":290,"line":1490},[288,67395,52317],{"class":298},[288,67397,5299],{"class":51473},[288,67399,51480],{"class":298},[288,67401,67402,67404],{"class":290,"line":1502},[288,67403,6576],{"class":51473},[288,67405,15745],{"class":298},[288,67407,67408,67410,67412,67414],{"class":290,"line":1784},[288,67409,54879],{"class":347},[288,67411,51610],{"class":298},[288,67413,490],{"class":347},[288,67415,1463],{"class":298},[288,67417,67418,67420,67422,67424],{"class":290,"line":1789},[288,67419,54868],{"class":347},[288,67421,51610],{"class":298},[288,67423,490],{"class":347},[288,67425,1463],{"class":298},[288,67427,67428],{"class":290,"line":1795},[288,67429,2359],{"class":298},[288,67431,67432],{"class":290,"line":1800},[288,67433,2572],{"emptyLinePlaceholder":217},[288,67435,67436,67438],{"class":290,"line":1814},[288,67437,63849],{"class":2135},[288,67439,15745],{"class":298},[288,67441,67442,67444,67446,67448,67450],{"class":290,"line":1819},[288,67443,54944],{"class":347},[288,67445,51610],{"class":298},[288,67447,63860],{"class":347},[288,67449,51665],{"class":294},[288,67451,1463],{"class":298},[288,67453,67454,67456,67458,67460,67462],{"class":290,"line":1825},[288,67455,54958],{"class":347},[288,67457,51610],{"class":298},[288,67459,63873],{"class":347},[288,67461,51665],{"class":294},[288,67463,1463],{"class":298},[288,67465,67466,67468,67470,67472,67474],{"class":290,"line":1846},[288,67467,54879],{"class":347},[288,67469,51610],{"class":298},[288,67471,997],{"class":347},[288,67473,51665],{"class":294},[288,67475,1463],{"class":298},[288,67477,67478,67480,67482,67484,67486,67488,67490],{"class":290,"line":1851},[288,67479,62150],{"class":347},[288,67481,51610],{"class":298},[288,67483,516],{"class":347},[288,67485,51665],{"class":294},[288,67487,51694],{"class":347},[288,67489,62417],{"class":347},[288,67491,1463],{"class":298},[288,67493,67494],{"class":290,"line":1865},[288,67495,2359],{"class":298},[288,67497,67498],{"class":290,"line":1870},[288,67499,2572],{"emptyLinePlaceholder":217},[288,67501,67502,67504],{"class":290,"line":1899},[288,67503,63918],{"class":2135},[288,67505,15745],{"class":298},[288,67507,67508,67510,67512,67514,67516],{"class":290,"line":1904},[288,67509,54944],{"class":347},[288,67511,51610],{"class":298},[288,67513,608],{"class":347},[288,67515,625],{"class":294},[288,67517,1463],{"class":298},[288,67519,67520,67522,67524,67526,67528],{"class":290,"line":1921},[288,67521,54958],{"class":347},[288,67523,51610],{"class":298},[288,67525,1204],{"class":347},[288,67527,51665],{"class":294},[288,67529,1463],{"class":298},[288,67531,67532,67534,67536,67538,67540],{"class":290,"line":1926},[288,67533,57532],{"class":347},[288,67535,51610],{"class":298},[288,67537,1204],{"class":347},[288,67539,51665],{"class":294},[288,67541,1463],{"class":298},[288,67543,67544,67546,67548,67550],{"class":290,"line":1931},[288,67545,55182],{"class":347},[288,67547,51610],{"class":298},[288,67549,51650],{"class":347},[288,67551,1463],{"class":298},[288,67553,67554,67556,67558,67560],{"class":290,"line":1936},[288,67555,55193],{"class":347},[288,67557,51610],{"class":298},[288,67559,51841],{"class":347},[288,67561,1463],{"class":298},[288,67563,67564],{"class":290,"line":1950},[288,67565,2359],{"class":298},[288,67567,67568],{"class":290,"line":1955},[288,67569,2572],{"emptyLinePlaceholder":217},[288,67571,67572,67574,67576],{"class":290,"line":2749},[288,67573,63918],{"class":2135},[288,67575,63991],{"class":51473},[288,67577,15745],{"class":298},[288,67579,67580,67582,67584,67586,67588],{"class":290,"line":2763},[288,67581,55095],{"class":347},[288,67583,51610],{"class":298},[288,67585,1097],{"class":347},[288,67587,51665],{"class":294},[288,67589,1463],{"class":298},[288,67591,67592,67594,67596,67598],{"class":290,"line":2771},[288,67593,62507],{"class":347},[288,67595,51610],{"class":298},[288,67597,64014],{"class":347},[288,67599,1463],{"class":298},[288,67601,67602,67604,67606,67608,67610],{"class":290,"line":2776},[288,67603,62173],{"class":347},[288,67605,51610],{"class":298},[288,67607,997],{"class":347},[288,67609,51665],{"class":294},[288,67611,1463],{"class":298},[288,67613,67614],{"class":290,"line":2782},[288,67615,2359],{"class":298},[288,67617,67618],{"class":290,"line":2788},[288,67619,2572],{"emptyLinePlaceholder":217},[288,67621,67622,67624,67626],{"class":290,"line":2793},[288,67623,63918],{"class":2135},[288,67625,61465],{"class":51473},[288,67627,15745],{"class":298},[288,67629,67630,67632,67634,67636],{"class":290,"line":8121},[288,67631,54905],{"class":347},[288,67633,51610],{"class":298},[288,67635,54910],{"class":347},[288,67637,1463],{"class":298},[288,67639,67640,67642,67644,67646],{"class":290,"line":8145},[288,67641,55182],{"class":347},[288,67643,51610],{"class":298},[288,67645,51650],{"class":347},[288,67647,1463],{"class":298},[288,67649,67650,67652,67654,67656],{"class":290,"line":8150},[288,67651,55193],{"class":347},[288,67653,51610],{"class":298},[288,67655,51753],{"class":347},[288,67657,1463],{"class":298},[288,67659,67660],{"class":290,"line":8156},[288,67661,2359],{"class":298},[288,67663,67664],{"class":290,"line":8183},[288,67665,2572],{"emptyLinePlaceholder":217},[288,67667,67668,67670,67672,67674],{"class":290,"line":8188},[288,67669,63918],{"class":2135},[288,67671,61465],{"class":51473},[288,67673,55248],{"class":51473},[288,67675,15745],{"class":298},[288,67677,67678,67680,67682,67684,67686,67688],{"class":290,"line":8194},[288,67679,54879],{"class":347},[288,67681,51610],{"class":298},[288,67683,490],{"class":347},[288,67685,9123],{"class":347},[288,67687,51665],{"class":294},[288,67689,1463],{"class":298},[288,67691,67692,67694,67696,67698,67700],{"class":290,"line":8206},[288,67693,55095],{"class":347},[288,67695,51610],{"class":298},[288,67697,846],{"class":347},[288,67699,51665],{"class":294},[288,67701,1463],{"class":298},[288,67703,67704],{"class":290,"line":8218},[288,67705,2359],{"class":298},[288,67707,67708],{"class":290,"line":8230},[288,67709,2572],{"emptyLinePlaceholder":217},[288,67711,67712,67714,67716,67718,67720],{"class":290,"line":9889},[288,67713,63918],{"class":2135},[288,67715,61465],{"class":51473},[288,67717,55248],{"class":51473},[288,67719,1571],{"class":51473},[288,67721,15745],{"class":298},[288,67723,67724,67726,67728,67730],{"class":290,"line":9914},[288,67725,64143],{"class":347},[288,67727,51610],{"class":298},[288,67729,54910],{"class":347},[288,67731,1463],{"class":298},[288,67733,67734,67736,67738,67740,67742,67744,67746],{"class":290,"line":9937},[288,67735,62405],{"class":347},[288,67737,51610],{"class":298},[288,67739,376],{"class":347},[288,67741,51665],{"class":294},[288,67743,51694],{"class":347},[288,67745,64164],{"class":347},[288,67747,1463],{"class":298},[288,67749,67750,67752,67754,67756],{"class":290,"line":9961},[288,67751,57589],{"class":347},[288,67753,51610],{"class":298},[288,67755,62542],{"class":347},[288,67757,1463],{"class":298},[288,67759,67760],{"class":290,"line":9966},[288,67761,2359],{"class":298},[288,67763,67764],{"class":290,"line":9971},[288,67765,2572],{"emptyLinePlaceholder":217},[288,67767,67768,67770,67772,67774,67776,67778],{"class":290,"line":9976},[288,67769,63918],{"class":2135},[288,67771,61465],{"class":51473},[288,67773,55248],{"class":51473},[288,67775,1571],{"class":51473},[288,67777,64197],{"class":2135},[288,67779,15745],{"class":298},[288,67781,67782,67784,67786,67788],{"class":290,"line":9985},[288,67783,61964],{"class":347},[288,67785,51610],{"class":298},[288,67787,64208],{"class":347},[288,67789,1463],{"class":298},[288,67791,67792,67794,67796,67798],{"class":290,"line":9990},[288,67793,57589],{"class":347},[288,67795,51610],{"class":298},[288,67797,64208],{"class":347},[288,67799,1463],{"class":298},[288,67801,67802],{"class":290,"line":9996},[288,67803,2359],{"class":298},[288,67805,67806],{"class":290,"line":10017},[288,67807,2572],{"emptyLinePlaceholder":217},[288,67809,67810,67812],{"class":290,"line":10023},[288,67811,64233],{"class":2135},[288,67813,15745],{"class":298},[288,67815,67816,67818,67820,67822,67824,67826],{"class":290,"line":10037},[288,67817,54868],{"class":347},[288,67819,51610],{"class":298},[288,67821,490],{"class":347},[288,67823,64246],{"class":347},[288,67825,51665],{"class":294},[288,67827,1463],{"class":298},[288,67829,67830],{"class":290,"line":10043},[288,67831,2359],{"class":298},[288,67833,67834],{"class":290,"line":10070},[288,67835,2572],{"emptyLinePlaceholder":217},[288,67837,67838,67840,67842],{"class":290,"line":10079},[288,67839,64233],{"class":2135},[288,67841,62347],{"class":2135},[288,67843,15745],{"class":298},[288,67845,67846,67848,67850,67852],{"class":290,"line":10085},[288,67847,55182],{"class":347},[288,67849,51610],{"class":298},[288,67851,54910],{"class":347},[288,67853,1463],{"class":298},[288,67855,67856],{"class":290,"line":10093},[288,67857,2359],{"class":298},[288,67859,67860],{"class":290,"line":10098},[288,67861,2572],{"emptyLinePlaceholder":217},[288,67863,67864,67866,67869],{"class":290,"line":16777},[288,67865,64233],{"class":2135},[288,67867,67868],{"class":2135}," .active",[288,67870,15745],{"class":298},[288,67872,67873,67875,67877,67879],{"class":290,"line":16783},[288,67874,55182],{"class":347},[288,67876,51610],{"class":298},[288,67878,61042],{"class":347},[288,67880,1463],{"class":298},[288,67882,67883],{"class":290,"line":16806},[288,67884,2359],{"class":298},[288,67886,67887,67889,67891],{"class":290,"line":16812},[288,67888,52590],{"class":298},[288,67890,5299],{"class":51473},[288,67892,51480],{"class":298},[288,67894,67895,67897,67899],{"class":290,"line":16835},[288,67896,51958],{"class":298},[288,67898,51507],{"class":51473},[288,67900,51480],{"class":298},[288,67902,67903],{"class":290,"line":16849},[288,67904,2572],{"emptyLinePlaceholder":217},[288,67906,67907,67909,67911],{"class":290,"line":16869},[288,67908,1207],{"class":298},[288,67910,51973],{"class":51473},[288,67912,51480],{"class":298},[288,67914,67915,67917,67919,67921,67923,67925],{"class":290,"line":16875},[288,67916,52317],{"class":298},[288,67918,51784],{"class":51473},[288,67920,53659],{"class":2135},[288,67922,344],{"class":298},[288,67924,64348],{"class":403},[288,67926,51480],{"class":298},[288,67928,67929,67931,67933,67935,67937,67939],{"class":290,"line":16886},[288,67930,51514],{"class":298},[288,67932,51784],{"class":51473},[288,67934,53659],{"class":2135},[288,67936,344],{"class":298},[288,67938,64363],{"class":403},[288,67940,51480],{"class":298},[288,67942,67943,67945,67947,67949,67951],{"class":290,"line":16909},[288,67944,55407],{"class":298},[288,67946,260],{"class":51473},[288,67948,64374],{"class":298},[288,67950,260],{"class":51473},[288,67952,51480],{"class":298},[288,67954,67955,67957,67959],{"class":290,"line":16931},[288,67956,55407],{"class":298},[288,67958,1304],{"class":51473},[288,67960,51480],{"class":298},[288,67962,67963,67965,67967,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67990,67992,67994,67996,67998],{"class":290,"line":16936},[288,67964,55475],{"class":298},[288,67966,246],{"class":51473},[288,67968,61225],{"class":298},[288,67970,104],{"class":51473},[288,67972,53659],{"class":2135},[288,67974,344],{"class":298},[288,67976,59879],{"class":403},[288,67978,61230],{"class":2135},[288,67980,344],{"class":298},[288,67982,64409],{"class":403},[288,67984,54124],{"class":2135},[288,67986,344],{"class":298},[288,67988,67989],{"class":403},"\"0\"",[288,67991,64412],{"class":298},[288,67993,104],{"class":51473},[288,67995,55487],{"class":298},[288,67997,246],{"class":51473},[288,67999,51480],{"class":298},[288,68001,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030],{"class":290,"line":16942},[288,68003,55475],{"class":298},[288,68005,246],{"class":51473},[288,68007,61225],{"class":298},[288,68009,104],{"class":51473},[288,68011,61230],{"class":2135},[288,68013,344],{"class":298},[288,68015,64409],{"class":403},[288,68017,54124],{"class":2135},[288,68019,344],{"class":298},[288,68021,3850],{"class":403},[288,68023,64439],{"class":298},[288,68025,104],{"class":51473},[288,68027,55487],{"class":298},[288,68029,246],{"class":51473},[288,68031,51480],{"class":298},[288,68033,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062],{"class":290,"line":16956},[288,68035,55475],{"class":298},[288,68037,246],{"class":51473},[288,68039,61225],{"class":298},[288,68041,104],{"class":51473},[288,68043,61230],{"class":2135},[288,68045,344],{"class":298},[288,68047,64409],{"class":403},[288,68049,54124],{"class":2135},[288,68051,344],{"class":298},[288,68053,3873],{"class":403},[288,68055,64466],{"class":298},[288,68057,104],{"class":51473},[288,68059,55487],{"class":298},[288,68061,246],{"class":51473},[288,68063,51480],{"class":298},[288,68065,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094],{"class":290,"line":16969},[288,68067,55475],{"class":298},[288,68069,246],{"class":51473},[288,68071,61225],{"class":298},[288,68073,104],{"class":51473},[288,68075,61230],{"class":2135},[288,68077,344],{"class":298},[288,68079,64409],{"class":403},[288,68081,54124],{"class":2135},[288,68083,344],{"class":298},[288,68085,3886],{"class":403},[288,68087,64493],{"class":298},[288,68089,104],{"class":51473},[288,68091,55487],{"class":298},[288,68093,246],{"class":51473},[288,68095,51480],{"class":298},[288,68097,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126],{"class":290,"line":16974},[288,68099,55475],{"class":298},[288,68101,246],{"class":51473},[288,68103,61225],{"class":298},[288,68105,104],{"class":51473},[288,68107,61230],{"class":2135},[288,68109,344],{"class":298},[288,68111,64409],{"class":403},[288,68113,54124],{"class":2135},[288,68115,344],{"class":298},[288,68117,3899],{"class":403},[288,68119,64520],{"class":298},[288,68121,104],{"class":51473},[288,68123,55487],{"class":298},[288,68125,246],{"class":51473},[288,68127,51480],{"class":298},[288,68129,68130,68132,68134],{"class":290,"line":16988},[288,68131,55580],{"class":298},[288,68133,1304],{"class":51473},[288,68135,51480],{"class":298},[288,68137,68138,68140,68142],{"class":290,"line":16993},[288,68139,51949],{"class":298},[288,68141,51784],{"class":51473},[288,68143,51480],{"class":298},[288,68145,68146,68148,68150,68152,68154,68156],{"class":290,"line":16999},[288,68147,51514],{"class":298},[288,68149,51784],{"class":51473},[288,68151,53659],{"class":2135},[288,68153,344],{"class":298},[288,68155,64557],{"class":403},[288,68157,51480],{"class":298},[288,68159,68160,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190],{"class":290,"line":17004},[288,68161,55407],{"class":298},[288,68163,51784],{"class":51473},[288,68165,53659],{"class":2135},[288,68167,344],{"class":298},[288,68169,64572],{"class":403},[288,68171,61225],{"class":298},[288,68173,200],{"class":51473},[288,68175,55412],{"class":2135},[288,68177,344],{"class":298},[288,68179,64583],{"class":403},[288,68181,55420],{"class":2135},[288,68183,344],{"class":298},[288,68185,7825],{"class":403},[288,68187,64592],{"class":298},[288,68189,51784],{"class":51473},[288,68191,51480],{"class":298},[288,68193,68194,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224],{"class":290,"line":17018},[288,68195,55407],{"class":298},[288,68197,51784],{"class":51473},[288,68199,53659],{"class":2135},[288,68201,344],{"class":298},[288,68203,62796],{"class":403},[288,68205,61225],{"class":298},[288,68207,200],{"class":51473},[288,68209,55412],{"class":2135},[288,68211,344],{"class":298},[288,68213,64619],{"class":403},[288,68215,55420],{"class":2135},[288,68217,344],{"class":298},[288,68219,7825],{"class":403},[288,68221,64592],{"class":298},[288,68223,51784],{"class":51473},[288,68225,51480],{"class":298},[288,68227,68228,68230,68232,68234,68236,68238,68240,68242,68244,68246,68248,68250,68252,68254,68256,68258],{"class":290,"line":17023},[288,68229,55407],{"class":298},[288,68231,51784],{"class":51473},[288,68233,53659],{"class":2135},[288,68235,344],{"class":298},[288,68237,62796],{"class":403},[288,68239,61225],{"class":298},[288,68241,200],{"class":51473},[288,68243,55412],{"class":2135},[288,68245,344],{"class":298},[288,68247,64654],{"class":403},[288,68249,55420],{"class":2135},[288,68251,344],{"class":298},[288,68253,7825],{"class":403},[288,68255,64592],{"class":298},[288,68257,51784],{"class":51473},[288,68259,51480],{"class":298},[288,68261,68262,68264,68266,68268,68270,68272,68274,68276,68278,68280,68282,68284,68286,68288,68290,68292],{"class":290,"line":17028},[288,68263,55407],{"class":298},[288,68265,51784],{"class":51473},[288,68267,53659],{"class":2135},[288,68269,344],{"class":298},[288,68271,62796],{"class":403},[288,68273,61225],{"class":298},[288,68275,200],{"class":51473},[288,68277,55412],{"class":2135},[288,68279,344],{"class":298},[288,68281,64689],{"class":403},[288,68283,55420],{"class":2135},[288,68285,344],{"class":298},[288,68287,7825],{"class":403},[288,68289,64592],{"class":298},[288,68291,51784],{"class":51473},[288,68293,51480],{"class":298},[288,68295,68296,68298,68300,68302,68304,68306,68308,68310,68312,68314,68316,68318,68320,68322,68324,68326],{"class":290,"line":17042},[288,68297,55407],{"class":298},[288,68299,51784],{"class":51473},[288,68301,53659],{"class":2135},[288,68303,344],{"class":298},[288,68305,62796],{"class":403},[288,68307,61225],{"class":298},[288,68309,200],{"class":51473},[288,68311,55412],{"class":2135},[288,68313,344],{"class":298},[288,68315,64724],{"class":403},[288,68317,55420],{"class":2135},[288,68319,344],{"class":298},[288,68321,7825],{"class":403},[288,68323,64592],{"class":298},[288,68325,51784],{"class":51473},[288,68327,51480],{"class":298},[288,68329,68330,68332,68334],{"class":290,"line":17054},[288,68331,51949],{"class":298},[288,68333,51784],{"class":51473},[288,68335,51480],{"class":298},[288,68337,68338,68340,68342],{"class":290,"line":17059},[288,68339,52590],{"class":298},[288,68341,51784],{"class":51473},[288,68343,51480],{"class":298},[288,68345,68346,68348,68350],{"class":290,"line":17072},[288,68347,52317],{"class":298},[288,68349,51986],{"class":51473},[288,68351,51480],{"class":298},[288,68353,68354],{"class":290,"line":17077},[288,68355,68356],{"class":357},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[288,68358,68359],{"class":290,"line":17082},[288,68360,68361],{"class":357},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[288,68363,68364,68366,68368,68370,68372,68374,68376,68379],{"class":290,"line":17087},[288,68365,11394],{"class":294},[288,68367,61465],{"class":347},[288,68369,13737],{"class":294},[288,68371,54569],{"class":298},[288,68373,54572],{"class":2135},[288,68375,299],{"class":298},[288,68377,68378],{"class":403},"'.tab-nav ul'",[288,68380,305],{"class":298},[288,68382,68383],{"class":290,"line":17100},[288,68384,68385],{"class":357},"    \u002F\u002F 2.添加事件\n",[288,68387,68388,68390,68392,68394,68396,68398,68400,68402,68404],{"class":290,"line":17105},[288,68389,67127],{"class":298},[288,68391,57986],{"class":2135},[288,68393,299],{"class":298},[288,68395,57991],{"class":403},[288,68397,12608],{"class":298},[288,68399,54622],{"class":294},[288,68401,1830],{"class":298},[288,68403,373],{"class":5389},[288,68405,12615],{"class":298},[288,68407,68408,68410,68412],{"class":290,"line":32806},[288,68409,58417],{"class":298},[288,68411,67183],{"class":2135},[288,68413,67186],{"class":298},[288,68415,68416],{"class":290,"line":32812},[288,68417,68418],{"class":357},"      \u002F\u002Fe.targer是我们点击的对象\n",[288,68420,68421,68423,68425,68427,68430],{"class":290,"line":32818},[288,68422,54653],{"class":294},[288,68424,67207],{"class":298},[288,68426,54659],{"class":294},[288,68428,68429],{"class":403}," 'A'",[288,68431,12615],{"class":298},[288,68433,68434,68436,68438,68440,68443,68445,68447,68449,68451],{"class":290,"line":32824},[288,68435,52098],{"class":298},[288,68437,54572],{"class":2135},[288,68439,299],{"class":298},[288,68441,68442],{"class":403},"'.active'",[288,68444,57176],{"class":298},[288,68446,57179],{"class":2135},[288,68448,299],{"class":298},[288,68450,64887],{"class":403},[288,68452,305],{"class":298},[288,68454,68455,68458,68460,68462,68464],{"class":290,"line":32830},[288,68456,68457],{"class":298},"        e.target.classList.",[288,68459,5507],{"class":2135},[288,68461,299],{"class":298},[288,68463,64887],{"class":403},[288,68465,305],{"class":298},[288,68467,68468],{"class":290,"line":32841},[288,68469,2572],{"emptyLinePlaceholder":217},[288,68471,68472],{"class":290,"line":32847},[288,68473,68474],{"class":357},"        \u002F\u002F 下面大盒子模块\n",[288,68476,68477],{"class":290,"line":32867},[288,68478,68479],{"class":357},"        \u002F\u002F console.log(e.target.dataset.id)\n",[288,68481,68482,68484,68486,68488,68490],{"class":290,"line":32873},[288,68483,61443],{"class":294},[288,68485,3204],{"class":347},[288,68487,13737],{"class":294},[288,68489,45739],{"class":294},[288,68491,68492],{"class":298},"e.target.dataset.id\n",[288,68494,68495,68497,68499,68501,68503,68505,68507,68509,68511],{"class":290,"line":32884},[288,68496,52098],{"class":298},[288,68498,54572],{"class":2135},[288,68500,299],{"class":298},[288,68502,64935],{"class":403},[288,68504,57176],{"class":298},[288,68506,57179],{"class":2135},[288,68508,299],{"class":298},[288,68510,64887],{"class":403},[288,68512,305],{"class":298},[288,68514,68515,68517,68519,68521,68523,68525,68527,68529,68531,68533,68535,68537,68539],{"class":290,"line":32890},[288,68516,52098],{"class":298},[288,68518,54572],{"class":2135},[288,68520,299],{"class":298},[288,68522,64961],{"class":403},[288,68524,738],{"class":298},[288,68526,45739],{"class":294},[288,68528,25291],{"class":347},[288,68530,57205],{"class":403},[288,68532,57176],{"class":298},[288,68534,5507],{"class":2135},[288,68536,299],{"class":298},[288,68538,64887],{"class":403},[288,68540,305],{"class":298},[288,68542,68543],{"class":290,"line":32896},[288,68544,2572],{"emptyLinePlaceholder":217},[288,68546,68547],{"class":290,"line":32902},[288,68548,52571],{"class":298},[288,68550,68551],{"class":290,"line":32908},[288,68552,33634],{"class":298},[288,68554,68555,68557,68559],{"class":290,"line":32914},[288,68556,52590],{"class":298},[288,68558,51986],{"class":51473},[288,68560,51480],{"class":298},[288,68562,68563,68565,68567],{"class":290,"line":32920},[288,68564,51958],{"class":298},[288,68566,51973],{"class":51473},[288,68568,51480],{"class":298},[288,68570,68571],{"class":290,"line":32926},[288,68572,2572],{"emptyLinePlaceholder":217},[288,68574,68575,68577,68579],{"class":290,"line":32946},[288,68576,51958],{"class":298},[288,68578,50808],{"class":51473},[288,68580,51480],{"class":298},[260,68582,68584],{"id":68583},"_333-页面加载事件","3.3.3 页面加载事件",[243,68586,68587],{},[246,68588,68589],{},"load",[19,68591,68592],{},[200,68593],{"alt":205,"src":68594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68596,68597],{},"window代表整个窗口，比document还要大",[19,68599,68600],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68602,68603],{},"img.addEventListener('load', function () {",[19,68605,68606],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68608,52637],{},[243,68610,68611],{"start":206},[246,68612,68613],{},"DOMContentLoaded",[19,68615,68616],{},[200,68617],{"alt":205,"src":68618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68620,68621],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[260,68623,68625],{"id":68624},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68627,68628],{},[200,68629],{"alt":205,"src":68630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68632,68633],{},[200,68634],{"alt":205,"src":68635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68637,68638],{},[200,68639],{"alt":205,"src":68640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68642,68643],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68645,68646],{},"获得的是数字型数据，不带单位",[19,68648,68649],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68651,68652],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68654,68655],{},"它是通过document.documentElement来获取",[19,68657,68658],{},[200,68659],{"alt":205,"src":68660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68662,68663],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[260,68665,68667],{"id":68666},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68669,68670],{},[200,68671],{"alt":205,"src":68672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68674,68675],{},[200,68676],{"alt":205,"src":68677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[260,68679,68681],{"id":68680},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68683,68684],{},[200,68685],{"alt":205,"src":68686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68688,68689],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68691,68692],{},[200,68693],{"alt":205,"src":68694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68696,68697],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68699,68700],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68702,68703],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68705,68706],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68708,68709],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68711,68712],{},[200,68713],{"alt":205,"src":68714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68716,68717],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68719,68720],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68722,68723],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68725,68726],{},"e.pageX-box.getBoundingClientRect()",[260,68728,68730],{"id":68729},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68732,68733],{},[200,68734],{"alt":205,"src":68735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68737,68738],{},"这个是相对于视口来说的，它是个方法，不是属性值",[260,68740,68742],{"id":68741},"_338-总结","3.3.8 总结",[19,68744,68745],{},[200,68746],{"alt":205,"src":68747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68749,68750],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68752,68753],{},"修改盒子的宽高只能通过width和height来实现",[260,68755,68757],{"id":68756},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[280,68759,68761],{"className":50806,"code":68760,"language":50808,"meta":205,"style":205},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[25,68762,68763,68768,68773,68778,68783],{"__ignoreMap":205},[288,68764,68765],{"class":290,"line":291},[288,68766,68767],{"class":298},"\u002F* 页面滑动 *\u002F\n",[288,68769,68770],{"class":290,"line":206},[288,68771,68772],{"class":298},"html {\n",[288,68774,68775],{"class":290,"line":1352},[288,68776,68777],{"class":298},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[288,68779,68780],{"class":290,"line":1367},[288,68781,68782],{"class":298},"  scroll-behavior: smooth;\n",[288,68784,68785],{"class":290,"line":1373},[288,68786,1737],{"class":298},[19,68788,68789],{},"默认是auto",[260,68791,68793],{"id":68792},"_3310-日期对象","3.3.10 日期对象",[22171,68795,68797],{"id":68796},"_33101-实例化","3.3.10.1 实例化",[19,68799,68800],{},[200,68801],{"alt":205,"src":68802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22171,68804,68806],{"id":68805},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68808,68809],{},[200,68810],{"alt":205,"src":68811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68813,68814],{},"月份+1",[19,68816,68817],{},"老外认为第一天为0，星期天",[19,68819,68820],{},"方法使用的时候必须要跟括号",[19,68822,68823],{},"快速获得日期",[19,68825,68826],{},"\u002F\u002F 得到年月日",[19,68828,68829],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68831,68832],{},"\u002F\u002F 得到当地日期",[19,68834,68835],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68837,68838],{},"\u002F\u002F 得到当地时间",[19,68840,68841],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68843,68844],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68846,68847],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51986,68849,68850],{},"\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",[19,68852,68853],{},"学会去封装函数！",[22171,68855,68857],{"id":68856},"_33103-时间戳","3.3.10.3 时间戳",[19,68859,68860],{},[200,68861],{"alt":205,"src":68862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68864,68865],{},[200,68866],{"alt":205,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68869,68870],{},"三种方法记住一个就可以",[260,68872,68874],{"id":68873},"_3311-节点操作","3.3.11 节点操作",[22171,68876,68878],{"id":68877},"_33111-dom节点","3.3.11.1 DOM节点",[19,68880,68881],{},[200,68882],{"alt":205,"src":68883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68885,68886],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22171,68888,68890],{"id":68889},"_33112-查找节点","3.3.11.2 查找节点",[19,68892,68893],{},"前边的document.querySelector()是获取的元素",[19,68895,68896],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68898,68899],{},[200,68900],{"alt":205,"src":68901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[243,68903,68904],{},[246,68905,68906],{},"父节点",[19,68908,68909],{},[200,68910],{"alt":205,"src":68911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[243,68913,68914],{"start":206},[246,68915,68916],{},"子节点",[19,68918,68919],{},[200,68920],{"alt":205,"src":68921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68923,68924],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68926,68927],{},"children获得的是伪数组，是亲儿子",[243,68929,68930],{"start":1352},[246,68931,68932],{},"兄弟节点",[19,68934,68935],{},[200,68936],{"alt":205,"src":68937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22171,68939,68941],{"id":68940},"_33113-增加节点","3.3.11.3 增加节点",[19,68943,68944],{},[200,68945],{"alt":205,"src":68946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68948,68949],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68951,68952],{},[200,68953],{"alt":205,"src":68954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68956,68957],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68959,68960],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68962,68963],{},"例：",[51986,68965,68966],{},"\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",[19,68968,68969],{},[200,68970],{"alt":205,"src":68971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68973,68974],{},"false只克隆标签，里边的内容不会克隆过来",[280,68976,68978],{"className":50806,"code":68977,"language":50808,"meta":205,"style":205},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[25,68979,68980],{"__ignoreMap":205},[288,68981,68982],{"class":290,"line":291},[288,68983,68977],{"class":298},[22171,68985,68987],{"id":68986},"_33114-删除节点","3.3.11.4 删除节点",[19,68989,68990],{},[200,68991],{"alt":205,"src":68992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68994,68995],{},"父亲删儿子",[19,68997,68998],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[260,69000,69002],{"id":69001},"_3312-m端事件","3.3.12 M端事件",[19,69004,69005],{},"M端就是移动端",[19,69007,69008],{},[200,69009],{"alt":205,"src":69010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[260,69012,69014],{"id":69013},"_3313-插件","3.3.13 插件",[19,69016,69017],{},"要熟悉官网！！！",[19,69019,69020],{},[104,69021,69022],{"href":69022,"rel":69023},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[108],[19,69025,69026],{},[104,69027,69028],{"href":69028,"rel":69029},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[108],[260,69031,69033],{"id":69032},"_3314-学生信息表","3.3.14 学生信息表",[243,69035,69036,69039,69042,69045,69048,69051,69054,69057],{},[246,69037,69038],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[246,69040,69041],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[246,69043,69044],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[246,69046,69047],{},"用好表单元素自带的属性，value,name等",[246,69049,69050],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[246,69052,69053],{},"不要忘记事件对象",[246,69055,69056],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[246,69058,69059],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69061,69062],{},"结构：",[280,69064,69066],{"className":50806,"code":69065,"language":50808,"meta":205,"style":205},"\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",[25,69067,69068,69078,69092,69096,69104,69118,69138,69159,69172,69196,69204,69208,69216,69229,69250,69278,69306,69311,69333,69353,69372,69380,69408,69430,69450,69470,69490,69510,69530,69538,69558,69566,69570,69583,69591,69599,69607,69620,69633,69646,69659,69672,69685,69698,69706,69714,69722,69727,69732,69737,69742,69747,69752,69757,69762,69767,69772,69777,69782,69787,69795,69803,69811,69815,69835,69854,69874,69894,69914,69934,69938,69943,69963,69968,69978,69983,69988,70008,70030,70035,70045,70049,70053,70058,70063,70092,70106,70121,70125,70129,70133,70138,70149,70162,70167,70172,70177,70182,70187,70191,70196,70201,70210,70215,70220,70232,70237,70244,70248,70253,70263,70268,70278,70283,70311,70332,70342,70362,70380,70397,70414,70431,70448,70452,70462,70467,70472,70477,70488,70492,70496,70500,70505,70510,70531,70543,70548,70553,70558,70572,70577,70584,70588,70592,70600,70604,70612,70616],{"__ignoreMap":205},[288,69069,69070,69072,69074,69076],{"class":290,"line":291},[288,69071,51470],{"class":298},[288,69073,51474],{"class":51473},[288,69075,51477],{"class":2135},[288,69077,51480],{"class":298},[288,69079,69080,69082,69084,69086,69088,69090],{"class":290,"line":206},[288,69081,1207],{"class":298},[288,69083,50808],{"class":51473},[288,69085,51489],{"class":2135},[288,69087,344],{"class":298},[288,69089,51494],{"class":403},[288,69091,51480],{"class":298},[288,69093,69094],{"class":290,"line":1352},[288,69095,2572],{"emptyLinePlaceholder":217},[288,69097,69098,69100,69102],{"class":290,"line":1367},[288,69099,1207],{"class":298},[288,69101,51507],{"class":51473},[288,69103,51480],{"class":298},[288,69105,69106,69108,69110,69112,69114,69116],{"class":290,"line":1373},[288,69107,52317],{"class":298},[288,69109,51517],{"class":51473},[288,69111,51520],{"class":2135},[288,69113,344],{"class":298},[288,69115,51525],{"class":403},[288,69117,59300],{"class":298},[288,69119,69120,69122,69124,69126,69128,69130,69132,69134,69136],{"class":290,"line":1387},[288,69121,52317],{"class":298},[288,69123,51517],{"class":51473},[288,69125,15093],{"class":2135},[288,69127,344],{"class":298},[288,69129,51564],{"class":403},[288,69131,51544],{"class":2135},[288,69133,344],{"class":298},[288,69135,51571],{"class":403},[288,69137,59300],{"class":298},[288,69139,69140,69142,69144,69146,69148,69150,69152,69154,69157],{"class":290,"line":1393},[288,69141,52317],{"class":298},[288,69143,51517],{"class":51473},[288,69145,51536],{"class":2135},[288,69147,344],{"class":298},[288,69149,51541],{"class":403},[288,69151,51544],{"class":2135},[288,69153,344],{"class":298},[288,69155,69156],{"class":403},"\"ie=edge\"",[288,69158,59300],{"class":298},[288,69160,69161,69163,69165,69168,69170],{"class":290,"line":1484},[288,69162,52317],{"class":298},[288,69164,51580],{"class":51473},[288,69166,69167],{"class":298},">学生信息管理\u003C\u002F",[288,69169,51580],{"class":51473},[288,69171,51480],{"class":298},[288,69173,69174,69176,69179,69182,69184,69187,69189,69191,69194],{"class":290,"line":1490},[288,69175,52317],{"class":298},[288,69177,69178],{"class":51473},"link",[288,69180,69181],{"class":2135}," rel",[288,69183,344],{"class":298},[288,69185,69186],{"class":403},"\"stylesheet\"",[288,69188,61230],{"class":2135},[288,69190,344],{"class":298},[288,69192,69193],{"class":403},"\"css\u002Findex.css\"",[288,69195,59300],{"class":298},[288,69197,69198,69200,69202],{"class":290,"line":1502},[288,69199,51958],{"class":298},[288,69201,51507],{"class":51473},[288,69203,51480],{"class":298},[288,69205,69206],{"class":290,"line":1784},[288,69207,2572],{"emptyLinePlaceholder":217},[288,69209,69210,69212,69214],{"class":290,"line":1789},[288,69211,1207],{"class":298},[288,69213,51973],{"class":51473},[288,69215,51480],{"class":298},[288,69217,69218,69220,69222,69225,69227],{"class":290,"line":1795},[288,69219,52317],{"class":298},[288,69221,10],{"class":51473},[288,69223,69224],{"class":298},">新增学员\u003C\u002F",[288,69226,10],{"class":51473},[288,69228,51480],{"class":298},[288,69230,69231,69233,69235,69237,69239,69241,69244,69246,69248],{"class":290,"line":1800},[288,69232,52317],{"class":298},[288,69234,66798],{"class":51473},[288,69236,53659],{"class":2135},[288,69238,344],{"class":298},[288,69240,62837],{"class":403},[288,69242,69243],{"class":2135}," autocomplete",[288,69245,344],{"class":298},[288,69247,31949],{"class":403},[288,69249,51480],{"class":298},[288,69251,69252,69255,69257,69259,69261,69263,69265,69267,69270,69272,69274,69276],{"class":290,"line":1814},[288,69253,69254],{"class":298},"    姓名：\u003C",[288,69256,53994],{"class":51473},[288,69258,53997],{"class":2135},[288,69260,344],{"class":298},[288,69262,62872],{"class":403},[288,69264,53659],{"class":2135},[288,69266,344],{"class":298},[288,69268,69269],{"class":403},"\"uname\"",[288,69271,15093],{"class":2135},[288,69273,344],{"class":298},[288,69275,69269],{"class":403},[288,69277,59300],{"class":298},[288,69279,69280,69283,69285,69287,69289,69291,69293,69295,69298,69300,69302,69304],{"class":290,"line":1819},[288,69281,69282],{"class":298},"    年龄：\u003C",[288,69284,53994],{"class":51473},[288,69286,53997],{"class":2135},[288,69288,344],{"class":298},[288,69290,62872],{"class":403},[288,69292,53659],{"class":2135},[288,69294,344],{"class":298},[288,69296,69297],{"class":403},"\"age\"",[288,69299,15093],{"class":2135},[288,69301,344],{"class":298},[288,69303,69297],{"class":403},[288,69305,59300],{"class":298},[288,69307,69308],{"class":290,"line":1825},[288,69309,69310],{"class":298},"    性别:\n",[288,69312,69313,69315,69318,69320,69322,69325,69327,69329,69331],{"class":290,"line":1846},[288,69314,51514],{"class":298},[288,69316,69317],{"class":51473},"select",[288,69319,15093],{"class":2135},[288,69321,344],{"class":298},[288,69323,69324],{"class":403},"\"gender\"",[288,69326,53659],{"class":2135},[288,69328,344],{"class":298},[288,69330,69324],{"class":403},[288,69332,51480],{"class":298},[288,69334,69335,69337,69340,69342,69344,69346,69349,69351],{"class":290,"line":1851},[288,69336,55407],{"class":298},[288,69338,69339],{"class":51473},"option",[288,69341,66824],{"class":2135},[288,69343,344],{"class":298},[288,69345,10134],{"class":403},[288,69347,69348],{"class":298},">男\u003C\u002F",[288,69350,69339],{"class":51473},[288,69352,51480],{"class":298},[288,69354,69355,69357,69359,69361,69363,69365,69368,69370],{"class":290,"line":1865},[288,69356,55407],{"class":298},[288,69358,69339],{"class":51473},[288,69360,66824],{"class":2135},[288,69362,344],{"class":298},[288,69364,10203],{"class":403},[288,69366,69367],{"class":298},">女\u003C\u002F",[288,69369,69339],{"class":51473},[288,69371,51480],{"class":298},[288,69373,69374,69376,69378],{"class":290,"line":1870},[288,69375,51949],{"class":298},[288,69377,69317],{"class":51473},[288,69379,51480],{"class":298},[288,69381,69382,69385,69387,69389,69391,69393,69395,69397,69400,69402,69404,69406],{"class":290,"line":1899},[288,69383,69384],{"class":298},"    薪资：\u003C",[288,69386,53994],{"class":51473},[288,69388,53997],{"class":2135},[288,69390,344],{"class":298},[288,69392,62872],{"class":403},[288,69394,53659],{"class":2135},[288,69396,344],{"class":298},[288,69398,69399],{"class":403},"\"salary\"",[288,69401,15093],{"class":2135},[288,69403,344],{"class":298},[288,69405,69399],{"class":403},[288,69407,59300],{"class":298},[288,69409,69410,69413,69415,69417,69419,69422,69424,69426,69428],{"class":290,"line":1904},[288,69411,69412],{"class":298},"    就业城市：\u003C",[288,69414,69317],{"class":51473},[288,69416,15093],{"class":2135},[288,69418,344],{"class":298},[288,69420,69421],{"class":403},"\"city\"",[288,69423,53659],{"class":2135},[288,69425,344],{"class":298},[288,69427,69421],{"class":403},[288,69429,51480],{"class":298},[288,69431,69432,69434,69436,69438,69440,69443,69446,69448],{"class":290,"line":1921},[288,69433,55407],{"class":298},[288,69435,69339],{"class":51473},[288,69437,66824],{"class":2135},[288,69439,344],{"class":298},[288,69441,69442],{"class":403},"\"北京\"",[288,69444,69445],{"class":298},">北京\u003C\u002F",[288,69447,69339],{"class":51473},[288,69449,51480],{"class":298},[288,69451,69452,69454,69456,69458,69460,69463,69466,69468],{"class":290,"line":1926},[288,69453,55407],{"class":298},[288,69455,69339],{"class":51473},[288,69457,66824],{"class":2135},[288,69459,344],{"class":298},[288,69461,69462],{"class":403},"\"上海\"",[288,69464,69465],{"class":298},">上海\u003C\u002F",[288,69467,69339],{"class":51473},[288,69469,51480],{"class":298},[288,69471,69472,69474,69476,69478,69480,69483,69486,69488],{"class":290,"line":1931},[288,69473,55407],{"class":298},[288,69475,69339],{"class":51473},[288,69477,66824],{"class":2135},[288,69479,344],{"class":298},[288,69481,69482],{"class":403},"\"广州\"",[288,69484,69485],{"class":298},">广州\u003C\u002F",[288,69487,69339],{"class":51473},[288,69489,51480],{"class":298},[288,69491,69492,69494,69496,69498,69500,69503,69506,69508],{"class":290,"line":1936},[288,69493,55407],{"class":298},[288,69495,69339],{"class":51473},[288,69497,66824],{"class":2135},[288,69499,344],{"class":298},[288,69501,69502],{"class":403},"\"深圳\"",[288,69504,69505],{"class":298},">深圳\u003C\u002F",[288,69507,69339],{"class":51473},[288,69509,51480],{"class":298},[288,69511,69512,69514,69516,69518,69520,69523,69526,69528],{"class":290,"line":1950},[288,69513,55407],{"class":298},[288,69515,69339],{"class":51473},[288,69517,66824],{"class":2135},[288,69519,344],{"class":298},[288,69521,69522],{"class":403},"\"曹县\"",[288,69524,69525],{"class":298},">曹县\u003C\u002F",[288,69527,69339],{"class":51473},[288,69529,51480],{"class":298},[288,69531,69532,69534,69536],{"class":290,"line":1955},[288,69533,51949],{"class":298},[288,69535,69317],{"class":51473},[288,69537,51480],{"class":298},[288,69539,69540,69542,69544,69546,69548,69551,69554,69556],{"class":290,"line":2749},[288,69541,51514],{"class":298},[288,69543,54060],{"class":51473},[288,69545,53659],{"class":2135},[288,69547,344],{"class":298},[288,69549,69550],{"class":403},"\"add\"",[288,69552,69553],{"class":298},">录入\u003C\u002F",[288,69555,54060],{"class":51473},[288,69557,51480],{"class":298},[288,69559,69560,69562,69564],{"class":290,"line":2763},[288,69561,52590],{"class":298},[288,69563,66798],{"class":51473},[288,69565,51480],{"class":298},[288,69567,69568],{"class":290,"line":2771},[288,69569,2572],{"emptyLinePlaceholder":217},[288,69571,69572,69574,69576,69579,69581],{"class":290,"line":2776},[288,69573,52317],{"class":298},[288,69575,10],{"class":51473},[288,69577,69578],{"class":298},">就业榜\u003C\u002F",[288,69580,10],{"class":51473},[288,69582,51480],{"class":298},[288,69584,69585,69587,69589],{"class":290,"line":2782},[288,69586,52317],{"class":298},[288,69588,436],{"class":51473},[288,69590,51480],{"class":298},[288,69592,69593,69595,69597],{"class":290,"line":2788},[288,69594,51514],{"class":298},[288,69596,439],{"class":51473},[288,69598,51480],{"class":298},[288,69600,69601,69603,69605],{"class":290,"line":2793},[288,69602,55407],{"class":298},[288,69604,442],{"class":51473},[288,69606,51480],{"class":298},[288,69608,69609,69611,69613,69616,69618],{"class":290,"line":8121},[288,69610,55475],{"class":298},[288,69612,445],{"class":51473},[288,69614,69615],{"class":298},">序号\u003C\u002F",[288,69617,445],{"class":51473},[288,69619,51480],{"class":298},[288,69621,69622,69624,69626,69629,69631],{"class":290,"line":8145},[288,69623,55475],{"class":298},[288,69625,445],{"class":51473},[288,69627,69628],{"class":298},">姓名\u003C\u002F",[288,69630,445],{"class":51473},[288,69632,51480],{"class":298},[288,69634,69635,69637,69639,69642,69644],{"class":290,"line":8150},[288,69636,55475],{"class":298},[288,69638,445],{"class":51473},[288,69640,69641],{"class":298},">年龄\u003C\u002F",[288,69643,445],{"class":51473},[288,69645,51480],{"class":298},[288,69647,69648,69650,69652,69655,69657],{"class":290,"line":8156},[288,69649,55475],{"class":298},[288,69651,445],{"class":51473},[288,69653,69654],{"class":298},">性别\u003C\u002F",[288,69656,445],{"class":51473},[288,69658,51480],{"class":298},[288,69660,69661,69663,69665,69668,69670],{"class":290,"line":8183},[288,69662,55475],{"class":298},[288,69664,445],{"class":51473},[288,69666,69667],{"class":298},">薪资\u003C\u002F",[288,69669,445],{"class":51473},[288,69671,51480],{"class":298},[288,69673,69674,69676,69678,69681,69683],{"class":290,"line":8188},[288,69675,55475],{"class":298},[288,69677,445],{"class":51473},[288,69679,69680],{"class":298},">就业城市\u003C\u002F",[288,69682,445],{"class":51473},[288,69684,51480],{"class":298},[288,69686,69687,69689,69691,69694,69696],{"class":290,"line":8194},[288,69688,55475],{"class":298},[288,69690,445],{"class":51473},[288,69692,69693],{"class":298},">操作\u003C\u002F",[288,69695,445],{"class":51473},[288,69697,51480],{"class":298},[288,69699,69700,69702,69704],{"class":290,"line":8206},[288,69701,55580],{"class":298},[288,69703,442],{"class":51473},[288,69705,51480],{"class":298},[288,69707,69708,69710,69712],{"class":290,"line":8218},[288,69709,51949],{"class":298},[288,69711,439],{"class":51473},[288,69713,51480],{"class":298},[288,69715,69716,69718,69720],{"class":290,"line":8230},[288,69717,51514],{"class":298},[288,69719,483],{"class":51473},[288,69721,51480],{"class":298},[288,69723,69724],{"class":290,"line":9889},[288,69725,69726],{"class":357},"      \u003C!-- \n",[288,69728,69729],{"class":290,"line":9914},[288,69730,69731],{"class":357},"        \u003Ctr>\n",[288,69733,69734],{"class":290,"line":9937},[288,69735,69736],{"class":357},"          \u003Ctd>1001\u003C\u002Ftd>\n",[288,69738,69739],{"class":290,"line":9961},[288,69740,69741],{"class":357},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[288,69743,69744],{"class":290,"line":9966},[288,69745,69746],{"class":357},"          \u003Ctd>19\u003C\u002Ftd>\n",[288,69748,69749],{"class":290,"line":9971},[288,69750,69751],{"class":357},"          \u003Ctd>男\u003C\u002Ftd>\n",[288,69753,69754],{"class":290,"line":9976},[288,69755,69756],{"class":357},"          \u003Ctd>15000\u003C\u002Ftd>\n",[288,69758,69759],{"class":290,"line":9985},[288,69760,69761],{"class":357},"          \u003Ctd>上海\u003C\u002Ftd>\n",[288,69763,69764],{"class":290,"line":9990},[288,69765,69766],{"class":357},"          \u003Ctd>\n",[288,69768,69769],{"class":290,"line":9996},[288,69770,69771],{"class":357},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[288,69773,69774],{"class":290,"line":10017},[288,69775,69776],{"class":357},"          \u003C\u002Ftd>\n",[288,69778,69779],{"class":290,"line":10023},[288,69780,69781],{"class":357},"        \u003C\u002Ftr> \n",[288,69783,69784],{"class":290,"line":10037},[288,69785,69786],{"class":357},"        -->\n",[288,69788,69789,69791,69793],{"class":290,"line":10043},[288,69790,51949],{"class":298},[288,69792,483],{"class":51473},[288,69794,51480],{"class":298},[288,69796,69797,69799,69801],{"class":290,"line":10070},[288,69798,52590],{"class":298},[288,69800,436],{"class":51473},[288,69802,51480],{"class":298},[288,69804,69805,69807,69809],{"class":290,"line":10079},[288,69806,52317],{"class":298},[288,69808,51986],{"class":51473},[288,69810,51480],{"class":298},[288,69812,69813],{"class":290,"line":10085},[288,69814,60131],{"class":357},[288,69816,69817,69819,69822,69824,69826,69828,69830,69833],{"class":290,"line":10093},[288,69818,11394],{"class":294},[288,69820,69821],{"class":347}," uname",[288,69823,13737],{"class":294},[288,69825,54569],{"class":298},[288,69827,54572],{"class":2135},[288,69829,299],{"class":298},[288,69831,69832],{"class":403},"'.uname'",[288,69834,305],{"class":298},[288,69836,69837,69839,69841,69843,69845,69847,69849,69852],{"class":290,"line":10098},[288,69838,11394],{"class":294},[288,69840,15862],{"class":347},[288,69842,13737],{"class":294},[288,69844,54569],{"class":298},[288,69846,54572],{"class":2135},[288,69848,299],{"class":298},[288,69850,69851],{"class":403},"'.age'",[288,69853,305],{"class":298},[288,69855,69856,69858,69861,69863,69865,69867,69869,69872],{"class":290,"line":16777},[288,69857,11394],{"class":294},[288,69859,69860],{"class":347}," gender",[288,69862,13737],{"class":294},[288,69864,54569],{"class":298},[288,69866,54572],{"class":2135},[288,69868,299],{"class":298},[288,69870,69871],{"class":403},"'.gender'",[288,69873,305],{"class":298},[288,69875,69876,69878,69881,69883,69885,69887,69889,69892],{"class":290,"line":16783},[288,69877,11394],{"class":294},[288,69879,69880],{"class":347}," salary",[288,69882,13737],{"class":294},[288,69884,54569],{"class":298},[288,69886,54572],{"class":2135},[288,69888,299],{"class":298},[288,69890,69891],{"class":403},"'.salary'",[288,69893,305],{"class":298},[288,69895,69896,69898,69901,69903,69905,69907,69909,69912],{"class":290,"line":16806},[288,69897,11394],{"class":294},[288,69899,69900],{"class":347}," city",[288,69902,13737],{"class":294},[288,69904,54569],{"class":298},[288,69906,54572],{"class":2135},[288,69908,299],{"class":298},[288,69910,69911],{"class":403},"'.city'",[288,69913,305],{"class":298},[288,69915,69916,69918,69921,69923,69925,69927,69929,69932],{"class":290,"line":16812},[288,69917,11394],{"class":294},[288,69919,69920],{"class":347}," tbody",[288,69922,13737],{"class":294},[288,69924,54569],{"class":298},[288,69926,54572],{"class":2135},[288,69928,299],{"class":298},[288,69930,69931],{"class":403},"'tbody'",[288,69933,305],{"class":298},[288,69935,69936],{"class":290,"line":16835},[288,69937,2572],{"emptyLinePlaceholder":217},[288,69939,69940],{"class":290,"line":16849},[288,69941,69942],{"class":357},"    \u002F\u002F 获取所有带有name属性的元素\n",[288,69944,69945,69947,69950,69952,69954,69956,69958,69961],{"class":290,"line":16869},[288,69946,11394],{"class":294},[288,69948,69949],{"class":347}," items",[288,69951,13737],{"class":294},[288,69953,54569],{"class":298},[288,69955,55854],{"class":2135},[288,69957,299],{"class":298},[288,69959,69960],{"class":403},"'[name]'",[288,69962,305],{"class":298},[288,69964,69965],{"class":290,"line":16875},[288,69966,69967],{"class":357},"    \u002F\u002F 声明一个空的数组\n",[288,69969,69970,69972,69974,69976],{"class":290,"line":16886},[288,69971,11394],{"class":294},[288,69973,57868],{"class":347},[288,69975,13737],{"class":294},[288,69977,52011],{"class":298},[288,69979,69980],{"class":290,"line":16909},[288,69981,69982],{"class":357},"    \u002F\u002F 1.录入模块\n",[288,69984,69985],{"class":290,"line":16931},[288,69986,69987],{"class":357},"    \u002F\u002F 1.1这是一个表单提交事件\n",[288,69989,69990,69992,69995,69997,69999,70001,70003,70006],{"class":290,"line":16936},[288,69991,11394],{"class":294},[288,69993,69994],{"class":347}," info",[288,69996,13737],{"class":294},[288,69998,54569],{"class":298},[288,70000,54572],{"class":2135},[288,70002,299],{"class":298},[288,70004,70005],{"class":403},"'.info'",[288,70007,305],{"class":298},[288,70009,70010,70013,70015,70017,70020,70022,70024,70026,70028],{"class":290,"line":16942},[288,70011,70012],{"class":298},"    info.",[288,70014,57986],{"class":2135},[288,70016,299],{"class":298},[288,70018,70019],{"class":403},"'submit'",[288,70021,12608],{"class":298},[288,70023,54622],{"class":294},[288,70025,1830],{"class":298},[288,70027,373],{"class":5389},[288,70029,12615],{"class":298},[288,70031,70032],{"class":290,"line":16956},[288,70033,70034],{"class":357},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[288,70036,70037,70040,70043],{"class":290,"line":16969},[288,70038,70039],{"class":298},"      e.",[288,70041,70042],{"class":2135},"preventDefault",[288,70044,2148],{"class":298},[288,70046,70047],{"class":290,"line":16974},[288,70048,60185],{"class":357},[288,70050,70051],{"class":290,"line":16988},[288,70052,2572],{"emptyLinePlaceholder":217},[288,70054,70055],{"class":290,"line":16993},[288,70056,70057],{"class":357},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[288,70059,70060],{"class":290,"line":16999},[288,70061,70062],{"class":357},"      \u002F\u002F 先遍历循环\n",[288,70064,70065,70067,70069,70071,70073,70075,70077,70079,70081,70084,70086,70088,70090],{"class":290,"line":17004},[288,70066,52457],{"class":294},[288,70068,1830],{"class":298},[288,70070,52020],{"class":294},[288,70072,9611],{"class":298},[288,70074,344],{"class":294},[288,70076,4265],{"class":347},[288,70078,9618],{"class":298},[288,70080,1207],{"class":294},[288,70082,70083],{"class":298}," items.",[288,70085,52141],{"class":347},[288,70087,3386],{"class":298},[288,70089,2464],{"class":294},[288,70091,12615],{"class":298},[288,70093,70094,70096,70099,70101,70104],{"class":290,"line":17018},[288,70095,2669],{"class":294},[288,70097,70098],{"class":298}," (items[i].value ",[288,70100,54659],{"class":294},[288,70102,70103],{"class":403}," ''",[288,70105,12615],{"class":298},[288,70107,70108,70111,70114,70116,70119],{"class":290,"line":17023},[288,70109,70110],{"class":294},"          return",[288,70112,70113],{"class":2135}," alert",[288,70115,299],{"class":298},[288,70117,70118],{"class":403},"'输入内容不能为空'",[288,70120,305],{"class":298},[288,70122,70123],{"class":290,"line":17028},[288,70124,2701],{"class":298},[288,70126,70127],{"class":290,"line":17042},[288,70128,52571],{"class":298},[288,70130,70131],{"class":290,"line":17054},[288,70132,2572],{"emptyLinePlaceholder":217},[288,70134,70135],{"class":290,"line":17059},[288,70136,70137],{"class":357},"      \u002F\u002F 创建新的对象\n",[288,70139,70140,70142,70145,70147],{"class":290,"line":17072},[288,70141,58401],{"class":294},[288,70143,70144],{"class":347}," obj",[288,70146,13737],{"class":294},[288,70148,15745],{"class":298},[288,70150,70151,70154,70156,70158,70160],{"class":290,"line":17077},[288,70152,70153],{"class":298},"        stuID: arr.",[288,70155,52141],{"class":347},[288,70157,45739],{"class":294},[288,70159,25291],{"class":347},[288,70161,31639],{"class":298},[288,70163,70164],{"class":290,"line":17082},[288,70165,70166],{"class":298},"        uname: uname.value,\n",[288,70168,70169],{"class":290,"line":17087},[288,70170,70171],{"class":298},"        age: age.value,\n",[288,70173,70174],{"class":290,"line":17100},[288,70175,70176],{"class":298},"        gender: gender.value,\n",[288,70178,70179],{"class":290,"line":17105},[288,70180,70181],{"class":298},"        salary: salary.value,\n",[288,70183,70184],{"class":290,"line":32806},[288,70185,70186],{"class":298},"        city: city.value\n",[288,70188,70189],{"class":290,"line":32812},[288,70190,52571],{"class":298},[288,70192,70193],{"class":290,"line":32818},[288,70194,70195],{"class":357},"      \u002F\u002F console.log(obj);\n",[288,70197,70198],{"class":290,"line":32824},[288,70199,70200],{"class":357},"      \u002F\u002F 追加到数组里面\n",[288,70202,70203,70205,70207],{"class":290,"line":32830},[288,70204,58180],{"class":298},[288,70206,52057],{"class":2135},[288,70208,70209],{"class":298},"(obj)\n",[288,70211,70212],{"class":290,"line":32841},[288,70213,70214],{"class":357},"      \u002F\u002F console.log(arr);\n",[288,70216,70217],{"class":290,"line":32847},[288,70218,70219],{"class":357},"      \u002F\u002F 清空表单  reset重置表单\n",[288,70221,70222,70225,70227,70230],{"class":290,"line":32867},[288,70223,70224],{"class":347},"      this",[288,70226,855],{"class":298},[288,70228,70229],{"class":2135},"reset",[288,70231,2148],{"class":298},[288,70233,70234],{"class":290,"line":32873},[288,70235,70236],{"class":357},"      \u002F\u002F 调用渲染函数\n",[288,70238,70239,70242],{"class":290,"line":32884},[288,70240,70241],{"class":2135},"      render",[288,70243,2148],{"class":298},[288,70245,70246],{"class":290,"line":32890},[288,70247,33634],{"class":298},[288,70249,70250],{"class":290,"line":32896},[288,70251,70252],{"class":357},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[288,70254,70255,70258,70261],{"class":290,"line":32902},[288,70256,70257],{"class":294},"    function",[288,70259,70260],{"class":2135}," render",[288,70262,11026],{"class":298},[288,70264,70265],{"class":290,"line":32908},[288,70266,70267],{"class":357},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[288,70269,70270,70273,70275],{"class":290,"line":32914},[288,70271,70272],{"class":298},"      tbody.innerHTML ",[288,70274,344],{"class":294},[288,70276,70277],{"class":403}," ''\n",[288,70279,70280],{"class":290,"line":32920},[288,70281,70282],{"class":357},"      \u002F\u002F 遍历数组\n",[288,70284,70285,70287,70289,70291,70293,70295,70297,70299,70301,70303,70305,70307,70309],{"class":290,"line":32926},[288,70286,52457],{"class":294},[288,70288,1830],{"class":298},[288,70290,52020],{"class":294},[288,70292,9611],{"class":298},[288,70294,344],{"class":294},[288,70296,4265],{"class":347},[288,70298,9618],{"class":298},[288,70300,1207],{"class":294},[288,70302,52138],{"class":298},[288,70304,52141],{"class":347},[288,70306,3386],{"class":298},[288,70308,2464],{"class":294},[288,70310,12615],{"class":298},[288,70312,70313,70315,70318,70320,70322,70325,70327,70330],{"class":290,"line":32946},[288,70314,61443],{"class":294},[288,70316,70317],{"class":347}," tr",[288,70319,13737],{"class":294},[288,70321,54569],{"class":298},[288,70323,70324],{"class":2135},"createElement",[288,70326,299],{"class":298},[288,70328,70329],{"class":403},"'tr'",[288,70331,305],{"class":298},[288,70333,70334,70337,70339],{"class":290,"line":32952},[288,70335,70336],{"class":298},"        tr.innerHTML ",[288,70338,344],{"class":294},[288,70340,70341],{"class":403}," `\n",[288,70343,70344,70347,70349,70351,70353,70356,70359],{"class":290,"line":32968},[288,70345,70346],{"class":403},"        \u003Ctd>${",[288,70348,4052],{"class":298},[288,70350,1187],{"class":403},[288,70352,738],{"class":298},[288,70354,70355],{"class":403},"].",[288,70357,70358],{"class":298},"stuID",[288,70360,70361],{"class":403},"}\u003C\u002Ftd>\n",[288,70363,70364,70367,70369,70371,70373,70375,70378],{"class":290,"line":32974},[288,70365,70366],{"class":403},"          \u003Ctd>${",[288,70368,4052],{"class":298},[288,70370,1187],{"class":403},[288,70372,738],{"class":298},[288,70374,70355],{"class":403},[288,70376,70377],{"class":298},"uname",[288,70379,70361],{"class":403},[288,70381,70382,70384,70386,70388,70390,70392,70395],{"class":290,"line":32988},[288,70383,70366],{"class":403},[288,70385,4052],{"class":298},[288,70387,1187],{"class":403},[288,70389,738],{"class":298},[288,70391,70355],{"class":403},[288,70393,70394],{"class":298},"age",[288,70396,70361],{"class":403},[288,70398,70399,70401,70403,70405,70407,70409,70412],{"class":290,"line":32994},[288,70400,70366],{"class":403},[288,70402,4052],{"class":298},[288,70404,1187],{"class":403},[288,70406,738],{"class":298},[288,70408,70355],{"class":403},[288,70410,70411],{"class":298},"gender",[288,70413,70361],{"class":403},[288,70415,70416,70418,70420,70422,70424,70426,70429],{"class":290,"line":33009},[288,70417,70366],{"class":403},[288,70419,4052],{"class":298},[288,70421,1187],{"class":403},[288,70423,738],{"class":298},[288,70425,70355],{"class":403},[288,70427,70428],{"class":298},"salary",[288,70430,70361],{"class":403},[288,70432,70433,70435,70437,70439,70441,70443,70446],{"class":290,"line":33015},[288,70434,70366],{"class":403},[288,70436,4052],{"class":298},[288,70438,1187],{"class":403},[288,70440,738],{"class":298},[288,70442,70355],{"class":403},[288,70444,70445],{"class":298},"city",[288,70447,70361],{"class":403},[288,70449,70450],{"class":290,"line":33024},[288,70451,69766],{"class":403},[288,70453,70454,70457,70459],{"class":290,"line":33030},[288,70455,70456],{"class":403},"            \u003Ca href=\"javascript:\" data-id=${",[288,70458,738],{"class":298},[288,70460,70461],{"class":403},"}>删除\u003C\u002Fa>\n",[288,70463,70464],{"class":290,"line":33039},[288,70465,70466],{"class":403},"          \u003C\u002Ftd> \n",[288,70468,70469],{"class":290,"line":33045},[288,70470,70471],{"class":403},"          `\n",[288,70473,70474],{"class":290,"line":33051},[288,70475,70476],{"class":357},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[288,70478,70479,70482,70485],{"class":290,"line":33060},[288,70480,70481],{"class":298},"        tbody.",[288,70483,70484],{"class":2135},"appendChild",[288,70486,70487],{"class":298},"(tr)\n",[288,70489,70490],{"class":290,"line":33066},[288,70491,52571],{"class":298},[288,70493,70494],{"class":290,"line":33077},[288,70495,2359],{"class":298},[288,70497,70498],{"class":290,"line":33083},[288,70499,2572],{"emptyLinePlaceholder":217},[288,70501,70502],{"class":290,"line":33102},[288,70503,70504],{"class":357},"    \u002F\u002F 3.删除委托\n",[288,70506,70507],{"class":290,"line":33108},[288,70508,70509],{"class":357},"    \u002F\u002F 3.1 事件委托 tbody\n",[288,70511,70512,70515,70517,70519,70521,70523,70525,70527,70529],{"class":290,"line":33119},[288,70513,70514],{"class":298},"    tbody.",[288,70516,57986],{"class":2135},[288,70518,299],{"class":298},[288,70520,57991],{"class":403},[288,70522,12608],{"class":298},[288,70524,54622],{"class":294},[288,70526,1830],{"class":298},[288,70528,373],{"class":5389},[288,70530,12615],{"class":298},[288,70532,70533,70535,70537,70539,70541],{"class":290,"line":33125},[288,70534,54653],{"class":294},[288,70536,67207],{"class":298},[288,70538,54659],{"class":294},[288,70540,68429],{"class":403},[288,70542,12615],{"class":298},[288,70544,70545],{"class":290,"line":33145},[288,70546,70547],{"class":357},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[288,70549,70550],{"class":290,"line":33161},[288,70551,70552],{"class":357},"        \u002F\u002F console.log(e.target.dataset.id);\n",[288,70554,70555],{"class":290,"line":33167},[288,70556,70557],{"class":357},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[288,70559,70560,70563,70565,70568,70570],{"class":290,"line":33181},[288,70561,70562],{"class":298},"        arr.",[288,70564,58183],{"class":2135},[288,70566,70567],{"class":298},"(e.target.dataset.id, ",[288,70569,516],{"class":347},[288,70571,305],{"class":298},[288,70573,70574],{"class":290,"line":33187},[288,70575,70576],{"class":357},"        \u002F\u002F 重新渲染一次\n",[288,70578,70579,70582],{"class":290,"line":33193},[288,70580,70581],{"class":2135},"        render",[288,70583,2148],{"class":298},[288,70585,70586],{"class":290,"line":33204},[288,70587,52571],{"class":298},[288,70589,70590],{"class":290,"line":33210},[288,70591,33634],{"class":298},[288,70593,70594,70596,70598],{"class":290,"line":33216},[288,70595,52590],{"class":298},[288,70597,51986],{"class":51473},[288,70599,51480],{"class":298},[288,70601,70602],{"class":290,"line":33226},[288,70603,2572],{"emptyLinePlaceholder":217},[288,70605,70606,70608,70610],{"class":290,"line":33232},[288,70607,51958],{"class":298},[288,70609,51973],{"class":51473},[288,70611,51480],{"class":298},[288,70613,70614],{"class":290,"line":33243},[288,70615,2572],{"emptyLinePlaceholder":217},[288,70617,70618,70620,70622],{"class":290,"line":33249},[288,70619,51958],{"class":298},[288,70621,50808],{"class":51473},[288,70623,51480],{"class":298},[19,70625,70626],{},"样式：",[280,70628,70632],{"className":70629,"code":70630,"language":70631,"meta":205,"style":205},"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",[25,70633,70634,70639,70649,70658,70662,70666,70671,70681,70686,70690,70695,70705,70710,70719,70723,70727,70732,70737,70747,70757,70762,70766,70771,70780,70790,70795,70805,70815,70819,70824,70832,70836,70841,70846,70851,70859,70868,70872,70877,70886,70890,70895,70904,70908,70913,70922,70931,70939,70943,70948,70957,70967,70976,70986,70992,71001,71011,71021,71025,71030,71039,71047,71057,71065,71074,71083,71093,71101,71105,71110,71119],{"__ignoreMap":205},[288,70635,70636],{"class":290,"line":291},[288,70637,70638],{"class":298},"* {\n",[288,70640,70641,70644,70646],{"class":290,"line":206},[288,70642,70643],{"class":51473},"  margin",[288,70645,51610],{"class":298},[288,70647,70648],{"class":403},"0;\n",[288,70650,70651,70654,70656],{"class":290,"line":1352},[288,70652,70653],{"class":403},"  padding",[288,70655,51610],{"class":298},[288,70657,70648],{"class":403},[288,70659,70660],{"class":290,"line":1367},[288,70661,1737],{"class":298},[288,70663,70664],{"class":290,"line":1373},[288,70665,2572],{"emptyLinePlaceholder":217},[288,70667,70668],{"class":290,"line":1387},[288,70669,70670],{"class":403},"a {\n",[288,70672,70673,70676,70678],{"class":290,"line":1393},[288,70674,70675],{"class":51473},"  text-decoration",[288,70677,51610],{"class":298},[288,70679,70680],{"class":403},"none;\n",[288,70682,70683],{"class":290,"line":1484},[288,70684,70685],{"class":403},"  color:#721c24;\n",[288,70687,70688],{"class":290,"line":1490},[288,70689,1737],{"class":298},[288,70691,70692],{"class":290,"line":1502},[288,70693,70694],{"class":403},"h1 {\n",[288,70696,70697,70700,70702],{"class":290,"line":1784},[288,70698,70699],{"class":51473},"  text-align",[288,70701,51610],{"class":298},[288,70703,70704],{"class":403},"center;\n",[288,70706,70707],{"class":290,"line":1789},[288,70708,70709],{"class":403},"  color:#333;\n",[288,70711,70712,70714,70716],{"class":290,"line":1795},[288,70713,70643],{"class":51473},[288,70715,51610],{"class":298},[288,70717,70718],{"class":403},"20px 0;\n",[288,70720,70721],{"class":290,"line":1800},[288,70722,2846],{"class":298},[288,70724,70725],{"class":290,"line":1814},[288,70726,1737],{"class":298},[288,70728,70729],{"class":290,"line":1819},[288,70730,70731],{"class":403},"table {\n",[288,70733,70734],{"class":290,"line":1825},[288,70735,70736],{"class":403},"  margin:0 auto;\n",[288,70738,70739,70742,70744],{"class":290,"line":1846},[288,70740,70741],{"class":51473},"  width",[288,70743,51610],{"class":298},[288,70745,70746],{"class":403},"800px;\n",[288,70748,70749,70752,70754],{"class":290,"line":1851},[288,70750,70751],{"class":51473},"  border-collapse",[288,70753,51610],{"class":298},[288,70755,70756],{"class":403},"collapse;\n",[288,70758,70759],{"class":290,"line":1865},[288,70760,70761],{"class":403},"  color:#004085;\n",[288,70763,70764],{"class":290,"line":1870},[288,70765,1737],{"class":298},[288,70767,70768],{"class":290,"line":1899},[288,70769,70770],{"class":403},"th {\n",[288,70772,70773,70775,70777],{"class":290,"line":1904},[288,70774,70653],{"class":51473},[288,70776,51610],{"class":298},[288,70778,70779],{"class":403},"10px;\n",[288,70781,70782,70785,70787],{"class":290,"line":1921},[288,70783,70784],{"class":51473},"  background",[288,70786,51610],{"class":298},[288,70788,70789],{"class":357},"#cfe5ff;\n",[288,70791,70792],{"class":290,"line":1926},[288,70793,70794],{"class":298},"  \n",[288,70796,70797,70800,70802],{"class":290,"line":1931},[288,70798,70799],{"class":51473},"  font-size",[288,70801,51610],{"class":298},[288,70803,70804],{"class":403},"20px;\n",[288,70806,70807,70810,70812],{"class":290,"line":1936},[288,70808,70809],{"class":51473},"  font-weight",[288,70811,51610],{"class":298},[288,70813,70814],{"class":403},"400;\n",[288,70816,70817],{"class":290,"line":1950},[288,70818,1737],{"class":298},[288,70820,70821],{"class":290,"line":1955},[288,70822,70823],{"class":403},"td,th {\n",[288,70825,70826,70829],{"class":290,"line":2749},[288,70827,70828],{"class":403},"  border:1px solid",[288,70830,70831],{"class":357}," #b8daff;\n",[288,70833,70834],{"class":290,"line":2763},[288,70835,1737],{"class":298},[288,70837,70838],{"class":290,"line":2771},[288,70839,70840],{"class":403},"td {\n",[288,70842,70843],{"class":290,"line":2776},[288,70844,70845],{"class":403},"  padding:10px;\n",[288,70847,70848],{"class":290,"line":2782},[288,70849,70850],{"class":403},"  color:#666;\n",[288,70852,70853,70855,70857],{"class":290,"line":2788},[288,70854,70699],{"class":51473},[288,70856,51610],{"class":298},[288,70858,70704],{"class":403},[288,70860,70861,70863,70865],{"class":290,"line":2793},[288,70862,70799],{"class":51473},[288,70864,51610],{"class":298},[288,70866,70867],{"class":403},"16px;\n",[288,70869,70870],{"class":290,"line":8121},[288,70871,1737],{"class":298},[288,70873,70874],{"class":290,"line":8145},[288,70875,70876],{"class":403},"tbody tr {\n",[288,70878,70879,70881,70883],{"class":290,"line":8150},[288,70880,70784],{"class":51473},[288,70882,51610],{"class":298},[288,70884,70885],{"class":357},"#fff;\n",[288,70887,70888],{"class":290,"line":8156},[288,70889,1737],{"class":298},[288,70891,70892],{"class":290,"line":8183},[288,70893,70894],{"class":403},"tbody tr:hover {\n",[288,70896,70897,70899,70901],{"class":290,"line":8188},[288,70898,70784],{"class":51473},[288,70900,51610],{"class":298},[288,70902,70903],{"class":357},"#e1ecf8;\n",[288,70905,70906],{"class":290,"line":8194},[288,70907,1737],{"class":298},[288,70909,70910],{"class":290,"line":8206},[288,70911,70912],{"class":403},".info {\n",[288,70914,70915,70917,70919],{"class":290,"line":8218},[288,70916,70741],{"class":51473},[288,70918,51610],{"class":298},[288,70920,70921],{"class":403},"900px;\n",[288,70923,70924,70926,70928],{"class":290,"line":8230},[288,70925,70643],{"class":51473},[288,70927,51610],{"class":298},[288,70929,70930],{"class":403},"50px auto;\n",[288,70932,70933,70935,70937],{"class":290,"line":9889},[288,70934,70699],{"class":51473},[288,70936,51610],{"class":298},[288,70938,70704],{"class":403},[288,70940,70941],{"class":290,"line":9914},[288,70942,1737],{"class":298},[288,70944,70945],{"class":290,"line":9937},[288,70946,70947],{"class":403},".info  input, .info select {\n",[288,70949,70950,70952,70954],{"class":290,"line":9961},[288,70951,70741],{"class":51473},[288,70953,51610],{"class":298},[288,70955,70956],{"class":403},"80px;\n",[288,70958,70959,70962,70964],{"class":290,"line":9966},[288,70960,70961],{"class":51473},"  height",[288,70963,51610],{"class":298},[288,70965,70966],{"class":403},"27px;\n",[288,70968,70969,70972,70974],{"class":290,"line":9971},[288,70970,70971],{"class":51473},"  outline",[288,70973,51610],{"class":298},[288,70975,70680],{"class":403},[288,70977,70978,70981,70983],{"class":290,"line":9976},[288,70979,70980],{"class":51473},"  border-radius",[288,70982,51610],{"class":298},[288,70984,70985],{"class":403},"5px;\n",[288,70987,70988,70990],{"class":290,"line":9985},[288,70989,70828],{"class":403},[288,70991,70831],{"class":357},[288,70993,70994,70997,70999],{"class":290,"line":9990},[288,70995,70996],{"class":51473},"  padding-left",[288,70998,51610],{"class":298},[288,71000,70985],{"class":403},[288,71002,71003,71006,71008],{"class":290,"line":9996},[288,71004,71005],{"class":51473},"  box-sizing",[288,71007,51610],{"class":298},[288,71009,71010],{"class":403},"border-box;\n",[288,71012,71013,71016,71018],{"class":290,"line":10017},[288,71014,71015],{"class":51473},"  margin-right",[288,71017,51610],{"class":298},[288,71019,71020],{"class":403},"15px;\n",[288,71022,71023],{"class":290,"line":10023},[288,71024,1737],{"class":298},[288,71026,71027],{"class":290,"line":10037},[288,71028,71029],{"class":403},".info button {\n",[288,71031,71032,71034,71036],{"class":290,"line":10043},[288,71033,70741],{"class":51473},[288,71035,51610],{"class":298},[288,71037,71038],{"class":403},"60px;\n",[288,71040,71041,71043,71045],{"class":290,"line":10070},[288,71042,70961],{"class":51473},[288,71044,51610],{"class":298},[288,71046,70966],{"class":403},[288,71048,71049,71052,71054],{"class":290,"line":10079},[288,71050,71051],{"class":51473},"  background-color",[288,71053,51610],{"class":298},[288,71055,71056],{"class":357},"#004085;\n",[288,71058,71059,71061,71063],{"class":290,"line":10085},[288,71060,70971],{"class":51473},[288,71062,51610],{"class":298},[288,71064,70680],{"class":403},[288,71066,71067,71070,71072],{"class":290,"line":10093},[288,71068,71069],{"class":51473},"  border",[288,71071,51610],{"class":298},[288,71073,70648],{"class":403},[288,71075,71076,71079,71081],{"class":290,"line":10098},[288,71077,71078],{"class":51473},"  color",[288,71080,51610],{"class":298},[288,71082,70885],{"class":357},[288,71084,71085,71088,71090],{"class":290,"line":16777},[288,71086,71087],{"class":51473},"  cursor",[288,71089,51610],{"class":298},[288,71091,71092],{"class":403},"pointer;\n",[288,71094,71095,71097,71099],{"class":290,"line":16783},[288,71096,70980],{"class":51473},[288,71098,51610],{"class":298},[288,71100,70985],{"class":403},[288,71102,71103],{"class":290,"line":16806},[288,71104,1737],{"class":298},[288,71106,71107],{"class":290,"line":16812},[288,71108,71109],{"class":403},".info .age {\n",[288,71111,71112,71114,71116],{"class":290,"line":16835},[288,71113,70741],{"class":51473},[288,71115,51610],{"class":298},[288,71117,71118],{"class":403},"50px;\n",[288,71120,71121],{"class":290,"line":16849},[288,71122,1737],{"class":298},[19,71124,71125],{},"思路：",[19,71127,71128],{},[200,71129],{"alt":205,"src":71130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71132,71133],{},[200,71134],{"alt":205,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71137,71138],{},[200,71139],{"alt":205,"src":71140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[260,71142,71144],{"id":71143},"_3315-重绘回流","3.3.15 重绘回流",[19,71146,71147],{},[200,71148],{"alt":205,"src":71149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71151,71152],{},[200,71153],{"alt":205,"src":71154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71156,71157],{},[200,71158],{"alt":205,"src":71159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71161,71163],{"id":71162},"_34-bom","3.4 BOM",[19,71165,71166],{},[200,71167],{"alt":205,"src":71168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71170,71171],{},"平时写的document省略了window而已，实际上是window.document",[19,71173,71174],{},"函数也是这样，调用的时候实际为window.fn()",[19,71176,71177],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71179,71180],{},"window大部分情况下可以省略",[260,71182,71184],{"id":71183},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71186,71187],{},"只执行一次",[19,71189,71190],{},[200,71191],{"alt":205,"src":71192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71194,71195],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71197,71198],{},[200,71199],{"alt":205,"src":71200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[260,71202,71204],{"id":71203},"_342-js执行机制","3.4.2 JS执行机制",[19,71206,71207],{},[200,71208],{"alt":205,"src":71209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71211,71212],{},"两个的结果都是1111 3333 2222",[19,71214,71215],{},[200,71216],{"alt":205,"src":71217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71219,71220],{},[200,71221],{"alt":205,"src":71222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71224,71225],{},[200,71226],{"alt":205,"src":71227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71229,71230],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71232,71233],{},"工作流程：",[19,71235,71236],{},[200,71237],{"alt":205,"src":71238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71240,71241],{},[200,71242],{"alt":205,"src":71243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71245,71246],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71248,71249],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[260,71251,71253],{"id":71252},"_343-location对象","3.4.3 location对象",[19,71255,71256],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71258,71259],{},[200,71260],{"alt":205,"src":71261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71263,71264],{},"href可以跳转页面",[243,71266,71267],{},[246,71268,71269],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71271,71272],{},"search得到提交信息之后网站后边的地址",[19,71274,71275],{},[200,71276],{"alt":205,"src":71277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71279,71280],{},[200,71281],{"alt":205,"src":71282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[243,71284,71285],{"start":206},[246,71286,71287],{},"hash:这个获取单页面应用#后边的地址",[19,71289,71290],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71292,71293],{},[200,71294],{"alt":205,"src":71295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[280,71297,71299],{"className":53240,"code":71298,"language":53242,"meta":205,"style":205},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[25,71300,71301,71321,71341],{"__ignoreMap":205},[288,71302,71303,71305,71307,71309,71311,71314,71317,71319],{"class":290,"line":291},[288,71304,52317],{"class":298},[288,71306,104],{"class":51473},[288,71308,61230],{"class":2135},[288,71310,344],{"class":298},[288,71312,71313],{"class":403},"\"#\u002Fmy\"",[288,71315,71316],{"class":298},">我的\u003C\u002F",[288,71318,104],{"class":51473},[288,71320,51480],{"class":298},[288,71322,71323,71325,71327,71329,71331,71334,71337,71339],{"class":290,"line":206},[288,71324,52317],{"class":298},[288,71326,104],{"class":51473},[288,71328,61230],{"class":2135},[288,71330,344],{"class":298},[288,71332,71333],{"class":403},"\"#\u002Ffriend\"",[288,71335,71336],{"class":298},">关注\u003C\u002F",[288,71338,104],{"class":51473},[288,71340,51480],{"class":298},[288,71342,71343,71345,71347,71349,71351,71354,71357,71359],{"class":290,"line":1352},[288,71344,52317],{"class":298},[288,71346,104],{"class":51473},[288,71348,61230],{"class":2135},[288,71350,344],{"class":298},[288,71352,71353],{"class":403},"\"#\u002Fdownload\"",[288,71355,71356],{"class":298},">下载\u003C\u002F",[288,71358,104],{"class":51473},[288,71360,51480],{"class":298},[19,71362,71363],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[243,71365,71366],{"start":1352},[246,71367,71368,71369,71371,71372,71374],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53889,71370],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53889,71373],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[260,71376,71378],{"id":71377},"_345-navigator对象","3.4.5 navigator对象",[19,71380,71381],{},[200,71382],{"alt":205,"src":71383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[280,71385,71389],{"className":71386,"code":71387,"language":71388,"meta":205,"style":205},"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",[25,71390,71391,71396,71407,71419,71424,71475,71516,71521,71534,71546,71551],{"__ignoreMap":205},[288,71392,71393],{"class":290,"line":291},[288,71394,71395],{"class":357},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[288,71397,71398,71400,71402,71404],{"class":290,"line":206},[288,71399,525],{"class":294},[288,71401,299],{"class":298},[288,71403,54622],{"class":294},[288,71405,71406],{"class":298}," () { \n",[288,71408,71409,71411,71414,71416],{"class":290,"line":1352},[288,71410,6965],{"class":294},[288,71412,71413],{"class":347}," userAgent",[288,71415,13737],{"class":294},[288,71417,71418],{"class":298}," navigator.userAgent \n",[288,71420,71421],{"class":290,"line":1367},[288,71422,71423],{"class":357},"\u002F\u002F 验证是否为Android或iPhone \n",[288,71425,71426,71428,71431,71433,71436,71439,71441,71443,71446,71448,71451,71455,71457,71459,71461,71464,71466,71468,71470,71472],{"class":290,"line":1373},[288,71427,6965],{"class":294},[288,71429,71430],{"class":347}," android",[288,71432,13737],{"class":294},[288,71434,71435],{"class":298}," userAgent.",[288,71437,71438],{"class":2135},"match",[288,71440,299],{"class":298},[288,71442,881],{"class":403},[288,71444,71445],{"class":48150},"(Android);",[288,71447,1283],{"class":294},[288,71449,71450],{"class":347},"[\\s",[288,71452,71454],{"class":71453},"snhLl","\\\u002F",[288,71456,1237],{"class":347},[288,71458,778],{"class":294},[288,71460,299],{"class":48150},[288,71462,71463],{"class":347},"[\\d.]",[288,71465,778],{"class":294},[288,71467,726],{"class":48150},[288,71469,1283],{"class":294},[288,71471,881],{"class":403},[288,71473,71474],{"class":298},") \n",[288,71476,71477,71479,71482,71484,71486,71488,71490,71492,71495,71498,71501,71503,71505,71508,71510,71512,71514],{"class":290,"line":1387},[288,71478,6965],{"class":294},[288,71480,71481],{"class":347}," iphone",[288,71483,13737],{"class":294},[288,71485,71435],{"class":298},[288,71487,71438],{"class":2135},[288,71489,299],{"class":298},[288,71491,881],{"class":403},[288,71493,71494],{"class":48150},"(iPhone",[288,71496,71497],{"class":347},"\\s",[288,71499,71500],{"class":48150},"OS)",[288,71502,71497],{"class":347},[288,71504,299],{"class":48150},[288,71506,71507],{"class":347},"[\\d_]",[288,71509,778],{"class":294},[288,71511,726],{"class":48150},[288,71513,881],{"class":403},[288,71515,71474],{"class":298},[288,71517,71518],{"class":290,"line":1393},[288,71519,71520],{"class":357},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[288,71522,71523,71525,71528,71531],{"class":290,"line":1484},[288,71524,1703],{"class":294},[288,71526,71527],{"class":298}," (android ",[288,71529,71530],{"class":294},"||",[288,71532,71533],{"class":298}," iphone) { \n",[288,71535,71536,71539,71541,71544],{"class":290,"line":1490},[288,71537,71538],{"class":298},"location.href ",[288,71540,344],{"class":294},[288,71542,71543],{"class":403}," 'http:\u002F\u002Fm.itcast.cn'",[288,71545,2846],{"class":298},[288,71547,71548],{"class":290,"line":1502},[288,71549,71550],{"class":298},"} \n",[288,71552,71553],{"class":290,"line":1784},[288,71554,71555],{"class":298},"})()\n",[260,71557,71559],{"id":71558},"_346-histroy对象","3.4.6 histroy对象",[19,71561,71562],{},[200,71563],{"alt":205,"src":71564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71566,71567],{},"浏览器地址的前进与后退!!!",[19,71569,71570],{},"history.back() 等效于 history.go(-1)",[19,71572,71573],{},"history.forward() 等效于 history.go(1)",[14,71575,71577],{"id":71576},"_35-本地存储","3.5 本地存储",[243,71579,71580,71583,71586],{},[246,71581,71582],{},"数据存储在用户浏览器中",[246,71584,71585],{},"设置、读取方便、甚至页面刷新不丢失数据",[246,71587,71588],{},"容量较大，sessionStorage和localStorage约 5M 左右",[260,71590,71592],{"id":71591},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71594,71595],{},"只能存储字符串",[19,71597,71598],{},[200,71599],{"alt":205,"src":71600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71602,71603],{},[200,71604],{"alt":205,"src":71605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71607,71608],{},"键值对要加引号,不然就会当变量来看了",[19,71610,71611],{},"localStorage.setItem('uname', 'pink')",[19,71613,71614],{},"刷新之后信息不再丢失",[19,71616,71617],{},"操作key,value会跟着变",[19,71619,71620],{},"删除只删除键就可以,即名字",[19,71622,71611],{},[19,71624,71625],{},"改:",[19,71627,71628],{},"localStorage.setItem('uname','red')",[19,71630,71631],{},"有这个键就是改,没有这个键就是改",[19,71633,71634],{},[200,71635],{"alt":205,"src":71636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71638,71639],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71641,71642],{},[200,71643],{"alt":205,"src":71644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71646,71647],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[260,71649,71651],{"id":71650},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71653,71654],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71656,71657],{},"特性:",[243,71659,71660,71663,71666,71669],{},[246,71661,71662],{},"生命周期为关闭浏览器窗口",[246,71664,71665],{},"在同一个窗口(页面)下数据可以共享",[246,71667,71668],{},"以键值对的形式存储使用",[246,71670,71671],{},"用法跟localStorage 基本相同",[260,71673,71675],{"id":71674},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71677,71678],{},"本地只能存储字符串,无法直接存储复杂数据类型",[280,71680,71682],{"className":53240,"code":71681,"language":53242,"meta":205,"style":205},"\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",[25,71683,71684,71692,71697,71702,71707,71712,71716,71721,71726],{"__ignoreMap":205},[288,71685,71686,71688,71690],{"class":290,"line":291},[288,71687,1207],{"class":298},[288,71689,51986],{"class":51473},[288,71691,51480],{"class":298},[288,71693,71694],{"class":290,"line":206},[288,71695,71696],{"class":298},"    const obj = {\n",[288,71698,71699],{"class":290,"line":1352},[288,71700,71701],{"class":298},"      uname: 'pink老师',\n",[288,71703,71704],{"class":290,"line":1367},[288,71705,71706],{"class":298},"      age: 18,\n",[288,71708,71709],{"class":290,"line":1373},[288,71710,71711],{"class":298},"      gender: '女'\n",[288,71713,71714],{"class":290,"line":1387},[288,71715,2359],{"class":298},[288,71717,71718],{"class":290,"line":1393},[288,71719,71720],{"class":298},"    \u002F\u002F 存储复杂数据类型\n",[288,71722,71723],{"class":290,"line":1484},[288,71724,71725],{"class":298},"    localStorage.setItem('obj', obj)\n",[288,71727,71728,71730,71732],{"class":290,"line":1490},[288,71729,52590],{"class":298},[288,71731,51986],{"class":51473},[288,71733,51480],{"class":298},[19,71735,71736],{},[200,71737],{"alt":205,"src":71738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71740,71741],{},"如果获取一下数据:",[19,71743,71744],{},"log(localStorage.getItem('obj'))",[19,71746,71747],{},[200,71748],{"alt":205,"src":71749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71751,71752],{},"发现直接存对象是使用不了的!!!",[22171,71754,71756],{"id":71755},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71758,71759],{},[200,71760],{"alt":205,"src":71761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[280,71763,71765],{"className":50806,"code":71764,"language":50808,"meta":205,"style":205},"\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",[25,71766,71767,71775,71785,71795,71804,71812,71816,71820,71846,71865,71873,71877,71882,71887],{"__ignoreMap":205},[288,71768,71769,71771,71773],{"class":290,"line":291},[288,71770,1207],{"class":298},[288,71772,51986],{"class":51473},[288,71774,51480],{"class":298},[288,71776,71777,71779,71781,71783],{"class":290,"line":206},[288,71778,11394],{"class":294},[288,71780,70144],{"class":347},[288,71782,13737],{"class":294},[288,71784,15745],{"class":298},[288,71786,71787,71790,71793],{"class":290,"line":1352},[288,71788,71789],{"class":298},"      uname: ",[288,71791,71792],{"class":403},"'pink老师'",[288,71794,31639],{"class":298},[288,71796,71797,71800,71802],{"class":290,"line":1367},[288,71798,71799],{"class":298},"      age: ",[288,71801,947],{"class":347},[288,71803,31639],{"class":298},[288,71805,71806,71809],{"class":290,"line":1373},[288,71807,71808],{"class":298},"      gender: ",[288,71810,71811],{"class":403},"'女'\n",[288,71813,71814],{"class":290,"line":1387},[288,71815,2359],{"class":298},[288,71817,71818],{"class":290,"line":1393},[288,71819,71720],{"class":357},[288,71821,71822,71825,71828,71830,71833,71835,71838,71840,71843],{"class":290,"line":1484},[288,71823,71824],{"class":298},"  localStorage.",[288,71826,71827],{"class":2135},"setItem",[288,71829,299],{"class":298},[288,71831,71832],{"class":403},"'obj'",[288,71834,12608],{"class":298},[288,71836,71837],{"class":347},"JSON",[288,71839,855],{"class":298},[288,71841,71842],{"class":2135},"stringify",[288,71844,71845],{"class":298},"(obj))\n",[288,71847,71848,71851,71853,71856,71859,71861,71863],{"class":290,"line":1490},[288,71849,71850],{"class":298},"  console.",[288,71852,58420],{"class":2135},[288,71854,71855],{"class":298},"(localStorage.",[288,71857,71858],{"class":2135},"getItem",[288,71860,299],{"class":298},[288,71862,71832],{"class":403},[288,71864,30670],{"class":298},[288,71866,71867,71869,71871],{"class":290,"line":1502},[288,71868,52590],{"class":298},[288,71870,51986],{"class":51473},[288,71872,51480],{"class":298},[288,71874,71875],{"class":290,"line":1784},[288,71876,70794],{"class":298},[288,71878,71879],{"class":290,"line":1789},[288,71880,71881],{"class":298},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[288,71883,71884],{"class":290,"line":1795},[288,71885,71886],{"class":298},"  类型是字符串的\n",[288,71888,71889],{"class":290,"line":1800},[288,71890,71891],{"class":298},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22171,71893,71895],{"id":71894},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71897,71898],{},[200,71899],{"alt":205,"src":71900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71902,71903],{},[200,71904],{"alt":205,"src":71905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[280,71907,71909],{"className":53240,"code":71908,"language":53242,"meta":205,"style":205},"  \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",[25,71910,71911,71919,71923,71927,71931,71935,71939,71944,71949,71954,71959,71964,71969,71974,71979],{"__ignoreMap":205},[288,71912,71913,71915,71917],{"class":290,"line":291},[288,71914,52317],{"class":298},[288,71916,51986],{"class":51473},[288,71918,51480],{"class":298},[288,71920,71921],{"class":290,"line":206},[288,71922,71696],{"class":298},[288,71924,71925],{"class":290,"line":1352},[288,71926,71701],{"class":298},[288,71928,71929],{"class":290,"line":1367},[288,71930,71706],{"class":298},[288,71932,71933],{"class":290,"line":1373},[288,71934,71711],{"class":298},[288,71936,71937],{"class":290,"line":1387},[288,71938,2359],{"class":298},[288,71940,71941],{"class":290,"line":1393},[288,71942,71943],{"class":298},"    \u002F\u002F 1.存储复杂数据类型\n",[288,71945,71946],{"class":290,"line":1484},[288,71947,71948],{"class":298},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[288,71950,71951],{"class":290,"line":1490},[288,71952,71953],{"class":298},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[288,71955,71956],{"class":290,"line":1502},[288,71957,71958],{"class":298},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[288,71960,71961],{"class":290,"line":1784},[288,71962,71963],{"class":298},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[288,71965,71966],{"class":290,"line":1789},[288,71967,71968],{"class":298},"    \u002F\u002F 取\n",[288,71970,71971],{"class":290,"line":1795},[288,71972,71973],{"class":298},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[288,71975,71976],{"class":290,"line":1800},[288,71977,71978],{"class":298},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[288,71980,71981,71983,71985],{"class":290,"line":1814},[288,71982,52590],{"class":298},[288,71984,51986],{"class":51473},[288,71986,51480],{"class":298},[19,71988,71989],{},[200,71990],{"alt":205,"src":71991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[260,71993,71995],{"id":71994},"_356-数组map方法","3.5.6 数组map方法",[19,71997,71998],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72000,72001],{},[200,72002],{"alt":205,"src":72003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72005,72006],{},[200,72007],{"alt":205,"src":72008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72010,72011,72014],{},[448,72012,72013],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72016,72017],{},"map有返回值，但是forEach没有返回值",[19,72019,72020],{},"map是个方法。用的时候要加 ()",[19,72022,72023],{},"map返回的是一个数组",[260,72025,72027],{"id":72026},"_357-数组中join方法","3.5.7 数组中join方法",[19,72029,72030],{},[200,72031],{"alt":205,"src":72032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72034,72035],{},"类似于python中拼接字符串一样！",[243,72037,72038,72041,72044],{},[246,72039,72040],{},"小括号为空则逗号分开",[246,72042,72043],{},"小括号为空字符串 ''，则元素之间没有分隔符",[246,72045,72046],{},"小括号用啥符号就用进行分割",[260,72048,72050],{"id":72049},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[243,72052,72053,72056,72059,72062,72065],{},[246,72054,72055],{},"记住本地时间获取快速方式：new Date().toDateString()",[246,72057,72058],{},"尽量减少DOM操作，用好map+join的渲染方式",[246,72060,72061],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[246,72063,72064],{},"return可以实现函数的结束",[246,72066,72067],{},"禁止跳转是 preventDefault() 不要忘记",[280,72069,72071],{"className":50806,"code":72070,"language":50808,"meta":205,"style":205},"\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",[25,72072,72073,72083,72097,72101,72109,72123,72143,72155,72163,72169,72179,72189,72193,72197,72203,72213,72225,72229,72233,72240,72252,72266,72276,72280,72284,72291,72298,72305,72317,72329,72339,72351,72355,72359,72366,72373,72385,72397,72407,72419,72449,72453,72457,72464,72476,72488,72512,72522,72532,72536,72540,72548,72559,72571,72583,72595,72612,72624,72636,72640,72644,72651,72663,72675,72687,72698,72716,72729,72741,72765,72776,72780,72784,72792,72802,72806,72810,72816,72828,72839,72849,72853,72857,72863,72885,72889,72893,72899,72905,72917,72927,72939,72969,72982,72999,73003,73007,73018,73040,73050,73054,73058,73071,73081,73093,73105,73117,73129,73139,73149,73159,73170,73183,73187,73195,73203,73207,73215,73228,73248,73281,73314,73347,73373,73391,73409,73417,73443,73461,73479,73497,73515,73533,73541,73549,73567,73575,73604,73612,73620,73628,73641,73653,73665,73677,73689,73701,73714,73726,73734,73742,73750,73755,73760,73764,73768,73772,73776,73780,73784,73789,73794,73799,73804,73812,73820,73828,73833,73838,73843,73848,73853,73858,73863,73868,73873,73878,73883,73888,73893,73898,73902,73907,73912,73922,73931,73935,73940,73949,73965,74007,74047,74086,74151,74159,74163,74168,74186,74194,74199,74204,74234,74240,74245,74258,74270,74282,74294,74306,74318,74330,74334,74344,74348,74353,74358,74362,74371,74375,74380,74385,74404,74409,74429,74433,74438,74442,74447,74465,74483,74501,74520,74539,74558,74563,74569,74590,74596,74605,74611,74617,74623,74650,74663,74668,74678,74684,74690,74696,74702,74707,74713,74719,74725,74731,74764,74769,74774,74779,74784,74790,74796,74802,74813,74818,74824,74831,74845,74851,74875,74880,74885,74891,74897,74918,74924,74937,74943,74949,74955,74961,74966,74972,74978,74984,75002,75016,75022,75030,75036,75058,75063,75068,75073,75078,75083,75092,75101,75106],{"__ignoreMap":205},[288,72074,72075,72077,72079,72081],{"class":290,"line":291},[288,72076,51470],{"class":298},[288,72078,51474],{"class":51473},[288,72080,51477],{"class":2135},[288,72082,51480],{"class":298},[288,72084,72085,72087,72089,72091,72093,72095],{"class":290,"line":206},[288,72086,1207],{"class":298},[288,72088,50808],{"class":51473},[288,72090,51489],{"class":2135},[288,72092,344],{"class":298},[288,72094,51494],{"class":403},[288,72096,51480],{"class":298},[288,72098,72099],{"class":290,"line":1352},[288,72100,2572],{"emptyLinePlaceholder":217},[288,72102,72103,72105,72107],{"class":290,"line":1367},[288,72104,1207],{"class":298},[288,72106,51507],{"class":51473},[288,72108,51480],{"class":298},[288,72110,72111,72113,72115,72117,72119,72121],{"class":290,"line":1373},[288,72112,52317],{"class":298},[288,72114,51517],{"class":51473},[288,72116,51520],{"class":2135},[288,72118,344],{"class":298},[288,72120,51525],{"class":403},[288,72122,51480],{"class":298},[288,72124,72125,72127,72129,72131,72133,72135,72137,72139,72141],{"class":290,"line":1387},[288,72126,52317],{"class":298},[288,72128,51517],{"class":51473},[288,72130,15093],{"class":2135},[288,72132,344],{"class":298},[288,72134,51564],{"class":403},[288,72136,51544],{"class":2135},[288,72138,344],{"class":298},[288,72140,51571],{"class":403},[288,72142,51480],{"class":298},[288,72144,72145,72147,72149,72151,72153],{"class":290,"line":1393},[288,72146,52317],{"class":298},[288,72148,51580],{"class":51473},[288,72150,51583],{"class":298},[288,72152,51580],{"class":51473},[288,72154,51480],{"class":298},[288,72156,72157,72159,72161],{"class":290,"line":1484},[288,72158,52317],{"class":298},[288,72160,5299],{"class":51473},[288,72162,51480],{"class":298},[288,72164,72165,72167],{"class":290,"line":1490},[288,72166,6576],{"class":51473},[288,72168,15745],{"class":298},[288,72170,72171,72173,72175,72177],{"class":290,"line":1502},[288,72172,54868],{"class":347},[288,72174,51610],{"class":298},[288,72176,490],{"class":347},[288,72178,1463],{"class":298},[288,72180,72181,72183,72185,72187],{"class":290,"line":1784},[288,72182,54879],{"class":347},[288,72184,51610],{"class":298},[288,72186,490],{"class":347},[288,72188,1463],{"class":298},[288,72190,72191],{"class":290,"line":1789},[288,72192,2359],{"class":298},[288,72194,72195],{"class":290,"line":1795},[288,72196,2572],{"emptyLinePlaceholder":217},[288,72198,72199,72201],{"class":290,"line":1800},[288,72200,57452],{"class":51473},[288,72202,15745],{"class":298},[288,72204,72205,72207,72209,72211],{"class":290,"line":1814},[288,72206,57459],{"class":347},[288,72208,51610],{"class":298},[288,72210,51765],{"class":347},[288,72212,1463],{"class":298},[288,72214,72215,72217,72219,72221,72223],{"class":290,"line":1819},[288,72216,62250],{"class":347},[288,72218,51610],{"class":298},[288,72220,997],{"class":347},[288,72222,51665],{"class":294},[288,72224,1463],{"class":298},[288,72226,72227],{"class":290,"line":1825},[288,72228,2359],{"class":298},[288,72230,72231],{"class":290,"line":1846},[288,72232,2572],{"emptyLinePlaceholder":217},[288,72234,72235,72238],{"class":290,"line":1851},[288,72236,72237],{"class":2135},"    .info",[288,72239,15745],{"class":298},[288,72241,72242,72244,72246,72248,72250],{"class":290,"line":1865},[288,72243,54944],{"class":347},[288,72245,51610],{"class":298},[288,72247,51662],{"class":347},[288,72249,51665],{"class":294},[288,72251,1463],{"class":298},[288,72253,72254,72256,72258,72260,72262,72264],{"class":290,"line":1870},[288,72255,54879],{"class":347},[288,72257,51610],{"class":298},[288,72259,743],{"class":347},[288,72261,51665],{"class":294},[288,72263,51729],{"class":347},[288,72265,1463],{"class":298},[288,72267,72268,72270,72272,72274],{"class":290,"line":1899},[288,72269,57459],{"class":347},[288,72271,51610],{"class":298},[288,72273,51765],{"class":347},[288,72275,1463],{"class":298},[288,72277,72278],{"class":290,"line":1904},[288,72279,2359],{"class":298},[288,72281,72282],{"class":290,"line":1921},[288,72283,2572],{"emptyLinePlaceholder":217},[288,72285,72286,72289],{"class":290,"line":1926},[288,72287,72288],{"class":2135},"    .uname",[288,72290,31639],{"class":298},[288,72292,72293,72296],{"class":290,"line":1931},[288,72294,72295],{"class":2135},"    .age",[288,72297,31639],{"class":298},[288,72299,72300,72303],{"class":290,"line":1936},[288,72301,72302],{"class":2135},"    .salary",[288,72304,15745],{"class":298},[288,72306,72307,72309,72311,72313,72315],{"class":290,"line":1950},[288,72308,54944],{"class":347},[288,72310,51610],{"class":298},[288,72312,608],{"class":347},[288,72314,51665],{"class":294},[288,72316,1463],{"class":298},[288,72318,72319,72321,72323,72325,72327],{"class":290,"line":1955},[288,72320,54958],{"class":347},[288,72322,51610],{"class":298},[288,72324,997],{"class":347},[288,72326,51665],{"class":294},[288,72328,1463],{"class":298},[288,72330,72331,72333,72335,72337],{"class":290,"line":2749},[288,72332,61953],{"class":347},[288,72334,51610],{"class":298},[288,72336,54910],{"class":347},[288,72338,1463],{"class":298},[288,72340,72341,72343,72345,72347,72349],{"class":290,"line":2763},[288,72342,61923],{"class":347},[288,72344,51610],{"class":298},[288,72346,872],{"class":347},[288,72348,51665],{"class":294},[288,72350,1463],{"class":298},[288,72352,72353],{"class":290,"line":2771},[288,72354,2359],{"class":298},[288,72356,72357],{"class":290,"line":2776},[288,72358,2572],{"emptyLinePlaceholder":217},[288,72360,72361,72364],{"class":290,"line":2782},[288,72362,72363],{"class":2135},"    .gender",[288,72365,31639],{"class":298},[288,72367,72368,72371],{"class":290,"line":2788},[288,72369,72370],{"class":2135},"    .city",[288,72372,15745],{"class":298},[288,72374,72375,72377,72379,72381,72383],{"class":290,"line":2793},[288,72376,54944],{"class":347},[288,72378,51610],{"class":298},[288,72380,608],{"class":347},[288,72382,51665],{"class":294},[288,72384,1463],{"class":298},[288,72386,72387,72389,72391,72393,72395],{"class":290,"line":8121},[288,72388,54958],{"class":347},[288,72390,51610],{"class":298},[288,72392,1122],{"class":347},[288,72394,51665],{"class":294},[288,72396,1463],{"class":298},[288,72398,72399,72401,72403,72405],{"class":290,"line":8145},[288,72400,61953],{"class":347},[288,72402,51610],{"class":298},[288,72404,54910],{"class":347},[288,72406,1463],{"class":298},[288,72408,72409,72411,72413,72415,72417],{"class":290,"line":8150},[288,72410,61923],{"class":347},[288,72412,51610],{"class":298},[288,72414,872],{"class":347},[288,72416,51665],{"class":294},[288,72418,1463],{"class":298},[288,72420,72421,72423,72425,72427,72429,72431,72434,72436,72438,72440,72443,72445,72447],{"class":290,"line":8156},[288,72422,62150],{"class":347},[288,72424,51610],{"class":298},[288,72426,516],{"class":347},[288,72428,51665],{"class":294},[288,72430,51694],{"class":347},[288,72432,72433],{"class":347}," rgb",[288,72435,299],{"class":298},[288,72437,1894],{"class":347},[288,72439,12608],{"class":298},[288,72441,72442],{"class":347},"197",[288,72444,12608],{"class":298},[288,72446,72442],{"class":347},[288,72448,2891],{"class":298},[288,72450,72451],{"class":290,"line":8183},[288,72452,2359],{"class":298},[288,72454,72455],{"class":290,"line":8188},[288,72456,2572],{"emptyLinePlaceholder":217},[288,72458,72459,72462],{"class":290,"line":8194},[288,72460,72461],{"class":51473},"    button",[288,72463,15745],{"class":298},[288,72465,72466,72468,72470,72472,72474],{"class":290,"line":8206},[288,72467,54958],{"class":347},[288,72469,51610],{"class":298},[288,72471,1122],{"class":347},[288,72473,51665],{"class":294},[288,72475,1463],{"class":298},[288,72477,72478,72480,72482,72484,72486],{"class":290,"line":8218},[288,72479,54944],{"class":347},[288,72481,51610],{"class":298},[288,72483,781],{"class":347},[288,72485,51665],{"class":294},[288,72487,1463],{"class":298},[288,72489,72490,72492,72494,72497,72499,72501,72503,72506,72508,72510],{"class":290,"line":8230},[288,72491,55057],{"class":347},[288,72493,51610],{"class":298},[288,72495,72496],{"class":347},"rgb",[288,72498,299],{"class":298},[288,72500,1266],{"class":347},[288,72502,12608],{"class":298},[288,72504,72505],{"class":347},"187",[288,72507,12608],{"class":298},[288,72509,596],{"class":347},[288,72511,2891],{"class":298},[288,72513,72514,72516,72518,72520],{"class":290,"line":9889},[288,72515,57589],{"class":347},[288,72517,51610],{"class":298},[288,72519,61015],{"class":347},[288,72521,1463],{"class":298},[288,72523,72524,72526,72528,72530],{"class":290,"line":9914},[288,72525,62150],{"class":347},[288,72527,51610],{"class":298},[288,72529,490],{"class":347},[288,72531,1463],{"class":298},[288,72533,72534],{"class":290,"line":9937},[288,72535,2359],{"class":298},[288,72537,72538],{"class":290,"line":9961},[288,72539,2572],{"emptyLinePlaceholder":217},[288,72541,72542,72544,72546],{"class":290,"line":9966},[288,72543,72461],{"class":51473},[288,72545,51861],{"class":51473},[288,72547,15745],{"class":298},[288,72549,72550,72552,72554,72557],{"class":290,"line":9971},[288,72551,55182],{"class":347},[288,72553,51610],{"class":298},[288,72555,72556],{"class":347},"inline-block",[288,72558,1463],{"class":298},[288,72560,72561,72563,72565,72567,72569],{"class":290,"line":9976},[288,72562,54944],{"class":347},[288,72564,51610],{"class":298},[288,72566,743],{"class":347},[288,72568,51665],{"class":294},[288,72570,1463],{"class":298},[288,72572,72573,72575,72577,72579,72581],{"class":290,"line":9985},[288,72574,54958],{"class":347},[288,72576,51610],{"class":298},[288,72578,743],{"class":347},[288,72580,51665],{"class":294},[288,72582,1463],{"class":298},[288,72584,72585,72587,72589,72591,72593],{"class":290,"line":9990},[288,72586,57532],{"class":347},[288,72588,51610],{"class":298},[288,72590,769],{"class":347},[288,72592,51665],{"class":294},[288,72594,1463],{"class":298},[288,72596,72597,72599,72601,72603,72605,72607,72610],{"class":290,"line":9996},[288,72598,62150],{"class":347},[288,72600,51610],{"class":298},[288,72602,516],{"class":347},[288,72604,51665],{"class":294},[288,72606,51694],{"class":347},[288,72608,72609],{"class":347}," #fff",[288,72611,1463],{"class":298},[288,72613,72614,72616,72618,72620,72622],{"class":290,"line":10017},[288,72615,55307],{"class":347},[288,72617,51610],{"class":298},[288,72619,616],{"class":347},[288,72621,51665],{"class":294},[288,72623,1463],{"class":298},[288,72625,72626,72628,72630,72632,72634],{"class":290,"line":10023},[288,72627,61923],{"class":347},[288,72629,51610],{"class":298},[288,72631,516],{"class":347},[288,72633,51665],{"class":294},[288,72635,1463],{"class":298},[288,72637,72638],{"class":290,"line":10037},[288,72639,2359],{"class":298},[288,72641,72642],{"class":290,"line":10043},[288,72643,2572],{"emptyLinePlaceholder":217},[288,72645,72646,72649],{"class":290,"line":10070},[288,72647,72648],{"class":2135},"    .total",[288,72650,15745],{"class":298},[288,72652,72653,72655,72657,72659,72661],{"class":290,"line":10079},[288,72654,54944],{"class":347},[288,72656,51610],{"class":298},[288,72658,61802],{"class":347},[288,72660,51665],{"class":294},[288,72662,1463],{"class":298},[288,72664,72665,72667,72669,72671,72673],{"class":290,"line":10085},[288,72666,54958],{"class":347},[288,72668,51610],{"class":298},[288,72670,698],{"class":347},[288,72672,51665],{"class":294},[288,72674,1463],{"class":298},[288,72676,72677,72679,72681,72683,72685],{"class":290,"line":10093},[288,72678,57532],{"class":347},[288,72680,51610],{"class":298},[288,72682,698],{"class":347},[288,72684,51665],{"class":294},[288,72686,1463],{"class":298},[288,72688,72689,72691,72693,72696],{"class":290,"line":10098},[288,72690,57459],{"class":347},[288,72692,51610],{"class":298},[288,72694,72695],{"class":347},"right",[288,72697,1463],{"class":298},[288,72699,72700,72702,72704,72706,72708,72710,72712,72714],{"class":290,"line":16777},[288,72701,54879],{"class":347},[288,72703,51610],{"class":298},[288,72705,698],{"class":347},[288,72707,51665],{"class":294},[288,72709,51729],{"class":347},[288,72711,2210],{"class":347},[288,72713,51665],{"class":294},[288,72715,1463],{"class":298},[288,72717,72718,72721,72723,72725,72727],{"class":290,"line":16783},[288,72719,72720],{"class":347},"      padding-right",[288,72722,51610],{"class":298},[288,72724,743],{"class":347},[288,72726,51665],{"class":294},[288,72728,1463],{"class":298},[288,72730,72731,72733,72735,72737,72739],{"class":290,"line":16806},[288,72732,55095],{"class":347},[288,72734,51610],{"class":298},[288,72736,820],{"class":347},[288,72738,51665],{"class":294},[288,72740,1463],{"class":298},[288,72742,72743,72745,72747,72749,72751,72754,72756,72759,72761,72763],{"class":290,"line":16812},[288,72744,55057],{"class":347},[288,72746,51610],{"class":298},[288,72748,72496],{"class":347},[288,72750,299],{"class":298},[288,72752,72753],{"class":347},"237",[288,72755,12608],{"class":298},[288,72757,72758],{"class":347},"235",[288,72760,12608],{"class":298},[288,72762,72758],{"class":347},[288,72764,2891],{"class":298},[288,72766,72767,72770,72772,72774],{"class":290,"line":16835},[288,72768,72769],{"class":347},"      box-sizing",[288,72771,51610],{"class":298},[288,72773,60678],{"class":347},[288,72775,1463],{"class":298},[288,72777,72778],{"class":290,"line":16849},[288,72779,2359],{"class":298},[288,72781,72782],{"class":290,"line":16869},[288,72783,2572],{"emptyLinePlaceholder":217},[288,72785,72786,72788,72790],{"class":290,"line":16875},[288,72787,72648],{"class":2135},[288,72789,51861],{"class":51473},[288,72791,15745],{"class":298},[288,72793,72794,72796,72798,72800],{"class":290,"line":16886},[288,72795,57589],{"class":347},[288,72797,51610],{"class":298},[288,72799,57594],{"class":347},[288,72801,1463],{"class":298},[288,72803,72804],{"class":290,"line":16909},[288,72805,2359],{"class":298},[288,72807,72808],{"class":290,"line":16931},[288,72809,2572],{"emptyLinePlaceholder":217},[288,72811,72812,72814],{"class":290,"line":16936},[288,72813,65196],{"class":51473},[288,72815,15745],{"class":298},[288,72817,72818,72820,72822,72824,72826],{"class":290,"line":16942},[288,72819,54944],{"class":347},[288,72821,51610],{"class":298},[288,72823,61802],{"class":347},[288,72825,51665],{"class":294},[288,72827,1463],{"class":298},[288,72829,72830,72832,72834,72837],{"class":290,"line":16956},[288,72831,54879],{"class":347},[288,72833,51610],{"class":298},[288,72835,72836],{"class":347},"auto",[288,72838,1463],{"class":298},[288,72840,72841,72843,72845,72847],{"class":290,"line":16969},[288,72842,65203],{"class":347},[288,72844,51610],{"class":298},[288,72846,65208],{"class":347},[288,72848,1463],{"class":298},[288,72850,72851],{"class":290,"line":16974},[288,72852,2359],{"class":298},[288,72854,72855],{"class":290,"line":16988},[288,72856,2572],{"emptyLinePlaceholder":217},[288,72858,72859,72861],{"class":290,"line":16993},[288,72860,65288],{"class":51473},[288,72862,15745],{"class":298},[288,72864,72865,72867,72869,72871,72873,72875,72877,72879,72881,72883],{"class":290,"line":16999},[288,72866,55057],{"class":347},[288,72868,51610],{"class":298},[288,72870,72496],{"class":347},[288,72872,299],{"class":298},[288,72874,72753],{"class":347},[288,72876,12608],{"class":298},[288,72878,72758],{"class":347},[288,72880,12608],{"class":298},[288,72882,72758],{"class":347},[288,72884,2891],{"class":298},[288,72886,72887],{"class":290,"line":17004},[288,72888,2359],{"class":298},[288,72890,72891],{"class":290,"line":17018},[288,72892,2572],{"emptyLinePlaceholder":217},[288,72894,72895,72897],{"class":290,"line":17023},[288,72896,65288],{"class":51473},[288,72898,31639],{"class":298},[288,72900,72901,72903],{"class":290,"line":17028},[288,72902,65354],{"class":51473},[288,72904,15745],{"class":298},[288,72906,72907,72909,72911,72913,72915],{"class":290,"line":17042},[288,72908,54958],{"class":347},[288,72910,51610],{"class":298},[288,72912,570],{"class":347},[288,72914,51665],{"class":294},[288,72916,1463],{"class":298},[288,72918,72919,72921,72923,72925],{"class":290,"line":17054},[288,72920,57459],{"class":347},[288,72922,51610],{"class":298},[288,72924,23909],{"class":347},[288,72926,1463],{"class":298},[288,72928,72929,72931,72933,72935,72937],{"class":290,"line":17059},[288,72930,55095],{"class":347},[288,72932,51610],{"class":298},[288,72934,846],{"class":347},[288,72936,51665],{"class":294},[288,72938,1463],{"class":298},[288,72940,72941,72943,72945,72947,72949,72951,72953,72955,72958,72960,72963,72965,72967],{"class":290,"line":17072},[288,72942,62150],{"class":347},[288,72944,51610],{"class":298},[288,72946,516],{"class":347},[288,72948,51665],{"class":294},[288,72950,51694],{"class":347},[288,72952,72433],{"class":347},[288,72954,299],{"class":298},[288,72956,72957],{"class":347},"228",[288,72959,12608],{"class":298},[288,72961,72962],{"class":347},"225",[288,72964,12608],{"class":298},[288,72966,72962],{"class":347},[288,72968,2891],{"class":298},[288,72970,72971,72974,72976,72978,72980],{"class":290,"line":17077},[288,72972,72973],{"class":347},"      padding-left",[288,72975,51610],{"class":298},[288,72977,616],{"class":347},[288,72979,51665],{"class":294},[288,72981,1463],{"class":298},[288,72983,72984,72986,72988,72990,72993,72995,72997],{"class":290,"line":17082},[288,72985,62033],{"class":347},[288,72987,51610],{"class":298},[288,72989,28294],{"class":347},[288,72991,72992],{"class":347}," linear",[288,72994,62040],{"class":347},[288,72996,992],{"class":294},[288,72998,1463],{"class":298},[288,73000,73001],{"class":290,"line":17087},[288,73002,2359],{"class":298},[288,73004,73005],{"class":290,"line":17100},[288,73006,2572],{"emptyLinePlaceholder":217},[288,73008,73009,73012,73014,73016],{"class":290,"line":17105},[288,73010,73011],{"class":51473},"    tbody",[288,73013,70317],{"class":51473},[288,73015,61113],{"class":2135},[288,73017,15745],{"class":298},[288,73019,73020,73022,73024,73026,73028,73030,73032,73034,73036,73038],{"class":290,"line":32806},[288,73021,55057],{"class":347},[288,73023,51610],{"class":298},[288,73025,72496],{"class":347},[288,73027,299],{"class":298},[288,73029,72753],{"class":347},[288,73031,12608],{"class":298},[288,73033,72758],{"class":347},[288,73035,12608],{"class":298},[288,73037,72758],{"class":347},[288,73039,2891],{"class":298},[288,73041,73042,73044,73046,73048],{"class":290,"line":32812},[288,73043,62198],{"class":347},[288,73045,51610],{"class":298},[288,73047,62203],{"class":347},[288,73049,1463],{"class":298},[288,73051,73052],{"class":290,"line":32818},[288,73053,2359],{"class":298},[288,73055,73056],{"class":290,"line":32824},[288,73057,2572],{"emptyLinePlaceholder":217},[288,73059,73060,73062,73064,73067,73069],{"class":290,"line":32830},[288,73061,73011],{"class":51473},[288,73063,70317],{"class":51473},[288,73065,73066],{"class":51473}," td",[288,73068,1571],{"class":51473},[288,73070,15745],{"class":298},[288,73072,73073,73075,73077,73079],{"class":290,"line":32841},[288,73074,55182],{"class":347},[288,73076,51610],{"class":298},[288,73078,61042],{"class":347},[288,73080,1463],{"class":298},[288,73082,73083,73085,73087,73089,73091],{"class":290,"line":32847},[288,73084,54944],{"class":347},[288,73086,51610],{"class":298},[288,73088,1204],{"class":347},[288,73090,51665],{"class":294},[288,73092,1463],{"class":298},[288,73094,73095,73097,73099,73101,73103],{"class":290,"line":32867},[288,73096,54958],{"class":347},[288,73098,51610],{"class":298},[288,73100,1122],{"class":347},[288,73102,51665],{"class":294},[288,73104,1463],{"class":298},[288,73106,73107,73109,73111,73113,73115],{"class":290,"line":32873},[288,73108,57532],{"class":347},[288,73110,51610],{"class":298},[288,73112,1122],{"class":347},[288,73114,51665],{"class":294},[288,73116,1463],{"class":298},[288,73118,73119,73121,73123,73125,73127],{"class":290,"line":32884},[288,73120,62250],{"class":347},[288,73122,51610],{"class":298},[288,73124,376],{"class":347},[288,73126,51665],{"class":294},[288,73128,1463],{"class":298},[288,73130,73131,73133,73135,73137],{"class":290,"line":32890},[288,73132,57589],{"class":347},[288,73134,51610],{"class":298},[288,73136,61015],{"class":347},[288,73138,1463],{"class":298},[288,73140,73141,73143,73145,73147],{"class":290,"line":32896},[288,73142,57459],{"class":347},[288,73144,51610],{"class":298},[288,73146,51765],{"class":347},[288,73148,1463],{"class":298},[288,73150,73151,73153,73155,73157],{"class":290,"line":32902},[288,73152,64143],{"class":347},[288,73154,51610],{"class":298},[288,73156,54910],{"class":347},[288,73158,1463],{"class":298},[288,73160,73161,73163,73165,73168],{"class":290,"line":32908},[288,73162,55057],{"class":347},[288,73164,51610],{"class":298},[288,73166,73167],{"class":347},"orange",[288,73169,1463],{"class":298},[288,73171,73172,73174,73176,73179,73181],{"class":290,"line":32914},[288,73173,55307],{"class":347},[288,73175,51610],{"class":298},[288,73177,73178],{"class":347},"12.5",[288,73180,51665],{"class":294},[288,73182,1463],{"class":298},[288,73184,73185],{"class":290,"line":32920},[288,73186,2359],{"class":298},[288,73188,73189,73191,73193],{"class":290,"line":32926},[288,73190,52590],{"class":298},[288,73192,5299],{"class":51473},[288,73194,51480],{"class":298},[288,73196,73197,73199,73201],{"class":290,"line":32946},[288,73198,51958],{"class":298},[288,73200,51507],{"class":51473},[288,73202,51480],{"class":298},[288,73204,73205],{"class":290,"line":32952},[288,73206,2572],{"emptyLinePlaceholder":217},[288,73208,73209,73211,73213],{"class":290,"line":32968},[288,73210,1207],{"class":298},[288,73212,51973],{"class":51473},[288,73214,51480],{"class":298},[288,73216,73217,73219,73221,73224,73226],{"class":290,"line":32974},[288,73218,52317],{"class":298},[288,73220,14],{"class":51473},[288,73222,73223],{"class":298},">学生就业统计表\u003C\u002F",[288,73225,14],{"class":51473},[288,73227,51480],{"class":298},[288,73229,73230,73232,73234,73236,73238,73240,73242,73244,73246],{"class":290,"line":32988},[288,73231,52317],{"class":298},[288,73233,66798],{"class":51473},[288,73235,53659],{"class":2135},[288,73237,344],{"class":298},[288,73239,62837],{"class":403},[288,73241,69243],{"class":2135},[288,73243,344],{"class":298},[288,73245,31949],{"class":403},[288,73247,51480],{"class":298},[288,73249,73250,73252,73254,73256,73258,73260,73262,73264,73266,73268,73270,73273,73275,73277,73279],{"class":290,"line":32994},[288,73251,51514],{"class":298},[288,73253,53994],{"class":51473},[288,73255,53997],{"class":2135},[288,73257,344],{"class":298},[288,73259,62872],{"class":403},[288,73261,15093],{"class":2135},[288,73263,344],{"class":298},[288,73265,69269],{"class":403},[288,73267,61193],{"class":2135},[288,73269,344],{"class":298},[288,73271,73272],{"class":403},"\"姓名\"",[288,73274,53659],{"class":2135},[288,73276,344],{"class":298},[288,73278,69269],{"class":403},[288,73280,51480],{"class":298},[288,73282,73283,73285,73287,73289,73291,73293,73295,73297,73299,73301,73303,73306,73308,73310,73312],{"class":290,"line":33009},[288,73284,51514],{"class":298},[288,73286,53994],{"class":51473},[288,73288,53997],{"class":2135},[288,73290,344],{"class":298},[288,73292,62872],{"class":403},[288,73294,15093],{"class":2135},[288,73296,344],{"class":298},[288,73298,69297],{"class":403},[288,73300,61193],{"class":2135},[288,73302,344],{"class":298},[288,73304,73305],{"class":403},"\"年龄\"",[288,73307,53659],{"class":2135},[288,73309,344],{"class":298},[288,73311,69297],{"class":403},[288,73313,51480],{"class":298},[288,73315,73316,73318,73320,73322,73324,73326,73328,73330,73332,73334,73336,73339,73341,73343,73345],{"class":290,"line":33015},[288,73317,51514],{"class":298},[288,73319,53994],{"class":51473},[288,73321,53997],{"class":2135},[288,73323,344],{"class":298},[288,73325,62872],{"class":403},[288,73327,15093],{"class":2135},[288,73329,344],{"class":298},[288,73331,69399],{"class":403},[288,73333,61193],{"class":2135},[288,73335,344],{"class":298},[288,73337,73338],{"class":403},"\"薪资\"",[288,73340,53659],{"class":2135},[288,73342,344],{"class":298},[288,73344,69399],{"class":403},[288,73346,51480],{"class":298},[288,73348,73349,73351,73353,73355,73357,73359,73361,73363,73365,73367,73369,73371],{"class":290,"line":33024},[288,73350,51514],{"class":298},[288,73352,69317],{"class":51473},[288,73354,15093],{"class":2135},[288,73356,344],{"class":298},[288,73358,69324],{"class":403},[288,73360,15132],{"class":2135},[288,73362,344],{"class":298},[288,73364,7825],{"class":403},[288,73366,53659],{"class":2135},[288,73368,344],{"class":298},[288,73370,69324],{"class":403},[288,73372,51480],{"class":298},[288,73374,73375,73377,73379,73381,73383,73385,73387,73389],{"class":290,"line":33030},[288,73376,55407],{"class":298},[288,73378,69339],{"class":51473},[288,73380,66824],{"class":2135},[288,73382,344],{"class":298},[288,73384,10134],{"class":403},[288,73386,69348],{"class":298},[288,73388,69339],{"class":51473},[288,73390,51480],{"class":298},[288,73392,73393,73395,73397,73399,73401,73403,73405,73407],{"class":290,"line":33039},[288,73394,55407],{"class":298},[288,73396,69339],{"class":51473},[288,73398,66824],{"class":2135},[288,73400,344],{"class":298},[288,73402,10203],{"class":403},[288,73404,69367],{"class":298},[288,73406,69339],{"class":51473},[288,73408,51480],{"class":298},[288,73410,73411,73413,73415],{"class":290,"line":33045},[288,73412,51949],{"class":298},[288,73414,69317],{"class":51473},[288,73416,51480],{"class":298},[288,73418,73419,73421,73423,73425,73427,73429,73431,73433,73435,73437,73439,73441],{"class":290,"line":33051},[288,73420,51514],{"class":298},[288,73422,69317],{"class":51473},[288,73424,15093],{"class":2135},[288,73426,344],{"class":298},[288,73428,69421],{"class":403},[288,73430,15132],{"class":2135},[288,73432,344],{"class":298},[288,73434,7825],{"class":403},[288,73436,53659],{"class":2135},[288,73438,344],{"class":298},[288,73440,69421],{"class":403},[288,73442,51480],{"class":298},[288,73444,73445,73447,73449,73451,73453,73455,73457,73459],{"class":290,"line":33060},[288,73446,55407],{"class":298},[288,73448,69339],{"class":51473},[288,73450,66824],{"class":2135},[288,73452,344],{"class":298},[288,73454,69442],{"class":403},[288,73456,69445],{"class":298},[288,73458,69339],{"class":51473},[288,73460,51480],{"class":298},[288,73462,73463,73465,73467,73469,73471,73473,73475,73477],{"class":290,"line":33066},[288,73464,55407],{"class":298},[288,73466,69339],{"class":51473},[288,73468,66824],{"class":2135},[288,73470,344],{"class":298},[288,73472,69462],{"class":403},[288,73474,69465],{"class":298},[288,73476,69339],{"class":51473},[288,73478,51480],{"class":298},[288,73480,73481,73483,73485,73487,73489,73491,73493,73495],{"class":290,"line":33077},[288,73482,55407],{"class":298},[288,73484,69339],{"class":51473},[288,73486,66824],{"class":2135},[288,73488,344],{"class":298},[288,73490,69482],{"class":403},[288,73492,69485],{"class":298},[288,73494,69339],{"class":51473},[288,73496,51480],{"class":298},[288,73498,73499,73501,73503,73505,73507,73509,73511,73513],{"class":290,"line":33083},[288,73500,55407],{"class":298},[288,73502,69339],{"class":51473},[288,73504,66824],{"class":2135},[288,73506,344],{"class":298},[288,73508,69502],{"class":403},[288,73510,69505],{"class":298},[288,73512,69339],{"class":51473},[288,73514,51480],{"class":298},[288,73516,73517,73519,73521,73523,73525,73527,73529,73531],{"class":290,"line":33102},[288,73518,55407],{"class":298},[288,73520,69339],{"class":51473},[288,73522,66824],{"class":2135},[288,73524,344],{"class":298},[288,73526,69522],{"class":403},[288,73528,69525],{"class":298},[288,73530,69339],{"class":51473},[288,73532,51480],{"class":298},[288,73534,73535,73537,73539],{"class":290,"line":33108},[288,73536,51949],{"class":298},[288,73538,69317],{"class":51473},[288,73540,51480],{"class":298},[288,73542,73543,73545,73547],{"class":290,"line":33119},[288,73544,51514],{"class":298},[288,73546,54060],{"class":51473},[288,73548,51480],{"class":298},[288,73550,73551,73553,73555,73558,73560,73563,73565],{"class":290,"line":33125},[288,73552,55407],{"class":298},[288,73554,288],{"class":51473},[288,73556,73557],{"class":298},">+\u003C\u002F",[288,73559,288],{"class":51473},[288,73561,73562],{"class":298},">添加\u003C\u002F",[288,73564,54060],{"class":51473},[288,73566,51480],{"class":298},[288,73568,73569,73571,73573],{"class":290,"line":33145},[288,73570,52590],{"class":298},[288,73572,66798],{"class":51473},[288,73574,51480],{"class":298},[288,73576,73577,73579,73581,73583,73585,73587,73590,73592,73595,73597,73600,73602],{"class":290,"line":33161},[288,73578,52317],{"class":298},[288,73580,51784],{"class":51473},[288,73582,53659],{"class":2135},[288,73584,344],{"class":298},[288,73586,62753],{"class":403},[288,73588,73589],{"class":298},">共有数据 \u003C",[288,73591,288],{"class":51473},[288,73593,73594],{"class":298},">0\u003C\u002F",[288,73596,288],{"class":51473},[288,73598,73599],{"class":298},"> 条\u003C\u002F",[288,73601,51784],{"class":51473},[288,73603,51480],{"class":298},[288,73605,73606,73608,73610],{"class":290,"line":33167},[288,73607,52317],{"class":298},[288,73609,436],{"class":51473},[288,73611,51480],{"class":298},[288,73613,73614,73616,73618],{"class":290,"line":33181},[288,73615,51514],{"class":298},[288,73617,439],{"class":51473},[288,73619,51480],{"class":298},[288,73621,73622,73624,73626],{"class":290,"line":33187},[288,73623,55407],{"class":298},[288,73625,442],{"class":51473},[288,73627,51480],{"class":298},[288,73629,73630,73632,73634,73637,73639],{"class":290,"line":33193},[288,73631,55475],{"class":298},[288,73633,445],{"class":51473},[288,73635,73636],{"class":298},">ID\u003C\u002F",[288,73638,445],{"class":51473},[288,73640,51480],{"class":298},[288,73642,73643,73645,73647,73649,73651],{"class":290,"line":33204},[288,73644,55475],{"class":298},[288,73646,445],{"class":51473},[288,73648,69628],{"class":298},[288,73650,445],{"class":51473},[288,73652,51480],{"class":298},[288,73654,73655,73657,73659,73661,73663],{"class":290,"line":33210},[288,73656,55475],{"class":298},[288,73658,445],{"class":51473},[288,73660,69641],{"class":298},[288,73662,445],{"class":51473},[288,73664,51480],{"class":298},[288,73666,73667,73669,73671,73673,73675],{"class":290,"line":33216},[288,73668,55475],{"class":298},[288,73670,445],{"class":51473},[288,73672,69654],{"class":298},[288,73674,445],{"class":51473},[288,73676,51480],{"class":298},[288,73678,73679,73681,73683,73685,73687],{"class":290,"line":33226},[288,73680,55475],{"class":298},[288,73682,445],{"class":51473},[288,73684,69667],{"class":298},[288,73686,445],{"class":51473},[288,73688,51480],{"class":298},[288,73690,73691,73693,73695,73697,73699],{"class":290,"line":33232},[288,73692,55475],{"class":298},[288,73694,445],{"class":51473},[288,73696,69680],{"class":298},[288,73698,445],{"class":51473},[288,73700,51480],{"class":298},[288,73702,73703,73705,73707,73710,73712],{"class":290,"line":33243},[288,73704,55475],{"class":298},[288,73706,445],{"class":51473},[288,73708,73709],{"class":298},">录入时间\u003C\u002F",[288,73711,445],{"class":51473},[288,73713,51480],{"class":298},[288,73715,73716,73718,73720,73722,73724],{"class":290,"line":33249},[288,73717,55475],{"class":298},[288,73719,445],{"class":51473},[288,73721,69693],{"class":298},[288,73723,445],{"class":51473},[288,73725,51480],{"class":298},[288,73727,73728,73730,73732],{"class":290,"line":33259},[288,73729,55580],{"class":298},[288,73731,442],{"class":51473},[288,73733,51480],{"class":298},[288,73735,73736,73738,73740],{"class":290,"line":33264},[288,73737,51949],{"class":298},[288,73739,439],{"class":51473},[288,73741,51480],{"class":298},[288,73743,73744,73746,73748],{"class":290,"line":33270},[288,73745,51514],{"class":298},[288,73747,483],{"class":51473},[288,73749,51480],{"class":298},[288,73751,73752],{"class":290,"line":33319},[288,73753,73754],{"class":357},"      \u003C!-- \u003Ctr>\n",[288,73756,73757],{"class":290,"line":33366},[288,73758,73759],{"class":357},"        \u003Ctd>1\u003C\u002Ftd>\n",[288,73761,73762],{"class":290,"line":33371},[288,73763,73759],{"class":357},[288,73765,73766],{"class":290,"line":33377},[288,73767,73759],{"class":357},[288,73769,73770],{"class":290,"line":33396},[288,73771,73759],{"class":357},[288,73773,73774],{"class":290,"line":33402},[288,73775,73759],{"class":357},[288,73777,73778],{"class":290,"line":33422},[288,73779,73759],{"class":357},[288,73781,73782],{"class":290,"line":33428},[288,73783,73759],{"class":357},[288,73785,73786],{"class":290,"line":33434},[288,73787,73788],{"class":357},"        \u003Ctd>\n",[288,73790,73791],{"class":290,"line":33444},[288,73792,73793],{"class":357},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[288,73795,73796],{"class":290,"line":33449},[288,73797,73798],{"class":357},"        \u003C\u002Ftd>\n",[288,73800,73801],{"class":290,"line":33455},[288,73802,73803],{"class":357},"      \u003C\u002Ftr> -->\n",[288,73805,73806,73808,73810],{"class":290,"line":33471},[288,73807,51949],{"class":298},[288,73809,483],{"class":51473},[288,73811,51480],{"class":298},[288,73813,73814,73816,73818],{"class":290,"line":33516},[288,73815,52590],{"class":298},[288,73817,436],{"class":51473},[288,73819,51480],{"class":298},[288,73821,73822,73824,73826],{"class":290,"line":33522},[288,73823,52317],{"class":298},[288,73825,51986],{"class":51473},[288,73827,51480],{"class":298},[288,73829,73830],{"class":290,"line":33528},[288,73831,73832],{"class":357},"    \u002F\u002F const initData = [{\n",[288,73834,73835],{"class":290,"line":33534},[288,73836,73837],{"class":357},"    \u002F\u002F   unameId: 1,\n",[288,73839,73840],{"class":290,"line":33545},[288,73841,73842],{"class":357},"    \u002F\u002F   uname: '华晨宇',\n",[288,73844,73845],{"class":290,"line":33551},[288,73846,73847],{"class":357},"    \u002F\u002F   age: 22,\n",[288,73849,73850],{"class":290,"line":33557},[288,73851,73852],{"class":357},"    \u002F\u002F   salary: 12000,\n",[288,73854,73855],{"class":290,"line":33563},[288,73856,73857],{"class":357},"    \u002F\u002F   gender: '男',\n",[288,73859,73860],{"class":290,"line":33581},[288,73861,73862],{"class":357},"    \u002F\u002F   city: '北京',\n",[288,73864,73865],{"class":290,"line":33595},[288,73866,73867],{"class":357},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[288,73869,73870],{"class":290,"line":33604},[288,73871,73872],{"class":357},"    \u002F\u002F }]\n",[288,73874,73875],{"class":290,"line":33613},[288,73876,73877],{"class":357},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[288,73879,73880],{"class":290,"line":33622},[288,73881,73882],{"class":357},"    \u002F\u002F 1.渲染业务\n",[288,73884,73885],{"class":290,"line":33631},[288,73886,73887],{"class":357},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[288,73889,73890],{"class":290,"line":33637},[288,73891,73892],{"class":357},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[288,73894,73895],{"class":290,"line":33643},[288,73896,73897],{"class":357},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[288,73899,73900],{"class":290,"line":33651},[288,73901,2572],{"emptyLinePlaceholder":217},[288,73903,73904],{"class":290,"line":33656},[288,73905,73906],{"class":357},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[288,73908,73909],{"class":290,"line":33662},[288,73910,73911],{"class":357},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[288,73913,73914,73916,73918,73920],{"class":290,"line":33673},[288,73915,11394],{"class":294},[288,73917,57868],{"class":347},[288,73919,13737],{"class":294},[288,73921,52011],{"class":298},[288,73923,73924,73927,73929],{"class":290,"line":33679},[288,73925,73926],{"class":298},"    console.",[288,73928,58420],{"class":2135},[288,73930,52585],{"class":298},[288,73932,73933],{"class":290,"line":33699},[288,73934,2572],{"emptyLinePlaceholder":217},[288,73936,73937],{"class":290,"line":33705},[288,73938,73939],{"class":357},"    \u002F\u002F 时间函数\n",[288,73941,73942,73944,73947],{"class":290,"line":33711},[288,73943,70257],{"class":294},[288,73945,73946],{"class":2135}," getTime",[288,73948,11026],{"class":298},[288,73950,73951,73953,73956,73958,73960,73963],{"class":290,"line":33717},[288,73952,58401],{"class":294},[288,73954,73955],{"class":347}," date",[288,73957,13737],{"class":294},[288,73959,11751],{"class":294},[288,73961,73962],{"class":2135}," Date",[288,73964,2148],{"class":298},[288,73966,73967,73969,73971,73973,73976,73979,73981,73983,73985,73988,73991,73993,73995,73997,73999,74001,74003,74005],{"class":290,"line":33734},[288,73968,58401],{"class":294},[288,73970,16264],{"class":347},[288,73972,13737],{"class":294},[288,73974,73975],{"class":298}," date.",[288,73977,73978],{"class":2135},"getHours",[288,73980,13223],{"class":298},[288,73982,1207],{"class":294},[288,73984,2210],{"class":347},[288,73986,73987],{"class":294}," ?",[288,73989,73990],{"class":403}," '0'",[288,73992,45739],{"class":294},[288,73994,73975],{"class":298},[288,73996,73978],{"class":2135},[288,73998,13223],{"class":298},[288,74000,1156],{"class":294},[288,74002,73975],{"class":298},[288,74004,73978],{"class":2135},[288,74006,2148],{"class":298},[288,74008,74009,74011,74014,74016,74018,74021,74023,74025,74027,74029,74031,74033,74035,74037,74039,74041,74043,74045],{"class":290,"line":33740},[288,74010,58401],{"class":294},[288,74012,74013],{"class":347}," m",[288,74015,13737],{"class":294},[288,74017,73975],{"class":298},[288,74019,74020],{"class":2135},"getMinutes",[288,74022,13223],{"class":298},[288,74024,1207],{"class":294},[288,74026,2210],{"class":347},[288,74028,73987],{"class":294},[288,74030,73990],{"class":403},[288,74032,45739],{"class":294},[288,74034,73975],{"class":298},[288,74036,74020],{"class":2135},[288,74038,13223],{"class":298},[288,74040,1156],{"class":294},[288,74042,73975],{"class":298},[288,74044,74020],{"class":2135},[288,74046,2148],{"class":298},[288,74048,74049,74051,74053,74055,74057,74060,74062,74064,74066,74068,74070,74072,74074,74076,74078,74080,74082,74084],{"class":290,"line":33746},[288,74050,58401],{"class":294},[288,74052,8601],{"class":347},[288,74054,13737],{"class":294},[288,74056,73975],{"class":298},[288,74058,74059],{"class":2135},"getSeconds",[288,74061,13223],{"class":298},[288,74063,1207],{"class":294},[288,74065,2210],{"class":347},[288,74067,73987],{"class":294},[288,74069,73990],{"class":403},[288,74071,45739],{"class":294},[288,74073,73975],{"class":298},[288,74075,74059],{"class":2135},[288,74077,13223],{"class":298},[288,74079,1156],{"class":294},[288,74081,73975],{"class":298},[288,74083,74059],{"class":2135},[288,74085,2148],{"class":298},[288,74087,74088,74090,74093,74095,74097,74100,74102,74105,74107,74110,74112,74114,74117,74119,74121,74123,74125,74127,74129,74132,74134,74137,74139,74142,74144,74146,74148],{"class":290,"line":33752},[288,74089,58401],{"class":294},[288,74091,74092],{"class":347}," str",[288,74094,13737],{"class":294},[288,74096,63076],{"class":403},[288,74098,74099],{"class":298},"date",[288,74101,855],{"class":403},[288,74103,74104],{"class":2135},"getFullYear",[288,74106,2599],{"class":403},[288,74108,74109],{"class":403},"}\u002F${",[288,74111,74099],{"class":298},[288,74113,855],{"class":403},[288,74115,74116],{"class":2135},"getMonth",[288,74118,13223],{"class":403},[288,74120,778],{"class":294},[288,74122,25291],{"class":347},[288,74124,74109],{"class":403},[288,74126,74099],{"class":298},[288,74128,855],{"class":403},[288,74130,74131],{"class":2135},"getDate",[288,74133,2599],{"class":403},[288,74135,74136],{"class":403},"} ${",[288,74138,712],{"class":298},[288,74140,74141],{"class":403},"}:${",[288,74143,841],{"class":298},[288,74145,74141],{"class":403},[288,74147,992],{"class":298},[288,74149,74150],{"class":403},"}`\n",[288,74152,74153,74156],{"class":290,"line":33758},[288,74154,74155],{"class":294},"      return",[288,74157,74158],{"class":298}," str\n",[288,74160,74161],{"class":290,"line":33764},[288,74162,2359],{"class":298},[288,74164,74165],{"class":290,"line":33791},[288,74166,74167],{"class":357},"    \u002F\u002F 渲染函数\n",[288,74169,74170,74172,74174,74176,74178,74180,74182,74184],{"class":290,"line":33815},[288,74171,11394],{"class":294},[288,74173,69920],{"class":347},[288,74175,13737],{"class":294},[288,74177,54569],{"class":298},[288,74179,54572],{"class":2135},[288,74181,299],{"class":298},[288,74183,69931],{"class":403},[288,74185,305],{"class":298},[288,74187,74188,74190,74192],{"class":290,"line":33821},[288,74189,70257],{"class":294},[288,74191,70260],{"class":2135},[288,74193,11026],{"class":298},[288,74195,74196],{"class":290,"line":33827},[288,74197,74198],{"class":357},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[288,74200,74201],{"class":290,"line":33833},[288,74202,74203],{"class":357},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[288,74205,74206,74208,74211,74213,74215,74218,74220,74222,74224,74227,74229,74232],{"class":290,"line":33844},[288,74207,58401],{"class":294},[288,74209,74210],{"class":347}," trArr",[288,74212,13737],{"class":294},[288,74214,52138],{"class":298},[288,74216,74217],{"class":2135},"map",[288,74219,299],{"class":298},[288,74221,54622],{"class":294},[288,74223,1830],{"class":298},[288,74225,74226],{"class":5389},"ele",[288,74228,12608],{"class":298},[288,74230,74231],{"class":5389},"index",[288,74233,12615],{"class":298},[288,74235,74236,74238],{"class":290,"line":33855},[288,74237,14925],{"class":294},[288,74239,70341],{"class":403},[288,74241,74242],{"class":290,"line":33861},[288,74243,74244],{"class":403},"      \u003Ctr>\n",[288,74246,74247,74249,74251,74253,74256],{"class":290,"line":33878},[288,74248,70346],{"class":403},[288,74250,74226],{"class":298},[288,74252,855],{"class":403},[288,74254,74255],{"class":298},"unameId",[288,74257,70361],{"class":403},[288,74259,74260,74262,74264,74266,74268],{"class":290,"line":33901},[288,74261,70346],{"class":403},[288,74263,74226],{"class":298},[288,74265,855],{"class":403},[288,74267,70377],{"class":298},[288,74269,70361],{"class":403},[288,74271,74272,74274,74276,74278,74280],{"class":290,"line":33924},[288,74273,70346],{"class":403},[288,74275,74226],{"class":298},[288,74277,855],{"class":403},[288,74279,70394],{"class":298},[288,74281,70361],{"class":403},[288,74283,74284,74286,74288,74290,74292],{"class":290,"line":33930},[288,74285,70346],{"class":403},[288,74287,74226],{"class":298},[288,74289,855],{"class":403},[288,74291,70411],{"class":298},[288,74293,70361],{"class":403},[288,74295,74296,74298,74300,74302,74304],{"class":290,"line":33935},[288,74297,70346],{"class":403},[288,74299,74226],{"class":298},[288,74301,855],{"class":403},[288,74303,70428],{"class":298},[288,74305,70361],{"class":403},[288,74307,74308,74310,74312,74314,74316],{"class":290,"line":33944},[288,74309,70346],{"class":403},[288,74311,74226],{"class":298},[288,74313,855],{"class":403},[288,74315,70445],{"class":298},[288,74317,70361],{"class":403},[288,74319,74320,74322,74324,74326,74328],{"class":290,"line":33954},[288,74321,70346],{"class":403},[288,74323,74226],{"class":298},[288,74325,855],{"class":403},[288,74327,2559],{"class":298},[288,74329,70361],{"class":403},[288,74331,74332],{"class":290,"line":33960},[288,74333,73788],{"class":403},[288,74335,74336,74339,74341],{"class":290,"line":33965},[288,74337,74338],{"class":403},"          \u003Ca href=\"#\" data-id=\"${",[288,74340,74231],{"class":298},[288,74342,74343],{"class":403},"}\">删除\u003C\u002Fa>\n",[288,74345,74346],{"class":290,"line":33971},[288,74347,73798],{"class":403},[288,74349,74350],{"class":290,"line":33984},[288,74351,74352],{"class":403},"      \u003C\u002Ftr>\n",[288,74354,74355],{"class":290,"line":33990},[288,74356,74357],{"class":403},"  `\n",[288,74359,74360],{"class":290,"line":34001},[288,74361,64988],{"class":298},[288,74363,74364,74366,74368],{"class":290,"line":34012},[288,74365,58417],{"class":298},[288,74367,58420],{"class":2135},[288,74369,74370],{"class":298},"(trArr)\n",[288,74372,74373],{"class":290,"line":34031},[288,74374,2572],{"emptyLinePlaceholder":217},[288,74376,74377],{"class":290,"line":49691},[288,74378,74379],{"class":357},"      \u002F\u002F (2) 把数组转换为字符串join\n",[288,74381,74382],{"class":290,"line":49696},[288,74383,74384],{"class":357},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[288,74386,74387,74389,74391,74394,74397,74399,74402],{"class":290,"line":49705},[288,74388,70272],{"class":298},[288,74390,344],{"class":294},[288,74392,74393],{"class":298}," trArr.",[288,74395,74396],{"class":2135},"join",[288,74398,299],{"class":298},[288,74400,74401],{"class":403},"''",[288,74403,305],{"class":298},[288,74405,74406],{"class":290,"line":49714},[288,74407,74408],{"class":357},"      \u002F\u002F 显示共有几条\n",[288,74410,74411,74413,74415,74417,74420,74423,74425,74427],{"class":290,"line":49719},[288,74412,55944],{"class":298},[288,74414,54572],{"class":2135},[288,74416,299],{"class":298},[288,74418,74419],{"class":403},"'.total span'",[288,74421,74422],{"class":298},").innerHTML ",[288,74424,344],{"class":294},[288,74426,52138],{"class":298},[288,74428,56004],{"class":347},[288,74430,74431],{"class":290,"line":49724},[288,74432,2359],{"class":298},[288,74434,74435],{"class":290,"line":49729},[288,74436,74437],{"class":357},"    \u002F\u002F render()\n",[288,74439,74440],{"class":290,"line":49742},[288,74441,2572],{"emptyLinePlaceholder":217},[288,74443,74444],{"class":290,"line":49747},[288,74445,74446],{"class":357},"    \u002F\u002F 获取DOM对象\n",[288,74448,74449,74451,74453,74455,74457,74459,74461,74463],{"class":290,"line":49756},[288,74450,11394],{"class":294},[288,74452,69994],{"class":347},[288,74454,13737],{"class":294},[288,74456,54569],{"class":298},[288,74458,54572],{"class":2135},[288,74460,299],{"class":298},[288,74462,70005],{"class":403},[288,74464,305],{"class":298},[288,74466,74467,74469,74471,74473,74475,74477,74479,74481],{"class":290,"line":49765},[288,74468,11394],{"class":294},[288,74470,69821],{"class":347},[288,74472,13737],{"class":294},[288,74474,54569],{"class":298},[288,74476,54572],{"class":2135},[288,74478,299],{"class":298},[288,74480,69832],{"class":403},[288,74482,305],{"class":298},[288,74484,74485,74487,74489,74491,74493,74495,74497,74499],{"class":290,"line":49782},[288,74486,11394],{"class":294},[288,74488,15862],{"class":347},[288,74490,13737],{"class":294},[288,74492,54569],{"class":298},[288,74494,54572],{"class":2135},[288,74496,299],{"class":298},[288,74498,69851],{"class":403},[288,74500,305],{"class":298},[288,74502,74504,74506,74508,74510,74512,74514,74516,74518],{"class":290,"line":74503},231,[288,74505,11394],{"class":294},[288,74507,69880],{"class":347},[288,74509,13737],{"class":294},[288,74511,54569],{"class":298},[288,74513,54572],{"class":2135},[288,74515,299],{"class":298},[288,74517,69891],{"class":403},[288,74519,305],{"class":298},[288,74521,74523,74525,74527,74529,74531,74533,74535,74537],{"class":290,"line":74522},232,[288,74524,11394],{"class":294},[288,74526,69860],{"class":347},[288,74528,13737],{"class":294},[288,74530,54569],{"class":298},[288,74532,54572],{"class":2135},[288,74534,299],{"class":298},[288,74536,69871],{"class":403},[288,74538,305],{"class":298},[288,74540,74542,74544,74546,74548,74550,74552,74554,74556],{"class":290,"line":74541},233,[288,74543,11394],{"class":294},[288,74545,69900],{"class":347},[288,74547,13737],{"class":294},[288,74549,54569],{"class":298},[288,74551,54572],{"class":2135},[288,74553,299],{"class":298},[288,74555,69911],{"class":403},[288,74557,305],{"class":298},[288,74559,74561],{"class":290,"line":74560},234,[288,74562,2572],{"emptyLinePlaceholder":217},[288,74564,74566],{"class":290,"line":74565},235,[288,74567,74568],{"class":357},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[288,74570,74572,74574,74576,74578,74580,74582,74584,74586,74588],{"class":290,"line":74571},236,[288,74573,70012],{"class":298},[288,74575,57986],{"class":2135},[288,74577,299],{"class":298},[288,74579,70019],{"class":403},[288,74581,12608],{"class":298},[288,74583,54622],{"class":294},[288,74585,1830],{"class":298},[288,74587,373],{"class":5389},[288,74589,12615],{"class":298},[288,74591,74593],{"class":290,"line":74592},237,[288,74594,74595],{"class":357},"      \u002F\u002F 禁止浏览器跳转\n",[288,74597,74599,74601,74603],{"class":290,"line":74598},238,[288,74600,70039],{"class":298},[288,74602,70042],{"class":2135},[288,74604,2148],{"class":298},[288,74606,74608],{"class":290,"line":74607},239,[288,74609,74610],{"class":357},"      \u002F\u002F 非空判断\n",[288,74612,74614],{"class":290,"line":74613},240,[288,74615,74616],{"class":357},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[288,74618,74620],{"class":290,"line":74619},241,[288,74621,74622],{"class":357},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[288,74624,74626,74628,74630,74632,74635,74637,74640,74643,74645,74647],{"class":290,"line":74625},242,[288,74627,54653],{"class":294},[288,74629,1830],{"class":298},[288,74631,525],{"class":294},[288,74633,74634],{"class":298},"uname.value ",[288,74636,71530],{"class":294},[288,74638,74639],{"class":294}," !",[288,74641,74642],{"class":298},"age.value ",[288,74644,71530],{"class":294},[288,74646,74639],{"class":294},[288,74648,74649],{"class":298},"salary.value) {\n",[288,74651,74653,74655,74657,74659,74661],{"class":290,"line":74652},243,[288,74654,14925],{"class":294},[288,74656,70113],{"class":2135},[288,74658,299],{"class":298},[288,74660,70118],{"class":403},[288,74662,305],{"class":298},[288,74664,74666],{"class":290,"line":74665},244,[288,74667,52571],{"class":298},[288,74669,74671,74673,74675],{"class":290,"line":74670},245,[288,74672,58180],{"class":298},[288,74674,52057],{"class":2135},[288,74676,74677],{"class":298},"({\n",[288,74679,74681],{"class":290,"line":74680},246,[288,74682,74683],{"class":357},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[288,74685,74687],{"class":290,"line":74686},247,[288,74688,74689],{"class":357},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[288,74691,74693],{"class":290,"line":74692},248,[288,74694,74695],{"class":357},"        \u002F\u002F 对象的序号应为数组长度+1\n",[288,74697,74699],{"class":290,"line":74698},249,[288,74700,74701],{"class":357},"        \u002F\u002F unameId: arr.length + 1,\n",[288,74703,74705],{"class":290,"line":74704},250,[288,74706,2572],{"emptyLinePlaceholder":217},[288,74708,74710],{"class":290,"line":74709},251,[288,74711,74712],{"class":357},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[288,74714,74716],{"class":290,"line":74715},252,[288,74717,74718],{"class":357},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[288,74720,74722],{"class":290,"line":74721},253,[288,74723,74724],{"class":357},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[288,74726,74728],{"class":290,"line":74727},254,[288,74729,74730],{"class":357},"        \u002F\u002F 0当假看\n",[288,74732,74734,74737,74739,74741,74744,74746,74748,74750,74753,74755,74757,74760,74762],{"class":290,"line":74733},255,[288,74735,74736],{"class":298},"        unameId: arr.",[288,74738,52141],{"class":347},[288,74740,73987],{"class":294},[288,74742,74743],{"class":298}," arr[arr.",[288,74745,52141],{"class":347},[288,74747,52444],{"class":294},[288,74749,25291],{"class":347},[288,74751,74752],{"class":298},"].unameId ",[288,74754,778],{"class":294},[288,74756,25291],{"class":347},[288,74758,74759],{"class":294}," :",[288,74761,25291],{"class":347},[288,74763,31639],{"class":298},[288,74765,74767],{"class":290,"line":74766},256,[288,74768,70166],{"class":298},[288,74770,74772],{"class":290,"line":74771},257,[288,74773,70171],{"class":298},[288,74775,74777],{"class":290,"line":74776},258,[288,74778,70181],{"class":298},[288,74780,74782],{"class":290,"line":74781},259,[288,74783,70176],{"class":298},[288,74785,74787],{"class":290,"line":74786},260,[288,74788,74789],{"class":298},"        city: city.value,\n",[288,74791,74793],{"class":290,"line":74792},261,[288,74794,74795],{"class":357},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[288,74797,74799],{"class":290,"line":74798},262,[288,74800,74801],{"class":357},"        \u002F\u002F time: new Date().toDateString()\n",[288,74803,74805,74808,74811],{"class":290,"line":74804},263,[288,74806,74807],{"class":298},"        time: ",[288,74809,74810],{"class":2135},"getTime",[288,74812,2148],{"class":298},[288,74814,74816],{"class":290,"line":74815},264,[288,74817,64988],{"class":298},[288,74819,74821],{"class":290,"line":74820},265,[288,74822,74823],{"class":357},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[288,74825,74827,74829],{"class":290,"line":74826},266,[288,74828,70241],{"class":2135},[288,74830,2148],{"class":298},[288,74832,74834,74836,74838,74840,74842],{"class":290,"line":74833},267,[288,74835,70224],{"class":347},[288,74837,855],{"class":298},[288,74839,70229],{"class":2135},[288,74841,13223],{"class":298},[288,74843,74844],{"class":357},"\u002F\u002F重置表单\n",[288,74846,74848],{"class":290,"line":74847},268,[288,74849,74850],{"class":357},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[288,74852,74854,74857,74859,74861,74864,74866,74868,74870,74872],{"class":290,"line":74853},269,[288,74855,74856],{"class":298},"      localStorage.",[288,74858,71827],{"class":2135},[288,74860,299],{"class":298},[288,74862,74863],{"class":403},"'data'",[288,74865,12608],{"class":298},[288,74867,71837],{"class":347},[288,74869,855],{"class":298},[288,74871,71842],{"class":2135},[288,74873,74874],{"class":298},"(arr))\n",[288,74876,74878],{"class":290,"line":74877},270,[288,74879,33634],{"class":298},[288,74881,74883],{"class":290,"line":74882},271,[288,74884,2572],{"emptyLinePlaceholder":217},[288,74886,74888],{"class":290,"line":74887},272,[288,74889,74890],{"class":357},"    \u002F\u002F 3.删除业务\n",[288,74892,74894],{"class":290,"line":74893},273,[288,74895,74896],{"class":357},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[288,74898,74900,74902,74904,74906,74908,74910,74912,74914,74916],{"class":290,"line":74899},274,[288,74901,70514],{"class":298},[288,74903,57986],{"class":2135},[288,74905,299],{"class":298},[288,74907,57991],{"class":403},[288,74909,12608],{"class":298},[288,74911,54622],{"class":294},[288,74913,1830],{"class":298},[288,74915,373],{"class":5389},[288,74917,12615],{"class":298},[288,74919,74921],{"class":290,"line":74920},275,[288,74922,74923],{"class":357},"      \u002F\u002F 判断是否点击的是删除按钮\n",[288,74925,74927,74929,74931,74933,74935],{"class":290,"line":74926},276,[288,74928,54653],{"class":294},[288,74930,67207],{"class":298},[288,74932,54659],{"class":294},[288,74934,68429],{"class":403},[288,74936,12615],{"class":298},[288,74938,74940],{"class":290,"line":74939},277,[288,74941,74942],{"class":357},"        \u002F\u002F alert(1)\n",[288,74944,74946],{"class":290,"line":74945},278,[288,74947,74948],{"class":357},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[288,74950,74952],{"class":290,"line":74951},279,[288,74953,74954],{"class":357},"        \u002F\u002F console.log(e.target)\n",[288,74956,74958],{"class":290,"line":74957},280,[288,74959,74960],{"class":357},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[288,74962,74964],{"class":290,"line":74963},281,[288,74965,2572],{"emptyLinePlaceholder":217},[288,74967,74969],{"class":290,"line":74968},282,[288,74970,74971],{"class":357},"        \u002F\u002F 确认框，确然是否真的要删除\n",[288,74973,74975],{"class":290,"line":74974},283,[288,74976,74977],{"class":357},"        \u002F\u002F confirm()为确认框\n",[288,74979,74981],{"class":290,"line":74980},284,[288,74982,74983],{"class":357},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[288,74985,74987,74989,74991,74994,74996,74999],{"class":290,"line":74986},285,[288,74988,2669],{"class":294},[288,74990,1830],{"class":298},[288,74992,74993],{"class":2135},"confirm",[288,74995,299],{"class":298},[288,74997,74998],{"class":403},"'您确定要删除这条数据吗？'",[288,75000,75001],{"class":298},")) {\n",[288,75003,75005,75008,75010,75012,75014],{"class":290,"line":75004},286,[288,75006,75007],{"class":298},"          arr.",[288,75009,58183],{"class":2135},[288,75011,70567],{"class":298},[288,75013,516],{"class":347},[288,75015,305],{"class":298},[288,75017,75019],{"class":290,"line":75018},287,[288,75020,75021],{"class":357},"          \u002F\u002F 3.4 重新渲染页面\n",[288,75023,75025,75028],{"class":290,"line":75024},288,[288,75026,75027],{"class":2135},"          render",[288,75029,2148],{"class":298},[288,75031,75033],{"class":290,"line":75032},289,[288,75034,75035],{"class":357},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[288,75037,75039,75042,75044,75046,75048,75050,75052,75054,75056],{"class":290,"line":75038},290,[288,75040,75041],{"class":298},"          localStorage.",[288,75043,71827],{"class":2135},[288,75045,299],{"class":298},[288,75047,74863],{"class":403},[288,75049,12608],{"class":298},[288,75051,71837],{"class":347},[288,75053,855],{"class":298},[288,75055,71842],{"class":2135},[288,75057,74874],{"class":298},[288,75059,75061],{"class":290,"line":75060},291,[288,75062,2701],{"class":298},[288,75064,75066],{"class":290,"line":75065},292,[288,75067,52571],{"class":298},[288,75069,75071],{"class":290,"line":75070},293,[288,75072,2572],{"emptyLinePlaceholder":217},[288,75074,75076],{"class":290,"line":75075},294,[288,75077,33634],{"class":298},[288,75079,75081],{"class":290,"line":75080},295,[288,75082,2572],{"emptyLinePlaceholder":217},[288,75084,75086,75088,75090],{"class":290,"line":75085},296,[288,75087,52590],{"class":298},[288,75089,51986],{"class":51473},[288,75091,51480],{"class":298},[288,75093,75095,75097,75099],{"class":290,"line":75094},297,[288,75096,51958],{"class":298},[288,75098,51973],{"class":51473},[288,75100,51480],{"class":298},[288,75102,75104],{"class":290,"line":75103},298,[288,75105,2572],{"emptyLinePlaceholder":217},[288,75107,75109,75111,75113],{"class":290,"line":75108},299,[288,75110,51958],{"class":298},[288,75112,50808],{"class":51473},[288,75114,51480],{"class":298},[14,75116,75118],{"id":75117},"_36-正则表达式","3.6 正则表达式",[19,75120,75121],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75123,75124],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75126,75127],{},"正则表达式的作用：",[1304,75129,75130,75137,75143],{},[246,75131,75132,75133,75136],{},"表单验证（ ",[448,75134,75135],{},"匹配"," ）",[246,75138,75139,75140,75136],{},"过滤敏感词（ ",[448,75141,75142],{},"替换",[246,75144,75145,75146,75136],{},"字符串中提取我们想要的部分（ ",[448,75147,75148],{},"提取",[260,75150,75152],{"id":75151},"_361-语法","3.6.1 语法",[19,75154,75155],{},"正则表达式使用步骤：",[243,75157,75158,75161],{},[246,75159,75160],{},"定义规则",[246,75162,75163],{},"查找是否匹配",[19,75165,75166],{},"正则表达式里边不需要写引号",[19,75168,75169],{},[200,75170],{"alt":205,"src":75171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75173,75174],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75176,75177],{},"reg.test(str)",[19,75179,75180],{},[200,75181],{"alt":205,"src":75182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75184,75185],{},[200,75186],{"alt":205,"src":75187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[260,75189,75191],{"id":75190},"_362-元字符","3.6.2 元字符",[243,75193,75194,75197,75200,75203,75210],{},[246,75195,75196],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[246,75198,75199],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[246,75201,75202],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[246,75204,75205,75206],{},"正则验证工具：",[104,75207,75208],{"href":75208,"rel":75209},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[108],[246,75211,75212],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22171,75214,75216],{"id":75215},"_3621-边界符","3.6.2.1 边界符",[19,75218,75219],{},[200,75220],{"alt":205,"src":75221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75223,75224],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75226,75227],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75229,75230],{},"只匹配一次",[19,75232,75233],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22171,75235,75237],{"id":75236},"_3622-量词","3.6.2.2 量词",[19,75239,75240],{},[200,75241],{"alt":205,"src":75242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75244,75245],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22171,75247,75249],{"id":75248},"_3623-元字符","3.6.2.3 元字符",[19,75251,75252],{},[200,75253],{"alt":205,"src":75254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75256,75257],{},"匹配的是a或b或c []只选一个",[19,75259,75260],{},[200,75261],{"alt":205,"src":75262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75264,75265],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75267,75268],{},[200,75269],{"alt":205,"src":75270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75272,75273],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75275,75276],{},[200,75277],{"alt":205,"src":75278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[280,75280,75282],{"className":50806,"code":75281,"language":50808,"meta":205,"style":205},"\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",[25,75283,75284,75294,75308,75312,75320,75334,75354,75366,75374,75378,75386,75394,75399,75430,75457,75485,75489,75494,75522,75553,75558,75563,75594,75626,75658,75662,75667,75698,75728,75758,75762,75767,75798,75829,75859,75889,75893,75898,75931,75935,75940,75971,76002,76006,76011,76042,76072,76103,76107,76112,76144,76175,76206,76233,76264,76296,76329,76360,76391,76423,76454,76462,76470,76474],{"__ignoreMap":205},[288,75285,75286,75288,75290,75292],{"class":290,"line":291},[288,75287,51470],{"class":298},[288,75289,51474],{"class":51473},[288,75291,51477],{"class":2135},[288,75293,51480],{"class":298},[288,75295,75296,75298,75300,75302,75304,75306],{"class":290,"line":206},[288,75297,1207],{"class":298},[288,75299,50808],{"class":51473},[288,75301,51489],{"class":2135},[288,75303,344],{"class":298},[288,75305,51494],{"class":403},[288,75307,51480],{"class":298},[288,75309,75310],{"class":290,"line":1352},[288,75311,2572],{"emptyLinePlaceholder":217},[288,75313,75314,75316,75318],{"class":290,"line":1367},[288,75315,1207],{"class":298},[288,75317,51507],{"class":51473},[288,75319,51480],{"class":298},[288,75321,75322,75324,75326,75328,75330,75332],{"class":290,"line":1373},[288,75323,52317],{"class":298},[288,75325,51517],{"class":51473},[288,75327,51520],{"class":2135},[288,75329,344],{"class":298},[288,75331,51525],{"class":403},[288,75333,51480],{"class":298},[288,75335,75336,75338,75340,75342,75344,75346,75348,75350,75352],{"class":290,"line":1387},[288,75337,52317],{"class":298},[288,75339,51517],{"class":51473},[288,75341,15093],{"class":2135},[288,75343,344],{"class":298},[288,75345,51564],{"class":403},[288,75347,51544],{"class":2135},[288,75349,344],{"class":298},[288,75351,51571],{"class":403},[288,75353,51480],{"class":298},[288,75355,75356,75358,75360,75362,75364],{"class":290,"line":1393},[288,75357,52317],{"class":298},[288,75359,51580],{"class":51473},[288,75361,51583],{"class":298},[288,75363,51580],{"class":51473},[288,75365,51480],{"class":298},[288,75367,75368,75370,75372],{"class":290,"line":1484},[288,75369,51958],{"class":298},[288,75371,51507],{"class":51473},[288,75373,51480],{"class":298},[288,75375,75376],{"class":290,"line":1490},[288,75377,2572],{"emptyLinePlaceholder":217},[288,75379,75380,75382,75384],{"class":290,"line":1502},[288,75381,1207],{"class":298},[288,75383,51973],{"class":51473},[288,75385,51480],{"class":298},[288,75387,75388,75390,75392],{"class":290,"line":1784},[288,75389,52317],{"class":298},[288,75391,51986],{"class":51473},[288,75393,51480],{"class":298},[288,75395,75396],{"class":290,"line":1789},[288,75397,75398],{"class":357},"    \u002F\u002F 元字符中\n",[288,75400,75401,75403,75405,75407,75409,75412,75414,75416,75419,75421,75424,75427],{"class":290,"line":1795},[288,75402,73926],{"class":298},[288,75404,58420],{"class":2135},[288,75406,299],{"class":298},[288,75408,881],{"class":403},[288,75410,75411],{"class":48150},"哈",[288,75413,881],{"class":403},[288,75415,855],{"class":298},[288,75417,75418],{"class":2135},"test",[288,75420,299],{"class":298},[288,75422,75423],{"class":403},"'哈'",[288,75425,75426],{"class":298},"))  ",[288,75428,75429],{"class":357},"\u002F\u002Ftrue\n",[288,75431,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75453,75455],{"class":290,"line":1800},[288,75433,73926],{"class":298},[288,75435,58420],{"class":2135},[288,75437,299],{"class":298},[288,75439,881],{"class":403},[288,75441,75411],{"class":48150},[288,75443,881],{"class":403},[288,75445,855],{"class":298},[288,75447,75418],{"class":2135},[288,75449,299],{"class":298},[288,75451,75452],{"class":403},"'哈哈'",[288,75454,75426],{"class":298},[288,75456,75429],{"class":357},[288,75458,75459,75461,75463,75465,75467,75469,75471,75473,75475,75477,75480,75483],{"class":290,"line":1814},[288,75460,73926],{"class":298},[288,75462,58420],{"class":2135},[288,75464,299],{"class":298},[288,75466,881],{"class":403},[288,75468,75411],{"class":48150},[288,75470,881],{"class":403},[288,75472,855],{"class":298},[288,75474,75418],{"class":2135},[288,75476,299],{"class":298},[288,75478,75479],{"class":403},"'二哈'",[288,75481,75482],{"class":298},"))   ",[288,75484,75429],{"class":357},[288,75486,75487],{"class":290,"line":1819},[288,75488,2572],{"emptyLinePlaceholder":217},[288,75490,75491],{"class":290,"line":1825},[288,75492,75493],{"class":357},"    \u002F\u002F 1.边界符\n",[288,75495,75496,75498,75500,75502,75504,75506,75508,75510,75512,75514,75516,75518,75520],{"class":290,"line":1846},[288,75497,73926],{"class":298},[288,75499,58420],{"class":2135},[288,75501,299],{"class":298},[288,75503,881],{"class":403},[288,75505,1263],{"class":294},[288,75507,75411],{"class":48150},[288,75509,881],{"class":403},[288,75511,855],{"class":298},[288,75513,75418],{"class":2135},[288,75515,299],{"class":298},[288,75517,75423],{"class":403},[288,75519,75426],{"class":298},[288,75521,75429],{"class":357},[288,75523,75524,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550],{"class":290,"line":1851},[288,75525,73926],{"class":298},[288,75527,58420],{"class":2135},[288,75529,299],{"class":298},[288,75531,881],{"class":403},[288,75533,1263],{"class":294},[288,75535,75411],{"class":48150},[288,75537,599],{"class":294},[288,75539,881],{"class":403},[288,75541,855],{"class":298},[288,75543,75418],{"class":2135},[288,75545,299],{"class":298},[288,75547,75452],{"class":403},[288,75549,75426],{"class":298},[288,75551,75552],{"class":357},"\u002F\u002Ffalse\n",[288,75554,75555],{"class":290,"line":1865},[288,75556,75557],{"class":357},"    \u002F\u002F 2.量词\n",[288,75559,75560],{"class":290,"line":1870},[288,75561,75562],{"class":357},"    \u002F\u002F 量词 * 类似于 >= 0\n",[288,75564,75565,75567,75569,75571,75573,75575,75577,75580,75582,75584,75586,75588,75590,75592],{"class":290,"line":1899},[288,75566,73926],{"class":298},[288,75568,58420],{"class":2135},[288,75570,299],{"class":298},[288,75572,881],{"class":403},[288,75574,1263],{"class":294},[288,75576,75411],{"class":48150},[288,75578,75579],{"class":294},"*$",[288,75581,881],{"class":403},[288,75583,855],{"class":298},[288,75585,75418],{"class":2135},[288,75587,299],{"class":298},[288,75589,75452],{"class":403},[288,75591,75426],{"class":298},[288,75593,75429],{"class":357},[288,75595,75596,75598,75600,75602,75604,75606,75608,75610,75612,75614,75616,75618,75621,75623],{"class":290,"line":1904},[288,75597,73926],{"class":298},[288,75599,58420],{"class":2135},[288,75601,299],{"class":298},[288,75603,881],{"class":403},[288,75605,1263],{"class":294},[288,75607,75411],{"class":48150},[288,75609,75579],{"class":294},[288,75611,881],{"class":403},[288,75613,855],{"class":298},[288,75615,75418],{"class":2135},[288,75617,299],{"class":298},[288,75619,75620],{"class":403},"'二哈好傻'",[288,75622,75426],{"class":298},[288,75624,75625],{"class":357},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[288,75627,75628,75630,75632,75634,75636,75638,75640,75642,75644,75646,75648,75650,75653,75655],{"class":290,"line":1921},[288,75629,73926],{"class":298},[288,75631,58420],{"class":2135},[288,75633,299],{"class":298},[288,75635,881],{"class":403},[288,75637,1263],{"class":294},[288,75639,75411],{"class":48150},[288,75641,75579],{"class":294},[288,75643,881],{"class":403},[288,75645,855],{"class":298},[288,75647,75418],{"class":2135},[288,75649,299],{"class":298},[288,75651,75652],{"class":403},"'哈好哈'",[288,75654,75482],{"class":298},[288,75656,75657],{"class":357},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[288,75659,75660],{"class":290,"line":1926},[288,75661,2572],{"emptyLinePlaceholder":217},[288,75663,75664],{"class":290,"line":1931},[288,75665,75666],{"class":357},"    \u002F\u002F +类似于>=1\n",[288,75668,75669,75671,75673,75675,75677,75679,75681,75684,75686,75688,75690,75692,75694,75696],{"class":290,"line":1936},[288,75670,73926],{"class":298},[288,75672,58420],{"class":2135},[288,75674,299],{"class":298},[288,75676,881],{"class":403},[288,75678,1263],{"class":294},[288,75680,75411],{"class":48150},[288,75682,75683],{"class":294},"+$",[288,75685,881],{"class":403},[288,75687,855],{"class":298},[288,75689,75418],{"class":2135},[288,75691,299],{"class":298},[288,75693,75452],{"class":403},[288,75695,75426],{"class":298},[288,75697,75429],{"class":357},[288,75699,75700,75702,75704,75706,75708,75710,75712,75714,75716,75718,75720,75722,75724,75726],{"class":290,"line":1950},[288,75701,73926],{"class":298},[288,75703,58420],{"class":2135},[288,75705,299],{"class":298},[288,75707,881],{"class":403},[288,75709,1263],{"class":294},[288,75711,75411],{"class":48150},[288,75713,75683],{"class":294},[288,75715,881],{"class":403},[288,75717,855],{"class":298},[288,75719,75418],{"class":2135},[288,75721,299],{"class":298},[288,75723,75620],{"class":403},[288,75725,75426],{"class":298},[288,75727,75625],{"class":357},[288,75729,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754,75756],{"class":290,"line":1955},[288,75731,73926],{"class":298},[288,75733,58420],{"class":2135},[288,75735,299],{"class":298},[288,75737,881],{"class":403},[288,75739,1263],{"class":294},[288,75741,75411],{"class":48150},[288,75743,75683],{"class":294},[288,75745,881],{"class":403},[288,75747,855],{"class":298},[288,75749,75418],{"class":2135},[288,75751,299],{"class":298},[288,75753,75652],{"class":403},[288,75755,75482],{"class":298},[288,75757,75552],{"class":357},[288,75759,75760],{"class":290,"line":2749},[288,75761,2572],{"emptyLinePlaceholder":217},[288,75763,75764],{"class":290,"line":2763},[288,75765,75766],{"class":357},"    \u002F\u002F ?类似于0次或一次\n",[288,75768,75769,75771,75773,75775,75777,75779,75782,75784,75786,75788,75790,75792,75794,75796],{"class":290,"line":2771},[288,75770,73926],{"class":298},[288,75772,58420],{"class":2135},[288,75774,299],{"class":298},[288,75776,881],{"class":403},[288,75778,1263],{"class":294},[288,75780,75781],{"class":48150},"哈？",[288,75783,599],{"class":294},[288,75785,881],{"class":403},[288,75787,855],{"class":298},[288,75789,75418],{"class":2135},[288,75791,299],{"class":298},[288,75793,74401],{"class":403},[288,75795,75482],{"class":298},[288,75797,75429],{"class":357},[288,75799,75800,75802,75804,75806,75808,75810,75812,75815,75817,75819,75821,75823,75825,75827],{"class":290,"line":2776},[288,75801,73926],{"class":298},[288,75803,58420],{"class":2135},[288,75805,299],{"class":298},[288,75807,881],{"class":403},[288,75809,1263],{"class":294},[288,75811,75411],{"class":48150},[288,75813,75814],{"class":294},"?$",[288,75816,881],{"class":403},[288,75818,855],{"class":298},[288,75820,75418],{"class":2135},[288,75822,299],{"class":298},[288,75824,75452],{"class":403},[288,75826,75426],{"class":298},[288,75828,75552],{"class":357},[288,75830,75831,75833,75835,75837,75839,75841,75843,75845,75847,75849,75851,75853,75855,75857],{"class":290,"line":2782},[288,75832,73926],{"class":298},[288,75834,58420],{"class":2135},[288,75836,299],{"class":298},[288,75838,881],{"class":403},[288,75840,1263],{"class":294},[288,75842,75411],{"class":48150},[288,75844,75814],{"class":294},[288,75846,881],{"class":403},[288,75848,855],{"class":298},[288,75850,75418],{"class":2135},[288,75852,299],{"class":298},[288,75854,75620],{"class":403},[288,75856,75426],{"class":298},[288,75858,75625],{"class":357},[288,75860,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879,75881,75883,75885,75887],{"class":290,"line":2788},[288,75862,73926],{"class":298},[288,75864,58420],{"class":2135},[288,75866,299],{"class":298},[288,75868,881],{"class":403},[288,75870,1263],{"class":294},[288,75872,75411],{"class":48150},[288,75874,75814],{"class":294},[288,75876,881],{"class":403},[288,75878,855],{"class":298},[288,75880,75418],{"class":2135},[288,75882,299],{"class":298},[288,75884,75652],{"class":403},[288,75886,75426],{"class":298},[288,75888,75552],{"class":357},[288,75890,75891],{"class":290,"line":2793},[288,75892,2572],{"emptyLinePlaceholder":217},[288,75894,75895],{"class":290,"line":8121},[288,75896,75897],{"class":357},"    \u002F\u002F {n}写几，就必须出现几次\n",[288,75899,75900,75902,75904,75906,75908,75910,75912,75915,75917,75919,75921,75923,75926,75929],{"class":290,"line":8145},[288,75901,73926],{"class":298},[288,75903,58420],{"class":2135},[288,75905,299],{"class":298},[288,75907,881],{"class":403},[288,75909,1263],{"class":294},[288,75911,75411],{"class":48150},[288,75913,75914],{"class":294},"{4}$",[288,75916,881],{"class":403},[288,75918,855],{"class":298},[288,75920,75418],{"class":2135},[288,75922,299],{"class":298},[288,75924,75925],{"class":403},"'哈哈哈哈'",[288,75927,75928],{"class":298},")) ",[288,75930,75429],{"class":357},[288,75932,75933],{"class":290,"line":8150},[288,75934,2572],{"emptyLinePlaceholder":217},[288,75936,75937],{"class":290,"line":8156},[288,75938,75939],{"class":357},"    \u002F\u002F {n,}大于等于n次\n",[288,75941,75942,75944,75946,75948,75950,75952,75954,75957,75959,75961,75963,75965,75967,75969],{"class":290,"line":8183},[288,75943,73926],{"class":298},[288,75945,58420],{"class":2135},[288,75947,299],{"class":298},[288,75949,881],{"class":403},[288,75951,1263],{"class":294},[288,75953,75411],{"class":48150},[288,75955,75956],{"class":294},"{4,}$",[288,75958,881],{"class":403},[288,75960,855],{"class":298},[288,75962,75418],{"class":2135},[288,75964,299],{"class":298},[288,75966,75925],{"class":403},[288,75968,75928],{"class":298},[288,75970,75429],{"class":357},[288,75972,75973,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993,75995,75998,76000],{"class":290,"line":8188},[288,75974,73926],{"class":298},[288,75976,58420],{"class":2135},[288,75978,299],{"class":298},[288,75980,881],{"class":403},[288,75982,1263],{"class":294},[288,75984,75411],{"class":48150},[288,75986,75956],{"class":294},[288,75988,881],{"class":403},[288,75990,855],{"class":298},[288,75992,75418],{"class":2135},[288,75994,299],{"class":298},[288,75996,75997],{"class":403},"'哈哈哈哈哈'",[288,75999,75928],{"class":298},[288,76001,75429],{"class":357},[288,76003,76004],{"class":290,"line":8194},[288,76005,2572],{"emptyLinePlaceholder":217},[288,76007,76008],{"class":290,"line":8206},[288,76009,76010],{"class":357},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[288,76012,76013,76015,76017,76019,76021,76023,76025,76028,76030,76032,76034,76036,76038,76040],{"class":290,"line":8218},[288,76014,73926],{"class":298},[288,76016,58420],{"class":2135},[288,76018,299],{"class":298},[288,76020,881],{"class":403},[288,76022,1263],{"class":294},[288,76024,75411],{"class":48150},[288,76026,76027],{"class":294},"{4,6}$",[288,76029,881],{"class":403},[288,76031,855],{"class":298},[288,76033,75418],{"class":2135},[288,76035,299],{"class":298},[288,76037,75925],{"class":403},[288,76039,75928],{"class":298},[288,76041,75429],{"class":357},[288,76043,76044,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76068,76070],{"class":290,"line":8230},[288,76045,73926],{"class":298},[288,76047,58420],{"class":2135},[288,76049,299],{"class":298},[288,76051,881],{"class":403},[288,76053,1263],{"class":294},[288,76055,75411],{"class":48150},[288,76057,76027],{"class":294},[288,76059,881],{"class":403},[288,76061,855],{"class":298},[288,76063,75418],{"class":2135},[288,76065,299],{"class":298},[288,76067,75997],{"class":403},[288,76069,75928],{"class":298},[288,76071,75429],{"class":357},[288,76073,76074,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094,76096,76099,76101],{"class":290,"line":9889},[288,76075,73926],{"class":298},[288,76077,58420],{"class":2135},[288,76079,299],{"class":298},[288,76081,881],{"class":403},[288,76083,1263],{"class":294},[288,76085,75411],{"class":48150},[288,76087,76027],{"class":294},[288,76089,881],{"class":403},[288,76091,855],{"class":298},[288,76093,75418],{"class":2135},[288,76095,299],{"class":298},[288,76097,76098],{"class":403},"'哈哈哈哈哈哈哈'",[288,76100,75928],{"class":298},[288,76102,75552],{"class":357},[288,76104,76105],{"class":290,"line":9914},[288,76106,2572],{"emptyLinePlaceholder":217},[288,76108,76109],{"class":290,"line":9937},[288,76110,76111],{"class":357},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[288,76113,76114,76116,76118,76120,76122,76124,76127,76129,76131,76133,76135,76137,76140,76142],{"class":290,"line":9961},[288,76115,73926],{"class":298},[288,76117,58420],{"class":2135},[288,76119,299],{"class":298},[288,76121,881],{"class":403},[288,76123,1263],{"class":294},[288,76125,76126],{"class":347},"[abc]",[288,76128,599],{"class":294},[288,76130,881],{"class":403},[288,76132,855],{"class":298},[288,76134,75418],{"class":2135},[288,76136,299],{"class":298},[288,76138,76139],{"class":403},"'a'",[288,76141,75426],{"class":298},[288,76143,75429],{"class":357},[288,76145,76146,76148,76150,76152,76154,76156,76158,76160,76162,76164,76166,76168,76171,76173],{"class":290,"line":9966},[288,76147,73926],{"class":298},[288,76149,58420],{"class":2135},[288,76151,299],{"class":298},[288,76153,881],{"class":403},[288,76155,1263],{"class":294},[288,76157,76126],{"class":347},[288,76159,599],{"class":294},[288,76161,881],{"class":403},[288,76163,855],{"class":298},[288,76165,75418],{"class":2135},[288,76167,299],{"class":298},[288,76169,76170],{"class":403},"'b'",[288,76172,75426],{"class":298},[288,76174,75429],{"class":357},[288,76176,76177,76179,76181,76183,76185,76187,76189,76191,76193,76195,76197,76199,76202,76204],{"class":290,"line":9971},[288,76178,73926],{"class":298},[288,76180,58420],{"class":2135},[288,76182,299],{"class":298},[288,76184,881],{"class":403},[288,76186,1263],{"class":294},[288,76188,76126],{"class":347},[288,76190,599],{"class":294},[288,76192,881],{"class":403},[288,76194,855],{"class":298},[288,76196,75418],{"class":2135},[288,76198,299],{"class":298},[288,76200,76201],{"class":403},"'c'",[288,76203,75426],{"class":298},[288,76205,75429],{"class":357},[288,76207,76208,76210,76212,76214,76216,76218,76220,76222,76224,76226,76229,76231],{"class":290,"line":9976},[288,76209,73926],{"class":298},[288,76211,58420],{"class":2135},[288,76213,299],{"class":298},[288,76215,881],{"class":403},[288,76217,76126],{"class":347},[288,76219,881],{"class":403},[288,76221,855],{"class":298},[288,76223,75418],{"class":2135},[288,76225,299],{"class":298},[288,76227,76228],{"class":403},"'ab'",[288,76230,75426],{"class":298},[288,76232,75429],{"class":357},[288,76234,76235,76237,76239,76241,76243,76245,76247,76249,76251,76253,76255,76257,76259,76261],{"class":290,"line":9985},[288,76236,73926],{"class":298},[288,76238,58420],{"class":2135},[288,76240,299],{"class":298},[288,76242,881],{"class":403},[288,76244,1263],{"class":294},[288,76246,76126],{"class":347},[288,76248,599],{"class":294},[288,76250,881],{"class":403},[288,76252,855],{"class":298},[288,76254,75418],{"class":2135},[288,76256,299],{"class":298},[288,76258,76228],{"class":403},[288,76260,75426],{"class":298},[288,76262,76263],{"class":357},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[288,76265,76266,76268,76270,76272,76274,76276,76278,76281,76283,76285,76287,76289,76291,76293],{"class":290,"line":9990},[288,76267,73926],{"class":298},[288,76269,58420],{"class":2135},[288,76271,299],{"class":298},[288,76273,881],{"class":403},[288,76275,1263],{"class":294},[288,76277,76126],{"class":347},[288,76279,76280],{"class":294},"{2}$",[288,76282,881],{"class":403},[288,76284,855],{"class":298},[288,76286,75418],{"class":2135},[288,76288,299],{"class":298},[288,76290,76228],{"class":403},[288,76292,75426],{"class":298},[288,76294,76295],{"class":357},"\u002F\u002Ftrue   可以选两个\n",[288,76297,76298,76300,76302,76304,76306,76308,76311,76313,76315,76317,76319,76321,76324,76326],{"class":290,"line":9996},[288,76299,73926],{"class":298},[288,76301,58420],{"class":2135},[288,76303,299],{"class":298},[288,76305,881],{"class":403},[288,76307,1263],{"class":294},[288,76309,76310],{"class":347},"[a-z]",[288,76312,599],{"class":294},[288,76314,881],{"class":403},[288,76316,855],{"class":298},[288,76318,75418],{"class":2135},[288,76320,299],{"class":298},[288,76322,76323],{"class":403},"'p'",[288,76325,75482],{"class":298},[288,76327,76328],{"class":357},"\u002F\u002Ftrue   依然只能选一个\n",[288,76330,76331,76333,76335,76337,76339,76341,76344,76346,76348,76350,76352,76354,76356,76358],{"class":290,"line":10017},[288,76332,73926],{"class":298},[288,76334,58420],{"class":2135},[288,76336,299],{"class":298},[288,76338,881],{"class":403},[288,76340,1263],{"class":294},[288,76342,76343],{"class":347},"[A-Z]",[288,76345,599],{"class":294},[288,76347,881],{"class":403},[288,76349,855],{"class":298},[288,76351,75418],{"class":2135},[288,76353,299],{"class":298},[288,76355,76323],{"class":403},[288,76357,75482],{"class":298},[288,76359,75552],{"class":357},[288,76361,76362,76364,76366,76368,76370,76372,76374,76376,76378,76380,76382,76384,76387,76389],{"class":290,"line":10023},[288,76363,73926],{"class":298},[288,76365,58420],{"class":2135},[288,76367,299],{"class":298},[288,76369,881],{"class":403},[288,76371,1263],{"class":294},[288,76373,76343],{"class":347},[288,76375,599],{"class":294},[288,76377,881],{"class":403},[288,76379,855],{"class":298},[288,76381,75418],{"class":2135},[288,76383,299],{"class":298},[288,76385,76386],{"class":403},"'P'",[288,76388,75482],{"class":298},[288,76390,75429],{"class":357},[288,76392,76393,76395,76397,76399,76401,76403,76406,76408,76410,76412,76414,76416,76419,76421],{"class":290,"line":10037},[288,76394,73926],{"class":298},[288,76396,58420],{"class":2135},[288,76398,299],{"class":298},[288,76400,881],{"class":403},[288,76402,1263],{"class":294},[288,76404,76405],{"class":347},"[0-9]",[288,76407,599],{"class":294},[288,76409,881],{"class":403},[288,76411,855],{"class":298},[288,76413,75418],{"class":2135},[288,76415,299],{"class":298},[288,76417,76418],{"class":403},"'0'",[288,76420,75482],{"class":298},[288,76422,75429],{"class":357},[288,76424,76425,76427,76429,76431,76433,76435,76438,76440,76442,76444,76446,76448,76450,76452],{"class":290,"line":10043},[288,76426,73926],{"class":298},[288,76428,58420],{"class":2135},[288,76430,299],{"class":298},[288,76432,881],{"class":403},[288,76434,1263],{"class":294},[288,76436,76437],{"class":347},"[a-zA-Z0-9]",[288,76439,599],{"class":294},[288,76441,881],{"class":403},[288,76443,855],{"class":298},[288,76445,75418],{"class":2135},[288,76447,299],{"class":298},[288,76449,76323],{"class":403},[288,76451,75426],{"class":298},[288,76453,75429],{"class":357},[288,76455,76456,76458,76460],{"class":290,"line":10070},[288,76457,52590],{"class":298},[288,76459,51986],{"class":51473},[288,76461,51480],{"class":298},[288,76463,76464,76466,76468],{"class":290,"line":10079},[288,76465,51958],{"class":298},[288,76467,51973],{"class":51473},[288,76469,51480],{"class":298},[288,76471,76472],{"class":290,"line":10085},[288,76473,2572],{"emptyLinePlaceholder":217},[288,76475,76476,76478,76480],{"class":290,"line":10093},[288,76477,51958],{"class":298},[288,76479,50808],{"class":51473},[288,76481,51480],{"class":298},[22171,76483,76485],{"id":76484},"_3624-修饰符","3.6.2.4 修饰符",[19,76487,76488],{},[200,76489],{"alt":205,"src":76490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76492,76493],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76495,76496],{},[200,76497],{"alt":205,"src":76498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[280,76500,76502],{"className":50806,"code":76501,"language":50808,"meta":205,"style":205},"\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",[25,76503,76504,76514,76528,76536,76550,76570,76582,76590,76598,76606,76638,76669,76674,76706,76717,76750,76759,76767,76775],{"__ignoreMap":205},[288,76505,76506,76508,76510,76512],{"class":290,"line":291},[288,76507,51470],{"class":298},[288,76509,51474],{"class":51473},[288,76511,51477],{"class":2135},[288,76513,51480],{"class":298},[288,76515,76516,76518,76520,76522,76524,76526],{"class":290,"line":206},[288,76517,1207],{"class":298},[288,76519,50808],{"class":51473},[288,76521,51489],{"class":2135},[288,76523,344],{"class":298},[288,76525,51494],{"class":403},[288,76527,51480],{"class":298},[288,76529,76530,76532,76534],{"class":290,"line":1352},[288,76531,1207],{"class":298},[288,76533,51507],{"class":51473},[288,76535,51480],{"class":298},[288,76537,76538,76540,76542,76544,76546,76548],{"class":290,"line":1367},[288,76539,52317],{"class":298},[288,76541,51517],{"class":51473},[288,76543,51520],{"class":2135},[288,76545,344],{"class":298},[288,76547,51525],{"class":403},[288,76549,51480],{"class":298},[288,76551,76552,76554,76556,76558,76560,76562,76564,76566,76568],{"class":290,"line":1373},[288,76553,52317],{"class":298},[288,76555,51517],{"class":51473},[288,76557,15093],{"class":2135},[288,76559,344],{"class":298},[288,76561,51564],{"class":403},[288,76563,51544],{"class":2135},[288,76565,344],{"class":298},[288,76567,51571],{"class":403},[288,76569,51480],{"class":298},[288,76571,76572,76574,76576,76578,76580],{"class":290,"line":1387},[288,76573,52317],{"class":298},[288,76575,51580],{"class":51473},[288,76577,51583],{"class":298},[288,76579,51580],{"class":51473},[288,76581,51480],{"class":298},[288,76583,76584,76586,76588],{"class":290,"line":1393},[288,76585,51958],{"class":298},[288,76587,51507],{"class":51473},[288,76589,51480],{"class":298},[288,76591,76592,76594,76596],{"class":290,"line":1484},[288,76593,1207],{"class":298},[288,76595,51973],{"class":51473},[288,76597,51480],{"class":298},[288,76599,76600,76602,76604],{"class":290,"line":1490},[288,76601,52317],{"class":298},[288,76603,51986],{"class":51473},[288,76605,51480],{"class":298},[288,76607,76608,76610,76612,76614,76616,76618,76621,76623,76625,76627,76629,76631,76634,76636],{"class":290,"line":1502},[288,76609,73926],{"class":298},[288,76611,58420],{"class":2135},[288,76613,299],{"class":298},[288,76615,881],{"class":403},[288,76617,1263],{"class":294},[288,76619,76620],{"class":48150},"java",[288,76622,599],{"class":294},[288,76624,881],{"class":403},[288,76626,855],{"class":298},[288,76628,75418],{"class":2135},[288,76630,299],{"class":298},[288,76632,76633],{"class":403},"'java'",[288,76635,75928],{"class":298},[288,76637,75429],{"class":357},[288,76639,76640,76642,76644,76646,76648,76650,76652,76654,76656,76658,76660,76662,76665,76667],{"class":290,"line":1784},[288,76641,73926],{"class":298},[288,76643,58420],{"class":2135},[288,76645,299],{"class":298},[288,76647,881],{"class":403},[288,76649,1263],{"class":294},[288,76651,76620],{"class":48150},[288,76653,599],{"class":294},[288,76655,881],{"class":403},[288,76657,855],{"class":298},[288,76659,75418],{"class":2135},[288,76661,299],{"class":298},[288,76663,76664],{"class":403},"'Java'",[288,76666,75928],{"class":298},[288,76668,75552],{"class":357},[288,76670,76671],{"class":290,"line":1789},[288,76672,76673],{"class":357},"    \u002F\u002F 不区分大小写、\n",[288,76675,76676,76678,76680,76682,76684,76686,76688,76690,76692,76694,76696,76698,76700,76702,76704],{"class":290,"line":1795},[288,76677,73926],{"class":298},[288,76679,58420],{"class":2135},[288,76681,299],{"class":298},[288,76683,881],{"class":403},[288,76685,1263],{"class":294},[288,76687,76620],{"class":48150},[288,76689,599],{"class":294},[288,76691,881],{"class":403},[288,76693,738],{"class":294},[288,76695,855],{"class":298},[288,76697,75418],{"class":2135},[288,76699,299],{"class":298},[288,76701,76664],{"class":403},[288,76703,75928],{"class":298},[288,76705,75429],{"class":357},[288,76707,76708,76710,76712,76714],{"class":290,"line":1800},[288,76709,11394],{"class":294},[288,76711,74092],{"class":347},[288,76713,13737],{"class":294},[288,76715,76716],{"class":403}," 'java是一门编程语言，学完java工资很高'\n",[288,76718,76719,76721,76724,76726,76729,76732,76734,76736,76738,76740,76743,76745,76748],{"class":290,"line":1814},[288,76720,11394],{"class":294},[288,76722,76723],{"class":347}," result",[288,76725,13737],{"class":294},[288,76727,76728],{"class":298}," str.",[288,76730,76731],{"class":2135},"replace",[288,76733,299],{"class":298},[288,76735,881],{"class":403},[288,76737,76620],{"class":48150},[288,76739,881],{"class":403},[288,76741,76742],{"class":294},"ig",[288,76744,12608],{"class":298},[288,76746,76747],{"class":403},"'前端'",[288,76749,305],{"class":298},[288,76751,76752,76754,76756],{"class":290,"line":1819},[288,76753,73926],{"class":298},[288,76755,58420],{"class":2135},[288,76757,76758],{"class":298},"(result)\n",[288,76760,76761,76763,76765],{"class":290,"line":1825},[288,76762,52590],{"class":298},[288,76764,51986],{"class":51473},[288,76766,51480],{"class":298},[288,76768,76769,76771,76773],{"class":290,"line":1846},[288,76770,51958],{"class":298},[288,76772,51973],{"class":51473},[288,76774,51480],{"class":298},[288,76776,76777,76779,76781],{"class":290,"line":1851},[288,76778,51958],{"class":298},[288,76780,50808],{"class":51473},[288,76782,51480],{"class":298},[5299,76784,76785],{},"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":205,"searchDepth":206,"depth":206,"links":76787},[76788,76798,76810,76827,76834,76842],{"id":53533,"depth":206,"text":53534,"children":76789},[76790,76791,76792,76793,76794,76795,76796,76797],{"id":53537,"depth":1352,"text":53538},{"id":53570,"depth":1352,"text":53571},{"id":53609,"depth":1352,"text":53610},{"id":53767,"depth":1352,"text":53768},{"id":53815,"depth":1352,"text":53816},{"id":53952,"depth":1352,"text":53953},{"id":54274,"depth":1352,"text":54275},{"id":57262,"depth":1352,"text":57263},{"id":57290,"depth":206,"text":57291,"children":76799},[76800,76801,76802,76803,76804,76805,76806,76807,76808,76809],{"id":57294,"depth":1352,"text":57295},{"id":57317,"depth":1352,"text":57318},{"id":58232,"depth":1352,"text":58233},{"id":58922,"depth":1352,"text":58923},{"id":59204,"depth":1352,"text":59205},{"id":63365,"depth":1352,"text":63366},{"id":63535,"depth":1352,"text":63536},{"id":63663,"depth":1352,"text":63664},{"id":63688,"depth":1352,"text":63689},{"id":65077,"depth":1352,"text":65078},{"id":66230,"depth":206,"text":66231,"children":76811},[76812,76813,76814,76815,76816,76817,76818,76819,76820,76821,76822,76823,76824,76825,76826],{"id":66234,"depth":1352,"text":66235},{"id":66888,"depth":1352,"text":66889},{"id":68583,"depth":1352,"text":68584},{"id":68624,"depth":1352,"text":68625},{"id":68666,"depth":1352,"text":68667},{"id":68680,"depth":1352,"text":68681},{"id":68729,"depth":1352,"text":68730},{"id":68741,"depth":1352,"text":68742},{"id":68756,"depth":1352,"text":68757},{"id":68792,"depth":1352,"text":68793},{"id":68873,"depth":1352,"text":68874},{"id":69001,"depth":1352,"text":69002},{"id":69013,"depth":1352,"text":69014},{"id":69032,"depth":1352,"text":69033},{"id":71143,"depth":1352,"text":71144},{"id":71162,"depth":206,"text":71163,"children":76828},[76829,76830,76831,76832,76833],{"id":71183,"depth":1352,"text":71184},{"id":71203,"depth":1352,"text":71204},{"id":71252,"depth":1352,"text":71253},{"id":71377,"depth":1352,"text":71378},{"id":71558,"depth":1352,"text":71559},{"id":71576,"depth":206,"text":71577,"children":76835},[76836,76837,76838,76839,76840,76841],{"id":71591,"depth":1352,"text":71592},{"id":71650,"depth":1352,"text":71651},{"id":71674,"depth":1352,"text":71675},{"id":71994,"depth":1352,"text":71995},{"id":72026,"depth":1352,"text":72027},{"id":72049,"depth":1352,"text":72050},{"id":75117,"depth":206,"text":75118,"children":76843},[76844,76845],{"id":75151,"depth":1352,"text":75152},{"id":75190,"depth":1352,"text":75191},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53505,"description":214},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76852,"title":76853,"body":76854,"description":214,"extension":215,"meta":92991,"navigation":217,"path":92992,"seo":92993,"stem":92994,"__hash__":92995},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76855,"toc":92927},[76856,76859,76862,76866,76870,76875,76880,76891,76895,76900,76903,76907,76910,76915,76919,76923,76926,76931,76934,76938,76941,76949,76952,76956,76961,76966,76969,76973,76978,76983,76986,76990,76995,76998,77003,77006,77011,77014,77019,77024,77027,77030,77034,77039,77044,77047,77051,77055,77058,77061,77064,77068,77072,77077,77082,77085,77089,77094,77099,77102,77105,77108,77111,77114,77117,77120,77123,77126,77131,77135,77140,77145,77148,77151,77154,77157,77160,77163,77166,77169,77173,77177,77180,77183,77186,77191,77193,77196,77199,77202,77205,77208,77211,77214,77217,77220,77223,77226,77229,77232,77237,77242,77247,77250,77254,77257,77262,77266,77268,77279,77284,77385,77388,77391,77394,77397,77400,77403,77406,77409,77411,77414,77417,77420,77423,77426,77428,77431,77434,77437,77440,77443,77446,77448,77451,77453,77455,77458,77462,77466,77469,77472,77475,77478,77481,77484,77487,77490,77493,77498,77618,77621,77624,77629,77632,77635,77638,77641,77646,77649,77652,77655,77658,77663,77666,77766,77831,77905,77909,77912,77915,77919,77922,77936,77965,77968,77971,77974,77977,77980,77983,77986,77988,77991,77994,77997,78000,78004,78009,78013,78018,78093,78096,78279,78282,78285,78288,78291,78294,78296,78299,78302,78305,78308,78311,78314,78316,78320,78323,78328,78331,78334,78337,78340,78342,78347,78350,78353,78356,78359,78361,78366,78369,78372,78374,78376,78379,78383,78386,78389,78394,78397,78400,78403,78453,78458,78462,78467,78470,78539,78542,78551,78555,78560,78563,78566,78574,78577,78594,80396,80400,80404,80409,80412,80416,80422,80428,80580,80585,80590,80593,80596,80599,80602,80605,80608,80611,80614,80617,80620,80623,80626,80631,80635,80638,80649,80653,80658,80661,80664,80667,80670,80673,80675,80678,80681,80684,80687,80689,80706,80709,80713,80716,80721,80726,80729,80732,80736,80739,80742,80751,80754,80758,80761,80766,80771,80838,80842,80845,80848,80853,80858,80944,80949,80953,80956,80959,80974,80977,80982,80986,80991,81100,81103,81114,81264,81268,81273,81382,81386,81391,81396,81401,81404,81411,81431,81467,81631,81636,81639,81644,81651,81654,81657,81660,81719,81775,81831,81835,81840,82155,82158,82162,82165,82170,82279,82284,82288,82293,82297,82368,82372,82374,82377,82380,82418,82694,82698,82715,82781,82815,82819,82822,82827,82856,82863,82872,82877,82892,82897,82906,82909,83046,83050,83112,83116,83121,83366,83370,83375,83378,83381,83384,83387,83391,83396,84977,84981,84985,84991,84994,84999,85003,85006,85011,85014,85025,85029,85034,85038,85043,85048,85051,85056,85060,85064,85067,85072,85077,85080,85083,85086,85208,85213,85315,85318,85321,85325,85330,85502,85507,85511,85514,85519,85585,85590,85593,85724,85727,85732,85735,85738,85829,85834,85837,85840,85843,85846,85851,85856,85859,85864,85869,85874,85878,85881,85884,85889,85894,85899,85904,85958,85961,85964,85969,85972,85975,85980,85985,85990,85994,85999,86013,86018,86021,86026,86030,86035,86040,86045,86050,86055,86060,86065,86070,86073,86077,86082,86085,86088,86091,86096,86101,86104,86107,86111,86114,86117,86122,86127,86132,86137,86140,86145,86150,86211,86216,86219,86224,87465,87470,87474,87478,87483,87486,87491,87496,87499,87504,87506,87511,87515,87518,87521,87532,87536,87541,87546,87601,87606,87611,87616,87827,87832,87836,87841,87844,87846,87849,87852,88299,88304,88311,88317,88320,88323,88587,88592,88596,88861,88866,88870,88875,88880,88885,88890,89221,89224,89229,89234,89237,89241,89245,89250,89255,89260,89265,89270,89275,89279,89282,89287,89292,89295,89369,89374,89379,89384,89386,89389,89759,89764,89769,89774,89777,89780,89882,89887,89892,89995,89999,90004,90008,90012,90017,90022,90025,90030,90033,90036,90429,90434,90437,90440,90443,90446,90966,90970,90975,90980,90985,90988,90993,90996,90999,91381,91386,91388,91390,91393,91396,91908,91912,91973,91976,91979,91982,91986,91989,91994,91999,92924],[10,76857,76853],{"id":76858},"_4js进阶",[19,76860,76861],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76863,76865],{"id":76864},"_41-作用域","4.1 作用域",[260,76867,76869],{"id":76868},"_411-局部作用域","4.1.1 局部作用域",[19,76871,76872],{},[200,76873],{"alt":205,"src":76874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76876,76877],{},[200,76878],{"alt":205,"src":76879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1304,76881,76882,76885,76888],{},[246,76883,76884],{},"函数作用域在函数内部",[246,76886,76887],{},"块级作用域在{}",[246,76889,76890],{},"对象的那个{}不是作用域，不是块作用域",[260,76892,76894],{"id":76893},"_412-全局作用域","4.1.2 全局作用域",[19,76896,76897],{},[200,76898],{"alt":205,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76901,76902],{},"window.a=10不要这样写",[260,76904,76906],{"id":76905},"_413-作用域链","4.1.3 作用域链",[19,76908,76909],{},"变量查找机制",[19,76911,76912],{},[200,76913],{"alt":205,"src":76914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76916,76918],{"id":76917},"_42-垃圾回收机制","4.2 垃圾回收机制",[260,76920,76922],{"id":76921},"_421-大体介绍","4.2.1 大体介绍",[19,76924,76925],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76927,76928],{},[200,76929],{"alt":205,"src":76930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76932,76933],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[260,76935,76937],{"id":76936},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76939,76940],{},"堆栈空间分配区别：",[243,76942,76943,76946],{},[246,76944,76945],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[246,76947,76948],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76950,76951],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22171,76953,76955],{"id":76954},"_4221-引用计数","4.2.2.1 引用计数",[19,76957,76958],{},[200,76959],{"alt":205,"src":76960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76962,76963],{},[200,76964],{"alt":205,"src":76965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76967,76968],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22171,76970,76972],{"id":76971},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76974,76975],{},[200,76976],{"alt":205,"src":76977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76979,76980],{},[200,76981],{"alt":205,"src":76982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76984,76985],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76987,76989],{"id":76988},"_43-闭包","4.3 闭包",[19,76991,76992],{},[200,76993],{"alt":205,"src":76994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76996,76997],{},"闭包：内层函数+外层函数的变量",[19,76999,77000],{},[200,77001],{"alt":205,"src":77002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77004,77005],{},"closure就是闭包",[19,77007,77008],{},[200,77009],{"alt":205,"src":77010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77012,77013],{},"内层函数必须包含外层函数的变量才是闭包",[19,77015,77016],{},[200,77017],{"alt":205,"src":77018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77020,77021],{},[200,77022],{"alt":205,"src":77023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77025,77026],{},"闭包可能会引起内存泄漏",[19,77028,77029],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77031,77033],{"id":77032},"_44-变量提升","4.4 变量提升",[19,77035,77036],{},[200,77037],{"alt":205,"src":77038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77040,77041],{},[200,77042],{"alt":205,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77045,77046],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77048,77050],{"id":77049},"_45-函数进阶","4.5 函数进阶",[260,77052,77054],{"id":77053},"_451-函数提升","4.5.1 函数提升",[19,77056,77057],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77059,77060],{},"只提升函数声明，不提升函数调用",[51986,77062,77063],{},"\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",[260,77065,77067],{"id":77066},"_452-函数参数","4.5.2 函数参数",[22171,77069,77071],{"id":77070},"_4521-动态参数","4.5.2.1 动态参数",[19,77073,77074],{},[200,77075],{"alt":205,"src":77076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77078,77079],{},[200,77080],{"alt":205,"src":77081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77083,77084],{},"箭头函数里边没有arguments",[22171,77086,77088],{"id":77087},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77090,77091],{},[200,77092],{"alt":205,"src":77093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77095,77096],{},[200,77097],{"alt":205,"src":77098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77100,77101],{},"剩余参数使用的时候不需要写...",[19,77103,77104],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77106,77107],{},"  function getSum(a,b,...arr) {",[19,77109,77110],{},"  console.log(11)",[19,77112,77113],{},"  }",[19,77115,77116],{},"  getSum(1,2,3,4)",[19,77118,77119],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77121,77122],{},"  getSum(1,2)",[19,77124,77125],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77127,77128],{},[200,77129],{"alt":205,"src":77130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22171,77132,77134],{"id":77133},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77136,77137],{},[200,77138],{"alt":205,"src":77139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77141,77142],{},[200,77143],{"alt":205,"src":77144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77146,77147],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77149,77150],{},"展开运算符可以用于数组之间的合并：",[19,77152,77153],{},"const arr1 = [1, 2, 3]",[19,77155,77156],{},"const arr2 = [3, 4, 5]",[19,77158,77159],{},"const arr = [...arr1, ...arr2]",[19,77161,77162],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77164,77165],{},"剩余参数：函数参数使用，得到真数组",[19,77167,77168],{},"展开运算符：数组中使用，数组展开",[260,77170,77172],{"id":77171},"_453-箭头函数","4.5.3 箭头函数",[22171,77174,77176],{"id":77175},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77178,77179],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77181,77182],{},"它不是万能的！！！",[19,77184,77185],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77187,77188],{},[200,77189],{"alt":205,"src":77190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77192,328],{},[19,77194,77195],{},"① 只有一个形参的时候，可以省略小括号：",[19,77197,77198],{},"const fn=x=>{console.log(x)}",[19,77200,77201],{},"② 只有一行代码时可以省略大括号：",[19,77203,77204],{},"const fn=x=>console.log(11)",[19,77206,77207],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77209,77210],{},"const fn=x=>x+x",[19,77212,77213],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77215,77216],{},"⑤ 阻止表单默认提交：",[19,77218,77219],{},"const form = document.querySelector('form')",[19,77221,77222],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77224,77225],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77227,77228],{},"const fn=uname=>({uname:uname})",[19,77230,77231],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77233,77234],{},[200,77235],{"alt":205,"src":77236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77238,77239],{},[200,77240],{"alt":205,"src":77241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77243,77244],{},[200,77245],{"alt":205,"src":77246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77248,77249],{},"一定不要忘记用()，有()就理解为自带return",[22171,77251,77253],{"id":77252},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77255,77256],{},"箭头函数是没有动态参数的arguments",[19,77258,77259],{},[200,77260],{"alt":205,"src":77261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22171,77263,77265],{"id":77264},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77267,11505],{},[243,77269,77270,77273,77276],{},[246,77271,77272],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[246,77274,77275],{},"事件回调函数使用箭头函数时，this 为全局的 window",[246,77277,77278],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77280,77281],{},[200,77282],{"alt":205,"src":77283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[280,77285,77287],{"className":53240,"code":77286,"language":53242,"meta":205,"style":205},"  \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",[25,77288,77289,77297,77302,77307,77312,77317,77322,77326,77331,77335,77339,77344,77349,77354,77358,77362,77367,77372,77377],{"__ignoreMap":205},[288,77290,77291,77293,77295],{"class":290,"line":291},[288,77292,52317],{"class":298},[288,77294,51986],{"class":51473},[288,77296,51480],{"class":298},[288,77298,77299],{"class":290,"line":206},[288,77300,77301],{"class":298},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[288,77303,77304],{"class":290,"line":1352},[288,77305,77306],{"class":298},"    console.log(this) \u002F\u002F指向window\n",[288,77308,77309],{"class":290,"line":1367},[288,77310,77311],{"class":298},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[288,77313,77314],{"class":290,"line":1373},[288,77315,77316],{"class":298},"    function fn() {\n",[288,77318,77319],{"class":290,"line":1387},[288,77320,77321],{"class":298},"      console.log(this)  \u002F\u002F指向window\n",[288,77323,77324],{"class":290,"line":1393},[288,77325,2359],{"class":298},[288,77327,77328],{"class":290,"line":1484},[288,77329,77330],{"class":298},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[288,77332,77333],{"class":290,"line":1490},[288,77334,2572],{"emptyLinePlaceholder":217},[288,77336,77337],{"class":290,"line":1502},[288,77338,71696],{"class":298},[288,77340,77341],{"class":290,"line":1784},[288,77342,77343],{"class":298},"      name: 'andy',\n",[288,77345,77346],{"class":290,"line":1789},[288,77347,77348],{"class":298},"      sayHai: function () {\n",[288,77350,77351],{"class":290,"line":1795},[288,77352,77353],{"class":298},"        console.log(this)\n",[288,77355,77356],{"class":290,"line":1800},[288,77357,52571],{"class":298},[288,77359,77360],{"class":290,"line":1814},[288,77361,2359],{"class":298},[288,77363,77364],{"class":290,"line":1819},[288,77365,77366],{"class":298},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[288,77368,77369],{"class":290,"line":1825},[288,77370,77371],{"class":298},"    \u002F\u002F 2.箭头函数的this\n",[288,77373,77374],{"class":290,"line":1846},[288,77375,77376],{"class":298},"    const fn = () => console.log(this)\n",[288,77378,77379,77381,77383],{"class":290,"line":1851},[288,77380,52590],{"class":298},[288,77382,51986],{"class":51473},[288,77384,51480],{"class":298},[19,77386,77387],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77389,77390],{},"const fn = () => console.log(this)",[19,77392,77393],{},"fn() \u002F\u002F指向window",[19,77395,77396],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77398,77399],{},"①",[19,77401,77402],{},"const obj = {",[19,77404,77405],{},"uname: 'pink老师',",[19,77407,77408],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77410,1243],{},[19,77412,77413],{},"调用对象里边的函数",[19,77415,77416],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77418,77419],{},"obj.sayHai()",[19,77421,77422],{},"②",[19,77424,77425],{},"const obj1 = {",[19,77427,77405],{},[19,77429,77430],{},"sayHai: function () {",[19,77432,77433],{},"let i = 10",[19,77435,77436],{},"const count = () => {",[19,77438,77439],{},"console.log(this)",[19,77441,77442],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77444,77445],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77447,1243],{},[19,77449,77450],{},"count()",[19,77452,1243],{},[19,77454,1243],{},[19,77456,77457],{},"obj1.sayHai()",[14,77459,77461],{"id":77460},"_46-解构赋值","4.6 解构赋值",[260,77463,77465],{"id":77464},"_461-数组解构","4.6.1 数组解构",[19,77467,77468],{},"以前要是使用数组中的值的话：",[19,77470,77471],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77473,77474],{},"const arr=[100,60,80]",[19,77476,77477],{},"const max=arr[0]",[19,77479,77480],{},"const min=arr[1]",[19,77482,77483],{},"const avg=arr[2]",[19,77485,77486],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77488,77489],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77491,77492],{},"这个写法就类似于上边的那种用很多const的方法",[19,77494,77495],{},[200,77496],{"alt":205,"src":77497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[280,77499,77501],{"className":50806,"code":77500,"language":50808,"meta":205,"style":205},"①变量之间交换值:\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",[25,77502,77503,77508,77513,77518,77523,77528,77532,77536,77541,77545,77550,77555,77559,77564,77569,77580,77590,77595,77600,77605,77609,77613],{"__ignoreMap":205},[288,77504,77505],{"class":290,"line":291},[288,77506,77507],{"class":298},"①变量之间交换值:\n",[288,77509,77510],{"class":290,"line":206},[288,77511,77512],{"class":298},"let a=1\n",[288,77514,77515],{"class":290,"line":1352},[288,77516,77517],{"class":298},"let b=2;\n",[288,77519,77520],{"class":290,"line":1367},[288,77521,77522],{"class":298},"必须加这行代码，不然就会报错\n",[288,77524,77525],{"class":290,"line":1373},[288,77526,77527],{"class":298},"[b,a]=[a,b]\n",[288,77529,77530],{"class":290,"line":1387},[288,77531,2572],{"emptyLinePlaceholder":217},[288,77533,77534],{"class":290,"line":1393},[288,77535,2572],{"emptyLinePlaceholder":217},[288,77537,77538],{"class":290,"line":1484},[288,77539,77540],{"class":298},"可以写成下面的方式：\n",[288,77542,77543],{"class":290,"line":1490},[288,77544,77512],{"class":298},[288,77546,77547],{"class":290,"line":1502},[288,77548,77549],{"class":298},"let b=2\n",[288,77551,77552],{"class":290,"line":1784},[288,77553,77554],{"class":298},";[b,a]=[a,b]\n",[288,77556,77557],{"class":290,"line":1789},[288,77558,2572],{"emptyLinePlaceholder":217},[288,77560,77561],{"class":290,"line":1795},[288,77562,77563],{"class":298},"②排序\n",[288,77565,77566],{"class":290,"line":1800},[288,77567,77568],{"class":298},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[288,77570,77571,77574,77577],{"class":290,"line":1814},[288,77572,77573],{"class":298},"for (let i = 0; i ",[288,77575,1207],{"class":77576},"s7hpK",[288,77578,77579],{"class":298}," arr1.length; i++) {\n",[288,77581,77582,77585,77587],{"class":290,"line":1819},[288,77583,77584],{"class":298},"   for (let j = 0; j ",[288,77586,1207],{"class":77576},[288,77588,77589],{"class":298}," arr1.length - 1; j++) {\n",[288,77591,77592],{"class":290,"line":1825},[288,77593,77594],{"class":298},"      if (arr1[j] > arr1[j + 1]) {\n",[288,77596,77597],{"class":290,"line":1846},[288,77598,77599],{"class":298},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[288,77601,77602],{"class":290,"line":1851},[288,77603,77604],{"class":298},"       }\n",[288,77606,77607],{"class":290,"line":1865},[288,77608,4481],{"class":298},[288,77610,77611],{"class":290,"line":1870},[288,77612,1737],{"class":298},[288,77614,77615],{"class":290,"line":1899},[288,77616,77617],{"class":298},"console.log(arr1)\n",[19,77619,77620],{},"数组解构的细节：",[19,77622,77623],{},"①变量多，单元值少",[19,77625,77626],{},[200,77627],{"alt":205,"src":77628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77630,77631],{},"防止出现undefined的方法：",[19,77633,77634],{},"const [a=0,b=0] =[1]",[19,77636,77637],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77639,77640],{},"②变量少，单元值多",[19,77642,77643],{},[200,77644],{"alt":205,"src":77645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77647,77648],{},"此时可以使用剩余参数来接收多余的值",[19,77650,77651],{},"const [a,b,...c]=[1,2,3,4]",[19,77653,77654],{},"console.log(c) 输出[3,4]",[19,77656,77657],{},"③可以按需导入，忽略某些返回值",[19,77659,77660],{},[200,77661],{"alt":205,"src":77662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77664,77665],{},"④支持多维数组的结构",[280,77667,77671],{"className":77668,"code":77669,"language":77670,"meta":205,"style":205},"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",[25,77672,77673,77701,77717,77732,77747],{"__ignoreMap":205},[288,77674,77675,77677,77679,77681,77683,77685,77687,77689,77692,77694,77696,77698],{"class":290,"line":291},[288,77676,6965],{"class":294},[288,77678,52006],{"class":298},[288,77680,344],{"class":294},[288,77682,52399],{"class":298},[288,77684,516],{"class":347},[288,77686,12608],{"class":298},[288,77688,376],{"class":347},[288,77690,77691],{"class":298},", [",[288,77693,370],{"class":347},[288,77695,12608],{"class":298},[288,77697,590],{"class":347},[288,77699,77700],{"class":298},"]]\n",[288,77702,77703,77706,77708,77710,77712,77714],{"class":290,"line":206},[288,77704,77705],{"class":298},"console.",[288,77707,58420],{"class":2135},[288,77709,4023],{"class":298},[288,77711,490],{"class":347},[288,77713,4388],{"class":298},[288,77715,77716],{"class":357},"  \u002F\u002F1\n",[288,77718,77719,77721,77723,77725,77727,77729],{"class":290,"line":1352},[288,77720,77705],{"class":298},[288,77722,58420],{"class":2135},[288,77724,4023],{"class":298},[288,77726,516],{"class":347},[288,77728,4388],{"class":298},[288,77730,77731],{"class":357},"  \u002F\u002F2\n",[288,77733,77734,77736,77738,77740,77742,77744],{"class":290,"line":1367},[288,77735,77705],{"class":298},[288,77737,58420],{"class":2135},[288,77739,4023],{"class":298},[288,77741,376],{"class":347},[288,77743,4388],{"class":298},[288,77745,77746],{"class":357},"  \u002F\u002F[3,4]\n",[288,77748,77749,77751,77753,77755,77757,77759,77761,77763],{"class":290,"line":1373},[288,77750,77705],{"class":298},[288,77752,58420],{"class":2135},[288,77754,4023],{"class":298},[288,77756,376],{"class":347},[288,77758,5073],{"class":298},[288,77760,490],{"class":347},[288,77762,4388],{"class":298},[288,77764,77765],{"class":357},"  \u002F\u002F3\n",[280,77767,77769],{"className":77668,"code":77768,"language":77670,"meta":205,"style":205},"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",[25,77770,77771,77798,77809,77820],{"__ignoreMap":205},[288,77772,77773,77775,77778,77780,77782,77784,77786,77788,77790,77792,77794,77796],{"class":290,"line":291},[288,77774,6965],{"class":294},[288,77776,77777],{"class":298}," [a, b, c] ",[288,77779,344],{"class":294},[288,77781,52399],{"class":298},[288,77783,516],{"class":347},[288,77785,12608],{"class":298},[288,77787,376],{"class":347},[288,77789,77691],{"class":298},[288,77791,370],{"class":347},[288,77793,12608],{"class":298},[288,77795,590],{"class":347},[288,77797,77700],{"class":298},[288,77799,77800,77802,77804,77807],{"class":290,"line":206},[288,77801,77705],{"class":298},[288,77803,58420],{"class":2135},[288,77805,77806],{"class":298},"(a)",[288,77808,77716],{"class":357},[288,77810,77811,77813,77815,77818],{"class":290,"line":1352},[288,77812,77705],{"class":298},[288,77814,58420],{"class":2135},[288,77816,77817],{"class":298},"(b)",[288,77819,77731],{"class":357},[288,77821,77822,77824,77826,77829],{"class":290,"line":1367},[288,77823,77705],{"class":298},[288,77825,58420],{"class":2135},[288,77827,77828],{"class":298},"(c)",[288,77830,77746],{"class":357},[280,77832,77834],{"className":77668,"code":77833,"language":77670,"meta":205,"style":205},"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",[25,77835,77836,77863,77873,77883,77893],{"__ignoreMap":205},[288,77837,77838,77840,77843,77845,77847,77849,77851,77853,77855,77857,77859,77861],{"class":290,"line":291},[288,77839,6965],{"class":294},[288,77841,77842],{"class":298}," [a, b, [c, d]] ",[288,77844,344],{"class":294},[288,77846,52399],{"class":298},[288,77848,516],{"class":347},[288,77850,12608],{"class":298},[288,77852,376],{"class":347},[288,77854,77691],{"class":298},[288,77856,370],{"class":347},[288,77858,12608],{"class":298},[288,77860,590],{"class":347},[288,77862,77700],{"class":298},[288,77864,77865,77867,77869,77871],{"class":290,"line":206},[288,77866,77705],{"class":298},[288,77868,58420],{"class":2135},[288,77870,77806],{"class":298},[288,77872,77716],{"class":357},[288,77874,77875,77877,77879,77881],{"class":290,"line":1352},[288,77876,77705],{"class":298},[288,77878,58420],{"class":2135},[288,77880,77817],{"class":298},[288,77882,77731],{"class":357},[288,77884,77885,77887,77889,77891],{"class":290,"line":1367},[288,77886,77705],{"class":298},[288,77888,58420],{"class":2135},[288,77890,77828],{"class":298},[288,77892,77765],{"class":357},[288,77894,77895,77897,77899,77902],{"class":290,"line":1373},[288,77896,77705],{"class":298},[288,77898,58420],{"class":2135},[288,77900,77901],{"class":298},"(d)",[288,77903,77904],{"class":357},"  \u002F\u002F4\n",[260,77906,77908],{"id":77907},"_462-对象解构","4.6.2 对象解构",[19,77910,77911],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77913,77914],{},"用的非常非常多！！！！！！",[22171,77916,77918],{"id":77917},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77920,77921],{},"基本语法：",[243,77923,77924,77927,77930,77933],{},[246,77925,77926],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[246,77928,77929],{},"对象属性的值将被赋值给与属性名相同的变量",[246,77931,77932],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[246,77934,77935],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[280,77937,77939],{"className":50806,"code":77938,"language":50808,"meta":205,"style":205},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[25,77940,77941,77946,77951,77956,77960],{"__ignoreMap":205},[288,77942,77943],{"class":290,"line":291},[288,77944,77945],{"class":298},"const obj = {\n",[288,77947,77948],{"class":290,"line":206},[288,77949,77950],{"class":298},"   uname: 'pink老师',\n",[288,77952,77953],{"class":290,"line":1352},[288,77954,77955],{"class":298},"   age: 18,\n",[288,77957,77958],{"class":290,"line":1367},[288,77959,1737],{"class":298},[288,77961,77962],{"class":290,"line":1373},[288,77963,77964],{"class":298},"const { uname, age } = obj\n",[19,77966,77967],{},"上方代码这样写等价于：",[19,77969,77970],{},"const uname等价于obj.uname",[19,77972,77973],{},"变量名可以重新改名：",[19,77975,77976],{},"const uname='red老师'",[19,77978,77979],{},"const user={",[19,77981,77982],{},"  uname:'pink老师',",[19,77984,77985],{},"  age:18",[19,77987,1243],{},[19,77989,77990],{},"const {uname,age}=user",[19,77992,77993],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77995,77996],{},"const {旧变量名：新变量名}=对象",[19,77998,77999],{},"const {uname:username,age}=user",[22171,78001,78003],{"id":78002},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78005,78006],{},[200,78007],{"alt":205,"src":78008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22171,78010,78012],{"id":78011},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78014,78015],{},[200,78016],{"alt":205,"src":78017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[280,78019,78021],{"className":53240,"code":78020,"language":53242,"meta":205,"style":205},"  \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",[25,78022,78023,78031,78036,78041,78046,78051,78056,78061,78066,78071,78075,78080,78085],{"__ignoreMap":205},[288,78024,78025,78027,78029],{"class":290,"line":291},[288,78026,52317],{"class":298},[288,78028,51986],{"class":51473},[288,78030,51480],{"class":298},[288,78032,78033],{"class":290,"line":206},[288,78034,78035],{"class":298},"    const pig = {\n",[288,78037,78038],{"class":290,"line":1352},[288,78039,78040],{"class":298},"      name: '佩奇',\n",[288,78042,78043],{"class":290,"line":1367},[288,78044,78045],{"class":298},"      family: {\n",[288,78047,78048],{"class":290,"line":1373},[288,78049,78050],{"class":298},"        mother: '猪妈妈',\n",[288,78052,78053],{"class":290,"line":1387},[288,78054,78055],{"class":298},"        father: '猪爸爸',\n",[288,78057,78058],{"class":290,"line":1393},[288,78059,78060],{"class":298},"        sister: '乔治'\n",[288,78062,78063],{"class":290,"line":1484},[288,78064,78065],{"class":298},"      },\n",[288,78067,78068],{"class":290,"line":1490},[288,78069,78070],{"class":298},"      age: 6\n",[288,78072,78073],{"class":290,"line":1502},[288,78074,2359],{"class":298},[288,78076,78077],{"class":290,"line":1784},[288,78078,78079],{"class":298},"    \u002F\u002F 多级对象解构\n",[288,78081,78082],{"class":290,"line":1789},[288,78083,78084],{"class":298},"    const { name, family: { mother, father, sister }, age } = pig\n",[288,78086,78087,78089,78091],{"class":290,"line":1795},[288,78088,52590],{"class":298},[288,78090,51986],{"class":51473},[288,78092,51480],{"class":298},[19,78094,78095],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[280,78097,78100],{"className":78098,"code":78099,"language":76620,"meta":205,"style":205},"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",[25,78101,78102,78107,78118,78130,78142,78151,78155,78166,78178,78188,78193,78197,78207,78218,78227,78231,78235,78246,78257,78266,78270,78275],{"__ignoreMap":205},[288,78103,78104],{"class":290,"line":291},[288,78105,78106],{"class":357},"    \u002F\u002F 这是后台传递过来的数据\n",[288,78108,78109,78111,78114,78116],{"class":290,"line":206},[288,78110,11394],{"class":294},[288,78112,78113],{"class":298}," msg ",[288,78115,344],{"class":294},[288,78117,15745],{"class":298},[288,78119,78120,78123,78125,78128],{"class":290,"line":1352},[288,78121,78122],{"class":403},"      \"code\"",[288,78124,1156],{"class":294},[288,78126,78127],{"class":347}," 200",[288,78129,31639],{"class":298},[288,78131,78132,78135,78137,78140],{"class":290,"line":1367},[288,78133,78134],{"class":403},"      \"msg\"",[288,78136,1156],{"class":294},[288,78138,78139],{"class":403}," \"获取新闻列表成功\"",[288,78141,31639],{"class":298},[288,78143,78144,78147,78149],{"class":290,"line":1373},[288,78145,78146],{"class":403},"      \"data\"",[288,78148,1156],{"class":294},[288,78150,55620],{"class":298},[288,78152,78153],{"class":290,"line":1387},[288,78154,2682],{"class":298},[288,78156,78157,78160,78162,78164],{"class":290,"line":1393},[288,78158,78159],{"class":403},"          \"id\"",[288,78161,1156],{"class":294},[288,78163,25291],{"class":347},[288,78165,31639],{"class":298},[288,78167,78168,78171,78173,78176],{"class":290,"line":1484},[288,78169,78170],{"class":403},"          \"title\"",[288,78172,1156],{"class":294},[288,78174,78175],{"class":403}," \"5G商用自己，三大运用商收入下降\"",[288,78177,31639],{"class":298},[288,78179,78180,78183,78185],{"class":290,"line":1490},[288,78181,78182],{"class":403},"          \"count\"",[288,78184,1156],{"class":294},[288,78186,78187],{"class":347}," 58\n",[288,78189,78190],{"class":290,"line":1502},[288,78191,78192],{"class":298},"        },\n",[288,78194,78195],{"class":290,"line":1784},[288,78196,2682],{"class":298},[288,78198,78199,78201,78203,78205],{"class":290,"line":1789},[288,78200,78159],{"class":403},[288,78202,1156],{"class":294},[288,78204,14928],{"class":347},[288,78206,31639],{"class":298},[288,78208,78209,78211,78213,78216],{"class":290,"line":1795},[288,78210,78170],{"class":403},[288,78212,1156],{"class":294},[288,78214,78215],{"class":403}," \"国际媒体头条速览\"",[288,78217,31639],{"class":298},[288,78219,78220,78222,78224],{"class":290,"line":1800},[288,78221,78182],{"class":403},[288,78223,1156],{"class":294},[288,78225,78226],{"class":347}," 56\n",[288,78228,78229],{"class":290,"line":1814},[288,78230,78192],{"class":298},[288,78232,78233],{"class":290,"line":1819},[288,78234,2682],{"class":298},[288,78236,78237,78239,78241,78244],{"class":290,"line":1825},[288,78238,78159],{"class":403},[288,78240,1156],{"class":294},[288,78242,78243],{"class":347}," 3",[288,78245,31639],{"class":298},[288,78247,78248,78250,78252,78255],{"class":290,"line":1846},[288,78249,78170],{"class":403},[288,78251,1156],{"class":294},[288,78253,78254],{"class":403}," \"乌克兰和俄罗斯持续冲突\"",[288,78256,31639],{"class":298},[288,78258,78259,78261,78263],{"class":290,"line":1851},[288,78260,78182],{"class":403},[288,78262,1156],{"class":294},[288,78264,78265],{"class":347}," 1669\n",[288,78267,78268],{"class":290,"line":1865},[288,78269,78192],{"class":298},[288,78271,78272],{"class":290,"line":1870},[288,78273,78274],{"class":298},"      ]\n",[288,78276,78277],{"class":290,"line":1899},[288,78278,2359],{"class":298},[19,78280,78281],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78283,78284],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78286,78287],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78289,78290],{},"function({data}) {",[19,78292,78293],{},"console.log(data)",[19,78295,1243],{},[19,78297,78298],{},"render(msg)",[19,78300,78301],{},"实参传递给形参的时候解构了",[19,78303,78304],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78306,78307],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78309,78310],{},"function render({data:mydata}) {",[19,78312,78313],{},"  console.log(data)",[19,78315,1243],{},[260,78317,78319],{"id":78318},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78321,78322],{},"有两种情况：一个是数组结构，一个是立即执行函数",[243,78324,78325],{},[246,78326,78327],{},"如果对一个数组进行遍历，有两种方式：",[19,78329,78330],{},"①法1",[19,78332,78333],{},"const arr=[1,2,3]",[19,78335,78336],{},"arr.map(function(item,index) {",[19,78338,78339],{},"  console.log(item)",[19,78341,52637],{},[19,78343,78344],{},[200,78345],{"alt":205,"src":78346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78348,78349],{},"②法2",[19,78351,78352],{},"const str='pink'",[19,78354,78355],{},"[1,2,3].map(function(item,index) {",[19,78357,78358],{},"console.log(item)",[19,78360,52637],{},[19,78362,78363],{},[200,78364],{"alt":205,"src":78365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78367,78368],{},"此时会报错",[19,78370,78371],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78373,78358],{},[19,78375,52637],{},[19,78377,78378],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78380,78382],{"id":78381},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78384,78385],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78387,78388],{},"可以理解为加强版的for循环",[19,78390,78391],{},[200,78392],{"alt":205,"src":78393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78395,78396],{},"里边不写return，不返回数组，只遍历不返回",[19,78398,78399],{},"map是返回数组",[19,78401,78402],{},"forEach主要用于遍历数组对象",[280,78404,78406],{"className":53240,"code":78405,"language":53242,"meta":205,"style":205},"  \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",[25,78407,78408,78416,78421,78426,78431,78436,78440,78445],{"__ignoreMap":205},[288,78409,78410,78412,78414],{"class":290,"line":291},[288,78411,52317],{"class":298},[288,78413,51986],{"class":51473},[288,78415,51480],{"class":298},[288,78417,78418],{"class":290,"line":206},[288,78419,78420],{"class":298},"    const arr = ['red', 'green', 'pink']\n",[288,78422,78423],{"class":290,"line":1352},[288,78424,78425],{"class":298},"    const result = arr.forEach(function (item, index) {\n",[288,78427,78428],{"class":290,"line":1367},[288,78429,78430],{"class":298},"      console.log(item)\n",[288,78432,78433],{"class":290,"line":1373},[288,78434,78435],{"class":298},"      console.log(index)\n",[288,78437,78438],{"class":290,"line":1387},[288,78439,33634],{"class":298},[288,78441,78442],{"class":290,"line":1393},[288,78443,78444],{"class":298},"    console.log(result)\n",[288,78446,78447,78449,78451],{"class":290,"line":1484},[288,78448,52590],{"class":298},[288,78450,51986],{"class":51473},[288,78452,51480],{"class":298},[19,78454,78455],{},[200,78456],{"alt":205,"src":78457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78459,78461],{"id":78460},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78463,78464],{},[200,78465],{"alt":205,"src":78466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78468,78469],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[280,78471,78473],{"className":53240,"code":78472,"language":53242,"meta":205,"style":205},"\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",[25,78474,78475,78483,78491,78496,78501,78505,78509,78514,78518,78523,78531],{"__ignoreMap":205},[288,78476,78477,78479,78481],{"class":290,"line":291},[288,78478,1207],{"class":298},[288,78480,51973],{"class":51473},[288,78482,51480],{"class":298},[288,78484,78485,78487,78489],{"class":290,"line":206},[288,78486,52317],{"class":298},[288,78488,51986],{"class":51473},[288,78490,51480],{"class":298},[288,78492,78493],{"class":290,"line":1352},[288,78494,78495],{"class":298},"    const arr = [10, 20, 30]\n",[288,78497,78498],{"class":290,"line":1367},[288,78499,78500],{"class":298},"    const newArr = arr.filter(function (item, index) {\n",[288,78502,78503],{"class":290,"line":1373},[288,78504,78430],{"class":298},[288,78506,78507],{"class":290,"line":1387},[288,78508,78435],{"class":298},[288,78510,78511],{"class":290,"line":1393},[288,78512,78513],{"class":298},"      return item >= 20\n",[288,78515,78516],{"class":290,"line":1484},[288,78517,33634],{"class":298},[288,78519,78520],{"class":290,"line":1490},[288,78521,78522],{"class":298},"    console.log(newArr)\n",[288,78524,78525,78527,78529],{"class":290,"line":1502},[288,78526,52590],{"class":298},[288,78528,51986],{"class":51473},[288,78530,51480],{"class":298},[288,78532,78533,78535,78537],{"class":290,"line":1784},[288,78534,51958],{"class":298},[288,78536,51973],{"class":51473},[288,78538,51480],{"class":298},[19,78540,78541],{},"这个也可以写成箭头函数：",[280,78543,78545],{"className":50806,"code":78544,"language":50808,"meta":205,"style":205},"const newArr = arr.filter(item => item >= 20)\n",[25,78546,78547],{"__ignoreMap":205},[288,78548,78549],{"class":290,"line":291},[288,78550,78544],{"class":298},[14,78552,78554],{"id":78553},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78556,78557],{},[200,78558],{"alt":205,"src":78559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78561,78562],{},"步骤：",[19,78564,78565],{},"①：渲染页面模块",[1304,78567,78568,78571],{},[246,78569,78570],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[246,78572,78573],{},"用forEach+字符串的形式",[19,78575,78576],{},"②：点击不同需求，显示不同页面内容",[1304,78578,78579,78582,78585,78588,78591],{},[246,78580,78581],{},"点击采取事件委托方式 .filter",[246,78583,78584],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[246,78586,78587],{},"筛选条件是根据点击的 data-index 来判断",[246,78589,78590],{},"可以使用对象解构，把事件对象解构",[246,78592,78593],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[280,78595,78597],{"className":50806,"code":78596,"language":50808,"meta":205,"style":205},"\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",[25,78598,78599,78609,78623,78627,78635,78649,78669,78681,78689,78695,78705,78715,78725,78729,78733,78739,78752,78764,78774,78786,78790,78794,78801,78814,78826,78843,78861,78874,78878,78882,78894,78904,78908,78912,78919,78960,78987,78997,79001,79005,79013,79025,79029,79033,79041,79053,79065,79076,79080,79084,79093,79105,79116,79120,79124,79133,79145,79157,79161,79165,79172,79182,79194,79206,79221,79225,79229,79237,79253,79263,79273,79283,79295,79299,79303,79313,79324,79334,79338,79346,79354,79358,79366,79381,79407,79432,79457,79476,79484,79498,79503,79508,79513,79518,79523,79531,79539,79544,79555,79560,79570,79580,79590,79600,79604,79608,79617,79626,79635,79644,79648,79652,79661,79670,79679,79688,79692,79696,79705,79714,79723,79732,79736,79740,79749,79758,79767,79776,79780,79784,79793,79802,79811,79820,79824,79828,79837,79846,79855,79864,79868,79872,79881,79890,79898,79907,79911,79915,79919,79924,79936,79941,79953,79957,79974,80002,80011,80016,80026,80036,80045,80050,80055,80059,80064,80081,80085,80090,80098,80103,80130,80135,80155,80160,80172,80177,80182,80187,80198,80212,80249,80267,80300,80317,80341,80345,80350,80356,80360,80364,80368,80376,80384,80388],{"__ignoreMap":205},[288,78600,78601,78603,78605,78607],{"class":290,"line":291},[288,78602,51470],{"class":298},[288,78604,51474],{"class":51473},[288,78606,51477],{"class":2135},[288,78608,51480],{"class":298},[288,78610,78611,78613,78615,78617,78619,78621],{"class":290,"line":206},[288,78612,1207],{"class":298},[288,78614,50808],{"class":51473},[288,78616,51489],{"class":2135},[288,78618,344],{"class":298},[288,78620,51494],{"class":403},[288,78622,51480],{"class":298},[288,78624,78625],{"class":290,"line":1352},[288,78626,2572],{"emptyLinePlaceholder":217},[288,78628,78629,78631,78633],{"class":290,"line":1367},[288,78630,1207],{"class":298},[288,78632,51507],{"class":51473},[288,78634,51480],{"class":298},[288,78636,78637,78639,78641,78643,78645,78647],{"class":290,"line":1373},[288,78638,52317],{"class":298},[288,78640,51517],{"class":51473},[288,78642,51520],{"class":2135},[288,78644,344],{"class":298},[288,78646,51525],{"class":403},[288,78648,51480],{"class":298},[288,78650,78651,78653,78655,78657,78659,78661,78663,78665,78667],{"class":290,"line":1387},[288,78652,52317],{"class":298},[288,78654,51517],{"class":51473},[288,78656,15093],{"class":2135},[288,78658,344],{"class":298},[288,78660,51564],{"class":403},[288,78662,51544],{"class":2135},[288,78664,344],{"class":298},[288,78666,51571],{"class":403},[288,78668,51480],{"class":298},[288,78670,78671,78673,78675,78677,78679],{"class":290,"line":1393},[288,78672,52317],{"class":298},[288,78674,51580],{"class":51473},[288,78676,51583],{"class":298},[288,78678,51580],{"class":51473},[288,78680,51480],{"class":298},[288,78682,78683,78685,78687],{"class":290,"line":1484},[288,78684,52317],{"class":298},[288,78686,5299],{"class":51473},[288,78688,51480],{"class":298},[288,78690,78691,78693],{"class":290,"line":1490},[288,78692,6576],{"class":51473},[288,78694,15745],{"class":298},[288,78696,78697,78699,78701,78703],{"class":290,"line":1502},[288,78698,54868],{"class":347},[288,78700,51610],{"class":298},[288,78702,490],{"class":347},[288,78704,1463],{"class":298},[288,78706,78707,78709,78711,78713],{"class":290,"line":1784},[288,78708,54879],{"class":347},[288,78710,51610],{"class":298},[288,78712,490],{"class":347},[288,78714,1463],{"class":298},[288,78716,78717,78719,78721,78723],{"class":290,"line":1789},[288,78718,72769],{"class":347},[288,78720,51610],{"class":298},[288,78722,60678],{"class":347},[288,78724,1463],{"class":298},[288,78726,78727],{"class":290,"line":1795},[288,78728,2359],{"class":298},[288,78730,78731],{"class":290,"line":1800},[288,78732,2572],{"emptyLinePlaceholder":217},[288,78734,78735,78737],{"class":290,"line":1814},[288,78736,62296],{"class":2135},[288,78738,15745],{"class":298},[288,78740,78741,78743,78745,78748,78750],{"class":290,"line":1819},[288,78742,54944],{"class":347},[288,78744,51610],{"class":298},[288,78746,78747],{"class":347},"990",[288,78749,51665],{"class":294},[288,78751,1463],{"class":298},[288,78753,78754,78756,78758,78760,78762],{"class":290,"line":1825},[288,78755,54879],{"class":347},[288,78757,51610],{"class":298},[288,78759,490],{"class":347},[288,78761,51729],{"class":347},[288,78763,1463],{"class":298},[288,78765,78766,78768,78770,78772],{"class":290,"line":1846},[288,78767,55182],{"class":347},[288,78769,51610],{"class":298},[288,78771,51650],{"class":347},[288,78773,1463],{"class":298},[288,78775,78776,78779,78781,78784],{"class":290,"line":1851},[288,78777,78778],{"class":347},"      flex-wrap",[288,78780,51610],{"class":298},[288,78782,78783],{"class":347},"wrap",[288,78785,1463],{"class":298},[288,78787,78788],{"class":290,"line":1865},[288,78789,2359],{"class":298},[288,78791,78792],{"class":290,"line":1870},[288,78793,2572],{"emptyLinePlaceholder":217},[288,78795,78796,78799],{"class":290,"line":1899},[288,78797,78798],{"class":2135},"    .item",[288,78800,15745],{"class":298},[288,78802,78803,78805,78807,78810,78812],{"class":290,"line":1904},[288,78804,54944],{"class":347},[288,78806,51610],{"class":298},[288,78808,78809],{"class":347},"240",[288,78811,51665],{"class":294},[288,78813,1463],{"class":298},[288,78815,78816,78818,78820,78822,78824],{"class":290,"line":1921},[288,78817,62173],{"class":347},[288,78819,51610],{"class":298},[288,78821,743],{"class":347},[288,78823,51665],{"class":294},[288,78825,1463],{"class":298},[288,78827,78828,78830,78832,78834,78836,78839,78841],{"class":290,"line":1926},[288,78829,54868],{"class":347},[288,78831,51610],{"class":298},[288,78833,997],{"class":347},[288,78835,51665],{"class":294},[288,78837,78838],{"class":347}," 30",[288,78840,51665],{"class":294},[288,78842,1463],{"class":298},[288,78844,78845,78847,78849,78851,78854,78857,78859],{"class":290,"line":1931},[288,78846,62033],{"class":347},[288,78848,51610],{"class":298},[288,78850,28294],{"class":347},[288,78852,78853],{"class":347}," ease",[288,78855,78856],{"class":347}," .5",[288,78858,992],{"class":294},[288,78860,1463],{"class":298},[288,78862,78863,78866,78868,78870,78872],{"class":290,"line":1936},[288,78864,78865],{"class":347},"      margin-bottom",[288,78867,51610],{"class":298},[288,78869,997],{"class":347},[288,78871,51665],{"class":294},[288,78873,1463],{"class":298},[288,78875,78876],{"class":290,"line":1950},[288,78877,2359],{"class":298},[288,78879,78880],{"class":290,"line":1955},[288,78881,2572],{"emptyLinePlaceholder":217},[288,78883,78884,78887,78889,78892],{"class":290,"line":2749},[288,78885,78886],{"class":2135},"    .item:nth-child",[288,78888,299],{"class":298},[288,78890,78891],{"class":347},"4n",[288,78893,12615],{"class":298},[288,78895,78896,78898,78900,78902],{"class":290,"line":2763},[288,78897,62173],{"class":347},[288,78899,51610],{"class":298},[288,78901,490],{"class":347},[288,78903,1463],{"class":298},[288,78905,78906],{"class":290,"line":2771},[288,78907,2359],{"class":298},[288,78909,78910],{"class":290,"line":2776},[288,78911,2572],{"emptyLinePlaceholder":217},[288,78913,78914,78917],{"class":290,"line":2782},[288,78915,78916],{"class":2135},"    .item:hover",[288,78918,15745],{"class":298},[288,78920,78921,78924,78926,78928,78930,78932,78934,78936,78938,78941,78943,78945,78947,78949,78951,78953,78955,78958],{"class":290,"line":2788},[288,78922,78923],{"class":347},"      box-shadow",[288,78925,51610],{"class":298},[288,78927,490],{"class":347},[288,78929,51665],{"class":294},[288,78931,4265],{"class":347},[288,78933,51665],{"class":294},[288,78935,2320],{"class":347},[288,78937,51665],{"class":294},[288,78939,78940],{"class":347}," rgba",[288,78942,299],{"class":298},[288,78944,490],{"class":347},[288,78946,12608],{"class":298},[288,78948,490],{"class":347},[288,78950,12608],{"class":298},[288,78952,490],{"class":347},[288,78954,12608],{"class":298},[288,78956,78957],{"class":347},".2",[288,78959,2891],{"class":298},[288,78961,78962,78965,78967,78970,78972,78974,78976,78979,78981,78983,78985],{"class":290,"line":2793},[288,78963,78964],{"class":347},"      transform",[288,78966,51610],{"class":298},[288,78968,78969],{"class":347},"translate3d",[288,78971,299],{"class":298},[288,78973,490],{"class":347},[288,78975,12608],{"class":298},[288,78977,78978],{"class":347},"-4",[288,78980,51665],{"class":294},[288,78982,12608],{"class":298},[288,78984,490],{"class":347},[288,78986,2891],{"class":298},[288,78988,78989,78991,78993,78995],{"class":290,"line":8121},[288,78990,62198],{"class":347},[288,78992,51610],{"class":298},[288,78994,62203],{"class":347},[288,78996,1463],{"class":298},[288,78998,78999],{"class":290,"line":8145},[288,79000,2359],{"class":298},[288,79002,79003],{"class":290,"line":8150},[288,79004,2572],{"emptyLinePlaceholder":217},[288,79006,79007,79009,79011],{"class":290,"line":8156},[288,79008,78798],{"class":2135},[288,79010,55788],{"class":51473},[288,79012,15745],{"class":298},[288,79014,79015,79017,79019,79021,79023],{"class":290,"line":8183},[288,79016,54944],{"class":347},[288,79018,51610],{"class":298},[288,79020,608],{"class":347},[288,79022,625],{"class":294},[288,79024,1463],{"class":298},[288,79026,79027],{"class":290,"line":8188},[288,79028,2359],{"class":298},[288,79030,79031],{"class":290,"line":8194},[288,79032,2572],{"emptyLinePlaceholder":217},[288,79034,79035,79037,79039],{"class":290,"line":8206},[288,79036,78798],{"class":2135},[288,79038,62477],{"class":2135},[288,79040,15745],{"class":298},[288,79042,79043,79045,79047,79049,79051],{"class":290,"line":8218},[288,79044,55095],{"class":347},[288,79046,51610],{"class":298},[288,79048,947],{"class":347},[288,79050,51665],{"class":294},[288,79052,1463],{"class":298},[288,79054,79055,79057,79059,79061,79063],{"class":290,"line":8230},[288,79056,78865],{"class":347},[288,79058,51610],{"class":298},[288,79060,743],{"class":347},[288,79062,51665],{"class":294},[288,79064,1463],{"class":298},[288,79066,79067,79069,79071,79074],{"class":290,"line":9889},[288,79068,57589],{"class":347},[288,79070,51610],{"class":298},[288,79072,79073],{"class":347},"#666",[288,79075,1463],{"class":298},[288,79077,79078],{"class":290,"line":9914},[288,79079,2359],{"class":298},[288,79081,79082],{"class":290,"line":9937},[288,79083,2572],{"emptyLinePlaceholder":217},[288,79085,79086,79088,79091],{"class":290,"line":9961},[288,79087,78798],{"class":2135},[288,79089,79090],{"class":2135}," .price",[288,79092,15745],{"class":298},[288,79094,79095,79097,79099,79101,79103],{"class":290,"line":9966},[288,79096,55095],{"class":347},[288,79098,51610],{"class":298},[288,79100,1047],{"class":347},[288,79102,51665],{"class":294},[288,79104,1463],{"class":298},[288,79106,79107,79109,79111,79114],{"class":290,"line":9971},[288,79108,57589],{"class":347},[288,79110,51610],{"class":298},[288,79112,79113],{"class":347},"firebrick",[288,79115,1463],{"class":298},[288,79117,79118],{"class":290,"line":9976},[288,79119,2359],{"class":298},[288,79121,79122],{"class":290,"line":9985},[288,79123,2572],{"emptyLinePlaceholder":217},[288,79125,79126,79128,79131],{"class":290,"line":9990},[288,79127,78798],{"class":2135},[288,79129,79130],{"class":2135}," .price::before",[288,79132,15745],{"class":298},[288,79134,79135,79138,79140,79143],{"class":290,"line":9996},[288,79136,79137],{"class":347},"      content",[288,79139,51610],{"class":298},[288,79141,79142],{"class":403},"'￥'",[288,79144,1463],{"class":298},[288,79146,79147,79149,79151,79153,79155],{"class":290,"line":10017},[288,79148,55095],{"class":347},[288,79150,51610],{"class":298},[288,79152,846],{"class":347},[288,79154,51665],{"class":294},[288,79156,1463],{"class":298},[288,79158,79159],{"class":290,"line":10023},[288,79160,2359],{"class":298},[288,79162,79163],{"class":290,"line":10037},[288,79164,2572],{"emptyLinePlaceholder":217},[288,79166,79167,79170],{"class":290,"line":10043},[288,79168,79169],{"class":2135},"    .filter",[288,79171,15745],{"class":298},[288,79173,79174,79176,79178,79180],{"class":290,"line":10070},[288,79175,55182],{"class":347},[288,79177,51610],{"class":298},[288,79179,51650],{"class":347},[288,79181,1463],{"class":298},[288,79183,79184,79186,79188,79190,79192],{"class":290,"line":10079},[288,79185,54944],{"class":347},[288,79187,51610],{"class":298},[288,79189,78747],{"class":347},[288,79191,51665],{"class":294},[288,79193,1463],{"class":298},[288,79195,79196,79198,79200,79202,79204],{"class":290,"line":10085},[288,79197,54879],{"class":347},[288,79199,51610],{"class":298},[288,79201,490],{"class":347},[288,79203,51729],{"class":347},[288,79205,1463],{"class":298},[288,79207,79208,79210,79212,79214,79216,79218],{"class":290,"line":10093},[288,79209,54868],{"class":347},[288,79211,51610],{"class":298},[288,79213,953],{"class":347},[288,79215,51665],{"class":294},[288,79217,78838],{"class":347},[288,79219,79220],{"class":294},"px\n",[288,79222,79223],{"class":290,"line":10098},[288,79224,2359],{"class":298},[288,79226,79227],{"class":290,"line":16777},[288,79228,2572],{"emptyLinePlaceholder":217},[288,79230,79231,79233,79235],{"class":290,"line":16783},[288,79232,79169],{"class":2135},[288,79234,1571],{"class":51473},[288,79236,15745],{"class":298},[288,79238,79239,79241,79243,79245,79247,79249,79251],{"class":290,"line":16806},[288,79240,54868],{"class":347},[288,79242,51610],{"class":298},[288,79244,743],{"class":347},[288,79246,51665],{"class":294},[288,79248,9123],{"class":347},[288,79250,51665],{"class":294},[288,79252,1463],{"class":298},[288,79254,79255,79257,79259,79261],{"class":290,"line":16812},[288,79256,61894],{"class":347},[288,79258,51610],{"class":298},[288,79260,61991],{"class":347},[288,79262,1463],{"class":298},[288,79264,79265,79267,79269,79271],{"class":290,"line":16835},[288,79266,57589],{"class":347},[288,79268,51610],{"class":298},[288,79270,79073],{"class":347},[288,79272,1463],{"class":298},[288,79274,79275,79277,79279,79281],{"class":290,"line":16849},[288,79276,64143],{"class":347},[288,79278,51610],{"class":298},[288,79280,54910],{"class":347},[288,79282,1463],{"class":298},[288,79284,79285,79287,79289,79291,79293],{"class":290,"line":16869},[288,79286,61923],{"class":347},[288,79288,51610],{"class":298},[288,79290,997],{"class":347},[288,79292,51665],{"class":294},[288,79294,1463],{"class":298},[288,79296,79297],{"class":290,"line":16875},[288,79298,2359],{"class":298},[288,79300,79301],{"class":290,"line":16886},[288,79302,2572],{"emptyLinePlaceholder":217},[288,79304,79305,79307,79309,79311],{"class":290,"line":16909},[288,79306,79169],{"class":2135},[288,79308,1571],{"class":51473},[288,79310,62073],{"class":2135},[288,79312,15745],{"class":298},[288,79314,79315,79317,79319,79322],{"class":290,"line":16931},[288,79316,55057],{"class":347},[288,79318,51610],{"class":298},[288,79320,79321],{"class":347},"#05943c",[288,79323,1463],{"class":298},[288,79325,79326,79328,79330,79332],{"class":290,"line":16936},[288,79327,57589],{"class":347},[288,79329,51610],{"class":298},[288,79331,61015],{"class":347},[288,79333,1463],{"class":298},[288,79335,79336],{"class":290,"line":16942},[288,79337,2359],{"class":298},[288,79339,79340,79342,79344],{"class":290,"line":16956},[288,79341,52590],{"class":298},[288,79343,5299],{"class":51473},[288,79345,51480],{"class":298},[288,79347,79348,79350,79352],{"class":290,"line":16969},[288,79349,51958],{"class":298},[288,79351,51507],{"class":51473},[288,79353,51480],{"class":298},[288,79355,79356],{"class":290,"line":16974},[288,79357,2572],{"emptyLinePlaceholder":217},[288,79359,79360,79362,79364],{"class":290,"line":16988},[288,79361,1207],{"class":298},[288,79363,51973],{"class":51473},[288,79365,51480],{"class":298},[288,79367,79368,79370,79372,79374,79376,79379],{"class":290,"line":16993},[288,79369,52317],{"class":298},[288,79371,51784],{"class":51473},[288,79373,53659],{"class":2135},[288,79375,344],{"class":298},[288,79377,79378],{"class":403},"\"filter\"",[288,79380,51480],{"class":298},[288,79382,79383,79385,79387,79389,79391,79393,79396,79398,79400,79403,79405],{"class":290,"line":16999},[288,79384,51514],{"class":298},[288,79386,104],{"class":51473},[288,79388,61230],{"class":2135},[288,79390,344],{"class":298},[288,79392,61235],{"class":403},[288,79394,79395],{"class":2135}," data-index",[288,79397,344],{"class":298},[288,79399,3850],{"class":403},[288,79401,79402],{"class":298},">0-100元\u003C\u002F",[288,79404,104],{"class":51473},[288,79406,51480],{"class":298},[288,79408,79409,79411,79413,79415,79417,79419,79421,79423,79425,79428,79430],{"class":290,"line":17004},[288,79410,51514],{"class":298},[288,79412,104],{"class":51473},[288,79414,61230],{"class":2135},[288,79416,344],{"class":298},[288,79418,61235],{"class":403},[288,79420,79395],{"class":2135},[288,79422,344],{"class":298},[288,79424,3873],{"class":403},[288,79426,79427],{"class":298},">100-300元\u003C\u002F",[288,79429,104],{"class":51473},[288,79431,51480],{"class":298},[288,79433,79434,79436,79438,79440,79442,79444,79446,79448,79450,79453,79455],{"class":290,"line":17018},[288,79435,51514],{"class":298},[288,79437,104],{"class":51473},[288,79439,61230],{"class":2135},[288,79441,344],{"class":298},[288,79443,61235],{"class":403},[288,79445,79395],{"class":2135},[288,79447,344],{"class":298},[288,79449,3886],{"class":403},[288,79451,79452],{"class":298},">300元以上\u003C\u002F",[288,79454,104],{"class":51473},[288,79456,51480],{"class":298},[288,79458,79459,79461,79463,79465,79467,79469,79472,79474],{"class":290,"line":17023},[288,79460,51514],{"class":298},[288,79462,104],{"class":51473},[288,79464,61230],{"class":2135},[288,79466,344],{"class":298},[288,79468,61235],{"class":403},[288,79470,79471],{"class":298},">全部区间\u003C\u002F",[288,79473,104],{"class":51473},[288,79475,51480],{"class":298},[288,79477,79478,79480,79482],{"class":290,"line":17028},[288,79479,52590],{"class":298},[288,79481,51784],{"class":51473},[288,79483,51480],{"class":298},[288,79485,79486,79488,79490,79492,79494,79496],{"class":290,"line":17042},[288,79487,52317],{"class":298},[288,79489,51784],{"class":51473},[288,79491,53659],{"class":2135},[288,79493,344],{"class":298},[288,79495,62781],{"class":403},[288,79497,51480],{"class":298},[288,79499,79500],{"class":290,"line":17054},[288,79501,79502],{"class":357},"    \u003C!-- \u003Cdiv class=\"item\">\n",[288,79504,79505],{"class":290,"line":17059},[288,79506,79507],{"class":357},"      \u003Cimg src=\"\" alt=\"\">\n",[288,79509,79510],{"class":290,"line":17072},[288,79511,79512],{"class":357},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[288,79514,79515],{"class":290,"line":17077},[288,79516,79517],{"class":357},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[288,79519,79520],{"class":290,"line":17082},[288,79521,79522],{"class":357},"    \u003C\u002Fdiv> -->\n",[288,79524,79525,79527,79529],{"class":290,"line":17087},[288,79526,52590],{"class":298},[288,79528,51784],{"class":51473},[288,79530,51480],{"class":298},[288,79532,79533,79535,79537],{"class":290,"line":17100},[288,79534,52317],{"class":298},[288,79536,51986],{"class":51473},[288,79538,51480],{"class":298},[288,79540,79541],{"class":290,"line":17105},[288,79542,79543],{"class":357},"    \u002F\u002F 2. 初始化数据\n",[288,79545,79546,79548,79551,79553],{"class":290,"line":32806},[288,79547,11394],{"class":294},[288,79549,79550],{"class":347}," goodsList",[288,79552,13737],{"class":294},[288,79554,55620],{"class":298},[288,79556,79557],{"class":290,"line":32812},[288,79558,79559],{"class":298},"      {\n",[288,79561,79562,79565,79568],{"class":290,"line":32818},[288,79563,79564],{"class":298},"        id: ",[288,79566,79567],{"class":403},"'4001172'",[288,79569,31639],{"class":298},[288,79571,79572,79575,79578],{"class":290,"line":32824},[288,79573,79574],{"class":298},"        name: ",[288,79576,79577],{"class":403},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[288,79579,31639],{"class":298},[288,79581,79582,79585,79588],{"class":290,"line":32830},[288,79583,79584],{"class":298},"        price: ",[288,79586,79587],{"class":403},"'289.00'",[288,79589,31639],{"class":298},[288,79591,79592,79595,79598],{"class":290,"line":32841},[288,79593,79594],{"class":298},"        picture: ",[288,79596,79597],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[288,79599,31639],{"class":298},[288,79601,79602],{"class":290,"line":32847},[288,79603,78065],{"class":298},[288,79605,79606],{"class":290,"line":32867},[288,79607,79559],{"class":298},[288,79609,79610,79612,79615],{"class":290,"line":32873},[288,79611,79564],{"class":298},[288,79613,79614],{"class":403},"'4001594'",[288,79616,31639],{"class":298},[288,79618,79619,79621,79624],{"class":290,"line":32884},[288,79620,79574],{"class":298},[288,79622,79623],{"class":403},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[288,79625,31639],{"class":298},[288,79627,79628,79630,79633],{"class":290,"line":32890},[288,79629,79584],{"class":298},[288,79631,79632],{"class":403},"'288.00'",[288,79634,31639],{"class":298},[288,79636,79637,79639,79642],{"class":290,"line":32896},[288,79638,79594],{"class":298},[288,79640,79641],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[288,79643,31639],{"class":298},[288,79645,79646],{"class":290,"line":32902},[288,79647,78065],{"class":298},[288,79649,79650],{"class":290,"line":32908},[288,79651,79559],{"class":298},[288,79653,79654,79656,79659],{"class":290,"line":32914},[288,79655,79564],{"class":298},[288,79657,79658],{"class":403},"'4001009'",[288,79660,31639],{"class":298},[288,79662,79663,79665,79668],{"class":290,"line":32920},[288,79664,79574],{"class":298},[288,79666,79667],{"class":403},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[288,79669,31639],{"class":298},[288,79671,79672,79674,79677],{"class":290,"line":32926},[288,79673,79584],{"class":298},[288,79675,79676],{"class":403},"'109.00'",[288,79678,31639],{"class":298},[288,79680,79681,79683,79686],{"class":290,"line":32946},[288,79682,79594],{"class":298},[288,79684,79685],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[288,79687,31639],{"class":298},[288,79689,79690],{"class":290,"line":32952},[288,79691,78065],{"class":298},[288,79693,79694],{"class":290,"line":32968},[288,79695,79559],{"class":298},[288,79697,79698,79700,79703],{"class":290,"line":32974},[288,79699,79564],{"class":298},[288,79701,79702],{"class":403},"'4001874'",[288,79704,31639],{"class":298},[288,79706,79707,79709,79712],{"class":290,"line":32988},[288,79708,79574],{"class":298},[288,79710,79711],{"class":403},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[288,79713,31639],{"class":298},[288,79715,79716,79718,79721],{"class":290,"line":32994},[288,79717,79584],{"class":298},[288,79719,79720],{"class":403},"'488.00'",[288,79722,31639],{"class":298},[288,79724,79725,79727,79730],{"class":290,"line":33009},[288,79726,79594],{"class":298},[288,79728,79729],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[288,79731,31639],{"class":298},[288,79733,79734],{"class":290,"line":33015},[288,79735,78065],{"class":298},[288,79737,79738],{"class":290,"line":33024},[288,79739,79559],{"class":298},[288,79741,79742,79744,79747],{"class":290,"line":33030},[288,79743,79564],{"class":298},[288,79745,79746],{"class":403},"'4001649'",[288,79748,31639],{"class":298},[288,79750,79751,79753,79756],{"class":290,"line":33039},[288,79752,79574],{"class":298},[288,79754,79755],{"class":403},"'大师监制龙泉青瓷茶叶罐'",[288,79757,31639],{"class":298},[288,79759,79760,79762,79765],{"class":290,"line":33045},[288,79761,79584],{"class":298},[288,79763,79764],{"class":403},"'139.00'",[288,79766,31639],{"class":298},[288,79768,79769,79771,79774],{"class":290,"line":33051},[288,79770,79594],{"class":298},[288,79772,79773],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[288,79775,31639],{"class":298},[288,79777,79778],{"class":290,"line":33060},[288,79779,78065],{"class":298},[288,79781,79782],{"class":290,"line":33066},[288,79783,79559],{"class":298},[288,79785,79786,79788,79791],{"class":290,"line":33077},[288,79787,79564],{"class":298},[288,79789,79790],{"class":403},"'3997185'",[288,79792,31639],{"class":298},[288,79794,79795,79797,79800],{"class":290,"line":33083},[288,79796,79574],{"class":298},[288,79798,79799],{"class":403},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[288,79801,31639],{"class":298},[288,79803,79804,79806,79809],{"class":290,"line":33102},[288,79805,79584],{"class":298},[288,79807,79808],{"class":403},"'108.00'",[288,79810,31639],{"class":298},[288,79812,79813,79815,79818],{"class":290,"line":33108},[288,79814,79594],{"class":298},[288,79816,79817],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[288,79819,31639],{"class":298},[288,79821,79822],{"class":290,"line":33119},[288,79823,78065],{"class":298},[288,79825,79826],{"class":290,"line":33125},[288,79827,79559],{"class":298},[288,79829,79830,79832,79835],{"class":290,"line":33145},[288,79831,79564],{"class":298},[288,79833,79834],{"class":403},"'3997403'",[288,79836,31639],{"class":298},[288,79838,79839,79841,79844],{"class":290,"line":33161},[288,79840,79574],{"class":298},[288,79842,79843],{"class":403},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[288,79845,31639],{"class":298},[288,79847,79848,79850,79853],{"class":290,"line":33167},[288,79849,79584],{"class":298},[288,79851,79852],{"class":403},"'100.00'",[288,79854,31639],{"class":298},[288,79856,79857,79859,79862],{"class":290,"line":33181},[288,79858,79594],{"class":298},[288,79860,79861],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[288,79863,31639],{"class":298},[288,79865,79866],{"class":290,"line":33187},[288,79867,78065],{"class":298},[288,79869,79870],{"class":290,"line":33193},[288,79871,79559],{"class":298},[288,79873,79874,79876,79879],{"class":290,"line":33204},[288,79875,79564],{"class":298},[288,79877,79878],{"class":403},"'3998274'",[288,79880,31639],{"class":298},[288,79882,79883,79885,79888],{"class":290,"line":33210},[288,79884,79574],{"class":298},[288,79886,79887],{"class":403},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[288,79889,31639],{"class":298},[288,79891,79892,79894,79896],{"class":290,"line":33216},[288,79893,79584],{"class":298},[288,79895,79764],{"class":403},[288,79897,31639],{"class":298},[288,79899,79900,79902,79905],{"class":290,"line":33226},[288,79901,79594],{"class":298},[288,79903,79904],{"class":403},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[288,79906,31639],{"class":298},[288,79908,79909],{"class":290,"line":33232},[288,79910,78065],{"class":298},[288,79912,79913],{"class":290,"line":33243},[288,79914,53282],{"class":298},[288,79916,79917],{"class":290,"line":33249},[288,79918,2572],{"emptyLinePlaceholder":217},[288,79920,79921],{"class":290,"line":33259},[288,79922,79923],{"class":357},"    \u002F\u002F 1.渲染函数\n",[288,79925,79926,79928,79930,79932,79934],{"class":290,"line":33264},[288,79927,70257],{"class":294},[288,79929,70260],{"class":2135},[288,79931,299],{"class":298},[288,79933,4052],{"class":5389},[288,79935,12615],{"class":298},[288,79937,79938],{"class":290,"line":33270},[288,79939,79940],{"class":357},"      \u002F\u002F 声明空字符串\n",[288,79942,79943,79946,79949,79951],{"class":290,"line":33319},[288,79944,79945],{"class":294},"      let",[288,79947,79948],{"class":298}," str ",[288,79950,344],{"class":294},[288,79952,70277],{"class":403},[288,79954,79955],{"class":290,"line":33366},[288,79956,70282],{"class":357},[288,79958,79959,79961,79964,79966,79969,79972],{"class":290,"line":33371},[288,79960,58180],{"class":298},[288,79962,79963],{"class":2135},"forEach",[288,79965,299],{"class":298},[288,79967,79968],{"class":5389},"item",[288,79970,79971],{"class":294}," =>",[288,79973,15745],{"class":298},[288,79975,79976,79978,79981,79984,79986,79989,79991,79994,79997,79999],{"class":290,"line":33377},[288,79977,61443],{"class":294},[288,79979,79980],{"class":298}," { ",[288,79982,79983],{"class":347},"name",[288,79985,12608],{"class":298},[288,79987,79988],{"class":347},"price",[288,79990,12608],{"class":298},[288,79992,79993],{"class":347},"picture",[288,79995,79996],{"class":298}," } ",[288,79998,344],{"class":294},[288,80000,80001],{"class":298}," item\n",[288,80003,80004,80007,80009],{"class":290,"line":33396},[288,80005,80006],{"class":298},"        str ",[288,80008,9650],{"class":294},[288,80010,70341],{"class":403},[288,80012,80013],{"class":290,"line":33402},[288,80014,80015],{"class":403},"          \u003Cdiv class=\"item\">\n",[288,80017,80018,80021,80023],{"class":290,"line":33422},[288,80019,80020],{"class":403},"            \u003Cimg src=\"${",[288,80022,79993],{"class":298},[288,80024,80025],{"class":403},"}\" alt=\"\">\n",[288,80027,80028,80031,80033],{"class":290,"line":33428},[288,80029,80030],{"class":403},"            \u003Cp class=\"name\">${",[288,80032,79983],{"class":298},[288,80034,80035],{"class":403},"}\u003C\u002Fp>\n",[288,80037,80038,80041,80043],{"class":290,"line":33434},[288,80039,80040],{"class":403},"            \u003Cp class=\"price\">${",[288,80042,79988],{"class":298},[288,80044,80035],{"class":403},[288,80046,80047],{"class":290,"line":33444},[288,80048,80049],{"class":403},"          \u003C\u002Fdiv>\n",[288,80051,80052],{"class":290,"line":33449},[288,80053,80054],{"class":403},"        `\n",[288,80056,80057],{"class":290,"line":33455},[288,80058,64988],{"class":298},[288,80060,80061],{"class":290,"line":33471},[288,80062,80063],{"class":357},"      \u002F\u002F 追加给List\n",[288,80065,80066,80068,80070,80072,80075,80077,80079],{"class":290,"line":33516},[288,80067,55944],{"class":298},[288,80069,54572],{"class":2135},[288,80071,299],{"class":298},[288,80073,80074],{"class":403},"'.list'",[288,80076,74422],{"class":298},[288,80078,344],{"class":294},[288,80080,74158],{"class":298},[288,80082,80083],{"class":290,"line":33522},[288,80084,2359],{"class":298},[288,80086,80087],{"class":290,"line":33528},[288,80088,80089],{"class":357},"    \u002F\u002F 页面一打开就需要渲染\n",[288,80091,80092,80095],{"class":290,"line":33534},[288,80093,80094],{"class":2135},"    render",[288,80096,80097],{"class":298},"(goodsList)\n",[288,80099,80100],{"class":290,"line":33545},[288,80101,80102],{"class":357},"    \u002F\u002F 2.过滤筛选\n",[288,80104,80105,80107,80109,80111,80114,80116,80118,80120,80122,80124,80126,80128],{"class":290,"line":33551},[288,80106,52580],{"class":298},[288,80108,54572],{"class":2135},[288,80110,299],{"class":298},[288,80112,80113],{"class":403},"'.filter'",[288,80115,30999],{"class":298},[288,80117,57986],{"class":2135},[288,80119,299],{"class":298},[288,80121,57991],{"class":403},[288,80123,12608],{"class":298},[288,80125,373],{"class":5389},[288,80127,79971],{"class":294},[288,80129,15745],{"class":298},[288,80131,80132],{"class":290,"line":33557},[288,80133,80134],{"class":357},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[288,80136,80137,80139,80141,80144,80146,80148,80150,80152],{"class":290,"line":33563},[288,80138,58401],{"class":294},[288,80140,79980],{"class":298},[288,80142,80143],{"class":347},"tagName",[288,80145,12608],{"class":298},[288,80147,31710],{"class":347},[288,80149,79996],{"class":298},[288,80151,344],{"class":294},[288,80153,80154],{"class":298}," e.target\n",[288,80156,80157],{"class":290,"line":33581},[288,80158,80159],{"class":357},"      \u002F\u002F 判断\n",[288,80161,80162,80164,80166,80168,80170],{"class":290,"line":33595},[288,80163,54653],{"class":294},[288,80165,67207],{"class":298},[288,80167,54659],{"class":294},[288,80169,68429],{"class":403},[288,80171,12615],{"class":298},[288,80173,80174],{"class":290,"line":33604},[288,80175,80176],{"class":357},"        \u002F\u002F console.log(11)\n",[288,80178,80179],{"class":290,"line":33613},[288,80180,80181],{"class":357},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[288,80183,80184],{"class":290,"line":33622},[288,80185,80186],{"class":357},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[288,80188,80189,80191,80193,80195],{"class":290,"line":33631},[288,80190,52003],{"class":294},[288,80192,52006],{"class":298},[288,80194,344],{"class":294},[288,80196,80197],{"class":298}," goodsList\n",[288,80199,80200,80202,80205,80207,80210],{"class":290,"line":33637},[288,80201,2669],{"class":294},[288,80203,80204],{"class":298}," (dataset.index ",[288,80206,54659],{"class":294},[288,80208,80209],{"class":403}," '1'",[288,80211,12615],{"class":298},[288,80213,80214,80217,80219,80222,80225,80227,80229,80231,80234,80236,80238,80241,80243,80245,80247],{"class":290,"line":33643},[288,80215,80216],{"class":298},"          arr ",[288,80218,344],{"class":294},[288,80220,80221],{"class":298}," goodsList.",[288,80223,80224],{"class":2135},"filter",[288,80226,299],{"class":298},[288,80228,79968],{"class":5389},[288,80230,79971],{"class":294},[288,80232,80233],{"class":298}," item.price ",[288,80235,1882],{"class":294},[288,80237,4265],{"class":347},[288,80239,80240],{"class":294}," &&",[288,80242,80233],{"class":298},[288,80244,1760],{"class":294},[288,80246,5927],{"class":347},[288,80248,305],{"class":298},[288,80250,80251,80254,80256,80258,80260,80262,80265],{"class":290,"line":33651},[288,80252,80253],{"class":298},"        } ",[288,80255,1873],{"class":294},[288,80257,1876],{"class":294},[288,80259,80204],{"class":298},[288,80261,54659],{"class":294},[288,80263,80264],{"class":403}," '2'",[288,80266,12615],{"class":298},[288,80268,80269,80271,80273,80275,80277,80279,80281,80283,80285,80287,80289,80291,80293,80295,80298],{"class":290,"line":33656},[288,80270,80216],{"class":298},[288,80272,344],{"class":294},[288,80274,80221],{"class":298},[288,80276,80224],{"class":2135},[288,80278,299],{"class":298},[288,80280,79968],{"class":5389},[288,80282,79971],{"class":294},[288,80284,80233],{"class":298},[288,80286,1882],{"class":294},[288,80288,5927],{"class":347},[288,80290,80240],{"class":294},[288,80292,80233],{"class":298},[288,80294,1760],{"class":294},[288,80296,80297],{"class":347}," 300",[288,80299,305],{"class":298},[288,80301,80302,80304,80306,80308,80310,80312,80315],{"class":290,"line":33662},[288,80303,80253],{"class":298},[288,80305,1873],{"class":294},[288,80307,1876],{"class":294},[288,80309,80204],{"class":298},[288,80311,54659],{"class":294},[288,80313,80314],{"class":403}," '3'",[288,80316,12615],{"class":298},[288,80318,80319,80321,80323,80325,80327,80329,80331,80333,80335,80337,80339],{"class":290,"line":33673},[288,80320,80216],{"class":298},[288,80322,344],{"class":294},[288,80324,80221],{"class":298},[288,80326,80224],{"class":2135},[288,80328,299],{"class":298},[288,80330,79968],{"class":5389},[288,80332,79971],{"class":294},[288,80334,80233],{"class":298},[288,80336,1882],{"class":294},[288,80338,80297],{"class":347},[288,80340,305],{"class":298},[288,80342,80343],{"class":290,"line":33679},[288,80344,2701],{"class":298},[288,80346,80347],{"class":290,"line":33699},[288,80348,80349],{"class":357},"        \u002F\u002F 渲染函数\n",[288,80351,80352,80354],{"class":290,"line":33705},[288,80353,70581],{"class":2135},[288,80355,52585],{"class":298},[288,80357,80358],{"class":290,"line":33711},[288,80359,52571],{"class":298},[288,80361,80362],{"class":290,"line":33717},[288,80363,2572],{"emptyLinePlaceholder":217},[288,80365,80366],{"class":290,"line":33734},[288,80367,33634],{"class":298},[288,80369,80370,80372,80374],{"class":290,"line":33740},[288,80371,52590],{"class":298},[288,80373,51986],{"class":51473},[288,80375,51480],{"class":298},[288,80377,80378,80380,80382],{"class":290,"line":33746},[288,80379,51958],{"class":298},[288,80381,51973],{"class":51473},[288,80383,51480],{"class":298},[288,80385,80386],{"class":290,"line":33752},[288,80387,2572],{"emptyLinePlaceholder":217},[288,80389,80390,80392,80394],{"class":290,"line":33758},[288,80391,51958],{"class":298},[288,80393,50808],{"class":51473},[288,80395,51480],{"class":298},[14,80397,80399],{"id":80398},"_410-深入了解对象","4.10 深入了解对象",[260,80401,80403],{"id":80402},"_4101-创建对象","4.10.1 创建对象",[19,80405,80406],{},[200,80407],{"alt":205,"src":80408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80410,80411],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[260,80413,80415],{"id":80414},"_4102-构造函数","4.10.2 构造函数",[19,80417,80418,80421],{},[448,80419,80420],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80423,80424,80427],{},[448,80425,80426],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[280,80429,80431],{"className":50806,"code":80430,"language":50808,"meta":205,"style":205},"\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",[25,80432,80433,80441,80446,80467,80480,80492,80504,80508,80513,80540,80545,80572],{"__ignoreMap":205},[288,80434,80435,80437,80439],{"class":290,"line":291},[288,80436,1207],{"class":298},[288,80438,51986],{"class":51473},[288,80440,51480],{"class":298},[288,80442,80443],{"class":290,"line":206},[288,80444,80445],{"class":357},"\u002F\u002F例：\n",[288,80447,80448,80450,80453,80455,80457,80459,80461,80463,80465],{"class":290,"line":1352},[288,80449,54622],{"class":294},[288,80451,80452],{"class":2135}," Pig",[288,80454,299],{"class":298},[288,80456,79983],{"class":5389},[288,80458,675],{"class":298},[288,80460,70394],{"class":5389},[288,80462,675],{"class":298},[288,80464,70411],{"class":5389},[288,80466,12615],{"class":298},[288,80468,80469,80472,80475,80477],{"class":290,"line":1367},[288,80470,80471],{"class":347},"    this",[288,80473,80474],{"class":298},".name",[288,80476,344],{"class":294},[288,80478,80479],{"class":298},"name\n",[288,80481,80482,80484,80487,80489],{"class":290,"line":1373},[288,80483,80471],{"class":347},[288,80485,80486],{"class":298},".age",[288,80488,344],{"class":294},[288,80490,80491],{"class":298},"age\n",[288,80493,80494,80496,80499,80501],{"class":290,"line":1387},[288,80495,80471],{"class":347},[288,80497,80498],{"class":298},".gender",[288,80500,344],{"class":294},[288,80502,80503],{"class":298},"gender    \n",[288,80505,80506],{"class":290,"line":1393},[288,80507,1737],{"class":298},[288,80509,80510],{"class":290,"line":1484},[288,80511,80512],{"class":357},"\u002F\u002F创建佩奇对象\n",[288,80514,80515,80517,80520,80522,80524,80526,80529,80531,80533,80535,80538],{"class":290,"line":1490},[288,80516,6965],{"class":294},[288,80518,80519],{"class":347}," Peppa",[288,80521,11890],{"class":294},[288,80523,80452],{"class":2135},[288,80525,299],{"class":298},[288,80527,80528],{"class":403},"'佩奇'",[288,80530,675],{"class":298},[288,80532,641],{"class":347},[288,80534,675],{"class":298},[288,80536,80537],{"class":403},"'女'",[288,80539,305],{"class":298},[288,80541,80542],{"class":290,"line":1502},[288,80543,80544],{"class":357},"\u002F\u002F创建乔治对象\n",[288,80546,80547,80549,80552,80554,80556,80558,80561,80563,80565,80567,80570],{"class":290,"line":1784},[288,80548,6965],{"class":294},[288,80550,80551],{"class":347}," George",[288,80553,11890],{"class":294},[288,80555,80452],{"class":2135},[288,80557,299],{"class":298},[288,80559,80560],{"class":403},"'乔治'",[288,80562,675],{"class":298},[288,80564,370],{"class":347},[288,80566,675],{"class":298},[288,80568,80569],{"class":403},"'男'",[288,80571,305],{"class":298},[288,80573,80574,80576,80578],{"class":290,"line":1789},[288,80575,51958],{"class":298},[288,80577,51986],{"class":51473},[288,80579,51480],{"class":298},[19,80581,80582],{},[200,80583],{"alt":205,"src":80584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80586,80587],{},[200,80588],{"alt":205,"src":80589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80591,80592],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80594,80595],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80597,80598],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80600,80601],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80603,80604],{},"这里用等号是因为：对象.属性=值",[19,80606,80607],{},"①利用对象字面量创建对象",[19,80609,80610],{},"const o={",[19,80612,80613],{},"name:'pink'",[19,80615,80616],{},"} ②利用new Object创建对象",[19,80618,80619],{},"const o=new Object({name:'pink'})",[19,80621,80622],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80624,80625],{},"构造函数创建对象的执行过程：",[19,80627,80628],{},[200,80629],{"alt":205,"src":80630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[260,80632,80634],{"id":80633},"_4103-实例成员","4.10.3 实例成员",[19,80636,80637],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[243,80639,80640,80643,80646],{},[246,80641,80642],{},"实例对象的属性和方法即为实例成员",[246,80644,80645],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[246,80647,80648],{},"构造函数创建的实例对象彼此独立互不影响",[260,80650,80652],{"id":80651},"_4104-静态成员","4.10.4 静态成员",[19,80654,80655],{},[200,80656],{"alt":205,"src":80657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80659,80660],{},"静态成员有Date.now() Math.PI Math.random()",[19,80662,80663],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80665,80666],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80668,80669],{},"function Pig(name) n {",[19,80671,80672],{},"this.name=name",[19,80674,1243],{},[19,80676,80677],{},"Pig.eyes=2",[19,80679,80680],{},"Pig.sayHai=function () { console.log(this) }",[19,80682,80683],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80685,80686],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80688,11505],{},[243,80690,80691,80694,80697,80700,80703],{},[246,80692,80693],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[246,80695,80696],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[246,80698,80699],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[246,80701,80702],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[246,80704,80705],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80707,80708],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[260,80710,80712],{"id":80711},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80714,80715],{},"内置构造函数包含：",[19,80717,80718],{},[200,80719],{"alt":205,"src":80720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80722,80723],{},[200,80724],{"alt":205,"src":80725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80727,80728],{},"这些基本数据类型，js对他们进行了包装",[51986,80730,80731],{},"\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",[22171,80733,80735],{"id":80734},"_41051-object","4.10.5.1 Object",[19,80737,80738],{},"Object 是内置的构造函数，用于创建普通对象",[19,80740,80741],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[280,80743,80745],{"className":50806,"code":80744,"language":50808,"meta":205,"style":205},"const user=new Object({name:'小明',age:15})\n",[25,80746,80747],{"__ignoreMap":205},[288,80748,80749],{"class":290,"line":291},[288,80750,80744],{"class":298},[19,80752,80753],{},"三个常用的静态方法：",[23083,80755,80757],{"id":80756},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80759,80760],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80762,80763],{},[200,80764],{"alt":205,"src":80765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80767,80768],{},[200,80769],{"alt":205,"src":80770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[280,80772,80774],{"className":53240,"code":80773,"language":53242,"meta":205,"style":205},"\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",[25,80775,80776,80784,80792,80797,80802,80807,80812,80817,80822,80830],{"__ignoreMap":205},[288,80777,80778,80780,80782],{"class":290,"line":291},[288,80779,1207],{"class":298},[288,80781,51973],{"class":51473},[288,80783,51480],{"class":298},[288,80785,80786,80788,80790],{"class":290,"line":206},[288,80787,52317],{"class":298},[288,80789,51986],{"class":51473},[288,80791,51480],{"class":298},[288,80793,80794],{"class":290,"line":1352},[288,80795,80796],{"class":298},"    const o = { name: 'pink', age: 6 }\n",[288,80798,80799],{"class":290,"line":1367},[288,80800,80801],{"class":298},"    \u002F\u002F 获得所有属性名\n",[288,80803,80804],{"class":290,"line":1373},[288,80805,80806],{"class":298},"    const arr = Object.keys(o)\n",[288,80808,80809],{"class":290,"line":1387},[288,80810,80811],{"class":298},"    console.log(arr)\n",[288,80813,80814],{"class":290,"line":1393},[288,80815,80816],{"class":298},"    \u002F\u002F 获得所有属性值\n",[288,80818,80819],{"class":290,"line":1484},[288,80820,80821],{"class":298},"    console.log(Object.values(o))\n",[288,80823,80824,80826,80828],{"class":290,"line":1490},[288,80825,52590],{"class":298},[288,80827,51986],{"class":51473},[288,80829,51480],{"class":298},[288,80831,80832,80834,80836],{"class":290,"line":1502},[288,80833,51958],{"class":298},[288,80835,51973],{"class":51473},[288,80837,51480],{"class":298},[23083,80839,80841],{"id":80840},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80843,80844],{},"Object.assign(oo,o)",[19,80846,80847],{},"后的东西添加给前 是追加",[19,80849,80850],{},[200,80851],{"alt":205,"src":80852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80854,80855],{},[200,80856],{"alt":205,"src":80857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[280,80859,80861],{"className":53240,"code":80860,"language":53242,"meta":205,"style":205},"\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",[25,80862,80863,80871,80879,80883,80887,80891,80895,80899,80903,80908,80913,80918,80923,80928,80936],{"__ignoreMap":205},[288,80864,80865,80867,80869],{"class":290,"line":291},[288,80866,1207],{"class":298},[288,80868,51973],{"class":51473},[288,80870,51480],{"class":298},[288,80872,80873,80875,80877],{"class":290,"line":206},[288,80874,52317],{"class":298},[288,80876,51986],{"class":51473},[288,80878,51480],{"class":298},[288,80880,80881],{"class":290,"line":1352},[288,80882,80796],{"class":298},[288,80884,80885],{"class":290,"line":1367},[288,80886,80801],{"class":298},[288,80888,80889],{"class":290,"line":1373},[288,80890,80806],{"class":298},[288,80892,80893],{"class":290,"line":1387},[288,80894,80811],{"class":298},[288,80896,80897],{"class":290,"line":1393},[288,80898,80816],{"class":298},[288,80900,80901],{"class":290,"line":1484},[288,80902,80821],{"class":298},[288,80904,80905],{"class":290,"line":1490},[288,80906,80907],{"class":298},"    const oo = {}\n",[288,80909,80910],{"class":290,"line":1502},[288,80911,80912],{"class":298},"    Object.assign(oo, o)\n",[288,80914,80915],{"class":290,"line":1784},[288,80916,80917],{"class":298},"    console.log(oo)\n",[288,80919,80920],{"class":290,"line":1789},[288,80921,80922],{"class":298},"    Object.assign(o, { gender: '女' })\n",[288,80924,80925],{"class":290,"line":1795},[288,80926,80927],{"class":298},"    console.log(o)\n",[288,80929,80930,80932,80934],{"class":290,"line":1800},[288,80931,52590],{"class":298},[288,80933,51986],{"class":51473},[288,80935,51480],{"class":298},[288,80937,80938,80940,80942],{"class":290,"line":1814},[288,80939,51958],{"class":298},[288,80941,51973],{"class":51473},[288,80943,51480],{"class":298},[19,80945,80946],{},[200,80947],{"alt":205,"src":80948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22171,80950,80952],{"id":80951},"_41052-array","4.10.5.2 Array",[19,80954,80955],{},"Array 是内置的构造函数，用于创建数组",[19,80957,80958],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[280,80960,80962],{"className":50806,"code":80961,"language":50808,"meta":205,"style":205},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[25,80963,80964,80969],{"__ignoreMap":205},[288,80965,80966],{"class":290,"line":291},[288,80967,80968],{"class":298},"const arr=new Array(3,5)\n",[288,80970,80971],{"class":290,"line":206},[288,80972,80973],{"class":298},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80975,80976],{},"Array的实例方法，这个方法是实例成员",[19,80978,80979],{},[200,80980],{"alt":205,"src":80981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23083,80983,80985],{"id":80984},"_410521-reduce","4.10.5.2.1 reduce",[19,80987,80988],{},[200,80989],{"alt":205,"src":80990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[280,80992,80994],{"className":53240,"code":80993,"language":53242,"meta":205,"style":205},"\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",[25,80995,80996,81004,81012,81017,81022,81027,81032,81036,81041,81046,81051,81055,81060,81065,81069,81074,81079,81084,81092],{"__ignoreMap":205},[288,80997,80998,81000,81002],{"class":290,"line":291},[288,80999,1207],{"class":298},[288,81001,51973],{"class":51473},[288,81003,51480],{"class":298},[288,81005,81006,81008,81010],{"class":290,"line":206},[288,81007,52317],{"class":298},[288,81009,51986],{"class":51473},[288,81011,51480],{"class":298},[288,81013,81014],{"class":290,"line":1352},[288,81015,81016],{"class":298},"    const arr = [1, 5, 8]\n",[288,81018,81019],{"class":290,"line":1367},[288,81020,81021],{"class":298},"    \u002F\u002F 1.没有初始值\n",[288,81023,81024],{"class":290,"line":1373},[288,81025,81026],{"class":298},"    const total = arr.reduce(function (prev, current) {\n",[288,81028,81029],{"class":290,"line":1387},[288,81030,81031],{"class":298},"      return prev + current\n",[288,81033,81034],{"class":290,"line":1393},[288,81035,33634],{"class":298},[288,81037,81038],{"class":290,"line":1484},[288,81039,81040],{"class":298},"    console.log(total)   \u002F\u002F14\n",[288,81042,81043],{"class":290,"line":1490},[288,81044,81045],{"class":298},"    \u002F\u002F 2.有初始值\n",[288,81047,81048],{"class":290,"line":1502},[288,81049,81050],{"class":298},"    const total1 = arr.reduce(function (prev, current) {\n",[288,81052,81053],{"class":290,"line":1784},[288,81054,81031],{"class":298},[288,81056,81057],{"class":290,"line":1789},[288,81058,81059],{"class":298},"    }, 10)\n",[288,81061,81062],{"class":290,"line":1795},[288,81063,81064],{"class":298},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[288,81066,81067],{"class":290,"line":1800},[288,81068,2572],{"emptyLinePlaceholder":217},[288,81070,81071],{"class":290,"line":1814},[288,81072,81073],{"class":298},"    \u002F\u002F 3.箭头函数写法\n",[288,81075,81076],{"class":290,"line":1819},[288,81077,81078],{"class":298},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[288,81080,81081],{"class":290,"line":1825},[288,81082,81083],{"class":298},"    console.log(total2)   \u002F\u002F24\n",[288,81085,81086,81088,81090],{"class":290,"line":1846},[288,81087,52590],{"class":298},[288,81089,51986],{"class":51473},[288,81091,51480],{"class":298},[288,81093,81094,81096,81098],{"class":290,"line":1851},[288,81095,51958],{"class":298},[288,81097,51973],{"class":51473},[288,81099,51480],{"class":298},[19,81101,81102],{},"执行过程：",[243,81104,81105,81108,81111],{},[246,81106,81107],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[246,81109,81110],{},"每一次循环，把返回值给作为下一次循环的上一次值",[246,81112,81113],{},"如果有起始值，则起始值作为上一次值",[280,81115,81117],{"className":53240,"code":81116,"language":53242,"meta":205,"style":205},"\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",[25,81118,81119,81127,81135,81139,81143,81147,81151,81155,81159,81164,81169,81174,81179,81184,81188,81192,81196,81200,81204,81208,81213,81217,81222,81226,81231,81236,81240,81244,81248,81256],{"__ignoreMap":205},[288,81120,81121,81123,81125],{"class":290,"line":291},[288,81122,1207],{"class":298},[288,81124,51973],{"class":51473},[288,81126,51480],{"class":298},[288,81128,81129,81131,81133],{"class":290,"line":206},[288,81130,52317],{"class":298},[288,81132,51986],{"class":51473},[288,81134,51480],{"class":298},[288,81136,81137],{"class":290,"line":1352},[288,81138,81016],{"class":298},[288,81140,81141],{"class":290,"line":1367},[288,81142,81021],{"class":298},[288,81144,81145],{"class":290,"line":1373},[288,81146,81026],{"class":298},[288,81148,81149],{"class":290,"line":1387},[288,81150,81031],{"class":298},[288,81152,81153],{"class":290,"line":1393},[288,81154,33634],{"class":298},[288,81156,81157],{"class":290,"line":1484},[288,81158,81040],{"class":298},[288,81160,81161],{"class":290,"line":1490},[288,81162,81163],{"class":298},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[288,81165,81166],{"class":290,"line":1502},[288,81167,81168],{"class":298},"    \u002F\u002F     1              5                    6\n",[288,81170,81171],{"class":290,"line":1784},[288,81172,81173],{"class":298},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[288,81175,81176],{"class":290,"line":1789},[288,81177,81178],{"class":298},"    \u002F\u002F     6              8                    14\n",[288,81180,81181],{"class":290,"line":1795},[288,81182,81183],{"class":298},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[288,81185,81186],{"class":290,"line":1800},[288,81187,81045],{"class":298},[288,81189,81190],{"class":290,"line":1814},[288,81191,81050],{"class":298},[288,81193,81194],{"class":290,"line":1819},[288,81195,81031],{"class":298},[288,81197,81198],{"class":290,"line":1825},[288,81199,81059],{"class":298},[288,81201,81202],{"class":290,"line":1846},[288,81203,81064],{"class":298},[288,81205,81206],{"class":290,"line":1851},[288,81207,81163],{"class":298},[288,81209,81210],{"class":290,"line":1865},[288,81211,81212],{"class":298},"    \u002F\u002F     10             1                     11\n",[288,81214,81215],{"class":290,"line":1870},[288,81216,81173],{"class":298},[288,81218,81219],{"class":290,"line":1899},[288,81220,81221],{"class":298},"    \u002F\u002F     11             5                    16\n",[288,81223,81224],{"class":290,"line":1904},[288,81225,81173],{"class":298},[288,81227,81228],{"class":290,"line":1921},[288,81229,81230],{"class":298},"    \u002F\u002F     16             8                    24\n",[288,81232,81233],{"class":290,"line":1926},[288,81234,81235],{"class":298},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[288,81237,81238],{"class":290,"line":1931},[288,81239,81073],{"class":298},[288,81241,81242],{"class":290,"line":1936},[288,81243,81078],{"class":298},[288,81245,81246],{"class":290,"line":1950},[288,81247,81083],{"class":298},[288,81249,81250,81252,81254],{"class":290,"line":1955},[288,81251,52590],{"class":298},[288,81253,51986],{"class":51473},[288,81255,51480],{"class":298},[288,81257,81258,81260,81262],{"class":290,"line":2749},[288,81259,51958],{"class":298},[288,81261,51973],{"class":51473},[288,81263,51480],{"class":298},[23083,81265,81267],{"id":81266},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81269,81270],{},[200,81271],{"alt":205,"src":81272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[280,81274,81276],{"className":53240,"code":81275,"language":53242,"meta":205,"style":205},"\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",[25,81277,81278,81286,81294,81299,81304,81309,81314,81318,81323,81328,81333,81338,81343,81348,81352,81357,81361,81366,81374],{"__ignoreMap":205},[288,81279,81280,81282,81284],{"class":290,"line":291},[288,81281,1207],{"class":298},[288,81283,51973],{"class":51473},[288,81285,51480],{"class":298},[288,81287,81288,81290,81292],{"class":290,"line":206},[288,81289,52317],{"class":298},[288,81291,51986],{"class":51473},[288,81293,51480],{"class":298},[288,81295,81296],{"class":290,"line":1352},[288,81297,81298],{"class":298},"    const arr = [\n",[288,81300,81301],{"class":290,"line":1367},[288,81302,81303],{"class":298},"      { name: '张三', salary: 10000 },\n",[288,81305,81306],{"class":290,"line":1373},[288,81307,81308],{"class":298},"      { name: '李四', salary: 10000 },\n",[288,81310,81311],{"class":290,"line":1387},[288,81312,81313],{"class":298},"      { name: '王五', salary: 10000 }\n",[288,81315,81316],{"class":290,"line":1393},[288,81317,53282],{"class":298},[288,81319,81320],{"class":290,"line":1484},[288,81321,81322],{"class":298},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[288,81324,81325],{"class":290,"line":1490},[288,81326,81327],{"class":298},"    \u002F\u002F prev是累计值\n",[288,81329,81330],{"class":290,"line":1502},[288,81331,81332],{"class":298},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[288,81334,81335],{"class":290,"line":1784},[288,81336,81337],{"class":298},"    console.log(total)\n",[288,81339,81340],{"class":290,"line":1789},[288,81341,81342],{"class":298},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[288,81344,81345],{"class":290,"line":1795},[288,81346,81347],{"class":298},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[288,81349,81350],{"class":290,"line":1800},[288,81351,81342],{"class":298},[288,81353,81354],{"class":290,"line":1814},[288,81355,81356],{"class":298},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[288,81358,81359],{"class":290,"line":1819},[288,81360,81342],{"class":298},[288,81362,81363],{"class":290,"line":1825},[288,81364,81365],{"class":298},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[288,81367,81368,81370,81372],{"class":290,"line":1846},[288,81369,52590],{"class":298},[288,81371,51986],{"class":51473},[288,81373,51480],{"class":298},[288,81375,81376,81378,81380],{"class":290,"line":1851},[288,81377,51958],{"class":298},[288,81379,51973],{"class":51473},[288,81381,51480],{"class":298},[23083,81383,81385],{"id":81384},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81387,81388],{},[200,81389],{"alt":205,"src":81390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81392,81393],{},[200,81394],{"alt":205,"src":81395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[243,81397,81398],{},[246,81399,81400],{},"find()",[19,81402,81403],{},"循环查找，找到第一个就ok",[19,81405,81406],{},[104,81407,81410],{"href":81408,"rel":81409},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[108],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[280,81412,81414],{"className":50806,"code":81413,"language":50808,"meta":205,"style":205},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[25,81415,81416,81421,81426],{"__ignoreMap":205},[288,81417,81418],{"class":290,"line":291},[288,81419,81420],{"class":298},"const array1 = [5, 12, 8, 130, 44]\n",[288,81422,81423],{"class":290,"line":206},[288,81424,81425],{"class":298},"const found = array1.find((element) => element > 10)\n",[288,81427,81428],{"class":290,"line":1352},[288,81429,81430],{"class":298},"console.log(found)  \u002F\u002F12\n",[19,81432,81433,81435,81436,81441,81442,81445,81446,81448,81449,81454,81455,81457,81458,81460,81461,81463,81464],{},[25,81434,81400],{}," 方法是一个",[104,81437,81440],{"href":81438,"rel":81439},"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",[108],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[25,81443,81444],{},"callbackFn"," 函数，直到 ",[25,81447,81444],{}," 返回一个",[104,81450,81453],{"href":81451,"rel":81452},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[108],"真值","。然后 ",[25,81456,81400],{}," 返回该元素并停止迭代数组。如果 ",[25,81459,81444],{}," 从未返回真值，则 ",[25,81462,81400],{}," 返回 ",[25,81465,81466],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[280,81468,81470],{"className":53240,"code":81469,"language":53242,"meta":205,"style":205},"\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",[25,81471,81472,81480,81488,81493,81498,81503,81507,81512,81517,81521,81526,81531,81535,81539,81544,81549,81553,81557,81562,81567,81572,81577,81582,81586,81591,81596,81601,81606,81610,81615,81623],{"__ignoreMap":205},[288,81473,81474,81476,81478],{"class":290,"line":291},[288,81475,1207],{"class":298},[288,81477,51973],{"class":51473},[288,81479,51480],{"class":298},[288,81481,81482,81484,81486],{"class":290,"line":206},[288,81483,52317],{"class":298},[288,81485,51986],{"class":51473},[288,81487,51480],{"class":298},[288,81489,81490],{"class":290,"line":1352},[288,81491,81492],{"class":298},"    const arr = ['red', 'blue', 'green']\n",[288,81494,81495],{"class":290,"line":1367},[288,81496,81497],{"class":298},"    const found = arr.find(item => item === 'pink')\n",[288,81499,81500],{"class":290,"line":1373},[288,81501,81502],{"class":298},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[288,81504,81505],{"class":290,"line":1387},[288,81506,2572],{"emptyLinePlaceholder":217},[288,81508,81509],{"class":290,"line":1393},[288,81510,81511],{"class":298},"    \u002F\u002F 使用场景，用于查找数据\n",[288,81513,81514],{"class":290,"line":1484},[288,81515,81516],{"class":298},"    const arr1 = [\n",[288,81518,81519],{"class":290,"line":1490},[288,81520,79559],{"class":298},[288,81522,81523],{"class":290,"line":1502},[288,81524,81525],{"class":298},"        name: '小米',\n",[288,81527,81528],{"class":290,"line":1784},[288,81529,81530],{"class":298},"        price: 1999\n",[288,81532,81533],{"class":290,"line":1789},[288,81534,78065],{"class":298},[288,81536,81537],{"class":290,"line":1795},[288,81538,79559],{"class":298},[288,81540,81541],{"class":290,"line":1800},[288,81542,81543],{"class":298},"        name: '华为',\n",[288,81545,81546],{"class":290,"line":1814},[288,81547,81548],{"class":298},"        price: 3999\n",[288,81550,81551],{"class":290,"line":1819},[288,81552,52571],{"class":298},[288,81554,81555],{"class":290,"line":1825},[288,81556,53282],{"class":298},[288,81558,81559],{"class":290,"line":1846},[288,81560,81561],{"class":298},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[288,81563,81564],{"class":290,"line":1851},[288,81565,81566],{"class":298},"    \u002F\u002F const found1 = arr1.find(item => {\n",[288,81568,81569],{"class":290,"line":1865},[288,81570,81571],{"class":298},"    \u002F\u002F   if (item.name === '小米') {\n",[288,81573,81574],{"class":290,"line":1870},[288,81575,81576],{"class":298},"    \u002F\u002F     return item\n",[288,81578,81579],{"class":290,"line":1899},[288,81580,81581],{"class":298},"    \u002F\u002F   }\n",[288,81583,81584],{"class":290,"line":1904},[288,81585,63463],{"class":298},[288,81587,81588],{"class":290,"line":1921},[288,81589,81590],{"class":298},"    \u002F\u002F 另一种写法\n",[288,81592,81593],{"class":290,"line":1926},[288,81594,81595],{"class":298},"    const found1 = arr1.find(item => {\n",[288,81597,81598],{"class":290,"line":1931},[288,81599,81600],{"class":298},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[288,81602,81603],{"class":290,"line":1936},[288,81604,81605],{"class":298},"      return item.name = '小米'\n",[288,81607,81608],{"class":290,"line":1950},[288,81609,33634],{"class":298},[288,81611,81612],{"class":290,"line":1955},[288,81613,81614],{"class":298},"    console.log(found1)\n",[288,81616,81617,81619,81621],{"class":290,"line":2749},[288,81618,52590],{"class":298},[288,81620,51986],{"class":51473},[288,81622,51480],{"class":298},[288,81624,81625,81627,81629],{"class":290,"line":2763},[288,81626,51958],{"class":298},[288,81628,51973],{"class":51473},[288,81630,51480],{"class":298},[19,81632,81633],{},[200,81634],{"alt":205,"src":81635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81637,81638],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[243,81640,81641],{"start":206},[246,81642,81643],{},"every()返回的是布尔值",[19,81645,81646],{},[104,81647,81650],{"href":81648,"rel":81649},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[108],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81652,81653],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81655,81656],{},"some是只有有一个就没问题",[19,81658,81659],{},"every是必须全是才行",[280,81661,81665],{"className":81662,"code":81663,"language":81664,"meta":205,"style":205},"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",[25,81666,81667,81683,81697,81701,81710],{"__ignoreMap":205},[288,81668,81669,81671,81674,81676,81678,81681],{"class":290,"line":291},[288,81670,54622],{"class":294},[288,81672,81673],{"class":298}," isBigEnough(element, ",[288,81675,74231],{"class":294},[288,81677,12608],{"class":298},[288,81679,81680],{"class":294},"array",[288,81682,12615],{"class":298},[288,81684,81685,81688,81691,81693,81695],{"class":290,"line":206},[288,81686,81687],{"class":294},"  return",[288,81689,81690],{"class":298}," element ",[288,81692,1882],{"class":294},[288,81694,2210],{"class":347},[288,81696,1463],{"class":298},[288,81698,81699],{"class":290,"line":1352},[288,81700,1737],{"class":298},[288,81702,81703,81706,81708],{"class":290,"line":1367},[288,81704,81705],{"class":298},"[12, 5, 8, 130, 44].every(isBigEnough); ",[288,81707,33502],{"class":294},[288,81709,54689],{"class":298},[288,81711,81712,81715,81717],{"class":290,"line":1373},[288,81713,81714],{"class":298},"[12, 54, 18, 130, 44].every(isBigEnough); ",[288,81716,33502],{"class":294},[288,81718,58113],{"class":298},[280,81720,81722],{"className":53240,"code":81721,"language":53242,"meta":205,"style":205},"\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",[25,81723,81724,81732,81740,81745,81749,81754,81759,81767],{"__ignoreMap":205},[288,81725,81726,81728,81730],{"class":290,"line":291},[288,81727,1207],{"class":298},[288,81729,51973],{"class":51473},[288,81731,51480],{"class":298},[288,81733,81734,81736,81738],{"class":290,"line":206},[288,81735,52317],{"class":298},[288,81737,51986],{"class":51473},[288,81739,51480],{"class":298},[288,81741,81742],{"class":290,"line":1352},[288,81743,81744],{"class":298},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[288,81746,81747],{"class":290,"line":1367},[288,81748,78495],{"class":298},[288,81750,81751],{"class":290,"line":1373},[288,81752,81753],{"class":298},"    const flag = arr.every(item => item >= 10)\n",[288,81755,81756],{"class":290,"line":1387},[288,81757,81758],{"class":298},"    console.log(flag)    \u002F\u002Ftrue\n",[288,81760,81761,81763,81765],{"class":290,"line":1393},[288,81762,52590],{"class":298},[288,81764,51986],{"class":51473},[288,81766,51480],{"class":298},[288,81768,81769,81771,81773],{"class":290,"line":1484},[288,81770,51958],{"class":298},[288,81772,51973],{"class":51473},[288,81774,51480],{"class":298},[280,81776,81778],{"className":53240,"code":81777,"language":53242,"meta":205,"style":205},"\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",[25,81779,81780,81788,81796,81800,81805,81810,81815,81823],{"__ignoreMap":205},[288,81781,81782,81784,81786],{"class":290,"line":291},[288,81783,1207],{"class":298},[288,81785,51973],{"class":51473},[288,81787,51480],{"class":298},[288,81789,81790,81792,81794],{"class":290,"line":206},[288,81791,52317],{"class":298},[288,81793,51986],{"class":51473},[288,81795,51480],{"class":298},[288,81797,81798],{"class":290,"line":1352},[288,81799,81744],{"class":298},[288,81801,81802],{"class":290,"line":1367},[288,81803,81804],{"class":298},"    const arr = [10, 0, 5]\n",[288,81806,81807],{"class":290,"line":1373},[288,81808,81809],{"class":298},"    const flag = arr.some(item => item >= 10)\n",[288,81811,81812],{"class":290,"line":1387},[288,81813,81814],{"class":298},"    console.log(flag)   \u002F\u002Ftrue\n",[288,81816,81817,81819,81821],{"class":290,"line":1393},[288,81818,52590],{"class":298},[288,81820,51986],{"class":51473},[288,81822,51480],{"class":298},[288,81824,81825,81827,81829],{"class":290,"line":1484},[288,81826,51958],{"class":298},[288,81828,51973],{"class":51473},[288,81830,51480],{"class":298},[23083,81832,81834],{"id":81833},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81836,81837],{},[200,81838],{"alt":205,"src":81839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[280,81841,81843],{"className":50806,"code":81842,"language":50808,"meta":205,"style":205},"\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",[25,81844,81845,81855,81869,81873,81881,81895,81915,81927,81935,81942,81954,81966,81978,81990,82000,82010,82014,82022,82030,82034,82042,82054,82062,82084,82089,82094,82127,82135,82143,82147],{"__ignoreMap":205},[288,81846,81847,81849,81851,81853],{"class":290,"line":291},[288,81848,51470],{"class":298},[288,81850,51474],{"class":51473},[288,81852,51477],{"class":2135},[288,81854,51480],{"class":298},[288,81856,81857,81859,81861,81863,81865,81867],{"class":290,"line":206},[288,81858,1207],{"class":298},[288,81860,50808],{"class":51473},[288,81862,51489],{"class":2135},[288,81864,344],{"class":298},[288,81866,51494],{"class":403},[288,81868,51480],{"class":298},[288,81870,81871],{"class":290,"line":1352},[288,81872,2572],{"emptyLinePlaceholder":217},[288,81874,81875,81877,81879],{"class":290,"line":1367},[288,81876,1207],{"class":298},[288,81878,51507],{"class":51473},[288,81880,51480],{"class":298},[288,81882,81883,81885,81887,81889,81891,81893],{"class":290,"line":1373},[288,81884,52317],{"class":298},[288,81886,51517],{"class":51473},[288,81888,51520],{"class":2135},[288,81890,344],{"class":298},[288,81892,51525],{"class":403},[288,81894,51480],{"class":298},[288,81896,81897,81899,81901,81903,81905,81907,81909,81911,81913],{"class":290,"line":1387},[288,81898,52317],{"class":298},[288,81900,51517],{"class":51473},[288,81902,15093],{"class":2135},[288,81904,344],{"class":298},[288,81906,51564],{"class":403},[288,81908,51544],{"class":2135},[288,81910,344],{"class":298},[288,81912,51571],{"class":403},[288,81914,51480],{"class":298},[288,81916,81917,81919,81921,81923,81925],{"class":290,"line":1393},[288,81918,52317],{"class":298},[288,81920,51580],{"class":51473},[288,81922,51583],{"class":298},[288,81924,51580],{"class":51473},[288,81926,51480],{"class":298},[288,81928,81929,81931,81933],{"class":290,"line":1484},[288,81930,52317],{"class":298},[288,81932,5299],{"class":51473},[288,81934,51480],{"class":298},[288,81936,81937,81940],{"class":290,"line":1490},[288,81938,81939],{"class":51473},"    div",[288,81941,15745],{"class":298},[288,81943,81944,81946,81948,81950,81952],{"class":290,"line":1502},[288,81945,54944],{"class":347},[288,81947,51610],{"class":298},[288,81949,1894],{"class":347},[288,81951,51665],{"class":294},[288,81953,1463],{"class":298},[288,81955,81956,81958,81960,81962,81964],{"class":290,"line":1784},[288,81957,54958],{"class":347},[288,81959,51610],{"class":298},[288,81961,698],{"class":347},[288,81963,51665],{"class":294},[288,81965,1463],{"class":298},[288,81967,81968,81970,81972,81974,81976],{"class":290,"line":1789},[288,81969,57532],{"class":347},[288,81971,51610],{"class":298},[288,81973,698],{"class":347},[288,81975,51665],{"class":294},[288,81977,1463],{"class":298},[288,81979,81980,81982,81984,81986,81988],{"class":290,"line":1795},[288,81981,65306],{"class":347},[288,81983,51610],{"class":298},[288,81985,795],{"class":347},[288,81987,51665],{"class":294},[288,81989,1463],{"class":298},[288,81991,81992,81994,81996,81998],{"class":290,"line":1800},[288,81993,57459],{"class":347},[288,81995,51610],{"class":298},[288,81997,51765],{"class":347},[288,81999,1463],{"class":298},[288,82001,82002,82004,82006,82008],{"class":290,"line":1814},[288,82003,55057],{"class":347},[288,82005,51610],{"class":298},[288,82007,51818],{"class":347},[288,82009,1463],{"class":298},[288,82011,82012],{"class":290,"line":1819},[288,82013,2359],{"class":298},[288,82015,82016,82018,82020],{"class":290,"line":1825},[288,82017,52590],{"class":298},[288,82019,5299],{"class":51473},[288,82021,51480],{"class":298},[288,82023,82024,82026,82028],{"class":290,"line":1846},[288,82025,51958],{"class":298},[288,82027,51507],{"class":51473},[288,82029,51480],{"class":298},[288,82031,82032],{"class":290,"line":1851},[288,82033,2572],{"emptyLinePlaceholder":217},[288,82035,82036,82038,82040],{"class":290,"line":1865},[288,82037,1207],{"class":298},[288,82039,51973],{"class":51473},[288,82041,51480],{"class":298},[288,82043,82044,82046,82048,82050,82052],{"class":290,"line":1870},[288,82045,52317],{"class":298},[288,82047,51784],{"class":51473},[288,82049,55487],{"class":298},[288,82051,51784],{"class":51473},[288,82053,51480],{"class":298},[288,82055,82056,82058,82060],{"class":290,"line":1899},[288,82057,52317],{"class":298},[288,82059,51986],{"class":51473},[288,82061,51480],{"class":298},[288,82063,82064,82066,82069,82071,82074,82077,82079,82082],{"class":290,"line":1904},[288,82065,11394],{"class":294},[288,82067,82068],{"class":347}," spec",[288,82070,13737],{"class":294},[288,82072,82073],{"class":298}," { size: ",[288,82075,82076],{"class":403},"'40cm*40cm'",[288,82078,55637],{"class":298},[288,82080,82081],{"class":403},"'黑色'",[288,82083,55777],{"class":298},[288,82085,82086],{"class":290,"line":1921},[288,82087,82088],{"class":357},"    \u002F\u002F const arr = Object.values(spec)\n",[288,82090,82091],{"class":290,"line":1926},[288,82092,82093],{"class":357},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[288,82095,82096,82098,82100,82102,82105,82107,82109,82112,82115,82118,82120,82122,82125],{"class":290,"line":1931},[288,82097,52580],{"class":298},[288,82099,54572],{"class":2135},[288,82101,299],{"class":298},[288,82103,82104],{"class":403},"'div'",[288,82106,74422],{"class":298},[288,82108,344],{"class":294},[288,82110,82111],{"class":298}," Object.",[288,82113,82114],{"class":2135},"values",[288,82116,82117],{"class":298},"(spec).",[288,82119,74396],{"class":2135},[288,82121,299],{"class":298},[288,82123,82124],{"class":403},"'\u002F'",[288,82126,305],{"class":298},[288,82128,82129,82131,82133],{"class":290,"line":1936},[288,82130,52590],{"class":298},[288,82132,51986],{"class":51473},[288,82134,51480],{"class":298},[288,82136,82137,82139,82141],{"class":290,"line":1950},[288,82138,51958],{"class":298},[288,82140,51973],{"class":51473},[288,82142,51480],{"class":298},[288,82144,82145],{"class":290,"line":1955},[288,82146,2572],{"emptyLinePlaceholder":217},[288,82148,82149,82151,82153],{"class":290,"line":2749},[288,82150,51958],{"class":298},[288,82152,50808],{"class":51473},[288,82154,51480],{"class":298},[19,82156,82157],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23083,82159,82161],{"id":82160},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82163,82164],{},"静态方法，将伪数组转换为真数组",[19,82166,82167],{},[200,82168],{"alt":205,"src":82169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[280,82171,82173],{"className":53240,"code":82172,"language":53242,"meta":205,"style":205},"\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",[25,82174,82175,82183,82191,82203,82215,82227,82235,82243,82248,82253,82258,82263,82271],{"__ignoreMap":205},[288,82176,82177,82179,82181],{"class":290,"line":291},[288,82178,1207],{"class":298},[288,82180,51973],{"class":51473},[288,82182,51480],{"class":298},[288,82184,82185,82187,82189],{"class":290,"line":206},[288,82186,52317],{"class":298},[288,82188,1304],{"class":51473},[288,82190,51480],{"class":298},[288,82192,82193,82195,82197,82199,82201],{"class":290,"line":1352},[288,82194,51514],{"class":298},[288,82196,246],{"class":51473},[288,82198,55487],{"class":298},[288,82200,246],{"class":51473},[288,82202,51480],{"class":298},[288,82204,82205,82207,82209,82211,82213],{"class":290,"line":1367},[288,82206,51514],{"class":298},[288,82208,246],{"class":51473},[288,82210,55487],{"class":298},[288,82212,246],{"class":51473},[288,82214,51480],{"class":298},[288,82216,82217,82219,82221,82223,82225],{"class":290,"line":1373},[288,82218,51514],{"class":298},[288,82220,246],{"class":51473},[288,82222,55487],{"class":298},[288,82224,246],{"class":51473},[288,82226,51480],{"class":298},[288,82228,82229,82231,82233],{"class":290,"line":1387},[288,82230,52590],{"class":298},[288,82232,1304],{"class":51473},[288,82234,51480],{"class":298},[288,82236,82237,82239,82241],{"class":290,"line":1393},[288,82238,52317],{"class":298},[288,82240,51986],{"class":51473},[288,82242,51480],{"class":298},[288,82244,82245],{"class":290,"line":1484},[288,82246,82247],{"class":298},"    const lis = document.querySelectorAll('li')\n",[288,82249,82250],{"class":290,"line":1490},[288,82251,82252],{"class":298},"    const liss = Array.from(lis)\n",[288,82254,82255],{"class":290,"line":1502},[288,82256,82257],{"class":298},"    liss.pop()\n",[288,82259,82260],{"class":290,"line":1784},[288,82261,82262],{"class":298},"    console.log(liss)\n",[288,82264,82265,82267,82269],{"class":290,"line":1789},[288,82266,52590],{"class":298},[288,82268,51986],{"class":51473},[288,82270,51480],{"class":298},[288,82272,82273,82275,82277],{"class":290,"line":1795},[288,82274,51958],{"class":298},[288,82276,51973],{"class":51473},[288,82278,51480],{"class":298},[19,82280,82281],{},[200,82282],{"alt":205,"src":82283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22171,82285,82287],{"id":82286},"_41053-string","4.10.5.3 String",[19,82289,82290],{},[200,82291],{"alt":205,"src":82292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23083,82294,82296],{"id":82295},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[280,82298,82300],{"className":53240,"code":82299,"language":53242,"meta":205,"style":205},"\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",[25,82301,82302,82310,82318,82323,82328,82333,82337,82342,82347,82352,82360],{"__ignoreMap":205},[288,82303,82304,82306,82308],{"class":290,"line":291},[288,82305,1207],{"class":298},[288,82307,51973],{"class":51473},[288,82309,51480],{"class":298},[288,82311,82312,82314,82316],{"class":290,"line":206},[288,82313,52317],{"class":298},[288,82315,51986],{"class":51473},[288,82317,51480],{"class":298},[288,82319,82320],{"class":290,"line":1352},[288,82321,82322],{"class":298},"    \u002F\u002F 把字符串转化为数组\n",[288,82324,82325],{"class":290,"line":1367},[288,82326,82327],{"class":298},"    const str = 'pink,red'\n",[288,82329,82330],{"class":290,"line":1373},[288,82331,82332],{"class":298},"    const arr = str.split(',')\n",[288,82334,82335],{"class":290,"line":1387},[288,82336,80811],{"class":298},[288,82338,82339],{"class":290,"line":1393},[288,82340,82341],{"class":298},"    const str1 = '2025-8-25'\n",[288,82343,82344],{"class":290,"line":1484},[288,82345,82346],{"class":298},"    const arr1 = str1.split('-')\n",[288,82348,82349],{"class":290,"line":1490},[288,82350,82351],{"class":298},"    console.log(arr1)\n",[288,82353,82354,82356,82358],{"class":290,"line":1502},[288,82355,52590],{"class":298},[288,82357,51986],{"class":51473},[288,82359,51480],{"class":298},[288,82361,82362,82364,82366],{"class":290,"line":1784},[288,82363,51958],{"class":298},[288,82365,51973],{"class":51473},[288,82367,51480],{"class":298},[23083,82369,82371],{"id":82370},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82373,5354],{},[19,82375,82376],{},"substring(indexStart)",[19,82378,82379],{},"substring(indexStart, indexEnd)",[1304,82381,82382,82393,82405,82415],{},[246,82383,82384,82385,82388,82389,82392],{},"如果省略了 ",[25,82386,82387],{},"indexEnd","，则 ",[25,82390,82391],{},"substring()"," 提取字符直到字符串的末尾",[246,82394,82395,82396,82399,82400,82388,82402,82404],{},"如果 ",[25,82397,82398],{},"indexStart"," 等于 ",[25,82401,82387],{},[25,82403,82391],{}," 返回一个空字符串",[246,82406,82395,82407,82409,82410,82388,82412,82414],{},[25,82408,82398],{}," 大于 ",[25,82411,82387],{},[25,82413,82391],{}," 的效果就像交换了这两个参数一样",[246,82416,82417],{},"结束的索引号不包含想要截取的部分",[280,82419,82421],{"className":81662,"code":82420,"language":81664,"meta":205,"style":205},"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",[25,82422,82423,82435,82439,82473,82503,82507,82538,82542,82569,82599,82629,82633,82664],{"__ignoreMap":205},[288,82424,82425,82428,82430,82433],{"class":290,"line":291},[288,82426,82427],{"class":298},"const anyString ",[288,82429,344],{"class":294},[288,82431,82432],{"class":403}," \"Mozilla\"",[288,82434,1463],{"class":298},[288,82436,82437],{"class":290,"line":206},[288,82438,2572],{"emptyLinePlaceholder":217},[288,82440,82441,82444,82446,82448,82450,82453,82455,82458,82460,82462,82464,82466,82468,82470],{"class":290,"line":1352},[288,82442,82443],{"class":347},"console",[288,82445,855],{"class":298},[288,82447,58420],{"class":347},[288,82449,299],{"class":298},[288,82451,82452],{"class":347},"anyString",[288,82454,855],{"class":298},[288,82456,82457],{"class":347},"substring",[288,82459,299],{"class":298},[288,82461,490],{"class":347},[288,82463,12608],{"class":298},[288,82465,516],{"class":347},[288,82467,75426],{"class":298},[288,82469,33502],{"class":294},[288,82471,82472],{"class":403}," 'M'\n",[288,82474,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501],{"class":290,"line":1367},[288,82476,82443],{"class":347},[288,82478,855],{"class":298},[288,82480,58420],{"class":347},[288,82482,299],{"class":298},[288,82484,82452],{"class":347},[288,82486,855],{"class":298},[288,82488,82457],{"class":347},[288,82490,299],{"class":298},[288,82492,516],{"class":347},[288,82494,12608],{"class":298},[288,82496,490],{"class":347},[288,82498,75426],{"class":298},[288,82500,33502],{"class":294},[288,82502,82472],{"class":403},[288,82504,82505],{"class":290,"line":1373},[288,82506,2572],{"emptyLinePlaceholder":217},[288,82508,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527,82529,82531,82533,82535],{"class":290,"line":1387},[288,82510,82443],{"class":347},[288,82512,855],{"class":298},[288,82514,58420],{"class":347},[288,82516,299],{"class":298},[288,82518,82452],{"class":347},[288,82520,855],{"class":298},[288,82522,82457],{"class":347},[288,82524,299],{"class":298},[288,82526,490],{"class":347},[288,82528,12608],{"class":298},[288,82530,641],{"class":347},[288,82532,75426],{"class":298},[288,82534,33502],{"class":294},[288,82536,82537],{"class":403}," 'Mozill'\n",[288,82539,82540],{"class":290,"line":1393},[288,82541,2572],{"emptyLinePlaceholder":217},[288,82543,82544,82546,82548,82550,82552,82554,82556,82558,82560,82562,82564,82566],{"class":290,"line":1484},[288,82545,82443],{"class":347},[288,82547,855],{"class":298},[288,82549,58420],{"class":347},[288,82551,299],{"class":298},[288,82553,82452],{"class":347},[288,82555,855],{"class":298},[288,82557,82457],{"class":347},[288,82559,299],{"class":298},[288,82561,590],{"class":347},[288,82563,75426],{"class":298},[288,82565,33502],{"class":294},[288,82567,82568],{"class":403}," 'lla'\n",[288,82570,82571,82573,82575,82577,82579,82581,82583,82585,82587,82589,82591,82593,82595,82597],{"class":290,"line":1490},[288,82572,82443],{"class":347},[288,82574,855],{"class":298},[288,82576,58420],{"class":347},[288,82578,299],{"class":298},[288,82580,82452],{"class":347},[288,82582,855],{"class":298},[288,82584,82457],{"class":347},[288,82586,299],{"class":298},[288,82588,590],{"class":347},[288,82590,12608],{"class":298},[288,82592,666],{"class":347},[288,82594,75482],{"class":298},[288,82596,33502],{"class":294},[288,82598,82568],{"class":403},[288,82600,82601,82603,82605,82607,82609,82611,82613,82615,82617,82619,82621,82623,82625,82627],{"class":290,"line":1502},[288,82602,82443],{"class":347},[288,82604,855],{"class":298},[288,82606,58420],{"class":347},[288,82608,299],{"class":298},[288,82610,82452],{"class":347},[288,82612,855],{"class":298},[288,82614,82457],{"class":347},[288,82616,299],{"class":298},[288,82618,666],{"class":347},[288,82620,12608],{"class":298},[288,82622,590],{"class":347},[288,82624,75426],{"class":298},[288,82626,33502],{"class":294},[288,82628,82568],{"class":403},[288,82630,82631],{"class":290,"line":1784},[288,82632,2572],{"emptyLinePlaceholder":217},[288,82634,82635,82637,82639,82641,82643,82645,82647,82649,82651,82653,82655,82657,82659,82661],{"class":290,"line":1789},[288,82636,82443],{"class":347},[288,82638,855],{"class":298},[288,82640,58420],{"class":347},[288,82642,299],{"class":298},[288,82644,82452],{"class":347},[288,82646,855],{"class":298},[288,82648,82457],{"class":347},[288,82650,299],{"class":298},[288,82652,490],{"class":347},[288,82654,12608],{"class":298},[288,82656,666],{"class":347},[288,82658,75426],{"class":298},[288,82660,33502],{"class":294},[288,82662,82663],{"class":403}," 'Mozilla'\n",[288,82665,82666,82668,82670,82672,82674,82676,82678,82680,82682,82684,82686,82688,82690,82692],{"class":290,"line":1795},[288,82667,82443],{"class":347},[288,82669,855],{"class":298},[288,82671,58420],{"class":347},[288,82673,299],{"class":298},[288,82675,82452],{"class":347},[288,82677,855],{"class":298},[288,82679,82457],{"class":347},[288,82681,299],{"class":298},[288,82683,490],{"class":347},[288,82685,12608],{"class":298},[288,82687,743],{"class":347},[288,82689,75426],{"class":298},[288,82691,33502],{"class":294},[288,82693,82663],{"class":403},[23083,82695,82697],{"id":82696},"_410533-startswith","4.10.5.3.3 startsWith",[19,82699,82700,82703,82704,82709,82710,82712,82713],{},[25,82701,82702],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[448,82705,82706],{},[25,82707,82708],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[25,82711,1535],{}," 或 ",[25,82714,66193],{},[280,82716,82718],{"className":77668,"code":82717,"language":77670,"meta":205,"style":205},"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",[25,82719,82720,82732,82751,82756,82776],{"__ignoreMap":205},[288,82721,82722,82724,82727,82729],{"class":290,"line":291},[288,82723,6965],{"class":294},[288,82725,82726],{"class":298}," str1 ",[288,82728,344],{"class":294},[288,82730,82731],{"class":403}," \"Saturday night plans\"\n",[288,82733,82734,82736,82738,82741,82744,82746,82749],{"class":290,"line":206},[288,82735,77705],{"class":298},[288,82737,58420],{"class":2135},[288,82739,82740],{"class":298},"(str1.",[288,82742,82743],{"class":2135},"startsWith",[288,82745,299],{"class":298},[288,82747,82748],{"class":403},"\"Sat\"",[288,82750,30670],{"class":298},[288,82752,82753],{"class":290,"line":1352},[288,82754,82755],{"class":357},"\u002F\u002F Expected output: true\n",[288,82757,82758,82760,82762,82764,82766,82768,82770,82772,82774],{"class":290,"line":1367},[288,82759,77705],{"class":298},[288,82761,58420],{"class":2135},[288,82763,82740],{"class":298},[288,82765,82743],{"class":2135},[288,82767,299],{"class":298},[288,82769,82748],{"class":403},[288,82771,12608],{"class":298},[288,82773,370],{"class":347},[288,82775,30670],{"class":298},[288,82777,82778],{"class":290,"line":1373},[288,82779,82780],{"class":357},"\u002F\u002F Expected output: false\n",[280,82782,82784],{"className":50806,"code":82783,"language":50808,"meta":205,"style":205},"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",[25,82785,82786,82791,82796,82800,82805,82810],{"__ignoreMap":205},[288,82787,82788],{"class":290,"line":291},[288,82789,82790],{"class":298},"startsWith(searchString)\n",[288,82792,82793],{"class":290,"line":206},[288,82794,82795],{"class":298},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[288,82797,82798],{"class":290,"line":1352},[288,82799,2572],{"emptyLinePlaceholder":217},[288,82801,82802],{"class":290,"line":1367},[288,82803,82804],{"class":298},"const str3 = 'pink老师上课中'\n",[288,82806,82807],{"class":290,"line":1373},[288,82808,82809],{"class":298},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[288,82811,82812],{"class":290,"line":1387},[288,82813,82814],{"class":298},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23083,82816,82818],{"id":82817},"_410534-includes","4.10.5.3.4 includes",[19,82820,82821],{},"includes(searchString) includes(searchString, position)",[243,82823,82824],{},[246,82825,82826],{},"searchString:",[19,82828,82829,82830,82832,82833,82838,82839,82844,82845,21673,82848,82851,82852,82855],{},"一个要在 ",[25,82831,1472],{}," 中查找的字符串。",[104,82834,82837],{"href":82835,"rel":82836},"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",[108],"不能是正则表达式","。所有非正则表达式的值都会被",[104,82840,82843],{"href":82841,"rel":82842},"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",[108],"强制转换为字符串","，因此如果该参数被省略或传入 ",[25,82846,82847],{},"undefined",[25,82849,82850],{},"includes()"," 方法会在字符串中搜索 ",[25,82853,82854],{},"\"undefined\"","，这通常不是你想要的",[243,82857,82858],{"start":206},[246,82859,82860,1156],{},[25,82861,82862],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82864,82865,82866,82869,82870],{},"在字符串中开始搜索 ",[25,82867,82868],{},"searchString"," 的位置。默认值为 ",[25,82871,490],{},[243,82873,82874],{"start":1352},[246,82875,82876],{},"返回值：",[19,82878,82879,82880,82882,82883,82887,82888],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[25,82881,82868],{}," 为空字符串的情况），则返回 ",[448,82884,82885],{},[25,82886,1535],{}," ，否则返回 ",[448,82889,82890],{},[25,82891,66193],{},[243,82893,82894],{"start":1367},[246,82895,82896],{},"异常：",[19,82898,82395,82899,13968,82901,82905],{},[25,82900,82868],{},[104,82902,82904],{"href":82835,"rel":82903},[108],"是一个正则表达式","，则会抛出",[19,82907,82908],{},"只要是有就是true，不需要非得以谁开头结尾",[280,82910,82912],{"className":77668,"code":82911,"language":77670,"meta":205,"style":205},"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",[25,82913,82914,82925,82948,82967,82987,83009,83028],{"__ignoreMap":205},[288,82915,82916,82918,82920,82922],{"class":290,"line":291},[288,82917,6965],{"class":294},[288,82919,79948],{"class":298},[288,82921,344],{"class":294},[288,82923,82924],{"class":403}," \"To be, or not to be, that is the question.\"\n",[288,82926,82927,82929,82931,82934,82937,82939,82942,82945],{"class":290,"line":206},[288,82928,77705],{"class":298},[288,82930,58420],{"class":2135},[288,82932,82933],{"class":298},"(str.",[288,82935,82936],{"class":2135},"includes",[288,82938,299],{"class":298},[288,82940,82941],{"class":403},"\"To be\"",[288,82943,82944],{"class":298},"))",[288,82946,82947],{"class":357},"  \u002F\u002F true\n",[288,82949,82950,82952,82954,82956,82958,82960,82963,82965],{"class":290,"line":1352},[288,82951,77705],{"class":298},[288,82953,58420],{"class":2135},[288,82955,82933],{"class":298},[288,82957,82936],{"class":2135},[288,82959,299],{"class":298},[288,82961,82962],{"class":403},"\"question\"",[288,82964,82944],{"class":298},[288,82966,82947],{"class":357},[288,82968,82969,82971,82973,82975,82977,82979,82982,82984],{"class":290,"line":1367},[288,82970,77705],{"class":298},[288,82972,58420],{"class":2135},[288,82974,82933],{"class":298},[288,82976,82936],{"class":2135},[288,82978,299],{"class":298},[288,82980,82981],{"class":403},"\"nonexistent\"",[288,82983,82944],{"class":298},[288,82985,82986],{"class":357},"  \u002F\u002F false\n",[288,82988,82989,82991,82993,82995,82997,82999,83001,83003,83005,83007],{"class":290,"line":1373},[288,82990,77705],{"class":298},[288,82992,58420],{"class":2135},[288,82994,82933],{"class":298},[288,82996,82936],{"class":2135},[288,82998,299],{"class":298},[288,83000,82941],{"class":403},[288,83002,12608],{"class":298},[288,83004,516],{"class":347},[288,83006,82944],{"class":298},[288,83008,82986],{"class":357},[288,83010,83011,83013,83015,83017,83019,83021,83024,83026],{"class":290,"line":1387},[288,83012,77705],{"class":298},[288,83014,58420],{"class":2135},[288,83016,82933],{"class":298},[288,83018,82936],{"class":2135},[288,83020,299],{"class":298},[288,83022,83023],{"class":403},"\"TO BE\"",[288,83025,82944],{"class":298},[288,83027,82986],{"class":357},[288,83029,83030,83032,83034,83036,83038,83040,83042,83044],{"class":290,"line":1393},[288,83031,77705],{"class":298},[288,83033,58420],{"class":2135},[288,83035,82933],{"class":298},[288,83037,82936],{"class":2135},[288,83039,299],{"class":298},[288,83041,7825],{"class":403},[288,83043,82944],{"class":298},[288,83045,82947],{"class":357},[23083,83047,83049],{"id":83048},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[280,83051,83053],{"className":53240,"code":83052,"language":53242,"meta":205,"style":205},"\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",[25,83054,83055,83063,83071,83076,83081,83086,83091,83096,83104],{"__ignoreMap":205},[288,83056,83057,83059,83061],{"class":290,"line":291},[288,83058,1207],{"class":298},[288,83060,51973],{"class":51473},[288,83062,51480],{"class":298},[288,83064,83065,83067,83069],{"class":290,"line":206},[288,83066,52317],{"class":298},[288,83068,51986],{"class":51473},[288,83070,51480],{"class":298},[288,83072,83073],{"class":290,"line":1352},[288,83074,83075],{"class":298},"    const num = 10\n",[288,83077,83078],{"class":290,"line":1367},[288,83079,83080],{"class":298},"    \u002F\u002F 强制转换\n",[288,83082,83083],{"class":290,"line":1373},[288,83084,83085],{"class":298},"    console.log(String(num))\n",[288,83087,83088],{"class":290,"line":1387},[288,83089,83090],{"class":298},"    \u002F\u002F toString()方法转换\n",[288,83092,83093],{"class":290,"line":1393},[288,83094,83095],{"class":298},"    console.log(num.toString())\n",[288,83097,83098,83100,83102],{"class":290,"line":1484},[288,83099,52590],{"class":298},[288,83101,51986],{"class":51473},[288,83103,51480],{"class":298},[288,83105,83106,83108,83110],{"class":290,"line":1490},[288,83107,51958],{"class":298},[288,83109,51973],{"class":51473},[288,83111,51480],{"class":298},[23083,83113,83115],{"id":83114},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83117,83118],{},[200,83119],{"alt":205,"src":83120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[280,83122,83124],{"className":50806,"code":83123,"language":50808,"meta":205,"style":205},"\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",[25,83125,83126,83136,83150,83154,83162,83176,83196,83208,83216,83220,83228,83240,83248,83260,83265,83270,83275,83322,83338,83346,83354,83358],{"__ignoreMap":205},[288,83127,83128,83130,83132,83134],{"class":290,"line":291},[288,83129,51470],{"class":298},[288,83131,51474],{"class":51473},[288,83133,51477],{"class":2135},[288,83135,51480],{"class":298},[288,83137,83138,83140,83142,83144,83146,83148],{"class":290,"line":206},[288,83139,1207],{"class":298},[288,83141,50808],{"class":51473},[288,83143,51489],{"class":2135},[288,83145,344],{"class":298},[288,83147,51494],{"class":403},[288,83149,51480],{"class":298},[288,83151,83152],{"class":290,"line":1352},[288,83153,2572],{"emptyLinePlaceholder":217},[288,83155,83156,83158,83160],{"class":290,"line":1367},[288,83157,1207],{"class":298},[288,83159,51507],{"class":51473},[288,83161,51480],{"class":298},[288,83163,83164,83166,83168,83170,83172,83174],{"class":290,"line":1373},[288,83165,52317],{"class":298},[288,83167,51517],{"class":51473},[288,83169,51520],{"class":2135},[288,83171,344],{"class":298},[288,83173,51525],{"class":403},[288,83175,51480],{"class":298},[288,83177,83178,83180,83182,83184,83186,83188,83190,83192,83194],{"class":290,"line":1387},[288,83179,52317],{"class":298},[288,83181,51517],{"class":51473},[288,83183,15093],{"class":2135},[288,83185,344],{"class":298},[288,83187,51564],{"class":403},[288,83189,51544],{"class":2135},[288,83191,344],{"class":298},[288,83193,51571],{"class":403},[288,83195,51480],{"class":298},[288,83197,83198,83200,83202,83204,83206],{"class":290,"line":1393},[288,83199,52317],{"class":298},[288,83201,51580],{"class":51473},[288,83203,51583],{"class":298},[288,83205,51580],{"class":51473},[288,83207,51480],{"class":298},[288,83209,83210,83212,83214],{"class":290,"line":1484},[288,83211,51958],{"class":298},[288,83213,51507],{"class":51473},[288,83215,51480],{"class":298},[288,83217,83218],{"class":290,"line":1490},[288,83219,2572],{"emptyLinePlaceholder":217},[288,83221,83222,83224,83226],{"class":290,"line":1502},[288,83223,1207],{"class":298},[288,83225,51973],{"class":51473},[288,83227,51480],{"class":298},[288,83229,83230,83232,83234,83236,83238],{"class":290,"line":1784},[288,83231,52317],{"class":298},[288,83233,51784],{"class":51473},[288,83235,55487],{"class":298},[288,83237,51784],{"class":51473},[288,83239,51480],{"class":298},[288,83241,83242,83244,83246],{"class":290,"line":1789},[288,83243,52317],{"class":298},[288,83245,51986],{"class":51473},[288,83247,51480],{"class":298},[288,83249,83250,83252,83255,83257],{"class":290,"line":1795},[288,83251,11394],{"class":294},[288,83253,83254],{"class":347}," gift",[288,83256,13737],{"class":294},[288,83258,83259],{"class":403}," '50g的茶叶，清洗球'\n",[288,83261,83262],{"class":290,"line":1800},[288,83263,83264],{"class":357},"    \u002F\u002F 1.把字符串拆分为数组\n",[288,83266,83267],{"class":290,"line":1814},[288,83268,83269],{"class":357},"    \u002F\u002F console.log(gift.split(','))\n",[288,83271,83272],{"class":290,"line":1819},[288,83273,83274],{"class":357},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[288,83276,83277,83279,83281,83283,83286,83289,83291,83294,83296,83298,83300,83302,83304,83307,83309,83312,83314,83316,83318,83320],{"class":290,"line":1825},[288,83278,11394],{"class":294},[288,83280,74092],{"class":347},[288,83282,13737],{"class":294},[288,83284,83285],{"class":298}," gift.",[288,83287,83288],{"class":2135},"split",[288,83290,299],{"class":298},[288,83292,83293],{"class":403},"'，'",[288,83295,30999],{"class":298},[288,83297,74217],{"class":2135},[288,83299,299],{"class":298},[288,83301,79968],{"class":5389},[288,83303,79971],{"class":294},[288,83305,83306],{"class":403}," `\u003Cspan>【赠品】${",[288,83308,79968],{"class":298},[288,83310,83311],{"class":403},"}\u003C\u002Fspan>\u003Cbr>`",[288,83313,30999],{"class":298},[288,83315,74396],{"class":2135},[288,83317,299],{"class":298},[288,83319,74401],{"class":403},[288,83321,305],{"class":298},[288,83323,83324,83326,83328,83330,83332,83334,83336],{"class":290,"line":1846},[288,83325,52580],{"class":298},[288,83327,54572],{"class":2135},[288,83329,299],{"class":298},[288,83331,82104],{"class":403},[288,83333,74422],{"class":298},[288,83335,344],{"class":294},[288,83337,74158],{"class":298},[288,83339,83340,83342,83344],{"class":290,"line":1851},[288,83341,52590],{"class":298},[288,83343,51986],{"class":51473},[288,83345,51480],{"class":298},[288,83347,83348,83350,83352],{"class":290,"line":1865},[288,83349,51958],{"class":298},[288,83351,51973],{"class":51473},[288,83353,51480],{"class":298},[288,83355,83356],{"class":290,"line":1870},[288,83357,2572],{"emptyLinePlaceholder":217},[288,83359,83360,83362,83364],{"class":290,"line":1899},[288,83361,51958],{"class":298},[288,83363,50808],{"class":51473},[288,83365,51480],{"class":298},[22171,83367,83369],{"id":83368},"_41054-number","4.10.5.4 Number",[19,83371,83372],{},[200,83373],{"alt":205,"src":83374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83376,83377],{},"整数也可以进行toFixed来保留小数",[19,83379,83380],{},"比如：",[19,83382,83383],{},"const price=10",[19,83385,83386],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22171,83388,83390],{"id":83389},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83392,83393],{},[200,83394],{"alt":205,"src":83395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[280,83397,83399],{"className":50806,"code":83398,"language":50808,"meta":205,"style":205},"\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",[25,83400,83401,83411,83425,83429,83437,83451,83471,83483,83491,83497,83507,83517,83527,83531,83535,83541,83553,83567,83571,83575,83581,83593,83609,83619,83635,83639,83643,83649,83659,83669,83673,83677,83685,83697,83709,83721,83725,83729,83737,83749,83753,83757,83768,83778,83790,83802,83812,83816,83820,83828,83837,83849,83859,83869,83873,83877,83885,83894,83901,83911,83923,83927,83931,83940,83950,83961,83973,83985,83989,83993,84002,84012,84023,84027,84031,84037,84049,84061,84071,84081,84099,84111,84115,84119,84128,84140,84150,84160,84172,84176,84184,84192,84196,84204,84218,84226,84240,84268,84276,84284,84294,84298,84306,84314,84323,84331,84340,84350,84354,84358,84366,84374,84383,84391,84399,84412,84416,84420,84428,84436,84445,84453,84461,84476,84480,84484,84492,84500,84509,84517,84525,84539,84547,84551,84555,84560,84586,84591,84628,84633,84656,84661,84715,84720,84756,84760,84766,84771,84780,84794,84803,84822,84831,84841,84846,84851,84864,84869,84923,84949,84957,84965,84969],{"__ignoreMap":205},[288,83402,83403,83405,83407,83409],{"class":290,"line":291},[288,83404,51470],{"class":298},[288,83406,51474],{"class":51473},[288,83408,51477],{"class":2135},[288,83410,51480],{"class":298},[288,83412,83413,83415,83417,83419,83421,83423],{"class":290,"line":206},[288,83414,1207],{"class":298},[288,83416,50808],{"class":51473},[288,83418,51489],{"class":2135},[288,83420,344],{"class":298},[288,83422,51494],{"class":403},[288,83424,51480],{"class":298},[288,83426,83427],{"class":290,"line":1352},[288,83428,2572],{"emptyLinePlaceholder":217},[288,83430,83431,83433,83435],{"class":290,"line":1367},[288,83432,1207],{"class":298},[288,83434,51507],{"class":51473},[288,83436,51480],{"class":298},[288,83438,83439,83441,83443,83445,83447,83449],{"class":290,"line":1373},[288,83440,52317],{"class":298},[288,83442,51517],{"class":51473},[288,83444,51520],{"class":2135},[288,83446,344],{"class":298},[288,83448,51525],{"class":403},[288,83450,51480],{"class":298},[288,83452,83453,83455,83457,83459,83461,83463,83465,83467,83469],{"class":290,"line":1387},[288,83454,52317],{"class":298},[288,83456,51517],{"class":51473},[288,83458,15093],{"class":2135},[288,83460,344],{"class":298},[288,83462,51564],{"class":403},[288,83464,51544],{"class":2135},[288,83466,344],{"class":298},[288,83468,51571],{"class":403},[288,83470,51480],{"class":298},[288,83472,83473,83475,83477,83479,83481],{"class":290,"line":1393},[288,83474,52317],{"class":298},[288,83476,51580],{"class":51473},[288,83478,51583],{"class":298},[288,83480,51580],{"class":51473},[288,83482,51480],{"class":298},[288,83484,83485,83487,83489],{"class":290,"line":1484},[288,83486,52317],{"class":298},[288,83488,5299],{"class":51473},[288,83490,51480],{"class":298},[288,83492,83493,83495],{"class":290,"line":1490},[288,83494,6576],{"class":51473},[288,83496,15745],{"class":298},[288,83498,83499,83501,83503,83505],{"class":290,"line":1502},[288,83500,54868],{"class":347},[288,83502,51610],{"class":298},[288,83504,490],{"class":347},[288,83506,1463],{"class":298},[288,83508,83509,83511,83513,83515],{"class":290,"line":1784},[288,83510,54879],{"class":347},[288,83512,51610],{"class":298},[288,83514,490],{"class":347},[288,83516,1463],{"class":298},[288,83518,83519,83521,83523,83525],{"class":290,"line":1789},[288,83520,72769],{"class":347},[288,83522,51610],{"class":298},[288,83524,60678],{"class":347},[288,83526,1463],{"class":298},[288,83528,83529],{"class":290,"line":1795},[288,83530,2359],{"class":298},[288,83532,83533],{"class":290,"line":1800},[288,83534,2572],{"emptyLinePlaceholder":217},[288,83536,83537,83539],{"class":290,"line":1814},[288,83538,62296],{"class":2135},[288,83540,15745],{"class":298},[288,83542,83543,83545,83547,83549,83551],{"class":290,"line":1819},[288,83544,54944],{"class":347},[288,83546,51610],{"class":298},[288,83548,78747],{"class":347},[288,83550,51665],{"class":294},[288,83552,1463],{"class":298},[288,83554,83555,83557,83559,83561,83563,83565],{"class":290,"line":1825},[288,83556,54879],{"class":347},[288,83558,51610],{"class":298},[288,83560,608],{"class":347},[288,83562,51665],{"class":294},[288,83564,51729],{"class":347},[288,83566,1463],{"class":298},[288,83568,83569],{"class":290,"line":1846},[288,83570,2359],{"class":298},[288,83572,83573],{"class":290,"line":1851},[288,83574,2572],{"emptyLinePlaceholder":217},[288,83576,83577,83579],{"class":290,"line":1865},[288,83578,78798],{"class":2135},[288,83580,15745],{"class":298},[288,83582,83583,83585,83587,83589,83591],{"class":290,"line":1870},[288,83584,54868],{"class":347},[288,83586,51610],{"class":298},[288,83588,872],{"class":347},[288,83590,51665],{"class":294},[288,83592,1463],{"class":298},[288,83594,83595,83597,83599,83601,83603,83605,83607],{"class":290,"line":1899},[288,83596,62033],{"class":347},[288,83598,51610],{"class":298},[288,83600,28294],{"class":347},[288,83602,78853],{"class":347},[288,83604,78856],{"class":347},[288,83606,992],{"class":294},[288,83608,1463],{"class":298},[288,83610,83611,83613,83615,83617],{"class":290,"line":1904},[288,83612,55182],{"class":347},[288,83614,51610],{"class":298},[288,83616,51650],{"class":347},[288,83618,1463],{"class":298},[288,83620,83621,83623,83625,83627,83629,83631,83633],{"class":290,"line":1921},[288,83622,62150],{"class":347},[288,83624,51610],{"class":298},[288,83626,516],{"class":347},[288,83628,51665],{"class":294},[288,83630,51694],{"class":347},[288,83632,62417],{"class":347},[288,83634,1463],{"class":298},[288,83636,83637],{"class":290,"line":1926},[288,83638,2359],{"class":298},[288,83640,83641],{"class":290,"line":1931},[288,83642,2572],{"emptyLinePlaceholder":217},[288,83644,83645,83647],{"class":290,"line":1936},[288,83646,78916],{"class":2135},[288,83648,15745],{"class":298},[288,83650,83651,83653,83655,83657],{"class":290,"line":1950},[288,83652,62198],{"class":347},[288,83654,51610],{"class":298},[288,83656,62203],{"class":347},[288,83658,1463],{"class":298},[288,83660,83661,83663,83665,83667],{"class":290,"line":1955},[288,83662,55057],{"class":347},[288,83664,51610],{"class":298},[288,83666,61991],{"class":347},[288,83668,1463],{"class":298},[288,83670,83671],{"class":290,"line":2749},[288,83672,2359],{"class":298},[288,83674,83675],{"class":290,"line":2763},[288,83676,2572],{"emptyLinePlaceholder":217},[288,83678,83679,83681,83683],{"class":290,"line":2771},[288,83680,78798],{"class":2135},[288,83682,55788],{"class":51473},[288,83684,15745],{"class":298},[288,83686,83687,83689,83691,83693,83695],{"class":290,"line":2776},[288,83688,54944],{"class":347},[288,83690,51610],{"class":298},[288,83692,909],{"class":347},[288,83694,51665],{"class":294},[288,83696,1463],{"class":298},[288,83698,83699,83701,83703,83705,83707],{"class":290,"line":2782},[288,83700,54958],{"class":347},[288,83702,51610],{"class":298},[288,83704,909],{"class":347},[288,83706,51665],{"class":294},[288,83708,1463],{"class":298},[288,83710,83711,83713,83715,83717,83719],{"class":290,"line":2788},[288,83712,61923],{"class":347},[288,83714,51610],{"class":298},[288,83716,616],{"class":347},[288,83718,51665],{"class":294},[288,83720,1463],{"class":298},[288,83722,83723],{"class":290,"line":2793},[288,83724,2359],{"class":298},[288,83726,83727],{"class":290,"line":8121},[288,83728,2572],{"emptyLinePlaceholder":217},[288,83730,83731,83733,83735],{"class":290,"line":8145},[288,83732,78798],{"class":2135},[288,83734,62477],{"class":2135},[288,83736,15745],{"class":298},[288,83738,83739,83741,83743,83745,83747],{"class":290,"line":8150},[288,83740,54944],{"class":347},[288,83742,51610],{"class":298},[288,83744,1894],{"class":347},[288,83746,51665],{"class":294},[288,83748,1463],{"class":298},[288,83750,83751],{"class":290,"line":8156},[288,83752,2359],{"class":298},[288,83754,83755],{"class":290,"line":8183},[288,83756,2572],{"emptyLinePlaceholder":217},[288,83758,83759,83761,83763,83766],{"class":290,"line":8188},[288,83760,78798],{"class":2135},[288,83762,62477],{"class":2135},[288,83764,83765],{"class":2135}," .tag",[288,83767,15745],{"class":298},[288,83769,83770,83772,83774,83776],{"class":290,"line":8194},[288,83771,55182],{"class":347},[288,83773,51610],{"class":298},[288,83775,61042],{"class":347},[288,83777,1463],{"class":298},[288,83779,83780,83782,83784,83786,83788],{"class":290,"line":8206},[288,83781,54868],{"class":347},[288,83783,51610],{"class":298},[288,83785,376],{"class":347},[288,83787,51665],{"class":294},[288,83789,1463],{"class":298},[288,83791,83792,83794,83796,83798,83800],{"class":290,"line":8218},[288,83793,55095],{"class":347},[288,83795,51610],{"class":298},[288,83797,795],{"class":347},[288,83799,51665],{"class":294},[288,83801,1463],{"class":298},[288,83803,83804,83806,83808,83810],{"class":290,"line":8230},[288,83805,57589],{"class":347},[288,83807,51610],{"class":298},[288,83809,62243],{"class":347},[288,83811,1463],{"class":298},[288,83813,83814],{"class":290,"line":9889},[288,83815,2359],{"class":298},[288,83817,83818],{"class":290,"line":9914},[288,83819,2572],{"emptyLinePlaceholder":217},[288,83821,83822,83824,83826],{"class":290,"line":9937},[288,83823,78798],{"class":2135},[288,83825,79090],{"class":2135},[288,83827,31639],{"class":298},[288,83829,83830,83832,83835],{"class":290,"line":9961},[288,83831,78798],{"class":2135},[288,83833,83834],{"class":2135}," .sub-total",[288,83836,15745],{"class":298},[288,83838,83839,83841,83843,83845,83847],{"class":290,"line":9966},[288,83840,55095],{"class":347},[288,83842,51610],{"class":298},[288,83844,947],{"class":347},[288,83846,51665],{"class":294},[288,83848,1463],{"class":298},[288,83850,83851,83853,83855,83857],{"class":290,"line":9971},[288,83852,57589],{"class":347},[288,83854,51610],{"class":298},[288,83856,79113],{"class":347},[288,83858,1463],{"class":298},[288,83860,83861,83863,83865,83867],{"class":290,"line":9976},[288,83862,62010],{"class":347},[288,83864,51610],{"class":298},[288,83866,516],{"class":347},[288,83868,1463],{"class":298},[288,83870,83871],{"class":290,"line":9985},[288,83872,2359],{"class":298},[288,83874,83875],{"class":290,"line":9990},[288,83876,2572],{"emptyLinePlaceholder":217},[288,83878,83879,83881,83883],{"class":290,"line":9996},[288,83880,78798],{"class":2135},[288,83882,79130],{"class":2135},[288,83884,31639],{"class":298},[288,83886,83887,83889,83892],{"class":290,"line":10017},[288,83888,78798],{"class":2135},[288,83890,83891],{"class":2135}," .sub-total::before",[288,83893,31639],{"class":298},[288,83895,83896,83899],{"class":290,"line":10023},[288,83897,83898],{"class":2135},"    .amount::before",[288,83900,15745],{"class":298},[288,83902,83903,83905,83907,83909],{"class":290,"line":10037},[288,83904,79137],{"class":347},[288,83906,51610],{"class":298},[288,83908,79142],{"class":403},[288,83910,1463],{"class":298},[288,83912,83913,83915,83917,83919,83921],{"class":290,"line":10043},[288,83914,55095],{"class":347},[288,83916,51610],{"class":298},[288,83918,795],{"class":347},[288,83920,51665],{"class":294},[288,83922,1463],{"class":298},[288,83924,83925],{"class":290,"line":10070},[288,83926,2359],{"class":298},[288,83928,83929],{"class":290,"line":10079},[288,83930,2572],{"emptyLinePlaceholder":217},[288,83932,83933,83935,83938],{"class":290,"line":10085},[288,83934,78798],{"class":2135},[288,83936,83937],{"class":2135}," .spec",[288,83939,15745],{"class":298},[288,83941,83942,83944,83946,83948],{"class":290,"line":10093},[288,83943,62010],{"class":347},[288,83945,51610],{"class":298},[288,83947,376],{"class":347},[288,83949,1463],{"class":298},[288,83951,83952,83954,83956,83959],{"class":290,"line":10098},[288,83953,57589],{"class":347},[288,83955,51610],{"class":298},[288,83957,83958],{"class":347},"#888",[288,83960,1463],{"class":298},[288,83962,83963,83965,83967,83969,83971],{"class":290,"line":16777},[288,83964,55095],{"class":347},[288,83966,51610],{"class":298},[288,83968,846],{"class":347},[288,83970,51665],{"class":294},[288,83972,1463],{"class":298},[288,83974,83975,83977,83979,83981,83983],{"class":290,"line":16783},[288,83976,62173],{"class":347},[288,83978,51610],{"class":298},[288,83980,997],{"class":347},[288,83982,51665],{"class":294},[288,83984,1463],{"class":298},[288,83986,83987],{"class":290,"line":16806},[288,83988,2359],{"class":298},[288,83990,83991],{"class":290,"line":16812},[288,83992,2572],{"emptyLinePlaceholder":217},[288,83994,83995,83997,84000],{"class":290,"line":16835},[288,83996,78798],{"class":2135},[288,83998,83999],{"class":2135}," .count",[288,84001,15745],{"class":298},[288,84003,84004,84006,84008,84010],{"class":290,"line":16849},[288,84005,62010],{"class":347},[288,84007,51610],{"class":298},[288,84009,516],{"class":347},[288,84011,1463],{"class":298},[288,84013,84014,84016,84018,84021],{"class":290,"line":16869},[288,84015,57589],{"class":347},[288,84017,51610],{"class":298},[288,84019,84020],{"class":347},"#aaa",[288,84022,1463],{"class":298},[288,84024,84025],{"class":290,"line":16875},[288,84026,2359],{"class":298},[288,84028,84029],{"class":290,"line":16886},[288,84030,2572],{"emptyLinePlaceholder":217},[288,84032,84033,84035],{"class":290,"line":16909},[288,84034,72648],{"class":2135},[288,84036,15745],{"class":298},[288,84038,84039,84041,84043,84045,84047],{"class":290,"line":16931},[288,84040,54944],{"class":347},[288,84042,51610],{"class":298},[288,84044,78747],{"class":347},[288,84046,51665],{"class":294},[288,84048,1463],{"class":298},[288,84050,84051,84053,84055,84057,84059],{"class":290,"line":16936},[288,84052,54879],{"class":347},[288,84054,51610],{"class":298},[288,84056,490],{"class":347},[288,84058,51729],{"class":347},[288,84060,1463],{"class":298},[288,84062,84063,84065,84067,84069],{"class":290,"line":16942},[288,84064,55182],{"class":347},[288,84066,51610],{"class":298},[288,84068,51650],{"class":347},[288,84070,1463],{"class":298},[288,84072,84073,84075,84077,84079],{"class":290,"line":16956},[288,84074,55193],{"class":347},[288,84076,51610],{"class":298},[288,84078,51753],{"class":347},[288,84080,1463],{"class":298},[288,84082,84083,84086,84088,84090,84092,84094,84097],{"class":290,"line":16969},[288,84084,84085],{"class":347},"      border-top",[288,84087,51610],{"class":298},[288,84089,516],{"class":347},[288,84091,51665],{"class":294},[288,84093,51694],{"class":347},[288,84095,84096],{"class":347}," #4e4e4e",[288,84098,1463],{"class":298},[288,84100,84101,84103,84105,84107,84109],{"class":290,"line":16974},[288,84102,54868],{"class":347},[288,84104,51610],{"class":298},[288,84106,997],{"class":347},[288,84108,51665],{"class":294},[288,84110,1463],{"class":298},[288,84112,84113],{"class":290,"line":16988},[288,84114,2359],{"class":298},[288,84116,84117],{"class":290,"line":16993},[288,84118,2572],{"emptyLinePlaceholder":217},[288,84120,84121,84123,84126],{"class":290,"line":16999},[288,84122,72648],{"class":2135},[288,84124,84125],{"class":2135}," .amount",[288,84127,15745],{"class":298},[288,84129,84130,84132,84134,84136,84138],{"class":290,"line":17004},[288,84131,55095],{"class":347},[288,84133,51610],{"class":298},[288,84135,947],{"class":347},[288,84137,51665],{"class":294},[288,84139,1463],{"class":298},[288,84141,84142,84144,84146,84148],{"class":290,"line":17018},[288,84143,57589],{"class":347},[288,84145,51610],{"class":298},[288,84147,79113],{"class":347},[288,84149,1463],{"class":298},[288,84151,84152,84154,84156,84158],{"class":290,"line":17023},[288,84153,62507],{"class":347},[288,84155,51610],{"class":298},[288,84157,51662],{"class":347},[288,84159,1463],{"class":298},[288,84161,84162,84164,84166,84168,84170],{"class":290,"line":17028},[288,84163,61923],{"class":347},[288,84165,51610],{"class":298},[288,84167,953],{"class":347},[288,84169,51665],{"class":294},[288,84171,1463],{"class":298},[288,84173,84174],{"class":290,"line":17042},[288,84175,2359],{"class":298},[288,84177,84178,84180,84182],{"class":290,"line":17054},[288,84179,52590],{"class":298},[288,84181,5299],{"class":51473},[288,84183,51480],{"class":298},[288,84185,84186,84188,84190],{"class":290,"line":17059},[288,84187,51958],{"class":298},[288,84189,51507],{"class":51473},[288,84191,51480],{"class":298},[288,84193,84194],{"class":290,"line":17072},[288,84195,2572],{"emptyLinePlaceholder":217},[288,84197,84198,84200,84202],{"class":290,"line":17077},[288,84199,1207],{"class":298},[288,84201,51973],{"class":51473},[288,84203,51480],{"class":298},[288,84205,84206,84208,84210,84212,84214,84216],{"class":290,"line":17082},[288,84207,52317],{"class":298},[288,84209,51784],{"class":51473},[288,84211,53659],{"class":2135},[288,84213,344],{"class":298},[288,84215,62781],{"class":403},[288,84217,51480],{"class":298},[288,84219,84220,84222,84224],{"class":290,"line":17087},[288,84221,52590],{"class":298},[288,84223,51784],{"class":51473},[288,84225,51480],{"class":298},[288,84227,84228,84230,84232,84234,84236,84238],{"class":290,"line":17100},[288,84229,52317],{"class":298},[288,84231,51784],{"class":51473},[288,84233,53659],{"class":2135},[288,84235,344],{"class":298},[288,84237,62753],{"class":403},[288,84239,51480],{"class":298},[288,84241,84242,84244,84246,84249,84251,84253,84255,84258,84260,84262,84264,84266],{"class":290,"line":17105},[288,84243,51514],{"class":298},[288,84245,51784],{"class":51473},[288,84247,84248],{"class":298},">合计：\u003C",[288,84250,288],{"class":51473},[288,84252,53659],{"class":2135},[288,84254,344],{"class":298},[288,84256,84257],{"class":403},"\"amount\"",[288,84259,55487],{"class":298},[288,84261,288],{"class":51473},[288,84263,55487],{"class":298},[288,84265,51784],{"class":51473},[288,84267,51480],{"class":298},[288,84269,84270,84272,84274],{"class":290,"line":32806},[288,84271,52590],{"class":298},[288,84273,51784],{"class":51473},[288,84275,51480],{"class":298},[288,84277,84278,84280,84282],{"class":290,"line":32812},[288,84279,52317],{"class":298},[288,84281,51986],{"class":51473},[288,84283,51480],{"class":298},[288,84285,84286,84288,84290,84292],{"class":290,"line":32818},[288,84287,11394],{"class":294},[288,84289,79550],{"class":347},[288,84291,13737],{"class":294},[288,84293,55620],{"class":298},[288,84295,84296],{"class":290,"line":32824},[288,84297,79559],{"class":298},[288,84299,84300,84302,84304],{"class":290,"line":32830},[288,84301,79564],{"class":298},[288,84303,79567],{"class":403},[288,84305,31639],{"class":298},[288,84307,84308,84310,84312],{"class":290,"line":32841},[288,84309,79574],{"class":298},[288,84311,79577],{"class":403},[288,84313,31639],{"class":298},[288,84315,84316,84318,84321],{"class":290,"line":32847},[288,84317,79584],{"class":298},[288,84319,84320],{"class":347},"289.9",[288,84322,31639],{"class":298},[288,84324,84325,84327,84329],{"class":290,"line":32867},[288,84326,79594],{"class":298},[288,84328,79597],{"class":403},[288,84330,31639],{"class":298},[288,84332,84333,84336,84338],{"class":290,"line":32873},[288,84334,84335],{"class":298},"        count: ",[288,84337,376],{"class":347},[288,84339,31639],{"class":298},[288,84341,84342,84345,84348],{"class":290,"line":32884},[288,84343,84344],{"class":298},"        spec: { color: ",[288,84346,84347],{"class":403},"'白色'",[288,84349,55777],{"class":298},[288,84351,84352],{"class":290,"line":32890},[288,84353,78065],{"class":298},[288,84355,84356],{"class":290,"line":32896},[288,84357,79559],{"class":298},[288,84359,84360,84362,84364],{"class":290,"line":32902},[288,84361,79564],{"class":298},[288,84363,79658],{"class":403},[288,84365,31639],{"class":298},[288,84367,84368,84370,84372],{"class":290,"line":32908},[288,84369,79574],{"class":298},[288,84371,79667],{"class":403},[288,84373,31639],{"class":298},[288,84375,84376,84378,84381],{"class":290,"line":32914},[288,84377,79584],{"class":298},[288,84379,84380],{"class":347},"109.8",[288,84382,31639],{"class":298},[288,84384,84385,84387,84389],{"class":290,"line":32920},[288,84386,79594],{"class":298},[288,84388,79685],{"class":403},[288,84390,31639],{"class":298},[288,84392,84393,84395,84397],{"class":290,"line":32926},[288,84394,84335],{"class":298},[288,84396,370],{"class":347},[288,84398,31639],{"class":298},[288,84400,84401,84404,84406,84408,84410],{"class":290,"line":32946},[288,84402,84403],{"class":298},"        spec: { size: ",[288,84405,82076],{"class":403},[288,84407,55637],{"class":298},[288,84409,82081],{"class":403},[288,84411,55777],{"class":298},[288,84413,84414],{"class":290,"line":32952},[288,84415,78065],{"class":298},[288,84417,84418],{"class":290,"line":32968},[288,84419,79559],{"class":298},[288,84421,84422,84424,84426],{"class":290,"line":32974},[288,84423,79564],{"class":298},[288,84425,79702],{"class":403},[288,84427,31639],{"class":298},[288,84429,84430,84432,84434],{"class":290,"line":32988},[288,84431,79574],{"class":298},[288,84433,79711],{"class":403},[288,84435,31639],{"class":298},[288,84437,84438,84440,84443],{"class":290,"line":32994},[288,84439,79584],{"class":298},[288,84441,84442],{"class":347},"488",[288,84444,31639],{"class":298},[288,84446,84447,84449,84451],{"class":290,"line":33009},[288,84448,79594],{"class":298},[288,84450,79729],{"class":403},[288,84452,31639],{"class":298},[288,84454,84455,84457,84459],{"class":290,"line":33015},[288,84456,84335],{"class":298},[288,84458,516],{"class":347},[288,84460,31639],{"class":298},[288,84462,84463,84465,84468,84471,84474],{"class":290,"line":33024},[288,84464,84344],{"class":298},[288,84466,84467],{"class":403},"'青色'",[288,84469,84470],{"class":298},", sum: ",[288,84472,84473],{"class":403},"'一大四小'",[288,84475,55777],{"class":298},[288,84477,84478],{"class":290,"line":33030},[288,84479,78065],{"class":298},[288,84481,84482],{"class":290,"line":33039},[288,84483,79559],{"class":298},[288,84485,84486,84488,84490],{"class":290,"line":33045},[288,84487,79564],{"class":298},[288,84489,79746],{"class":403},[288,84491,31639],{"class":298},[288,84493,84494,84496,84498],{"class":290,"line":33051},[288,84495,79574],{"class":298},[288,84497,79755],{"class":403},[288,84499,31639],{"class":298},[288,84501,84502,84504,84507],{"class":290,"line":33060},[288,84503,79584],{"class":298},[288,84505,84506],{"class":347},"139",[288,84508,31639],{"class":298},[288,84510,84511,84513,84515],{"class":290,"line":33066},[288,84512,79594],{"class":298},[288,84514,79773],{"class":403},[288,84516,31639],{"class":298},[288,84518,84519,84521,84523],{"class":290,"line":33077},[288,84520,84335],{"class":298},[288,84522,516],{"class":347},[288,84524,31639],{"class":298},[288,84526,84527,84529,84532,84534,84537],{"class":290,"line":33083},[288,84528,84403],{"class":298},[288,84530,84531],{"class":403},"'小号'",[288,84533,55637],{"class":298},[288,84535,84536],{"class":403},"'紫色'",[288,84538,55643],{"class":298},[288,84540,84541,84544],{"class":290,"line":33102},[288,84542,84543],{"class":298},"        gift: ",[288,84545,84546],{"class":403},"'50g茶叶,清洗球'\n",[288,84548,84549],{"class":290,"line":33108},[288,84550,52571],{"class":298},[288,84552,84553],{"class":290,"line":33119},[288,84554,53282],{"class":298},[288,84556,84557],{"class":290,"line":33125},[288,84558,84559],{"class":357},"    \u002F\u002F  1.根据数据渲染页面\n",[288,84561,84562,84564,84566,84568,84570,84572,84574,84576,84578,84580,84582,84584],{"class":290,"line":33145},[288,84563,52580],{"class":298},[288,84565,54572],{"class":2135},[288,84567,299],{"class":298},[288,84569,80074],{"class":403},[288,84571,74422],{"class":298},[288,84573,344],{"class":294},[288,84575,80221],{"class":298},[288,84577,74217],{"class":2135},[288,84579,299],{"class":298},[288,84581,79968],{"class":5389},[288,84583,79971],{"class":294},[288,84585,15745],{"class":298},[288,84587,84588],{"class":290,"line":33161},[288,84589,84590],{"class":357},"      \u002F\u002F 对象解构\n",[288,84592,84593,84595,84597,84599,84601,84603,84605,84608,84610,84612,84614,84617,84619,84622,84624,84626],{"class":290,"line":33167},[288,84594,58401],{"class":294},[288,84596,79980],{"class":298},[288,84598,79993],{"class":347},[288,84600,12608],{"class":298},[288,84602,79983],{"class":347},[288,84604,12608],{"class":298},[288,84606,84607],{"class":347},"count",[288,84609,12608],{"class":298},[288,84611,79988],{"class":347},[288,84613,12608],{"class":298},[288,84615,84616],{"class":347},"spec",[288,84618,12608],{"class":298},[288,84620,84621],{"class":347},"gift",[288,84623,79996],{"class":298},[288,84625,344],{"class":294},[288,84627,80001],{"class":298},[288,84629,84630],{"class":290,"line":33181},[288,84631,84632],{"class":357},"      \u002F\u002F 规格文字模块处理\n",[288,84634,84635,84637,84640,84642,84644,84646,84648,84650,84652,84654],{"class":290,"line":33187},[288,84636,58401],{"class":294},[288,84638,84639],{"class":347}," text",[288,84641,13737],{"class":294},[288,84643,82111],{"class":298},[288,84645,82114],{"class":2135},[288,84647,82117],{"class":298},[288,84649,74396],{"class":2135},[288,84651,299],{"class":298},[288,84653,82124],{"class":403},[288,84655,305],{"class":298},[288,84657,84658],{"class":290,"line":33193},[288,84659,84660],{"class":357},"      \u002F\u002F 处理赠品模块\n",[288,84662,84663,84665,84667,84669,84672,84674,84676,84678,84680,84683,84685,84687,84689,84691,84693,84696,84698,84701,84703,84705,84707,84709,84711,84713],{"class":290,"line":33204},[288,84664,58401],{"class":294},[288,84666,74092],{"class":347},[288,84668,13737],{"class":294},[288,84670,84671],{"class":298}," gift ",[288,84673,1283],{"class":294},[288,84675,83285],{"class":298},[288,84677,83288],{"class":2135},[288,84679,299],{"class":298},[288,84681,84682],{"class":403},"','",[288,84684,30999],{"class":298},[288,84686,74217],{"class":2135},[288,84688,299],{"class":298},[288,84690,79968],{"class":5389},[288,84692,79971],{"class":294},[288,84694,84695],{"class":403}," `\u003Cspan class=\"tag\">【赠品】${",[288,84697,79968],{"class":298},[288,84699,84700],{"class":403},"}\u003C\u002Fspan>`",[288,84702,30999],{"class":298},[288,84704,74396],{"class":2135},[288,84706,299],{"class":298},[288,84708,74401],{"class":403},[288,84710,13887],{"class":298},[288,84712,1156],{"class":294},[288,84714,70277],{"class":403},[288,84716,84717],{"class":290,"line":33210},[288,84718,84719],{"class":357},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[288,84721,84722,84724,84727,84729,84732,84734,84736,84738,84741,84743,84745,84747,84750,84752,84754],{"class":290,"line":33216},[288,84723,58401],{"class":294},[288,84725,84726],{"class":347}," subtotal",[288,84728,13737],{"class":294},[288,84730,84731],{"class":298}," ((price ",[288,84733,752],{"class":294},[288,84735,5927],{"class":347},[288,84737,6691],{"class":294},[288,84739,84740],{"class":298}," count) ",[288,84742,881],{"class":294},[288,84744,5927],{"class":347},[288,84746,30999],{"class":298},[288,84748,84749],{"class":2135},"toFixed",[288,84751,299],{"class":298},[288,84753,376],{"class":347},[288,84755,305],{"class":298},[288,84757,84758],{"class":290,"line":33226},[288,84759,2572],{"emptyLinePlaceholder":217},[288,84761,84762,84764],{"class":290,"line":33232},[288,84763,74155],{"class":294},[288,84765,70341],{"class":403},[288,84767,84768],{"class":290,"line":33243},[288,84769,84770],{"class":403},"        \u003Cdiv class=\"item\">\n",[288,84772,84773,84776,84778],{"class":290,"line":33249},[288,84774,84775],{"class":403},"          \u003Cimg src=\"${",[288,84777,79993],{"class":298},[288,84779,80025],{"class":403},[288,84781,84782,84785,84787,84790,84792],{"class":290,"line":33259},[288,84783,84784],{"class":403},"          \u003Cp class=\"name\">${",[288,84786,79983],{"class":298},[288,84788,84789],{"class":403},"}${",[288,84791,1472],{"class":298},[288,84793,80035],{"class":403},[288,84795,84796,84799,84801],{"class":290,"line":33264},[288,84797,84798],{"class":403},"          \u003Cp class=\"spec\">${",[288,84800,5360],{"class":298},[288,84802,80035],{"class":403},[288,84804,84805,84808,84810,84812,84814,84816,84818,84820],{"class":290,"line":33270},[288,84806,84807],{"class":403},"          \u003Cp class=\"price\">${",[288,84809,79988],{"class":298},[288,84811,855],{"class":403},[288,84813,84749],{"class":2135},[288,84815,299],{"class":403},[288,84817,376],{"class":347},[288,84819,726],{"class":403},[288,84821,80035],{"class":403},[288,84823,84824,84827,84829],{"class":290,"line":33319},[288,84825,84826],{"class":403},"          \u003Cp class=\"count\">x${",[288,84828,84607],{"class":298},[288,84830,80035],{"class":403},[288,84832,84833,84836,84839],{"class":290,"line":33366},[288,84834,84835],{"class":403},"          \u003Cp class=\"sub-total\">${",[288,84837,84838],{"class":298},"subtotal",[288,84840,80035],{"class":403},[288,84842,84843],{"class":290,"line":33371},[288,84844,84845],{"class":403},"        \u003C\u002Fdiv> \n",[288,84847,84848],{"class":290,"line":33377},[288,84849,84850],{"class":403},"             `\n",[288,84852,84853,84856,84858,84860,84862],{"class":290,"line":33396},[288,84854,84855],{"class":298},"    }).",[288,84857,74396],{"class":2135},[288,84859,299],{"class":298},[288,84861,74401],{"class":403},[288,84863,305],{"class":298},[288,84865,84866],{"class":290,"line":33402},[288,84867,84868],{"class":357},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[288,84870,84871,84873,84875,84877,84879,84882,84884,84887,84889,84891,84893,84896,84899,84901,84904,84906,84908,84910,84913,84915,84917,84919,84921],{"class":290,"line":33422},[288,84872,11394],{"class":294},[288,84874,62958],{"class":347},[288,84876,13737],{"class":294},[288,84878,80221],{"class":298},[288,84880,84881],{"class":2135},"reduce",[288,84883,2548],{"class":298},[288,84885,84886],{"class":5389},"prev",[288,84888,12608],{"class":298},[288,84890,79968],{"class":5389},[288,84892,13887],{"class":298},[288,84894,84895],{"class":294},"=>",[288,84897,84898],{"class":298}," prev ",[288,84900,778],{"class":294},[288,84902,84903],{"class":298}," (item.price ",[288,84905,752],{"class":294},[288,84907,5927],{"class":347},[288,84909,6691],{"class":294},[288,84911,84912],{"class":298}," item.count) ",[288,84914,881],{"class":294},[288,84916,5927],{"class":347},[288,84918,12608],{"class":298},[288,84920,490],{"class":347},[288,84922,305],{"class":298},[288,84924,84925,84927,84929,84931,84934,84936,84938,84941,84943,84945,84947],{"class":290,"line":33428},[288,84926,52580],{"class":298},[288,84928,54572],{"class":2135},[288,84930,299],{"class":298},[288,84932,84933],{"class":403},"'.amount'",[288,84935,74422],{"class":298},[288,84937,344],{"class":294},[288,84939,84940],{"class":298}," total.",[288,84942,84749],{"class":2135},[288,84944,299],{"class":298},[288,84946,376],{"class":347},[288,84948,305],{"class":298},[288,84950,84951,84953,84955],{"class":290,"line":33434},[288,84952,52590],{"class":298},[288,84954,51986],{"class":51473},[288,84956,51480],{"class":298},[288,84958,84959,84961,84963],{"class":290,"line":33444},[288,84960,51958],{"class":298},[288,84962,51973],{"class":51473},[288,84964,51480],{"class":298},[288,84966,84967],{"class":290,"line":33449},[288,84968,2572],{"emptyLinePlaceholder":217},[288,84970,84971,84973,84975],{"class":290,"line":33455},[288,84972,51958],{"class":298},[288,84974,50808],{"class":51473},[288,84976,51480],{"class":298},[14,84978,84980],{"id":84979},"_411-编程思想","4.11 编程思想",[260,84982,84984],{"id":84983},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84986,84987,84990],{},[448,84988,84989],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84992,84993],{},"调用就可以了",[19,84995,84996],{},[200,84997],{"alt":205,"src":84998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[260,85000,85002],{"id":85001},"_4112-面向对象","4.11.2 面向对象",[19,85004,85005],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85007,85008],{},[200,85009],{"alt":205,"src":85010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85012,85013],{},"面向对象的特性：",[1304,85015,85016,85019,85022],{},[246,85017,85018],{},"封装性",[246,85020,85021],{},"继承性",[246,85023,85024],{},"多态性",[260,85026,85028],{"id":85027},"_4113-两者比较","4.11.3 两者比较",[19,85030,85031],{},[200,85032],{"alt":205,"src":85033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85035,85037],{"id":85036},"_412-构造函数回顾","4.12 构造函数回顾",[19,85039,85040],{},[200,85041],{"alt":205,"src":85042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85044,85045],{},[200,85046],{"alt":205,"src":85047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85049,85050],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85052,85053],{},[200,85054],{"alt":205,"src":85055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85057,85059],{"id":85058},"_413-原型","4.13 原型",[260,85061,85063],{"id":85062},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85065,85066],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85068,85069],{},[200,85070],{"alt":205,"src":85071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85073,85074],{},[200,85075],{"alt":205,"src":85076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85078,85079],{},"原型是构造函数的属性，它也是一个对象",[19,85081,85082],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85084,85085],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[280,85087,85089],{"className":53240,"code":85088,"language":53242,"meta":205,"style":205},"\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",[25,85090,85091,85099,85104,85112,85117,85122,85127,85132,85137,85141,85145,85149,85154,85159,85163,85168,85173,85178,85183,85188,85192,85200],{"__ignoreMap":205},[288,85092,85093,85095,85097],{"class":290,"line":291},[288,85094,1207],{"class":298},[288,85096,51973],{"class":51473},[288,85098,51480],{"class":298},[288,85100,85101],{"class":290,"line":206},[288,85102,85103],{"class":357},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[288,85105,85106,85108,85110],{"class":290,"line":1352},[288,85107,52317],{"class":298},[288,85109,51986],{"class":51473},[288,85111,51480],{"class":298},[288,85113,85114],{"class":290,"line":1367},[288,85115,85116],{"class":298},"    function Star(uname, age) {\n",[288,85118,85119],{"class":290,"line":1373},[288,85120,85121],{"class":298},"      this.uname = uname,\n",[288,85123,85124],{"class":290,"line":1387},[288,85125,85126],{"class":298},"        this.age = age\n",[288,85128,85129],{"class":290,"line":1393},[288,85130,85131],{"class":298},"      \u002F\u002F this.sing = function () {\n",[288,85133,85134],{"class":290,"line":1484},[288,85135,85136],{"class":298},"      \u002F\u002F   console.log('唱歌')\n",[288,85138,85139],{"class":290,"line":1490},[288,85140,2572],{"emptyLinePlaceholder":217},[288,85142,85143],{"class":290,"line":1502},[288,85144,60210],{"class":298},[288,85146,85147],{"class":290,"line":1784},[288,85148,2359],{"class":298},[288,85150,85151],{"class":290,"line":1789},[288,85152,85153],{"class":298},"    Star.prototype.sing = function () {\n",[288,85155,85156],{"class":290,"line":1795},[288,85157,85158],{"class":298},"      console.log('唱歌')\n",[288,85160,85161],{"class":290,"line":1800},[288,85162,2359],{"class":298},[288,85164,85165],{"class":290,"line":1814},[288,85166,85167],{"class":298},"    \u002F\u002F console.dir(Star.prototype)\n",[288,85169,85170],{"class":290,"line":1819},[288,85171,85172],{"class":298},"    const pink = new Star('pink', 18)\n",[288,85174,85175],{"class":290,"line":1825},[288,85176,85177],{"class":298},"    const red = new Star('red', 20)\n",[288,85179,85180],{"class":290,"line":1846},[288,85181,85182],{"class":298},"    pink.sing()\n",[288,85184,85185],{"class":290,"line":1851},[288,85186,85187],{"class":298},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[288,85189,85190],{"class":290,"line":1865},[288,85191,2572],{"emptyLinePlaceholder":217},[288,85193,85194,85196,85198],{"class":290,"line":1870},[288,85195,52590],{"class":298},[288,85197,51986],{"class":51473},[288,85199,51480],{"class":298},[288,85201,85202,85204,85206],{"class":290,"line":1899},[288,85203,51958],{"class":298},[288,85205,51973],{"class":51473},[288,85207,51480],{"class":298},[19,85209,85210],{},[200,85211],{"alt":205,"src":85212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[280,85214,85216],{"className":53240,"code":85215,"language":53242,"meta":205,"style":205},"\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",[25,85217,85218,85226,85234,85239,85244,85249,85254,85258,85263,85268,85273,85277,85282,85286,85290,85295,85299,85307],{"__ignoreMap":205},[288,85219,85220,85222,85224],{"class":290,"line":291},[288,85221,1207],{"class":298},[288,85223,51973],{"class":51473},[288,85225,51480],{"class":298},[288,85227,85228,85230,85232],{"class":290,"line":206},[288,85229,52317],{"class":298},[288,85231,51986],{"class":51473},[288,85233,51480],{"class":298},[288,85235,85236],{"class":290,"line":1352},[288,85237,85238],{"class":298},"    let that\n",[288,85240,85241],{"class":290,"line":1367},[288,85242,85243],{"class":298},"    function Star(uname) {\n",[288,85245,85246],{"class":290,"line":1373},[288,85247,85248],{"class":298},"      this.uname = uname\n",[288,85250,85251],{"class":290,"line":1387},[288,85252,85253],{"class":298},"      that = this\n",[288,85255,85256],{"class":290,"line":1393},[288,85257,2359],{"class":298},[288,85259,85260],{"class":290,"line":1484},[288,85261,85262],{"class":298},"    \u002F\u002F 实例对象是 ldh\n",[288,85264,85265],{"class":290,"line":1490},[288,85266,85267],{"class":298},"    const ldh = new Star('刘德华')\n",[288,85269,85270],{"class":290,"line":1502},[288,85271,85272],{"class":298},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[288,85274,85275],{"class":290,"line":1784},[288,85276,2572],{"emptyLinePlaceholder":217},[288,85278,85279],{"class":290,"line":1789},[288,85280,85281],{"class":298},"    Star.sing = function () {\n",[288,85283,85284],{"class":290,"line":1795},[288,85285,85158],{"class":298},[288,85287,85288],{"class":290,"line":1800},[288,85289,2359],{"class":298},[288,85291,85292],{"class":290,"line":1814},[288,85293,85294],{"class":298},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[288,85296,85297],{"class":290,"line":1819},[288,85298,2572],{"emptyLinePlaceholder":217},[288,85300,85301,85303,85305],{"class":290,"line":1825},[288,85302,52590],{"class":298},[288,85304,51986],{"class":51473},[288,85306,51480],{"class":298},[288,85308,85309,85311,85313],{"class":290,"line":1846},[288,85310,51958],{"class":298},[288,85312,51973],{"class":51473},[288,85314,51480],{"class":298},[19,85316,85317],{},"构造函数的this指向的是实例对象；",[19,85319,85320],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[260,85322,85324],{"id":85323},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85326,85327],{},[200,85328],{"alt":205,"src":85329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[280,85331,85333],{"className":53240,"code":85332,"language":53242,"meta":205,"style":205},"\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",[25,85334,85335,85343,85351,85356,85361,85366,85371,85376,85381,85386,85391,85396,85401,85405,85410,85415,85420,85425,85429,85434,85439,85444,85449,85453,85458,85463,85468,85473,85477,85482,85486,85494],{"__ignoreMap":205},[288,85336,85337,85339,85341],{"class":290,"line":291},[288,85338,1207],{"class":298},[288,85340,51973],{"class":51473},[288,85342,51480],{"class":298},[288,85344,85345,85347,85349],{"class":290,"line":206},[288,85346,52317],{"class":298},[288,85348,51986],{"class":51473},[288,85350,51480],{"class":298},[288,85352,85353],{"class":290,"line":1352},[288,85354,85355],{"class":298},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[288,85357,85358],{"class":290,"line":1367},[288,85359,85360],{"class":298},"    const arr = [1, 2, 3]\n",[288,85362,85363],{"class":290,"line":1373},[288,85364,85365],{"class":298},"    \u002F\u002F 自己定义数组的扩展方法\n",[288,85367,85368],{"class":290,"line":1387},[288,85369,85370],{"class":298},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[288,85372,85373],{"class":290,"line":1393},[288,85374,85375],{"class":298},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[288,85377,85378],{"class":290,"line":1484},[288,85379,85380],{"class":298},"    \u002F\u002F ①.最大值\n",[288,85382,85383],{"class":290,"line":1490},[288,85384,85385],{"class":298},"    Array.prototype.max = function () {\n",[288,85387,85388],{"class":290,"line":1502},[288,85389,85390],{"class":298},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[288,85392,85393],{"class":290,"line":1784},[288,85394,85395],{"class":298},"      return Math.max(...this)\n",[288,85397,85398],{"class":290,"line":1789},[288,85399,85400],{"class":298},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[288,85402,85403],{"class":290,"line":1795},[288,85404,2359],{"class":298},[288,85406,85407],{"class":290,"line":1800},[288,85408,85409],{"class":298},"    console.log(arr.max())\n",[288,85411,85412],{"class":290,"line":1814},[288,85413,85414],{"class":298},"    \u002F\u002F ②最小值\n",[288,85416,85417],{"class":290,"line":1819},[288,85418,85419],{"class":298},"    Array.prototype.min = function () {\n",[288,85421,85422],{"class":290,"line":1825},[288,85423,85424],{"class":298},"      return Math.min(...this)\n",[288,85426,85427],{"class":290,"line":1846},[288,85428,2359],{"class":298},[288,85430,85431],{"class":290,"line":1851},[288,85432,85433],{"class":298},"    console.log(arr.min())\n",[288,85435,85436],{"class":290,"line":1865},[288,85437,85438],{"class":298},"    \u002F\u002F③求和\n",[288,85440,85441],{"class":290,"line":1870},[288,85442,85443],{"class":298},"    Array.prototype.sum = function () {\n",[288,85445,85446],{"class":290,"line":1899},[288,85447,85448],{"class":298},"      return this.reduce((prev, current) => prev + current, 0)\n",[288,85450,85451],{"class":290,"line":1904},[288,85452,2359],{"class":298},[288,85454,85455],{"class":290,"line":1921},[288,85456,85457],{"class":298},"    console.log(arr.sum())\n",[288,85459,85460],{"class":290,"line":1926},[288,85461,85462],{"class":298},"    \u002F\u002F ③排序\n",[288,85464,85465],{"class":290,"line":1931},[288,85466,85467],{"class":298},"    Array.prototype.rever = function () {\n",[288,85469,85470],{"class":290,"line":1936},[288,85471,85472],{"class":298},"      return this.reverse()\n",[288,85474,85475],{"class":290,"line":1950},[288,85476,2359],{"class":298},[288,85478,85479],{"class":290,"line":1955},[288,85480,85481],{"class":298},"    console.log(arr.rever())\n",[288,85483,85484],{"class":290,"line":2749},[288,85485,2572],{"emptyLinePlaceholder":217},[288,85487,85488,85490,85492],{"class":290,"line":2763},[288,85489,52590],{"class":298},[288,85491,51986],{"class":51473},[288,85493,51480],{"class":298},[288,85495,85496,85498,85500],{"class":290,"line":2771},[288,85497,51958],{"class":298},[288,85499,51973],{"class":51473},[288,85501,51480],{"class":298},[19,85503,85504],{},[200,85505],{"alt":205,"src":85506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[260,85508,85510],{"id":85509},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85512,85513],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85515,85516],{},[200,85517],{"alt":205,"src":85518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[280,85520,85522],{"className":53240,"code":85521,"language":53242,"meta":205,"style":205},"\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",[25,85523,85524,85532,85540,85545,85550,85554,85559,85564,85569,85577],{"__ignoreMap":205},[288,85525,85526,85528,85530],{"class":290,"line":291},[288,85527,1207],{"class":298},[288,85529,51973],{"class":51473},[288,85531,51480],{"class":298},[288,85533,85534,85536,85538],{"class":290,"line":206},[288,85535,52317],{"class":298},[288,85537,51986],{"class":51473},[288,85539,51480],{"class":298},[288,85541,85542],{"class":290,"line":1352},[288,85543,85544],{"class":298},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[288,85546,85547],{"class":290,"line":1367},[288,85548,85549],{"class":298},"    function Star() {\n",[288,85551,85552],{"class":290,"line":1373},[288,85553,2359],{"class":298},[288,85555,85556],{"class":290,"line":1387},[288,85557,85558],{"class":298},"    const ldh = new Star()\n",[288,85560,85561],{"class":290,"line":1393},[288,85562,85563],{"class":298},"    console.log(Star.prototype)\n",[288,85565,85566],{"class":290,"line":1484},[288,85567,85568],{"class":298},"    console.log(Star.prototype.constructor === Star)\n",[288,85570,85571,85573,85575],{"class":290,"line":1490},[288,85572,52590],{"class":298},[288,85574,51986],{"class":51473},[288,85576,51480],{"class":298},[288,85578,85579,85581,85583],{"class":290,"line":1502},[288,85580,51958],{"class":298},[288,85582,51973],{"class":51473},[288,85584,51480],{"class":298},[19,85586,85587],{},[200,85588],{"alt":205,"src":85589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85591,85592],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[280,85594,85596],{"className":53240,"code":85595,"language":53242,"meta":205,"style":205},"  \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",[25,85597,85598,85606,85610,85614,85618,85623,85628,85633,85637,85642,85647,85652,85657,85662,85667,85671,85675,85680,85685,85690,85694,85699,85704,85708,85712,85716],{"__ignoreMap":205},[288,85599,85600,85602,85604],{"class":290,"line":291},[288,85601,52317],{"class":298},[288,85603,51986],{"class":51473},[288,85605,51480],{"class":298},[288,85607,85608],{"class":290,"line":206},[288,85609,85544],{"class":298},[288,85611,85612],{"class":290,"line":1352},[288,85613,85549],{"class":298},[288,85615,85616],{"class":290,"line":1367},[288,85617,2359],{"class":298},[288,85619,85620],{"class":290,"line":1373},[288,85621,85622],{"class":298},"    \u002F\u002F const ldh = new Star()\n",[288,85624,85625],{"class":290,"line":1387},[288,85626,85627],{"class":298},"    \u002F\u002F console.log(Star.prototype)\n",[288,85629,85630],{"class":290,"line":1393},[288,85631,85632],{"class":298},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[288,85634,85635],{"class":290,"line":1484},[288,85636,2572],{"emptyLinePlaceholder":217},[288,85638,85639],{"class":290,"line":1490},[288,85640,85641],{"class":298},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[288,85643,85644],{"class":290,"line":1502},[288,85645,85646],{"class":298},"    \u002F\u002F Star.prototype.sing = function () {\n",[288,85648,85649],{"class":290,"line":1784},[288,85650,85651],{"class":298},"    \u002F\u002F   console.log('唱歌')\n",[288,85653,85654],{"class":290,"line":1789},[288,85655,85656],{"class":298},"    \u002F\u002F }\n",[288,85658,85659],{"class":290,"line":1795},[288,85660,85661],{"class":298},"    \u002F\u002F Star.prototype.dance = function () {\n",[288,85663,85664],{"class":290,"line":1800},[288,85665,85666],{"class":298},"    \u002F\u002F   console.log('跳舞')\n",[288,85668,85669],{"class":290,"line":1814},[288,85670,85656],{"class":298},[288,85672,85673],{"class":290,"line":1819},[288,85674,85563],{"class":298},[288,85676,85677],{"class":290,"line":1825},[288,85678,85679],{"class":298},"    Star.prototype = {\n",[288,85681,85682],{"class":290,"line":1846},[288,85683,85684],{"class":298},"      sing: function () {\n",[288,85686,85687],{"class":290,"line":1851},[288,85688,85689],{"class":298},"        console.log('唱歌')\n",[288,85691,85692],{"class":290,"line":1865},[288,85693,78065],{"class":298},[288,85695,85696],{"class":290,"line":1870},[288,85697,85698],{"class":298},"      dance: function () {\n",[288,85700,85701],{"class":290,"line":1899},[288,85702,85703],{"class":298},"        console.log('跳舞')\n",[288,85705,85706],{"class":290,"line":1904},[288,85707,52571],{"class":298},[288,85709,85710],{"class":290,"line":1921},[288,85711,2359],{"class":298},[288,85713,85714],{"class":290,"line":1926},[288,85715,85563],{"class":298},[288,85717,85718,85720,85722],{"class":290,"line":1931},[288,85719,52590],{"class":298},[288,85721,51986],{"class":51473},[288,85723,51480],{"class":298},[19,85725,85726],{},"进行输出结果后会发现：",[19,85728,85729],{},[200,85730],{"alt":205,"src":85731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85733,85734],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85736,85737],{},"所以，要重新指回创造这个原型对象的构造函数",[280,85739,85741],{"className":71386,"code":85740,"language":71388,"meta":205,"style":205},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[25,85742,85743,85757,85762,85767,85778,85791,85796,85807,85821,85825],{"__ignoreMap":205},[288,85744,85745,85748,85750,85753,85755],{"class":290,"line":291},[288,85746,85747],{"class":347},"Star",[288,85749,855],{"class":298},[288,85751,85752],{"class":347},"prototype",[288,85754,13737],{"class":294},[288,85756,15745],{"class":298},[288,85758,85759],{"class":290,"line":206},[288,85760,85761],{"class":357},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[288,85763,85764],{"class":290,"line":1352},[288,85765,85766],{"class":298},"  constructor: Star,\n",[288,85768,85769,85772,85774,85776],{"class":290,"line":1367},[288,85770,85771],{"class":2135},"  sing",[288,85773,51610],{"class":298},[288,85775,54622],{"class":294},[288,85777,54625],{"class":298},[288,85779,85780,85782,85784,85786,85789],{"class":290,"line":1373},[288,85781,73926],{"class":298},[288,85783,58420],{"class":2135},[288,85785,299],{"class":298},[288,85787,85788],{"class":403},"'唱歌'",[288,85790,305],{"class":298},[288,85792,85793],{"class":290,"line":1387},[288,85794,85795],{"class":298},"   },\n",[288,85797,85798,85801,85803,85805],{"class":290,"line":1393},[288,85799,85800],{"class":2135},"   dance",[288,85802,51610],{"class":298},[288,85804,54622],{"class":294},[288,85806,54625],{"class":298},[288,85808,85809,85812,85814,85816,85819],{"class":290,"line":1484},[288,85810,85811],{"class":298},"     console.",[288,85813,58420],{"class":2135},[288,85815,299],{"class":298},[288,85817,85818],{"class":403},"'跳舞'",[288,85820,305],{"class":298},[288,85822,85823],{"class":290,"line":1490},[288,85824,4481],{"class":298},[288,85826,85827],{"class":290,"line":1502},[288,85828,1737],{"class":298},[19,85830,85831],{},[200,85832],{"alt":205,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85835,85836],{},"总结1：",[19,85838,85839],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85841,85842],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85844,85845],{},"constructor指的是他的来源",[19,85847,85848],{},[200,85849],{"alt":205,"src":85850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85852,85853],{},[200,85854],{"alt":205,"src":85855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85857,85858],{},"总结2：",[19,85860,85861],{},[200,85862],{"alt":205,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85865,85866],{},[200,85867],{"alt":205,"src":85868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85870,85871],{},[200,85872],{"alt":205,"src":85873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[260,85875,85877],{"id":85876},"_4134-对象原型","4.13.4 对象原型",[19,85879,85880],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85882,85883],{},"对象原型就是__proto__这个属性",[19,85885,85886],{},[200,85887],{"alt":205,"src":85888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85890,85891],{},[200,85892],{"alt":205,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85895,85896],{},[200,85897],{"alt":205,"src":85898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85900,85901],{},[200,85902],{"alt":205,"src":85903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[280,85905,85907],{"className":53240,"code":85906,"language":53242,"meta":205,"style":205},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,85908,85909,85917,85925,85929,85933,85937,85942,85950],{"__ignoreMap":205},[288,85910,85911,85913,85915],{"class":290,"line":291},[288,85912,1207],{"class":298},[288,85914,51973],{"class":51473},[288,85916,51480],{"class":298},[288,85918,85919,85921,85923],{"class":290,"line":206},[288,85920,52317],{"class":298},[288,85922,51986],{"class":51473},[288,85924,51480],{"class":298},[288,85926,85927],{"class":290,"line":1352},[288,85928,85549],{"class":298},[288,85930,85931],{"class":290,"line":1367},[288,85932,2359],{"class":298},[288,85934,85935],{"class":290,"line":1373},[288,85936,85558],{"class":298},[288,85938,85939],{"class":290,"line":1387},[288,85940,85941],{"class":298},"    console.log(ldh)\n",[288,85943,85944,85946,85948],{"class":290,"line":1393},[288,85945,52590],{"class":298},[288,85947,51986],{"class":51473},[288,85949,51480],{"class":298},[288,85951,85952,85954,85956],{"class":290,"line":1484},[288,85953,51958],{"class":298},[288,85955,51973],{"class":51473},[288,85957,51480],{"class":298},[19,85959,85960],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85962,85963],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85965,85966],{},[200,85967],{"alt":205,"src":85968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85970,85971],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85973,85974],{},"对象原型指向原型对象",[19,85976,85977],{},[200,85978],{"alt":205,"src":85979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85981,85982],{},[200,85983],{"alt":205,"src":85984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85986,85987],{},[200,85988],{"alt":205,"src":85989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[260,85991,85993],{"id":85992},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85995,85996],{},[200,85997],{"alt":205,"src":85998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[243,86000,86001,86004,86007,86010],{},[246,86002,86003],{},"构造函数通过new的形式实例化得到实例对象",[246,86005,86006],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[246,86008,86009],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[246,86011,86012],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86014,86015],{},[200,86016],{"alt":205,"src":86017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86019,86020],{},"题目梳理：",[19,86022,86023],{},[200,86024],{"alt":205,"src":86025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[260,86027,86029],{"id":86028},"_4136-原型继承","4.13.6 原型继承",[19,86031,86032],{},[200,86033],{"alt":205,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86036,86037],{},[200,86038],{"alt":205,"src":86039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86041,86042],{},[200,86043],{"alt":205,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86046,86047],{},[200,86048],{"alt":205,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86051,86052],{},[200,86053],{"alt":205,"src":86054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86056,86057],{},[200,86058],{"alt":205,"src":86059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86061,86062],{},[200,86063],{"alt":205,"src":86064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86066,86067],{},[200,86068],{"alt":205,"src":86069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86071,86072],{},"回顾：构造函数每次new得到对象都是不同的",[260,86074,86076],{"id":86075},"_4137-原型链","4.13.7 原型链",[19,86078,86079],{},[200,86080],{"alt":205,"src":86081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86083,86084],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86086,86087],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86089,86090],{},"大哥是Object",[19,86092,86093],{},[200,86094],{"alt":205,"src":86095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86097,86098],{},[200,86099],{"alt":205,"src":86100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86102,86103],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86105,86106],{},"万物皆对象",[260,86108,86110],{"id":86109},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86112,86113],{},"模态框",[19,86115,86116],{},"以后遇见这个效果直接使用这个就行",[19,86118,86119],{},[200,86120],{"alt":205,"src":86121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86123,86124],{},[200,86125],{"alt":205,"src":86126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86128,86129],{},[200,86130],{"alt":205,"src":86131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86133,86134],{},[200,86135],{"alt":205,"src":86136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86138,86139],{},"补充知识点：",[243,86141,86142],{},[246,86143,86144],{},"append()",[19,86146,86147],{},[200,86148],{"alt":205,"src":86149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[280,86151,86153],{"className":50806,"code":86152,"language":50808,"meta":205,"style":205},"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",[25,86154,86155,86160,86165,86170,86174,86178,86182,86187,86192,86197,86201],{"__ignoreMap":205},[288,86156,86157],{"class":290,"line":291},[288,86158,86159],{"class":298},"append(param1)\n",[288,86161,86162],{"class":290,"line":206},[288,86163,86164],{"class":298},"append(param1, param2)\n",[288,86166,86167],{"class":290,"line":1352},[288,86168,86169],{"class":298},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[288,86171,86172],{"class":290,"line":1367},[288,86173,2572],{"emptyLinePlaceholder":217},[288,86175,86176],{"class":290,"line":1373},[288,86177,2572],{"emptyLinePlaceholder":217},[288,86179,86180],{"class":290,"line":1387},[288,86181,2572],{"emptyLinePlaceholder":217},[288,86183,86184],{"class":290,"line":1393},[288,86185,86186],{"class":298},"let div = document.createElement(\"div\");\n",[288,86188,86189],{"class":290,"line":1484},[288,86190,86191],{"class":298},"let p = document.createElement(\"p\");\n",[288,86193,86194],{"class":290,"line":1490},[288,86195,86196],{"class":298},"div.append(p);\n",[288,86198,86199],{"class":290,"line":1502},[288,86200,2572],{"emptyLinePlaceholder":217},[288,86202,86203,86206,86208],{"class":290,"line":1784},[288,86204,86205],{"class":298},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[288,86207,19],{"class":51473},[288,86209,86210],{"class":298},"> ]\n",[243,86212,86213],{"start":206},[246,86214,86215],{},"remove()",[19,86217,86218],{},"自己删自己",[19,86220,86221],{},[200,86222],{"alt":205,"src":86223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[280,86225,86227],{"className":50806,"code":86226,"language":50808,"meta":205,"style":205},"\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",[25,86228,86229,86239,86253,86257,86265,86279,86299,86311,86319,86326,86338,86351,86386,86398,86409,86421,86433,86445,86472,86482,86486,86490,86499,86511,86525,86535,86547,86551,86555,86565,86576,86586,86596,86609,86622,86632,86636,86640,86649,86659,86671,86675,86679,86688,86698,86708,86720,86724,86728,86738,86754,86765,86775,86785,86797,86809,86821,86825,86829,86842,86853,86857,86865,86873,86877,86885,86905,86925,86933,86938,86964,86969,86974,86993,86998,87010,87015,87026,87036,87046,87051,87056,87060,87065,87070,87075,87095,87100,87120,87125,87139,87144,87149,87154,87170,87174,87179,87208,87213,87218,87223,87234,87238,87242,87246,87251,87276,87281,87306,87311,87320,87324,87329,87354,87358,87383,87387,87396,87400,87405,87423,87433,87437,87445,87453,87457],{"__ignoreMap":205},[288,86230,86231,86233,86235,86237],{"class":290,"line":291},[288,86232,51470],{"class":298},[288,86234,51474],{"class":51473},[288,86236,51477],{"class":2135},[288,86238,51480],{"class":298},[288,86240,86241,86243,86245,86247,86249,86251],{"class":290,"line":206},[288,86242,1207],{"class":298},[288,86244,50808],{"class":51473},[288,86246,51489],{"class":2135},[288,86248,344],{"class":298},[288,86250,51494],{"class":403},[288,86252,51480],{"class":298},[288,86254,86255],{"class":290,"line":1352},[288,86256,2572],{"emptyLinePlaceholder":217},[288,86258,86259,86261,86263],{"class":290,"line":1367},[288,86260,1207],{"class":298},[288,86262,51507],{"class":51473},[288,86264,51480],{"class":298},[288,86266,86267,86269,86271,86273,86275,86277],{"class":290,"line":1373},[288,86268,52317],{"class":298},[288,86270,51517],{"class":51473},[288,86272,51520],{"class":2135},[288,86274,344],{"class":298},[288,86276,51525],{"class":403},[288,86278,51480],{"class":298},[288,86280,86281,86283,86285,86287,86289,86291,86293,86295,86297],{"class":290,"line":1387},[288,86282,52317],{"class":298},[288,86284,51517],{"class":51473},[288,86286,15093],{"class":2135},[288,86288,344],{"class":298},[288,86290,51564],{"class":403},[288,86292,51544],{"class":2135},[288,86294,344],{"class":298},[288,86296,51571],{"class":403},[288,86298,51480],{"class":298},[288,86300,86301,86303,86305,86307,86309],{"class":290,"line":1393},[288,86302,52317],{"class":298},[288,86304,51580],{"class":51473},[288,86306,51583],{"class":298},[288,86308,51580],{"class":51473},[288,86310,51480],{"class":298},[288,86312,86313,86315,86317],{"class":290,"line":1484},[288,86314,52317],{"class":298},[288,86316,5299],{"class":51473},[288,86318,51480],{"class":298},[288,86320,86321,86324],{"class":290,"line":1490},[288,86322,86323],{"class":2135},"    .modal",[288,86325,15745],{"class":298},[288,86327,86328,86330,86332,86334,86336],{"class":290,"line":1502},[288,86329,54944],{"class":347},[288,86331,51610],{"class":298},[288,86333,4145],{"class":347},[288,86335,51665],{"class":294},[288,86337,1463],{"class":298},[288,86339,86340,86343,86345,86347,86349],{"class":290,"line":1784},[288,86341,86342],{"class":347},"      min-height",[288,86344,51610],{"class":298},[288,86346,608],{"class":347},[288,86348,51665],{"class":294},[288,86350,1463],{"class":298},[288,86352,86353,86355,86357,86359,86361,86363,86365,86367,86369,86371,86373,86375,86377,86379,86381,86384],{"class":290,"line":1789},[288,86354,78923],{"class":347},[288,86356,51610],{"class":298},[288,86358,490],{"class":347},[288,86360,4265],{"class":347},[288,86362,2210],{"class":347},[288,86364,51665],{"class":294},[288,86366,78940],{"class":347},[288,86368,299],{"class":298},[288,86370,490],{"class":347},[288,86372,12608],{"class":298},[288,86374,490],{"class":347},[288,86376,12608],{"class":298},[288,86378,490],{"class":347},[288,86380,12608],{"class":298},[288,86382,86383],{"class":347},"0.1",[288,86385,2891],{"class":298},[288,86387,86388,86390,86392,86394,86396],{"class":290,"line":1795},[288,86389,55307],{"class":347},[288,86391,51610],{"class":298},[288,86393,590],{"class":347},[288,86395,51665],{"class":294},[288,86397,1463],{"class":298},[288,86399,86400,86402,86404,86407],{"class":290,"line":1800},[288,86401,54932],{"class":347},[288,86403,51610],{"class":298},[288,86405,86406],{"class":347},"fixed",[288,86408,1463],{"class":298},[288,86410,86411,86414,86416,86419],{"class":290,"line":1814},[288,86412,86413],{"class":347},"      z-index",[288,86415,51610],{"class":298},[288,86417,86418],{"class":347},"999",[288,86420,1463],{"class":298},[288,86422,86423,86425,86427,86429,86431],{"class":290,"line":1819},[288,86424,55011],{"class":347},[288,86426,51610],{"class":298},[288,86428,953],{"class":347},[288,86430,625],{"class":294},[288,86432,1463],{"class":298},[288,86434,86435,86437,86439,86441,86443],{"class":290,"line":1825},[288,86436,55120],{"class":347},[288,86438,51610],{"class":298},[288,86440,953],{"class":347},[288,86442,625],{"class":294},[288,86444,1463],{"class":298},[288,86446,86447,86449,86451,86453,86455,86458,86460,86462,86464,86466,86468,86470],{"class":290,"line":1846},[288,86448,78964],{"class":347},[288,86450,51610],{"class":298},[288,86452,78969],{"class":347},[288,86454,299],{"class":298},[288,86456,86457],{"class":347},"-50",[288,86459,625],{"class":294},[288,86461,12608],{"class":298},[288,86463,86457],{"class":347},[288,86465,625],{"class":294},[288,86467,12608],{"class":298},[288,86469,490],{"class":347},[288,86471,2891],{"class":298},[288,86473,86474,86476,86478,86480],{"class":290,"line":1851},[288,86475,55057],{"class":347},[288,86477,51610],{"class":298},[288,86479,61015],{"class":347},[288,86481,1463],{"class":298},[288,86483,86484],{"class":290,"line":1865},[288,86485,2359],{"class":298},[288,86487,86488],{"class":290,"line":1870},[288,86489,2572],{"emptyLinePlaceholder":217},[288,86491,86492,86494,86497],{"class":290,"line":1899},[288,86493,86323],{"class":2135},[288,86495,86496],{"class":2135}," .header",[288,86498,15745],{"class":298},[288,86500,86501,86503,86505,86507,86509],{"class":290,"line":1904},[288,86502,57532],{"class":347},[288,86504,51610],{"class":298},[288,86506,698],{"class":347},[288,86508,51665],{"class":294},[288,86510,1463],{"class":298},[288,86512,86513,86515,86517,86519,86521,86523],{"class":290,"line":1921},[288,86514,54868],{"class":347},[288,86516,51610],{"class":298},[288,86518,490],{"class":347},[288,86520,2210],{"class":347},[288,86522,51665],{"class":294},[288,86524,1463],{"class":298},[288,86526,86527,86529,86531,86533],{"class":290,"line":1926},[288,86528,54932],{"class":347},[288,86530,51610],{"class":298},[288,86532,54937],{"class":347},[288,86534,1463],{"class":298},[288,86536,86537,86539,86541,86543,86545],{"class":290,"line":1931},[288,86538,55095],{"class":347},[288,86540,51610],{"class":298},[288,86542,997],{"class":347},[288,86544,51665],{"class":294},[288,86546,1463],{"class":298},[288,86548,86549],{"class":290,"line":1936},[288,86550,2359],{"class":298},[288,86552,86553],{"class":290,"line":1950},[288,86554,2572],{"emptyLinePlaceholder":217},[288,86556,86557,86559,86561,86563],{"class":290,"line":1955},[288,86558,86323],{"class":2135},[288,86560,86496],{"class":2135},[288,86562,3204],{"class":51473},[288,86564,15745],{"class":298},[288,86566,86567,86570,86572,86574],{"class":290,"line":2749},[288,86568,86569],{"class":347},"      font-style",[288,86571,51610],{"class":298},[288,86573,64014],{"class":347},[288,86575,1463],{"class":298},[288,86577,86578,86580,86582,86584],{"class":290,"line":2763},[288,86579,57589],{"class":347},[288,86581,51610],{"class":298},[288,86583,62243],{"class":347},[288,86585,1463],{"class":298},[288,86587,86588,86590,86592,86594],{"class":290,"line":2771},[288,86589,54932],{"class":347},[288,86591,51610],{"class":298},[288,86593,55004],{"class":347},[288,86595,1463],{"class":298},[288,86597,86598,86601,86603,86605,86607],{"class":290,"line":2776},[288,86599,86600],{"class":347},"      right",[288,86602,51610],{"class":298},[288,86604,872],{"class":347},[288,86606,51665],{"class":294},[288,86608,1463],{"class":298},[288,86610,86611,86613,86615,86618,86620],{"class":290,"line":2782},[288,86612,55120],{"class":347},[288,86614,51610],{"class":298},[288,86616,86617],{"class":347},"-2",[288,86619,51665],{"class":294},[288,86621,1463],{"class":298},[288,86623,86624,86626,86628,86630],{"class":290,"line":2788},[288,86625,62198],{"class":347},[288,86627,51610],{"class":298},[288,86629,62203],{"class":347},[288,86631,1463],{"class":298},[288,86633,86634],{"class":290,"line":2793},[288,86635,2359],{"class":298},[288,86637,86638],{"class":290,"line":8121},[288,86639,2572],{"emptyLinePlaceholder":217},[288,86641,86642,86644,86647],{"class":290,"line":8145},[288,86643,86323],{"class":2135},[288,86645,86646],{"class":2135}," .body",[288,86648,15745],{"class":298},[288,86650,86651,86653,86655,86657],{"class":290,"line":8150},[288,86652,57459],{"class":347},[288,86654,51610],{"class":298},[288,86656,51765],{"class":347},[288,86658,1463],{"class":298},[288,86660,86661,86663,86665,86667,86669],{"class":290,"line":8156},[288,86662,54868],{"class":347},[288,86664,51610],{"class":298},[288,86666,743],{"class":347},[288,86668,51665],{"class":294},[288,86670,1463],{"class":298},[288,86672,86673],{"class":290,"line":8183},[288,86674,2359],{"class":298},[288,86676,86677],{"class":290,"line":8188},[288,86678,2572],{"emptyLinePlaceholder":217},[288,86680,86681,86683,86686],{"class":290,"line":8194},[288,86682,86323],{"class":2135},[288,86684,86685],{"class":2135}," .footer",[288,86687,15745],{"class":298},[288,86689,86690,86692,86694,86696],{"class":290,"line":8206},[288,86691,55182],{"class":347},[288,86693,51610],{"class":298},[288,86695,51650],{"class":347},[288,86697,1463],{"class":298},[288,86699,86700,86702,86704,86706],{"class":290,"line":8218},[288,86701,55193],{"class":347},[288,86703,51610],{"class":298},[288,86705,51753],{"class":347},[288,86707,1463],{"class":298},[288,86709,86710,86712,86714,86716,86718],{"class":290,"line":8230},[288,86711,54868],{"class":347},[288,86713,51610],{"class":298},[288,86715,743],{"class":347},[288,86717,51665],{"class":294},[288,86719,1463],{"class":298},[288,86721,86722],{"class":290,"line":9889},[288,86723,2359],{"class":298},[288,86725,86726],{"class":290,"line":9914},[288,86727,2572],{"emptyLinePlaceholder":217},[288,86729,86730,86732,86734,86736],{"class":290,"line":9937},[288,86731,86323],{"class":2135},[288,86733,86685],{"class":2135},[288,86735,1571],{"class":51473},[288,86737,15745],{"class":298},[288,86739,86740,86742,86744,86746,86748,86750,86752],{"class":290,"line":9961},[288,86741,54868],{"class":347},[288,86743,51610],{"class":298},[288,86745,370],{"class":347},[288,86747,51665],{"class":294},[288,86749,2255],{"class":347},[288,86751,51665],{"class":294},[288,86753,1463],{"class":298},[288,86755,86756,86758,86760,86763],{"class":290,"line":9966},[288,86757,61894],{"class":347},[288,86759,51610],{"class":298},[288,86761,86762],{"class":347},"#ccc",[288,86764,1463],{"class":298},[288,86766,86767,86769,86771,86773],{"class":290,"line":9971},[288,86768,64143],{"class":347},[288,86770,51610],{"class":298},[288,86772,54910],{"class":347},[288,86774,1463],{"class":298},[288,86776,86777,86779,86781,86783],{"class":290,"line":9976},[288,86778,57589],{"class":347},[288,86780,51610],{"class":298},[288,86782,61015],{"class":347},[288,86784,1463],{"class":298},[288,86786,86787,86789,86791,86793,86795],{"class":290,"line":9985},[288,86788,55307],{"class":347},[288,86790,51610],{"class":298},[288,86792,376],{"class":347},[288,86794,51665],{"class":294},[288,86796,1463],{"class":298},[288,86798,86799,86801,86803,86805,86807],{"class":290,"line":9990},[288,86800,61923],{"class":347},[288,86802,51610],{"class":298},[288,86804,743],{"class":347},[288,86806,51665],{"class":294},[288,86808,1463],{"class":298},[288,86810,86811,86813,86815,86817,86819],{"class":290,"line":9996},[288,86812,55095],{"class":347},[288,86814,51610],{"class":298},[288,86816,846],{"class":347},[288,86818,51665],{"class":294},[288,86820,1463],{"class":298},[288,86822,86823],{"class":290,"line":10017},[288,86824,2359],{"class":298},[288,86826,86827],{"class":290,"line":10023},[288,86828,2572],{"emptyLinePlaceholder":217},[288,86830,86831,86833,86835,86837,86840],{"class":290,"line":10037},[288,86832,86323],{"class":2135},[288,86834,86685],{"class":2135},[288,86836,1571],{"class":51473},[288,86838,86839],{"class":2135},".submit",[288,86841,15745],{"class":298},[288,86843,86844,86846,86848,86851],{"class":290,"line":10043},[288,86845,55057],{"class":347},[288,86847,51610],{"class":298},[288,86849,86850],{"class":347},"#369",[288,86852,1463],{"class":298},[288,86854,86855],{"class":290,"line":10070},[288,86856,2359],{"class":298},[288,86858,86859,86861,86863],{"class":290,"line":10079},[288,86860,52590],{"class":298},[288,86862,5299],{"class":51473},[288,86864,51480],{"class":298},[288,86866,86867,86869,86871],{"class":290,"line":10085},[288,86868,51958],{"class":298},[288,86870,51507],{"class":51473},[288,86872,51480],{"class":298},[288,86874,86875],{"class":290,"line":10093},[288,86876,2572],{"emptyLinePlaceholder":217},[288,86878,86879,86881,86883],{"class":290,"line":10098},[288,86880,1207],{"class":298},[288,86882,51973],{"class":51473},[288,86884,51480],{"class":298},[288,86886,86887,86889,86891,86893,86895,86898,86901,86903],{"class":290,"line":16777},[288,86888,52317],{"class":298},[288,86890,54060],{"class":51473},[288,86892,15132],{"class":2135},[288,86894,344],{"class":298},[288,86896,86897],{"class":403},"\"delete\"",[288,86899,86900],{"class":298},">删除\u003C\u002F",[288,86902,54060],{"class":51473},[288,86904,51480],{"class":298},[288,86906,86907,86909,86911,86913,86915,86918,86921,86923],{"class":290,"line":16783},[288,86908,52317],{"class":298},[288,86910,54060],{"class":51473},[288,86912,15132],{"class":2135},[288,86914,344],{"class":298},[288,86916,86917],{"class":403},"\"login\"",[288,86919,86920],{"class":298},">登录\u003C\u002F",[288,86922,54060],{"class":51473},[288,86924,51480],{"class":298},[288,86926,86927,86929,86931],{"class":290,"line":16806},[288,86928,52317],{"class":298},[288,86930,51986],{"class":51473},[288,86932,51480],{"class":298},[288,86934,86935],{"class":290,"line":16812},[288,86936,86937],{"class":357},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[288,86939,86940,86942,86945,86947,86949,86951,86953,86955,86958,86960,86962],{"class":290,"line":16835},[288,86941,70257],{"class":294},[288,86943,86944],{"class":2135}," Modal",[288,86946,299],{"class":298},[288,86948,51580],{"class":5389},[288,86950,13737],{"class":294},[288,86952,70103],{"class":403},[288,86954,12608],{"class":298},[288,86956,86957],{"class":5389},"message",[288,86959,13737],{"class":294},[288,86961,70103],{"class":403},[288,86963,12615],{"class":298},[288,86965,86966],{"class":290,"line":16849},[288,86967,86968],{"class":357},"      \u002F\u002F 创建Model 模态框盒子\n",[288,86970,86971],{"class":290,"line":16869},[288,86972,86973],{"class":357},"      \u002F\u002F 1.1 创建div标签\n",[288,86975,86976,86978,86981,86983,86985,86987,86989,86991],{"class":290,"line":16875},[288,86977,70224],{"class":347},[288,86979,86980],{"class":298},".modalBox ",[288,86982,344],{"class":294},[288,86984,54569],{"class":298},[288,86986,70324],{"class":2135},[288,86988,299],{"class":298},[288,86990,82104],{"class":403},[288,86992,305],{"class":298},[288,86994,86995],{"class":290,"line":16886},[288,86996,86997],{"class":357},"      \u002F\u002F 1.2 给div 添加类名为model\n",[288,86999,87000,87002,87005,87007],{"class":290,"line":16909},[288,87001,70224],{"class":347},[288,87003,87004],{"class":298},".modalBox.className ",[288,87006,344],{"class":294},[288,87008,87009],{"class":403}," 'modal'\n",[288,87011,87012],{"class":290,"line":16931},[288,87013,87014],{"class":357},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[288,87016,87017,87019,87022,87024],{"class":290,"line":16936},[288,87018,70224],{"class":347},[288,87020,87021],{"class":298},".modalBox.innerHTML ",[288,87023,344],{"class":294},[288,87025,70341],{"class":403},[288,87027,87028,87031,87033],{"class":290,"line":16942},[288,87029,87030],{"class":403},"        \u003Cdiv class=\"header\">${",[288,87032,51580],{"class":298},[288,87034,87035],{"class":403},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[288,87037,87038,87041,87043],{"class":290,"line":16956},[288,87039,87040],{"class":403},"        \u003Cdiv class=\"body\">${",[288,87042,86957],{"class":298},[288,87044,87045],{"class":403},"}\u003C\u002Fdiv>\n",[288,87047,87048],{"class":290,"line":16969},[288,87049,87050],{"class":403},"      `\n",[288,87052,87053],{"class":290,"line":16974},[288,87054,87055],{"class":357},"      \u002F\u002F console.log(this.modalBox)\n",[288,87057,87058],{"class":290,"line":16988},[288,87059,2359],{"class":298},[288,87061,87062],{"class":290,"line":16993},[288,87063,87064],{"class":357},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[288,87066,87067],{"class":290,"line":16999},[288,87068,87069],{"class":357},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[288,87071,87072],{"class":290,"line":17004},[288,87073,87074],{"class":357},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[288,87076,87077,87080,87082,87084,87086,87089,87091,87093],{"class":290,"line":17018},[288,87078,87079],{"class":347},"    Modal",[288,87081,855],{"class":298},[288,87083,85752],{"class":347},[288,87085,855],{"class":298},[288,87087,87088],{"class":2135},"open",[288,87090,13737],{"class":294},[288,87092,59091],{"class":294},[288,87094,54625],{"class":298},[288,87096,87097],{"class":290,"line":17023},[288,87098,87099],{"class":357},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[288,87101,87102,87104,87107,87109,87111,87113,87115,87118],{"class":290,"line":17028},[288,87103,58401],{"class":294},[288,87105,87106],{"class":347}," box",[288,87108,13737],{"class":294},[288,87110,54569],{"class":298},[288,87112,54572],{"class":2135},[288,87114,299],{"class":298},[288,87116,87117],{"class":403},"'.modal'",[288,87119,305],{"class":298},[288,87121,87122],{"class":290,"line":17042},[288,87123,87124],{"class":357},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[288,87126,87127,87130,87132,87135,87137],{"class":290,"line":17054},[288,87128,87129],{"class":298},"      box ",[288,87131,1887],{"class":294},[288,87133,87134],{"class":298}," box.",[288,87136,57179],{"class":2135},[288,87138,2148],{"class":298},[288,87140,87141],{"class":290,"line":17059},[288,87142,87143],{"class":357},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[288,87145,87146],{"class":290,"line":17072},[288,87147,87148],{"class":357},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[288,87150,87151],{"class":290,"line":17077},[288,87152,87153],{"class":357},"      \u002F\u002F append可以增加对象\n",[288,87155,87156,87159,87162,87164,87167],{"class":290,"line":17082},[288,87157,87158],{"class":298},"      document.body.",[288,87160,87161],{"class":2135},"append",[288,87163,299],{"class":298},[288,87165,87166],{"class":347},"this",[288,87168,87169],{"class":298},".modalBox)\n",[288,87171,87172],{"class":290,"line":17087},[288,87173,2572],{"emptyLinePlaceholder":217},[288,87175,87176],{"class":290,"line":17100},[288,87177,87178],{"class":357},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[288,87180,87181,87183,87186,87188,87190,87193,87195,87197,87199,87201,87204,87206],{"class":290,"line":17105},[288,87182,70224],{"class":347},[288,87184,87185],{"class":298},".modalBox.",[288,87187,54572],{"class":2135},[288,87189,299],{"class":298},[288,87191,87192],{"class":403},"'i'",[288,87194,30999],{"class":298},[288,87196,57986],{"class":2135},[288,87198,299],{"class":298},[288,87200,57991],{"class":403},[288,87202,87203],{"class":298},", () ",[288,87205,84895],{"class":294},[288,87207,15745],{"class":298},[288,87209,87210],{"class":290,"line":32806},[288,87211,87212],{"class":357},"        \u002F\u002F 这个地方需要用到箭头函数\n",[288,87214,87215],{"class":290,"line":32812},[288,87216,87217],{"class":357},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[288,87219,87220],{"class":290,"line":32818},[288,87221,87222],{"class":357},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[288,87224,87225,87227,87229,87232],{"class":290,"line":32824},[288,87226,64899],{"class":347},[288,87228,855],{"class":298},[288,87230,87231],{"class":2135},"close",[288,87233,2148],{"class":298},[288,87235,87236],{"class":290,"line":32830},[288,87237,64988],{"class":298},[288,87239,87240],{"class":290,"line":32841},[288,87241,2359],{"class":298},[288,87243,87244],{"class":290,"line":32847},[288,87245,2572],{"emptyLinePlaceholder":217},[288,87247,87248],{"class":290,"line":32867},[288,87249,87250],{"class":357},"    \u002F\u002F 测试一下 点击 删除按钮\n",[288,87252,87253,87255,87257,87259,87262,87264,87266,87268,87270,87272,87274],{"class":290,"line":32873},[288,87254,52580],{"class":298},[288,87256,54572],{"class":2135},[288,87258,299],{"class":298},[288,87260,87261],{"class":403},"'#delete'",[288,87263,30999],{"class":298},[288,87265,57986],{"class":2135},[288,87267,299],{"class":298},[288,87269,57991],{"class":403},[288,87271,87203],{"class":298},[288,87273,84895],{"class":294},[288,87275,15745],{"class":298},[288,87277,87278],{"class":290,"line":32884},[288,87279,87280],{"class":357},"      \u002F\u002F 先调用Model构造函数\n",[288,87282,87283,87285,87288,87290,87292,87294,87296,87299,87301,87304],{"class":290,"line":32890},[288,87284,58401],{"class":294},[288,87286,87287],{"class":347}," del",[288,87289,13737],{"class":294},[288,87291,11751],{"class":294},[288,87293,86944],{"class":2135},[288,87295,299],{"class":298},[288,87297,87298],{"class":403},"'温馨的提示'",[288,87300,12608],{"class":298},[288,87302,87303],{"class":403},"'您没有删除权限操作'",[288,87305,305],{"class":298},[288,87307,87308],{"class":290,"line":32896},[288,87309,87310],{"class":357},"      \u002F\u002F 实例对象调用open方法\n",[288,87312,87313,87316,87318],{"class":290,"line":32902},[288,87314,87315],{"class":298},"      del.",[288,87317,87088],{"class":2135},[288,87319,2148],{"class":298},[288,87321,87322],{"class":290,"line":32908},[288,87323,33634],{"class":298},[288,87325,87326],{"class":290,"line":32914},[288,87327,87328],{"class":357},"    \u002F\u002F 测试一下 点击 登录按钮\n",[288,87330,87331,87333,87335,87337,87340,87342,87344,87346,87348,87350,87352],{"class":290,"line":32920},[288,87332,52580],{"class":298},[288,87334,54572],{"class":2135},[288,87336,299],{"class":298},[288,87338,87339],{"class":403},"'#login'",[288,87341,30999],{"class":298},[288,87343,57986],{"class":2135},[288,87345,299],{"class":298},[288,87347,57991],{"class":403},[288,87349,87203],{"class":298},[288,87351,84895],{"class":294},[288,87353,15745],{"class":298},[288,87355,87356],{"class":290,"line":32926},[288,87357,87280],{"class":357},[288,87359,87360,87362,87365,87367,87369,87371,87373,87376,87378,87381],{"class":290,"line":32946},[288,87361,58401],{"class":294},[288,87363,87364],{"class":347}," log",[288,87366,13737],{"class":294},[288,87368,11751],{"class":294},[288,87370,86944],{"class":2135},[288,87372,299],{"class":298},[288,87374,87375],{"class":403},"'友情提示'",[288,87377,12608],{"class":298},[288,87379,87380],{"class":403},"'您还没有登录呢'",[288,87382,305],{"class":298},[288,87384,87385],{"class":290,"line":32952},[288,87386,87310],{"class":357},[288,87388,87389,87392,87394],{"class":290,"line":32968},[288,87390,87391],{"class":298},"      log.",[288,87393,87088],{"class":2135},[288,87395,2148],{"class":298},[288,87397,87398],{"class":290,"line":32974},[288,87399,33634],{"class":298},[288,87401,87402],{"class":290,"line":32988},[288,87403,87404],{"class":357},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[288,87406,87407,87409,87411,87413,87415,87417,87419,87421],{"class":290,"line":32994},[288,87408,87079],{"class":347},[288,87410,855],{"class":298},[288,87412,85752],{"class":347},[288,87414,855],{"class":298},[288,87416,87231],{"class":2135},[288,87418,13737],{"class":294},[288,87420,59091],{"class":294},[288,87422,54625],{"class":298},[288,87424,87425,87427,87429,87431],{"class":290,"line":33009},[288,87426,70224],{"class":347},[288,87428,87185],{"class":298},[288,87430,57179],{"class":2135},[288,87432,2148],{"class":298},[288,87434,87435],{"class":290,"line":33015},[288,87436,2359],{"class":298},[288,87438,87439,87441,87443],{"class":290,"line":33024},[288,87440,52590],{"class":298},[288,87442,51986],{"class":51473},[288,87444,51480],{"class":298},[288,87446,87447,87449,87451],{"class":290,"line":33030},[288,87448,51958],{"class":298},[288,87450,51973],{"class":51473},[288,87452,51480],{"class":298},[288,87454,87455],{"class":290,"line":33039},[288,87456,2572],{"emptyLinePlaceholder":217},[288,87458,87459,87461,87463],{"class":290,"line":33045},[288,87460,51958],{"class":298},[288,87462,50808],{"class":51473},[288,87464,51480],{"class":298},[19,87466,87467],{},[200,87468],{"alt":205,"src":87469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87471,87473],{"id":87472},"_414-深浅拷贝","4.14 深浅拷贝",[260,87475,87477],{"id":87476},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87479,87480],{},[200,87481],{"alt":205,"src":87482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87484,87485],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87487,87488],{},[200,87489],{"alt":205,"src":87490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87492,87493],{},[200,87494],{"alt":205,"src":87495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87497,87498],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87500,87501],{},[200,87502],{"alt":205,"src":87503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87505,11505],{},[19,87507,87508],{},[200,87509],{"alt":205,"src":87510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[260,87512,87514],{"id":87513},"_4142-深拷贝","4.14.2 深拷贝",[19,87516,87517],{},"深拷贝：拷贝的是对象，不是地址",[19,87519,87520],{},"常用的三种方法：",[243,87522,87523,87526,87529],{},[246,87524,87525],{},"通过递归实现深拷贝",[246,87527,87528],{},"lodash\u002FcloneDeep",[246,87530,87531],{},"通过JSON.stringify()实现",[22171,87533,87535],{"id":87534},"_41421-递归函数","4.14.2.1 递归函数",[19,87537,87538],{},[200,87539],{"alt":205,"src":87540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[243,87542,87543],{},[246,87544,87545],{},"死递归占溢出：",[280,87547,87549],{"className":53240,"code":87548,"language":53242,"meta":205,"style":205},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,87550,87551,87559,87567,87571,87576,87580,87585,87593],{"__ignoreMap":205},[288,87552,87553,87555,87557],{"class":290,"line":291},[288,87554,1207],{"class":298},[288,87556,51973],{"class":51473},[288,87558,51480],{"class":298},[288,87560,87561,87563,87565],{"class":290,"line":206},[288,87562,52317],{"class":298},[288,87564,51986],{"class":51473},[288,87566,51480],{"class":298},[288,87568,87569],{"class":290,"line":1352},[288,87570,77316],{"class":298},[288,87572,87573],{"class":290,"line":1367},[288,87574,87575],{"class":298},"      fn()\n",[288,87577,87578],{"class":290,"line":1373},[288,87579,2359],{"class":298},[288,87581,87582],{"class":290,"line":1387},[288,87583,87584],{"class":298},"    fn()\n",[288,87586,87587,87589,87591],{"class":290,"line":1393},[288,87588,52590],{"class":298},[288,87590,51986],{"class":51473},[288,87592,51480],{"class":298},[288,87594,87595,87597,87599],{"class":290,"line":1484},[288,87596,51958],{"class":298},[288,87598,51973],{"class":51473},[288,87600,51480],{"class":298},[243,87602,87603],{"start":206},[246,87604,87605],{},"递归函数要加判断条件：",[19,87607,87608],{},[200,87609],{"alt":205,"src":87610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[243,87612,87613],{"start":1352},[246,87614,87615],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[280,87617,87619],{"className":50806,"code":87618,"language":50808,"meta":205,"style":205},"\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",[25,87620,87621,87631,87645,87649,87657,87671,87691,87703,87711,87715,87723,87735,87743,87751,87776,87788,87792,87799,87807,87815,87819],{"__ignoreMap":205},[288,87622,87623,87625,87627,87629],{"class":290,"line":291},[288,87624,51470],{"class":298},[288,87626,51474],{"class":51473},[288,87628,51477],{"class":2135},[288,87630,51480],{"class":298},[288,87632,87633,87635,87637,87639,87641,87643],{"class":290,"line":206},[288,87634,1207],{"class":298},[288,87636,50808],{"class":51473},[288,87638,51489],{"class":2135},[288,87640,344],{"class":298},[288,87642,51494],{"class":403},[288,87644,51480],{"class":298},[288,87646,87647],{"class":290,"line":1352},[288,87648,2572],{"emptyLinePlaceholder":217},[288,87650,87651,87653,87655],{"class":290,"line":1367},[288,87652,1207],{"class":298},[288,87654,51507],{"class":51473},[288,87656,51480],{"class":298},[288,87658,87659,87661,87663,87665,87667,87669],{"class":290,"line":1373},[288,87660,52317],{"class":298},[288,87662,51517],{"class":51473},[288,87664,51520],{"class":2135},[288,87666,344],{"class":298},[288,87668,51525],{"class":403},[288,87670,51480],{"class":298},[288,87672,87673,87675,87677,87679,87681,87683,87685,87687,87689],{"class":290,"line":1387},[288,87674,52317],{"class":298},[288,87676,51517],{"class":51473},[288,87678,15093],{"class":2135},[288,87680,344],{"class":298},[288,87682,51564],{"class":403},[288,87684,51544],{"class":2135},[288,87686,344],{"class":298},[288,87688,51571],{"class":403},[288,87690,51480],{"class":298},[288,87692,87693,87695,87697,87699,87701],{"class":290,"line":1393},[288,87694,52317],{"class":298},[288,87696,51580],{"class":51473},[288,87698,51583],{"class":298},[288,87700,51580],{"class":51473},[288,87702,51480],{"class":298},[288,87704,87705,87707,87709],{"class":290,"line":1484},[288,87706,51958],{"class":298},[288,87708,51507],{"class":51473},[288,87710,51480],{"class":298},[288,87712,87713],{"class":290,"line":1490},[288,87714,2572],{"emptyLinePlaceholder":217},[288,87716,87717,87719,87721],{"class":290,"line":1502},[288,87718,1207],{"class":298},[288,87720,51973],{"class":51473},[288,87722,51480],{"class":298},[288,87724,87725,87727,87729,87731,87733],{"class":290,"line":1784},[288,87726,52317],{"class":298},[288,87728,51784],{"class":51473},[288,87730,55487],{"class":298},[288,87732,51784],{"class":51473},[288,87734,51480],{"class":298},[288,87736,87737,87739,87741],{"class":290,"line":1789},[288,87738,52317],{"class":298},[288,87740,51986],{"class":51473},[288,87742,51480],{"class":298},[288,87744,87745,87747,87749],{"class":290,"line":1795},[288,87746,70257],{"class":294},[288,87748,73946],{"class":2135},[288,87750,11026],{"class":298},[288,87752,87753,87755,87757,87759,87761,87763,87765,87767,87769,87771,87774],{"class":290,"line":1800},[288,87754,55944],{"class":298},[288,87756,54572],{"class":2135},[288,87758,299],{"class":298},[288,87760,82104],{"class":403},[288,87762,74422],{"class":298},[288,87764,344],{"class":294},[288,87766,11751],{"class":294},[288,87768,73962],{"class":2135},[288,87770,17434],{"class":298},[288,87772,87773],{"class":2135},"toLocaleString",[288,87775,2148],{"class":298},[288,87777,87778,87781,87784,87786],{"class":290,"line":1814},[288,87779,87780],{"class":2135},"      setTimeout",[288,87782,87783],{"class":298},"(getTime, ",[288,87785,6583],{"class":347},[288,87787,305],{"class":298},[288,87789,87790],{"class":290,"line":1819},[288,87791,2359],{"class":298},[288,87793,87794,87797],{"class":290,"line":1825},[288,87795,87796],{"class":2135},"    getTime",[288,87798,2148],{"class":298},[288,87800,87801,87803,87805],{"class":290,"line":1846},[288,87802,52590],{"class":298},[288,87804,51986],{"class":51473},[288,87806,51480],{"class":298},[288,87808,87809,87811,87813],{"class":290,"line":1851},[288,87810,51958],{"class":298},[288,87812,51973],{"class":51473},[288,87814,51480],{"class":298},[288,87816,87817],{"class":290,"line":1865},[288,87818,2572],{"emptyLinePlaceholder":217},[288,87820,87821,87823,87825],{"class":290,"line":1870},[288,87822,51958],{"class":298},[288,87824,50808],{"class":51473},[288,87826,51480],{"class":298},[19,87828,87829],{},[200,87830],{"alt":205,"src":87831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[243,87833,87834],{"start":1367},[246,87835,87525],{},[19,87837,87838],{},[200,87839],{"alt":205,"src":87840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87842,87843],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87845,39362],{},[19,87847,87848],{},"这个是简易版的递归函数深拷贝",[19,87850,87851],{},"一定要注意先数组再对象，因为万物皆可对象",[280,87853,87855],{"className":50806,"code":87854,"language":50808,"meta":205,"style":205},"\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",[25,87856,87857,87867,87881,87885,87893,87907,87927,87939,87947,87951,87959,87967,87977,87986,87994,88010,88014,88022,88026,88030,88042,88047,88066,88082,88087,88092,88097,88112,88117,88122,88131,88139,88156,88164,88170,88178,88183,88188,88197,88201,88205,88209,88220,88229,88239,88253,88263,88271,88279,88287,88291],{"__ignoreMap":205},[288,87858,87859,87861,87863,87865],{"class":290,"line":291},[288,87860,51470],{"class":298},[288,87862,51474],{"class":51473},[288,87864,51477],{"class":2135},[288,87866,51480],{"class":298},[288,87868,87869,87871,87873,87875,87877,87879],{"class":290,"line":206},[288,87870,1207],{"class":298},[288,87872,50808],{"class":51473},[288,87874,51489],{"class":2135},[288,87876,344],{"class":298},[288,87878,51494],{"class":403},[288,87880,51480],{"class":298},[288,87882,87883],{"class":290,"line":1352},[288,87884,2572],{"emptyLinePlaceholder":217},[288,87886,87887,87889,87891],{"class":290,"line":1367},[288,87888,1207],{"class":298},[288,87890,51507],{"class":51473},[288,87892,51480],{"class":298},[288,87894,87895,87897,87899,87901,87903,87905],{"class":290,"line":1373},[288,87896,52317],{"class":298},[288,87898,51517],{"class":51473},[288,87900,51520],{"class":2135},[288,87902,344],{"class":298},[288,87904,51525],{"class":403},[288,87906,51480],{"class":298},[288,87908,87909,87911,87913,87915,87917,87919,87921,87923,87925],{"class":290,"line":1387},[288,87910,52317],{"class":298},[288,87912,51517],{"class":51473},[288,87914,15093],{"class":2135},[288,87916,344],{"class":298},[288,87918,51564],{"class":403},[288,87920,51544],{"class":2135},[288,87922,344],{"class":298},[288,87924,51571],{"class":403},[288,87926,51480],{"class":298},[288,87928,87929,87931,87933,87935,87937],{"class":290,"line":1393},[288,87930,52317],{"class":298},[288,87932,51580],{"class":51473},[288,87934,51583],{"class":298},[288,87936,51580],{"class":51473},[288,87938,51480],{"class":298},[288,87940,87941,87943,87945],{"class":290,"line":1484},[288,87942,51958],{"class":298},[288,87944,51507],{"class":51473},[288,87946,51480],{"class":298},[288,87948,87949],{"class":290,"line":1490},[288,87950,2572],{"emptyLinePlaceholder":217},[288,87952,87953,87955,87957],{"class":290,"line":1502},[288,87954,1207],{"class":298},[288,87956,51973],{"class":51473},[288,87958,51480],{"class":298},[288,87960,87961,87963,87965],{"class":290,"line":1784},[288,87962,52317],{"class":298},[288,87964,51986],{"class":51473},[288,87966,51480],{"class":298},[288,87968,87969,87971,87973,87975],{"class":290,"line":1789},[288,87970,11394],{"class":294},[288,87972,70144],{"class":347},[288,87974,13737],{"class":294},[288,87976,15745],{"class":298},[288,87978,87979,87981,87984],{"class":290,"line":1795},[288,87980,71789],{"class":298},[288,87982,87983],{"class":403},"'pink'",[288,87985,31639],{"class":298},[288,87987,87988,87990,87992],{"class":290,"line":1800},[288,87989,71799],{"class":298},[288,87991,947],{"class":347},[288,87993,31639],{"class":298},[288,87995,87996,87999,88002,88004,88007],{"class":290,"line":1814},[288,87997,87998],{"class":298},"      hobby: [",[288,88000,88001],{"class":403},"'乒乓球'",[288,88003,12608],{"class":298},[288,88005,88006],{"class":403},"'足球'",[288,88008,88009],{"class":298},"],\n",[288,88011,88012],{"class":290,"line":1819},[288,88013,78045],{"class":298},[288,88015,88016,88019],{"class":290,"line":1825},[288,88017,88018],{"class":298},"        baby: ",[288,88020,88021],{"class":403},"'小pink'\n",[288,88023,88024],{"class":290,"line":1846},[288,88025,52571],{"class":298},[288,88027,88028],{"class":290,"line":1851},[288,88029,2359],{"class":298},[288,88031,88032,88034,88037,88039],{"class":290,"line":1865},[288,88033,11394],{"class":294},[288,88035,88036],{"class":347}," o",[288,88038,13737],{"class":294},[288,88040,88041],{"class":298}," {}\n",[288,88043,88044],{"class":290,"line":1870},[288,88045,88046],{"class":357},"    \u002F\u002F 拷贝函数\n",[288,88048,88049,88051,88054,88056,88059,88061,88064],{"class":290,"line":1899},[288,88050,70257],{"class":294},[288,88052,88053],{"class":2135}," deepCopy",[288,88055,299],{"class":298},[288,88057,88058],{"class":5389},"newObj",[288,88060,12608],{"class":298},[288,88062,88063],{"class":5389},"oldObj",[288,88065,12615],{"class":298},[288,88067,88068,88070,88072,88074,88077,88079],{"class":290,"line":1904},[288,88069,52457],{"class":294},[288,88071,1830],{"class":298},[288,88073,52020],{"class":294},[288,88075,88076],{"class":298}," k ",[288,88078,26216],{"class":294},[288,88080,88081],{"class":298}," oldObj) {\n",[288,88083,88084],{"class":290,"line":1921},[288,88085,88086],{"class":357},"        \u002F\u002F 处理数组的问题\n",[288,88088,88089],{"class":290,"line":1926},[288,88090,88091],{"class":357},"        \u002F\u002F 判断是否属于数组\n",[288,88093,88094],{"class":290,"line":1931},[288,88095,88096],{"class":357},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[288,88098,88099,88101,88104,88107,88110],{"class":290,"line":1936},[288,88100,2669],{"class":294},[288,88102,88103],{"class":298}," (oldObj[k] ",[288,88105,88106],{"class":294},"instanceof",[288,88108,88109],{"class":2135}," Array",[288,88111,12615],{"class":298},[288,88113,88114],{"class":290,"line":1950},[288,88115,88116],{"class":357},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[288,88118,88119],{"class":290,"line":1955},[288,88120,88121],{"class":357},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[288,88123,88124,88127,88129],{"class":290,"line":2749},[288,88125,88126],{"class":298},"          newObj[k] ",[288,88128,344],{"class":294},[288,88130,52011],{"class":298},[288,88132,88133,88136],{"class":290,"line":2763},[288,88134,88135],{"class":2135},"          deepCopy",[288,88137,88138],{"class":298},"(newObj[k], oldObj[k])\n",[288,88140,88141,88143,88145,88147,88149,88151,88154],{"class":290,"line":2771},[288,88142,80253],{"class":298},[288,88144,1873],{"class":294},[288,88146,1876],{"class":294},[288,88148,88103],{"class":298},[288,88150,88106],{"class":294},[288,88152,88153],{"class":2135}," Object",[288,88155,12615],{"class":298},[288,88157,88158,88160,88162],{"class":290,"line":2776},[288,88159,88126],{"class":298},[288,88161,344],{"class":294},[288,88163,88041],{"class":298},[288,88165,88166,88168],{"class":290,"line":2782},[288,88167,88135],{"class":2135},[288,88169,88138],{"class":298},[288,88171,88172,88174,88176],{"class":290,"line":2788},[288,88173,80253],{"class":298},[288,88175,1873],{"class":294},[288,88177,15745],{"class":298},[288,88179,88180],{"class":290,"line":2793},[288,88181,88182],{"class":357},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[288,88184,88185],{"class":290,"line":8121},[288,88186,88187],{"class":357},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[288,88189,88190,88192,88194],{"class":290,"line":8145},[288,88191,88126],{"class":298},[288,88193,344],{"class":294},[288,88195,88196],{"class":298}," oldObj[k]\n",[288,88198,88199],{"class":290,"line":8150},[288,88200,2701],{"class":298},[288,88202,88203],{"class":290,"line":8156},[288,88204,52571],{"class":298},[288,88206,88207],{"class":290,"line":8183},[288,88208,2359],{"class":298},[288,88210,88211,88214,88217],{"class":290,"line":8188},[288,88212,88213],{"class":2135},"    deepCopy",[288,88215,88216],{"class":298},"(o, obj) ",[288,88218,88219],{"class":357},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[288,88221,88222,88224,88226],{"class":290,"line":8194},[288,88223,73926],{"class":298},[288,88225,58420],{"class":2135},[288,88227,88228],{"class":298},"(o)\n",[288,88230,88231,88234,88236],{"class":290,"line":8206},[288,88232,88233],{"class":298},"    o.age ",[288,88235,344],{"class":294},[288,88237,88238],{"class":347}," 20\n",[288,88240,88241,88244,88246,88248,88250],{"class":290,"line":8218},[288,88242,88243],{"class":298},"    o.hobby[",[288,88245,490],{"class":347},[288,88247,4615],{"class":298},[288,88249,344],{"class":294},[288,88251,88252],{"class":403}," '篮球'\n",[288,88254,88255,88258,88260],{"class":290,"line":8230},[288,88256,88257],{"class":298},"    o.family ",[288,88259,344],{"class":294},[288,88261,88262],{"class":403}," '老pink'\n",[288,88264,88265,88267,88269],{"class":290,"line":9889},[288,88266,73926],{"class":298},[288,88268,58420],{"class":2135},[288,88270,70209],{"class":298},[288,88272,88273,88275,88277],{"class":290,"line":9914},[288,88274,52590],{"class":298},[288,88276,51986],{"class":51473},[288,88278,51480],{"class":298},[288,88280,88281,88283,88285],{"class":290,"line":9937},[288,88282,51958],{"class":298},[288,88284,51973],{"class":51473},[288,88286,51480],{"class":298},[288,88288,88289],{"class":290,"line":9961},[288,88290,2572],{"emptyLinePlaceholder":217},[288,88292,88293,88295,88297],{"class":290,"line":9966},[288,88294,51958],{"class":298},[288,88296,50808],{"class":51473},[288,88298,51480],{"class":298},[19,88300,88301],{},[200,88302],{"alt":205,"src":88303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22171,88305,88307,88308],{"id":88306},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[448,88309,88310],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88312,88313],{},[104,88314,88315],{"href":88315,"rel":88316},"https:\u002F\u002Fwww.lodashjs.com\u002F",[108],[19,88318,88319],{},"lodash里边的方法都要加上一个下划线_",[19,88321,88322],{},"_.cloneDeep()",[280,88324,88326],{"className":50806,"code":88325,"language":50808,"meta":205,"style":205},"\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",[25,88327,88328,88338,88352,88356,88364,88378,88398,88410,88418,88422,88430,88435,88454,88462,88472,88480,88488,88500,88504,88510,88514,88518,88534,88542,88551,88559,88567,88575,88579],{"__ignoreMap":205},[288,88329,88330,88332,88334,88336],{"class":290,"line":291},[288,88331,51470],{"class":298},[288,88333,51474],{"class":51473},[288,88335,51477],{"class":2135},[288,88337,51480],{"class":298},[288,88339,88340,88342,88344,88346,88348,88350],{"class":290,"line":206},[288,88341,1207],{"class":298},[288,88343,50808],{"class":51473},[288,88345,51489],{"class":2135},[288,88347,344],{"class":298},[288,88349,51494],{"class":403},[288,88351,51480],{"class":298},[288,88353,88354],{"class":290,"line":1352},[288,88355,2572],{"emptyLinePlaceholder":217},[288,88357,88358,88360,88362],{"class":290,"line":1367},[288,88359,1207],{"class":298},[288,88361,51507],{"class":51473},[288,88363,51480],{"class":298},[288,88365,88366,88368,88370,88372,88374,88376],{"class":290,"line":1373},[288,88367,52317],{"class":298},[288,88369,51517],{"class":51473},[288,88371,51520],{"class":2135},[288,88373,344],{"class":298},[288,88375,51525],{"class":403},[288,88377,51480],{"class":298},[288,88379,88380,88382,88384,88386,88388,88390,88392,88394,88396],{"class":290,"line":1387},[288,88381,52317],{"class":298},[288,88383,51517],{"class":51473},[288,88385,15093],{"class":2135},[288,88387,344],{"class":298},[288,88389,51564],{"class":403},[288,88391,51544],{"class":2135},[288,88393,344],{"class":298},[288,88395,51571],{"class":403},[288,88397,51480],{"class":298},[288,88399,88400,88402,88404,88406,88408],{"class":290,"line":1393},[288,88401,52317],{"class":298},[288,88403,51580],{"class":51473},[288,88405,51583],{"class":298},[288,88407,51580],{"class":51473},[288,88409,51480],{"class":298},[288,88411,88412,88414,88416],{"class":290,"line":1484},[288,88413,51958],{"class":298},[288,88415,51507],{"class":51473},[288,88417,51480],{"class":298},[288,88419,88420],{"class":290,"line":1490},[288,88421,2572],{"emptyLinePlaceholder":217},[288,88423,88424,88426,88428],{"class":290,"line":1502},[288,88425,1207],{"class":298},[288,88427,51973],{"class":51473},[288,88429,51480],{"class":298},[288,88431,88432],{"class":290,"line":1784},[288,88433,88434],{"class":357},"  \u003C!-- 先引用这个库 -->\n",[288,88436,88437,88439,88441,88443,88445,88448,88450,88452],{"class":290,"line":1789},[288,88438,52317],{"class":298},[288,88440,51986],{"class":51473},[288,88442,55412],{"class":2135},[288,88444,344],{"class":298},[288,88446,88447],{"class":403},"\"lodash.min.js\"",[288,88449,55487],{"class":298},[288,88451,51986],{"class":51473},[288,88453,51480],{"class":298},[288,88455,88456,88458,88460],{"class":290,"line":1795},[288,88457,52317],{"class":298},[288,88459,51986],{"class":51473},[288,88461,51480],{"class":298},[288,88463,88464,88466,88468,88470],{"class":290,"line":1800},[288,88465,11394],{"class":294},[288,88467,70144],{"class":347},[288,88469,13737],{"class":294},[288,88471,15745],{"class":298},[288,88473,88474,88476,88478],{"class":290,"line":1814},[288,88475,71789],{"class":298},[288,88477,87983],{"class":403},[288,88479,31639],{"class":298},[288,88481,88482,88484,88486],{"class":290,"line":1819},[288,88483,71799],{"class":298},[288,88485,947],{"class":347},[288,88487,31639],{"class":298},[288,88489,88490,88492,88494,88496,88498],{"class":290,"line":1825},[288,88491,87998],{"class":298},[288,88493,88001],{"class":403},[288,88495,12608],{"class":298},[288,88497,88006],{"class":403},[288,88499,88009],{"class":298},[288,88501,88502],{"class":290,"line":1846},[288,88503,78045],{"class":298},[288,88505,88506,88508],{"class":290,"line":1851},[288,88507,88018],{"class":298},[288,88509,88021],{"class":403},[288,88511,88512],{"class":290,"line":1865},[288,88513,52571],{"class":298},[288,88515,88516],{"class":290,"line":1870},[288,88517,2359],{"class":298},[288,88519,88520,88522,88524,88526,88529,88532],{"class":290,"line":1899},[288,88521,11394],{"class":294},[288,88523,88036],{"class":347},[288,88525,13737],{"class":294},[288,88527,88528],{"class":298}," _.",[288,88530,88531],{"class":2135},"cloneDeep",[288,88533,70209],{"class":298},[288,88535,88536,88538,88540],{"class":290,"line":1904},[288,88537,73926],{"class":298},[288,88539,58420],{"class":2135},[288,88541,88228],{"class":298},[288,88543,88544,88547,88549],{"class":290,"line":1921},[288,88545,88546],{"class":298},"    o.family.baby ",[288,88548,344],{"class":294},[288,88550,88262],{"class":403},[288,88552,88553,88555,88557],{"class":290,"line":1926},[288,88554,73926],{"class":298},[288,88556,58420],{"class":2135},[288,88558,70209],{"class":298},[288,88560,88561,88563,88565],{"class":290,"line":1931},[288,88562,52590],{"class":298},[288,88564,51986],{"class":51473},[288,88566,51480],{"class":298},[288,88568,88569,88571,88573],{"class":290,"line":1936},[288,88570,51958],{"class":298},[288,88572,51973],{"class":51473},[288,88574,51480],{"class":298},[288,88576,88577],{"class":290,"line":1950},[288,88578,2572],{"emptyLinePlaceholder":217},[288,88580,88581,88583,88585],{"class":290,"line":1955},[288,88582,51958],{"class":298},[288,88584,50808],{"class":51473},[288,88586,51480],{"class":298},[19,88588,88589],{},[200,88590],{"alt":205,"src":88591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22171,88593,88595],{"id":88594},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[280,88597,88599],{"className":50806,"code":88598,"language":50808,"meta":205,"style":205},"\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",[25,88600,88601,88611,88625,88629,88637,88651,88671,88683,88691,88695,88703,88711,88721,88729,88737,88749,88753,88759,88763,88767,88772,88777,88782,88808,88816,88825,88833,88841,88849,88853],{"__ignoreMap":205},[288,88602,88603,88605,88607,88609],{"class":290,"line":291},[288,88604,51470],{"class":298},[288,88606,51474],{"class":51473},[288,88608,51477],{"class":2135},[288,88610,51480],{"class":298},[288,88612,88613,88615,88617,88619,88621,88623],{"class":290,"line":206},[288,88614,1207],{"class":298},[288,88616,50808],{"class":51473},[288,88618,51489],{"class":2135},[288,88620,344],{"class":298},[288,88622,51494],{"class":403},[288,88624,51480],{"class":298},[288,88626,88627],{"class":290,"line":1352},[288,88628,2572],{"emptyLinePlaceholder":217},[288,88630,88631,88633,88635],{"class":290,"line":1367},[288,88632,1207],{"class":298},[288,88634,51507],{"class":51473},[288,88636,51480],{"class":298},[288,88638,88639,88641,88643,88645,88647,88649],{"class":290,"line":1373},[288,88640,52317],{"class":298},[288,88642,51517],{"class":51473},[288,88644,51520],{"class":2135},[288,88646,344],{"class":298},[288,88648,51525],{"class":403},[288,88650,51480],{"class":298},[288,88652,88653,88655,88657,88659,88661,88663,88665,88667,88669],{"class":290,"line":1387},[288,88654,52317],{"class":298},[288,88656,51517],{"class":51473},[288,88658,15093],{"class":2135},[288,88660,344],{"class":298},[288,88662,51564],{"class":403},[288,88664,51544],{"class":2135},[288,88666,344],{"class":298},[288,88668,51571],{"class":403},[288,88670,51480],{"class":298},[288,88672,88673,88675,88677,88679,88681],{"class":290,"line":1393},[288,88674,52317],{"class":298},[288,88676,51580],{"class":51473},[288,88678,51583],{"class":298},[288,88680,51580],{"class":51473},[288,88682,51480],{"class":298},[288,88684,88685,88687,88689],{"class":290,"line":1484},[288,88686,51958],{"class":298},[288,88688,51507],{"class":51473},[288,88690,51480],{"class":298},[288,88692,88693],{"class":290,"line":1490},[288,88694,2572],{"emptyLinePlaceholder":217},[288,88696,88697,88699,88701],{"class":290,"line":1502},[288,88698,1207],{"class":298},[288,88700,51973],{"class":51473},[288,88702,51480],{"class":298},[288,88704,88705,88707,88709],{"class":290,"line":1784},[288,88706,52317],{"class":298},[288,88708,51986],{"class":51473},[288,88710,51480],{"class":298},[288,88712,88713,88715,88717,88719],{"class":290,"line":1789},[288,88714,11394],{"class":294},[288,88716,70144],{"class":347},[288,88718,13737],{"class":294},[288,88720,15745],{"class":298},[288,88722,88723,88725,88727],{"class":290,"line":1795},[288,88724,71789],{"class":298},[288,88726,87983],{"class":403},[288,88728,31639],{"class":298},[288,88730,88731,88733,88735],{"class":290,"line":1800},[288,88732,71799],{"class":298},[288,88734,947],{"class":347},[288,88736,31639],{"class":298},[288,88738,88739,88741,88743,88745,88747],{"class":290,"line":1814},[288,88740,87998],{"class":298},[288,88742,88001],{"class":403},[288,88744,12608],{"class":298},[288,88746,88006],{"class":403},[288,88748,88009],{"class":298},[288,88750,88751],{"class":290,"line":1819},[288,88752,78045],{"class":298},[288,88754,88755,88757],{"class":290,"line":1825},[288,88756,88018],{"class":298},[288,88758,88021],{"class":403},[288,88760,88761],{"class":290,"line":1846},[288,88762,52571],{"class":298},[288,88764,88765],{"class":290,"line":1851},[288,88766,2359],{"class":298},[288,88768,88769],{"class":290,"line":1865},[288,88770,88771],{"class":357},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[288,88773,88774],{"class":290,"line":1870},[288,88775,88776],{"class":357},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[288,88778,88779],{"class":290,"line":1899},[288,88780,88781],{"class":357},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[288,88783,88784,88786,88788,88790,88793,88795,88798,88800,88802,88804,88806],{"class":290,"line":1904},[288,88785,11394],{"class":294},[288,88787,88036],{"class":347},[288,88789,13737],{"class":294},[288,88791,88792],{"class":347}," JSON",[288,88794,855],{"class":298},[288,88796,88797],{"class":2135},"parse",[288,88799,299],{"class":298},[288,88801,71837],{"class":347},[288,88803,855],{"class":298},[288,88805,71842],{"class":2135},[288,88807,71845],{"class":298},[288,88809,88810,88812,88814],{"class":290,"line":1921},[288,88811,73926],{"class":298},[288,88813,58420],{"class":2135},[288,88815,88228],{"class":298},[288,88817,88818,88820,88822],{"class":290,"line":1926},[288,88819,88546],{"class":298},[288,88821,344],{"class":294},[288,88823,88824],{"class":403}," '123'\n",[288,88826,88827,88829,88831],{"class":290,"line":1931},[288,88828,73926],{"class":298},[288,88830,58420],{"class":2135},[288,88832,70209],{"class":298},[288,88834,88835,88837,88839],{"class":290,"line":1936},[288,88836,52590],{"class":298},[288,88838,51986],{"class":51473},[288,88840,51480],{"class":298},[288,88842,88843,88845,88847],{"class":290,"line":1950},[288,88844,51958],{"class":298},[288,88846,51973],{"class":51473},[288,88848,51480],{"class":298},[288,88850,88851],{"class":290,"line":1955},[288,88852,2572],{"emptyLinePlaceholder":217},[288,88854,88855,88857,88859],{"class":290,"line":2749},[288,88856,51958],{"class":298},[288,88858,50808],{"class":51473},[288,88860,51480],{"class":298},[19,88862,88863],{},[200,88864],{"alt":205,"src":88865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88867,88869],{"id":88868},"_415-异常处理","4.15 异常处理",[243,88871,88872],{},[246,88873,88874],{},"throw抛异常",[19,88876,88877],{},[200,88878],{"alt":205,"src":88879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[243,88881,88882],{"start":206},[246,88883,88884],{},"try\u002Fcatch 捕获错误信息",[19,88886,88887],{},[200,88888],{"alt":205,"src":88889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[280,88891,88893],{"className":50806,"code":88892,"language":50808,"meta":205,"style":205},"\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",[25,88894,88895,88905,88919,88923,88931,88945,88965,88977,88985,88989,88997,89009,89017,89026,89033,89038,89057,89066,89077,89082,89092,89097,89102,89107,89124,89128,89133,89140,89152,89156,89168,89172,89176,89181,89186,89193,89201,89209,89213],{"__ignoreMap":205},[288,88896,88897,88899,88901,88903],{"class":290,"line":291},[288,88898,51470],{"class":298},[288,88900,51474],{"class":51473},[288,88902,51477],{"class":2135},[288,88904,51480],{"class":298},[288,88906,88907,88909,88911,88913,88915,88917],{"class":290,"line":206},[288,88908,1207],{"class":298},[288,88910,50808],{"class":51473},[288,88912,51489],{"class":2135},[288,88914,344],{"class":298},[288,88916,51494],{"class":403},[288,88918,51480],{"class":298},[288,88920,88921],{"class":290,"line":1352},[288,88922,2572],{"emptyLinePlaceholder":217},[288,88924,88925,88927,88929],{"class":290,"line":1367},[288,88926,1207],{"class":298},[288,88928,51507],{"class":51473},[288,88930,51480],{"class":298},[288,88932,88933,88935,88937,88939,88941,88943],{"class":290,"line":1373},[288,88934,52317],{"class":298},[288,88936,51517],{"class":51473},[288,88938,51520],{"class":2135},[288,88940,344],{"class":298},[288,88942,51525],{"class":403},[288,88944,51480],{"class":298},[288,88946,88947,88949,88951,88953,88955,88957,88959,88961,88963],{"class":290,"line":1387},[288,88948,52317],{"class":298},[288,88950,51517],{"class":51473},[288,88952,15093],{"class":2135},[288,88954,344],{"class":298},[288,88956,51564],{"class":403},[288,88958,51544],{"class":2135},[288,88960,344],{"class":298},[288,88962,51571],{"class":403},[288,88964,51480],{"class":298},[288,88966,88967,88969,88971,88973,88975],{"class":290,"line":1393},[288,88968,52317],{"class":298},[288,88970,51580],{"class":51473},[288,88972,51583],{"class":298},[288,88974,51580],{"class":51473},[288,88976,51480],{"class":298},[288,88978,88979,88981,88983],{"class":290,"line":1484},[288,88980,51958],{"class":298},[288,88982,51507],{"class":51473},[288,88984,51480],{"class":298},[288,88986,88987],{"class":290,"line":1490},[288,88988,2572],{"emptyLinePlaceholder":217},[288,88990,88991,88993,88995],{"class":290,"line":1502},[288,88992,1207],{"class":298},[288,88994,51973],{"class":51473},[288,88996,51480],{"class":298},[288,88998,88999,89001,89003,89005,89007],{"class":290,"line":1784},[288,89000,52317],{"class":298},[288,89002,19],{"class":51473},[288,89004,53667],{"class":298},[288,89006,19],{"class":51473},[288,89008,51480],{"class":298},[288,89010,89011,89013,89015],{"class":290,"line":1789},[288,89012,52317],{"class":298},[288,89014,51986],{"class":51473},[288,89016,51480],{"class":298},[288,89018,89019,89021,89024],{"class":290,"line":1795},[288,89020,70257],{"class":294},[288,89022,89023],{"class":2135}," fn",[288,89025,11026],{"class":298},[288,89027,89028,89031],{"class":290,"line":1800},[288,89029,89030],{"class":294},"      try",[288,89032,15745],{"class":298},[288,89034,89035],{"class":290,"line":1814},[288,89036,89037],{"class":357},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[288,89039,89040,89042,89044,89046,89048,89050,89052,89055],{"class":290,"line":1819},[288,89041,61443],{"class":294},[288,89043,6998],{"class":347},[288,89045,13737],{"class":294},[288,89047,54569],{"class":298},[288,89049,54572],{"class":2135},[288,89051,299],{"class":298},[288,89053,89054],{"class":403},"'.p'",[288,89056,305],{"class":298},[288,89058,89059,89062,89064],{"class":290,"line":1825},[288,89060,89061],{"class":298},"        p.style.color ",[288,89063,344],{"class":294},[288,89065,67224],{"class":403},[288,89067,89068,89071,89074],{"class":290,"line":1846},[288,89069,89070],{"class":298},"      } ",[288,89072,89073],{"class":294},"catch",[288,89075,89076],{"class":298}," (err) {\n",[288,89078,89079],{"class":290,"line":1851},[288,89080,89081],{"class":357},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[288,89083,89084,89087,89089],{"class":290,"line":1865},[288,89085,89086],{"class":298},"        console.",[288,89088,58420],{"class":2135},[288,89090,89091],{"class":298},"(err.message)\n",[288,89093,89094],{"class":290,"line":1870},[288,89095,89096],{"class":357},"        \u002F\u002F 想要中断程序，需要加return\n",[288,89098,89099],{"class":290,"line":1899},[288,89100,89101],{"class":357},"        \u002F\u002F return\n",[288,89103,89104],{"class":290,"line":1904},[288,89105,89106],{"class":357},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[288,89108,89109,89112,89114,89117,89119,89122],{"class":290,"line":1921},[288,89110,89111],{"class":294},"        throw",[288,89113,11751],{"class":294},[288,89115,89116],{"class":2135}," Error",[288,89118,299],{"class":298},[288,89120,89121],{"class":403},"'你看看，选择器错误了吧'",[288,89123,305],{"class":298},[288,89125,89126],{"class":290,"line":1926},[288,89127,52571],{"class":298},[288,89129,89130],{"class":290,"line":1931},[288,89131,89132],{"class":357},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[288,89134,89135,89138],{"class":290,"line":1936},[288,89136,89137],{"class":294},"      finally",[288,89139,15745],{"class":298},[288,89141,89142,89145,89147,89150],{"class":290,"line":1950},[288,89143,89144],{"class":2135},"        alert",[288,89146,299],{"class":298},[288,89148,89149],{"class":403},"'弹出对话框'",[288,89151,305],{"class":298},[288,89153,89154],{"class":290,"line":1955},[288,89155,52571],{"class":298},[288,89157,89158,89160,89162,89164,89166],{"class":290,"line":2749},[288,89159,58417],{"class":298},[288,89161,58420],{"class":2135},[288,89163,299],{"class":298},[288,89165,769],{"class":347},[288,89167,305],{"class":298},[288,89169,89170],{"class":290,"line":2763},[288,89171,2572],{"emptyLinePlaceholder":217},[288,89173,89174],{"class":290,"line":2771},[288,89175,2359],{"class":298},[288,89177,89178],{"class":290,"line":2776},[288,89179,89180],{"class":357},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[288,89182,89183],{"class":290,"line":2782},[288,89184,89185],{"class":357},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[288,89187,89188,89191],{"class":290,"line":2788},[288,89189,89190],{"class":2135},"    fn",[288,89192,2148],{"class":298},[288,89194,89195,89197,89199],{"class":290,"line":2793},[288,89196,52590],{"class":298},[288,89198,51986],{"class":51473},[288,89200,51480],{"class":298},[288,89202,89203,89205,89207],{"class":290,"line":8121},[288,89204,51958],{"class":298},[288,89206,51973],{"class":51473},[288,89208,51480],{"class":298},[288,89210,89211],{"class":290,"line":8145},[288,89212,2572],{"emptyLinePlaceholder":217},[288,89214,89215,89217,89219],{"class":290,"line":8150},[288,89216,51958],{"class":298},[288,89218,50808],{"class":51473},[288,89220,51480],{"class":298},[19,89222,89223],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[243,89225,89226],{"start":1352},[246,89227,89228],{},"debugger",[19,89230,89231],{},[200,89232],{"alt":205,"src":89233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89235,89236],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89238,89240],{"id":89239},"_416-处理this","4.16 处理this",[260,89242,89244],{"id":89243},"_4161-this的指向","4.16.1 this的指向",[243,89246,89247],{},[246,89248,89249],{},"普通函数的this",[19,89251,89252],{},[200,89253],{"alt":205,"src":89254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[243,89256,89257],{"start":206},[246,89258,89259],{},"箭头函数的this",[19,89261,89262],{},[200,89263],{"alt":205,"src":89264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89266,89267],{},[200,89268],{"alt":205,"src":89269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89271,89272],{},[200,89273],{"alt":205,"src":89274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[260,89276,89278],{"id":89277},"_4162-this的改变","4.16.2 this的改变",[19,89280,89281],{},"call() apply() bind()",[243,89283,89284],{},[246,89285,89286],{},"call()",[19,89288,89289],{},[200,89290],{"alt":205,"src":89291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89293,89294],{},"两个作用：①调用函数；②改变this指向",[280,89296,89298],{"className":53240,"code":89297,"language":53242,"meta":205,"style":205},"\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",[25,89299,89300,89308,89316,89320,89325,89329,89334,89339,89344,89348,89353,89361],{"__ignoreMap":205},[288,89301,89302,89304,89306],{"class":290,"line":291},[288,89303,1207],{"class":298},[288,89305,51973],{"class":51473},[288,89307,51480],{"class":298},[288,89309,89310,89312,89314],{"class":290,"line":206},[288,89311,52317],{"class":298},[288,89313,51986],{"class":51473},[288,89315,51480],{"class":298},[288,89317,89318],{"class":290,"line":1352},[288,89319,71696],{"class":298},[288,89321,89322],{"class":290,"line":1367},[288,89323,89324],{"class":298},"      uname: 'pink'\n",[288,89326,89327],{"class":290,"line":1373},[288,89328,2359],{"class":298},[288,89330,89331],{"class":290,"line":1387},[288,89332,89333],{"class":298},"    function fn(x, y) {\n",[288,89335,89336],{"class":290,"line":1393},[288,89337,89338],{"class":298},"      console.log(this)  \u002F\u002Fwindow\n",[288,89340,89341],{"class":290,"line":1484},[288,89342,89343],{"class":298},"      console.log(x + y)\n",[288,89345,89346],{"class":290,"line":1490},[288,89347,2359],{"class":298},[288,89349,89350],{"class":290,"line":1502},[288,89351,89352],{"class":298},"    fn.call(obj, 1, 2)\n",[288,89354,89355,89357,89359],{"class":290,"line":1784},[288,89356,52590],{"class":298},[288,89358,51986],{"class":51473},[288,89360,51480],{"class":298},[288,89362,89363,89365,89367],{"class":290,"line":1789},[288,89364,51958],{"class":298},[288,89366,51973],{"class":51473},[288,89368,51480],{"class":298},[19,89370,89371],{},[200,89372],{"alt":205,"src":89373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[243,89375,89376],{"start":206},[246,89377,89378],{},"apply()",[19,89380,89381],{},[200,89382],{"alt":205,"src":89383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89385,89294],{},[19,89387,89388],{},"call传递的是普通参数，而apply必须传递的是数组",[280,89390,89392],{"className":50806,"code":89391,"language":50808,"meta":205,"style":205},"\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",[25,89393,89394,89404,89418,89422,89430,89444,89464,89476,89484,89488,89496,89504,89514,89521,89525,89530,89546,89558,89572,89576,89581,89600,89605,89609,89614,89619,89627,89632,89654,89659,89675,89691,89703,89707,89712,89731,89739,89747,89751],{"__ignoreMap":205},[288,89395,89396,89398,89400,89402],{"class":290,"line":291},[288,89397,51470],{"class":298},[288,89399,51474],{"class":51473},[288,89401,51477],{"class":2135},[288,89403,51480],{"class":298},[288,89405,89406,89408,89410,89412,89414,89416],{"class":290,"line":206},[288,89407,1207],{"class":298},[288,89409,50808],{"class":51473},[288,89411,51489],{"class":2135},[288,89413,344],{"class":298},[288,89415,51494],{"class":403},[288,89417,51480],{"class":298},[288,89419,89420],{"class":290,"line":1352},[288,89421,2572],{"emptyLinePlaceholder":217},[288,89423,89424,89426,89428],{"class":290,"line":1367},[288,89425,1207],{"class":298},[288,89427,51507],{"class":51473},[288,89429,51480],{"class":298},[288,89431,89432,89434,89436,89438,89440,89442],{"class":290,"line":1373},[288,89433,52317],{"class":298},[288,89435,51517],{"class":51473},[288,89437,51520],{"class":2135},[288,89439,344],{"class":298},[288,89441,51525],{"class":403},[288,89443,51480],{"class":298},[288,89445,89446,89448,89450,89452,89454,89456,89458,89460,89462],{"class":290,"line":1387},[288,89447,52317],{"class":298},[288,89449,51517],{"class":51473},[288,89451,15093],{"class":2135},[288,89453,344],{"class":298},[288,89455,51564],{"class":403},[288,89457,51544],{"class":2135},[288,89459,344],{"class":298},[288,89461,51571],{"class":403},[288,89463,51480],{"class":298},[288,89465,89466,89468,89470,89472,89474],{"class":290,"line":1393},[288,89467,52317],{"class":298},[288,89469,51580],{"class":51473},[288,89471,51583],{"class":298},[288,89473,51580],{"class":51473},[288,89475,51480],{"class":298},[288,89477,89478,89480,89482],{"class":290,"line":1484},[288,89479,51958],{"class":298},[288,89481,51507],{"class":51473},[288,89483,51480],{"class":298},[288,89485,89486],{"class":290,"line":1490},[288,89487,2572],{"emptyLinePlaceholder":217},[288,89489,89490,89492,89494],{"class":290,"line":1502},[288,89491,1207],{"class":298},[288,89493,51973],{"class":51473},[288,89495,51480],{"class":298},[288,89497,89498,89500,89502],{"class":290,"line":1784},[288,89499,52317],{"class":298},[288,89501,51986],{"class":51473},[288,89503,51480],{"class":298},[288,89505,89506,89508,89510,89512],{"class":290,"line":1789},[288,89507,11394],{"class":294},[288,89509,70144],{"class":347},[288,89511,13737],{"class":294},[288,89513,15745],{"class":298},[288,89515,89516,89518],{"class":290,"line":1795},[288,89517,71799],{"class":298},[288,89519,89520],{"class":347},"18\n",[288,89522,89523],{"class":290,"line":1800},[288,89524,2359],{"class":298},[288,89526,89527],{"class":290,"line":1814},[288,89528,89529],{"class":357},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[288,89531,89532,89534,89536,89538,89540,89542,89544],{"class":290,"line":1819},[288,89533,70257],{"class":294},[288,89535,89023],{"class":2135},[288,89537,299],{"class":298},[288,89539,1117],{"class":5389},[288,89541,12608],{"class":298},[288,89543,1142],{"class":5389},[288,89545,12615],{"class":298},[288,89547,89548,89550,89552,89554,89556],{"class":290,"line":1825},[288,89549,58417],{"class":298},[288,89551,58420],{"class":2135},[288,89553,299],{"class":298},[288,89555,87166],{"class":347},[288,89557,305],{"class":298},[288,89559,89560,89562,89564,89567,89569],{"class":290,"line":1846},[288,89561,58417],{"class":298},[288,89563,58420],{"class":2135},[288,89565,89566],{"class":298},"(x ",[288,89568,778],{"class":294},[288,89570,89571],{"class":298}," y)\n",[288,89573,89574],{"class":290,"line":1851},[288,89575,2359],{"class":298},[288,89577,89578],{"class":290,"line":1865},[288,89579,89580],{"class":357},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[288,89582,89583,89586,89589,89592,89594,89596,89598],{"class":290,"line":1870},[288,89584,89585],{"class":298},"    fn.",[288,89587,89588],{"class":2135},"apply",[288,89590,89591],{"class":298},"(obj, [",[288,89593,516],{"class":347},[288,89595,12608],{"class":298},[288,89597,376],{"class":347},[288,89599,4829],{"class":298},[288,89601,89602],{"class":290,"line":1899},[288,89603,89604],{"class":357},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[288,89606,89607],{"class":290,"line":1904},[288,89608,2572],{"emptyLinePlaceholder":217},[288,89610,89611],{"class":290,"line":1921},[288,89612,89613],{"class":357},"    \u002F\u002F 使用场景：求数组最大值\n",[288,89615,89616],{"class":290,"line":1926},[288,89617,89618],{"class":357},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[288,89620,89621,89624],{"class":290,"line":1931},[288,89622,89623],{"class":357},"    \u002F\u002F console.log(max)",[288,89625,89626],{"class":357},"   \u002F\u002F3\n",[288,89628,89629],{"class":290,"line":1936},[288,89630,89631],{"class":357},"    \u002F\u002F 指向空或者Math都是可以的\n",[288,89633,89634,89636,89638,89640,89642,89644,89646,89648,89650,89652],{"class":290,"line":1950},[288,89635,11394],{"class":294},[288,89637,57868],{"class":347},[288,89639,13737],{"class":294},[288,89641,52399],{"class":298},[288,89643,608],{"class":347},[288,89645,12608],{"class":298},[288,89647,801],{"class":347},[288,89649,12608],{"class":298},[288,89651,832],{"class":347},[288,89653,33419],{"class":298},[288,89655,89656],{"class":290,"line":1955},[288,89657,89658],{"class":357},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[288,89660,89661,89663,89665,89667,89670,89672],{"class":290,"line":2749},[288,89662,11394],{"class":294},[288,89664,6124],{"class":347},[288,89666,13737],{"class":294},[288,89668,89669],{"class":298}," Math.max.",[288,89671,89588],{"class":2135},[288,89673,89674],{"class":298},"(Math, arr)\n",[288,89676,89677,89679,89682,89684,89687,89689],{"class":290,"line":2763},[288,89678,11394],{"class":294},[288,89680,89681],{"class":347}," min",[288,89683,13737],{"class":294},[288,89685,89686],{"class":298}," Math.min.",[288,89688,89588],{"class":2135},[288,89690,89674],{"class":298},[288,89692,89693,89695,89697,89700],{"class":290,"line":2771},[288,89694,73926],{"class":298},[288,89696,58420],{"class":2135},[288,89698,89699],{"class":298},"(max, min)     ",[288,89701,89702],{"class":357},"\u002F\u002F100,4\n",[288,89704,89705],{"class":290,"line":2776},[288,89706,2572],{"emptyLinePlaceholder":217},[288,89708,89709],{"class":290,"line":2782},[288,89710,89711],{"class":357},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[288,89713,89714,89716,89718,89721,89723,89725,89728],{"class":290,"line":2788},[288,89715,73926],{"class":298},[288,89717,58420],{"class":2135},[288,89719,89720],{"class":298},"(Max.",[288,89722,6188],{"class":2135},[288,89724,299],{"class":298},[288,89726,89727],{"class":294},"...",[288,89729,89730],{"class":298},"arr))\n",[288,89732,89733,89735,89737],{"class":290,"line":2793},[288,89734,52590],{"class":298},[288,89736,51986],{"class":51473},[288,89738,51480],{"class":298},[288,89740,89741,89743,89745],{"class":290,"line":8121},[288,89742,51958],{"class":298},[288,89744,51973],{"class":51473},[288,89746,51480],{"class":298},[288,89748,89749],{"class":290,"line":8145},[288,89750,2572],{"emptyLinePlaceholder":217},[288,89752,89753,89755,89757],{"class":290,"line":8150},[288,89754,51958],{"class":298},[288,89756,50808],{"class":51473},[288,89758,51480],{"class":298},[19,89760,89761],{},[200,89762],{"alt":205,"src":89763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[243,89765,89766],{"start":1352},[246,89767,89768],{},"bind()",[19,89770,89771],{},[200,89772],{"alt":205,"src":89773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89775,89776],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89778,89779],{},"bind的语法跟call很相似",[280,89781,89783],{"className":53240,"code":89782,"language":53242,"meta":205,"style":205},"\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",[25,89784,89785,89793,89801,89805,89810,89814,89818,89823,89827,89832,89837,89842,89847,89852,89857,89862,89866,89874],{"__ignoreMap":205},[288,89786,89787,89789,89791],{"class":290,"line":291},[288,89788,1207],{"class":298},[288,89790,51973],{"class":51473},[288,89792,51480],{"class":298},[288,89794,89795,89797,89799],{"class":290,"line":206},[288,89796,52317],{"class":298},[288,89798,51986],{"class":51473},[288,89800,51480],{"class":298},[288,89802,89803],{"class":290,"line":1352},[288,89804,71696],{"class":298},[288,89806,89807],{"class":290,"line":1367},[288,89808,89809],{"class":298},"      age: 18\n",[288,89811,89812],{"class":290,"line":1373},[288,89813,2359],{"class":298},[288,89815,89816],{"class":290,"line":1387},[288,89817,77316],{"class":298},[288,89819,89820],{"class":290,"line":1393},[288,89821,89822],{"class":298},"      console.log(this)\n",[288,89824,89825],{"class":290,"line":1484},[288,89826,2359],{"class":298},[288,89828,89829],{"class":290,"line":1490},[288,89830,89831],{"class":298},"    \u002F\u002F 1.bind 不会调用函数\n",[288,89833,89834],{"class":290,"line":1502},[288,89835,89836],{"class":298},"    \u002F\u002F 2.bind能改变this的指向\n",[288,89838,89839],{"class":290,"line":1784},[288,89840,89841],{"class":298},"    fn.bind()\n",[288,89843,89844],{"class":290,"line":1789},[288,89845,89846],{"class":298},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[288,89848,89849],{"class":290,"line":1795},[288,89850,89851],{"class":298},"    const fun = fn.bind(obj)\n",[288,89853,89854],{"class":290,"line":1800},[288,89855,89856],{"class":298},"    \u002F\u002F console.log(fun)\n",[288,89858,89859],{"class":290,"line":1814},[288,89860,89861],{"class":298},"    \u002F\u002F 调用,查看this的指向\n",[288,89863,89864],{"class":290,"line":1819},[288,89865,52824],{"class":298},[288,89867,89868,89870,89872],{"class":290,"line":1825},[288,89869,52590],{"class":298},[288,89871,51986],{"class":51473},[288,89873,51480],{"class":298},[288,89875,89876,89878,89880],{"class":290,"line":1846},[288,89877,51958],{"class":298},[288,89879,51973],{"class":51473},[288,89881,51480],{"class":298},[19,89883,89884],{},[200,89885],{"alt":205,"src":89886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[243,89888,89889],{"start":1367},[246,89890,89891],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[280,89893,89895],{"className":53240,"code":89894,"language":53242,"meta":205,"style":205},"\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",[25,89896,89897,89905,89918,89926,89931,89935,89940,89945,89950,89955,89960,89965,89970,89975,89979,89987],{"__ignoreMap":205},[288,89898,89899,89901,89903],{"class":290,"line":291},[288,89900,1207],{"class":298},[288,89902,51973],{"class":51473},[288,89904,51480],{"class":298},[288,89906,89907,89909,89911,89914,89916],{"class":290,"line":206},[288,89908,52317],{"class":298},[288,89910,54060],{"class":51473},[288,89912,89913],{"class":298},">禁用\u003C\u002F",[288,89915,54060],{"class":51473},[288,89917,51480],{"class":298},[288,89919,89920,89922,89924],{"class":290,"line":1352},[288,89921,52317],{"class":298},[288,89923,51986],{"class":51473},[288,89925,51480],{"class":298},[288,89927,89928],{"class":290,"line":1367},[288,89929,89930],{"class":298},"    const btn = document.querySelector('button')\n",[288,89932,89933],{"class":290,"line":1373},[288,89934,59189],{"class":298},[288,89936,89937],{"class":290,"line":1387},[288,89938,89939],{"class":298},"      this.disabled = true\n",[288,89941,89942],{"class":290,"line":1393},[288,89943,89944],{"class":298},"      \u002F\u002F 定时器是window进行调用的\n",[288,89946,89947],{"class":290,"line":1484},[288,89948,89949],{"class":298},"      setTimeout(function () {\n",[288,89951,89952],{"class":290,"line":1490},[288,89953,89954],{"class":298},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[288,89956,89957],{"class":290,"line":1502},[288,89958,89959],{"class":298},"        this.disabled = false\n",[288,89961,89962],{"class":290,"line":1784},[288,89963,89964],{"class":298},"      }.bind(this), 2000)\n",[288,89966,89967],{"class":290,"line":1789},[288,89968,89969],{"class":298},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[288,89971,89972],{"class":290,"line":1795},[288,89973,89974],{"class":298},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[288,89976,89977],{"class":290,"line":1800},[288,89978,33634],{"class":298},[288,89980,89981,89983,89985],{"class":290,"line":1814},[288,89982,52590],{"class":298},[288,89984,51986],{"class":51473},[288,89986,51480],{"class":298},[288,89988,89989,89991,89993],{"class":290,"line":1819},[288,89990,51958],{"class":298},[288,89992,51973],{"class":51473},[288,89994,51480],{"class":298},[243,89996,89997],{"start":1373},[246,89998,22126],{},[19,90000,90001],{},[200,90002],{"alt":205,"src":90003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90005,90007],{"id":90006},"_417-性能优化","4.17 性能优化",[260,90009,90011],{"id":90010},"_4171-防抖","4.17.1 防抖",[19,90013,90014],{},[200,90015],{"alt":205,"src":90016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90018,90019],{},[448,90020,90021],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90023,90024],{},"防抖实现方式：",[1304,90026,90027],{},[246,90028,90029],{},"lodash 提供了防抖处理",[19,90031,90032],{},"_.debounce(func,[wait=0],[options={}])",[19,90034,90035],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[280,90037,90039],{"className":50806,"code":90038,"language":50808,"meta":205,"style":205},"\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",[25,90040,90041,90051,90065,90069,90077,90091,90111,90123,90131,90137,90147,90159,90171,90182,90194,90204,90214,90227,90231,90239,90247,90251,90259,90277,90295,90303,90322,90332,90341,90352,90357,90361,90366,90371,90376,90401,90409,90417,90421],{"__ignoreMap":205},[288,90042,90043,90045,90047,90049],{"class":290,"line":291},[288,90044,51470],{"class":298},[288,90046,51474],{"class":51473},[288,90048,51477],{"class":2135},[288,90050,51480],{"class":298},[288,90052,90053,90055,90057,90059,90061,90063],{"class":290,"line":206},[288,90054,1207],{"class":298},[288,90056,50808],{"class":51473},[288,90058,51489],{"class":2135},[288,90060,344],{"class":298},[288,90062,51494],{"class":403},[288,90064,51480],{"class":298},[288,90066,90067],{"class":290,"line":1352},[288,90068,2572],{"emptyLinePlaceholder":217},[288,90070,90071,90073,90075],{"class":290,"line":1367},[288,90072,1207],{"class":298},[288,90074,51507],{"class":51473},[288,90076,51480],{"class":298},[288,90078,90079,90081,90083,90085,90087,90089],{"class":290,"line":1373},[288,90080,52317],{"class":298},[288,90082,51517],{"class":51473},[288,90084,51520],{"class":2135},[288,90086,344],{"class":298},[288,90088,51525],{"class":403},[288,90090,51480],{"class":298},[288,90092,90093,90095,90097,90099,90101,90103,90105,90107,90109],{"class":290,"line":1387},[288,90094,52317],{"class":298},[288,90096,51517],{"class":51473},[288,90098,15093],{"class":2135},[288,90100,344],{"class":298},[288,90102,51564],{"class":403},[288,90104,51544],{"class":2135},[288,90106,344],{"class":298},[288,90108,51571],{"class":403},[288,90110,51480],{"class":298},[288,90112,90113,90115,90117,90119,90121],{"class":290,"line":1393},[288,90114,52317],{"class":298},[288,90116,51580],{"class":51473},[288,90118,51583],{"class":298},[288,90120,51580],{"class":51473},[288,90122,51480],{"class":298},[288,90124,90125,90127,90129],{"class":290,"line":1484},[288,90126,52317],{"class":298},[288,90128,5299],{"class":51473},[288,90130,51480],{"class":298},[288,90132,90133,90135],{"class":290,"line":1490},[288,90134,54925],{"class":2135},[288,90136,15745],{"class":298},[288,90138,90139,90141,90143,90145],{"class":290,"line":1502},[288,90140,72769],{"class":347},[288,90142,51610],{"class":298},[288,90144,60678],{"class":347},[288,90146,1463],{"class":298},[288,90148,90149,90151,90153,90155,90157],{"class":290,"line":1784},[288,90150,54944],{"class":347},[288,90152,51610],{"class":298},[288,90154,1894],{"class":347},[288,90156,51665],{"class":294},[288,90158,1463],{"class":298},[288,90160,90161,90163,90165,90167,90169],{"class":290,"line":1789},[288,90162,54958],{"class":347},[288,90164,51610],{"class":298},[288,90166,1894],{"class":347},[288,90168,51665],{"class":294},[288,90170,1463],{"class":298},[288,90172,90173,90175,90177,90180],{"class":290,"line":1795},[288,90174,55057],{"class":347},[288,90176,51610],{"class":298},[288,90178,90179],{"class":347},"gray",[288,90181,1463],{"class":298},[288,90183,90184,90186,90188,90190,90192],{"class":290,"line":1800},[288,90185,55095],{"class":347},[288,90187,51610],{"class":298},[288,90189,1122],{"class":347},[288,90191,51665],{"class":294},[288,90193,1463],{"class":298},[288,90195,90196,90198,90200,90202],{"class":290,"line":1814},[288,90197,57589],{"class":347},[288,90199,51610],{"class":298},[288,90201,61015],{"class":347},[288,90203,1463],{"class":298},[288,90205,90206,90208,90210,90212],{"class":290,"line":1819},[288,90207,57459],{"class":347},[288,90209,51610],{"class":298},[288,90211,51765],{"class":347},[288,90213,1463],{"class":298},[288,90215,90216,90219,90221,90223,90225],{"class":290,"line":1825},[288,90217,90218],{"class":347},"      padding-top",[288,90220,51610],{"class":298},[288,90222,616],{"class":347},[288,90224,51665],{"class":294},[288,90226,1463],{"class":298},[288,90228,90229],{"class":290,"line":1846},[288,90230,2359],{"class":298},[288,90232,90233,90235,90237],{"class":290,"line":1851},[288,90234,52590],{"class":298},[288,90236,5299],{"class":51473},[288,90238,51480],{"class":298},[288,90240,90241,90243,90245],{"class":290,"line":1865},[288,90242,51958],{"class":298},[288,90244,51507],{"class":51473},[288,90246,51480],{"class":298},[288,90248,90249],{"class":290,"line":1870},[288,90250,2572],{"emptyLinePlaceholder":217},[288,90252,90253,90255,90257],{"class":290,"line":1899},[288,90254,1207],{"class":298},[288,90256,51973],{"class":51473},[288,90258,51480],{"class":298},[288,90260,90261,90263,90265,90267,90269,90271,90273,90275],{"class":290,"line":1904},[288,90262,52317],{"class":298},[288,90264,51784],{"class":51473},[288,90266,53659],{"class":2135},[288,90268,344],{"class":298},[288,90270,53664],{"class":403},[288,90272,55487],{"class":298},[288,90274,51784],{"class":51473},[288,90276,51480],{"class":298},[288,90278,90279,90281,90283,90285,90287,90289,90291,90293],{"class":290,"line":1921},[288,90280,52317],{"class":298},[288,90282,51986],{"class":51473},[288,90284,55412],{"class":2135},[288,90286,344],{"class":298},[288,90288,88447],{"class":403},[288,90290,55487],{"class":298},[288,90292,51986],{"class":51473},[288,90294,51480],{"class":298},[288,90296,90297,90299,90301],{"class":290,"line":1926},[288,90298,52317],{"class":298},[288,90300,51986],{"class":51473},[288,90302,51480],{"class":298},[288,90304,90305,90307,90309,90311,90313,90315,90317,90320],{"class":290,"line":1931},[288,90306,11394],{"class":294},[288,90308,87106],{"class":347},[288,90310,13737],{"class":294},[288,90312,54569],{"class":298},[288,90314,54572],{"class":2135},[288,90316,299],{"class":298},[288,90318,90319],{"class":403},"'.box'",[288,90321,305],{"class":298},[288,90323,90324,90326,90328,90330],{"class":290,"line":1936},[288,90325,52392],{"class":294},[288,90327,9611],{"class":298},[288,90329,344],{"class":294},[288,90331,47506],{"class":347},[288,90333,90334,90336,90339],{"class":290,"line":1950},[288,90335,70257],{"class":294},[288,90337,90338],{"class":2135}," mouseMove",[288,90340,11026],{"class":298},[288,90342,90343,90346,90348,90350],{"class":290,"line":1955},[288,90344,90345],{"class":298},"      box.innerHTML ",[288,90347,344],{"class":294},[288,90349,3204],{"class":298},[288,90351,2874],{"class":294},[288,90353,90354],{"class":290,"line":2749},[288,90355,90356],{"class":357},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[288,90358,90359],{"class":290,"line":2763},[288,90360,2359],{"class":298},[288,90362,90363],{"class":290,"line":2771},[288,90364,90365],{"class":357},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[288,90367,90368],{"class":290,"line":2776},[288,90369,90370],{"class":357},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[288,90372,90373],{"class":290,"line":2782},[288,90374,90375],{"class":357},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[288,90377,90378,90381,90383,90385,90388,90391,90394,90397,90399],{"class":290,"line":2788},[288,90379,90380],{"class":298},"    box.",[288,90382,57986],{"class":2135},[288,90384,299],{"class":298},[288,90386,90387],{"class":403},"'mousemove'",[288,90389,90390],{"class":298},", _.",[288,90392,90393],{"class":2135},"debounce",[288,90395,90396],{"class":298},"(mouseMove, ",[288,90398,65247],{"class":347},[288,90400,30670],{"class":298},[288,90402,90403,90405,90407],{"class":290,"line":2793},[288,90404,52590],{"class":298},[288,90406,51986],{"class":51473},[288,90408,51480],{"class":298},[288,90410,90411,90413,90415],{"class":290,"line":8121},[288,90412,51958],{"class":298},[288,90414,51973],{"class":51473},[288,90416,51480],{"class":298},[288,90418,90419],{"class":290,"line":8145},[288,90420,2572],{"emptyLinePlaceholder":217},[288,90422,90423,90425,90427],{"class":290,"line":8150},[288,90424,51958],{"class":298},[288,90426,50808],{"class":51473},[288,90428,51480],{"class":298},[1304,90430,90431],{},[246,90432,90433],{},"手写一个防抖函数来处理",[19,90435,90436],{},"防抖的核心就是利用定时器来实现的：",[19,90438,90439],{},"①声明一个定时器变量",[19,90441,90442],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90444,90445],{},"③如果没有定时器则开启定时器，记得存到变量里面",[280,90447,90449],{"className":50806,"code":90448,"language":50808,"meta":205,"style":205},"\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",[25,90450,90451,90461,90475,90479,90487,90501,90521,90533,90541,90547,90557,90569,90581,90591,90603,90613,90623,90635,90639,90647,90655,90659,90667,90685,90703,90711,90729,90739,90747,90757,90761,90765,90769,90774,90779,90784,90789,90794,90799,90817,90824,90829,90837,90842,90855,90871,90881,90886,90890,90894,90914,90918,90923,90928,90933,90938,90946,90954,90958],{"__ignoreMap":205},[288,90452,90453,90455,90457,90459],{"class":290,"line":291},[288,90454,51470],{"class":298},[288,90456,51474],{"class":51473},[288,90458,51477],{"class":2135},[288,90460,51480],{"class":298},[288,90462,90463,90465,90467,90469,90471,90473],{"class":290,"line":206},[288,90464,1207],{"class":298},[288,90466,50808],{"class":51473},[288,90468,51489],{"class":2135},[288,90470,344],{"class":298},[288,90472,51494],{"class":403},[288,90474,51480],{"class":298},[288,90476,90477],{"class":290,"line":1352},[288,90478,2572],{"emptyLinePlaceholder":217},[288,90480,90481,90483,90485],{"class":290,"line":1367},[288,90482,1207],{"class":298},[288,90484,51507],{"class":51473},[288,90486,51480],{"class":298},[288,90488,90489,90491,90493,90495,90497,90499],{"class":290,"line":1373},[288,90490,52317],{"class":298},[288,90492,51517],{"class":51473},[288,90494,51520],{"class":2135},[288,90496,344],{"class":298},[288,90498,51525],{"class":403},[288,90500,51480],{"class":298},[288,90502,90503,90505,90507,90509,90511,90513,90515,90517,90519],{"class":290,"line":1387},[288,90504,52317],{"class":298},[288,90506,51517],{"class":51473},[288,90508,15093],{"class":2135},[288,90510,344],{"class":298},[288,90512,51564],{"class":403},[288,90514,51544],{"class":2135},[288,90516,344],{"class":298},[288,90518,51571],{"class":403},[288,90520,51480],{"class":298},[288,90522,90523,90525,90527,90529,90531],{"class":290,"line":1393},[288,90524,52317],{"class":298},[288,90526,51580],{"class":51473},[288,90528,51583],{"class":298},[288,90530,51580],{"class":51473},[288,90532,51480],{"class":298},[288,90534,90535,90537,90539],{"class":290,"line":1484},[288,90536,52317],{"class":298},[288,90538,5299],{"class":51473},[288,90540,51480],{"class":298},[288,90542,90543,90545],{"class":290,"line":1490},[288,90544,54925],{"class":2135},[288,90546,15745],{"class":298},[288,90548,90549,90551,90553,90555],{"class":290,"line":1502},[288,90550,72769],{"class":347},[288,90552,51610],{"class":298},[288,90554,60678],{"class":347},[288,90556,1463],{"class":298},[288,90558,90559,90561,90563,90565,90567],{"class":290,"line":1784},[288,90560,54944],{"class":347},[288,90562,51610],{"class":298},[288,90564,1894],{"class":347},[288,90566,51665],{"class":294},[288,90568,1463],{"class":298},[288,90570,90571,90573,90575,90577,90579],{"class":290,"line":1789},[288,90572,54958],{"class":347},[288,90574,51610],{"class":298},[288,90576,1894],{"class":347},[288,90578,51665],{"class":294},[288,90580,1463],{"class":298},[288,90582,90583,90585,90587,90589],{"class":290,"line":1795},[288,90584,55057],{"class":347},[288,90586,51610],{"class":298},[288,90588,90179],{"class":347},[288,90590,1463],{"class":298},[288,90592,90593,90595,90597,90599,90601],{"class":290,"line":1800},[288,90594,55095],{"class":347},[288,90596,51610],{"class":298},[288,90598,1122],{"class":347},[288,90600,51665],{"class":294},[288,90602,1463],{"class":298},[288,90604,90605,90607,90609,90611],{"class":290,"line":1814},[288,90606,57589],{"class":347},[288,90608,51610],{"class":298},[288,90610,61015],{"class":347},[288,90612,1463],{"class":298},[288,90614,90615,90617,90619,90621],{"class":290,"line":1819},[288,90616,57459],{"class":347},[288,90618,51610],{"class":298},[288,90620,51765],{"class":347},[288,90622,1463],{"class":298},[288,90624,90625,90627,90629,90631,90633],{"class":290,"line":1825},[288,90626,90218],{"class":347},[288,90628,51610],{"class":298},[288,90630,616],{"class":347},[288,90632,51665],{"class":294},[288,90634,1463],{"class":298},[288,90636,90637],{"class":290,"line":1846},[288,90638,2359],{"class":298},[288,90640,90641,90643,90645],{"class":290,"line":1851},[288,90642,52590],{"class":298},[288,90644,5299],{"class":51473},[288,90646,51480],{"class":298},[288,90648,90649,90651,90653],{"class":290,"line":1865},[288,90650,51958],{"class":298},[288,90652,51507],{"class":51473},[288,90654,51480],{"class":298},[288,90656,90657],{"class":290,"line":1870},[288,90658,2572],{"emptyLinePlaceholder":217},[288,90660,90661,90663,90665],{"class":290,"line":1899},[288,90662,1207],{"class":298},[288,90664,51973],{"class":51473},[288,90666,51480],{"class":298},[288,90668,90669,90671,90673,90675,90677,90679,90681,90683],{"class":290,"line":1904},[288,90670,52317],{"class":298},[288,90672,51784],{"class":51473},[288,90674,53659],{"class":2135},[288,90676,344],{"class":298},[288,90678,53664],{"class":403},[288,90680,55487],{"class":298},[288,90682,51784],{"class":51473},[288,90684,51480],{"class":298},[288,90686,90687,90689,90691,90693,90695,90697,90699,90701],{"class":290,"line":1921},[288,90688,52317],{"class":298},[288,90690,51986],{"class":51473},[288,90692,55412],{"class":2135},[288,90694,344],{"class":298},[288,90696,88447],{"class":403},[288,90698,55487],{"class":298},[288,90700,51986],{"class":51473},[288,90702,51480],{"class":298},[288,90704,90705,90707,90709],{"class":290,"line":1926},[288,90706,52317],{"class":298},[288,90708,51986],{"class":51473},[288,90710,51480],{"class":298},[288,90712,90713,90715,90717,90719,90721,90723,90725,90727],{"class":290,"line":1931},[288,90714,11394],{"class":294},[288,90716,87106],{"class":347},[288,90718,13737],{"class":294},[288,90720,54569],{"class":298},[288,90722,54572],{"class":2135},[288,90724,299],{"class":298},[288,90726,90319],{"class":403},[288,90728,305],{"class":298},[288,90730,90731,90733,90735,90737],{"class":290,"line":1936},[288,90732,52392],{"class":294},[288,90734,9611],{"class":298},[288,90736,344],{"class":294},[288,90738,47506],{"class":347},[288,90740,90741,90743,90745],{"class":290,"line":1950},[288,90742,70257],{"class":294},[288,90744,90338],{"class":2135},[288,90746,11026],{"class":298},[288,90748,90749,90751,90753,90755],{"class":290,"line":1955},[288,90750,90345],{"class":298},[288,90752,344],{"class":294},[288,90754,3204],{"class":298},[288,90756,2874],{"class":294},[288,90758,90759],{"class":290,"line":2749},[288,90760,90356],{"class":357},[288,90762,90763],{"class":290,"line":2763},[288,90764,2359],{"class":298},[288,90766,90767],{"class":290,"line":2771},[288,90768,90365],{"class":357},[288,90770,90771],{"class":290,"line":2776},[288,90772,90773],{"class":357},"    \u002F\u002F 手写防抖函数\n",[288,90775,90776],{"class":290,"line":2782},[288,90777,90778],{"class":357},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[288,90780,90781],{"class":290,"line":2788},[288,90782,90783],{"class":357},"    \u002F\u002F 1.声明定时器变量\n",[288,90785,90786],{"class":290,"line":2793},[288,90787,90788],{"class":357},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[288,90790,90791],{"class":290,"line":8121},[288,90792,90793],{"class":357},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[288,90795,90796],{"class":290,"line":8145},[288,90797,90798],{"class":357},"    \u002F\u002F 4.定时器里面写函数调用\n",[288,90800,90801,90803,90806,90808,90811,90813,90815],{"class":290,"line":8150},[288,90802,70257],{"class":294},[288,90804,90805],{"class":2135}," debounce",[288,90807,299],{"class":298},[288,90809,90810],{"class":5389},"fn",[288,90812,12608],{"class":298},[288,90814,1017],{"class":5389},[288,90816,12615],{"class":298},[288,90818,90819,90821],{"class":290,"line":8156},[288,90820,79945],{"class":294},[288,90822,90823],{"class":298}," timer\n",[288,90825,90826],{"class":290,"line":8183},[288,90827,90828],{"class":357},"      \u002F\u002F return 返回一个匿名函数\n",[288,90830,90831,90833,90835],{"class":290,"line":8188},[288,90832,74155],{"class":294},[288,90834,59091],{"class":294},[288,90836,54625],{"class":298},[288,90838,90839],{"class":290,"line":8194},[288,90840,90841],{"class":357},"        \u002F\u002F 这里边写第二三四步\n",[288,90843,90844,90846,90849,90852],{"class":290,"line":8206},[288,90845,2669],{"class":294},[288,90847,90848],{"class":298}," (timer) ",[288,90850,90851],{"class":2135},"clearTimeout",[288,90853,90854],{"class":298},"(timer)\n",[288,90856,90857,90860,90862,90865,90867,90869],{"class":290,"line":8218},[288,90858,90859],{"class":298},"        timer ",[288,90861,344],{"class":294},[288,90863,90864],{"class":2135}," setTimeout",[288,90866,299],{"class":298},[288,90868,54622],{"class":294},[288,90870,54625],{"class":298},[288,90872,90873,90876,90878],{"class":290,"line":8230},[288,90874,90875],{"class":2135},"          fn",[288,90877,13223],{"class":298},[288,90879,90880],{"class":357},"\u002F\u002F加小括号调用fn }, t)\n",[288,90882,90883],{"class":290,"line":9889},[288,90884,90885],{"class":298},"        }, t)\n",[288,90887,90888],{"class":290,"line":9914},[288,90889,52571],{"class":298},[288,90891,90892],{"class":290,"line":9937},[288,90893,2359],{"class":298},[288,90895,90896,90898,90900,90902,90904,90906,90908,90910,90912],{"class":290,"line":9961},[288,90897,90380],{"class":298},[288,90899,57986],{"class":2135},[288,90901,299],{"class":298},[288,90903,90387],{"class":403},[288,90905,12608],{"class":298},[288,90907,90393],{"class":2135},[288,90909,90396],{"class":298},[288,90911,65247],{"class":347},[288,90913,30670],{"class":298},[288,90915,90916],{"class":290,"line":9966},[288,90917,2572],{"emptyLinePlaceholder":217},[288,90919,90920],{"class":290,"line":9971},[288,90921,90922],{"class":357},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[288,90924,90925],{"class":290,"line":9976},[288,90926,90927],{"class":357},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[288,90929,90930],{"class":290,"line":9985},[288,90931,90932],{"class":357},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[288,90934,90935],{"class":290,"line":9990},[288,90936,90937],{"class":357},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[288,90939,90940,90942,90944],{"class":290,"line":9996},[288,90941,52590],{"class":298},[288,90943,51986],{"class":51473},[288,90945,51480],{"class":298},[288,90947,90948,90950,90952],{"class":290,"line":10017},[288,90949,51958],{"class":298},[288,90951,51973],{"class":51473},[288,90953,51480],{"class":298},[288,90955,90956],{"class":290,"line":10023},[288,90957,2572],{"emptyLinePlaceholder":217},[288,90959,90960,90962,90964],{"class":290,"line":10037},[288,90961,51958],{"class":298},[288,90963,50808],{"class":51473},[288,90965,51480],{"class":298},[260,90967,90969],{"id":90968},"_4172-节流","4.17.2 节流",[19,90971,90972],{},[200,90973],{"alt":205,"src":90974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90976,90977],{},[200,90978],{"alt":205,"src":90979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90981,90982],{},[448,90983,90984],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90986,90987],{},"实现方式：",[1304,90989,90990],{},[246,90991,90992],{},"lodash 提供的节流函数来处理",[19,90994,90995],{},"_.throttle(func,[wait=0],[options=])",[19,90997,90998],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[280,91000,91002],{"className":50806,"code":91001,"language":50808,"meta":205,"style":205},"\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",[25,91003,91004,91014,91028,91032,91040,91054,91074,91086,91094,91100,91110,91122,91134,91144,91156,91166,91176,91188,91192,91200,91208,91212,91220,91238,91256,91264,91282,91292,91300,91310,91314,91318,91322,91327,91332,91353,91361,91369,91373],{"__ignoreMap":205},[288,91005,91006,91008,91010,91012],{"class":290,"line":291},[288,91007,51470],{"class":298},[288,91009,51474],{"class":51473},[288,91011,51477],{"class":2135},[288,91013,51480],{"class":298},[288,91015,91016,91018,91020,91022,91024,91026],{"class":290,"line":206},[288,91017,1207],{"class":298},[288,91019,50808],{"class":51473},[288,91021,51489],{"class":2135},[288,91023,344],{"class":298},[288,91025,51494],{"class":403},[288,91027,51480],{"class":298},[288,91029,91030],{"class":290,"line":1352},[288,91031,2572],{"emptyLinePlaceholder":217},[288,91033,91034,91036,91038],{"class":290,"line":1367},[288,91035,1207],{"class":298},[288,91037,51507],{"class":51473},[288,91039,51480],{"class":298},[288,91041,91042,91044,91046,91048,91050,91052],{"class":290,"line":1373},[288,91043,52317],{"class":298},[288,91045,51517],{"class":51473},[288,91047,51520],{"class":2135},[288,91049,344],{"class":298},[288,91051,51525],{"class":403},[288,91053,51480],{"class":298},[288,91055,91056,91058,91060,91062,91064,91066,91068,91070,91072],{"class":290,"line":1387},[288,91057,52317],{"class":298},[288,91059,51517],{"class":51473},[288,91061,15093],{"class":2135},[288,91063,344],{"class":298},[288,91065,51564],{"class":403},[288,91067,51544],{"class":2135},[288,91069,344],{"class":298},[288,91071,51571],{"class":403},[288,91073,51480],{"class":298},[288,91075,91076,91078,91080,91082,91084],{"class":290,"line":1393},[288,91077,52317],{"class":298},[288,91079,51580],{"class":51473},[288,91081,51583],{"class":298},[288,91083,51580],{"class":51473},[288,91085,51480],{"class":298},[288,91087,91088,91090,91092],{"class":290,"line":1484},[288,91089,52317],{"class":298},[288,91091,5299],{"class":51473},[288,91093,51480],{"class":298},[288,91095,91096,91098],{"class":290,"line":1490},[288,91097,54925],{"class":2135},[288,91099,15745],{"class":298},[288,91101,91102,91104,91106,91108],{"class":290,"line":1502},[288,91103,72769],{"class":347},[288,91105,51610],{"class":298},[288,91107,60678],{"class":347},[288,91109,1463],{"class":298},[288,91111,91112,91114,91116,91118,91120],{"class":290,"line":1784},[288,91113,54944],{"class":347},[288,91115,51610],{"class":298},[288,91117,1894],{"class":347},[288,91119,51665],{"class":294},[288,91121,1463],{"class":298},[288,91123,91124,91126,91128,91130,91132],{"class":290,"line":1789},[288,91125,54958],{"class":347},[288,91127,51610],{"class":298},[288,91129,1894],{"class":347},[288,91131,51665],{"class":294},[288,91133,1463],{"class":298},[288,91135,91136,91138,91140,91142],{"class":290,"line":1795},[288,91137,55057],{"class":347},[288,91139,51610],{"class":298},[288,91141,90179],{"class":347},[288,91143,1463],{"class":298},[288,91145,91146,91148,91150,91152,91154],{"class":290,"line":1800},[288,91147,55095],{"class":347},[288,91149,51610],{"class":298},[288,91151,1122],{"class":347},[288,91153,51665],{"class":294},[288,91155,1463],{"class":298},[288,91157,91158,91160,91162,91164],{"class":290,"line":1814},[288,91159,57589],{"class":347},[288,91161,51610],{"class":298},[288,91163,61015],{"class":347},[288,91165,1463],{"class":298},[288,91167,91168,91170,91172,91174],{"class":290,"line":1819},[288,91169,57459],{"class":347},[288,91171,51610],{"class":298},[288,91173,51765],{"class":347},[288,91175,1463],{"class":298},[288,91177,91178,91180,91182,91184,91186],{"class":290,"line":1825},[288,91179,90218],{"class":347},[288,91181,51610],{"class":298},[288,91183,616],{"class":347},[288,91185,51665],{"class":294},[288,91187,1463],{"class":298},[288,91189,91190],{"class":290,"line":1846},[288,91191,2359],{"class":298},[288,91193,91194,91196,91198],{"class":290,"line":1851},[288,91195,52590],{"class":298},[288,91197,5299],{"class":51473},[288,91199,51480],{"class":298},[288,91201,91202,91204,91206],{"class":290,"line":1865},[288,91203,51958],{"class":298},[288,91205,51507],{"class":51473},[288,91207,51480],{"class":298},[288,91209,91210],{"class":290,"line":1870},[288,91211,2572],{"emptyLinePlaceholder":217},[288,91213,91214,91216,91218],{"class":290,"line":1899},[288,91215,1207],{"class":298},[288,91217,51973],{"class":51473},[288,91219,51480],{"class":298},[288,91221,91222,91224,91226,91228,91230,91232,91234,91236],{"class":290,"line":1904},[288,91223,52317],{"class":298},[288,91225,51784],{"class":51473},[288,91227,53659],{"class":2135},[288,91229,344],{"class":298},[288,91231,53664],{"class":403},[288,91233,55487],{"class":298},[288,91235,51784],{"class":51473},[288,91237,51480],{"class":298},[288,91239,91240,91242,91244,91246,91248,91250,91252,91254],{"class":290,"line":1921},[288,91241,52317],{"class":298},[288,91243,51986],{"class":51473},[288,91245,55412],{"class":2135},[288,91247,344],{"class":298},[288,91249,88447],{"class":403},[288,91251,55487],{"class":298},[288,91253,51986],{"class":51473},[288,91255,51480],{"class":298},[288,91257,91258,91260,91262],{"class":290,"line":1926},[288,91259,52317],{"class":298},[288,91261,51986],{"class":51473},[288,91263,51480],{"class":298},[288,91265,91266,91268,91270,91272,91274,91276,91278,91280],{"class":290,"line":1931},[288,91267,11394],{"class":294},[288,91269,87106],{"class":347},[288,91271,13737],{"class":294},[288,91273,54569],{"class":298},[288,91275,54572],{"class":2135},[288,91277,299],{"class":298},[288,91279,90319],{"class":403},[288,91281,305],{"class":298},[288,91283,91284,91286,91288,91290],{"class":290,"line":1936},[288,91285,52392],{"class":294},[288,91287,9611],{"class":298},[288,91289,344],{"class":294},[288,91291,47506],{"class":347},[288,91293,91294,91296,91298],{"class":290,"line":1950},[288,91295,70257],{"class":294},[288,91297,90338],{"class":2135},[288,91299,11026],{"class":298},[288,91301,91302,91304,91306,91308],{"class":290,"line":1955},[288,91303,90345],{"class":298},[288,91305,344],{"class":294},[288,91307,3204],{"class":298},[288,91309,2874],{"class":294},[288,91311,91312],{"class":290,"line":2749},[288,91313,90356],{"class":357},[288,91315,91316],{"class":290,"line":2763},[288,91317,2359],{"class":298},[288,91319,91320],{"class":290,"line":2771},[288,91321,90365],{"class":357},[288,91323,91324],{"class":290,"line":2776},[288,91325,91326],{"class":357},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[288,91328,91329],{"class":290,"line":2782},[288,91330,91331],{"class":357},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[288,91333,91334,91336,91338,91340,91342,91344,91347,91349,91351],{"class":290,"line":2788},[288,91335,90380],{"class":298},[288,91337,57986],{"class":2135},[288,91339,299],{"class":298},[288,91341,90387],{"class":403},[288,91343,90390],{"class":298},[288,91345,91346],{"class":2135},"throttle",[288,91348,90396],{"class":298},[288,91350,65247],{"class":347},[288,91352,30670],{"class":298},[288,91354,91355,91357,91359],{"class":290,"line":2793},[288,91356,52590],{"class":298},[288,91358,51986],{"class":51473},[288,91360,51480],{"class":298},[288,91362,91363,91365,91367],{"class":290,"line":8121},[288,91364,51958],{"class":298},[288,91366,51973],{"class":51473},[288,91368,51480],{"class":298},[288,91370,91371],{"class":290,"line":8145},[288,91372,2572],{"emptyLinePlaceholder":217},[288,91374,91375,91377,91379],{"class":290,"line":8150},[288,91376,51958],{"class":298},[288,91378,50808],{"class":51473},[288,91380,51480],{"class":298},[1304,91382,91383],{},[246,91384,91385],{},"手写一个节流函数来处理",[19,91387,71125],{},[19,91389,90439],{},[19,91391,91392],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91394,91395],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[280,91397,91399],{"className":50806,"code":91398,"language":50808,"meta":205,"style":205},"\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",[25,91400,91401,91411,91425,91429,91437,91451,91471,91483,91491,91497,91507,91519,91531,91541,91553,91563,91573,91585,91589,91597,91605,91609,91617,91635,91653,91661,91679,91689,91697,91707,91711,91715,91719,91724,91729,91734,91739,91744,91749,91766,91772,91780,91791,91806,91813,91818,91823,91833,91838,91843,91848,91852,91856,91860,91880,91888,91896,91900],{"__ignoreMap":205},[288,91402,91403,91405,91407,91409],{"class":290,"line":291},[288,91404,51470],{"class":298},[288,91406,51474],{"class":51473},[288,91408,51477],{"class":2135},[288,91410,51480],{"class":298},[288,91412,91413,91415,91417,91419,91421,91423],{"class":290,"line":206},[288,91414,1207],{"class":298},[288,91416,50808],{"class":51473},[288,91418,51489],{"class":2135},[288,91420,344],{"class":298},[288,91422,51494],{"class":403},[288,91424,51480],{"class":298},[288,91426,91427],{"class":290,"line":1352},[288,91428,2572],{"emptyLinePlaceholder":217},[288,91430,91431,91433,91435],{"class":290,"line":1367},[288,91432,1207],{"class":298},[288,91434,51507],{"class":51473},[288,91436,51480],{"class":298},[288,91438,91439,91441,91443,91445,91447,91449],{"class":290,"line":1373},[288,91440,52317],{"class":298},[288,91442,51517],{"class":51473},[288,91444,51520],{"class":2135},[288,91446,344],{"class":298},[288,91448,51525],{"class":403},[288,91450,51480],{"class":298},[288,91452,91453,91455,91457,91459,91461,91463,91465,91467,91469],{"class":290,"line":1387},[288,91454,52317],{"class":298},[288,91456,51517],{"class":51473},[288,91458,15093],{"class":2135},[288,91460,344],{"class":298},[288,91462,51564],{"class":403},[288,91464,51544],{"class":2135},[288,91466,344],{"class":298},[288,91468,51571],{"class":403},[288,91470,51480],{"class":298},[288,91472,91473,91475,91477,91479,91481],{"class":290,"line":1393},[288,91474,52317],{"class":298},[288,91476,51580],{"class":51473},[288,91478,51583],{"class":298},[288,91480,51580],{"class":51473},[288,91482,51480],{"class":298},[288,91484,91485,91487,91489],{"class":290,"line":1484},[288,91486,52317],{"class":298},[288,91488,5299],{"class":51473},[288,91490,51480],{"class":298},[288,91492,91493,91495],{"class":290,"line":1490},[288,91494,54925],{"class":2135},[288,91496,15745],{"class":298},[288,91498,91499,91501,91503,91505],{"class":290,"line":1502},[288,91500,72769],{"class":347},[288,91502,51610],{"class":298},[288,91504,60678],{"class":347},[288,91506,1463],{"class":298},[288,91508,91509,91511,91513,91515,91517],{"class":290,"line":1784},[288,91510,54944],{"class":347},[288,91512,51610],{"class":298},[288,91514,1894],{"class":347},[288,91516,51665],{"class":294},[288,91518,1463],{"class":298},[288,91520,91521,91523,91525,91527,91529],{"class":290,"line":1789},[288,91522,54958],{"class":347},[288,91524,51610],{"class":298},[288,91526,1894],{"class":347},[288,91528,51665],{"class":294},[288,91530,1463],{"class":298},[288,91532,91533,91535,91537,91539],{"class":290,"line":1795},[288,91534,55057],{"class":347},[288,91536,51610],{"class":298},[288,91538,90179],{"class":347},[288,91540,1463],{"class":298},[288,91542,91543,91545,91547,91549,91551],{"class":290,"line":1800},[288,91544,55095],{"class":347},[288,91546,51610],{"class":298},[288,91548,1122],{"class":347},[288,91550,51665],{"class":294},[288,91552,1463],{"class":298},[288,91554,91555,91557,91559,91561],{"class":290,"line":1814},[288,91556,57589],{"class":347},[288,91558,51610],{"class":298},[288,91560,61015],{"class":347},[288,91562,1463],{"class":298},[288,91564,91565,91567,91569,91571],{"class":290,"line":1819},[288,91566,57459],{"class":347},[288,91568,51610],{"class":298},[288,91570,51765],{"class":347},[288,91572,1463],{"class":298},[288,91574,91575,91577,91579,91581,91583],{"class":290,"line":1825},[288,91576,90218],{"class":347},[288,91578,51610],{"class":298},[288,91580,616],{"class":347},[288,91582,51665],{"class":294},[288,91584,1463],{"class":298},[288,91586,91587],{"class":290,"line":1846},[288,91588,2359],{"class":298},[288,91590,91591,91593,91595],{"class":290,"line":1851},[288,91592,52590],{"class":298},[288,91594,5299],{"class":51473},[288,91596,51480],{"class":298},[288,91598,91599,91601,91603],{"class":290,"line":1865},[288,91600,51958],{"class":298},[288,91602,51507],{"class":51473},[288,91604,51480],{"class":298},[288,91606,91607],{"class":290,"line":1870},[288,91608,2572],{"emptyLinePlaceholder":217},[288,91610,91611,91613,91615],{"class":290,"line":1899},[288,91612,1207],{"class":298},[288,91614,51973],{"class":51473},[288,91616,51480],{"class":298},[288,91618,91619,91621,91623,91625,91627,91629,91631,91633],{"class":290,"line":1904},[288,91620,52317],{"class":298},[288,91622,51784],{"class":51473},[288,91624,53659],{"class":2135},[288,91626,344],{"class":298},[288,91628,53664],{"class":403},[288,91630,55487],{"class":298},[288,91632,51784],{"class":51473},[288,91634,51480],{"class":298},[288,91636,91637,91639,91641,91643,91645,91647,91649,91651],{"class":290,"line":1921},[288,91638,52317],{"class":298},[288,91640,51986],{"class":51473},[288,91642,55412],{"class":2135},[288,91644,344],{"class":298},[288,91646,88447],{"class":403},[288,91648,55487],{"class":298},[288,91650,51986],{"class":51473},[288,91652,51480],{"class":298},[288,91654,91655,91657,91659],{"class":290,"line":1926},[288,91656,52317],{"class":298},[288,91658,51986],{"class":51473},[288,91660,51480],{"class":298},[288,91662,91663,91665,91667,91669,91671,91673,91675,91677],{"class":290,"line":1931},[288,91664,11394],{"class":294},[288,91666,87106],{"class":347},[288,91668,13737],{"class":294},[288,91670,54569],{"class":298},[288,91672,54572],{"class":2135},[288,91674,299],{"class":298},[288,91676,90319],{"class":403},[288,91678,305],{"class":298},[288,91680,91681,91683,91685,91687],{"class":290,"line":1936},[288,91682,52392],{"class":294},[288,91684,9611],{"class":298},[288,91686,344],{"class":294},[288,91688,47506],{"class":347},[288,91690,91691,91693,91695],{"class":290,"line":1950},[288,91692,70257],{"class":294},[288,91694,90338],{"class":2135},[288,91696,11026],{"class":298},[288,91698,91699,91701,91703,91705],{"class":290,"line":1955},[288,91700,90345],{"class":298},[288,91702,344],{"class":294},[288,91704,3204],{"class":298},[288,91706,2874],{"class":294},[288,91708,91709],{"class":290,"line":2749},[288,91710,90356],{"class":357},[288,91712,91713],{"class":290,"line":2763},[288,91714,2359],{"class":298},[288,91716,91717],{"class":290,"line":2771},[288,91718,90365],{"class":357},[288,91720,91721],{"class":290,"line":2776},[288,91722,91723],{"class":357},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[288,91725,91726],{"class":290,"line":2782},[288,91727,91728],{"class":357},"    \u002F\u002F 1.声明一个定时器变量\n",[288,91730,91731],{"class":290,"line":2788},[288,91732,91733],{"class":357},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[288,91735,91736],{"class":290,"line":2793},[288,91737,91738],{"class":357},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[288,91740,91741],{"class":290,"line":8121},[288,91742,91743],{"class":357},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[288,91745,91746],{"class":290,"line":8145},[288,91747,91748],{"class":357},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[288,91750,91751,91753,91756,91758,91760,91762,91764],{"class":290,"line":8150},[288,91752,70257],{"class":294},[288,91754,91755],{"class":2135}," throttle",[288,91757,299],{"class":298},[288,91759,90810],{"class":5389},[288,91761,12608],{"class":298},[288,91763,1017],{"class":5389},[288,91765,12615],{"class":298},[288,91767,91768,91770],{"class":290,"line":8156},[288,91769,79945],{"class":294},[288,91771,90823],{"class":298},[288,91773,91774,91776,91778],{"class":290,"line":8183},[288,91775,74155],{"class":294},[288,91777,59091],{"class":294},[288,91779,54625],{"class":298},[288,91781,91782,91784,91786,91788],{"class":290,"line":8188},[288,91783,2669],{"class":294},[288,91785,1830],{"class":298},[288,91787,525],{"class":294},[288,91789,91790],{"class":298},"timer) {\n",[288,91792,91793,91796,91798,91800,91802,91804],{"class":290,"line":8194},[288,91794,91795],{"class":298},"          timer ",[288,91797,344],{"class":294},[288,91799,90864],{"class":2135},[288,91801,299],{"class":298},[288,91803,54622],{"class":294},[288,91805,54625],{"class":298},[288,91807,91808,91811],{"class":290,"line":8206},[288,91809,91810],{"class":2135},"            fn",[288,91812,2148],{"class":298},[288,91814,91815],{"class":290,"line":8218},[288,91816,91817],{"class":357},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[288,91819,91820],{"class":290,"line":8230},[288,91821,91822],{"class":357},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[288,91824,91825,91828,91830],{"class":290,"line":9889},[288,91826,91827],{"class":298},"            timer ",[288,91829,344],{"class":294},[288,91831,91832],{"class":347}," null\n",[288,91834,91835],{"class":290,"line":9914},[288,91836,91837],{"class":357},"            \u002F\u002F 不能用clearTimeout(timer)\n",[288,91839,91840],{"class":290,"line":9937},[288,91841,91842],{"class":357},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[288,91844,91845],{"class":290,"line":9961},[288,91846,91847],{"class":298},"          }, t)\n",[288,91849,91850],{"class":290,"line":9966},[288,91851,2701],{"class":298},[288,91853,91854],{"class":290,"line":9971},[288,91855,52571],{"class":298},[288,91857,91858],{"class":290,"line":9976},[288,91859,2359],{"class":298},[288,91861,91862,91864,91866,91868,91870,91872,91874,91876,91878],{"class":290,"line":9985},[288,91863,90380],{"class":298},[288,91865,57986],{"class":2135},[288,91867,299],{"class":298},[288,91869,90387],{"class":403},[288,91871,12608],{"class":298},[288,91873,91346],{"class":2135},[288,91875,90396],{"class":298},[288,91877,65247],{"class":347},[288,91879,30670],{"class":298},[288,91881,91882,91884,91886],{"class":290,"line":9990},[288,91883,52590],{"class":298},[288,91885,51986],{"class":51473},[288,91887,51480],{"class":298},[288,91889,91890,91892,91894],{"class":290,"line":9996},[288,91891,51958],{"class":298},[288,91893,51973],{"class":51473},[288,91895,51480],{"class":298},[288,91897,91898],{"class":290,"line":10017},[288,91899,2572],{"emptyLinePlaceholder":217},[288,91901,91902,91904,91906],{"class":290,"line":10023},[288,91903,51958],{"class":298},[288,91905,50808],{"class":51473},[288,91907,51480],{"class":298},[260,91909,91911],{"id":91910},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[280,91913,91915],{"className":53240,"code":91914,"language":53242,"meta":205,"style":205},"\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",[25,91916,91917,91925,91933,91938,91943,91948,91953,91957,91965],{"__ignoreMap":205},[288,91918,91919,91921,91923],{"class":290,"line":291},[288,91920,1207],{"class":298},[288,91922,51973],{"class":51473},[288,91924,51480],{"class":298},[288,91926,91927,91929,91931],{"class":290,"line":206},[288,91928,52317],{"class":298},[288,91930,51986],{"class":51473},[288,91932,51480],{"class":298},[288,91934,91935],{"class":290,"line":1352},[288,91936,91937],{"class":298},"    let timer = null\n",[288,91939,91940],{"class":290,"line":1367},[288,91941,91942],{"class":298},"    timer = setTimeout(() => {\n",[288,91944,91945],{"class":290,"line":1373},[288,91946,91947],{"class":298},"      clearTimeout(timer)\n",[288,91949,91950],{"class":290,"line":1387},[288,91951,91952],{"class":298},"      console.log(timer)\n",[288,91954,91955],{"class":290,"line":1393},[288,91956,60398],{"class":298},[288,91958,91959,91961,91963],{"class":290,"line":1484},[288,91960,52590],{"class":298},[288,91962,51986],{"class":51473},[288,91964,51480],{"class":298},[288,91966,91967,91969,91971],{"class":290,"line":1490},[288,91968,51958],{"class":298},[288,91970,51973],{"class":51473},[288,91972,51480],{"class":298},[19,91974,91975],{},"输出为1",[19,91977,91978],{},"在开启的定时器里边写清除定时器",[19,91980,91981],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[260,91983,91985],{"id":91984},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91987,91988],{},"页面打开，可以记录上一次的视频播放位置",[19,91990,91991],{},[200,91992],{"alt":205,"src":91993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91995,91996],{},[200,91997],{"alt":205,"src":91998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[280,92000,92002],{"className":50806,"code":92001,"language":50808,"meta":205,"style":205},"\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",[25,92003,92004,92014,92028,92032,92040,92054,92074,92094,92116,92129,92137,92143,92153,92163,92173,92177,92181,92188,92201,92213,92217,92221,92231,92243,92257,92261,92265,92272,92282,92295,92307,92317,92327,92343,92355,92359,92363,92371,92381,92393,92403,92413,92423,92427,92431,92441,92452,92456,92464,92472,92476,92484,92499,92514,92529,92550,92558,92566,92581,92603,92611,92626,92652,92678,92704,92712,92720,92739,92747,92752,92771,92776,92794,92799,92804,92812,92817,92831,92839,92844,92861,92865,92870,92892,92896,92904,92912,92916],{"__ignoreMap":205},[288,92005,92006,92008,92010,92012],{"class":290,"line":291},[288,92007,51470],{"class":298},[288,92009,51474],{"class":51473},[288,92011,51477],{"class":2135},[288,92013,51480],{"class":298},[288,92015,92016,92018,92020,92022,92024,92026],{"class":290,"line":206},[288,92017,1207],{"class":298},[288,92019,50808],{"class":51473},[288,92021,51489],{"class":2135},[288,92023,344],{"class":298},[288,92025,51494],{"class":403},[288,92027,51480],{"class":298},[288,92029,92030],{"class":290,"line":1352},[288,92031,2572],{"emptyLinePlaceholder":217},[288,92033,92034,92036,92038],{"class":290,"line":1367},[288,92035,1207],{"class":298},[288,92037,51507],{"class":51473},[288,92039,51480],{"class":298},[288,92041,92042,92044,92046,92048,92050,92052],{"class":290,"line":1373},[288,92043,52317],{"class":298},[288,92045,51517],{"class":51473},[288,92047,51520],{"class":2135},[288,92049,344],{"class":298},[288,92051,51525],{"class":403},[288,92053,59300],{"class":298},[288,92055,92056,92058,92060,92062,92064,92066,92068,92070,92072],{"class":290,"line":1387},[288,92057,52317],{"class":298},[288,92059,51517],{"class":51473},[288,92061,51536],{"class":2135},[288,92063,344],{"class":298},[288,92065,51541],{"class":403},[288,92067,51544],{"class":2135},[288,92069,344],{"class":298},[288,92071,51549],{"class":403},[288,92073,59300],{"class":298},[288,92075,92076,92078,92080,92082,92084,92086,92088,92090,92092],{"class":290,"line":1393},[288,92077,52317],{"class":298},[288,92079,51517],{"class":51473},[288,92081,15093],{"class":2135},[288,92083,344],{"class":298},[288,92085,51564],{"class":403},[288,92087,51544],{"class":2135},[288,92089,344],{"class":298},[288,92091,51571],{"class":403},[288,92093,59300],{"class":298},[288,92095,92096,92098,92100,92102,92104,92107,92109,92111,92114],{"class":290,"line":1484},[288,92097,52317],{"class":298},[288,92099,51517],{"class":51473},[288,92101,15093],{"class":2135},[288,92103,344],{"class":298},[288,92105,92106],{"class":403},"\"referrer\"",[288,92108,51544],{"class":2135},[288,92110,344],{"class":298},[288,92112,92113],{"class":403},"\"never\"",[288,92115,59300],{"class":298},[288,92117,92118,92120,92122,92125,92127],{"class":290,"line":1490},[288,92119,52317],{"class":298},[288,92121,51580],{"class":51473},[288,92123,92124],{"class":298},">综合案例\u003C\u002F",[288,92126,51580],{"class":51473},[288,92128,51480],{"class":298},[288,92130,92131,92133,92135],{"class":290,"line":1502},[288,92132,52317],{"class":298},[288,92134,5299],{"class":51473},[288,92136,51480],{"class":298},[288,92138,92139,92141],{"class":290,"line":1784},[288,92140,6576],{"class":51473},[288,92142,15745],{"class":298},[288,92144,92145,92147,92149,92151],{"class":290,"line":1789},[288,92146,54868],{"class":347},[288,92148,51610],{"class":298},[288,92150,490],{"class":347},[288,92152,1463],{"class":298},[288,92154,92155,92157,92159,92161],{"class":290,"line":1795},[288,92156,54879],{"class":347},[288,92158,51610],{"class":298},[288,92160,490],{"class":347},[288,92162,1463],{"class":298},[288,92164,92165,92167,92169,92171],{"class":290,"line":1800},[288,92166,72769],{"class":347},[288,92168,51610],{"class":298},[288,92170,60678],{"class":347},[288,92172,1463],{"class":298},[288,92174,92175],{"class":290,"line":1814},[288,92176,2359],{"class":298},[288,92178,92179],{"class":290,"line":1819},[288,92180,2572],{"emptyLinePlaceholder":217},[288,92182,92183,92186],{"class":290,"line":1825},[288,92184,92185],{"class":2135},"    .container",[288,92187,15745],{"class":298},[288,92189,92190,92192,92194,92197,92199],{"class":290,"line":1846},[288,92191,54944],{"class":347},[288,92193,51610],{"class":298},[288,92195,92196],{"class":347},"1200",[288,92198,51665],{"class":294},[288,92200,1463],{"class":298},[288,92202,92203,92205,92207,92209,92211],{"class":290,"line":1851},[288,92204,54879],{"class":347},[288,92206,51610],{"class":298},[288,92208,490],{"class":347},[288,92210,51729],{"class":347},[288,92212,1463],{"class":298},[288,92214,92215],{"class":290,"line":1865},[288,92216,2359],{"class":298},[288,92218,92219],{"class":290,"line":1870},[288,92220,2572],{"emptyLinePlaceholder":217},[288,92222,92223,92226,92229],{"class":290,"line":1899},[288,92224,92225],{"class":2135},"    .video",[288,92227,92228],{"class":51473}," video",[288,92230,15745],{"class":298},[288,92232,92233,92235,92237,92239,92241],{"class":290,"line":1904},[288,92234,54944],{"class":347},[288,92236,51610],{"class":298},[288,92238,608],{"class":347},[288,92240,625],{"class":294},[288,92242,1463],{"class":298},[288,92244,92245,92247,92249,92251,92253,92255],{"class":290,"line":1921},[288,92246,54868],{"class":347},[288,92248,51610],{"class":298},[288,92250,997],{"class":347},[288,92252,51665],{"class":294},[288,92254,4265],{"class":347},[288,92256,1463],{"class":298},[288,92258,92259],{"class":290,"line":1926},[288,92260,2359],{"class":298},[288,92262,92263],{"class":290,"line":1931},[288,92264,2572],{"emptyLinePlaceholder":217},[288,92266,92267,92270],{"class":290,"line":1936},[288,92268,92269],{"class":2135},"    .elevator",[288,92271,15745],{"class":298},[288,92273,92274,92276,92278,92280],{"class":290,"line":1950},[288,92275,54932],{"class":347},[288,92277,51610],{"class":298},[288,92279,86406],{"class":347},[288,92281,1463],{"class":298},[288,92283,92284,92286,92288,92291,92293],{"class":290,"line":1955},[288,92285,55120],{"class":347},[288,92287,51610],{"class":298},[288,92289,92290],{"class":347},"280",[288,92292,51665],{"class":294},[288,92294,1463],{"class":298},[288,92296,92297,92299,92301,92303,92305],{"class":290,"line":2749},[288,92298,86600],{"class":347},[288,92300,51610],{"class":298},[288,92302,997],{"class":347},[288,92304,51665],{"class":294},[288,92306,1463],{"class":298},[288,92308,92309,92311,92313,92315],{"class":290,"line":2763},[288,92310,86413],{"class":347},[288,92312,51610],{"class":298},[288,92314,86418],{"class":347},[288,92316,1463],{"class":298},[288,92318,92319,92321,92323,92325],{"class":290,"line":2771},[288,92320,61894],{"class":347},[288,92322,51610],{"class":298},[288,92324,61015],{"class":347},[288,92326,1463],{"class":298},[288,92328,92329,92331,92333,92335,92337,92339,92341],{"class":290,"line":2776},[288,92330,62150],{"class":347},[288,92332,51610],{"class":298},[288,92334,516],{"class":347},[288,92336,51665],{"class":294},[288,92338,51694],{"class":347},[288,92340,62417],{"class":347},[288,92342,1463],{"class":298},[288,92344,92345,92347,92349,92351,92353],{"class":290,"line":2782},[288,92346,54944],{"class":347},[288,92348,51610],{"class":298},[288,92350,1204],{"class":347},[288,92352,51665],{"class":294},[288,92354,1463],{"class":298},[288,92356,92357],{"class":290,"line":2788},[288,92358,2359],{"class":298},[288,92360,92361],{"class":290,"line":2793},[288,92362,2572],{"emptyLinePlaceholder":217},[288,92364,92365,92367,92369],{"class":290,"line":8121},[288,92366,92269],{"class":2135},[288,92368,1571],{"class":51473},[288,92370,15745],{"class":298},[288,92372,92373,92375,92377,92379],{"class":290,"line":8145},[288,92374,55182],{"class":347},[288,92376,51610],{"class":298},[288,92378,61042],{"class":347},[288,92380,1463],{"class":298},[288,92382,92383,92385,92387,92389,92391],{"class":290,"line":8150},[288,92384,54868],{"class":347},[288,92386,51610],{"class":298},[288,92388,743],{"class":347},[288,92390,51665],{"class":294},[288,92392,1463],{"class":298},[288,92394,92395,92397,92399,92401],{"class":290,"line":8156},[288,92396,64143],{"class":347},[288,92398,51610],{"class":298},[288,92400,54910],{"class":347},[288,92402,1463],{"class":298},[288,92404,92405,92407,92409,92411],{"class":290,"line":8183},[288,92406,57459],{"class":347},[288,92408,51610],{"class":298},[288,92410,51765],{"class":347},[288,92412,1463],{"class":298},[288,92414,92415,92417,92419,92421],{"class":290,"line":8188},[288,92416,57589],{"class":347},[288,92418,51610],{"class":298},[288,92420,62243],{"class":347},[288,92422,1463],{"class":298},[288,92424,92425],{"class":290,"line":8194},[288,92426,2359],{"class":298},[288,92428,92429],{"class":290,"line":8206},[288,92430,2572],{"emptyLinePlaceholder":217},[288,92432,92433,92435,92437,92439],{"class":290,"line":8218},[288,92434,92269],{"class":2135},[288,92436,1571],{"class":51473},[288,92438,64197],{"class":2135},[288,92440,15745],{"class":298},[288,92442,92443,92445,92447,92450],{"class":290,"line":8230},[288,92444,57589],{"class":347},[288,92446,51610],{"class":298},[288,92448,92449],{"class":347},"#1286ff",[288,92451,1463],{"class":298},[288,92453,92454],{"class":290,"line":9889},[288,92455,2359],{"class":298},[288,92457,92458,92460,92462],{"class":290,"line":9914},[288,92459,52590],{"class":298},[288,92461,5299],{"class":51473},[288,92463,51480],{"class":298},[288,92465,92466,92468,92470],{"class":290,"line":9937},[288,92467,51958],{"class":298},[288,92469,51507],{"class":51473},[288,92471,51480],{"class":298},[288,92473,92474],{"class":290,"line":9961},[288,92475,2572],{"emptyLinePlaceholder":217},[288,92477,92478,92480,92482],{"class":290,"line":9966},[288,92479,1207],{"class":298},[288,92481,51973],{"class":51473},[288,92483,51480],{"class":298},[288,92485,92486,92488,92490,92492,92494,92497],{"class":290,"line":9971},[288,92487,52317],{"class":298},[288,92489,51784],{"class":51473},[288,92491,53659],{"class":2135},[288,92493,344],{"class":298},[288,92495,92496],{"class":403},"\"container\"",[288,92498,51480],{"class":298},[288,92500,92501,92503,92505,92507,92509,92512],{"class":290,"line":9976},[288,92502,51514],{"class":298},[288,92504,51784],{"class":51473},[288,92506,53659],{"class":2135},[288,92508,344],{"class":298},[288,92510,92511],{"class":403},"\"header\"",[288,92513,51480],{"class":298},[288,92515,92516,92518,92520,92522,92524,92527],{"class":290,"line":9985},[288,92517,55407],{"class":298},[288,92519,104],{"class":51473},[288,92521,61230],{"class":2135},[288,92523,344],{"class":298},[288,92525,92526],{"class":403},"\"http:\u002F\u002Fpip.itcast.cn\"",[288,92528,51480],{"class":298},[288,92530,92531,92533,92535,92537,92539,92542,92544,92546,92548],{"class":290,"line":9990},[288,92532,55475],{"class":298},[288,92534,200],{"class":51473},[288,92536,55412],{"class":2135},[288,92538,344],{"class":298},[288,92540,92541],{"class":403},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[288,92543,55420],{"class":2135},[288,92545,344],{"class":298},[288,92547,7825],{"class":403},[288,92549,59300],{"class":298},[288,92551,92552,92554,92556],{"class":290,"line":9996},[288,92553,55580],{"class":298},[288,92555,104],{"class":51473},[288,92557,51480],{"class":298},[288,92559,92560,92562,92564],{"class":290,"line":10017},[288,92561,51949],{"class":298},[288,92563,51784],{"class":51473},[288,92565,51480],{"class":298},[288,92567,92568,92570,92572,92574,92576,92579],{"class":290,"line":10023},[288,92569,51514],{"class":298},[288,92571,51784],{"class":51473},[288,92573,53659],{"class":2135},[288,92575,344],{"class":298},[288,92577,92578],{"class":403},"\"video\"",[288,92580,51480],{"class":298},[288,92582,92583,92585,92587,92589,92591,92594,92597,92599,92601],{"class":290,"line":10037},[288,92584,55407],{"class":298},[288,92586,28356],{"class":51473},[288,92588,55412],{"class":2135},[288,92590,344],{"class":298},[288,92592,92593],{"class":403},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[288,92595,92596],{"class":2135}," controls",[288,92598,55487],{"class":298},[288,92600,28356],{"class":51473},[288,92602,51480],{"class":298},[288,92604,92605,92607,92609],{"class":290,"line":10043},[288,92606,51949],{"class":298},[288,92608,51784],{"class":51473},[288,92610,51480],{"class":298},[288,92612,92613,92615,92617,92619,92621,92624],{"class":290,"line":10070},[288,92614,51514],{"class":298},[288,92616,51784],{"class":51473},[288,92618,53659],{"class":2135},[288,92620,344],{"class":298},[288,92622,92623],{"class":403},"\"elevator\"",[288,92625,51480],{"class":298},[288,92627,92628,92630,92632,92634,92636,92638,92641,92643,92645,92648,92650],{"class":290,"line":10079},[288,92629,55407],{"class":298},[288,92631,104],{"class":51473},[288,92633,61230],{"class":2135},[288,92635,344],{"class":298},[288,92637,64409],{"class":403},[288,92639,92640],{"class":2135}," data-ref",[288,92642,344],{"class":298},[288,92644,92578],{"class":403},[288,92646,92647],{"class":298},">视频介绍\u003C\u002F",[288,92649,104],{"class":51473},[288,92651,51480],{"class":298},[288,92653,92654,92656,92658,92660,92662,92664,92666,92668,92671,92674,92676],{"class":290,"line":10085},[288,92655,55407],{"class":298},[288,92657,104],{"class":51473},[288,92659,61230],{"class":2135},[288,92661,344],{"class":298},[288,92663,64409],{"class":403},[288,92665,92640],{"class":2135},[288,92667,344],{"class":298},[288,92669,92670],{"class":403},"\"intro\"",[288,92672,92673],{"class":298},">课程简介\u003C\u002F",[288,92675,104],{"class":51473},[288,92677,51480],{"class":298},[288,92679,92680,92682,92684,92686,92688,92690,92692,92694,92697,92700,92702],{"class":290,"line":10093},[288,92681,55407],{"class":298},[288,92683,104],{"class":51473},[288,92685,61230],{"class":2135},[288,92687,344],{"class":298},[288,92689,64409],{"class":403},[288,92691,92640],{"class":2135},[288,92693,344],{"class":298},[288,92695,92696],{"class":403},"\"outline\"",[288,92698,92699],{"class":298},">评论列表\u003C\u002F",[288,92701,104],{"class":51473},[288,92703,51480],{"class":298},[288,92705,92706,92708,92710],{"class":290,"line":10098},[288,92707,51949],{"class":298},[288,92709,51784],{"class":51473},[288,92711,51480],{"class":298},[288,92713,92714,92716,92718],{"class":290,"line":16777},[288,92715,52590],{"class":298},[288,92717,51784],{"class":51473},[288,92719,51480],{"class":298},[288,92721,92722,92724,92726,92728,92730,92733,92735,92737],{"class":290,"line":16783},[288,92723,52317],{"class":298},[288,92725,51986],{"class":51473},[288,92727,55412],{"class":2135},[288,92729,344],{"class":298},[288,92731,92732],{"class":403},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[288,92734,55487],{"class":298},[288,92736,51986],{"class":51473},[288,92738,51480],{"class":298},[288,92740,92741,92743,92745],{"class":290,"line":16806},[288,92742,52317],{"class":298},[288,92744,51986],{"class":51473},[288,92746,51480],{"class":298},[288,92748,92749],{"class":290,"line":16812},[288,92750,92751],{"class":357},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[288,92753,92754,92756,92758,92760,92762,92764,92766,92769],{"class":290,"line":16835},[288,92755,11394],{"class":294},[288,92757,92228],{"class":347},[288,92759,13737],{"class":294},[288,92761,54569],{"class":298},[288,92763,54572],{"class":2135},[288,92765,299],{"class":298},[288,92767,92768],{"class":403},"'video'",[288,92770,305],{"class":298},[288,92772,92773],{"class":290,"line":16849},[288,92774,92775],{"class":357},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[288,92777,92778,92781,92783,92785,92787,92790,92792],{"class":290,"line":16869},[288,92779,92780],{"class":298},"    video.ontimeupdate ",[288,92782,344],{"class":294},[288,92784,88528],{"class":298},[288,92786,91346],{"class":2135},[288,92788,92789],{"class":298},"(() ",[288,92791,84895],{"class":294},[288,92793,15745],{"class":298},[288,92795,92796],{"class":290,"line":16875},[288,92797,92798],{"class":357},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[288,92800,92801],{"class":290,"line":16886},[288,92802,92803],{"class":357},"      \u002F\u002F 控制台输出当前的时间\n",[288,92805,92806,92809],{"class":290,"line":16909},[288,92807,92808],{"class":357},"      \u002F\u002F console.log(video.currentTime)",[288,92810,92811],{"class":357},"  \u002F\u002F获得当前的视频时间\n",[288,92813,92814],{"class":290,"line":16931},[288,92815,92816],{"class":357},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[288,92818,92819,92821,92823,92825,92828],{"class":290,"line":16936},[288,92820,74856],{"class":298},[288,92822,71827],{"class":2135},[288,92824,299],{"class":298},[288,92826,92827],{"class":403},"'currentTime'",[288,92829,92830],{"class":298},", video.currentTime)\n",[288,92832,92833,92835,92837],{"class":290,"line":16942},[288,92834,54708],{"class":298},[288,92836,6583],{"class":347},[288,92838,305],{"class":298},[288,92840,92841],{"class":290,"line":16956},[288,92842,92843],{"class":357},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[288,92845,92846,92849,92852,92854,92857,92859],{"class":290,"line":16969},[288,92847,92848],{"class":298},"    video.",[288,92850,92851],{"class":2135},"onloadeddata",[288,92853,13737],{"class":294},[288,92855,92856],{"class":298}," () ",[288,92858,84895],{"class":294},[288,92860,15745],{"class":298},[288,92862,92863],{"class":290,"line":16974},[288,92864,60185],{"class":357},[288,92866,92867],{"class":290,"line":16988},[288,92868,92869],{"class":357},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[288,92871,92872,92875,92877,92880,92882,92884,92886,92888,92890],{"class":290,"line":16993},[288,92873,92874],{"class":298},"      video.currentTime ",[288,92876,344],{"class":294},[288,92878,92879],{"class":298}," localStorage.",[288,92881,71858],{"class":2135},[288,92883,299],{"class":298},[288,92885,92827],{"class":403},[288,92887,13887],{"class":298},[288,92889,71530],{"class":294},[288,92891,47506],{"class":347},[288,92893,92894],{"class":290,"line":16999},[288,92895,2359],{"class":298},[288,92897,92898,92900,92902],{"class":290,"line":17004},[288,92899,52590],{"class":298},[288,92901,51986],{"class":51473},[288,92903,51480],{"class":298},[288,92905,92906,92908,92910],{"class":290,"line":17018},[288,92907,51958],{"class":298},[288,92909,51973],{"class":51473},[288,92911,51480],{"class":298},[288,92913,92914],{"class":290,"line":17023},[288,92915,2572],{"emptyLinePlaceholder":217},[288,92917,92918,92920,92922],{"class":290,"line":17028},[288,92919,51958],{"class":298},[288,92921,50808],{"class":51473},[288,92923,51480],{"class":298},[5299,92925,92926],{},"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":205,"searchDepth":206,"depth":206,"links":92928},[92929,92934,92938,92939,92940,92945,92950,92951,92952,92953,92960,92965,92966,92976,92980,92981,92985],{"id":76864,"depth":206,"text":76865,"children":92930},[92931,92932,92933],{"id":76868,"depth":1352,"text":76869},{"id":76893,"depth":1352,"text":76894},{"id":76905,"depth":1352,"text":76906},{"id":76917,"depth":206,"text":76918,"children":92935},[92936,92937],{"id":76921,"depth":1352,"text":76922},{"id":76936,"depth":1352,"text":76937},{"id":76988,"depth":206,"text":76989},{"id":77032,"depth":206,"text":77033},{"id":77049,"depth":206,"text":77050,"children":92941},[92942,92943,92944],{"id":77053,"depth":1352,"text":77054},{"id":77066,"depth":1352,"text":77067},{"id":77171,"depth":1352,"text":77172},{"id":77460,"depth":206,"text":77461,"children":92946},[92947,92948,92949],{"id":77464,"depth":1352,"text":77465},{"id":77907,"depth":1352,"text":77908},{"id":78318,"depth":1352,"text":78319},{"id":78381,"depth":206,"text":78382},{"id":78460,"depth":206,"text":78461},{"id":78553,"depth":206,"text":78554},{"id":80398,"depth":206,"text":80399,"children":92954},[92955,92956,92957,92958,92959],{"id":80402,"depth":1352,"text":80403},{"id":80414,"depth":1352,"text":80415},{"id":80633,"depth":1352,"text":80634},{"id":80651,"depth":1352,"text":80652},{"id":80711,"depth":1352,"text":80712},{"id":84979,"depth":206,"text":84980,"children":92961},[92962,92963,92964],{"id":84983,"depth":1352,"text":84984},{"id":85001,"depth":1352,"text":85002},{"id":85027,"depth":1352,"text":85028},{"id":85036,"depth":206,"text":85037},{"id":85058,"depth":206,"text":85059,"children":92967},[92968,92969,92970,92971,92972,92973,92974,92975],{"id":85062,"depth":1352,"text":85063},{"id":85323,"depth":1352,"text":85324},{"id":85509,"depth":1352,"text":85510},{"id":85876,"depth":1352,"text":85877},{"id":85992,"depth":1352,"text":85993},{"id":86028,"depth":1352,"text":86029},{"id":86075,"depth":1352,"text":86076},{"id":86109,"depth":1352,"text":86110},{"id":87472,"depth":206,"text":87473,"children":92977},[92978,92979],{"id":87476,"depth":1352,"text":87477},{"id":87513,"depth":1352,"text":87514},{"id":88868,"depth":206,"text":88869},{"id":89239,"depth":206,"text":89240,"children":92982},[92983,92984],{"id":89243,"depth":1352,"text":89244},{"id":89277,"depth":1352,"text":89278},{"id":90006,"depth":206,"text":90007,"children":92986},[92987,92988,92989,92990],{"id":90010,"depth":1352,"text":90011},{"id":90968,"depth":1352,"text":90969},{"id":91910,"depth":1352,"text":91911},{"id":91984,"depth":1352,"text":91985},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76853,"description":214},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92997,"title":92998,"body":92999,"description":93010,"extension":215,"meta":93011,"navigation":217,"path":93013,"seo":93014,"stem":93015,"__hash__":93016},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93000,"toc":93008},[93001],[19,93002,93003,93004],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[104,93005,93006],{"href":93006,"rel":93007},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[108],{"title":205,"searchDepth":206,"depth":206,"links":93009},[],"三件套第三套学习",{"category":93012},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92998,"description":93010},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93018,"title":93019,"body":93020,"description":214,"extension":215,"meta":93125,"navigation":217,"path":93126,"seo":93127,"stem":93128,"__hash__":93129},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93021,"toc":93120},[93022,93029,93032,93035,93038,93042,93051,93054,93057,93061,93070,93073,93077,93080,93100,93103,93117],[19,93023,93024],{},[104,93025,93028],{"href":93026,"rel":93027},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[108],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93030,93019],{"id":93031},"_1安装",[19,93033,93034],{},"numpy是科学计算基础库,底层是C语言",[19,93036,93037],{},"三种方式：",[14,93039,93041],{"id":93040},"_11-通过pip安装","1.1 通过pip安装",[280,93043,93045],{"className":30551,"code":93044,"language":30553,"meta":205,"style":205},"pip install numpy\n",[25,93046,93047],{"__ignoreMap":205},[288,93048,93049],{"class":290,"line":291},[288,93050,93044],{"class":298},[19,93052,93053],{},"首选方式，自动处理依赖项",[19,93055,93056],{},"在提示系统命令符中使用cmd",[14,93058,93060],{"id":93059},"_12-通过anaconda安装","1.2 通过Anaconda安装",[280,93062,93064],{"className":30551,"code":93063,"language":30553,"meta":205,"style":205},"conda install numpy\n",[25,93065,93066],{"__ignoreMap":205},[288,93067,93068],{"class":290,"line":291},[288,93069,93063],{"class":298},[19,93071,93072],{},"自动解决环境依赖",[14,93074,93076],{"id":93075},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93078,93079],{},"对于Debian\u002FUbuntu",[280,93081,93083],{"className":30551,"code":93082,"language":30553,"meta":205,"style":205},"sudo apt-get install python3-numpy\n",[25,93084,93085],{"__ignoreMap":205},[288,93086,93087,93090,93092,93095,93097],{"class":290,"line":291},[288,93088,93089],{"class":298},"sudo apt",[288,93091,829],{"class":294},[288,93093,93094],{"class":298},"get install python3",[288,93096,829],{"class":294},[288,93098,93099],{"class":298},"numpy\n",[19,93101,93102],{},"对于Fedora:",[280,93104,93106],{"className":30551,"code":93105,"language":30553,"meta":205,"style":205},"sudo dnf install python3-numpy\n",[25,93107,93108],{"__ignoreMap":205},[288,93109,93110,93113,93115],{"class":290,"line":291},[288,93111,93112],{"class":298},"sudo dnf install python3",[288,93114,829],{"class":294},[288,93116,93099],{"class":298},[5299,93118,93119],{},"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":205,"searchDepth":206,"depth":206,"links":93121},[93122,93123,93124],{"id":93040,"depth":206,"text":93041},{"id":93059,"depth":206,"text":93060},{"id":93075,"depth":206,"text":93076},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93019,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93131,"title":93132,"body":93133,"description":214,"extension":215,"meta":93246,"navigation":217,"path":93247,"seo":93248,"stem":93249,"__hash__":93250},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93134,"toc":93244},[93135,93138,93141,93144,93147,93150,93153,93156,93159,93162,93238,93241],[10,93136,93132],{"id":93137},"_10算数函数",[19,93139,93140],{},"加减乘除运算跟python基础语法没区别",[19,93142,93143],{},"除了python那种方法外还可以使用函数",[19,93145,93146],{},"加：np.add(a,b)",[19,93148,93149],{},"减：np.subtract(a,b)",[19,93151,93152],{},"乘：np.multiply(a,b)",[19,93154,93155],{},"除：np.divide(a,b) == a\u002Fb",[19,93157,93158],{},"取余：np.mod(a,b) == a%b",[19,93160,93161],{},"必须会的用法：",[280,93163,93165],{"className":30551,"code":93164,"language":30553,"meta":205,"style":205},"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",[25,93166,93167,93189,93210,93220,93233],{"__ignoreMap":205},[288,93168,93169,93171,93173,93176,93178,93181,93183,93185,93187],{"class":290,"line":291},[288,93170,104],{"class":298},[288,93172,344],{"class":294},[288,93174,93175],{"class":298},"np.arange(",[288,93177,717],{"class":347},[288,93179,93180],{"class":298},").reshape(",[288,93182,370],{"class":347},[288,93184,675],{"class":298},[288,93186,370],{"class":347},[288,93188,305],{"class":298},[288,93190,93191,93193,93195,93198,93200,93202,93204,93206,93208],{"class":290,"line":206},[288,93192,560],{"class":298},[288,93194,344],{"class":294},[288,93196,93197],{"class":298},"np.array([",[288,93199,743],{"class":347},[288,93201,675],{"class":298},[288,93203,743],{"class":347},[288,93205,675],{"class":298},[288,93207,743],{"class":347},[288,93209,4829],{"class":298},[288,93211,93212,93215,93217],{"class":290,"line":1352},[288,93213,93214],{"class":298},"result",[288,93216,344],{"class":294},[288,93218,93219],{"class":298},"np.empty_like(a)\n",[288,93221,93222,93225,93228,93230],{"class":290,"line":1367},[288,93223,93224],{"class":298},"np.add(a,b,",[288,93226,93227],{"class":5389},"out",[288,93229,344],{"class":294},[288,93231,93232],{"class":298},"result)\n",[288,93234,93235],{"class":290,"line":1373},[288,93236,93237],{"class":298},"result\n",[19,93239,93240],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5299,93242,93243],{},"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":205,"searchDepth":206,"depth":206,"links":93245},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93132,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93252,"title":93253,"body":93254,"description":214,"extension":215,"meta":94016,"navigation":217,"path":94017,"seo":94018,"stem":94019,"__hash__":94020},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93255,"toc":94003},[93256,93259,93262,93265,93269,93308,93312,93356,93416,93420,93423,93462,93465,93510,93514,93550,93554,93623,93627,93691,93695,93698,93701,93704,93707,93743,93747,93787,93791,93863,93866,93870,93933,93937,94000],[10,93257,93253],{"id":93258},"_11统计函数",[19,93260,93261],{},"sum max min mean",[19,93263,93264],{},"这些有axis参数，可以指定方向",[14,93266,93268],{"id":93267},"_111-sum求和函数","11.1 sum()求和函数",[280,93270,93272],{"className":30551,"code":93271,"language":30553,"meta":205,"style":205},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[25,93273,93274,93279,93300],{"__ignoreMap":205},[288,93275,93276],{"class":290,"line":291},[288,93277,93278],{"class":357},"#创建一维数组\n",[288,93280,93281,93283,93285,93288,93290,93292,93294,93296,93298],{"class":290,"line":206},[288,93282,104],{"class":298},[288,93284,344],{"class":294},[288,93286,93287],{"class":298},"np.random.randint(",[288,93289,516],{"class":347},[288,93291,675],{"class":298},[288,93293,608],{"class":347},[288,93295,675],{"class":298},[288,93297,997],{"class":347},[288,93299,305],{"class":298},[288,93301,93302,93305],{"class":290,"line":1352},[288,93303,93304],{"class":298},"np.sum(a)",[288,93306,93307],{"class":357},"#求和\n",[14,93309,93311],{"id":93310},"_112-max求最大值函数","11.2 max()求最大值函数",[280,93313,93315],{"className":30551,"code":93314,"language":30553,"meta":205,"style":205},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[25,93316,93317,93321,93341,93346,93351],{"__ignoreMap":205},[288,93318,93319],{"class":290,"line":291},[288,93320,93278],{"class":357},[288,93322,93323,93325,93327,93329,93331,93333,93335,93337,93339],{"class":290,"line":206},[288,93324,104],{"class":298},[288,93326,344],{"class":294},[288,93328,93287],{"class":298},[288,93330,516],{"class":347},[288,93332,675],{"class":298},[288,93334,608],{"class":347},[288,93336,675],{"class":298},[288,93338,997],{"class":347},[288,93340,305],{"class":298},[288,93342,93343],{"class":290,"line":1352},[288,93344,93345],{"class":298},"np.max(a)\n",[288,93347,93348],{"class":290,"line":1367},[288,93349,93350],{"class":357},"#最大索引(求最大元素的索引)arg\n",[288,93352,93353],{"class":290,"line":1373},[288,93354,93355],{"class":298},"np.argmax(a)\n",[280,93357,93359],{"className":30551,"code":93358,"language":30553,"meta":205,"style":205},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[25,93360,93361,93382,93402,93406],{"__ignoreMap":205},[288,93362,93363,93365,93367,93370,93372,93374,93376,93378,93380],{"class":290,"line":291},[288,93364,11092],{"class":298},[288,93366,344],{"class":294},[288,93368,93369],{"class":298}," np.array([",[288,93371,516],{"class":347},[288,93373,12608],{"class":298},[288,93375,616],{"class":347},[288,93377,12608],{"class":298},[288,93379,370],{"class":347},[288,93381,4829],{"class":298},[288,93383,93384,93386,93388,93390,93392,93394,93396,93398,93400],{"class":290,"line":206},[288,93385,11118],{"class":298},[288,93387,344],{"class":294},[288,93389,93369],{"class":298},[288,93391,370],{"class":347},[288,93393,12608],{"class":298},[288,93395,376],{"class":347},[288,93397,12608],{"class":298},[288,93399,590],{"class":347},[288,93401,4829],{"class":298},[288,93403,93404],{"class":290,"line":1352},[288,93405,2572],{"emptyLinePlaceholder":217},[288,93407,93408,93410,93413],{"class":290,"line":1367},[288,93409,30588],{"class":347},[288,93411,93412],{"class":298},"(np.maximum(a, b))   ",[288,93414,93415],{"class":357},"# [3 5 4]，每个位置上取较大值\n",[14,93417,93419],{"id":93418},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93421,93422],{},"①一维数组：",[280,93424,93426],{"className":30551,"code":93425,"language":30553,"meta":205,"style":205},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[25,93427,93428,93432,93452,93457],{"__ignoreMap":205},[288,93429,93430],{"class":290,"line":291},[288,93431,93278],{"class":357},[288,93433,93434,93436,93438,93440,93442,93444,93446,93448,93450],{"class":290,"line":206},[288,93435,104],{"class":298},[288,93437,344],{"class":294},[288,93439,93287],{"class":298},[288,93441,516],{"class":347},[288,93443,675],{"class":298},[288,93445,608],{"class":347},[288,93447,675],{"class":298},[288,93449,997],{"class":347},[288,93451,305],{"class":298},[288,93453,93454],{"class":290,"line":1352},[288,93455,93456],{"class":357},"#求平均值\n",[288,93458,93459],{"class":290,"line":1367},[288,93460,93461],{"class":298},"np.mean(a)\n",[19,93463,93464],{},"②二维数组",[280,93466,93468],{"className":30551,"code":93467,"language":30553,"meta":205,"style":205},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[25,93469,93470,93475,93500,93505],{"__ignoreMap":205},[288,93471,93472],{"class":290,"line":291},[288,93473,93474],{"class":357},"#二维数组\n",[288,93476,93477,93480,93482,93484,93486,93488,93490,93492,93494,93496,93498],{"class":290,"line":206},[288,93478,93479],{"class":298},"aa",[288,93481,344],{"class":294},[288,93483,93175],{"class":298},[288,93485,516],{"class":347},[288,93487,675],{"class":298},[288,93489,820],{"class":347},[288,93491,93180],{"class":298},[288,93493,370],{"class":347},[288,93495,675],{"class":298},[288,93497,590],{"class":347},[288,93499,305],{"class":298},[288,93501,93502],{"class":290,"line":1352},[288,93503,93504],{"class":357},"#对数组中的所有数求平均\n",[288,93506,93507],{"class":290,"line":1367},[288,93508,93509],{"class":298},"np.mean(aa)\n",[14,93511,93513],{"id":93512},"_114-median求中位数函数","11.4 median()求中位数函数",[280,93515,93517],{"className":30551,"code":93516,"language":30553,"meta":205,"style":205},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[25,93518,93519,93524,93540,93545],{"__ignoreMap":205},[288,93520,93521],{"class":290,"line":291},[288,93522,93523],{"class":357},"#求中位数\n",[288,93525,93526,93528,93530,93532,93534,93536,93538],{"class":290,"line":206},[288,93527,560],{"class":298},[288,93529,344],{"class":294},[288,93531,93175],{"class":298},[288,93533,516],{"class":347},[288,93535,675],{"class":298},[288,93537,743],{"class":347},[288,93539,305],{"class":298},[288,93541,93542],{"class":290,"line":1352},[288,93543,93544],{"class":298},"np.median(b)\n",[288,93546,93547],{"class":290,"line":1367},[288,93548,93549],{"class":357},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93551,93553],{"id":93552},"_115-power求幂运算函数","11.5 power()求幂运算函数",[280,93555,93557],{"className":30551,"code":93556,"language":30553,"meta":205,"style":205},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[25,93558,93559,93575,93580,93585,93594,93599,93608],{"__ignoreMap":205},[288,93560,93561,93563,93565,93567,93569,93571,93573],{"class":290,"line":291},[288,93562,560],{"class":298},[288,93564,344],{"class":294},[288,93566,93175],{"class":298},[288,93568,516],{"class":347},[288,93570,675],{"class":298},[288,93572,743],{"class":347},[288,93574,305],{"class":298},[288,93576,93577],{"class":290,"line":206},[288,93578,93579],{"class":357},"#幂运算\n",[288,93581,93582],{"class":290,"line":1352},[288,93583,93584],{"class":357},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[288,93586,93587,93590,93592],{"class":290,"line":1367},[288,93588,93589],{"class":298},"np.power(b,",[288,93591,376],{"class":347},[288,93593,305],{"class":298},[288,93595,93596],{"class":290,"line":1373},[288,93597,93598],{"class":357},"#或者以下代码，将数据存储起来\n",[288,93600,93601,93603,93605],{"class":290,"line":1387},[288,93602,1142],{"class":298},[288,93604,344],{"class":294},[288,93606,93607],{"class":298},"np.empty_like(b)\n",[288,93609,93610,93612,93614,93616,93618,93620],{"class":290,"line":1393},[288,93611,93589],{"class":298},[288,93613,376],{"class":347},[288,93615,675],{"class":298},[288,93617,93227],{"class":5389},[288,93619,344],{"class":294},[288,93621,93622],{"class":298},"y)\n",[14,93624,93626],{"id":93625},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[280,93628,93630],{"className":30551,"code":93629,"language":30553,"meta":205,"style":205},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[25,93631,93632,93648,93653,93658,93662,93680],{"__ignoreMap":205},[288,93633,93634,93636,93638,93640,93642,93644,93646],{"class":290,"line":291},[288,93635,560],{"class":298},[288,93637,344],{"class":294},[288,93639,93175],{"class":298},[288,93641,516],{"class":347},[288,93643,675],{"class":298},[288,93645,743],{"class":347},[288,93647,305],{"class":298},[288,93649,93650],{"class":290,"line":206},[288,93651,93652],{"class":357},"#开方\n",[288,93654,93655],{"class":290,"line":1352},[288,93656,93657],{"class":298},"np.sqrt(b)\n",[288,93659,93660],{"class":290,"line":1367},[288,93661,93598],{"class":357},[288,93663,93664,93666,93668,93671,93674,93676,93678],{"class":290,"line":1373},[288,93665,1142],{"class":298},[288,93667,344],{"class":294},[288,93669,93670],{"class":298},"np.empty_like(b,",[288,93672,93673],{"class":5389},"dtype",[288,93675,344],{"class":294},[288,93677,338],{"class":347},[288,93679,305],{"class":298},[288,93681,93682,93685,93687,93689],{"class":290,"line":1387},[288,93683,93684],{"class":298},"np.sqrt(b,",[288,93686,93227],{"class":5389},[288,93688,344],{"class":294},[288,93690,93622],{"class":298},[14,93692,93694],{"id":93693},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93696,93697],{},"对数组中的元素累计求和，可指定轴",[19,93699,93700],{},"#累计求和的意思是：",[19,93702,93703],{},"a = np.array([1, 2, 3, 4])",[19,93705,93706],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[280,93708,93710],{"className":30551,"code":93709,"language":30553,"meta":205,"style":205},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[25,93711,93712,93728,93733,93738],{"__ignoreMap":205},[288,93713,93714,93716,93718,93720,93722,93724,93726],{"class":290,"line":291},[288,93715,560],{"class":298},[288,93717,344],{"class":294},[288,93719,93175],{"class":298},[288,93721,516],{"class":347},[288,93723,675],{"class":298},[288,93725,743],{"class":347},[288,93727,305],{"class":298},[288,93729,93730],{"class":290,"line":206},[288,93731,93732],{"class":298},"np.cumsum(b)\n",[288,93734,93735],{"class":290,"line":1352},[288,93736,93737],{"class":357},"#结果：\n",[288,93739,93740],{"class":290,"line":1367},[288,93741,93742],{"class":357},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93744,93746],{"id":93745},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[280,93748,93750],{"className":30551,"code":93749,"language":30553,"meta":205,"style":205},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[25,93751,93752,93768,93773,93778,93782],{"__ignoreMap":205},[288,93753,93754,93756,93758,93760,93762,93764,93766],{"class":290,"line":291},[288,93755,560],{"class":298},[288,93757,344],{"class":294},[288,93759,93175],{"class":298},[288,93761,516],{"class":347},[288,93763,675],{"class":298},[288,93765,743],{"class":347},[288,93767,305],{"class":298},[288,93769,93770],{"class":290,"line":206},[288,93771,93772],{"class":357},"#对数组中的元素累计求积，可指定轴\n",[288,93774,93775],{"class":290,"line":1352},[288,93776,93777],{"class":298},"np.cumprod(b)\n",[288,93779,93780],{"class":290,"line":1367},[288,93781,93737],{"class":357},[288,93783,93784],{"class":290,"line":1373},[288,93785,93786],{"class":357},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93788,93790],{"id":93789},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[280,93792,93794],{"className":30551,"code":93793,"language":30553,"meta":205,"style":205},"#删除数组中的重复数据，并对数据进行排序\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",[25,93795,93796,93801,93849,93854,93858],{"__ignoreMap":205},[288,93797,93798],{"class":290,"line":291},[288,93799,93800],{"class":357},"#删除数组中的重复数据，并对数据进行排序\n",[288,93802,93803,93805,93807,93809,93811,93813,93815,93817,93819,93821,93823,93825,93827,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847],{"class":290,"line":206},[288,93804,104],{"class":298},[288,93806,344],{"class":294},[288,93808,93197],{"class":298},[288,93810,516],{"class":347},[288,93812,675],{"class":298},[288,93814,376],{"class":347},[288,93816,675],{"class":298},[288,93818,370],{"class":347},[288,93820,675],{"class":298},[288,93822,795],{"class":347},[288,93824,675],{"class":298},[288,93826,370],{"class":347},[288,93828,675],{"class":298},[288,93830,743],{"class":347},[288,93832,675],{"class":298},[288,93834,496],{"class":347},[288,93836,675],{"class":298},[288,93838,490],{"class":347},[288,93840,675],{"class":298},[288,93842,1072],{"class":347},[288,93844,675],{"class":298},[288,93846,590],{"class":347},[288,93848,4829],{"class":298},[288,93850,93851],{"class":290,"line":1352},[288,93852,93853],{"class":298},"np.unique(a)\n",[288,93855,93856],{"class":290,"line":1367},[288,93857,93737],{"class":357},[288,93859,93860],{"class":290,"line":1373},[288,93861,93862],{"class":357},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93864,93865],{},"升序形式排序",[14,93867,93869],{"id":93868},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[280,93871,93873],{"className":30551,"code":93872,"language":30553,"meta":205,"style":205},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[25,93874,93875,93923,93928],{"__ignoreMap":205},[288,93876,93877,93879,93881,93883,93885,93887,93889,93891,93893,93895,93897,93899,93901,93903,93905,93907,93909,93911,93913,93915,93917,93919,93921],{"class":290,"line":291},[288,93878,104],{"class":298},[288,93880,344],{"class":294},[288,93882,93197],{"class":298},[288,93884,516],{"class":347},[288,93886,675],{"class":298},[288,93888,376],{"class":347},[288,93890,675],{"class":298},[288,93892,370],{"class":347},[288,93894,675],{"class":298},[288,93896,795],{"class":347},[288,93898,675],{"class":298},[288,93900,370],{"class":347},[288,93902,675],{"class":298},[288,93904,743],{"class":347},[288,93906,675],{"class":298},[288,93908,496],{"class":347},[288,93910,675],{"class":298},[288,93912,490],{"class":347},[288,93914,675],{"class":298},[288,93916,1072],{"class":347},[288,93918,675],{"class":298},[288,93920,590],{"class":347},[288,93922,4829],{"class":298},[288,93924,93925],{"class":290,"line":206},[288,93926,93927],{"class":357},"#返回数组中非零元素的索引\n",[288,93929,93930],{"class":290,"line":1352},[288,93931,93932],{"class":298},"np.nonzero(a)\n",[14,93934,93936],{"id":93935},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[280,93938,93940],{"className":30551,"code":93939,"language":30553,"meta":205,"style":205},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[25,93941,93942,93990,93995],{"__ignoreMap":205},[288,93943,93944,93946,93948,93950,93952,93954,93956,93958,93960,93962,93964,93966,93968,93970,93972,93974,93976,93978,93980,93982,93984,93986,93988],{"class":290,"line":291},[288,93945,104],{"class":298},[288,93947,344],{"class":294},[288,93949,93197],{"class":298},[288,93951,516],{"class":347},[288,93953,675],{"class":298},[288,93955,376],{"class":347},[288,93957,675],{"class":298},[288,93959,370],{"class":347},[288,93961,675],{"class":298},[288,93963,795],{"class":347},[288,93965,675],{"class":298},[288,93967,370],{"class":347},[288,93969,675],{"class":298},[288,93971,743],{"class":347},[288,93973,675],{"class":298},[288,93975,496],{"class":347},[288,93977,675],{"class":298},[288,93979,490],{"class":347},[288,93981,675],{"class":298},[288,93983,1072],{"class":347},[288,93985,675],{"class":298},[288,93987,590],{"class":347},[288,93989,4829],{"class":298},[288,93991,93992],{"class":290,"line":206},[288,93993,93994],{"class":357},"#计算一组数中最大值与最小值的差，可指定轴\n",[288,93996,93997],{"class":290,"line":1352},[288,93998,93999],{"class":298},"np.ptp(a)\n",[5299,94001,94002],{},"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":205,"searchDepth":206,"depth":206,"links":94004},[94005,94006,94007,94008,94009,94010,94011,94012,94013,94014,94015],{"id":93267,"depth":206,"text":93268},{"id":93310,"depth":206,"text":93311},{"id":93418,"depth":206,"text":93419},{"id":93512,"depth":206,"text":93513},{"id":93552,"depth":206,"text":93553},{"id":93625,"depth":206,"text":93626},{"id":93693,"depth":206,"text":93694},{"id":93745,"depth":206,"text":93746},{"id":93789,"depth":206,"text":93790},{"id":93868,"depth":206,"text":93869},{"id":93935,"depth":206,"text":93936},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93253,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94022,"title":94023,"body":94024,"description":214,"extension":215,"meta":94679,"navigation":217,"path":94680,"seo":94681,"stem":94682,"__hash__":94683},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94025,"toc":94667},[94026,94029,94033,94036,94252,94256,94259,94468,94472,94538,94543,94547,94550,94553,94591,94595,94598,94603,94607,94610,94613,94618,94622,94625,94629,94632,94635,94640,94644,94647,94650,94655,94659,94664],[10,94027,94023],{"id":94028},"_12其他常用函数",[14,94030,94032],{"id":94031},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94034,94035],{},"将数组的数据按照行列复制扩展",[280,94037,94039],{"className":30551,"code":94038,"language":30553,"meta":205,"style":205},"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",[25,94040,94041,94057,94066,94070,94075,94080,94093,94097,94102,94107,94112,94116,94121,94145,94157,94161,94165,94170,94175,94180,94185,94189,94202,94206,94210,94215,94220,94225,94230,94235,94239,94243,94248],{"__ignoreMap":205},[288,94042,94043,94045,94047,94049,94051,94053,94055],{"class":290,"line":291},[288,94044,104],{"class":298},[288,94046,344],{"class":294},[288,94048,93175],{"class":298},[288,94050,516],{"class":347},[288,94052,675],{"class":298},[288,94054,616],{"class":347},[288,94056,305],{"class":298},[288,94058,94059,94062,94064],{"class":290,"line":206},[288,94060,94061],{"class":298},"np.tile(a,",[288,94063,376],{"class":347},[288,94065,305],{"class":298},[288,94067,94068],{"class":290,"line":1352},[288,94069,93737],{"class":357},[288,94071,94072],{"class":290,"line":1367},[288,94073,94074],{"class":357},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[288,94076,94077],{"class":290,"line":1373},[288,94078,94079],{"class":357},"#行复制两次，列复制三次\n",[288,94081,94082,94085,94087,94089,94091],{"class":290,"line":1387},[288,94083,94084],{"class":298},"np.tile(a,(",[288,94086,376],{"class":347},[288,94088,675],{"class":298},[288,94090,370],{"class":347},[288,94092,30670],{"class":298},[288,94094,94095],{"class":290,"line":1393},[288,94096,93737],{"class":357},[288,94098,94099],{"class":290,"line":1484},[288,94100,94101],{"class":403},"'''\n",[288,94103,94104],{"class":290,"line":1490},[288,94105,94106],{"class":403},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[288,94108,94109],{"class":290,"line":1502},[288,94110,94111],{"class":403},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[288,94113,94114],{"class":290,"line":1784},[288,94115,94101],{"class":403},[288,94117,94118],{"class":290,"line":1789},[288,94119,94120],{"class":357},"#创建二维数组\n",[288,94122,94123,94125,94127,94129,94131,94133,94135,94137,94139,94141,94143],{"class":290,"line":1795},[288,94124,93479],{"class":298},[288,94126,344],{"class":294},[288,94128,93175],{"class":298},[288,94130,516],{"class":347},[288,94132,675],{"class":298},[288,94134,820],{"class":347},[288,94136,93180],{"class":298},[288,94138,590],{"class":347},[288,94140,675],{"class":298},[288,94142,370],{"class":347},[288,94144,305],{"class":298},[288,94146,94147,94150,94152,94154],{"class":290,"line":1800},[288,94148,94149],{"class":298},"np.tile(aa,",[288,94151,376],{"class":347},[288,94153,726],{"class":298},[288,94155,94156],{"class":357},"#一个数的时候就是行\n",[288,94158,94159],{"class":290,"line":1814},[288,94160,93737],{"class":357},[288,94162,94163],{"class":290,"line":1819},[288,94164,94101],{"class":403},[288,94166,94167],{"class":290,"line":1825},[288,94168,94169],{"class":403},"array([[ 1,  2,  3,  1,  2,  3],\n",[288,94171,94172],{"class":290,"line":1846},[288,94173,94174],{"class":403},"       [ 4,  5,  6,  4,  5,  6],\n",[288,94176,94177],{"class":290,"line":1851},[288,94178,94179],{"class":403},"       [ 7,  8,  9,  7,  8,  9],\n",[288,94181,94182],{"class":290,"line":1865},[288,94183,94184],{"class":403},"       [10, 11, 12, 10, 11, 12]])\n",[288,94186,94187],{"class":290,"line":1870},[288,94188,94101],{"class":403},[288,94190,94191,94194,94196,94198,94200],{"class":290,"line":1899},[288,94192,94193],{"class":298},"np.tile(aa,(",[288,94195,376],{"class":347},[288,94197,675],{"class":298},[288,94199,370],{"class":347},[288,94201,30670],{"class":298},[288,94203,94204],{"class":290,"line":1904},[288,94205,93737],{"class":357},[288,94207,94208],{"class":290,"line":1921},[288,94209,94101],{"class":403},[288,94211,94212],{"class":290,"line":1926},[288,94213,94214],{"class":403},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[288,94216,94217],{"class":290,"line":1931},[288,94218,94219],{"class":403},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[288,94221,94222],{"class":290,"line":1936},[288,94223,94224],{"class":403},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[288,94226,94227],{"class":290,"line":1950},[288,94228,94229],{"class":403},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[288,94231,94232],{"class":290,"line":1955},[288,94233,94234],{"class":403},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[288,94236,94237],{"class":290,"line":2749},[288,94238,94219],{"class":403},[288,94240,94241],{"class":290,"line":2763},[288,94242,94224],{"class":403},[288,94244,94245],{"class":290,"line":2771},[288,94246,94247],{"class":403},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[288,94249,94250],{"class":290,"line":2776},[288,94251,94101],{"class":403},[14,94253,94255],{"id":94254},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94257,94258],{},"repeat()将数组中的每个元素重复若干次",[280,94260,94262],{"className":30551,"code":94261,"language":30553,"meta":205,"style":205},"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",[25,94263,94264,94280,94289,94293,94298,94322,94327,94336,94340,94345,94349,94354,94370,94374,94378,94383,94388,94393,94397,94402,94406,94411,94416,94420,94436,94440,94444,94449,94454,94459,94464],{"__ignoreMap":205},[288,94265,94266,94268,94270,94272,94274,94276,94278],{"class":290,"line":291},[288,94267,104],{"class":298},[288,94269,344],{"class":294},[288,94271,93175],{"class":298},[288,94273,516],{"class":347},[288,94275,675],{"class":298},[288,94277,616],{"class":347},[288,94279,305],{"class":298},[288,94281,94282,94285,94287],{"class":290,"line":206},[288,94283,94284],{"class":298},"np.repeat(a,",[288,94286,370],{"class":347},[288,94288,305],{"class":298},[288,94290,94291],{"class":290,"line":1352},[288,94292,93737],{"class":357},[288,94294,94295],{"class":290,"line":1367},[288,94296,94297],{"class":357},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[288,94299,94300,94302,94304,94306,94308,94310,94312,94314,94316,94318,94320],{"class":290,"line":1373},[288,94301,93479],{"class":298},[288,94303,344],{"class":294},[288,94305,93175],{"class":298},[288,94307,516],{"class":347},[288,94309,675],{"class":298},[288,94311,820],{"class":347},[288,94313,93180],{"class":298},[288,94315,590],{"class":347},[288,94317,675],{"class":298},[288,94319,370],{"class":347},[288,94321,305],{"class":298},[288,94323,94324],{"class":290,"line":1387},[288,94325,94326],{"class":357},"#这个重复之后二维变成一维\n",[288,94328,94329,94332,94334],{"class":290,"line":1393},[288,94330,94331],{"class":298},"np.repeat(aa,",[288,94333,376],{"class":347},[288,94335,305],{"class":298},[288,94337,94338],{"class":290,"line":1484},[288,94339,94101],{"class":403},[288,94341,94342],{"class":290,"line":1490},[288,94343,94344],{"class":403},"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",[288,94346,94347],{"class":290,"line":1502},[288,94348,94101],{"class":403},[288,94350,94351],{"class":290,"line":1784},[288,94352,94353],{"class":357},"#指定axis\n",[288,94355,94356,94358,94360,94362,94364,94366,94368],{"class":290,"line":1789},[288,94357,94331],{"class":298},[288,94359,376],{"class":347},[288,94361,675],{"class":298},[288,94363,47687],{"class":5389},[288,94365,344],{"class":294},[288,94367,490],{"class":347},[288,94369,305],{"class":298},[288,94371,94372],{"class":290,"line":1795},[288,94373,93737],{"class":357},[288,94375,94376],{"class":290,"line":1800},[288,94377,94101],{"class":403},[288,94379,94380],{"class":290,"line":1814},[288,94381,94382],{"class":403},"array([[ 1,  2,  3],\n",[288,94384,94385],{"class":290,"line":1819},[288,94386,94387],{"class":403},"       [ 1,  2,  3],\n",[288,94389,94390],{"class":290,"line":1825},[288,94391,94392],{"class":403},"       [ 4,  5,  6],\n",[288,94394,94395],{"class":290,"line":1846},[288,94396,94392],{"class":403},[288,94398,94399],{"class":290,"line":1851},[288,94400,94401],{"class":403},"       [ 7,  8,  9],\n",[288,94403,94404],{"class":290,"line":1865},[288,94405,94401],{"class":403},[288,94407,94408],{"class":290,"line":1870},[288,94409,94410],{"class":403},"       [10, 11, 12],\n",[288,94412,94413],{"class":290,"line":1899},[288,94414,94415],{"class":403},"       [10, 11, 12]])\n",[288,94417,94418],{"class":290,"line":1904},[288,94419,94101],{"class":403},[288,94421,94422,94424,94426,94428,94430,94432,94434],{"class":290,"line":1921},[288,94423,94331],{"class":298},[288,94425,376],{"class":347},[288,94427,675],{"class":298},[288,94429,47687],{"class":5389},[288,94431,344],{"class":294},[288,94433,516],{"class":347},[288,94435,305],{"class":298},[288,94437,94438],{"class":290,"line":1926},[288,94439,93737],{"class":357},[288,94441,94442],{"class":290,"line":1931},[288,94443,94101],{"class":403},[288,94445,94446],{"class":290,"line":1936},[288,94447,94448],{"class":403},"array([[ 1,  1,  2,  2,  3,  3],\n",[288,94450,94451],{"class":290,"line":1950},[288,94452,94453],{"class":403},"       [ 4,  4,  5,  5,  6,  6],\n",[288,94455,94456],{"class":290,"line":1955},[288,94457,94458],{"class":403},"       [ 7,  7,  8,  8,  9,  9],\n",[288,94460,94461],{"class":290,"line":2749},[288,94462,94463],{"class":403},"       [10, 10, 11, 11, 12, 12]])\n",[288,94465,94466],{"class":290,"line":2763},[288,94467,94101],{"class":403},[14,94469,94471],{"id":94470},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[280,94473,94475],{"className":30551,"code":94474,"language":30553,"meta":205,"style":205},"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",[25,94476,94477,94493,94498,94510,94514,94519,94529,94533],{"__ignoreMap":205},[288,94478,94479,94481,94483,94485,94487,94489,94491],{"class":290,"line":291},[288,94480,104],{"class":298},[288,94482,344],{"class":294},[288,94484,93175],{"class":298},[288,94486,516],{"class":347},[288,94488,675],{"class":298},[288,94490,616],{"class":347},[288,94492,305],{"class":298},[288,94494,94495],{"class":290,"line":206},[288,94496,94497],{"class":357},"#array([，2，3，4])\n",[288,94499,94500,94503,94505,94507],{"class":290,"line":1352},[288,94501,94502],{"class":298},"np.roll(a,",[288,94504,376],{"class":347},[288,94506,726],{"class":298},[288,94508,94509],{"class":357},"#传正数向后调多少位，传负数向前调多少位\n",[288,94511,94512],{"class":290,"line":1367},[288,94513,93737],{"class":357},[288,94515,94516],{"class":290,"line":1373},[288,94517,94518],{"class":357},"#array([3, 4, 1, 2])\n",[288,94520,94521,94523,94525,94527],{"class":290,"line":1387},[288,94522,94502],{"class":298},[288,94524,829],{"class":294},[288,94526,516],{"class":347},[288,94528,305],{"class":298},[288,94530,94531],{"class":290,"line":1393},[288,94532,93737],{"class":357},[288,94534,94535],{"class":290,"line":1484},[288,94536,94537],{"class":357},"#array([2, 3, 4, 1])\n",[19,94539,94540],{},[200,94541],{"alt":205,"src":94542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94544,94546],{"id":94545},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94548,94549],{},"resize()重新调整数组的大小",[19,94551,94552],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[280,94554,94556],{"className":30551,"code":94555,"language":30553,"meta":205,"style":205},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[25,94557,94558,94563,94576],{"__ignoreMap":205},[288,94559,94560],{"class":290,"line":291},[288,94561,94562],{"class":357},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[288,94564,94565,94568,94570,94572,94574],{"class":290,"line":206},[288,94566,94567],{"class":298},"np.resize(aa,(",[288,94569,376],{"class":347},[288,94571,675],{"class":298},[288,94573,641],{"class":347},[288,94575,30670],{"class":298},[288,94577,94578,94580,94582,94584,94586,94588],{"class":290,"line":1352},[288,94579,94567],{"class":298},[288,94581,376],{"class":347},[288,94583,675],{"class":298},[288,94585,717],{"class":347},[288,94587,82944],{"class":298},[288,94589,94590],{"class":357},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94592,94594],{"id":94593},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94596,94597],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94599,94600],{},[200,94601],{"alt":205,"src":94602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94604,94606],{"id":94605},"_126-保存加载文件","12.6 保存加载文件",[19,94608,94609],{},"savetxt():将数据保存到txt文件中",[19,94611,94612],{},"loadtxt():从文件加载数据",[19,94614,94615],{},[200,94616],{"alt":205,"src":94617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94619,94621],{"id":94620},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94623,94624],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94626,94628],{"id":94627},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94630,94631],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94633,94634],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94636,94637],{},[200,94638],{"alt":205,"src":94639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94641,94643],{"id":94642},"_129-where语句","12.9 where语句",[19,94645,94646],{},"np.where(条件,x,y)",[19,94648,94649],{},"如果条件为True,对应值为x,否则对应值为y",[19,94651,94652],{},[200,94653],{"alt":205,"src":94654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94656,94658],{"id":94657},"_1210-dot矩阵","12.10 dot()矩阵",[19,94660,94661],{},[200,94662],{"alt":205,"src":94663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5299,94665,94666],{},"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":205,"searchDepth":206,"depth":206,"links":94668},[94669,94670,94671,94672,94673,94674,94675,94676,94677,94678],{"id":94031,"depth":206,"text":94032},{"id":94254,"depth":206,"text":94255},{"id":94470,"depth":206,"text":94471},{"id":94545,"depth":206,"text":94546},{"id":94593,"depth":206,"text":94594},{"id":94605,"depth":206,"text":94606},{"id":94620,"depth":206,"text":94621},{"id":94627,"depth":206,"text":94628},{"id":94642,"depth":206,"text":94643},{"id":94657,"depth":206,"text":94658},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94023,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94685,"title":94686,"body":94687,"description":214,"extension":215,"meta":95040,"navigation":217,"path":95041,"seo":95042,"stem":95043,"__hash__":95044},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94688,"toc":95038},[94689,94692,94695,94698,94701,94704,94769,94771,95035],[10,94690,94686],{"id":94691},"_13数组排序",[19,94693,94694],{},"排序主要用到的方法是np.sort和np.argsort",[19,94696,94697],{},"其中np.sort()对数组直接排序",[19,94699,94700],{},"而np.argsort()是返回排序后的原始索引",[19,94702,94703],{},"①一维数组",[280,94705,94707],{"className":30551,"code":94706,"language":30553,"meta":205,"style":205},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[25,94708,94709,94713,94753,94761],{"__ignoreMap":205},[288,94710,94711],{"class":290,"line":291},[288,94712,93278],{"class":357},[288,94714,94715,94717,94719,94721,94723,94725,94727,94729,94731,94733,94735,94737,94739,94741,94743,94745,94747,94749,94751],{"class":290,"line":206},[288,94716,104],{"class":298},[288,94718,344],{"class":294},[288,94720,93197],{"class":298},[288,94722,370],{"class":347},[288,94724,675],{"class":298},[288,94726,795],{"class":347},[288,94728,675],{"class":298},[288,94730,692],{"class":347},[288,94732,675],{"class":298},[288,94734,1072],{"class":347},[288,94736,675],{"class":298},[288,94738,576],{"class":347},[288,94740,675],{"class":298},[288,94742,1190],{"class":347},[288,94744,675],{"class":298},[288,94746,641],{"class":347},[288,94748,675],{"class":298},[288,94750,743],{"class":347},[288,94752,4829],{"class":298},[288,94754,94755,94758],{"class":290,"line":1352},[288,94756,94757],{"class":298},"np.sort(a)",[288,94759,94760],{"class":357},"#升序排序\n",[288,94762,94763,94766],{"class":290,"line":1367},[288,94764,94765],{"class":298},"np.argsort(a)",[288,94767,94768],{"class":357},"#按照元素大小来索引排序\n",[19,94770,93464],{},[280,94772,94774],{"className":30551,"code":94773,"language":30553,"meta":205,"style":205},"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",[25,94775,94776,94788,94814,94819,94823,94828,94833,94838,94843,94847,94855,94859,94864,94869,94874,94879,94883,94888,94901,94905,94910,94915,94920,94925,94929,94934,94946,94950,94954,94958,94962,94966,94970,94975,94990,94995,95004,95009,95013,95017,95022,95026,95031],{"__ignoreMap":205},[288,94777,94778,94781,94783,94785],{"class":290,"line":291},[288,94779,94780],{"class":298},"np.random.seed(",[288,94782,490],{"class":347},[288,94784,726],{"class":298},[288,94786,94787],{"class":357},"#保证每次值一样\n",[288,94789,94790,94792,94794,94796,94798,94800,94802,94804,94806,94808,94810,94812],{"class":290,"line":206},[288,94791,93479],{"class":298},[288,94793,344],{"class":294},[288,94795,93287],{"class":298},[288,94797,608],{"class":347},[288,94799,675],{"class":298},[288,94801,31669],{"class":5389},[288,94803,344],{"class":294},[288,94805,299],{"class":298},[288,94807,590],{"class":347},[288,94809,675],{"class":298},[288,94811,641],{"class":347},[288,94813,30670],{"class":298},[288,94815,94816],{"class":290,"line":1352},[288,94817,94818],{"class":357},"#原数组：\n",[288,94820,94821],{"class":290,"line":1367},[288,94822,94101],{"class":403},[288,94824,94825],{"class":290,"line":1373},[288,94826,94827],{"class":403},"array([[44, 47, 64, 67, 67,  9],\n",[288,94829,94830],{"class":290,"line":1387},[288,94831,94832],{"class":403},"       [83, 21, 36, 87, 70, 88],\n",[288,94834,94835],{"class":290,"line":1393},[288,94836,94837],{"class":403},"       [88, 12, 58, 65, 39, 87],\n",[288,94839,94840],{"class":290,"line":1484},[288,94841,94842],{"class":403},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[288,94844,94845],{"class":290,"line":1490},[288,94846,94101],{"class":403},[288,94848,94849,94852],{"class":290,"line":1502},[288,94850,94851],{"class":298},"np.sort(aa)",[288,94853,94854],{"class":357},"#每行进行了排序\n",[288,94856,94857],{"class":290,"line":1784},[288,94858,94101],{"class":403},[288,94860,94861],{"class":290,"line":1789},[288,94862,94863],{"class":403},"array([[ 9, 44, 47, 64, 67, 67],\n",[288,94865,94866],{"class":290,"line":1795},[288,94867,94868],{"class":403},"       [21, 36, 70, 83, 87, 88],\n",[288,94870,94871],{"class":290,"line":1800},[288,94872,94873],{"class":403},"       [12, 39, 58, 65, 87, 88],\n",[288,94875,94876],{"class":290,"line":1814},[288,94877,94878],{"class":403},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[288,94880,94881],{"class":290,"line":1819},[288,94882,94101],{"class":403},[288,94884,94885],{"class":290,"line":1825},[288,94886,94887],{"class":357},"#axis=0时\n",[288,94889,94890,94893,94895,94897,94899],{"class":290,"line":1846},[288,94891,94892],{"class":298},"np.sort(aa,",[288,94894,47687],{"class":5389},[288,94896,344],{"class":294},[288,94898,490],{"class":347},[288,94900,305],{"class":298},[288,94902,94903],{"class":290,"line":1851},[288,94904,94101],{"class":403},[288,94906,94907],{"class":290,"line":1865},[288,94908,94909],{"class":403},"array([[44, 12, 36, 37, 25,  9],\n",[288,94911,94912],{"class":290,"line":1870},[288,94913,94914],{"class":403},"       [46, 21, 58, 65, 39, 77],\n",[288,94916,94917],{"class":290,"line":1899},[288,94918,94919],{"class":403},"       [83, 47, 64, 67, 67, 87],\n",[288,94921,94922],{"class":290,"line":1904},[288,94923,94924],{"class":403},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[288,94926,94927],{"class":290,"line":1921},[288,94928,94101],{"class":403},[288,94930,94931],{"class":290,"line":1926},[288,94932,94933],{"class":357},"#axis=1时,为默认值\n",[288,94935,94936,94938,94940,94942,94944],{"class":290,"line":1931},[288,94937,94892],{"class":298},[288,94939,47687],{"class":5389},[288,94941,344],{"class":294},[288,94943,516],{"class":347},[288,94945,305],{"class":298},[288,94947,94948],{"class":290,"line":1936},[288,94949,94101],{"class":403},[288,94951,94952],{"class":290,"line":1950},[288,94953,94863],{"class":403},[288,94955,94956],{"class":290,"line":1955},[288,94957,94868],{"class":403},[288,94959,94960],{"class":290,"line":2749},[288,94961,94873],{"class":403},[288,94963,94964],{"class":290,"line":2763},[288,94965,94878],{"class":403},[288,94967,94968],{"class":290,"line":2771},[288,94969,94101],{"class":403},[288,94971,94972],{"class":290,"line":2776},[288,94973,94974],{"class":357},"#按最后一列排序\n",[288,94976,94977,94979,94981,94984,94986,94988],{"class":290,"line":2782},[288,94978,560],{"class":298},[288,94980,344],{"class":294},[288,94982,94983],{"class":298},"aa[:,",[288,94985,829],{"class":294},[288,94987,516],{"class":347},[288,94989,33419],{"class":298},[288,94991,94992],{"class":290,"line":2788},[288,94993,94994],{"class":357},"#获取最后一列排好序的索引\n",[288,94996,94997,94999,95001],{"class":290,"line":2793},[288,94998,74231],{"class":298},[288,95000,344],{"class":294},[288,95002,95003],{"class":298},"np.argsort(b)\n",[288,95005,95006],{"class":290,"line":8121},[288,95007,95008],{"class":298},"aa[index]\n",[288,95010,95011],{"class":290,"line":8145},[288,95012,94101],{"class":403},[288,95014,95015],{"class":290,"line":8150},[288,95016,94827],{"class":403},[288,95018,95019],{"class":290,"line":8156},[288,95020,95021],{"class":403},"       [46, 88, 81, 37, 25, 77],\n",[288,95023,95024],{"class":290,"line":8183},[288,95025,94837],{"class":403},[288,95027,95028],{"class":290,"line":8188},[288,95029,95030],{"class":403},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[288,95032,95033],{"class":290,"line":8194},[288,95034,94101],{"class":403},[5299,95036,95037],{},"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":205,"searchDepth":206,"depth":206,"links":95039},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94686,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95046,"title":95047,"body":95048,"description":214,"extension":215,"meta":95078,"navigation":217,"path":95079,"seo":95080,"stem":95081,"__hash__":95082},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95049,"toc":95076},[95050,95053,95056,95059,95062,95065,95068,95071],[10,95051,95047],{"id":95052},"_14广播机制",[19,95054,95055],{},"广播的规则：",[19,95057,95058],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95060,95061],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95063,95064],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95066,95067],{},"3.如果没有维度形状为1，则会引发异常",[19,95069,95070],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95072,95073],{},[200,95074],{"alt":205,"src":95075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":205,"searchDepth":206,"depth":206,"links":95077},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95047,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95084,"title":95085,"body":95086,"description":214,"extension":215,"meta":95184,"navigation":217,"path":95185,"seo":95186,"stem":95187,"__hash__":95188},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95087,"toc":95182},[95088,95091,95094,95179],[10,95089,95085],{"id":95090},"_15比较掩码",[19,95092,95093],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[280,95095,95097],{"className":30551,"code":95096,"language":30553,"meta":205,"style":205},"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",[25,95098,95099,95145,95156,95170,95174],{"__ignoreMap":205},[288,95100,95101,95103,95105,95108,95110,95112,95114,95116,95118,95120,95122,95124,95126,95128,95130,95132,95134,95136,95138,95140,95142],{"class":290,"line":291},[288,95102,104],{"class":298},[288,95104,344],{"class":294},[288,95106,95107],{"class":298},"np.array([[",[288,95109,516],{"class":347},[288,95111,675],{"class":298},[288,95113,376],{"class":347},[288,95115,675],{"class":298},[288,95117,370],{"class":347},[288,95119,48203],{"class":298},[288,95121,769],{"class":347},[288,95123,675],{"class":298},[288,95125,795],{"class":347},[288,95127,675],{"class":298},[288,95129,820],{"class":347},[288,95131,48203],{"class":298},[288,95133,1022],{"class":347},[288,95135,675],{"class":298},[288,95137,1047],{"class":347},[288,95139,675],{"class":298},[288,95141,1072],{"class":347},[288,95143,95144],{"class":298},"]])\n",[288,95146,95147,95149,95151,95153],{"class":290,"line":206},[288,95148,104],{"class":298},[288,95150,1207],{"class":294},[288,95152,997],{"class":347},[288,95154,95155],{"class":357},"#结果是一个由True,False组成的数组\n",[288,95157,95158,95161,95163,95165,95167],{"class":290,"line":1352},[288,95159,95160],{"class":298},"a[a",[288,95162,1207],{"class":294},[288,95164,997],{"class":347},[288,95166,1237],{"class":298},[288,95168,95169],{"class":357},"#小于20的元素会存到这个数组中\n",[288,95171,95172],{"class":290,"line":1367},[288,95173,93737],{"class":357},[288,95175,95176],{"class":290,"line":1373},[288,95177,95178],{"class":357},"#array([ 1,  2,  3, 11, 12, 13])\n",[5299,95180,95181],{},"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":205,"searchDepth":206,"depth":206,"links":95183},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95085,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95190,"title":95191,"body":95192,"description":214,"extension":215,"meta":95284,"navigation":217,"path":95285,"seo":95286,"stem":95287,"__hash__":95288},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95193,"toc":95282},[95194,95197,95200,95203,95206,95209,95274,95279],[10,95195,95191],{"id":95196},"_16魔法命令time",[19,95198,95199],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95201,95202],{},"%:行模式",[19,95204,95205],{},"%%:单元格模式",[19,95207,95208],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[280,95210,95212],{"className":30551,"code":95211,"language":30553,"meta":205,"style":205},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[25,95213,95214,95219,95226,95231,95240,95253,95257,95265],{"__ignoreMap":205},[288,95215,95216],{"class":290,"line":291},[288,95217,95218],{"class":357},"#程序执行时间\n",[288,95220,95221,95223],{"class":290,"line":206},[288,95222,30565],{"class":294},[288,95224,95225],{"class":298}," time \n",[288,95227,95228],{"class":290,"line":1352},[288,95229,95230],{"class":357},"#获取时间\n",[288,95232,95233,95236,95238],{"class":290,"line":1367},[288,95234,95235],{"class":298},"start",[288,95237,344],{"class":294},[288,95239,32591],{"class":298},[288,95241,95242,95245,95248,95250],{"class":290,"line":1373},[288,95243,95244],{"class":298},"time.sleep(",[288,95246,95247],{"class":347},"0.4",[288,95249,726],{"class":298},[288,95251,95252],{"class":357},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[288,95254,95255],{"class":290,"line":1387},[288,95256,95230],{"class":357},[288,95258,95259,95261,95263],{"class":290,"line":1393},[288,95260,45974],{"class":298},[288,95262,344],{"class":294},[288,95264,32591],{"class":298},[288,95266,95267,95269,95271],{"class":290,"line":1484},[288,95268,45974],{"class":298},[288,95270,829],{"class":294},[288,95272,95273],{"class":298},"start\n",[19,95275,95276],{},[200,95277],{"alt":205,"src":95278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5299,95280,95281],{},"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":205,"searchDepth":206,"depth":206,"links":95283},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95191,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95290,"title":95291,"body":95292,"description":214,"extension":215,"meta":95327,"navigation":217,"path":95328,"seo":95329,"stem":95330,"__hash__":95331},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95293,"toc":95325},[95294,95297,95300,95303,95306,95309,95312,95315,95320],[10,95295,95291],{"id":95296},"_17魔法命令timeit",[19,95298,95299],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95301,95302],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95304,95305],{},"单元格模式：",[19,95307,95308],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95310,95311],{},"初始化语句执行次数由轮数来决定",[19,95313,95314],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95316,95317],{},[200,95318],{"alt":205,"src":95319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95321,95322],{},[200,95323],{"alt":205,"src":95324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":205,"searchDepth":206,"depth":206,"links":95326},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95291,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95333,"title":95334,"body":95335,"description":214,"extension":215,"meta":95353,"navigation":217,"path":95354,"seo":95355,"stem":95356,"__hash__":95357},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95336,"toc":95351},[95337,95340,95343,95346],[10,95338,95334],{"id":95339},"_18魔法命令writefile和run",[19,95341,95342],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95344,95345],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95347,95348],{},[200,95349],{"alt":205,"src":95350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":205,"searchDepth":206,"depth":206,"links":95352},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95334,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95359,"title":95360,"body":95361,"description":214,"extension":215,"meta":95414,"navigation":217,"path":95415,"seo":95416,"stem":95417,"__hash__":95418},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95362,"toc":95412},[95363,95366,95369,95371,95374,95377,95382,95385,95388,95391,95394,95397,95400,95403,95406,95409],[10,95364,95360],{"id":95365},"_19魔法命令memit",[19,95367,95368],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95370,24772],{},[19,95372,95373],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95375,95376],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95378,95379],{},[200,95380],{"alt":205,"src":95381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95383,95384],{},"补充：",[19,95386,95387],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95389,95390],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95392,95393],{},"解决方法：",[19,95395,95396],{},"1.cmd",[19,95398,95399],{},"2.依次输入以下代码：",[19,95401,95402],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95404,95405],{},"pip install --upgrade ipython",[19,95407,95408],{},"#升级 memory_profiler 和 setuptools",[19,95410,95411],{},"pip install --upgrade memory_profiler setuptools",{"title":205,"searchDepth":206,"depth":206,"links":95413},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95360,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95420,"title":95421,"body":95422,"description":214,"extension":215,"meta":97068,"navigation":217,"path":97069,"seo":97070,"stem":97071,"__hash__":97072},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95423,"toc":97038},[95424,95427,95431,95435,95496,95499,95504,95508,95513,95518,95523,95528,95531,95536,95540,95544,95577,95580,95583,95586,95638,95641,95677,95680,95722,95726,95747,95749,95786,95788,95793,95795,95800,95804,95807,95835,95839,95843,95896,95900,95992,95996,96000,96003,96008,96012,96037,96042,96046,96049,96052,96055,96058,96061,96064,96067,96079,96083,96087,96090,96122,96125,96148,96151,96177,96180,96206,96209,96243,96246,96308,96312,96315,96319,96322,96348,96351,96354,96359,96362,96431,96433,96438,96499,96502,96513,96519,96524,96528,96531,96544,96548,96563,96565,96588,96590,96616,96619,96622,96625,96673,96675,96680,96684,96688,96715,96719,96746,96749,96754,96759,96849,96853,96911,96916,96919,96922,96964,96968,97024,97029,97032,97035],[10,95425,95421],{"id":95426},"_2创建数组",[14,95428,95430],{"id":95429},"_21-array函数创建数组","2.1 array()函数创建数组",[260,95432,95434],{"id":95433},"_221-函数语句","2.2.1 函数语句",[280,95436,95438],{"className":30551,"code":95437,"language":30553,"meta":205,"style":205},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[25,95439,95440],{"__ignoreMap":205},[288,95441,95442,95445,95448,95450,95452,95454,95456,95458,95461,95463,95466,95468,95471,95473,95475,95477,95480,95482,95485,95487,95490,95492,95494],{"class":290,"line":291},[288,95443,95444],{"class":298},"numpy.array(",[288,95446,95447],{"class":347},"object",[288,95449,12608],{"class":298},[288,95451,93673],{"class":5389},[288,95453,13737],{"class":294},[288,95455,39106],{"class":347},[288,95457,12608],{"class":298},[288,95459,95460],{"class":5389},"copy",[288,95462,13737],{"class":294},[288,95464,95465],{"class":347}," True",[288,95467,12608],{"class":298},[288,95469,95470],{"class":5389},"order",[288,95472,13737],{"class":294},[288,95474,39106],{"class":347},[288,95476,12608],{"class":298},[288,95478,95479],{"class":5389},"subok",[288,95481,13737],{"class":294},[288,95483,95484],{"class":347}," False",[288,95486,12608],{"class":298},[288,95488,95489],{"class":5389},"ndmin",[288,95491,13737],{"class":294},[288,95493,4265],{"class":347},[288,95495,305],{"class":298},[19,95497,95498],{},"参数：",[19,95500,95501],{},[200,95502],{"alt":205,"src":95503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[260,95505,95507],{"id":95506},"_222-实例","2.2.2 实例",[19,95509,95510],{},[200,95511],{"alt":205,"src":95512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95514,95515],{},[200,95516],{"alt":205,"src":95517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95519,95520],{},[200,95521],{"alt":205,"src":95522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95524,95525],{},[200,95526],{"alt":205,"src":95527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95529,95530],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95532,95533],{},[200,95534],{"alt":205,"src":95535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95537,95539],{"id":95538},"_22-随机数创建数组","2.2 随机数创建数组",[260,95541,95543],{"id":95542},"_221-random语句","2.2.1 random语句",[280,95545,95547],{"className":30551,"code":95546,"language":30553,"meta":205,"style":205},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[25,95548,95549,95554,95559,95567,95572],{"__ignoreMap":205},[288,95550,95551],{"class":290,"line":291},[288,95552,95553],{"class":357},"#random.random()\n",[288,95555,95556],{"class":290,"line":206},[288,95557,95558],{"class":357},"#确定随机种子,就是每次运行结果是相同的\n",[288,95560,95561,95563,95565],{"class":290,"line":1352},[288,95562,94780],{"class":298},[288,95564,490],{"class":347},[288,95566,305],{"class":298},[288,95568,95569],{"class":290,"line":1367},[288,95570,95571],{"class":298},"np.random.random()\n",[288,95573,95574],{"class":290,"line":1373},[288,95575,95576],{"class":357},"#生成一个随机的数目\n",[19,95578,95579],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95581,95582],{},"可以指定数组形状 size",[19,95584,95585],{},"①生成一维数组",[280,95587,95589],{"className":30551,"code":95588,"language":30553,"meta":205,"style":205},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[25,95590,95591,95596,95609,95614,95630],{"__ignoreMap":205},[288,95592,95593],{"class":290,"line":291},[288,95594,95595],{"class":357},"#random.random(size())\n",[288,95597,95598,95601,95603,95605,95607],{"class":290,"line":206},[288,95599,95600],{"class":298},"np.random.random(",[288,95602,31669],{"class":5389},[288,95604,344],{"class":294},[288,95606,616],{"class":347},[288,95608,305],{"class":298},[288,95610,95611],{"class":290,"line":1352},[288,95612,95613],{"class":357},"#生成一位的五个元素\n",[288,95615,95616,95618,95620,95622,95624,95626,95628],{"class":290,"line":1367},[288,95617,104],{"class":298},[288,95619,344],{"class":294},[288,95621,95600],{"class":298},[288,95623,31669],{"class":5389},[288,95625,344],{"class":294},[288,95627,590],{"class":347},[288,95629,305],{"class":298},[288,95631,95632,95635],{"class":290,"line":1373},[288,95633,95634],{"class":298},"a.shape ",[288,95636,95637],{"class":357},"#输出数组形状\n",[19,95639,95640],{},"②生成二维数组",[280,95642,95644],{"className":30551,"code":95643,"language":30553,"meta":205,"style":205},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[25,95645,95646,95650,95672],{"__ignoreMap":205},[288,95647,95648],{"class":290,"line":291},[288,95649,93474],{"class":357},[288,95651,95652,95654,95656,95658,95660,95662,95664,95666,95668,95670],{"class":290,"line":206},[288,95653,93479],{"class":298},[288,95655,344],{"class":294},[288,95657,95600],{"class":298},[288,95659,31669],{"class":5389},[288,95661,344],{"class":294},[288,95663,299],{"class":298},[288,95665,590],{"class":347},[288,95667,675],{"class":298},[288,95669,616],{"class":347},[288,95671,30670],{"class":298},[288,95673,95674],{"class":290,"line":1352},[288,95675,95676],{"class":357},"#生成四行五列的数组\n",[19,95678,95679],{},"③生成三维数组",[280,95681,95683],{"className":30551,"code":95682,"language":30553,"meta":205,"style":205},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[25,95684,95685,95690,95717],{"__ignoreMap":205},[288,95686,95687],{"class":290,"line":291},[288,95688,95689],{"class":357},"#三维数组\n",[288,95691,95692,95695,95697,95699,95701,95703,95705,95707,95709,95711,95713,95715],{"class":290,"line":206},[288,95693,95694],{"class":298},"aaa",[288,95696,344],{"class":294},[288,95698,95600],{"class":298},[288,95700,31669],{"class":5389},[288,95702,344],{"class":294},[288,95704,299],{"class":298},[288,95706,376],{"class":347},[288,95708,675],{"class":298},[288,95710,370],{"class":347},[288,95712,675],{"class":298},[288,95714,590],{"class":347},[288,95716,30670],{"class":298},[288,95718,95719],{"class":290,"line":1352},[288,95720,95721],{"class":298},"aaa.shape\n",[260,95723,95725],{"id":95724},"_222-randint语句","2.2.2 randint语句",[280,95727,95729],{"className":30551,"code":95728,"language":30553,"meta":205,"style":205},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[25,95730,95731,95736],{"__ignoreMap":205},[288,95732,95733],{"class":290,"line":291},[288,95734,95735],{"class":357},"#生成随机的整数 random.randint(low,high,size)\n",[288,95737,95738,95740,95742,95744],{"class":290,"line":206},[288,95739,93287],{"class":298},[288,95741,616],{"class":347},[288,95743,13887],{"class":298},[288,95745,95746],{"class":357},"#0~5中的随机一个数\n",[19,95748,95585],{},[280,95750,95752],{"className":30551,"code":95751,"language":30553,"meta":205,"style":205},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[25,95753,95754,95759,95781],{"__ignoreMap":205},[288,95755,95756],{"class":290,"line":291},[288,95757,95758],{"class":357},"#一维\n",[288,95760,95761,95763,95765,95767,95769,95771,95773,95775,95777,95779],{"class":290,"line":206},[288,95762,93287],{"class":298},[288,95764,516],{"class":347},[288,95766,675],{"class":298},[288,95768,769],{"class":347},[288,95770,675],{"class":298},[288,95772,31669],{"class":5389},[288,95774,344],{"class":294},[288,95776,299],{"class":298},[288,95778,743],{"class":347},[288,95780,30670],{"class":298},[288,95782,95783],{"class":290,"line":1352},[288,95784,95785],{"class":357},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95787,95640],{},[19,95789,95790],{},[200,95791],{"alt":205,"src":95792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95794,95679],{},[19,95796,95797],{},[200,95798],{"alt":205,"src":95799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[260,95801,95803],{"id":95802},"_222-rand语句","2.2.2 rand语句",[19,95805,95806],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[280,95808,95810],{"className":30551,"code":95809,"language":30553,"meta":205,"style":205},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[25,95811,95812,95825,95830],{"__ignoreMap":205},[288,95813,95814,95817,95819,95821,95823],{"class":290,"line":291},[288,95815,95816],{"class":298},"np.random.rand(",[288,95818,608],{"class":347},[288,95820,675],{"class":298},[288,95822,743],{"class":347},[288,95824,305],{"class":298},[288,95826,95827],{"class":290,"line":206},[288,95828,95829],{"class":357},"#第一个参数100：行数，表示有100个样本\n",[288,95831,95832],{"class":290,"line":1352},[288,95833,95834],{"class":357},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95836,95838],{"id":95837},"_23-arange创建数组","2.3 arange()创建数组",[260,95840,95842],{"id":95841},"_231-函数语句","2.3.1 函数语句",[280,95844,95846],{"className":30551,"code":95845,"language":30553,"meta":205,"style":205},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[25,95847,95848,95862,95867,95872,95877,95882,95887,95892],{"__ignoreMap":205},[288,95849,95850,95853,95855,95857,95860],{"class":290,"line":291},[288,95851,95852],{"class":298},"numpy.arange([start,] stop[, step], ",[288,95854,93673],{"class":5389},[288,95856,344],{"class":294},[288,95858,95859],{"class":347},"None",[288,95861,305],{"class":298},[288,95863,95864],{"class":290,"line":206},[288,95865,95866],{"class":357},"#参数\n",[288,95868,95869],{"class":290,"line":1352},[288,95870,95871],{"class":403},"\"\"\"\n",[288,95873,95874],{"class":290,"line":1367},[288,95875,95876],{"class":403},"start:起始值，可选，默认从 0 开始。\n",[288,95878,95879],{"class":290,"line":1373},[288,95880,95881],{"class":403},"stop:结束值（不包含该值）。\n",[288,95883,95884],{"class":290,"line":1387},[288,95885,95886],{"class":403},"step:步长，可选，默认是 1。可以为浮点数。\n",[288,95888,95889],{"class":290,"line":1393},[288,95890,95891],{"class":403},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[288,95893,95894],{"class":290,"line":1484},[288,95895,95871],{"class":403},[260,95897,95899],{"id":95898},"_232-实例","2.3.2 实例",[280,95901,95903],{"className":30551,"code":95902,"language":30553,"meta":205,"style":205},"#创建一维数组\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",[25,95904,95905,95909,95933,95938,95943,95947,95970,95974,95978,95983,95988],{"__ignoreMap":205},[288,95906,95907],{"class":290,"line":291},[288,95908,93278],{"class":357},[288,95910,95911,95913,95915,95917,95919,95921,95923,95925,95927,95929,95931],{"class":290,"line":206},[288,95912,93175],{"class":298},[288,95914,516],{"class":347},[288,95916,675],{"class":298},[288,95918,1022],{"class":347},[288,95920,675],{"class":298},[288,95922,516],{"class":347},[288,95924,675],{"class":298},[288,95926,93673],{"class":5389},[288,95928,344],{"class":294},[288,95930,302],{"class":347},[288,95932,305],{"class":298},[288,95934,95935],{"class":290,"line":1352},[288,95936,95937],{"class":357},"#输出结果：\n",[288,95939,95940],{"class":290,"line":1367},[288,95941,95942],{"class":357},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[288,95944,95945],{"class":290,"line":1373},[288,95946,94120],{"class":357},[288,95948,95949,95952,95954,95956,95958,95961,95963,95965,95967],{"class":290,"line":1387},[288,95950,95951],{"class":298},"np.array([np.arange(",[288,95953,516],{"class":347},[288,95955,675],{"class":298},[288,95957,590],{"class":347},[288,95959,95960],{"class":298},"),np.arange(",[288,95962,590],{"class":347},[288,95964,675],{"class":298},[288,95966,666],{"class":347},[288,95968,95969],{"class":298},")])\n",[288,95971,95972],{"class":290,"line":1393},[288,95973,93737],{"class":357},[288,95975,95976],{"class":290,"line":1484},[288,95977,95871],{"class":403},[288,95979,95980],{"class":290,"line":1490},[288,95981,95982],{"class":403},"array([[1, 2, 3],\n",[288,95984,95985],{"class":290,"line":1502},[288,95986,95987],{"class":403},"       [4, 5, 6]])\n",[288,95989,95990],{"class":290,"line":1784},[288,95991,95871],{"class":403},[14,95993,95995],{"id":95994},"_24-生态分布","2.4 生态分布",[260,95997,95999],{"id":95998},"_241-标准正态分布","2.4.1 标准正态分布",[19,96001,96002],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96004,96005],{},[200,96006],{"alt":205,"src":96007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[260,96009,96011],{"id":96010},"_242-常规正态分布","2.4.2 常规正态分布",[280,96013,96015],{"className":30551,"code":96014,"language":30553,"meta":205,"style":205},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[25,96016,96017,96022,96027,96032],{"__ignoreMap":205},[288,96018,96019],{"class":290,"line":291},[288,96020,96021],{"class":298},"random.normal(loc,scale,size)也可以生成正态分布\n",[288,96023,96024],{"class":290,"line":206},[288,96025,96026],{"class":357},"#loc:期望\n",[288,96028,96029],{"class":290,"line":1352},[288,96030,96031],{"class":357},"#scale:方差\n",[288,96033,96034],{"class":290,"line":1367},[288,96035,96036],{"class":357},"#size:用于确定是几维的数列\n",[19,96038,96039],{},[200,96040],{"alt":205,"src":96041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96043,96045],{"id":96044},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96047,96048],{},"ndim:秩，维度个数",[19,96050,96051],{},"size:数组元素的个数",[19,96053,96054],{},"shape:数组的形状",[19,96056,96057],{},"dtype:数组元素的类型",[19,96059,96060],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96062,96063],{},"他们都是属性，通过数组.属性的形式来确定",[19,96065,96066],{},"如果需要输出多个可以通过以下方式：",[280,96068,96070],{"className":30551,"code":96069,"language":30553,"meta":205,"style":205},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[25,96071,96072],{"__ignoreMap":205},[288,96073,96074,96076],{"class":290,"line":291},[288,96075,30588],{"class":347},[288,96077,96078],{"class":298},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96080,96082],{"id":96081},"_26-其他方式创建数组","2.6 其他方式创建数组",[260,96084,96086],{"id":96085},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96088,96089],{},"①创建一维数组",[280,96091,96093],{"className":30551,"code":96092,"language":30553,"meta":205,"style":205},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[25,96094,96095,96104,96108,96113,96118],{"__ignoreMap":205},[288,96096,96097,96100,96102],{"class":290,"line":291},[288,96098,96099],{"class":298},"np.zeros(",[288,96101,743],{"class":347},[288,96103,305],{"class":298},[288,96105,96106],{"class":290,"line":206},[288,96107,95871],{"class":403},[288,96109,96110],{"class":290,"line":1352},[288,96111,96112],{"class":403},"输出结果：\n",[288,96114,96115],{"class":290,"line":1367},[288,96116,96117],{"class":403},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[288,96119,96120],{"class":290,"line":1373},[288,96121,95871],{"class":403},[19,96123,96124],{},"上方代码等价于：",[280,96126,96128],{"className":30551,"code":96127,"language":30553,"meta":205,"style":205},"np.zeros(shape=(10))#创建10个元素的0数组\n",[25,96129,96130],{"__ignoreMap":205},[288,96131,96132,96134,96137,96139,96141,96143,96145],{"class":290,"line":291},[288,96133,96099],{"class":298},[288,96135,96136],{"class":5389},"shape",[288,96138,344],{"class":294},[288,96140,299],{"class":298},[288,96142,743],{"class":347},[288,96144,82944],{"class":298},[288,96146,96147],{"class":357},"#创建10个元素的0数组\n",[19,96149,96150],{},"也可以指定类型",[280,96152,96154],{"className":30551,"code":96153,"language":30553,"meta":205,"style":205},"#指定类型\nnp.zeros(5,dtype=int)\n",[25,96155,96156,96161],{"__ignoreMap":205},[288,96157,96158],{"class":290,"line":291},[288,96159,96160],{"class":357},"#指定类型\n",[288,96162,96163,96165,96167,96169,96171,96173,96175],{"class":290,"line":206},[288,96164,96099],{"class":298},[288,96166,616],{"class":347},[288,96168,675],{"class":298},[288,96170,93673],{"class":5389},[288,96172,344],{"class":294},[288,96174,302],{"class":347},[288,96176,305],{"class":298},[19,96178,96179],{},"②创建二维数组",[280,96181,96183],{"className":30551,"code":96182,"language":30553,"meta":205,"style":205},"np.zeros((3,4),dtype=int)\n",[25,96184,96185],{"__ignoreMap":205},[288,96186,96187,96190,96192,96194,96196,96198,96200,96202,96204],{"class":290,"line":291},[288,96188,96189],{"class":298},"np.zeros((",[288,96191,370],{"class":347},[288,96193,675],{"class":298},[288,96195,590],{"class":347},[288,96197,42429],{"class":298},[288,96199,93673],{"class":5389},[288,96201,344],{"class":294},[288,96203,302],{"class":347},[288,96205,305],{"class":298},[19,96207,96208],{},"③创建三维数组",[280,96210,96212],{"className":30551,"code":96211,"language":30553,"meta":205,"style":205},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[25,96213,96214,96219],{"__ignoreMap":205},[288,96215,96216],{"class":290,"line":291},[288,96217,96218],{"class":357},"#创建三维数组\n",[288,96220,96221,96223,96225,96227,96229,96231,96233,96235,96237,96239,96241],{"class":290,"line":206},[288,96222,96189],{"class":298},[288,96224,370],{"class":347},[288,96226,675],{"class":298},[288,96228,590],{"class":347},[288,96230,675],{"class":298},[288,96232,616],{"class":347},[288,96234,42429],{"class":298},[288,96236,93673],{"class":5389},[288,96238,344],{"class":294},[288,96240,302],{"class":347},[288,96242,305],{"class":298},[19,96244,96245],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[280,96247,96249],{"className":30551,"code":96248,"language":30553,"meta":205,"style":205},"#使用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",[25,96250,96251,96256,96271,96276,96281,96303],{"__ignoreMap":205},[288,96252,96253],{"class":290,"line":291},[288,96254,96255],{"class":357},"#使用zeros_like将创建的一维数组变成全0的数组\n",[288,96257,96258,96260,96262,96264,96266,96268],{"class":290,"line":206},[288,96259,104],{"class":298},[288,96261,344],{"class":294},[288,96263,93175],{"class":298},[288,96265,590],{"class":347},[288,96267,726],{"class":298},[288,96269,96270],{"class":357},"#这个得到的结果：一维数组0，1，2，3\n",[288,96272,96273],{"class":290,"line":1352},[288,96274,96275],{"class":298},"np.zeros_like(a)\n",[288,96277,96278],{"class":290,"line":1367},[288,96279,96280],{"class":357},"#使用zeros_like将创建的二维数组变成全0的数组\n",[288,96282,96283,96285,96287,96289,96291,96293,96295,96297,96299,96301],{"class":290,"line":1373},[288,96284,93479],{"class":298},[288,96286,344],{"class":294},[288,96288,95600],{"class":298},[288,96290,31669],{"class":5389},[288,96292,344],{"class":294},[288,96294,299],{"class":298},[288,96296,590],{"class":347},[288,96298,675],{"class":298},[288,96300,616],{"class":347},[288,96302,30670],{"class":298},[288,96304,96305],{"class":290,"line":1387},[288,96306,96307],{"class":298},"np.zeros_like(aa)\n",[260,96309,96311],{"id":96310},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96313,96314],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[260,96316,96318],{"id":96317},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96320,96321],{},"①empty()用法",[280,96323,96325],{"className":30551,"code":96324,"language":30553,"meta":205,"style":205},"numpy.empty(shape,dtype=float,order='c')\n",[25,96326,96327],{"__ignoreMap":205},[288,96328,96329,96332,96334,96336,96338,96340,96342,96344,96346],{"class":290,"line":291},[288,96330,96331],{"class":298},"numpy.empty(shape,",[288,96333,93673],{"class":5389},[288,96335,344],{"class":294},[288,96337,338],{"class":347},[288,96339,675],{"class":298},[288,96341,95470],{"class":5389},[288,96343,344],{"class":294},[288,96345,76201],{"class":403},[288,96347,305],{"class":298},[19,96349,96350],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96352,96353],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96355,96356],{},[200,96357],{"alt":205,"src":96358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96360,96361],{},"②empty()用法",[280,96363,96365],{"className":30551,"code":96364,"language":30553,"meta":205,"style":205},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[25,96366,96367,96388,96400,96421,96426],{"__ignoreMap":205},[288,96368,96369,96371,96373,96376,96378,96380,96382,96384,96386],{"class":290,"line":291},[288,96370,1142],{"class":298},[288,96372,344],{"class":294},[288,96374,96375],{"class":298},"np.empty(",[288,96377,743],{"class":347},[288,96379,675],{"class":298},[288,96381,93673],{"class":5389},[288,96383,344],{"class":294},[288,96385,302],{"class":347},[288,96387,305],{"class":298},[288,96389,96390,96392,96394,96396,96398],{"class":290,"line":206},[288,96391,1117],{"class":298},[288,96393,344],{"class":294},[288,96395,93175],{"class":298},[288,96397,616],{"class":347},[288,96399,305],{"class":298},[288,96401,96402,96405,96407,96410,96412,96414,96417,96419],{"class":290,"line":1352},[288,96403,96404],{"class":298},"np.add(",[288,96406,376],{"class":347},[288,96408,96409],{"class":298},",x,",[288,96411,93227],{"class":5389},[288,96413,344],{"class":294},[288,96415,96416],{"class":298},"y[:",[288,96418,616],{"class":347},[288,96420,4829],{"class":298},[288,96422,96423],{"class":290,"line":1367},[288,96424,96425],{"class":357},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[288,96427,96428],{"class":290,"line":1373},[288,96429,96430],{"class":298},"y\n",[19,96432,11687],{},[19,96434,96435],{},[200,96436],{"alt":205,"src":96437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[280,96439,96441],{"className":30551,"code":96440,"language":30553,"meta":205,"style":205},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[25,96442,96443,96459,96479,96494],{"__ignoreMap":205},[288,96444,96445,96447,96449,96451,96453,96455,96457],{"class":290,"line":291},[288,96446,1117],{"class":298},[288,96448,344],{"class":294},[288,96450,93175],{"class":298},[288,96452,516],{"class":347},[288,96454,675],{"class":298},[288,96456,641],{"class":347},[288,96458,305],{"class":298},[288,96460,96461,96463,96465,96467,96469,96471,96473,96475,96477],{"class":290,"line":206},[288,96462,1142],{"class":298},[288,96464,344],{"class":294},[288,96466,96375],{"class":298},[288,96468,616],{"class":347},[288,96470,675],{"class":298},[288,96472,93673],{"class":5389},[288,96474,344],{"class":294},[288,96476,302],{"class":347},[288,96478,305],{"class":298},[288,96480,96481,96484,96486,96488,96490,96492],{"class":290,"line":1352},[288,96482,96483],{"class":298},"np.add(x,",[288,96485,376],{"class":347},[288,96487,675],{"class":298},[288,96489,93227],{"class":5389},[288,96491,344],{"class":294},[288,96493,93622],{"class":298},[288,96495,96496],{"class":290,"line":1367},[288,96497,96498],{"class":357},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96500,96501],{},"③empty_like()",[19,96503,96504],{},[448,96505,96506,96507,96512],{},"创建一个",[448,96508,96509],{},[448,96510,96511],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96514,96515,96518],{},[25,96516,96517],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96520,96521],{},[200,96522],{"alt":205,"src":96523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[260,96525,96527],{"id":96526},"_264-用法","2.6.4 ？？用法",[19,96529,96530],{},"当想查看一个函数的参数时，可以通过？？来实现",[280,96532,96534],{"className":30551,"code":96533,"language":30553,"meta":205,"style":205},"np.full??\n",[25,96535,96536],{"__ignoreMap":205},[288,96537,96538,96541],{"class":290,"line":291},[288,96539,96540],{"class":298},"np.full",[288,96542,96543],{"class":77576},"??\n",[260,96545,96547],{"id":96546},"_265-full创建数组","2.6.5 full()创建数组",[280,96549,96551],{"className":30551,"code":96550,"language":30553,"meta":205,"style":205},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[25,96552,96553,96558],{"__ignoreMap":205},[288,96554,96555],{"class":290,"line":291},[288,96556,96557],{"class":298},"full(shape,fill_value)\n",[288,96559,96560],{"class":290,"line":206},[288,96561,96562],{"class":298},"创建全为某个指定值的数组\n",[19,96564,94703],{},[280,96566,96568],{"className":30551,"code":96567,"language":30553,"meta":205,"style":205},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[25,96569,96570,96575],{"__ignoreMap":205},[288,96571,96572],{"class":290,"line":291},[288,96573,96574],{"class":357},"#创建一个一维数组,以20进行填充\n",[288,96576,96577,96580,96582,96584,96586],{"class":290,"line":206},[288,96578,96579],{"class":298},"np.full(",[288,96581,743],{"class":347},[288,96583,675],{"class":298},[288,96585,997],{"class":347},[288,96587,305],{"class":298},[19,96589,93464],{},[280,96591,96593],{"className":30551,"code":96592,"language":30553,"meta":205,"style":205},"#创建二维数组\nnp.full((3,5),11)\n",[25,96594,96595,96599],{"__ignoreMap":205},[288,96596,96597],{"class":290,"line":291},[288,96598,94120],{"class":357},[288,96600,96601,96604,96606,96608,96610,96612,96614],{"class":290,"line":206},[288,96602,96603],{"class":298},"np.full((",[288,96605,370],{"class":347},[288,96607,675],{"class":298},[288,96609,616],{"class":347},[288,96611,42429],{"class":298},[288,96613,769],{"class":347},[288,96615,305],{"class":298},[19,96617,96618],{},"③full_like用法",[19,96620,96621],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96623,96624],{},"这里是指定填充而已",[280,96626,96628],{"className":30551,"code":96627,"language":30553,"meta":205,"style":205},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[25,96629,96630,96635,96659,96664],{"__ignoreMap":205},[288,96631,96632],{"class":290,"line":291},[288,96633,96634],{"class":357},"#创建一个指定形状数组\n",[288,96636,96637,96639,96641,96643,96645,96647,96649,96651,96653,96655,96657],{"class":290,"line":206},[288,96638,104],{"class":298},[288,96640,344],{"class":294},[288,96642,93175],{"class":298},[288,96644,516],{"class":347},[288,96646,675],{"class":298},[288,96648,622],{"class":347},[288,96650,93180],{"class":298},[288,96652,590],{"class":347},[288,96654,675],{"class":298},[288,96656,717],{"class":347},[288,96658,305],{"class":298},[288,96660,96661],{"class":290,"line":1352},[288,96662,96663],{"class":357},"#进行指定填充\n",[288,96665,96666,96669,96671],{"class":290,"line":1367},[288,96667,96668],{"class":298},"np.full_like(a,",[288,96670,743],{"class":347},[288,96672,305],{"class":298},[19,96674,11687],{},[19,96676,96677],{},[200,96678],{"alt":205,"src":96679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[260,96681,96683],{"id":96682},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22171,96685,96687],{"id":96686},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[280,96689,96691],{"className":30551,"code":96690,"language":30553,"meta":205,"style":205},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25,96692,96693,96710],{"__ignoreMap":205},[288,96694,96695,96698,96700,96702,96704,96706,96708],{"class":290,"line":291},[288,96696,96697],{"class":298},"np.eye(",[288,96699,590],{"class":347},[288,96701,675],{"class":298},[288,96703,93673],{"class":5389},[288,96705,344],{"class":294},[288,96707,302],{"class":347},[288,96709,305],{"class":298},[288,96711,96712],{"class":290,"line":206},[288,96713,96714],{"class":357},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22171,96716,96718],{"id":96717},"_2662-法2identity","2.6.6.2 法2：identity()",[280,96720,96722],{"className":30551,"code":96721,"language":30553,"meta":205,"style":205},"#identity()\nnp.identity(5,dtype=int)\n",[25,96723,96724,96729],{"__ignoreMap":205},[288,96725,96726],{"class":290,"line":291},[288,96727,96728],{"class":357},"#identity()\n",[288,96730,96731,96734,96736,96738,96740,96742,96744],{"class":290,"line":206},[288,96732,96733],{"class":298},"np.identity(",[288,96735,616],{"class":347},[288,96737,675],{"class":298},[288,96739,93673],{"class":5389},[288,96741,344],{"class":294},[288,96743,302],{"class":347},[288,96745,305],{"class":298},[19,96747,96748],{},"两个函数是有区别的",[19,96750,96751],{},[200,96752],{"alt":205,"src":96753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96755,96756],{},[200,96757],{"alt":205,"src":96758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[280,96760,96762],{"className":30551,"code":96761,"language":30553,"meta":205,"style":205},"# 创建一个 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",[25,96763,96764,96769,96781,96786,96791,96796,96801,96805,96810,96830,96834,96839,96844],{"__ignoreMap":205},[288,96765,96766],{"class":290,"line":291},[288,96767,96768],{"class":357},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[288,96770,96771,96773,96775,96777,96779],{"class":290,"line":206},[288,96772,96697],{"class":298},[288,96774,370],{"class":347},[288,96776,12608],{"class":298},[288,96778,590],{"class":347},[288,96780,305],{"class":298},[288,96782,96783],{"class":290,"line":1352},[288,96784,96785],{"class":357},"# 输出:\n",[288,96787,96788],{"class":290,"line":1367},[288,96789,96790],{"class":357},"# [[1. 0. 0. 0.]\n",[288,96792,96793],{"class":290,"line":1373},[288,96794,96795],{"class":357},"#  [0. 1. 0. 0.]\n",[288,96797,96798],{"class":290,"line":1387},[288,96799,96800],{"class":357},"#  [0. 0. 1. 0.]]\n",[288,96802,96803],{"class":290,"line":1393},[288,96804,2572],{"emptyLinePlaceholder":217},[288,96806,96807],{"class":290,"line":1484},[288,96808,96809],{"class":357},"# 对角线向上偏移1\n",[288,96811,96812,96814,96816,96818,96820,96822,96824,96826,96828],{"class":290,"line":1490},[288,96813,96697],{"class":298},[288,96815,370],{"class":347},[288,96817,12608],{"class":298},[288,96819,590],{"class":347},[288,96821,12608],{"class":298},[288,96823,790],{"class":5389},[288,96825,344],{"class":294},[288,96827,516],{"class":347},[288,96829,305],{"class":298},[288,96831,96832],{"class":290,"line":1502},[288,96833,96785],{"class":357},[288,96835,96836],{"class":290,"line":1784},[288,96837,96838],{"class":357},"# [[0. 1. 0. 0.]\n",[288,96840,96841],{"class":290,"line":1789},[288,96842,96843],{"class":357},"#  [0. 0. 1. 0.]\n",[288,96845,96846],{"class":290,"line":1795},[288,96847,96848],{"class":357},"#  [0. 0. 0. 1.]]\n",[260,96850,96852],{"id":96851},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[280,96854,96856],{"className":30551,"code":96855,"language":30553,"meta":205,"style":205},"#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",[25,96857,96858,96863,96867,96872,96877,96882,96887,96892,96897,96902,96907],{"__ignoreMap":205},[288,96859,96860],{"class":290,"line":291},[288,96861,96862],{"class":357},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[288,96864,96865],{"class":290,"line":206},[288,96866,95871],{"class":403},[288,96868,96869],{"class":290,"line":1352},[288,96870,96871],{"class":403},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[288,96873,96874],{"class":290,"line":1367},[288,96875,96876],{"class":403},"参数介绍：\n",[288,96878,96879],{"class":290,"line":1373},[288,96880,96881],{"class":403},"start：序列的起始值\n",[288,96883,96884],{"class":290,"line":1387},[288,96885,96886],{"class":403},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[288,96888,96889],{"class":290,"line":1393},[288,96890,96891],{"class":403},"num：要生长的等步长的样本数量，默认为50\n",[288,96893,96894],{"class":290,"line":1484},[288,96895,96896],{"class":403},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[288,96898,96899],{"class":290,"line":1490},[288,96900,96901],{"class":403},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[288,96903,96904],{"class":290,"line":1502},[288,96905,96906],{"class":403},"dtype：ndarry的数据类型\n",[288,96908,96909],{"class":290,"line":1784},[288,96910,95871],{"class":403},[19,96912,96913],{},[200,96914],{"alt":205,"src":96915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96917,96918],{},"这里num=是可以省略的",[19,96920,96921],{},"也就是下方两行代码结果是一模一样的",[280,96923,96925],{"className":30551,"code":96924,"language":30553,"meta":205,"style":205},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[25,96926,96927,96944],{"__ignoreMap":205},[288,96928,96929,96932,96934,96936,96938,96940,96942],{"class":290,"line":291},[288,96930,96931],{"class":298},"np.linspace(",[288,96933,516],{"class":347},[288,96935,675],{"class":298},[288,96937,616],{"class":347},[288,96939,675],{"class":298},[288,96941,616],{"class":347},[288,96943,305],{"class":298},[288,96945,96946,96948,96950,96952,96954,96956,96958,96960,96962],{"class":290,"line":206},[288,96947,96931],{"class":298},[288,96949,516],{"class":347},[288,96951,675],{"class":298},[288,96953,616],{"class":347},[288,96955,675],{"class":298},[288,96957,1837],{"class":5389},[288,96959,344],{"class":294},[288,96961,616],{"class":347},[288,96963,305],{"class":298},[260,96965,96967],{"id":96966},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[280,96969,96971],{"className":30551,"code":96970,"language":30553,"meta":205,"style":205},"#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",[25,96972,96973,96978,96982,96987,96992,96997,97002,97006,97011,97016,97020],{"__ignoreMap":205},[288,96974,96975],{"class":290,"line":291},[288,96976,96977],{"class":357},"#logspace函数用于创建一个等比数列，格式如下：\n",[288,96979,96980],{"class":290,"line":206},[288,96981,95871],{"class":403},[288,96983,96984],{"class":290,"line":1352},[288,96985,96986],{"class":403},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[288,96988,96989],{"class":290,"line":1367},[288,96990,96991],{"class":403},"参数为：\n",[288,96993,96994],{"class":290,"line":1373},[288,96995,96996],{"class":403},"start:序列的起始位置为：base**start\n",[288,96998,96999],{"class":290,"line":1387},[288,97000,97001],{"class":403},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[288,97003,97004],{"class":290,"line":1393},[288,97005,96891],{"class":403},[288,97007,97008],{"class":290,"line":1484},[288,97009,97010],{"class":403},"endpoint：是否包含 stop 这个值，默认是 True\n",[288,97012,97013],{"class":290,"line":1490},[288,97014,97015],{"class":403},"base：对数的底数，默认是 10（常见对数）\n",[288,97017,97018],{"class":290,"line":1502},[288,97019,96906],{"class":403},[288,97021,97022],{"class":290,"line":1784},[288,97023,95871],{"class":403},[19,97025,97026],{},[200,97027],{"alt":205,"src":97028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97030,97031],{},"logspace()函数中的num参数也是可以不写num=的",[19,97033,97034],{},"endpoint是不可以省略的",[5299,97036,97037],{},"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":205,"searchDepth":206,"depth":206,"links":97039},[97040,97044,97049,97053,97057,97058],{"id":95429,"depth":206,"text":95430,"children":97041},[97042,97043],{"id":95433,"depth":1352,"text":95434},{"id":95506,"depth":1352,"text":95507},{"id":95538,"depth":206,"text":95539,"children":97045},[97046,97047,97048],{"id":95542,"depth":1352,"text":95543},{"id":95724,"depth":1352,"text":95725},{"id":95802,"depth":1352,"text":95803},{"id":95837,"depth":206,"text":95838,"children":97050},[97051,97052],{"id":95841,"depth":1352,"text":95842},{"id":95898,"depth":1352,"text":95899},{"id":95994,"depth":206,"text":95995,"children":97054},[97055,97056],{"id":95998,"depth":1352,"text":95999},{"id":96010,"depth":1352,"text":96011},{"id":96044,"depth":206,"text":96045},{"id":96081,"depth":206,"text":96082,"children":97059},[97060,97061,97062,97063,97064,97065,97066,97067],{"id":96085,"depth":1352,"text":96086},{"id":96310,"depth":1352,"text":96311},{"id":96317,"depth":1352,"text":96318},{"id":96526,"depth":1352,"text":96527},{"id":96546,"depth":1352,"text":96547},{"id":96682,"depth":1352,"text":96683},{"id":96851,"depth":1352,"text":96852},{"id":96966,"depth":1352,"text":96967},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95421,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97074,"title":97075,"body":97076,"description":214,"extension":215,"meta":97169,"navigation":217,"path":97170,"seo":97171,"stem":97172,"__hash__":97173},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97077,"toc":97167},[97078,97081,97084,97087,97090,97093,97096,97099,97102,97105,97108,97111,97113,97116,97119,97124,97127,97130,97164],[10,97079,97075],{"id":97080},"_20魔法命令mprun",[19,97082,97083],{},"逐行分析数据内存的使用情况",[19,97085,97086],{},"语法格式：",[19,97088,97089],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97091,97092],{},"分析结果列如下：",[19,97094,97095],{},"Line行号",[19,97097,97098],{},"Mem usage内存使用大小",[19,97100,97101],{},"increment内存增量",[19,97103,97104],{},"Line content代码内容",[19,97106,97107],{},"补充说明：",[19,97109,97110],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97112,95376],{},[19,97114,97115],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97117,97118],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97120,97121],{},[200,97122],{"alt":205,"src":97123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97125,97126],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97128,97129],{},"这时候需要重新加载模块",[280,97131,97133],{"className":30551,"code":97132,"language":30553,"meta":205,"style":205},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[25,97134,97135,97140,97147,97152],{"__ignoreMap":205},[288,97136,97137],{"class":290,"line":291},[288,97138,97139],{"class":357},"#重新加载模块\n",[288,97141,97142,97144],{"class":290,"line":206},[288,97143,30565],{"class":294},[288,97145,97146],{"class":298}," importlib\n",[288,97148,97149],{"class":290,"line":1352},[288,97150,97151],{"class":298},"importlib.reload(mprun_test)\n",[288,97153,97154,97156,97159,97161],{"class":290,"line":1367},[288,97155,625],{"class":294},[288,97157,97158],{"class":298},"mprun ",[288,97160,829],{"class":294},[288,97162,97163],{"class":298},"f mprun_test.fun_test mprun_test.fun_test()\n",[5299,97165,97166],{},"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":205,"searchDepth":206,"depth":206,"links":97168},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97075,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97175,"title":97176,"body":97177,"description":214,"extension":215,"meta":97194,"navigation":217,"path":97195,"seo":97196,"stem":97197,"__hash__":97198},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97178,"toc":97192},[97179,97182,97187],[10,97180,97176],{"id":97181},"_3一维数组的索引和切片",[19,97183,97184],{},[200,97185],{"alt":205,"src":97186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97188,97189],{},[200,97190],{"alt":205,"src":97191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":205,"searchDepth":206,"depth":206,"links":97193},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97176,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97200,"title":97201,"body":97202,"description":214,"extension":215,"meta":97685,"navigation":217,"path":97686,"seo":97687,"stem":97688,"__hash__":97689},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97203,"toc":97683},[97204,97207,97210,97215,97248,97251,97289,97292,97326,97329,97434,97437,97474,97477,97578,97581,97632,97635,97677,97680],[10,97205,97201],{"id":97206},"_4二维数组的索引与切片",[19,97208,97209],{},"①获取指定单个元素",[19,97211,97212],{},[200,97213],{"alt":205,"src":97214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[280,97216,97218],{"className":30551,"code":97217,"language":30553,"meta":205,"style":205},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[25,97219,97220,97225,97230,97235],{"__ignoreMap":205},[288,97221,97222],{"class":290,"line":291},[288,97223,97224],{"class":357},"#获取元素9\n",[288,97226,97227],{"class":290,"line":206},[288,97228,97229],{"class":357},"#先获取所在行，再获取所在列\n",[288,97231,97232],{"class":290,"line":1352},[288,97233,97234],{"class":357},"#数组[行索引号，列索引号]\n",[288,97236,97237,97240,97242,97244,97246],{"class":290,"line":1367},[288,97238,97239],{"class":298},"a[",[288,97241,516],{"class":347},[288,97243,675],{"class":298},[288,97245,376],{"class":347},[288,97247,33419],{"class":298},[19,97249,97250],{},"②获取整行元素",[280,97252,97254],{"className":30551,"code":97253,"language":30553,"meta":205,"style":205},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[25,97255,97256,97261,97266,97274,97279],{"__ignoreMap":205},[288,97257,97258],{"class":290,"line":291},[288,97259,97260],{"class":357},"#获取整行 数组[行索引号]\n",[288,97262,97263],{"class":290,"line":206},[288,97264,97265],{"class":357},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[288,97267,97268,97270,97272],{"class":290,"line":1352},[288,97269,97239],{"class":298},[288,97271,376],{"class":347},[288,97273,33419],{"class":298},[288,97275,97276],{"class":290,"line":1367},[288,97277,97278],{"class":357},"#也可以负索引获取一行\n",[288,97280,97281,97283,97285,97287],{"class":290,"line":1373},[288,97282,97239],{"class":298},[288,97284,829],{"class":294},[288,97286,516],{"class":347},[288,97288,33419],{"class":298},[19,97290,97291],{},"③获取整列元素",[280,97293,97295],{"className":30551,"code":97294,"language":30553,"meta":205,"style":205},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[25,97296,97297,97302,97311,97316],{"__ignoreMap":205},[288,97298,97299],{"class":290,"line":291},[288,97300,97301],{"class":357},"#获取整列 数组名[:,列索引]\n",[288,97303,97304,97307,97309],{"class":290,"line":206},[288,97305,97306],{"class":298},"a[:,",[288,97308,376],{"class":347},[288,97310,33419],{"class":298},[288,97312,97313],{"class":290,"line":1352},[288,97314,97315],{"class":357},"#也可以负索引获取一列\n",[288,97317,97318,97320,97322,97324],{"class":290,"line":1367},[288,97319,97306],{"class":298},[288,97321,829],{"class":294},[288,97323,516],{"class":347},[288,97325,33419],{"class":298},[19,97327,97328],{},"④部分行部分列的元素",[280,97330,97332],{"className":30551,"code":97331,"language":30553,"meta":205,"style":205},"#部分行部分列 数组名[行切片，列切片]\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",[25,97333,97334,97339,97349,97353,97357,97362,97367,97371,97383,97387,97391,97396,97401,97406,97411,97415,97420],{"__ignoreMap":205},[288,97335,97336],{"class":290,"line":291},[288,97337,97338],{"class":357},"#部分行部分列 数组名[行切片，列切片]\n",[288,97340,97341,97344,97346],{"class":290,"line":206},[288,97342,97343],{"class":298},"a[:",[288,97345,376],{"class":347},[288,97347,97348],{"class":298},",:]\n",[288,97350,97351],{"class":290,"line":1352},[288,97352,93737],{"class":357},[288,97354,97355],{"class":290,"line":1367},[288,97356,94101],{"class":403},[288,97358,97359],{"class":290,"line":1373},[288,97360,97361],{"class":403},"array([[ 1,  2,  3,  4,  5,  6],\n",[288,97363,97364],{"class":290,"line":1387},[288,97365,97366],{"class":403},"       [ 7,  8,  9, 10, 11, 12]])\n",[288,97368,97369],{"class":290,"line":1393},[288,97370,94101],{"class":403},[288,97372,97373,97375,97377,97379,97381],{"class":290,"line":1484},[288,97374,97306],{"class":298},[288,97376,516],{"class":347},[288,97378,1156],{"class":298},[288,97380,590],{"class":347},[288,97382,33419],{"class":298},[288,97384,97385],{"class":290,"line":1490},[288,97386,93737],{"class":357},[288,97388,97389],{"class":290,"line":1502},[288,97390,94101],{"class":403},[288,97392,97393],{"class":290,"line":1784},[288,97394,97395],{"class":403},"array([[ 2,  3,  4],\n",[288,97397,97398],{"class":290,"line":1789},[288,97399,97400],{"class":403},"       [ 8,  9, 10],\n",[288,97402,97403],{"class":290,"line":1795},[288,97404,97405],{"class":403},"       [14, 15, 16],\n",[288,97407,97408],{"class":290,"line":1800},[288,97409,97410],{"class":403},"       [20, 21, 22]])\n",[288,97412,97413],{"class":290,"line":1814},[288,97414,94101],{"class":403},[288,97416,97417],{"class":290,"line":1819},[288,97418,97419],{"class":357},"#对列行同时进行切片，使用了step参数\n",[288,97421,97422,97425,97427,97430,97432],{"class":290,"line":1825},[288,97423,97424],{"class":298},"a[::",[288,97426,376],{"class":347},[288,97428,97429],{"class":298},",::",[288,97431,376],{"class":347},[288,97433,33419],{"class":298},[19,97435,97436],{},"⑤同时获取两个元素",[280,97438,97440],{"className":30551,"code":97439,"language":30553,"meta":205,"style":205},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[25,97441,97442,97447,97452],{"__ignoreMap":205},[288,97443,97444],{"class":290,"line":291},[288,97445,97446],{"class":357},"#同时获取第三行第二列，第四行第一列\n",[288,97448,97449],{"class":290,"line":206},[288,97450,97451],{"class":357},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[288,97453,97454,97457,97459,97461,97463,97465,97467,97469,97471],{"class":290,"line":1352},[288,97455,97456],{"class":298},"a[(",[288,97458,376],{"class":347},[288,97460,675],{"class":298},[288,97462,370],{"class":347},[288,97464,42420],{"class":298},[288,97466,516],{"class":347},[288,97468,675],{"class":298},[288,97470,490],{"class":347},[288,97472,97473],{"class":298},")]\n",[19,97475,97476],{},"⑥切片，对行进行反向获取",[280,97478,97480],{"className":30551,"code":97479,"language":30553,"meta":205,"style":205},"#切片 对所有行进行反向获取\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",[25,97481,97482,97487,97497,97501,97505,97510,97515,97520,97525,97529,97534,97550,97554,97559,97564,97569,97574],{"__ignoreMap":205},[288,97483,97484],{"class":290,"line":291},[288,97485,97486],{"class":357},"#切片 对所有行进行反向获取\n",[288,97488,97489,97491,97493,97495],{"class":290,"line":206},[288,97490,97424],{"class":298},[288,97492,829],{"class":294},[288,97494,516],{"class":347},[288,97496,33419],{"class":298},[288,97498,97499],{"class":290,"line":1352},[288,97500,93737],{"class":357},[288,97502,97503],{"class":290,"line":1367},[288,97504,94101],{"class":403},[288,97506,97507],{"class":290,"line":1373},[288,97508,97509],{"class":403},"array([[19, 20, 21, 22, 23, 24],\n",[288,97511,97512],{"class":290,"line":1387},[288,97513,97514],{"class":403},"       [13, 14, 15, 16, 17, 18],\n",[288,97516,97517],{"class":290,"line":1393},[288,97518,97519],{"class":403},"       [ 7,  8,  9, 10, 11, 12],\n",[288,97521,97522],{"class":290,"line":1484},[288,97523,97524],{"class":403},"       [ 1,  2,  3,  4,  5,  6]])\n",[288,97526,97527],{"class":290,"line":1490},[288,97528,94101],{"class":403},[288,97530,97531],{"class":290,"line":1502},[288,97532,97533],{"class":357},"#对行列都进行反向切片获取\n",[288,97535,97536,97538,97540,97542,97544,97546,97548],{"class":290,"line":1784},[288,97537,97424],{"class":298},[288,97539,829],{"class":294},[288,97541,516],{"class":347},[288,97543,97429],{"class":298},[288,97545,829],{"class":294},[288,97547,516],{"class":347},[288,97549,33419],{"class":298},[288,97551,97552],{"class":290,"line":1789},[288,97553,94101],{"class":403},[288,97555,97556],{"class":290,"line":1795},[288,97557,97558],{"class":403},"array([[24, 23, 22, 21, 20, 19],\n",[288,97560,97561],{"class":290,"line":1800},[288,97562,97563],{"class":403},"       [18, 17, 16, 15, 14, 13],\n",[288,97565,97566],{"class":290,"line":1814},[288,97567,97568],{"class":403},"       [12, 11, 10,  9,  8,  7],\n",[288,97570,97571],{"class":290,"line":1819},[288,97572,97573],{"class":403},"       [ 6,  5,  4,  3,  2,  1]])\n",[288,97575,97576],{"class":290,"line":1825},[288,97577,94101],{"class":403},[19,97579,97580],{},"⑦修改元素",[280,97582,97584],{"className":30551,"code":97583,"language":30553,"meta":205,"style":205},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[25,97585,97586,97591,97609,97614],{"__ignoreMap":205},[288,97587,97588],{"class":290,"line":291},[288,97589,97590],{"class":357},"#获取前两行和前两列\n",[288,97592,97593,97596,97598,97600,97602,97605,97607],{"class":290,"line":206},[288,97594,97595],{"class":298},"sub_a",[288,97597,344],{"class":294},[288,97599,97343],{"class":298},[288,97601,376],{"class":347},[288,97603,97604],{"class":298},",:",[288,97606,376],{"class":347},[288,97608,33419],{"class":298},[288,97610,97611],{"class":290,"line":1352},[288,97612,97613],{"class":357},"#修改sub_a第一个元素的值\n",[288,97615,97616,97619,97621,97623,97625,97627,97629],{"class":290,"line":1367},[288,97617,97618],{"class":298},"sub_a[",[288,97620,490],{"class":347},[288,97622,675],{"class":298},[288,97624,490],{"class":347},[288,97626,1237],{"class":298},[288,97628,344],{"class":294},[288,97630,97631],{"class":347},"100\n",[19,97633,97634],{},"⑧数组复制copy()",[280,97636,97638],{"className":30551,"code":97637,"language":30553,"meta":205,"style":205},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[25,97639,97640,97645,97655,97660],{"__ignoreMap":205},[288,97641,97642],{"class":290,"line":291},[288,97643,97644],{"class":357},"#数组复制\n",[288,97646,97647,97650,97652],{"class":290,"line":206},[288,97648,97649],{"class":298},"copy_a",[288,97651,344],{"class":294},[288,97653,97654],{"class":298},"np.copy(sub_a)\n",[288,97656,97657],{"class":290,"line":1352},[288,97658,97659],{"class":357},"#修改copy_a后不影响原数组\n",[288,97661,97662,97665,97667,97669,97671,97673,97675],{"class":290,"line":1367},[288,97663,97664],{"class":298},"copy_a[",[288,97666,490],{"class":347},[288,97668,675],{"class":298},[288,97670,490],{"class":347},[288,97672,1237],{"class":298},[288,97674,344],{"class":294},[288,97676,97631],{"class":347},[19,97678,97679],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5299,97681,97682],{},"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":205,"searchDepth":206,"depth":206,"links":97684},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97201,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97691,"title":97692,"body":97693,"description":214,"extension":215,"meta":98185,"navigation":217,"path":98186,"seo":98187,"stem":98188,"__hash__":98189},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97694,"toc":98177},[97695,97698,97702,97705,97708,97761,97764,97789,97792,97811,97831,97834,97850,97854,97900,97904,97946,97950,97953,97956,97959,97962,97965,98027,98087,98091,98094,98151,98155,98160,98169,98174],[10,97696,97692],{"id":97697},"_5改变数组的维度",[14,97699,97701],{"id":97700},"_51-使用reshape","5.1 使用reshape()",[19,97703,97704],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97706,97707],{},"①一维数组转换为二维数组",[280,97709,97711],{"className":30551,"code":97710,"language":30553,"meta":205,"style":205},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[25,97712,97713,97729,97734,97739,97744],{"__ignoreMap":205},[288,97714,97715,97717,97719,97721,97723,97725,97727],{"class":290,"line":291},[288,97716,104],{"class":298},[288,97718,344],{"class":294},[288,97720,93175],{"class":298},[288,97722,516],{"class":347},[288,97724,675],{"class":298},[288,97726,820],{"class":347},[288,97728,305],{"class":298},[288,97730,97731],{"class":290,"line":206},[288,97732,97733],{"class":357},"#将一维数组进行转换\n",[288,97735,97736],{"class":290,"line":1352},[288,97737,97738],{"class":357},"#注意点：元素个数不可以变\n",[288,97740,97741],{"class":290,"line":1367},[288,97742,97743],{"class":357},"#转换维度要保持一致，不一致就异常！！！\n",[288,97745,97746,97748,97750,97753,97755,97757,97759],{"class":290,"line":1373},[288,97747,93479],{"class":298},[288,97749,344],{"class":294},[288,97751,97752],{"class":298},"a.reshape(",[288,97754,376],{"class":347},[288,97756,675],{"class":298},[288,97758,641],{"class":347},[288,97760,305],{"class":298},[19,97762,97763],{},"②一维数组转换为三维数组",[280,97765,97767],{"className":30551,"code":97766,"language":30553,"meta":205,"style":205},"aaa=a.reshape(2,3,2)\n",[25,97768,97769],{"__ignoreMap":205},[288,97770,97771,97773,97775,97777,97779,97781,97783,97785,97787],{"class":290,"line":291},[288,97772,95694],{"class":298},[288,97774,344],{"class":294},[288,97776,97752],{"class":298},[288,97778,376],{"class":347},[288,97780,675],{"class":298},[288,97782,370],{"class":347},[288,97784,675],{"class":298},[288,97786,376],{"class":347},[288,97788,305],{"class":298},[19,97790,97791],{},"③二维数组转化为一维数组",[280,97793,97795],{"className":30551,"code":97794,"language":30553,"meta":205,"style":205},"#知道元素个数：\naa.reshape(12)\n",[25,97796,97797,97802],{"__ignoreMap":205},[288,97798,97799],{"class":290,"line":291},[288,97800,97801],{"class":357},"#知道元素个数：\n",[288,97803,97804,97807,97809],{"class":290,"line":206},[288,97805,97806],{"class":298},"aa.reshape(",[288,97808,795],{"class":347},[288,97810,305],{"class":298},[280,97812,97814],{"className":30551,"code":97813,"language":30553,"meta":205,"style":205},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[25,97815,97816,97821],{"__ignoreMap":205},[288,97817,97818],{"class":290,"line":291},[288,97819,97820],{"class":357},"#不知道元素个数，参数传递-1\n",[288,97822,97823,97825,97827,97829],{"class":290,"line":206},[288,97824,97806],{"class":298},[288,97826,829],{"class":294},[288,97828,516],{"class":347},[288,97830,305],{"class":298},[19,97832,97833],{},"④三维数组转换为一维数组",[280,97835,97837],{"className":30551,"code":97836,"language":30553,"meta":205,"style":205},"aaa.reshape(-1)\n",[25,97838,97839],{"__ignoreMap":205},[288,97840,97841,97844,97846,97848],{"class":290,"line":291},[288,97842,97843],{"class":298},"aaa.reshape(",[288,97845,829],{"class":294},[288,97847,516],{"class":347},[288,97849,305],{"class":298},[14,97851,97853],{"id":97852},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[280,97855,97857],{"className":30551,"code":97856,"language":30553,"meta":205,"style":205},"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",[25,97858,97859,97886,97891,97895],{"__ignoreMap":205},[288,97860,97861,97863,97865,97867,97869,97871,97873,97875,97877,97879,97881,97883],{"class":290,"line":291},[288,97862,93479],{"class":298},[288,97864,344],{"class":294},[288,97866,93175],{"class":298},[288,97868,516],{"class":347},[288,97870,675],{"class":298},[288,97872,820],{"class":347},[288,97874,93180],{"class":298},[288,97876,376],{"class":347},[288,97878,675],{"class":298},[288,97880,641],{"class":347},[288,97882,726],{"class":298},[288,97884,97885],{"class":357},"#转换为2行6列的数组\n",[288,97887,97888],{"class":290,"line":206},[288,97889,97890],{"class":298},"aa.revel()\n",[288,97892,97893],{"class":290,"line":1352},[288,97894,93737],{"class":357},[288,97896,97897],{"class":290,"line":1367},[288,97898,97899],{"class":357},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97901,97903],{"id":97902},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[280,97905,97907],{"className":30551,"code":97906,"language":30553,"meta":205,"style":205},"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",[25,97908,97909,97933,97938,97942],{"__ignoreMap":205},[288,97910,97911,97913,97915,97917,97919,97921,97923,97925,97927,97929,97931],{"class":290,"line":291},[288,97912,93479],{"class":298},[288,97914,344],{"class":294},[288,97916,93175],{"class":298},[288,97918,516],{"class":347},[288,97920,675],{"class":298},[288,97922,820],{"class":347},[288,97924,93180],{"class":298},[288,97926,376],{"class":347},[288,97928,675],{"class":298},[288,97930,641],{"class":347},[288,97932,305],{"class":298},[288,97934,97935],{"class":290,"line":206},[288,97936,97937],{"class":298},"aa.flatten()\n",[288,97939,97940],{"class":290,"line":1352},[288,97941,93737],{"class":357},[288,97943,97944],{"class":290,"line":1367},[288,97945,97899],{"class":357},[14,97947,97949],{"id":97948},"_54-使用resize","5.4 使用resize()",[19,97951,97952],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97954,97955],{},"通过resize方法可以改变数组的维度",[19,97957,97958],{},"#resize修改数组维度",[19,97960,97961],{},"#以元组的形式指定形状",[19,97963,97964],{},"#改变的是原数组",[280,97966,97968],{"className":30551,"code":97967,"language":30553,"meta":205,"style":205},"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",[25,97969,97970,97986,98006,98019,98023],{"__ignoreMap":205},[288,97971,97972,97974,97976,97978,97980,97982,97984],{"class":290,"line":291},[288,97973,104],{"class":298},[288,97975,344],{"class":294},[288,97977,93175],{"class":298},[288,97979,516],{"class":347},[288,97981,675],{"class":298},[288,97983,820],{"class":347},[288,97985,305],{"class":298},[288,97987,97988,97991,97993,97995,97997,97999,98001,98003],{"class":290,"line":206},[288,97989,97990],{"class":298},"a.shape",[288,97992,344],{"class":294},[288,97994,299],{"class":298},[288,97996,376],{"class":347},[288,97998,675],{"class":298},[288,98000,641],{"class":347},[288,98002,726],{"class":298},[288,98004,98005],{"class":357},"#改变了原数组\n",[288,98007,98008,98010,98012,98015,98017],{"class":290,"line":1352},[288,98009,104],{"class":298},[288,98011,344],{"class":294},[288,98013,98014],{"class":298},"resize((",[288,98016,795],{"class":347},[288,98018,30670],{"class":298},[288,98020,98021],{"class":290,"line":1367},[288,98022,93737],{"class":357},[288,98024,98025],{"class":290,"line":1373},[288,98026,97899],{"class":357},[280,98028,98030],{"className":30551,"code":98029,"language":30553,"meta":205,"style":205},"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",[25,98031,98032,98045,98049,98053,98058,98063,98068,98073,98078,98083],{"__ignoreMap":205},[288,98033,98034,98037,98039,98041,98043],{"class":290,"line":291},[288,98035,98036],{"class":298},"a.resize((",[288,98038,641],{"class":347},[288,98040,675],{"class":298},[288,98042,376],{"class":347},[288,98044,30670],{"class":298},[288,98046,98047],{"class":290,"line":206},[288,98048,93737],{"class":357},[288,98050,98051],{"class":290,"line":1352},[288,98052,94101],{"class":403},[288,98054,98055],{"class":290,"line":1367},[288,98056,98057],{"class":403},"array([[ 1,  2],\n",[288,98059,98060],{"class":290,"line":1373},[288,98061,98062],{"class":403},"       [ 3,  4],\n",[288,98064,98065],{"class":290,"line":1387},[288,98066,98067],{"class":403},"       [ 5,  6],\n",[288,98069,98070],{"class":290,"line":1393},[288,98071,98072],{"class":403},"       [ 7,  8],\n",[288,98074,98075],{"class":290,"line":1484},[288,98076,98077],{"class":403},"       [ 9, 10],\n",[288,98079,98080],{"class":290,"line":1490},[288,98081,98082],{"class":403},"       [11, 12]])\n",[288,98084,98085],{"class":290,"line":1502},[288,98086,94101],{"class":403},[14,98088,98090],{"id":98089},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98092,98093],{},"改变了原数组",[280,98095,98097],{"className":30551,"code":98096,"language":30553,"meta":205,"style":205},"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",[25,98098,98099,98115,98131,98135,98139,98143,98147],{"__ignoreMap":205},[288,98100,98101,98103,98105,98107,98109,98111,98113],{"class":290,"line":291},[288,98102,104],{"class":298},[288,98104,344],{"class":294},[288,98106,93175],{"class":298},[288,98108,516],{"class":347},[288,98110,675],{"class":298},[288,98112,820],{"class":347},[288,98114,305],{"class":298},[288,98116,98117,98119,98121,98123,98125,98127,98129],{"class":290,"line":206},[288,98118,97990],{"class":298},[288,98120,344],{"class":294},[288,98122,299],{"class":298},[288,98124,376],{"class":347},[288,98126,675],{"class":298},[288,98128,641],{"class":347},[288,98130,305],{"class":298},[288,98132,98133],{"class":290,"line":1352},[288,98134,93737],{"class":357},[288,98136,98137],{"class":290,"line":1367},[288,98138,94101],{"class":403},[288,98140,98141],{"class":290,"line":1373},[288,98142,97361],{"class":403},[288,98144,98145],{"class":290,"line":1387},[288,98146,97366],{"class":403},[288,98148,98149],{"class":290,"line":1393},[288,98150,94101],{"class":403},[14,98152,98154],{"id":98153},"_56-重要比较","5.6 重要比较：",[19,98156,98157],{},[200,98158],{"alt":205,"src":98159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98161,98162,98163,98165,98166,98168],{},"口诀：NumPy 函数要么用 ",[25,98164,96136],{},"，要么用 ",[25,98167,31669],{},"，创建结构用 shape，造数据用 size",[19,98170,98171],{},[200,98172],{"alt":205,"src":98173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5299,98175,98176],{},"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":205,"searchDepth":206,"depth":206,"links":98178},[98179,98180,98181,98182,98183,98184],{"id":97700,"depth":206,"text":97701},{"id":97852,"depth":206,"text":97853},{"id":97902,"depth":206,"text":97903},{"id":97948,"depth":206,"text":97949},{"id":98089,"depth":206,"text":98090},{"id":98153,"depth":206,"text":98154},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97692,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98191,"title":98192,"body":98193,"description":214,"extension":215,"meta":99265,"navigation":217,"path":99266,"seo":99267,"stem":99268,"__hash__":99269},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98194,"toc":99259},[98195,98198,98202,98205,98208,98211,98276,98279,98319,98322,98404,98407,98412,98434,98436,98441,98446,98449,98452,98607,98610,98812,98816,98819,98822,98890,98892,98897,98900,98903,98983,98987,98990,98992,99065,99067,99072,99074,99154,99158,99161,99164,99167,99170,99173,99176,99256],[10,98196,98192],{"id":98197},"_6数组的拼接",[14,98199,98201],{"id":98200},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98203,98204],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98206,98207],{},"函数内部传两个数列构成的数列或者元组",[19,98209,98210],{},"①一维数组的拼接",[280,98212,98214],{"className":30551,"code":98213,"language":30553,"meta":205,"style":205},"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",[25,98215,98216,98236,98256,98261,98266,98271],{"__ignoreMap":205},[288,98217,98218,98220,98222,98224,98226,98228,98230,98232,98234],{"class":290,"line":291},[288,98219,104],{"class":298},[288,98221,344],{"class":294},[288,98223,93197],{"class":298},[288,98225,516],{"class":347},[288,98227,675],{"class":298},[288,98229,376],{"class":347},[288,98231,675],{"class":298},[288,98233,370],{"class":347},[288,98235,4829],{"class":298},[288,98237,98238,98240,98242,98244,98246,98248,98250,98252,98254],{"class":290,"line":206},[288,98239,560],{"class":298},[288,98241,344],{"class":294},[288,98243,93197],{"class":298},[288,98245,590],{"class":347},[288,98247,675],{"class":298},[288,98249,616],{"class":347},[288,98251,675],{"class":298},[288,98253,641],{"class":347},[288,98255,4829],{"class":298},[288,98257,98258],{"class":290,"line":1352},[288,98259,98260],{"class":357},"#调用concatenate进行数组拼接\n",[288,98262,98263],{"class":290,"line":1367},[288,98264,98265],{"class":298},"np.concatenate((a,b))\n",[288,98267,98268],{"class":290,"line":1373},[288,98269,98270],{"class":357},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[288,98272,98273],{"class":290,"line":1387},[288,98274,98275],{"class":357},"#np.concatenate([a,b])\n",[19,98277,98278],{},"②一维多个数组拼接",[280,98280,98282],{"className":30551,"code":98281,"language":30553,"meta":205,"style":205},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[25,98283,98284,98289,98309,98314],{"__ignoreMap":205},[288,98285,98286],{"class":290,"line":291},[288,98287,98288],{"class":357},"#也可以多个数组进行拼接\n",[288,98290,98291,98293,98295,98297,98299,98301,98303,98305,98307],{"class":290,"line":206},[288,98292,585],{"class":298},[288,98294,344],{"class":294},[288,98296,93197],{"class":298},[288,98298,743],{"class":347},[288,98300,675],{"class":298},[288,98302,769],{"class":347},[288,98304,675],{"class":298},[288,98306,820],{"class":347},[288,98308,4829],{"class":298},[288,98310,98311],{"class":290,"line":1352},[288,98312,98313],{"class":298},"c\n",[288,98315,98316],{"class":290,"line":1367},[288,98317,98318],{"class":298},"np.concatenate((a,b,c))\n",[19,98320,98321],{},"③二维数组拼接",[280,98323,98325],{"className":30551,"code":98324,"language":30553,"meta":205,"style":205},"#二维数组使用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",[25,98326,98327,98332,98356,98381,98386,98391],{"__ignoreMap":205},[288,98328,98329],{"class":290,"line":291},[288,98330,98331],{"class":357},"#二维数组使用concatenate进行拼接\n",[288,98333,98334,98336,98338,98340,98342,98344,98346,98348,98350,98352,98354],{"class":290,"line":206},[288,98335,93479],{"class":298},[288,98337,344],{"class":294},[288,98339,93175],{"class":298},[288,98341,516],{"class":347},[288,98343,675],{"class":298},[288,98345,820],{"class":347},[288,98347,93180],{"class":298},[288,98349,370],{"class":347},[288,98351,675],{"class":298},[288,98353,590],{"class":347},[288,98355,305],{"class":298},[288,98357,98358,98361,98363,98365,98367,98369,98371,98373,98375,98377,98379],{"class":290,"line":1352},[288,98359,98360],{"class":298},"bb",[288,98362,344],{"class":294},[288,98364,93175],{"class":298},[288,98366,634],{"class":347},[288,98368,675],{"class":298},[288,98370,939],{"class":347},[288,98372,93180],{"class":298},[288,98374,370],{"class":347},[288,98376,675],{"class":298},[288,98378,590],{"class":347},[288,98380,305],{"class":298},[288,98382,98383],{"class":290,"line":1367},[288,98384,98385],{"class":357},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[288,98387,98388],{"class":290,"line":1373},[288,98389,98390],{"class":357},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[288,98392,98393,98396,98398,98400,98402],{"class":290,"line":1387},[288,98394,98395],{"class":298},"np.concatenate((aa,bb),",[288,98397,47687],{"class":5389},[288,98399,344],{"class":294},[288,98401,490],{"class":347},[288,98403,305],{"class":298},[19,98405,98406],{},"结果：",[19,98408,98409],{},[200,98410],{"alt":205,"src":98411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[280,98413,98415],{"className":30551,"code":98414,"language":30553,"meta":205,"style":205},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[25,98416,98417,98422],{"__ignoreMap":205},[288,98418,98419],{"class":290,"line":291},[288,98420,98421],{"class":357},"#指定axis为1进行拼接\n",[288,98423,98424,98426,98428,98430,98432],{"class":290,"line":206},[288,98425,98395],{"class":298},[288,98427,47687],{"class":5389},[288,98429,344],{"class":294},[288,98431,516],{"class":347},[288,98433,305],{"class":298},[19,98435,98406],{},[19,98437,98438],{},[200,98439],{"alt":205,"src":98440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98442,98443],{},[448,98444,98445],{},"二维数组总结：0竖着方向，1横着方向",[19,98447,98448],{},"④三维数组拼接",[19,98450,98451],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[280,98453,98455],{"className":30551,"code":98454,"language":30553,"meta":205,"style":205},"#两个三行六列\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",[25,98456,98457,98462,98490,98520,98525,98542,98547,98552,98557,98574,98579,98584,98589,98602],{"__ignoreMap":205},[288,98458,98459],{"class":290,"line":291},[288,98460,98461],{"class":357},"#两个三行六列\n",[288,98463,98464,98466,98468,98470,98472,98474,98476,98478,98480,98482,98484,98486,98488],{"class":290,"line":206},[288,98465,95694],{"class":298},[288,98467,344],{"class":294},[288,98469,93175],{"class":298},[288,98471,516],{"class":347},[288,98473,675],{"class":298},[288,98475,622],{"class":347},[288,98477,93180],{"class":298},[288,98479,376],{"class":347},[288,98481,675],{"class":298},[288,98483,370],{"class":347},[288,98485,675],{"class":298},[288,98487,641],{"class":347},[288,98489,305],{"class":298},[288,98491,98492,98495,98497,98499,98501,98503,98506,98508,98510,98512,98514,98516,98518],{"class":290,"line":1352},[288,98493,98494],{"class":298},"bbb",[288,98496,344],{"class":294},[288,98498,93175],{"class":298},[288,98500,634],{"class":347},[288,98502,675],{"class":298},[288,98504,98505],{"class":347},"137",[288,98507,93180],{"class":298},[288,98509,376],{"class":347},[288,98511,675],{"class":298},[288,98513,370],{"class":347},[288,98515,675],{"class":298},[288,98517,641],{"class":347},[288,98519,305],{"class":298},[288,98521,98522],{"class":290,"line":1367},[288,98523,98524],{"class":357},"#axis=0\n",[288,98526,98527,98529,98531,98534,98536,98538,98540],{"class":290,"line":1373},[288,98528,992],{"class":298},[288,98530,344],{"class":294},[288,98532,98533],{"class":298},"np.concatenate((aaa,bbb),",[288,98535,47687],{"class":5389},[288,98537,344],{"class":294},[288,98539,490],{"class":347},[288,98541,305],{"class":298},[288,98543,98544],{"class":290,"line":1387},[288,98545,98546],{"class":298},"s.shape\n",[288,98548,98549],{"class":290,"line":1393},[288,98550,98551],{"class":357},"#输出：(4,3,6)\n",[288,98553,98554],{"class":290,"line":1484},[288,98555,98556],{"class":357},"#axis=1\n",[288,98558,98559,98562,98564,98566,98568,98570,98572],{"class":290,"line":1490},[288,98560,98561],{"class":298},"ss",[288,98563,344],{"class":294},[288,98565,98533],{"class":298},[288,98567,47687],{"class":5389},[288,98569,344],{"class":294},[288,98571,516],{"class":347},[288,98573,305],{"class":298},[288,98575,98576],{"class":290,"line":1502},[288,98577,98578],{"class":298},"ss.shape\n",[288,98580,98581],{"class":290,"line":1784},[288,98582,98583],{"class":357},"#输出：(2,6,6)\n",[288,98585,98586],{"class":290,"line":1789},[288,98587,98588],{"class":357},"#axis=2\n",[288,98590,98591,98593,98595,98597,98599],{"class":290,"line":1795},[288,98592,98533],{"class":298},[288,98594,47687],{"class":5389},[288,98596,344],{"class":294},[288,98598,376],{"class":347},[288,98600,98601],{"class":298},").shape\n",[288,98603,98604],{"class":290,"line":1800},[288,98605,98606],{"class":357},"#输出：（2，3，12）\n",[19,98608,98609],{},"⑤四维数组拼接",[280,98611,98613],{"className":30551,"code":98612,"language":30553,"meta":205,"style":205},"#两个三行六列\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",[25,98614,98615,98619,98647,98675,98700,98726,98730,98743,98748,98752,98764,98769,98773,98785,98790,98795,98807],{"__ignoreMap":205},[288,98616,98617],{"class":290,"line":291},[288,98618,98461],{"class":357},[288,98620,98621,98623,98625,98627,98629,98631,98633,98635,98637,98639,98641,98643,98645],{"class":290,"line":206},[288,98622,95694],{"class":298},[288,98624,344],{"class":294},[288,98626,93175],{"class":298},[288,98628,516],{"class":347},[288,98630,675],{"class":298},[288,98632,622],{"class":347},[288,98634,93180],{"class":298},[288,98636,376],{"class":347},[288,98638,675],{"class":298},[288,98640,370],{"class":347},[288,98642,675],{"class":298},[288,98644,641],{"class":347},[288,98646,305],{"class":298},[288,98648,98649,98651,98653,98655,98657,98659,98661,98663,98665,98667,98669,98671,98673],{"class":290,"line":1352},[288,98650,98494],{"class":298},[288,98652,344],{"class":294},[288,98654,93175],{"class":298},[288,98656,634],{"class":347},[288,98658,675],{"class":298},[288,98660,98505],{"class":347},[288,98662,93180],{"class":298},[288,98664,376],{"class":347},[288,98666,675],{"class":298},[288,98668,370],{"class":347},[288,98670,675],{"class":298},[288,98672,641],{"class":347},[288,98674,305],{"class":298},[288,98676,98677,98680,98682,98684,98686,98688,98690,98692,98694,98696,98698],{"class":290,"line":1367},[288,98678,98679],{"class":298},"aaaa",[288,98681,344],{"class":294},[288,98683,97843],{"class":298},[288,98685,376],{"class":347},[288,98687,675],{"class":298},[288,98689,370],{"class":347},[288,98691,675],{"class":298},[288,98693,370],{"class":347},[288,98695,675],{"class":298},[288,98697,376],{"class":347},[288,98699,305],{"class":298},[288,98701,98702,98705,98707,98710,98712,98714,98716,98718,98720,98722,98724],{"class":290,"line":1373},[288,98703,98704],{"class":298},"bbbb",[288,98706,344],{"class":294},[288,98708,98709],{"class":298},"bbb.reshape(",[288,98711,376],{"class":347},[288,98713,675],{"class":298},[288,98715,370],{"class":347},[288,98717,675],{"class":298},[288,98719,370],{"class":347},[288,98721,675],{"class":298},[288,98723,376],{"class":347},[288,98725,305],{"class":298},[288,98727,98728],{"class":290,"line":1387},[288,98729,98524],{"class":357},[288,98731,98732,98735,98737,98739,98741],{"class":290,"line":1393},[288,98733,98734],{"class":298},"np.concatenate((aaaa,bbbb),",[288,98736,47687],{"class":5389},[288,98738,344],{"class":294},[288,98740,490],{"class":347},[288,98742,98601],{"class":298},[288,98744,98745],{"class":290,"line":1484},[288,98746,98747],{"class":357},"#结果：（4，3，3，2）\n",[288,98749,98750],{"class":290,"line":1490},[288,98751,98556],{"class":357},[288,98753,98754,98756,98758,98760,98762],{"class":290,"line":1502},[288,98755,98734],{"class":298},[288,98757,47687],{"class":5389},[288,98759,344],{"class":294},[288,98761,516],{"class":347},[288,98763,98601],{"class":298},[288,98765,98766],{"class":290,"line":1784},[288,98767,98768],{"class":357},"#结果：（2，6，3，2）\n",[288,98770,98771],{"class":290,"line":1789},[288,98772,98588],{"class":357},[288,98774,98775,98777,98779,98781,98783],{"class":290,"line":1795},[288,98776,98734],{"class":298},[288,98778,47687],{"class":5389},[288,98780,344],{"class":294},[288,98782,376],{"class":347},[288,98784,98601],{"class":298},[288,98786,98787],{"class":290,"line":1800},[288,98788,98789],{"class":357},"#结果：（2，3，6，2）\n",[288,98791,98792],{"class":290,"line":1814},[288,98793,98794],{"class":357},"#axis=3\n",[288,98796,98797,98799,98801,98803,98805],{"class":290,"line":1819},[288,98798,98734],{"class":298},[288,98800,47687],{"class":5389},[288,98802,344],{"class":294},[288,98804,370],{"class":347},[288,98806,98601],{"class":298},[288,98808,98809],{"class":290,"line":1825},[288,98810,98811],{"class":357},"#结果：（2，3，3，4）\n",[14,98813,98815],{"id":98814},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98817,98818],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98820,98821],{},"①二维数组",[280,98823,98825],{"className":30551,"code":98824,"language":30553,"meta":205,"style":205},"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",[25,98826,98827,98851,98875,98880,98885],{"__ignoreMap":205},[288,98828,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849],{"class":290,"line":291},[288,98830,93479],{"class":298},[288,98832,344],{"class":294},[288,98834,93175],{"class":298},[288,98836,516],{"class":347},[288,98838,675],{"class":298},[288,98840,820],{"class":347},[288,98842,93180],{"class":298},[288,98844,370],{"class":347},[288,98846,675],{"class":298},[288,98848,590],{"class":347},[288,98850,305],{"class":298},[288,98852,98853,98855,98857,98859,98861,98863,98865,98867,98869,98871,98873],{"class":290,"line":206},[288,98854,98360],{"class":298},[288,98856,344],{"class":294},[288,98858,93175],{"class":298},[288,98860,634],{"class":347},[288,98862,675],{"class":298},[288,98864,939],{"class":347},[288,98866,93180],{"class":298},[288,98868,370],{"class":347},[288,98870,675],{"class":298},[288,98872,590],{"class":347},[288,98874,305],{"class":298},[288,98876,98877],{"class":290,"line":1352},[288,98878,98879],{"class":298},"np.hstack((aa,bb))\n",[288,98881,98882],{"class":290,"line":1367},[288,98883,98884],{"class":357},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[288,98886,98887],{"class":290,"line":1373},[288,98888,98889],{"class":357},"#np.hstack([aa,bb])\n",[19,98891,98406],{},[19,98893,98894],{},[200,98895],{"alt":205,"src":98896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98898,98899],{},"等效于concatenate()函数中axis=1时的情况",[19,98901,98902],{},"②三维数组",[280,98904,98906],{"className":30551,"code":98905,"language":30553,"meta":205,"style":205},"#两个三行六列\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",[25,98907,98908,98912,98940,98968,98973,98978],{"__ignoreMap":205},[288,98909,98910],{"class":290,"line":291},[288,98911,98461],{"class":357},[288,98913,98914,98916,98918,98920,98922,98924,98926,98928,98930,98932,98934,98936,98938],{"class":290,"line":206},[288,98915,95694],{"class":298},[288,98917,344],{"class":294},[288,98919,93175],{"class":298},[288,98921,516],{"class":347},[288,98923,675],{"class":298},[288,98925,622],{"class":347},[288,98927,93180],{"class":298},[288,98929,376],{"class":347},[288,98931,675],{"class":298},[288,98933,370],{"class":347},[288,98935,675],{"class":298},[288,98937,641],{"class":347},[288,98939,305],{"class":298},[288,98941,98942,98944,98946,98948,98950,98952,98954,98956,98958,98960,98962,98964,98966],{"class":290,"line":1352},[288,98943,98494],{"class":298},[288,98945,344],{"class":294},[288,98947,93175],{"class":298},[288,98949,634],{"class":347},[288,98951,675],{"class":298},[288,98953,98505],{"class":347},[288,98955,93180],{"class":298},[288,98957,376],{"class":347},[288,98959,675],{"class":298},[288,98961,370],{"class":347},[288,98963,675],{"class":298},[288,98965,641],{"class":347},[288,98967,305],{"class":298},[288,98969,98970],{"class":290,"line":1367},[288,98971,98972],{"class":357},"#使用hstack\n",[288,98974,98975],{"class":290,"line":1373},[288,98976,98977],{"class":298},"np.hstack((aaa,bbb)).shape\n",[288,98979,98980],{"class":290,"line":1387},[288,98981,98982],{"class":357},"#输出：（2，6，6）\n",[14,98984,98986],{"id":98985},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98988,98989],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98991,98821],{},[280,98993,98995],{"className":30551,"code":98994,"language":30553,"meta":205,"style":205},"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",[25,98996,98997,99021,99045,99050,99055,99060],{"__ignoreMap":205},[288,98998,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019],{"class":290,"line":291},[288,99000,93479],{"class":298},[288,99002,344],{"class":294},[288,99004,93175],{"class":298},[288,99006,516],{"class":347},[288,99008,675],{"class":298},[288,99010,820],{"class":347},[288,99012,93180],{"class":298},[288,99014,370],{"class":347},[288,99016,675],{"class":298},[288,99018,590],{"class":347},[288,99020,305],{"class":298},[288,99022,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043],{"class":290,"line":206},[288,99024,98360],{"class":298},[288,99026,344],{"class":294},[288,99028,93175],{"class":298},[288,99030,634],{"class":347},[288,99032,675],{"class":298},[288,99034,939],{"class":347},[288,99036,93180],{"class":298},[288,99038,370],{"class":347},[288,99040,675],{"class":298},[288,99042,590],{"class":347},[288,99044,305],{"class":298},[288,99046,99047],{"class":290,"line":1352},[288,99048,99049],{"class":357},"#vstack 垂直方向进行堆叠\n",[288,99051,99052],{"class":290,"line":1367},[288,99053,99054],{"class":298},"np.vstack((aa,bb))\n",[288,99056,99057],{"class":290,"line":1373},[288,99058,99059],{"class":357},"#与hstack传的参数类似，等价于：\n",[288,99061,99062],{"class":290,"line":1387},[288,99063,99064],{"class":298},"np.vstack([aa,bb])\n",[19,99066,98406],{},[19,99068,99069],{},[200,99070],{"alt":205,"src":99071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99073,98902],{},[280,99075,99077],{"className":30551,"code":99076,"language":30553,"meta":205,"style":205},"#两个三行六列\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",[25,99078,99079,99083,99111,99139,99144,99149],{"__ignoreMap":205},[288,99080,99081],{"class":290,"line":291},[288,99082,98461],{"class":357},[288,99084,99085,99087,99089,99091,99093,99095,99097,99099,99101,99103,99105,99107,99109],{"class":290,"line":206},[288,99086,95694],{"class":298},[288,99088,344],{"class":294},[288,99090,93175],{"class":298},[288,99092,516],{"class":347},[288,99094,675],{"class":298},[288,99096,622],{"class":347},[288,99098,93180],{"class":298},[288,99100,376],{"class":347},[288,99102,675],{"class":298},[288,99104,370],{"class":347},[288,99106,675],{"class":298},[288,99108,641],{"class":347},[288,99110,305],{"class":298},[288,99112,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135,99137],{"class":290,"line":1352},[288,99114,98494],{"class":298},[288,99116,344],{"class":294},[288,99118,93175],{"class":298},[288,99120,634],{"class":347},[288,99122,675],{"class":298},[288,99124,98505],{"class":347},[288,99126,93180],{"class":298},[288,99128,376],{"class":347},[288,99130,675],{"class":298},[288,99132,370],{"class":347},[288,99134,675],{"class":298},[288,99136,641],{"class":347},[288,99138,305],{"class":298},[288,99140,99141],{"class":290,"line":1367},[288,99142,99143],{"class":357},"#使用vstack\n",[288,99145,99146],{"class":290,"line":1373},[288,99147,99148],{"class":298},"np.vstack((aaa,bbb)).shape\n",[288,99150,99151],{"class":290,"line":1387},[288,99152,99153],{"class":357},"#输出：（4，3，6）\n",[14,99155,99157],{"id":99156},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99159,99160],{},"该方法是三维数组特有的方法",[19,99162,99163],{},"也就是说",[19,99165,99166],{},"一维数组拼接方法用：concatenate()",[19,99168,99169],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99171,99172],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99174,99175],{},"四维数组及多维数组只能用concatenate进行拼接",[280,99177,99179],{"className":30551,"code":99178,"language":30553,"meta":205,"style":205},"#两个三行六列\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",[25,99180,99181,99185,99213,99241,99246,99251],{"__ignoreMap":205},[288,99182,99183],{"class":290,"line":291},[288,99184,98461],{"class":357},[288,99186,99187,99189,99191,99193,99195,99197,99199,99201,99203,99205,99207,99209,99211],{"class":290,"line":206},[288,99188,95694],{"class":298},[288,99190,344],{"class":294},[288,99192,93175],{"class":298},[288,99194,516],{"class":347},[288,99196,675],{"class":298},[288,99198,622],{"class":347},[288,99200,93180],{"class":298},[288,99202,376],{"class":347},[288,99204,675],{"class":298},[288,99206,370],{"class":347},[288,99208,675],{"class":298},[288,99210,641],{"class":347},[288,99212,305],{"class":298},[288,99214,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237,99239],{"class":290,"line":1352},[288,99216,98494],{"class":298},[288,99218,344],{"class":294},[288,99220,93175],{"class":298},[288,99222,634],{"class":347},[288,99224,675],{"class":298},[288,99226,98505],{"class":347},[288,99228,93180],{"class":298},[288,99230,376],{"class":347},[288,99232,675],{"class":298},[288,99234,370],{"class":347},[288,99236,675],{"class":298},[288,99238,641],{"class":347},[288,99240,305],{"class":298},[288,99242,99243],{"class":290,"line":1367},[288,99244,99245],{"class":357},"#使用dstack\n",[288,99247,99248],{"class":290,"line":1373},[288,99249,99250],{"class":298},"np.dstack((aaa,bbb)).shape\n",[288,99252,99253],{"class":290,"line":1387},[288,99254,99255],{"class":357},"#结果：（2，3，12）\n",[5299,99257,99258],{},"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":205,"searchDepth":206,"depth":206,"links":99260},[99261,99262,99263,99264],{"id":98200,"depth":206,"text":98201},{"id":98814,"depth":206,"text":98815},{"id":98985,"depth":206,"text":98986},{"id":99156,"depth":206,"text":99157},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98192,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99271,"title":99272,"body":99273,"description":214,"extension":215,"meta":99548,"navigation":217,"path":99549,"seo":99550,"stem":99551,"__hash__":99552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99274,"toc":99546},[99275,99278,99281,99375,99378,99381,99384,99387,99390,99393,99396,99399,99543],[10,99276,99272],{"id":99277},"_7数组转置",[19,99279,99280],{},"使用transpose()函数",[280,99282,99284],{"className":30551,"code":99283,"language":30553,"meta":205,"style":205},"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",[25,99285,99286,99296,99320,99325,99330,99335,99340,99348,99352,99356,99361,99366,99371],{"__ignoreMap":205},[288,99287,99288,99290,99292,99294],{"class":290,"line":291},[288,99289,30565],{"class":294},[288,99291,31553],{"class":298},[288,99293,31556],{"class":294},[288,99295,31559],{"class":298},[288,99297,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318],{"class":290,"line":206},[288,99299,104],{"class":298},[288,99301,344],{"class":294},[288,99303,31890],{"class":298},[288,99305,516],{"class":347},[288,99307,675],{"class":298},[288,99309,820],{"class":347},[288,99311,93180],{"class":298},[288,99313,590],{"class":347},[288,99315,675],{"class":298},[288,99317,370],{"class":347},[288,99319,305],{"class":298},[288,99321,99322],{"class":290,"line":1352},[288,99323,99324],{"class":357},"#二维数组转置\n",[288,99326,99327],{"class":290,"line":1367},[288,99328,99329],{"class":357},"#调用transpose()函数\n",[288,99331,99332],{"class":290,"line":1373},[288,99333,99334],{"class":298},"a.transpose()\n",[288,99336,99337],{"class":290,"line":1387},[288,99338,99339],{"class":357},"#对于二维数组也可以采用.T来实现\n",[288,99341,99342,99345],{"class":290,"line":1393},[288,99343,99344],{"class":298},"a.T",[288,99346,99347],{"class":357},"#与上述代码一样\n",[288,99349,99350],{"class":290,"line":1484},[288,99351,93737],{"class":357},[288,99353,99354],{"class":290,"line":1490},[288,99355,94101],{"class":403},[288,99357,99358],{"class":290,"line":1502},[288,99359,99360],{"class":403},"array([[ 1,  4,  7, 10],\n",[288,99362,99363],{"class":290,"line":1784},[288,99364,99365],{"class":403},"       [ 2,  5,  8, 11],\n",[288,99367,99368],{"class":290,"line":1789},[288,99369,99370],{"class":403},"       [ 3,  6,  9, 12]])\n",[288,99372,99373],{"class":290,"line":1795},[288,99374,94101],{"class":403},[19,99376,99377],{},"也可以使用np.transpose()的形式",[19,99379,99380],{},"#多维数组进行转置 np.transpose()",[19,99382,99383],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99385,99386],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99388,99389],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99391,99392],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99394,99395],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99397,99398],{},"四维及以上的数组也是一样的道理",[280,99400,99402],{"className":30551,"code":99401,"language":30553,"meta":205,"style":205},"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",[25,99403,99404,99432,99437,99442,99447,99465,99470,99502,99507,99512,99517,99538],{"__ignoreMap":205},[288,99405,99406,99408,99410,99412,99414,99416,99418,99420,99422,99424,99426,99428,99430],{"class":290,"line":291},[288,99407,1117],{"class":298},[288,99409,344],{"class":294},[288,99411,93175],{"class":298},[288,99413,516],{"class":347},[288,99415,675],{"class":298},[288,99417,622],{"class":347},[288,99419,93180],{"class":298},[288,99421,370],{"class":347},[288,99423,675],{"class":298},[288,99425,641],{"class":347},[288,99427,675],{"class":298},[288,99429,376],{"class":347},[288,99431,305],{"class":298},[288,99433,99434],{"class":290,"line":206},[288,99435,99436],{"class":298},"x.shape\n",[288,99438,99439],{"class":290,"line":1352},[288,99440,99441],{"class":357},"#结果：（3,6,2）\n",[288,99443,99444],{"class":290,"line":1367},[288,99445,99446],{"class":357},"#使用np.transpose()进行转置 变为(2,6,3)\n",[288,99448,99449,99452,99454,99456,99458,99460,99462],{"class":290,"line":1373},[288,99450,99451],{"class":298},"np.transpose(x,(",[288,99453,376],{"class":347},[288,99455,675],{"class":298},[288,99457,516],{"class":347},[288,99459,675],{"class":298},[288,99461,490],{"class":347},[288,99463,99464],{"class":298},")).shape\n",[288,99466,99467],{"class":290,"line":1387},[288,99468,99469],{"class":357},"#结果：(2,6,3)\n",[288,99471,99472,99474,99476,99478,99480,99482,99484,99486,99488,99490,99492,99494,99496,99498,99500],{"class":290,"line":1393},[288,99473,98679],{"class":298},[288,99475,344],{"class":294},[288,99477,93175],{"class":298},[288,99479,516],{"class":347},[288,99481,675],{"class":298},[288,99483,622],{"class":347},[288,99485,93180],{"class":298},[288,99487,370],{"class":347},[288,99489,675],{"class":298},[288,99491,376],{"class":347},[288,99493,675],{"class":298},[288,99495,516],{"class":347},[288,99497,675],{"class":298},[288,99499,641],{"class":347},[288,99501,305],{"class":298},[288,99503,99504],{"class":290,"line":1484},[288,99505,99506],{"class":298},"aaaa.shape\n",[288,99508,99509],{"class":290,"line":1490},[288,99510,99511],{"class":357},"#结果：（3，2，1，6）\n",[288,99513,99514],{"class":290,"line":1502},[288,99515,99516],{"class":357},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[288,99518,99519,99522,99524,99526,99528,99530,99532,99534,99536],{"class":290,"line":1784},[288,99520,99521],{"class":298},"np.transpose(aaaa,(",[288,99523,516],{"class":347},[288,99525,675],{"class":298},[288,99527,376],{"class":347},[288,99529,675],{"class":298},[288,99531,490],{"class":347},[288,99533,675],{"class":298},[288,99535,370],{"class":347},[288,99537,99464],{"class":298},[288,99539,99540],{"class":290,"line":1789},[288,99541,99542],{"class":357},"#结果：(2,1,3,6)\n",[5299,99544,99545],{},"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":205,"searchDepth":206,"depth":206,"links":99547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99272,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99554,"title":99555,"body":99556,"description":214,"extension":215,"meta":100290,"navigation":217,"path":100291,"seo":100292,"stem":100293,"__hash__":100294},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99557,"toc":100288},[99558,99561,99564,99567,99570,99573,99576,99579,99582,99691,99694,99697,100285],[10,99559,99555],{"id":99560},"_8数组分割",[19,99562,99563],{},"split分割",[19,99565,99566],{},"numpy.split(ary,indics_or_sections,axis)",[19,99568,99569],{},"解释：",[19,99571,99572],{},"ary:被分割的数组",[19,99574,99575],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99577,99578],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99580,99581],{},"①一维数组的分割",[280,99583,99585],{"className":30551,"code":99584,"language":30553,"meta":205,"style":205},"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",[25,99586,99587,99603,99608,99617,99621,99626,99634,99638,99643,99648,99661,99665,99670,99682,99686],{"__ignoreMap":205},[288,99588,99589,99591,99593,99595,99597,99599,99601],{"class":290,"line":291},[288,99590,104],{"class":298},[288,99592,344],{"class":294},[288,99594,93175],{"class":298},[288,99596,516],{"class":347},[288,99598,675],{"class":298},[288,99600,717],{"class":347},[288,99602,305],{"class":298},[288,99604,99605],{"class":290,"line":206},[288,99606,99607],{"class":357},"#如果传入整数，必须能够平分，否则会报错\n",[288,99609,99610,99613,99615],{"class":290,"line":1352},[288,99611,99612],{"class":298},"np.split(a,",[288,99614,376],{"class":347},[288,99616,305],{"class":298},[288,99618,99619],{"class":290,"line":1367},[288,99620,93737],{"class":357},[288,99622,99623],{"class":290,"line":1373},[288,99624,99625],{"class":357},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[288,99627,99628,99630,99632],{"class":290,"line":1387},[288,99629,99612],{"class":298},[288,99631,590],{"class":347},[288,99633,305],{"class":298},[288,99635,99636],{"class":290,"line":1393},[288,99637,93737],{"class":357},[288,99639,99640],{"class":290,"line":1484},[288,99641,99642],{"class":357},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[288,99644,99645],{"class":290,"line":1490},[288,99646,99647],{"class":357},"#传入数组\n",[288,99649,99650,99653,99655,99657,99659],{"class":290,"line":1502},[288,99651,99652],{"class":298},"np.split(a,[",[288,99654,370],{"class":347},[288,99656,675],{"class":298},[288,99658,616],{"class":347},[288,99660,4829],{"class":298},[288,99662,99663],{"class":290,"line":1784},[288,99664,93737],{"class":357},[288,99666,99667],{"class":290,"line":1789},[288,99668,99669],{"class":357},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[288,99671,99672,99674,99676,99678,99680],{"class":290,"line":1795},[288,99673,99652],{"class":298},[288,99675,616],{"class":347},[288,99677,675],{"class":298},[288,99679,666],{"class":347},[288,99681,4829],{"class":298},[288,99683,99684],{"class":290,"line":1800},[288,99685,93737],{"class":357},[288,99687,99688],{"class":290,"line":1814},[288,99689,99690],{"class":357},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99692,99693],{},"②二维数组的分割",[19,99695,99696],{},"使用split()",[280,99698,99700],{"className":30551,"code":99699,"language":30553,"meta":205,"style":205},"#二维数组分割\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",[25,99701,99702,99707,99731,99736,99745,99749,99753,99758,99763,99768,99773,99778,99783,99788,99792,99805,99809,99813,99817,99821,99825,99830,99835,99840,99844,99849,99865,99869,99873,99878,99883,99888,99893,99898,99903,99908,99913,99918,99923,99928,99933,99938,99943,99948,99953,99958,99963,99967,99971,99991,99995,99999,100004,100009,100014,100019,100024,100029,100034,100039,100044,100049,100054,100059,100064,100069,100074,100079,100084,100089,100093,100098,100107,100111,100115,100119,100123,100127,100131,100135,100139,100143,100152,100156,100160,100164,100168,100172,100176,100180,100184,100188,100192,100196,100200,100204,100208,100212,100216,100220,100224,100228,100232,100236,100249,100253,100257,100261,100265,100269,100273,100277,100281],{"__ignoreMap":205},[288,99703,99704],{"class":290,"line":291},[288,99705,99706],{"class":357},"#二维数组分割\n",[288,99708,99709,99711,99713,99715,99717,99719,99721,99723,99725,99727,99729],{"class":290,"line":206},[288,99710,93479],{"class":298},[288,99712,344],{"class":294},[288,99714,93175],{"class":298},[288,99716,516],{"class":347},[288,99718,675],{"class":298},[288,99720,622],{"class":347},[288,99722,93180],{"class":298},[288,99724,641],{"class":347},[288,99726,675],{"class":298},[288,99728,641],{"class":347},[288,99730,305],{"class":298},[288,99732,99733],{"class":290,"line":1352},[288,99734,99735],{"class":357},"#默认axis=0  传入整数平均分,按行来的\n",[288,99737,99738,99741,99743],{"class":290,"line":1367},[288,99739,99740],{"class":298},"np.split(aa,",[288,99742,370],{"class":347},[288,99744,305],{"class":298},[288,99746,99747],{"class":290,"line":1373},[288,99748,95937],{"class":357},[288,99750,99751],{"class":290,"line":1387},[288,99752,94101],{"class":403},[288,99754,99755],{"class":290,"line":1393},[288,99756,99757],{"class":403},"[array([[ 1,  2,  3,  4,  5,  6],\n",[288,99759,99760],{"class":290,"line":1484},[288,99761,99762],{"class":403},"        [ 7,  8,  9, 10, 11, 12]]),\n",[288,99764,99765],{"class":290,"line":1490},[288,99766,99767],{"class":403}," array([[13, 14, 15, 16, 17, 18],\n",[288,99769,99770],{"class":290,"line":1502},[288,99771,99772],{"class":403},"        [19, 20, 21, 22, 23, 24]]),\n",[288,99774,99775],{"class":290,"line":1784},[288,99776,99777],{"class":403}," array([[25, 26, 27, 28, 29, 30],\n",[288,99779,99780],{"class":290,"line":1789},[288,99781,99782],{"class":403},"        [31, 32, 33, 34, 35, 36]])]\n",[288,99784,99785],{"class":290,"line":1795},[288,99786,99787],{"class":403}," '''\n",[288,99789,99790],{"class":290,"line":1800},[288,99791,99647],{"class":357},[288,99793,99794,99797,99799,99801,99803],{"class":290,"line":1814},[288,99795,99796],{"class":298},"np.split(aa,[",[288,99798,376],{"class":347},[288,99800,675],{"class":298},[288,99802,616],{"class":347},[288,99804,4829],{"class":298},[288,99806,99807],{"class":290,"line":1819},[288,99808,95937],{"class":357},[288,99810,99811],{"class":290,"line":1825},[288,99812,94101],{"class":403},[288,99814,99815],{"class":290,"line":1846},[288,99816,99757],{"class":403},[288,99818,99819],{"class":290,"line":1851},[288,99820,99762],{"class":403},[288,99822,99823],{"class":290,"line":1865},[288,99824,99767],{"class":403},[288,99826,99827],{"class":290,"line":1870},[288,99828,99829],{"class":403},"        [19, 20, 21, 22, 23, 24],\n",[288,99831,99832],{"class":290,"line":1899},[288,99833,99834],{"class":403},"        [25, 26, 27, 28, 29, 30]]),\n",[288,99836,99837],{"class":290,"line":1904},[288,99838,99839],{"class":403}," array([[31, 32, 33, 34, 35, 36]])]\n",[288,99841,99842],{"class":290,"line":1921},[288,99843,94101],{"class":403},[288,99845,99846],{"class":290,"line":1926},[288,99847,99848],{"class":357},"#axis=1 按照列来分\n",[288,99850,99851,99853,99855,99857,99859,99861,99863],{"class":290,"line":1931},[288,99852,99740],{"class":298},[288,99854,370],{"class":347},[288,99856,675],{"class":298},[288,99858,47687],{"class":5389},[288,99860,344],{"class":294},[288,99862,516],{"class":347},[288,99864,305],{"class":298},[288,99866,99867],{"class":290,"line":1936},[288,99868,95937],{"class":357},[288,99870,99871],{"class":290,"line":1950},[288,99872,94101],{"class":403},[288,99874,99875],{"class":290,"line":1955},[288,99876,99877],{"class":403},"[array([[ 1,  2],\n",[288,99879,99880],{"class":290,"line":2749},[288,99881,99882],{"class":403},"        [ 7,  8],\n",[288,99884,99885],{"class":290,"line":2763},[288,99886,99887],{"class":403},"        [13, 14],\n",[288,99889,99890],{"class":290,"line":2771},[288,99891,99892],{"class":403},"        [19, 20],\n",[288,99894,99895],{"class":290,"line":2776},[288,99896,99897],{"class":403},"        [25, 26],\n",[288,99899,99900],{"class":290,"line":2782},[288,99901,99902],{"class":403},"        [31, 32]]),\n",[288,99904,99905],{"class":290,"line":2788},[288,99906,99907],{"class":403}," array([[ 3,  4],\n",[288,99909,99910],{"class":290,"line":2793},[288,99911,99912],{"class":403},"        [ 9, 10],\n",[288,99914,99915],{"class":290,"line":8121},[288,99916,99917],{"class":403},"        [15, 16],\n",[288,99919,99920],{"class":290,"line":8145},[288,99921,99922],{"class":403},"        [21, 22],\n",[288,99924,99925],{"class":290,"line":8150},[288,99926,99927],{"class":403},"        [27, 28],\n",[288,99929,99930],{"class":290,"line":8156},[288,99931,99932],{"class":403},"        [33, 34]]),\n",[288,99934,99935],{"class":290,"line":8183},[288,99936,99937],{"class":403}," array([[ 5,  6],\n",[288,99939,99940],{"class":290,"line":8188},[288,99941,99942],{"class":403},"        [11, 12],\n",[288,99944,99945],{"class":290,"line":8194},[288,99946,99947],{"class":403},"        [17, 18],\n",[288,99949,99950],{"class":290,"line":8206},[288,99951,99952],{"class":403},"        [23, 24],\n",[288,99954,99955],{"class":290,"line":8218},[288,99956,99957],{"class":403},"        [29, 30],\n",[288,99959,99960],{"class":290,"line":8230},[288,99961,99962],{"class":403},"        [35, 36]])]\n",[288,99964,99965],{"class":290,"line":9889},[288,99966,99787],{"class":403},[288,99968,99969],{"class":290,"line":9914},[288,99970,99647],{"class":357},[288,99972,99973,99975,99977,99979,99981,99983,99985,99987,99989],{"class":290,"line":9937},[288,99974,99796],{"class":298},[288,99976,516],{"class":347},[288,99978,675],{"class":298},[288,99980,376],{"class":347},[288,99982,41782],{"class":298},[288,99984,47687],{"class":5389},[288,99986,344],{"class":294},[288,99988,516],{"class":347},[288,99990,305],{"class":298},[288,99992,99993],{"class":290,"line":9961},[288,99994,93737],{"class":357},[288,99996,99997],{"class":290,"line":9966},[288,99998,94101],{"class":403},[288,100000,100001],{"class":290,"line":9971},[288,100002,100003],{"class":403},"[array([[ 1],\n",[288,100005,100006],{"class":290,"line":9976},[288,100007,100008],{"class":403},"        [ 7],\n",[288,100010,100011],{"class":290,"line":9985},[288,100012,100013],{"class":403},"        [13],\n",[288,100015,100016],{"class":290,"line":9990},[288,100017,100018],{"class":403},"        [19],\n",[288,100020,100021],{"class":290,"line":9996},[288,100022,100023],{"class":403},"        [25],\n",[288,100025,100026],{"class":290,"line":10017},[288,100027,100028],{"class":403},"        [31]]),\n",[288,100030,100031],{"class":290,"line":10023},[288,100032,100033],{"class":403}," array([[ 2],\n",[288,100035,100036],{"class":290,"line":10037},[288,100037,100038],{"class":403},"        [ 8],\n",[288,100040,100041],{"class":290,"line":10043},[288,100042,100043],{"class":403},"        [14],\n",[288,100045,100046],{"class":290,"line":10070},[288,100047,100048],{"class":403},"        [20],\n",[288,100050,100051],{"class":290,"line":10079},[288,100052,100053],{"class":403},"        [26],\n",[288,100055,100056],{"class":290,"line":10085},[288,100057,100058],{"class":403},"        [32]]),\n",[288,100060,100061],{"class":290,"line":10093},[288,100062,100063],{"class":403}," array([[ 3,  4,  5,  6],\n",[288,100065,100066],{"class":290,"line":10098},[288,100067,100068],{"class":403},"        [ 9, 10, 11, 12],\n",[288,100070,100071],{"class":290,"line":16777},[288,100072,100073],{"class":403},"        [15, 16, 17, 18],\n",[288,100075,100076],{"class":290,"line":16783},[288,100077,100078],{"class":403},"        [21, 22, 23, 24],\n",[288,100080,100081],{"class":290,"line":16806},[288,100082,100083],{"class":403},"        [27, 28, 29, 30],\n",[288,100085,100086],{"class":290,"line":16812},[288,100087,100088],{"class":403},"        [33, 34, 35, 36]])]\n",[288,100090,100091],{"class":290,"line":16835},[288,100092,94101],{"class":403},[288,100094,100095],{"class":290,"line":16849},[288,100096,100097],{"class":357},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[288,100099,100100,100103,100105],{"class":290,"line":16869},[288,100101,100102],{"class":298},"np.vsplit(aa,",[288,100104,370],{"class":347},[288,100106,305],{"class":298},[288,100108,100109],{"class":290,"line":16875},[288,100110,93737],{"class":357},[288,100112,100113],{"class":290,"line":16886},[288,100114,94101],{"class":403},[288,100116,100117],{"class":290,"line":16909},[288,100118,99757],{"class":403},[288,100120,100121],{"class":290,"line":16931},[288,100122,99762],{"class":403},[288,100124,100125],{"class":290,"line":16936},[288,100126,99767],{"class":403},[288,100128,100129],{"class":290,"line":16942},[288,100130,99772],{"class":403},[288,100132,100133],{"class":290,"line":16956},[288,100134,99777],{"class":403},[288,100136,100137],{"class":290,"line":16969},[288,100138,99782],{"class":403},[288,100140,100141],{"class":290,"line":16974},[288,100142,94101],{"class":403},[288,100144,100145,100148,100150],{"class":290,"line":16988},[288,100146,100147],{"class":298},"np.hsplit(aa,",[288,100149,370],{"class":347},[288,100151,305],{"class":298},[288,100153,100154],{"class":290,"line":16993},[288,100155,93737],{"class":357},[288,100157,100158],{"class":290,"line":16999},[288,100159,94101],{"class":403},[288,100161,100162],{"class":290,"line":17004},[288,100163,99877],{"class":403},[288,100165,100166],{"class":290,"line":17018},[288,100167,99882],{"class":403},[288,100169,100170],{"class":290,"line":17023},[288,100171,99887],{"class":403},[288,100173,100174],{"class":290,"line":17028},[288,100175,99892],{"class":403},[288,100177,100178],{"class":290,"line":17042},[288,100179,99897],{"class":403},[288,100181,100182],{"class":290,"line":17054},[288,100183,99902],{"class":403},[288,100185,100186],{"class":290,"line":17059},[288,100187,99907],{"class":403},[288,100189,100190],{"class":290,"line":17072},[288,100191,99912],{"class":403},[288,100193,100194],{"class":290,"line":17077},[288,100195,99917],{"class":403},[288,100197,100198],{"class":290,"line":17082},[288,100199,99922],{"class":403},[288,100201,100202],{"class":290,"line":17087},[288,100203,99927],{"class":403},[288,100205,100206],{"class":290,"line":17100},[288,100207,99932],{"class":403},[288,100209,100210],{"class":290,"line":17105},[288,100211,99937],{"class":403},[288,100213,100214],{"class":290,"line":32806},[288,100215,99942],{"class":403},[288,100217,100218],{"class":290,"line":32812},[288,100219,99947],{"class":403},[288,100221,100222],{"class":290,"line":32818},[288,100223,99952],{"class":403},[288,100225,100226],{"class":290,"line":32824},[288,100227,99957],{"class":403},[288,100229,100230],{"class":290,"line":32830},[288,100231,99962],{"class":403},[288,100233,100234],{"class":290,"line":32841},[288,100235,94101],{"class":403},[288,100237,100238,100241,100243,100245,100247],{"class":290,"line":32847},[288,100239,100240],{"class":298},"np.vsplit(aa,[",[288,100242,376],{"class":347},[288,100244,675],{"class":298},[288,100246,616],{"class":347},[288,100248,4829],{"class":298},[288,100250,100251],{"class":290,"line":32867},[288,100252,93737],{"class":357},[288,100254,100255],{"class":290,"line":32873},[288,100256,94101],{"class":403},[288,100258,100259],{"class":290,"line":32884},[288,100260,99757],{"class":403},[288,100262,100263],{"class":290,"line":32890},[288,100264,99762],{"class":403},[288,100266,100267],{"class":290,"line":32896},[288,100268,99767],{"class":403},[288,100270,100271],{"class":290,"line":32902},[288,100272,99829],{"class":403},[288,100274,100275],{"class":290,"line":32908},[288,100276,99834],{"class":403},[288,100278,100279],{"class":290,"line":32914},[288,100280,99839],{"class":403},[288,100282,100283],{"class":290,"line":32920},[288,100284,99787],{"class":403},[5299,100286,100287],{},"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":205,"searchDepth":206,"depth":206,"links":100289},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99555,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100296,"title":100297,"body":100298,"description":214,"extension":215,"meta":100792,"navigation":217,"path":100793,"seo":100794,"stem":100795,"__hash__":100796},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100299,"toc":100783},[100300,100303,100306,100331,100335,100394,100446,100450,100452,100488,100542,100544,100582,100653,100657,100662,100666,100669,100702,100705,100709,100712,100715,100718,100721,100726,100730,100733,100736,100739,100742,100747,100751,100756,100759,100780],[10,100301,100297],{"id":100302},"_9数学函数",[19,100304,100305],{},"补充回顾：python的列表推导式",[280,100307,100309],{"className":30551,"code":100308,"language":30553,"meta":205,"style":205},"[1\u002Fi for i in a]\n",[25,100310,100311],{"__ignoreMap":205},[288,100312,100313,100315,100317,100319,100322,100324,100326,100328],{"class":290,"line":291},[288,100314,1187],{"class":298},[288,100316,516],{"class":347},[288,100318,881],{"class":294},[288,100320,100321],{"class":298},"i ",[288,100323,3197],{"class":294},[288,100325,9611],{"class":298},[288,100327,26216],{"class":294},[288,100329,100330],{"class":298}," a]\n",[14,100332,100334],{"id":100333},"_91-求倒数","9.1 求倒数",[280,100336,100338],{"className":30551,"code":100337,"language":30553,"meta":205,"style":205},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[25,100339,100340,100345,100373,100385],{"__ignoreMap":205},[288,100341,100342],{"class":290,"line":291},[288,100343,100344],{"class":357},"#数组求倒数\n",[288,100346,100347,100349,100351,100353,100355,100357,100359,100361,100363,100365,100367,100369,100371],{"class":290,"line":206},[288,100348,104],{"class":298},[288,100350,344],{"class":294},[288,100352,1187],{"class":298},[288,100354,516],{"class":347},[288,100356,675],{"class":298},[288,100358,376],{"class":347},[288,100360,675],{"class":298},[288,100362,370],{"class":347},[288,100364,675],{"class":298},[288,100366,590],{"class":347},[288,100368,675],{"class":298},[288,100370,616],{"class":347},[288,100372,33419],{"class":298},[288,100374,100375,100377,100379,100382],{"class":290,"line":1352},[288,100376,560],{"class":298},[288,100378,344],{"class":294},[288,100380,100381],{"class":298},"np.array(a)",[288,100383,100384],{"class":357},"#将列表转换为数组\n",[288,100386,100387,100389,100391],{"class":290,"line":1367},[288,100388,516],{"class":347},[288,100390,881],{"class":294},[288,100392,100393],{"class":298},"b\n",[280,100395,100397],{"className":30551,"code":100396,"language":30553,"meta":205,"style":205},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[25,100398,100399,100427,100436,100441],{"__ignoreMap":205},[288,100400,100401,100403,100405,100407,100409,100411,100413,100415,100417,100419,100421,100423,100425],{"class":290,"line":291},[288,100402,104],{"class":298},[288,100404,344],{"class":294},[288,100406,1187],{"class":298},[288,100408,516],{"class":347},[288,100410,675],{"class":298},[288,100412,376],{"class":347},[288,100414,675],{"class":298},[288,100416,370],{"class":347},[288,100418,675],{"class":298},[288,100420,590],{"class":347},[288,100422,675],{"class":298},[288,100424,616],{"class":347},[288,100426,33419],{"class":298},[288,100428,100429,100431,100433],{"class":290,"line":206},[288,100430,560],{"class":298},[288,100432,344],{"class":294},[288,100434,100435],{"class":298},"np.array(a)\n",[288,100437,100438],{"class":290,"line":1352},[288,100439,100440],{"class":357},"#调用numpy中的函数reciprocal()\n",[288,100442,100443],{"class":290,"line":1367},[288,100444,100445],{"class":298},"np.reciprocal(b)\n",[14,100447,100449],{"id":100448},"_92-求平方","9.2 求平方",[19,100451,94703],{},[280,100453,100455],{"className":30551,"code":100454,"language":30553,"meta":205,"style":205},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[25,100456,100457,100462,100467,100483],{"__ignoreMap":205},[288,100458,100459],{"class":290,"line":291},[288,100460,100461],{"class":357},"#square()，求平方\n",[288,100463,100464],{"class":290,"line":206},[288,100465,100466],{"class":357},"#一维数组\n",[288,100468,100469,100471,100473,100475,100477,100479,100481],{"class":290,"line":1352},[288,100470,104],{"class":298},[288,100472,344],{"class":294},[288,100474,93175],{"class":298},[288,100476,516],{"class":347},[288,100478,675],{"class":298},[288,100480,743],{"class":347},[288,100482,305],{"class":298},[288,100484,100485],{"class":290,"line":1367},[288,100486,100487],{"class":298},"np.square(a)\n",[280,100489,100491],{"className":30551,"code":100490,"language":30553,"meta":205,"style":205},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[25,100492,100493,100498,100503,100524],{"__ignoreMap":205},[288,100494,100495],{"class":290,"line":291},[288,100496,100497],{"class":357},"#或者通过循环遍历的形式来计算\n",[288,100499,100500],{"class":290,"line":206},[288,100501,100502],{"class":357},"#这是一个列表\n",[288,100504,100505,100508,100510,100512,100514,100516,100518,100521],{"class":290,"line":1352},[288,100506,100507],{"class":298},"[i",[288,100509,752],{"class":294},[288,100511,100321],{"class":298},[288,100513,3197],{"class":294},[288,100515,9611],{"class":298},[288,100517,26216],{"class":294},[288,100519,100520],{"class":298}," a]",[288,100522,100523],{"class":357},"#这个求完之后在数列当中\n",[288,100525,100526,100529,100531,100533,100535,100537,100539],{"class":290,"line":1367},[288,100527,100528],{"class":298},"np.array([i",[288,100530,752],{"class":294},[288,100532,100321],{"class":298},[288,100534,3197],{"class":294},[288,100536,9611],{"class":298},[288,100538,26216],{"class":294},[288,100540,100541],{"class":298}," a])\n",[19,100543,93464],{},[280,100545,100547],{"className":30551,"code":100546,"language":30553,"meta":205,"style":205},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[25,100548,100549,100553,100577],{"__ignoreMap":205},[288,100550,100551],{"class":290,"line":291},[288,100552,93474],{"class":357},[288,100554,100555,100557,100559,100561,100563,100565,100567,100569,100571,100573,100575],{"class":290,"line":206},[288,100556,93479],{"class":298},[288,100558,344],{"class":294},[288,100560,93175],{"class":298},[288,100562,516],{"class":347},[288,100564,675],{"class":298},[288,100566,820],{"class":347},[288,100568,93180],{"class":298},[288,100570,590],{"class":347},[288,100572,675],{"class":298},[288,100574,370],{"class":347},[288,100576,305],{"class":298},[288,100578,100579],{"class":290,"line":1352},[288,100580,100581],{"class":298},"np.square(aa)\n",[280,100583,100585],{"className":30551,"code":100584,"language":30553,"meta":205,"style":205},"#传统的方式\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",[25,100586,100587,100592,100601,100617,100633,100648],{"__ignoreMap":205},[288,100588,100589],{"class":290,"line":291},[288,100590,100591],{"class":357},"#传统的方式\n",[288,100593,100594,100596,100598],{"class":290,"line":206},[288,100595,98360],{"class":298},[288,100597,344],{"class":294},[288,100599,100600],{"class":298},"np.empty_like(aa)\n",[288,100602,100603,100605,100607,100609,100611,100613,100615],{"class":290,"line":1352},[288,100604,3197],{"class":294},[288,100606,9611],{"class":298},[288,100608,26216],{"class":294},[288,100610,32616],{"class":347},[288,100612,299],{"class":298},[288,100614,590],{"class":347},[288,100616,30959],{"class":298},[288,100618,100619,100621,100623,100625,100627,100629,100631],{"class":290,"line":1367},[288,100620,3373],{"class":294},[288,100622,9673],{"class":298},[288,100624,26216],{"class":294},[288,100626,32616],{"class":347},[288,100628,299],{"class":298},[288,100630,370],{"class":347},[288,100632,30959],{"class":298},[288,100634,100635,100638,100640,100643,100645],{"class":290,"line":1373},[288,100636,100637],{"class":298},"        bb[i,j]",[288,100639,344],{"class":294},[288,100641,100642],{"class":298},"aa[i,j]",[288,100644,752],{"class":294},[288,100646,100647],{"class":298},"aa[i,j]\n",[288,100649,100650],{"class":290,"line":1387},[288,100651,100652],{"class":298},"bb\n",[14,100654,100656],{"id":100655},"_93-求各元素的符号","9.3 求各元素的符号",[19,100658,100659],{},[200,100660],{"alt":205,"src":100661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100663,100665],{"id":100664},"_94-modf函数","9.4 modf函数",[19,100667,100668],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[280,100670,100672],{"className":30551,"code":100671,"language":30553,"meta":205,"style":205},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[25,100673,100674,100697],{"__ignoreMap":205},[288,100675,100676,100678,100680,100682,100684,100686,100688,100690,100692,100695],{"class":290,"line":291},[288,100677,104],{"class":298},[288,100679,344],{"class":294},[288,100681,93175],{"class":298},[288,100683,829],{"class":294},[288,100685,743],{"class":347},[288,100687,675],{"class":298},[288,100689,743],{"class":347},[288,100691,675],{"class":298},[288,100693,100694],{"class":347},"0.3",[288,100696,305],{"class":298},[288,100698,100699],{"class":290,"line":206},[288,100700,100701],{"class":298},"np.modf(a)\n",[19,100703,100704],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100706,100708],{"id":100707},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100710,100711],{},"np.cell()",[19,100713,100714],{},"np.floor()",[19,100716,100717],{},"np.rint()",[19,100719,100720],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100722,100723],{},[200,100724],{"alt":205,"src":100725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100727,100729],{"id":100728},"_96-around函数","9.6 around()函数",[19,100731,100732],{},"around()函数也可以实现对数的小数位数进行操作",[19,100734,100735],{},"其中的参数：",[19,100737,100738],{},"1.要传的数组",[19,100740,100741],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100743,100744],{},[200,100745],{"alt":205,"src":100746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100748,100750],{"id":100749},"_97-三角函数","9.7 三角函数",[19,100752,100753],{},[200,100754],{"alt":205,"src":100755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100757,100758],{},"引入图像模块非常重要",[280,100760,100762],{"className":30551,"code":100761,"language":30553,"meta":205,"style":205},"from matplotlib import pyplot as plt\n",[25,100763,100764],{"__ignoreMap":205},[288,100765,100766,100768,100771,100773,100776,100778],{"class":290,"line":291},[288,100767,30910],{"class":294},[288,100769,100770],{"class":298}," matplotlib ",[288,100772,30565],{"class":294},[288,100774,100775],{"class":298}," pyplot ",[288,100777,31556],{"class":294},[288,100779,31610],{"class":298},[5299,100781,100782],{},"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":205,"searchDepth":206,"depth":206,"links":100784},[100785,100786,100787,100788,100789,100790,100791],{"id":100333,"depth":206,"text":100334},{"id":100448,"depth":206,"text":100449},{"id":100655,"depth":206,"text":100656},{"id":100664,"depth":206,"text":100665},{"id":100707,"depth":206,"text":100708},{"id":100728,"depth":206,"text":100729},{"id":100749,"depth":206,"text":100750},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100297,"description":214},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100798,"title":100799,"body":100800,"description":214,"extension":215,"meta":100804,"navigation":217,"path":100805,"seo":100806,"stem":100807,"__hash__":100808},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100801,"toc":100802},[],{"title":205,"searchDepth":206,"depth":206,"links":100803},[],{"category":50593},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100799,"description":214},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100810,"title":100811,"body":100812,"description":205,"extension":215,"meta":102820,"navigation":217,"path":102821,"seo":102822,"stem":102823,"__hash__":102824},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100813,"toc":102796},[100814,100817,100821,100824,100827,100833,100836,100859,100862,100896,100899,100940,100944,100947,101040,101043,101087,101090,101107,101110,101124,101127,101130,101175,101178,101215,101219,101222,101228,101233,101253,101257,101260,101326,101329,101347,101351,101354,101383,101393,101399,101403,101406,101412,101423,101427,101430,101460,101463,101743,101746,101749,101760,101763,101766,101788,101795,101798,101816,101819,101822,101836,101844,101847,101873,101879,101882,101885,101895,101907,101927,101936,101956,101966,101990,102003,102017,102022,102063,102080,102105,102117,102137,102143,102188,102207,102224,102237,102253,102260,102272,102281,102316,102337,102362,102375,102399,102414,102439,102442,102463,102472,102475,102486,102490,102493,102499,102511,102518,102522,102525,102537,102540,102554,102557,102567,102577,102580,102620,102623,102627,102633,102636,102650,102654,102657,102690,102694,102697,102720,102728,102731,102737,102743,102746,102749,102777,102781,102784,102790,102793],[10,100815,100811],{"id":100816},"_1环境安装与第一个-mujoco-程序",[14,100818,100820],{"id":100819},"_1目标说明","1.目标说明",[19,100822,100823],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100825,100826],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[280,100828,100831],{"className":100829,"code":100830,"language":5360,"meta":205},[5358],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[25,100832,100830],{"__ignoreMap":205},[19,100834,100835],{},"需要掌握:",[243,100837,100838,100841,100844,100849,100854],{},[246,100839,100840],{},"Fedora 44 下 MuJoCo 的系统依赖",[246,100842,100843],{},"Python 虚拟环境创建",[246,100845,100846],{},[25,100847,100848],{},"mujoco.MjModel",[246,100850,100851],{},[25,100852,100853],{},"mujoco.MjData",[246,100855,100856],{},[25,100857,100858],{},"mujoco.mj_step(model, data)",[19,100860,100861],{},"MuJoCo 中最重要的两个对象:",[436,100863,100864,100874],{},[439,100865,100866],{},[442,100867,100868,100871],{},[445,100869,100870],{"align":23909},"对象",[445,100872,100873],{"align":23909},"含义",[483,100875,100876,100886],{},[442,100877,100878,100883],{},[488,100879,100880],{"align":23909},[25,100881,100882],{},"MjModel",[488,100884,100885],{"align":23909},"模型结构，来自 XML，基本不随时间变化",[442,100887,100888,100893],{},[488,100889,100890],{"align":23909},[25,100891,100892],{},"MjData",[488,100894,100895],{"align":23909},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100897,100898],{},"可以先用一个类比理解：",[436,100900,100901,100911],{},[439,100902,100903],{},[442,100904,100905,100908],{},[445,100906,100907],{"align":23909},"类比",[445,100909,100910],{"align":23909},"MuJoCo 对象",[483,100912,100913,100922,100931],{},[442,100914,100915,100918],{},[488,100916,100917],{"align":23909},"游戏地图和角色配置",[488,100919,100920],{"align":23909},[25,100921,100882],{},[442,100923,100924,100927],{},[488,100925,100926],{"align":23909},"游戏运行到当前帧的状态",[488,100928,100929],{"align":23909},[25,100930,100892],{},[442,100932,100933,100936],{},[488,100934,100935],{"align":23909},"前进一帧",[488,100937,100938],{"align":23909},[25,100939,100858],{},[14,100941,100943],{"id":100942},"_2环境与依赖安装","2.环境与依赖安装",[19,100945,100946],{},"Fedora 44 系统依赖:",[280,100948,100950],{"className":23995,"code":100949,"language":23997,"meta":205,"style":205},"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",[25,100951,100952,100964,100977,100990,101000,101010,101029],{"__ignoreMap":205},[288,100953,100954,100956,100958,100960,100962],{"class":290,"line":291},[288,100955,24749],{"class":2135},[288,100957,26488],{"class":403},[288,100959,24007],{"class":403},[288,100961,26573],{"class":347},[288,100963,24851],{"class":347},[288,100965,100966,100969,100972,100975],{"class":290,"line":206},[288,100967,100968],{"class":403},"  python3",[288,100970,100971],{"class":403}," python3-pip",[288,100973,100974],{"class":403}," python3-virtualenv",[288,100976,24851],{"class":347},[288,100978,100979,100982,100985,100988],{"class":290,"line":1352},[288,100980,100981],{"class":403},"  mesa-libGL",[288,100983,100984],{"class":403}," mesa-libGLU",[288,100986,100987],{"class":403}," mesa-dri-drivers",[288,100989,24851],{"class":347},[288,100991,100992,100995,100998],{"class":290,"line":1367},[288,100993,100994],{"class":403},"  libglvnd-glx",[288,100996,100997],{"class":403}," libglvnd-opengl",[288,100999,24851],{"class":347},[288,101001,101002,101005,101008],{"class":290,"line":1373},[288,101003,101004],{"class":403},"  glfw",[288,101006,101007],{"class":403}," glfw-devel",[288,101009,24851],{"class":347},[288,101011,101012,101015,101018,101021,101024,101027],{"class":290,"line":1387},[288,101013,101014],{"class":403},"  libX11",[288,101016,101017],{"class":403}," libXcursor",[288,101019,101020],{"class":403}," libXi",[288,101022,101023],{"class":403}," libXinerama",[288,101025,101026],{"class":403}," libXrandr",[288,101028,24851],{"class":347},[288,101030,101031,101034,101037],{"class":290,"line":1393},[288,101032,101033],{"class":403},"  gcc",[288,101035,101036],{"class":403}," gcc-c++",[288,101038,101039],{"class":403}," make\n",[19,101041,101042],{},"创建 Python 环境:",[280,101044,101046],{"className":23995,"code":101045,"language":23997,"meta":205,"style":205},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[25,101047,101048,101062,101070],{"__ignoreMap":205},[288,101049,101050,101053,101056,101059],{"class":290,"line":291},[288,101051,101052],{"class":2135},"python3",[288,101054,101055],{"class":347}," -m",[288,101057,101058],{"class":403}," venv",[288,101060,101061],{"class":403}," .venv\n",[288,101063,101064,101067],{"class":290,"line":206},[288,101065,101066],{"class":347},"source",[288,101068,101069],{"class":403}," .venv\u002Fbin\u002Factivate\n",[288,101071,101072,101074,101076,101079,101081,101084],{"class":290,"line":1352},[288,101073,30553],{"class":2135},[288,101075,101055],{"class":347},[288,101077,101078],{"class":403}," pip",[288,101080,24007],{"class":403},[288,101082,101083],{"class":347}," --upgrade",[288,101085,101086],{"class":403}," pip\n",[19,101088,101089],{},"pip 安装:",[280,101091,101093],{"className":23995,"code":101092,"language":23997,"meta":205,"style":205},"pip install \"mujoco>=2.3\" numpy\n",[25,101094,101095],{"__ignoreMap":205},[288,101096,101097,101099,101101,101104],{"class":290,"line":291},[288,101098,24004],{"class":2135},[288,101100,24007],{"class":403},[288,101102,101103],{"class":403}," \"mujoco>=2.3\"",[288,101105,101106],{"class":403}," numpy\n",[19,101108,101109],{},"安装完成后，先做最小检查：",[280,101111,101113],{"className":23995,"code":101112,"language":23997,"meta":205,"style":205},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[25,101114,101115],{"__ignoreMap":205},[288,101116,101117,101119,101121],{"class":290,"line":291},[288,101118,30553],{"class":2135},[288,101120,30531],{"class":347},[288,101122,101123],{"class":403}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101125,101126],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101128,101129],{},"conda 安装:",[280,101131,101133],{"className":23995,"code":101132,"language":23997,"meta":205,"style":205},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[25,101134,101135,101155,101165],{"__ignoreMap":205},[288,101136,101137,101139,101141,101143,101146,101149,101152],{"class":290,"line":291},[288,101138,30503],{"class":2135},[288,101140,29349],{"class":403},[288,101142,25288],{"class":347},[288,101144,101145],{"class":403}," mujoco-study",[288,101147,101148],{"class":403}," python=",[288,101150,101151],{"class":347},"3.10",[288,101153,101154],{"class":347}," -y\n",[288,101156,101157,101159,101162],{"class":290,"line":206},[288,101158,30503],{"class":2135},[288,101160,101161],{"class":403}," activate",[288,101163,101164],{"class":403}," mujoco-study\n",[288,101166,101167,101169,101171,101173],{"class":290,"line":1352},[288,101168,24004],{"class":2135},[288,101170,24007],{"class":403},[288,101172,101103],{"class":403},[288,101174,101106],{"class":403},[19,101176,101177],{},"版本冲突说明:",[243,101179,101180,101186,101196,101205],{},[246,101181,101182,101183,28558],{},"不要安装 ",[25,101184,101185],{},"mujoco-py",[246,101187,101188,101189,101191,101192,101195],{},"如果旧项目里同时安装了 ",[25,101190,101185],{}," 和 ",[25,101193,101194],{},"mujoco","，建议新建干净虚拟环境。",[246,101197,101198,101201,101202,28558],{},[25,101199,101200],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[25,101203,101204],{},"~\u002F.mujoco\u002Fmujoco210",[246,101206,101207,101208,82712,101211,101214],{},"离屏渲染可能涉及 OpenGL 后端，",[25,101209,101210],{},"MUJOCO_GL=egl",[25,101212,101213],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101216,101218],{"id":101217},"_3核心概念解释","3.核心概念解释",[19,101220,101221],{},"MuJoCo 的基本执行流程:",[280,101223,101226],{"className":101224,"code":101225,"language":5360,"meta":205},[5358],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[25,101227,101225],{"__ignoreMap":205},[19,101229,101230,101232],{},[25,101231,100882],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101234,101235,101237,101238,511,101241,511,101244,511,101247,511,101250,28558],{},[25,101236,100892],{}," 存放仿真运行时状态，例如 ",[25,101239,101240],{},"data.time",[25,101242,101243],{},"data.qpos",[25,101245,101246],{},"data.qvel",[25,101248,101249],{},"data.ctrl",[25,101251,101252],{},"data.xpos",[260,101254,101256],{"id":101255},"xml-是什么","XML 是什么",[19,101258,101259],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[280,101261,101263],{"className":53240,"code":101262,"language":53242,"meta":205,"style":205},"\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",[25,101264,101265,101287,101318],{"__ignoreMap":205},[288,101266,101267,101269,101271,101273,101275,101277,101280,101282,101285],{"class":290,"line":291},[288,101268,1207],{"class":298},[288,101270,51973],{"class":51473},[288,101272,15093],{"class":2135},[288,101274,344],{"class":298},[288,101276,53664],{"class":403},[288,101278,101279],{"class":2135}," pos",[288,101281,344],{"class":298},[288,101283,101284],{"class":403},"\"0 0 1\"",[288,101286,51480],{"class":298},[288,101288,101289,101291,101294,101296,101298,101301,101303,101305,101307,101310,101312,101315],{"class":290,"line":206},[288,101290,52317],{"class":298},[288,101292,101293],{"class":51473},"geom",[288,101295,15093],{"class":2135},[288,101297,344],{"class":298},[288,101299,101300],{"class":403},"\"box_geom\"",[288,101302,53997],{"class":2135},[288,101304,344],{"class":298},[288,101306,53664],{"class":403},[288,101308,101309],{"class":2135}," size",[288,101311,344],{"class":298},[288,101313,101314],{"class":403},"\"0.1 0.1 0.1\"",[288,101316,101317],{"class":298},"\u002F>\n",[288,101319,101320,101322,101324],{"class":290,"line":1352},[288,101321,51958],{"class":298},[288,101323,51973],{"class":51473},[288,101325,51480],{"class":298},[19,101327,101328],{},"这段意思是：",[243,101330,101331,101337,101344],{},[246,101332,101333,101334,101336],{},"创建一个叫 ",[25,101335,53887],{}," 的刚体。",[246,101338,101339,101340,101343],{},"它初始放在 ",[25,101341,101342],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[246,101345,101346],{},"它里面有一个盒子形状的几何体。",[260,101348,101350],{"id":101349},"timestep-是什么","timestep 是什么",[19,101352,101353],{},"XML 里的：",[280,101355,101357],{"className":53240,"code":101356,"language":53242,"meta":205,"style":205},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[25,101358,101359],{"__ignoreMap":205},[288,101360,101361,101363,101365,101368,101370,101373,101376,101378,101381],{"class":290,"line":291},[288,101362,1207],{"class":298},[288,101364,69339],{"class":51473},[288,101366,101367],{"class":2135}," timestep",[288,101369,344],{"class":298},[288,101371,101372],{"class":403},"\"0.01\"",[288,101374,101375],{"class":2135}," gravity",[288,101377,344],{"class":298},[288,101379,101380],{"class":403},"\"0 0 -9.81\"",[288,101382,101317],{"class":298},[19,101384,101385,101386,101389,101390,101392],{},"表示每调用一次 ",[25,101387,101388],{},"mj_step","，仿真时间前进 ",[25,101391,39159],{}," 秒。循环 100 次，大约就是 1 秒：",[280,101394,101397],{"className":101395,"code":101396,"language":5360,"meta":205},[5358],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[25,101398,101396],{"__ignoreMap":205},[260,101400,101402],{"id":101401},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101404,101405],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[280,101407,101410],{"className":101408,"code":101409,"language":5360,"meta":205},[5358],"x y z qw qx qy qz\n",[25,101411,101409],{"__ignoreMap":205},[19,101413,101414,101415,101418,101419,101422],{},"表示一个自由刚体的位置和姿态。其中 ",[25,101416,101417],{},"x y z"," 是位置，",[25,101420,101421],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101424,101426],{"id":101425},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101428,101429],{},"新建文件:",[280,101431,101433],{"className":23995,"code":101432,"language":23997,"meta":205,"style":205},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[25,101434,101435,101445,101452],{"__ignoreMap":205},[288,101436,101437,101440,101442],{"class":290,"line":291},[288,101438,101439],{"class":2135},"mkdir",[288,101441,29389],{"class":347},[288,101443,101444],{"class":403}," mujoco_tutorial\n",[288,101446,101447,101450],{"class":290,"line":206},[288,101448,101449],{"class":347},"cd",[288,101451,101444],{"class":403},[288,101453,101454,101457],{"class":290,"line":1352},[288,101455,101456],{"class":2135},"touch",[288,101458,101459],{"class":403}," ch1_first_sim.py\n",[19,101461,101462],{},"写入:",[280,101464,101466],{"className":30551,"code":101465,"language":30553,"meta":205,"style":205},"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",[25,101467,101468,101475,101479,101483,101493,101498,101503,101507,101512,101517,101521,101526,101531,101536,101541,101546,101551,101555,101559,101563,101576,101590,101600,101604,101616,101628,101640,101652,101664,101668,101685,101690,101694,101705,101716,101720,101724,101738],{"__ignoreMap":205},[288,101469,101470,101472],{"class":290,"line":291},[288,101471,30565],{"class":294},[288,101473,101474],{"class":298}," mujoco\n",[288,101476,101477],{"class":290,"line":206},[288,101478,2572],{"emptyLinePlaceholder":217},[288,101480,101481],{"class":290,"line":1352},[288,101482,2572],{"emptyLinePlaceholder":217},[288,101484,101485,101488,101490],{"class":290,"line":1367},[288,101486,101487],{"class":347},"XML",[288,101489,13737],{"class":294},[288,101491,101492],{"class":403}," \"\"\"\n",[288,101494,101495],{"class":290,"line":1373},[288,101496,101497],{"class":403},"\u003Cmujoco model=\"first_sim\">\n",[288,101499,101500],{"class":290,"line":1387},[288,101501,101502],{"class":403},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[288,101504,101505],{"class":290,"line":1393},[288,101506,2572],{"emptyLinePlaceholder":217},[288,101508,101509],{"class":290,"line":1484},[288,101510,101511],{"class":403},"  \u003Cworldbody>\n",[288,101513,101514],{"class":290,"line":1490},[288,101515,101516],{"class":403},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[288,101518,101519],{"class":290,"line":1502},[288,101520,2572],{"emptyLinePlaceholder":217},[288,101522,101523],{"class":290,"line":1784},[288,101524,101525],{"class":403},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[288,101527,101528],{"class":290,"line":1789},[288,101529,101530],{"class":403},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[288,101532,101533],{"class":290,"line":1795},[288,101534,101535],{"class":403},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[288,101537,101538],{"class":290,"line":1800},[288,101539,101540],{"class":403},"    \u003C\u002Fbody>\n",[288,101542,101543],{"class":290,"line":1814},[288,101544,101545],{"class":403},"  \u003C\u002Fworldbody>\n",[288,101547,101548],{"class":290,"line":1819},[288,101549,101550],{"class":403},"\u003C\u002Fmujoco>\n",[288,101552,101553],{"class":290,"line":1825},[288,101554,95871],{"class":403},[288,101556,101557],{"class":290,"line":1846},[288,101558,2572],{"emptyLinePlaceholder":217},[288,101560,101561],{"class":290,"line":1851},[288,101562,2572],{"emptyLinePlaceholder":217},[288,101564,101565,101567,101569,101572,101574],{"class":290,"line":1865},[288,101566,32120],{"class":294},[288,101568,2145],{"class":2135},[288,101570,101571],{"class":298},"() -> ",[288,101573,95859],{"class":347},[288,101575,3911],{"class":298},[288,101577,101578,101581,101583,101586,101588],{"class":290,"line":1870},[288,101579,101580],{"class":298},"    model ",[288,101582,344],{"class":294},[288,101584,101585],{"class":298}," mujoco.MjModel.from_xml_string(",[288,101587,101487],{"class":347},[288,101589,305],{"class":298},[288,101591,101592,101595,101597],{"class":290,"line":1899},[288,101593,101594],{"class":298},"    data ",[288,101596,344],{"class":294},[288,101598,101599],{"class":298}," mujoco.MjData(model)\n",[288,101601,101602],{"class":290,"line":1904},[288,101603,2572],{"emptyLinePlaceholder":217},[288,101605,101606,101608,101610,101613],{"class":290,"line":1921},[288,101607,31472],{"class":347},[288,101609,299],{"class":298},[288,101611,101612],{"class":403},"\"nq:\"",[288,101614,101615],{"class":298},", model.nq)\n",[288,101617,101618,101620,101622,101625],{"class":290,"line":1926},[288,101619,31472],{"class":347},[288,101621,299],{"class":298},[288,101623,101624],{"class":403},"\"nv:\"",[288,101626,101627],{"class":298},", model.nv)\n",[288,101629,101630,101632,101634,101637],{"class":290,"line":1931},[288,101631,31472],{"class":347},[288,101633,299],{"class":298},[288,101635,101636],{"class":403},"\"nu:\"",[288,101638,101639],{"class":298},", model.nu)\n",[288,101641,101642,101644,101646,101649],{"class":290,"line":1936},[288,101643,31472],{"class":347},[288,101645,299],{"class":298},[288,101647,101648],{"class":403},"\"initial time:\"",[288,101650,101651],{"class":298},", data.time)\n",[288,101653,101654,101656,101658,101661],{"class":290,"line":1950},[288,101655,31472],{"class":347},[288,101657,299],{"class":298},[288,101659,101660],{"class":403},"\"initial qpos:\"",[288,101662,101663],{"class":298},", data.qpos.copy())\n",[288,101665,101666],{"class":290,"line":1955},[288,101667,2572],{"emptyLinePlaceholder":217},[288,101669,101670,101672,101675,101677,101679,101681,101683],{"class":290,"line":2749},[288,101671,3373],{"class":294},[288,101673,101674],{"class":298}," _ ",[288,101676,26216],{"class":294},[288,101678,32616],{"class":347},[288,101680,299],{"class":298},[288,101682,608],{"class":347},[288,101684,30959],{"class":298},[288,101686,101687],{"class":290,"line":2763},[288,101688,101689],{"class":298},"        mujoco.mj_step(model, data)\n",[288,101691,101692],{"class":290,"line":2771},[288,101693,2572],{"emptyLinePlaceholder":217},[288,101695,101696,101698,101700,101703],{"class":290,"line":2776},[288,101697,31472],{"class":347},[288,101699,299],{"class":298},[288,101701,101702],{"class":403},"\"final time:\"",[288,101704,101651],{"class":298},[288,101706,101707,101709,101711,101714],{"class":290,"line":2782},[288,101708,31472],{"class":347},[288,101710,299],{"class":298},[288,101712,101713],{"class":403},"\"final qpos:\"",[288,101715,101663],{"class":298},[288,101717,101718],{"class":290,"line":2788},[288,101719,2572],{"emptyLinePlaceholder":217},[288,101721,101722],{"class":290,"line":2793},[288,101723,2572],{"emptyLinePlaceholder":217},[288,101725,101726,101728,101730,101733,101736],{"class":290,"line":8121},[288,101727,1703],{"class":294},[288,101729,31393],{"class":347},[288,101731,101732],{"class":294}," ==",[288,101734,101735],{"class":403}," \"__main__\"",[288,101737,3911],{"class":298},[288,101739,101740],{"class":290,"line":8145},[288,101741,101742],{"class":298},"    main()\n",[260,101744,101745],{"id":101745},"代码逐段解释",[19,101747,101748],{},"导入库：",[280,101750,101752],{"className":30551,"code":101751,"language":30553,"meta":205,"style":205},"import mujoco\n",[25,101753,101754],{"__ignoreMap":205},[288,101755,101756,101758],{"class":290,"line":291},[288,101757,30565],{"class":294},[288,101759,101474],{"class":298},[19,101761,101762],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101764,101765],{},"定义 XML：",[280,101767,101769],{"className":30551,"code":101768,"language":30553,"meta":205,"style":205},"XML = \"\"\"\n...\n\"\"\"\n",[25,101770,101771,101779,101784],{"__ignoreMap":205},[288,101772,101773,101775,101777],{"class":290,"line":291},[288,101774,101487],{"class":347},[288,101776,13737],{"class":294},[288,101778,101492],{"class":403},[288,101780,101781],{"class":290,"line":206},[288,101782,101783],{"class":403},"...\n",[288,101785,101786],{"class":290,"line":1352},[288,101787,95871],{"class":403},[19,101789,101790,101791,101794],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[25,101792,101793],{},"freejoint"," 的方块。",[19,101796,101797],{},"编译模型：",[280,101799,101801],{"className":30551,"code":101800,"language":30553,"meta":205,"style":205},"model = mujoco.MjModel.from_xml_string(XML)\n",[25,101802,101803],{"__ignoreMap":205},[288,101804,101805,101808,101810,101812,101814],{"class":290,"line":291},[288,101806,101807],{"class":298},"model ",[288,101809,344],{"class":294},[288,101811,101585],{"class":298},[288,101813,101487],{"class":347},[288,101815,305],{"class":298},[19,101817,101818],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101820,101821],{},"创建数据：",[280,101823,101825],{"className":30551,"code":101824,"language":30553,"meta":205,"style":205},"data = mujoco.MjData(model)\n",[25,101826,101827],{"__ignoreMap":205},[288,101828,101829,101832,101834],{"class":290,"line":291},[288,101830,101831],{"class":298},"data ",[288,101833,344],{"class":294},[288,101835,101599],{"class":298},[19,101837,101838,101840,101841,101843],{},[25,101839,33574],{}," 会保存仿真当前状态。刚创建时，时间是 ",[25,101842,490],{},"，方块还在初始位置。",[19,101845,101846],{},"推进仿真：",[280,101848,101850],{"className":30551,"code":101849,"language":30553,"meta":205,"style":205},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[25,101851,101852,101868],{"__ignoreMap":205},[288,101853,101854,101856,101858,101860,101862,101864,101866],{"class":290,"line":291},[288,101855,3197],{"class":294},[288,101857,101674],{"class":298},[288,101859,26216],{"class":294},[288,101861,32616],{"class":347},[288,101863,299],{"class":298},[288,101865,608],{"class":347},[288,101867,30959],{"class":298},[288,101869,101870],{"class":290,"line":206},[288,101871,101872],{"class":298},"    mujoco.mj_step(model, data)\n",[19,101874,101875,101876,101878],{},"每次 ",[25,101877,101388],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[260,101880,101881],{"id":101881},"代码逐行细讲",[19,101883,101884],{},"下面把完整代码按新手视角拆开讲。",[280,101886,101887],{"className":30551,"code":101751,"language":30553,"meta":205,"style":205},[25,101888,101889],{"__ignoreMap":205},[288,101890,101891,101893],{"class":290,"line":291},[288,101892,30565],{"class":294},[288,101894,101474],{"class":298},[19,101896,101897,101899,101900,511,101902,511,101904,28558],{},[25,101898,30565],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[25,101901,100848],{},[25,101903,100853],{},[25,101905,101906],{},"mujoco.mj_step",[280,101908,101909],{"className":30551,"code":101768,"language":30553,"meta":205,"style":205},[25,101910,101911,101919,101923],{"__ignoreMap":205},[288,101912,101913,101915,101917],{"class":290,"line":291},[288,101914,101487],{"class":347},[288,101916,13737],{"class":294},[288,101918,101492],{"class":403},[288,101920,101921],{"class":290,"line":206},[288,101922,101783],{"class":403},[288,101924,101925],{"class":290,"line":1352},[288,101926,95871],{"class":403},[19,101928,101929,101931,101932,101935],{},[25,101930,101487],{}," 是一个变量名。右边的三引号 ",[25,101933,101934],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[280,101937,101938],{"className":53240,"code":101497,"language":53242,"meta":205,"style":205},[25,101939,101940],{"__ignoreMap":205},[288,101941,101942,101944,101946,101949,101951,101954],{"class":290,"line":291},[288,101943,1207],{"class":298},[288,101945,101194],{"class":51473},[288,101947,101948],{"class":2135}," model",[288,101950,344],{"class":298},[288,101952,101953],{"class":403},"\"first_sim\"",[288,101955,51480],{"class":298},[19,101957,101958,101959,101962,101963,28558],{},"这是 XML 的根标签。",[25,101960,101961],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[25,101964,101965],{},"first_sim",[280,101967,101968],{"className":53240,"code":101356,"language":53242,"meta":205,"style":205},[25,101969,101970],{"__ignoreMap":205},[288,101971,101972,101974,101976,101978,101980,101982,101984,101986,101988],{"class":290,"line":291},[288,101973,1207],{"class":298},[288,101975,69339],{"class":51473},[288,101977,101367],{"class":2135},[288,101979,344],{"class":298},[288,101981,101372],{"class":403},[288,101983,101375],{"class":2135},[288,101985,344],{"class":298},[288,101987,101380],{"class":403},[288,101989,101317],{"class":298},[19,101991,101992,101994,101995,101998,101999,102002],{},[25,101993,69339],{}," 用来设置仿真参数。",[25,101996,101997],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[25,102000,102001],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[280,102004,102006],{"className":53240,"code":102005,"language":53242,"meta":205,"style":205},"\u003Cworldbody>\n",[25,102007,102008],{"__ignoreMap":205},[288,102009,102010,102012,102015],{"class":290,"line":291},[288,102011,1207],{"class":298},[288,102013,102014],{"class":51473},"worldbody",[288,102016,51480],{"class":298},[19,102018,102019,102021],{},[25,102020,102014],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[280,102023,102025],{"className":53240,"code":102024,"language":53242,"meta":205,"style":205},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,102026,102027],{"__ignoreMap":205},[288,102028,102029,102031,102033,102035,102037,102040,102042,102044,102047,102049,102051,102054,102056,102058,102061],{"class":290,"line":291},[288,102030,1207],{"class":298},[288,102032,101293],{"class":51473},[288,102034,15093],{"class":2135},[288,102036,344],{"class":298},[288,102038,102039],{"class":403},"\"floor\"",[288,102041,53997],{"class":2135},[288,102043,344],{"class":298},[288,102045,102046],{"class":403},"\"plane\"",[288,102048,101309],{"class":2135},[288,102050,344],{"class":298},[288,102052,102053],{"class":403},"\"2 2 0.1\"",[288,102055,78940],{"class":2135},[288,102057,344],{"class":298},[288,102059,102060],{"class":403},"\"0.8 0.8 0.8 1\"",[288,102062,101317],{"class":298},[19,102064,102065,102066,102068,102069,102072,102073,102076,102077,102079],{},"这行创建地面。",[25,102067,101293],{}," 是几何体。",[25,102070,102071],{},"name=\"floor\""," 是名字。",[25,102074,102075],{},"type=\"plane\""," 表示平面。",[25,102078,55283],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[280,102081,102083],{"className":53240,"code":102082,"language":53242,"meta":205,"style":205},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[25,102084,102085],{"__ignoreMap":205},[288,102086,102087,102089,102091,102093,102095,102097,102099,102101,102103],{"class":290,"line":291},[288,102088,1207],{"class":298},[288,102090,51973],{"class":51473},[288,102092,15093],{"class":2135},[288,102094,344],{"class":298},[288,102096,53664],{"class":403},[288,102098,101279],{"class":2135},[288,102100,344],{"class":298},[288,102102,101284],{"class":403},[288,102104,51480],{"class":298},[19,102106,102107,102108,28558,102110,102113,102114,102116],{},"这行创建一个刚体，名字叫 ",[25,102109,53887],{},[25,102111,102112],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[25,102115,101342],{},"，也就是离地面 1 米高。",[280,102118,102120],{"className":53240,"code":102119,"language":53242,"meta":205,"style":205},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[25,102121,102122],{"__ignoreMap":205},[288,102123,102124,102126,102128,102130,102132,102135],{"class":290,"line":291},[288,102125,1207],{"class":298},[288,102127,101793],{"class":51473},[288,102129,15093],{"class":2135},[288,102131,344],{"class":298},[288,102133,102134],{"class":403},"\"box_free\"",[288,102136,101317],{"class":298},[19,102138,102139,102140,102142],{},"这行很重要。",[25,102141,101793],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[280,102144,102146],{"className":53240,"code":102145,"language":53242,"meta":205,"style":205},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,102147,102148],{"__ignoreMap":205},[288,102149,102150,102152,102154,102156,102158,102160,102162,102164,102166,102168,102170,102172,102175,102177,102179,102181,102183,102186],{"class":290,"line":291},[288,102151,1207],{"class":298},[288,102153,101293],{"class":51473},[288,102155,15093],{"class":2135},[288,102157,344],{"class":298},[288,102159,101300],{"class":403},[288,102161,53997],{"class":2135},[288,102163,344],{"class":298},[288,102165,53664],{"class":403},[288,102167,101309],{"class":2135},[288,102169,344],{"class":298},[288,102171,101314],{"class":403},[288,102173,102174],{"class":2135}," mass",[288,102176,344],{"class":298},[288,102178,3850],{"class":403},[288,102180,78940],{"class":2135},[288,102182,344],{"class":298},[288,102184,102185],{"class":403},"\"1 0 0 1\"",[288,102187,101317],{"class":298},[19,102189,102190,102191,102194,102195,102198,102199,102202,102203,102206],{},"这行给 box body 添加一个盒子形状。",[25,102192,102193],{},"type=\"box\""," 表示形状是盒子。",[25,102196,102197],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[25,102200,102201],{},"mass=\"1\""," 表示质量是 1。",[25,102204,102205],{},"rgba=\"1 0 0 1\""," 表示红色。",[280,102208,102210],{"className":30551,"code":102209,"language":30553,"meta":205,"style":205},"def main() -> None:\n",[25,102211,102212],{"__ignoreMap":205},[288,102213,102214,102216,102218,102220,102222],{"class":290,"line":291},[288,102215,32120],{"class":294},[288,102217,2145],{"class":2135},[288,102219,101571],{"class":298},[288,102221,95859],{"class":347},[288,102223,3911],{"class":298},[19,102225,102226,102228,102229,102232,102233,102236],{},[25,102227,32120],{}," 用来定义函数。这里定义了一个叫 ",[25,102230,102231],{},"main"," 的函数。",[25,102234,102235],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[280,102238,102239],{"className":30551,"code":101800,"language":30553,"meta":205,"style":205},[25,102240,102241],{"__ignoreMap":205},[288,102242,102243,102245,102247,102249,102251],{"class":290,"line":291},[288,102244,101807],{"class":298},[288,102246,344],{"class":294},[288,102248,101585],{"class":298},[288,102250,101487],{"class":347},[288,102252,305],{"class":298},[19,102254,102255,102256,102259],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[25,102257,102258],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[280,102261,102262],{"className":30551,"code":101824,"language":30553,"meta":205,"style":205},[25,102263,102264],{"__ignoreMap":205},[288,102265,102266,102268,102270],{"class":290,"line":291},[288,102267,101831],{"class":298},[288,102269,344],{"class":294},[288,102271,101599],{"class":298},[19,102273,102274,102275,102277,102278,102280],{},"这行创建仿真数据。",[25,102276,33574],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[25,102279,33574],{}," 都会变化。",[280,102282,102284],{"className":30551,"code":102283,"language":30553,"meta":205,"style":205},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[25,102285,102286,102296,102306],{"__ignoreMap":205},[288,102287,102288,102290,102292,102294],{"class":290,"line":291},[288,102289,30588],{"class":347},[288,102291,299],{"class":298},[288,102293,101612],{"class":403},[288,102295,101615],{"class":298},[288,102297,102298,102300,102302,102304],{"class":290,"line":206},[288,102299,30588],{"class":347},[288,102301,299],{"class":298},[288,102303,101624],{"class":403},[288,102305,101627],{"class":298},[288,102307,102308,102310,102312,102314],{"class":290,"line":1352},[288,102309,30588],{"class":347},[288,102311,299],{"class":298},[288,102313,101636],{"class":403},[288,102315,101639],{"class":298},[19,102317,102318,102320,102321,102324,102325,102328,102329,102332,102333,102336],{},[25,102319,30588],{}," 用来输出信息。",[25,102322,102323],{},"model.nq"," 是位置变量数量，",[25,102326,102327],{},"model.nv"," 是速度变量数量，",[25,102330,102331],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[25,102334,102335],{},"nu"," 是 0。",[280,102338,102340],{"className":30551,"code":102339,"language":30553,"meta":205,"style":205},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[25,102341,102342,102352],{"__ignoreMap":205},[288,102343,102344,102346,102348,102350],{"class":290,"line":291},[288,102345,30588],{"class":347},[288,102347,299],{"class":298},[288,102349,101648],{"class":403},[288,102351,101651],{"class":298},[288,102353,102354,102356,102358,102360],{"class":290,"line":206},[288,102355,30588],{"class":347},[288,102357,299],{"class":298},[288,102359,101660],{"class":403},[288,102361,101663],{"class":298},[19,102363,102364,102365,102367,102368,102370,102371,102374],{},"这里打印初始时间和初始位置。",[25,102366,101240],{}," 一开始是 0。",[25,102369,101243],{}," 是位置数组。",[25,102372,102373],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[280,102376,102377],{"className":30551,"code":101849,"language":30553,"meta":205,"style":205},[25,102378,102379,102395],{"__ignoreMap":205},[288,102380,102381,102383,102385,102387,102389,102391,102393],{"class":290,"line":291},[288,102382,3197],{"class":294},[288,102384,101674],{"class":298},[288,102386,26216],{"class":294},[288,102388,32616],{"class":347},[288,102390,299],{"class":298},[288,102392,608],{"class":347},[288,102394,30959],{"class":298},[288,102396,102397],{"class":290,"line":206},[288,102398,101872],{"class":298},[19,102400,102401,102403,102404,102407,102408,102410,102411,102413],{},[25,102402,3197],{}," 是循环。",[25,102405,102406],{},"range(100)"," 表示循环 100 次。",[25,102409,1289],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[25,102412,101388],{},"，仿真就前进一步。",[280,102415,102417],{"className":30551,"code":102416,"language":30553,"meta":205,"style":205},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[25,102418,102419,102429],{"__ignoreMap":205},[288,102420,102421,102423,102425,102427],{"class":290,"line":291},[288,102422,30588],{"class":347},[288,102424,299],{"class":298},[288,102426,101702],{"class":403},[288,102428,101651],{"class":298},[288,102430,102431,102433,102435,102437],{"class":290,"line":206},[288,102432,30588],{"class":347},[288,102434,299],{"class":298},[288,102436,101713],{"class":403},[288,102438,101663],{"class":298},[19,102440,102441],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[280,102443,102445],{"className":30551,"code":102444,"language":30553,"meta":205,"style":205},"if __name__ == \"__main__\":\n    main()\n",[25,102446,102447,102459],{"__ignoreMap":205},[288,102448,102449,102451,102453,102455,102457],{"class":290,"line":291},[288,102450,1703],{"class":294},[288,102452,31393],{"class":347},[288,102454,101732],{"class":294},[288,102456,101735],{"class":403},[288,102458,3911],{"class":298},[288,102460,102461],{"class":290,"line":206},[288,102462,101742],{"class":298},[19,102464,102465,102466,102469,102470,28558],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[25,102467,102468],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[25,102471,102468],{},[19,102473,102474],{},"运行:",[280,102476,102478],{"className":23995,"code":102477,"language":23997,"meta":205,"style":205},"python ch1_first_sim.py\n",[25,102479,102480],{"__ignoreMap":205},[288,102481,102482,102484],{"class":290,"line":291},[288,102483,30553],{"class":2135},[288,102485,101459],{"class":403},[14,102487,102489],{"id":102488},"_5运行结果说明","5.运行结果说明",[19,102491,102492],{},"你应该看到类似输出:",[280,102494,102497],{"className":102495,"code":102496,"language":5360,"meta":205},[5358],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[25,102498,102496],{"__ignoreMap":205},[19,102500,102501,102503,102504,102507,102508,28558],{},[25,102502,101793],{}," 有 7 个位置变量: ",[25,102505,102506],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[25,102509,102510],{},"vx vy vz wx wy wz",[19,102512,102513,102514,102517],{},"你还会看到 ",[25,102515,102516],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102519,102521],{"id":102520},"_6验证步骤","6.验证步骤",[19,102523,102524],{},"确认版本:",[280,102526,102527],{"className":23995,"code":101112,"language":23997,"meta":205,"style":205},[25,102528,102529],{"__ignoreMap":205},[288,102530,102531,102533,102535],{"class":290,"line":291},[288,102532,30553],{"class":2135},[288,102534,30531],{"class":347},[288,102536,101123],{"class":403},[19,102538,102539],{},"确认导入的是官方 bindings:",[280,102541,102543],{"className":23995,"code":102542,"language":23997,"meta":205,"style":205},"python -c \"import mujoco; print(mujoco)\"\n",[25,102544,102545],{"__ignoreMap":205},[288,102546,102547,102549,102551],{"class":290,"line":291},[288,102548,30553],{"class":2135},[288,102550,30531],{"class":347},[288,102552,102553],{"class":403}," \"import mujoco; print(mujoco)\"\n",[19,102555,102556],{},"运行程序:",[280,102558,102559],{"className":23995,"code":102477,"language":23997,"meta":205,"style":205},[25,102560,102561],{"__ignoreMap":205},[288,102562,102563,102565],{"class":290,"line":291},[288,102564,30553],{"class":2135},[288,102566,101459],{"class":403},[19,102568,102569,102570,102573,102574,28558],{},"检查 ",[25,102571,102572],{},"final time"," 是否约等于 ",[25,102575,102576],{},"1.0",[19,102578,102579],{},"再做几个小实验：",[243,102581,102582,102592,102600,102613],{},[246,102583,102584,102585,102587,102588,102591],{},"把 ",[25,102586,102112],{}," 改成 ",[25,102589,102590],{},"pos=\"0 0 2\"","，观察初始高度变化。",[246,102593,102584,102594,102587,102596,102599],{},[25,102595,102001],{},[25,102597,102598],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[246,102601,102584,102602,102587,102604,102607,102608,102610,102611,28558],{},[25,102603,101997],{},[25,102605,102606],{},"timestep=\"0.005\"","，观察 100 步后的 ",[25,102609,102572],{}," 是否变成约 ",[25,102612,35502],{},[246,102614,102615,102616,102619],{},"删除 ",[25,102617,102618],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102621,102622],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102624,102626],{"id":102625},"_7常见错误与解决方案","7.常见错误与解决方案",[260,102628,102630],{"id":102629},"modulenotfounderror-no-module-named-mujoco",[25,102631,102632],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102634,102635],{},"解决:",[280,102637,102639],{"className":23995,"code":102638,"language":23997,"meta":205,"style":205},"pip install \"mujoco>=2.3\"\n",[25,102640,102641],{"__ignoreMap":205},[288,102642,102643,102645,102647],{"class":290,"line":291},[288,102644,24004],{"class":2135},[288,102646,24007],{"class":403},[288,102648,102649],{"class":403}," \"mujoco>=2.3\"\n",[260,102651,102653],{"id":102652},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102655,102656],{},"先安装系统依赖:",[280,102658,102660],{"className":23995,"code":102659,"language":23997,"meta":205,"style":205},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[25,102661,102662],{"__ignoreMap":205},[288,102663,102664,102666,102668,102670,102672,102675,102677,102680,102682,102685,102687],{"class":290,"line":291},[288,102665,24749],{"class":2135},[288,102667,26488],{"class":403},[288,102669,24007],{"class":403},[288,102671,26573],{"class":347},[288,102673,102674],{"class":403}," mesa-libGL",[288,102676,100987],{"class":403},[288,102678,102679],{"class":403}," glfw",[288,102681,101007],{"class":403},[288,102683,102684],{"class":403}," libX11",[288,102686,101020],{"class":403},[288,102688,102689],{"class":403}," libXrandr\n",[260,102691,102693],{"id":102692},"xml-解析失败","XML 解析失败",[19,102695,102696],{},"检查:",[243,102698,102699,102702,102705,102711],{},[246,102700,102701],{},"标签是否闭合",[246,102703,102704],{},"属性是否带引号",[246,102706,102707,102708],{},"根节点是否是 ",[25,102709,102710],{},"\u003Cmujoco>",[246,102712,102713,102715,102716,102719],{},[25,102714,51973],{}," 是否放在 ",[25,102717,102718],{},"\u003Cworldbody>"," 内部",[260,102721,102723,102725,102726],{"id":102722},"final-time-不是严格等于-10",[25,102724,102572],{}," 不是严格等于 ",[25,102727,102576],{},[19,102729,102730],{},"这通常不是错误。浮点数计算可能得到：",[280,102732,102735],{"className":102733,"code":102734,"language":5360,"meta":205},[5358],"1.0000000000000007\n",[25,102736,102734],{"__ignoreMap":205},[19,102738,102739,102740,102742],{},"只要接近 ",[25,102741,102576],{}," 就正常。",[260,102744,102745],{"id":102745},"方块没有掉下来",[19,102747,102748],{},"检查：",[243,102750,102751,102757,102763,102768],{},[246,102752,102753,102754],{},"方块 body 里是否有 ",[25,102755,102756],{},"\u003Cfreejoint\u002F>",[246,102758,102759,102760],{},"重力是否是 ",[25,102761,102762],{},"0 0 -9.81",[246,102764,102765,102766],{},"是否真的调用了 ",[25,102767,100858],{},[246,102769,102770,102771,102773,102774],{},"你看的是否是 ",[25,102772,102516],{},"，不是 ",[25,102775,102776],{},"initial qpos",[14,102778,102780],{"id":102779},"_8本章小结","8.本章小结",[19,102782,102783],{},"本章你已经完成了 MuJoCo 的最小闭环：",[280,102785,102788],{"className":102786,"code":102787,"language":5360,"meta":205},[5358],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[25,102789,102787],{"__ignoreMap":205},[19,102791,102792],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5299,102794,102795],{},"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":205,"searchDepth":206,"depth":206,"links":102797},[102798,102799,102800,102805,102809,102810,102811,102819],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":102801},[102802,102803,102804],{"id":101255,"depth":1352,"text":101256},{"id":101349,"depth":1352,"text":101350},{"id":101401,"depth":1352,"text":101402},{"id":101425,"depth":206,"text":101426,"children":102806},[102807,102808],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":102812},[102813,102814,102815,102816,102818],{"id":102629,"depth":1352,"text":102632},{"id":102652,"depth":1352,"text":102653},{"id":102692,"depth":1352,"text":102693},{"id":102722,"depth":1352,"text":102817},"final time 不是严格等于 1.0",{"id":102745,"depth":1352,"text":102745},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100811,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102826,"title":102827,"body":102828,"description":205,"extension":215,"meta":104484,"navigation":217,"path":104485,"seo":104486,"stem":104487,"__hash__":104488},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102829,"toc":104460},[102830,102833,102835,102838,102841,102858,102953,102956,102962,102964,102966,102990,102993,103007,103010,103051,103053,103066,103068,103071,103119,103131,103134,103137,103143,103156,103223,103226,103245,103248,103251,103257,103259,103268,103271,103275,103284,103366,103375,103379,103385,103399,103409,103411,103741,103744,103756,103758,103769,103771,103774,103792,103795,103798,103816,103827,103830,103845,103855,103857,103878,103895,103915,103921,103961,103977,103993,103999,104002,104026,104042,104047,104077,104094,104119,104122,104137,104146,104161,104170,104185,104192,104194,104204,104217,104224,104227,104266,104273,104275,104327,104329,104335,104338,104345,104352,104355,104357,104375,104378,104381,104415,104427,104429,104432,104454,104457],[10,102831,102827],{"id":102832},"_2xml-与-mjcf-物理建模基础",[14,102834,100820],{"id":100819},[19,102836,102837],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102839,102840],{},"本章结束后，你应该能看懂一个简单模型里：",[243,102842,102843,102846,102849,102852,102855],{},[246,102844,102845],{},"地面在哪里。",[246,102847,102848],{},"物体初始位置在哪里。",[246,102850,102851],{},"几何体是什么形状。",[246,102853,102854],{},"哪些 body 可以自由运动。",[246,102856,102857],{},"如何用名字在 Python 里找到 XML 中的对象。",[436,102859,102860,102870],{},[439,102861,102862],{},[442,102863,102864,102867],{},[445,102865,102866],{"align":23909},"标签",[445,102868,102869],{"align":23909},"作用",[483,102871,102872,102881,102891,102900,102910,102920,102933,102943],{},[442,102873,102874,102878],{},[488,102875,102876],{"align":23909},[25,102877,102710],{},[488,102879,102880],{"align":23909},"根节点",[442,102882,102883,102888],{},[488,102884,102885],{"align":23909},[25,102886,102887],{},"\u003Coption>",[488,102889,102890],{"align":23909},"仿真参数",[442,102892,102893,102897],{},[488,102894,102895],{"align":23909},[25,102896,102718],{},[488,102898,102899],{"align":23909},"世界中的物体",[442,102901,102902,102907],{},[488,102903,102904],{"align":23909},[25,102905,102906],{},"\u003Cbody>",[488,102908,102909],{"align":23909},"刚体",[442,102911,102912,102917],{},[488,102913,102914],{"align":23909},[25,102915,102916],{},"\u003Cgeom>",[488,102918,102919],{"align":23909},"几何体、碰撞体、可视体",[442,102921,102922,102930],{},[488,102923,102924,25151,102927],{"align":23909},[25,102925,102926],{},"\u003Cjoint>",[25,102928,102929],{},"\u003Cfreejoint>",[488,102931,102932],{"align":23909},"关节",[442,102934,102935,102940],{},[488,102936,102937],{"align":23909},[25,102938,102939],{},"\u003Csite>",[488,102941,102942],{"align":23909},"标记点",[442,102944,102945,102950],{},[488,102946,102947],{"align":23909},[25,102948,102949],{},"\u003Cactuator>",[488,102951,102952],{"align":23909},"控制器",[19,102954,102955],{},"初学时可以先记住：",[280,102957,102960],{"className":102958,"code":102959,"language":5360,"meta":205},[5358],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[25,102961,102959],{"__ignoreMap":205},[14,102963,100943],{"id":100942},[19,102965,100946],{},[280,102967,102969],{"className":23995,"code":102968,"language":23997,"meta":205,"style":205},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[25,102970,102971],{"__ignoreMap":205},[288,102972,102973,102975,102977,102979,102981,102983,102985,102987],{"class":290,"line":291},[288,102974,24749],{"class":2135},[288,102976,26488],{"class":403},[288,102978,24007],{"class":403},[288,102980,26573],{"class":347},[288,102982,102674],{"class":403},[288,102984,100987],{"class":403},[288,102986,102679],{"class":403},[288,102988,102989],{"class":403}," glfw-devel\n",[19,102991,102992],{},"pip:",[280,102994,102995],{"className":23995,"code":101092,"language":23997,"meta":205,"style":205},[25,102996,102997],{"__ignoreMap":205},[288,102998,102999,103001,103003,103005],{"class":290,"line":291},[288,103000,24004],{"class":2135},[288,103002,24007],{"class":403},[288,103004,101103],{"class":403},[288,103006,101106],{"class":403},[19,103008,103009],{},"conda:",[280,103011,103013],{"className":23995,"code":103012,"language":23997,"meta":205,"style":205},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[25,103014,103015,103032,103041],{"__ignoreMap":205},[288,103016,103017,103019,103021,103023,103026,103028,103030],{"class":290,"line":291},[288,103018,30503],{"class":2135},[288,103020,29349],{"class":403},[288,103022,25288],{"class":347},[288,103024,103025],{"class":403}," mujoco-xml",[288,103027,101148],{"class":403},[288,103029,101151],{"class":347},[288,103031,101154],{"class":347},[288,103033,103034,103036,103038],{"class":290,"line":206},[288,103035,30503],{"class":2135},[288,103037,101161],{"class":403},[288,103039,103040],{"class":403}," mujoco-xml\n",[288,103042,103043,103045,103047,103049],{"class":290,"line":1352},[288,103044,24004],{"class":2135},[288,103046,24007],{"class":403},[288,103048,101103],{"class":403},[288,103050,101106],{"class":403},[19,103052,101177],{},[243,103054,103055,103058,103063],{},[246,103056,103057],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[246,103059,103060,103061,28558],{},"本章使用基础标签，适用于 ",[25,103062,101200],{},[246,103064,103065],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103067,101218],{"id":101217},[19,103069,103070],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[280,103072,103074],{"className":53240,"code":103073,"language":53242,"meta":205,"style":205},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[25,103075,103076,103090,103098,103103,103111],{"__ignoreMap":205},[288,103077,103078,103080,103082,103084,103086,103088],{"class":290,"line":291},[288,103079,1207],{"class":298},[288,103081,101194],{"class":51473},[288,103083,101948],{"class":2135},[288,103085,344],{"class":298},[288,103087,62852],{"class":403},[288,103089,51480],{"class":298},[288,103091,103092,103094,103096],{"class":290,"line":206},[288,103093,52317],{"class":298},[288,103095,102014],{"class":51473},[288,103097,51480],{"class":298},[288,103099,103100],{"class":290,"line":1352},[288,103101,103102],{"class":298},"    ...\n",[288,103104,103105,103107,103109],{"class":290,"line":1367},[288,103106,52590],{"class":298},[288,103108,102014],{"class":51473},[288,103110,51480],{"class":298},[288,103112,103113,103115,103117],{"class":290,"line":1373},[288,103114,51958],{"class":298},[288,103116,101194],{"class":51473},[288,103118,51480],{"class":298},[19,103120,103121,103123,103124,103126,103127,103130],{},[25,103122,51973],{}," 表示刚体。",[25,103125,101293],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[25,103128,103129],{},"joint"," 表示刚体相对父刚体如何运动。",[260,103132,103133],{"id":103133},"层级结构非常重要",[19,103135,103136],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[280,103138,103141],{"className":103139,"code":103140,"language":5360,"meta":205},[5358],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[25,103142,103140],{"__ignoreMap":205},[19,103144,103145,101191,103148,103151,103152,103155],{},[25,103146,103147],{},"red_box_geom",[25,103149,103150],{},"box_center"," 都属于 ",[25,103153,103154],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[280,103157,103159],{"className":53240,"code":103158,"language":53242,"meta":205,"style":205},"\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",[25,103160,103161,103181,103195,103215],{"__ignoreMap":205},[288,103162,103163,103165,103167,103169,103171,103173,103175,103177,103179],{"class":290,"line":291},[288,103164,1207],{"class":298},[288,103166,51973],{"class":51473},[288,103168,15093],{"class":2135},[288,103170,344],{"class":298},[288,103172,53664],{"class":403},[288,103174,101279],{"class":2135},[288,103176,344],{"class":298},[288,103178,101284],{"class":403},[288,103180,51480],{"class":298},[288,103182,103183,103185,103187,103189,103191,103193],{"class":290,"line":206},[288,103184,52317],{"class":298},[288,103186,101793],{"class":51473},[288,103188,15093],{"class":2135},[288,103190,344],{"class":298},[288,103192,102134],{"class":403},[288,103194,101317],{"class":298},[288,103196,103197,103199,103201,103203,103205,103207,103209,103211,103213],{"class":290,"line":1352},[288,103198,52317],{"class":298},[288,103200,101293],{"class":51473},[288,103202,53997],{"class":2135},[288,103204,344],{"class":298},[288,103206,53664],{"class":403},[288,103208,101309],{"class":2135},[288,103210,344],{"class":298},[288,103212,101314],{"class":403},[288,103214,101317],{"class":298},[288,103216,103217,103219,103221],{"class":290,"line":1367},[288,103218,51958],{"class":298},[288,103220,51973],{"class":51473},[288,103222,51480],{"class":298},[19,103224,103225],{},"含义:",[243,103227,103228,103234,103239,103242],{},[246,103229,103230,103231,103233],{},"创建名为 ",[25,103232,53887],{}," 的刚体",[246,103235,103236,103237],{},"初始位置在世界坐标 ",[25,103238,101342],{},[246,103240,103241],{},"它有一个自由关节",[246,103243,103244],{},"它有一个盒子几何体",[260,103246,103247],{"id":103247},"坐标怎么理解",[19,103249,103250],{},"MuJoCo 默认使用三维坐标：",[280,103252,103255],{"className":103253,"code":103254,"language":5360,"meta":205},[5358],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[25,103256,103254],{"__ignoreMap":205},[19,103258,14806],{},[280,103260,103262],{"className":53240,"code":103261,"language":53242,"meta":205,"style":205},"pos=\"0 0 1\"\n",[25,103263,103264],{"__ignoreMap":205},[288,103265,103266],{"class":290,"line":291},[288,103267,103261],{"class":298},[19,103269,103270],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[260,103272,103274],{"id":103273},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103276,103277,103278,82703,103281,103283],{},"不同 ",[25,103279,103280],{},"type",[25,103282,31669],{}," 含义不同：",[436,103285,103286,103301],{},[439,103287,103288],{},[442,103289,103290,103294,103299],{},[445,103291,103292],{"align":23909},[25,103293,103280],{},[445,103295,103296,103298],{"align":23909},[25,103297,31669],{}," 示例",[445,103300,100873],{"align":23909},[483,103302,103303,103317,103332,103351],{},[442,103304,103305,103309,103314],{},[488,103306,103307],{"align":23909},[25,103308,53887],{},[488,103310,103311],{"align":23909},[25,103312,103313],{},"size=\"0.1 0.2 0.3\"",[488,103315,103316],{"align":23909},"x\u002Fy\u002Fz 半边长，不是完整长度",[442,103318,103319,103324,103329],{},[488,103320,103321],{"align":23909},[25,103322,103323],{},"sphere",[488,103325,103326],{"align":23909},[25,103327,103328],{},"size=\"0.1\"",[488,103330,103331],{"align":23909},"球半径",[442,103333,103334,103339,103344],{},[488,103335,103336],{"align":23909},[25,103337,103338],{},"capsule",[488,103340,103341],{"align":23909},[25,103342,103343],{},"size=\"0.03\"",[488,103345,103346,103347,103350],{"align":23909},"胶囊半径，长度常用 ",[25,103348,103349],{},"fromto"," 指定",[442,103352,103353,103358,103363],{},[488,103354,103355],{"align":23909},[25,103356,103357],{},"plane",[488,103359,103360],{"align":23909},[25,103361,103362],{},"size=\"3 3 0.1\"",[488,103364,103365],{"align":23909},"可视平面大小，通常当地面",[19,103367,103368,103369,103371,103372,103374],{},"最容易踩坑的是 box：",[25,103370,102197],{}," 表示边长大约是 ",[25,103373,32210],{},"，因为 MuJoCo 用的是半边长。",[260,103376,103378],{"id":103377},"site-是什么","site 是什么",[19,103380,103381,103384],{},[25,103382,103383],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[243,103386,103387,103390,103393,103396],{},[246,103388,103389],{},"标记机械臂末端。",[246,103391,103392],{},"标记目标位置。",[246,103394,103395],{},"放传感器或相机参考点。",[246,103397,103398],{},"在 Python 中读取某个关键点的世界坐标。",[19,103400,103401,103402,101191,103405,103408],{},"在后面的 Reacher 任务中，",[25,103403,103404],{},"tip",[25,103406,103407],{},"target"," 就会用 site 表示。",[14,103410,101426],{"id":101425},[280,103412,103414],{"className":30551,"code":103413,"language":30553,"meta":205,"style":205},"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",[25,103415,103416,103422,103432,103436,103440,103448,103453,103457,103461,103465,103470,103474,103479,103484,103489,103494,103498,103502,103506,103510,103514,103518,103530,103542,103550,103554,103569,103584,103588,103601,103616,103629,103642,103646,103662,103666,103670,103681,103693,103705,103717,103721,103725,103737],{"__ignoreMap":205},[288,103417,103418,103420],{"class":290,"line":291},[288,103419,30565],{"class":294},[288,103421,101474],{"class":298},[288,103423,103424,103426,103428,103430],{"class":290,"line":206},[288,103425,30565],{"class":294},[288,103427,31553],{"class":298},[288,103429,31556],{"class":294},[288,103431,31559],{"class":298},[288,103433,103434],{"class":290,"line":1352},[288,103435,2572],{"emptyLinePlaceholder":217},[288,103437,103438],{"class":290,"line":1367},[288,103439,2572],{"emptyLinePlaceholder":217},[288,103441,103442,103444,103446],{"class":290,"line":1373},[288,103443,101487],{"class":347},[288,103445,13737],{"class":294},[288,103447,101492],{"class":403},[288,103449,103450],{"class":290,"line":1387},[288,103451,103452],{"class":403},"\u003Cmujoco model=\"xml_basic\">\n",[288,103454,103455],{"class":290,"line":1393},[288,103456,101502],{"class":403},[288,103458,103459],{"class":290,"line":1484},[288,103460,2572],{"emptyLinePlaceholder":217},[288,103462,103463],{"class":290,"line":1490},[288,103464,101511],{"class":403},[288,103466,103467],{"class":290,"line":1502},[288,103468,103469],{"class":403},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[288,103471,103472],{"class":290,"line":1784},[288,103473,2572],{"emptyLinePlaceholder":217},[288,103475,103476],{"class":290,"line":1789},[288,103477,103478],{"class":403},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[288,103480,103481],{"class":290,"line":1795},[288,103482,103483],{"class":403},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[288,103485,103486],{"class":290,"line":1800},[288,103487,103488],{"class":403},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[288,103490,103491],{"class":290,"line":1814},[288,103492,103493],{"class":403},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[288,103495,103496],{"class":290,"line":1819},[288,103497,101540],{"class":403},[288,103499,103500],{"class":290,"line":1825},[288,103501,101545],{"class":403},[288,103503,103504],{"class":290,"line":1846},[288,103505,101550],{"class":403},[288,103507,103508],{"class":290,"line":1851},[288,103509,95871],{"class":403},[288,103511,103512],{"class":290,"line":1865},[288,103513,2572],{"emptyLinePlaceholder":217},[288,103515,103516],{"class":290,"line":1870},[288,103517,2572],{"emptyLinePlaceholder":217},[288,103519,103520,103522,103524,103526,103528],{"class":290,"line":1899},[288,103521,32120],{"class":294},[288,103523,2145],{"class":2135},[288,103525,101571],{"class":298},[288,103527,95859],{"class":347},[288,103529,3911],{"class":298},[288,103531,103532,103534,103536,103538,103540],{"class":290,"line":1904},[288,103533,101580],{"class":298},[288,103535,344],{"class":294},[288,103537,101585],{"class":298},[288,103539,101487],{"class":347},[288,103541,305],{"class":298},[288,103543,103544,103546,103548],{"class":290,"line":1921},[288,103545,101594],{"class":298},[288,103547,344],{"class":294},[288,103549,101599],{"class":298},[288,103551,103552],{"class":290,"line":1926},[288,103553,2572],{"emptyLinePlaceholder":217},[288,103555,103556,103559,103561,103564,103567],{"class":290,"line":1931},[288,103557,103558],{"class":298},"    box_body_id ",[288,103560,344],{"class":294},[288,103562,103563],{"class":298}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[288,103565,103566],{"class":403},"\"red_box\"",[288,103568,305],{"class":298},[288,103570,103571,103574,103576,103579,103582],{"class":290,"line":1936},[288,103572,103573],{"class":298},"    site_id ",[288,103575,344],{"class":294},[288,103577,103578],{"class":298}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[288,103580,103581],{"class":403},"\"box_center\"",[288,103583,305],{"class":298},[288,103585,103586],{"class":290,"line":1950},[288,103587,2572],{"emptyLinePlaceholder":217},[288,103589,103590,103592,103595,103597,103599],{"class":290,"line":1955},[288,103591,3273],{"class":294},[288,103593,103594],{"class":298}," box_body_id ",[288,103596,1207],{"class":294},[288,103598,4265],{"class":347},[288,103600,3911],{"class":298},[288,103602,103603,103606,103609,103611,103614],{"class":290,"line":2749},[288,103604,103605],{"class":294},"        raise",[288,103607,103608],{"class":347}," RuntimeError",[288,103610,299],{"class":298},[288,103612,103613],{"class":403},"\"body red_box not found\"",[288,103615,305],{"class":298},[288,103617,103618,103620,103623,103625,103627],{"class":290,"line":2763},[288,103619,3273],{"class":294},[288,103621,103622],{"class":298}," site_id ",[288,103624,1207],{"class":294},[288,103626,4265],{"class":347},[288,103628,3911],{"class":298},[288,103630,103631,103633,103635,103637,103640],{"class":290,"line":2771},[288,103632,103605],{"class":294},[288,103634,103608],{"class":347},[288,103636,299],{"class":298},[288,103638,103639],{"class":403},"\"site box_center not found\"",[288,103641,305],{"class":298},[288,103643,103644],{"class":290,"line":2776},[288,103645,2572],{"emptyLinePlaceholder":217},[288,103647,103648,103650,103652,103654,103656,103658,103660],{"class":290,"line":2782},[288,103649,3373],{"class":294},[288,103651,101674],{"class":298},[288,103653,26216],{"class":294},[288,103655,32616],{"class":347},[288,103657,299],{"class":298},[288,103659,1894],{"class":347},[288,103661,30959],{"class":298},[288,103663,103664],{"class":290,"line":2788},[288,103665,101689],{"class":298},[288,103667,103668],{"class":290,"line":2793},[288,103669,2572],{"emptyLinePlaceholder":217},[288,103671,103672,103674,103676,103679],{"class":290,"line":8121},[288,103673,31472],{"class":347},[288,103675,299],{"class":298},[288,103677,103678],{"class":403},"\"simulation time:\"",[288,103680,101651],{"class":298},[288,103682,103683,103685,103687,103690],{"class":290,"line":8145},[288,103684,31472],{"class":347},[288,103686,299],{"class":298},[288,103688,103689],{"class":403},"\"box body position:\"",[288,103691,103692],{"class":298},", data.xpos[box_body_id].copy())\n",[288,103694,103695,103697,103699,103702],{"class":290,"line":8150},[288,103696,31472],{"class":347},[288,103698,299],{"class":298},[288,103700,103701],{"class":403},"\"site position:\"",[288,103703,103704],{"class":298},", data.site_xpos[site_id].copy())\n",[288,103706,103707,103709,103711,103714],{"class":290,"line":8156},[288,103708,31472],{"class":347},[288,103710,299],{"class":298},[288,103712,103713],{"class":403},"\"box qpos:\"",[288,103715,103716],{"class":298},", np.array(data.qpos))\n",[288,103718,103719],{"class":290,"line":8183},[288,103720,2572],{"emptyLinePlaceholder":217},[288,103722,103723],{"class":290,"line":8188},[288,103724,2572],{"emptyLinePlaceholder":217},[288,103726,103727,103729,103731,103733,103735],{"class":290,"line":8194},[288,103728,1703],{"class":294},[288,103730,31393],{"class":347},[288,103732,101732],{"class":294},[288,103734,101735],{"class":403},[288,103736,3911],{"class":298},[288,103738,103739],{"class":290,"line":8206},[288,103740,101742],{"class":298},[19,103742,103743],{},"保存为：",[280,103745,103747],{"className":23995,"code":103746,"language":23997,"meta":205,"style":205},"touch ch2_xml_basic.py\n",[25,103748,103749],{"__ignoreMap":205},[288,103750,103751,103753],{"class":290,"line":291},[288,103752,101456],{"class":2135},[288,103754,103755],{"class":403}," ch2_xml_basic.py\n",[19,103757,102474],{},[280,103759,103761],{"className":23995,"code":103760,"language":23997,"meta":205,"style":205},"python ch2_xml_basic.py\n",[25,103762,103763],{"__ignoreMap":205},[288,103764,103765,103767],{"class":290,"line":291},[288,103766,30553],{"class":2135},[288,103768,103755],{"class":403},[260,103770,101745],{"id":101745},[19,103772,103773],{},"用名字查找 body：",[280,103775,103777],{"className":30551,"code":103776,"language":30553,"meta":205,"style":205},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[25,103778,103779],{"__ignoreMap":205},[288,103780,103781,103784,103786,103788,103790],{"class":290,"line":291},[288,103782,103783],{"class":298},"box_body_id ",[288,103785,344],{"class":294},[288,103787,103563],{"class":298},[288,103789,103566],{"class":403},[288,103791,305],{"class":298},[19,103793,103794],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103796,103797],{},"用名字查找 site：",[280,103799,103801],{"className":30551,"code":103800,"language":30553,"meta":205,"style":205},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[25,103802,103803],{"__ignoreMap":205},[288,103804,103805,103808,103810,103812,103814],{"class":290,"line":291},[288,103806,103807],{"class":298},"site_id ",[288,103809,344],{"class":294},[288,103811,103578],{"class":298},[288,103813,103581],{"class":403},[288,103815,305],{"class":298},[19,103817,103818,103819,103822,103823,103826],{},"注意第二个参数是对象类型。查 body 就用 ",[25,103820,103821],{},"mjOBJ_BODY","，查 site 就用 ",[25,103824,103825],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103828,103829],{},"读取世界坐标：",[280,103831,103833],{"className":30551,"code":103832,"language":30553,"meta":205,"style":205},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[25,103834,103835,103840],{"__ignoreMap":205},[288,103836,103837],{"class":290,"line":291},[288,103838,103839],{"class":298},"data.xpos[box_body_id]\n",[288,103841,103842],{"class":290,"line":206},[288,103843,103844],{"class":298},"data.site_xpos[site_id]\n",[19,103846,103847,103850,103851,103854],{},[25,103848,103849],{},"xpos"," 是 body 的世界坐标，",[25,103852,103853],{},"site_xpos"," 是 site 的世界坐标。",[260,103856,101881],{"id":101881},[280,103858,103860],{"className":30551,"code":103859,"language":30553,"meta":205,"style":205},"import mujoco\nimport numpy as np\n",[25,103861,103862,103868],{"__ignoreMap":205},[288,103863,103864,103866],{"class":290,"line":291},[288,103865,30565],{"class":294},[288,103867,101474],{"class":298},[288,103869,103870,103872,103874,103876],{"class":290,"line":206},[288,103871,30565],{"class":294},[288,103873,31553],{"class":298},[288,103875,31556],{"class":294},[288,103877,31559],{"class":298},[19,103879,103880,103881,103884,103885,103888,103889,511,103892,28558],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[25,103882,103883],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[25,103886,103887],{},"as np"," 是习惯写法，后面就可以写 ",[25,103890,103891],{},"np.array(...)",[25,103893,103894],{},"np.round(...)",[280,103896,103897],{"className":30551,"code":101768,"language":30553,"meta":205,"style":205},[25,103898,103899,103907,103911],{"__ignoreMap":205},[288,103900,103901,103903,103905],{"class":290,"line":291},[288,103902,101487],{"class":347},[288,103904,13737],{"class":294},[288,103906,101492],{"class":403},[288,103908,103909],{"class":290,"line":206},[288,103910,101783],{"class":403},[288,103912,103913],{"class":290,"line":1352},[288,103914,95871],{"class":403},[19,103916,103917,103918,28558],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[25,103919,103920],{},"mujoco.MjModel.from_xml_string(XML)",[280,103922,103924],{"className":53240,"code":103923,"language":53242,"meta":205,"style":205},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,103925,103926],{"__ignoreMap":205},[288,103927,103928,103930,103932,103934,103936,103938,103940,103942,103945,103947,103949,103952,103954,103956,103959],{"class":290,"line":291},[288,103929,1207],{"class":298},[288,103931,103383],{"class":51473},[288,103933,15093],{"class":2135},[288,103935,344],{"class":298},[288,103937,103581],{"class":403},[288,103939,101279],{"class":2135},[288,103941,344],{"class":298},[288,103943,103944],{"class":403},"\"0 0 0\"",[288,103946,101309],{"class":2135},[288,103948,344],{"class":298},[288,103950,103951],{"class":403},"\"0.03\"",[288,103953,78940],{"class":2135},[288,103955,344],{"class":298},[288,103957,103958],{"class":403},"\"0 1 0 1\"",[288,103960,101317],{"class":298},[19,103962,103963,103965,103966,103969,103970,103972,103973,103976],{},[25,103964,103383],{}," 是标记点。",[25,103967,103968],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[25,103971,103343],{}," 表示显示出来的小球大小。",[25,103974,103975],{},"rgba=\"0 1 0 1\""," 表示绿色。",[280,103978,103979],{"className":30551,"code":103776,"language":30553,"meta":205,"style":205},[25,103980,103981],{"__ignoreMap":205},[288,103982,103983,103985,103987,103989,103991],{"class":290,"line":291},[288,103984,103783],{"class":298},[288,103986,344],{"class":294},[288,103988,103563],{"class":298},[288,103990,103566],{"class":403},[288,103992,305],{"class":298},[19,103994,103995,103996,103998],{},"这行的作用是：根据名字 ",[25,103997,103566],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104000,104001],{},"拆开看：",[243,104003,104004,104010,104015,104021],{},[246,104005,104006,104009],{},[25,104007,104008],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[246,104011,104012,104014],{},[25,104013,102258],{}," 是被查询的模型。",[246,104016,104017,104020],{},[25,104018,104019],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[246,104022,104023,104025],{},[25,104024,103566],{}," 是 XML 里写的名字。",[280,104027,104028],{"className":30551,"code":103800,"language":30553,"meta":205,"style":205},[25,104029,104030],{"__ignoreMap":205},[288,104031,104032,104034,104036,104038,104040],{"class":290,"line":291},[288,104033,103807],{"class":298},[288,104035,344],{"class":294},[288,104037,103578],{"class":298},[288,104039,103581],{"class":403},[288,104041,305],{"class":298},[19,104043,104044,104045,28558],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[25,104046,103581],{},[280,104048,104050],{"className":30551,"code":104049,"language":30553,"meta":205,"style":205},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[25,104051,104052,104064],{"__ignoreMap":205},[288,104053,104054,104056,104058,104060,104062],{"class":290,"line":291},[288,104055,1703],{"class":294},[288,104057,103594],{"class":298},[288,104059,1207],{"class":294},[288,104061,4265],{"class":347},[288,104063,3911],{"class":298},[288,104065,104066,104069,104071,104073,104075],{"class":290,"line":206},[288,104067,104068],{"class":294},"    raise",[288,104070,103608],{"class":347},[288,104072,299],{"class":298},[288,104074,103613],{"class":403},[288,104076,305],{"class":298},[19,104078,104079,104081,104082,104085,104086,104089,104090,104093],{},[25,104080,1703],{}," 是条件判断。",[25,104083,104084],{},"mj_name2id"," 找不到对象时会返回 ",[25,104087,104088],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[25,104091,104092],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[280,104095,104097],{"className":30551,"code":104096,"language":30553,"meta":205,"style":205},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[25,104098,104099,104115],{"__ignoreMap":205},[288,104100,104101,104103,104105,104107,104109,104111,104113],{"class":290,"line":291},[288,104102,3197],{"class":294},[288,104104,101674],{"class":298},[288,104106,26216],{"class":294},[288,104108,32616],{"class":347},[288,104110,299],{"class":298},[288,104112,1894],{"class":347},[288,104114,30959],{"class":298},[288,104116,104117],{"class":290,"line":206},[288,104118,101872],{"class":298},[19,104120,104121],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[280,104123,104125],{"className":30551,"code":104124,"language":30553,"meta":205,"style":205},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[25,104126,104127],{"__ignoreMap":205},[288,104128,104129,104131,104133,104135],{"class":290,"line":291},[288,104130,30588],{"class":347},[288,104132,299],{"class":298},[288,104134,103689],{"class":403},[288,104136,103692],{"class":298},[19,104138,104139,104141,104142,104145],{},[25,104140,101252],{}," 保存所有 body 的世界坐标。",[25,104143,104144],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[280,104147,104149],{"className":30551,"code":104148,"language":30553,"meta":205,"style":205},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[25,104150,104151],{"__ignoreMap":205},[288,104152,104153,104155,104157,104159],{"class":290,"line":291},[288,104154,30588],{"class":347},[288,104156,299],{"class":298},[288,104158,103701],{"class":403},[288,104160,103704],{"class":298},[19,104162,104163,104166,104167,104169],{},[25,104164,104165],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[25,104168,103150],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[280,104171,104173],{"className":30551,"code":104172,"language":30553,"meta":205,"style":205},"print(\"box qpos:\", np.array(data.qpos))\n",[25,104174,104175],{"__ignoreMap":205},[288,104176,104177,104179,104181,104183],{"class":290,"line":291},[288,104178,30588],{"class":347},[288,104180,299],{"class":298},[288,104182,103713],{"class":403},[288,104184,103716],{"class":298},[19,104186,104187,104188,104191],{},"这里打印广义位置数组。",[25,104189,104190],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104193,102489],{"id":102488},[19,104195,104196,104197,104200,104201,28558],{},"程序会输出 ",[25,104198,104199],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[25,104202,104203],{},"qpos",[19,104205,104206,104208,104209,104212,104213,104216],{},[25,104207,104144],{}," 是 body 的世界坐标位置。",[25,104210,104211],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[25,104214,104215],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104218,82395,104219,82703,104221,104223],{},[25,104220,103150],{},[25,104222,103968],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104225,104226],{},"如果你把 site 改成：",[280,104228,104230],{"className":53240,"code":104229,"language":53242,"meta":205,"style":205},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,104231,104232],{"__ignoreMap":205},[288,104233,104234,104236,104238,104240,104242,104245,104247,104249,104252,104254,104256,104258,104260,104262,104264],{"class":290,"line":291},[288,104235,1207],{"class":298},[288,104237,103383],{"class":51473},[288,104239,15093],{"class":2135},[288,104241,344],{"class":298},[288,104243,104244],{"class":403},"\"box_top\"",[288,104246,101279],{"class":2135},[288,104248,344],{"class":298},[288,104250,104251],{"class":403},"\"0 0 0.15\"",[288,104253,101309],{"class":2135},[288,104255,344],{"class":298},[288,104257,103951],{"class":403},[288,104259,78940],{"class":2135},[288,104261,344],{"class":298},[288,104263,103958],{"class":403},[288,104265,101317],{"class":298},[19,104267,104268,104269,104272],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[25,104270,104271],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104274,102521],{"id":102520},[243,104276,104277,104286,104289,104296,104302,104313],{},[246,104278,102584,104279,104281,104282,102587,104284,28558],{},[25,104280,103154],{}," 的初始高度从 ",[25,104283,516],{},[25,104285,376],{},[246,104287,104288],{},"重新运行程序。",[246,104290,104291,104292,104295],{},"观察 ",[25,104293,104294],{},"box qpos"," 和最终位置是否变化。",[246,104297,104298,104299,104301],{},"故意把 ",[25,104300,103383],{}," 名称改错，确认程序能报错。",[246,104303,102584,104304,104306,104307,102587,104309,104312],{},[25,104305,101293],{}," 的颜色 ",[25,104308,102205],{},[25,104310,104311],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[246,104314,102584,104315,82703,104317,102587,104320,104323,104324,104326],{},[25,104316,103150],{},[25,104318,104319],{},"pos",[25,104321,104322],{},"0 0 0.2","，观察 ",[25,104325,104271],{}," 如何变化。",[14,104328,102626],{"id":102625},[260,104330,104332],{"id":104331},"xml-error-schema-violation",[25,104333,104334],{},"XML Error: Schema violation",[19,104336,104337],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[260,104339,104341,81463,104343],{"id":104340},"mj_name2id-返回-1",[25,104342,104084],{},[25,104344,104088],{},[19,104346,104347,104348,104351],{},"说明名字没有找到。检查 XML 中 ",[25,104349,104350],{},"name=\"...\"","，并确认对象类型正确。",[260,104353,104354],{"id":104354},"物体不下落",[19,104356,102696],{},[243,104358,104359,104364,104369],{},[246,104360,104361,104362],{},"body 是否有 ",[25,104363,101793],{},[246,104365,104366,104367],{},"gravity 是否为 ",[25,104368,102762],{},[246,104370,104371,104372,104374],{},"body 是否被固定在 ",[25,104373,102014],{}," 中",[260,104376,104377],{"id":104377},"坐标看起来不符合预期",[19,104379,104380],{},"先区分两种坐标：",[436,104382,104383,104392],{},[439,104384,104385],{},[442,104386,104387,104390],{},[445,104388,104389],{"align":23909},"坐标",[445,104391,100873],{"align":23909},[483,104393,104394,104404],{},[442,104395,104396,104401],{},[488,104397,104398,104399],{"align":23909},"XML 里的 ",[25,104400,104319],{},[488,104402,104403],{"align":23909},"相对父 body 的局部坐标",[442,104405,104406,104412],{},[488,104407,104408,25151,104410],{"align":23909},[25,104409,101252],{},[25,104411,104165],{},[488,104413,104414],{"align":23909},"仿真更新后的世界坐标",[19,104416,104417,104418,104420,104421,82712,104424,104426],{},"如果你修改了 ",[25,104419,101243],{},"，但还没调用 ",[25,104422,104423],{},"mj_forward",[25,104425,101388],{},"，世界坐标可能还没有更新。",[14,104428,102780],{"id":102779},[19,104430,104431],{},"MJCF 建模先掌握四件事：",[243,104433,104434,104439,104444,104449],{},[246,104435,104436,104438],{},[25,104437,51973],{}," 表示刚体层级。",[246,104440,104441,104443],{},[25,104442,101293],{}," 表示形状、碰撞和质量。",[246,104445,104446,104448],{},[25,104447,103129],{}," 决定 body 能不能动、怎么动。",[246,104450,104451,104453],{},[25,104452,103383],{}," 用来标记关键点，方便 Python 读取位置。",[19,104455,104456],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5299,104458,104459],{},"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":205,"searchDepth":206,"depth":206,"links":104461},[104462,104463,104464,104470,104474,104475,104476,104483],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":104465},[104466,104467,104468,104469],{"id":103133,"depth":1352,"text":103133},{"id":103247,"depth":1352,"text":103247},{"id":103273,"depth":1352,"text":103274},{"id":103377,"depth":1352,"text":103378},{"id":101425,"depth":206,"text":101426,"children":104471},[104472,104473],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":104477},[104478,104479,104481,104482],{"id":104331,"depth":1352,"text":104334},{"id":104340,"depth":1352,"text":104480},"mj_name2id 返回 -1",{"id":104354,"depth":1352,"text":104354},{"id":104377,"depth":1352,"text":104377},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102827,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104490,"title":104491,"body":104492,"description":205,"extension":215,"meta":105987,"navigation":217,"path":105988,"seo":105989,"stem":105990,"__hash__":105991},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104493,"toc":105959},[104494,104497,104499,104502,104505,104543,104546,104552,104555,104557,104559,104586,104588,104602,104604,104645,104647,104671,104673,104676,104685,104694,104697,104706,104714,104723,104726,104736,104739,104791,104798,104804,104812,104860,104863,104882,104885,104893,104897,104906,104939,104941,105289,105291,105303,105305,105316,105318,105321,105342,105348,105351,105376,105386,105389,105397,105400,105403,105424,105435,105437,105457,105460,105481,105490,105509,105515,105540,105543,105557,105564,105588,105591,105599,105608,105624,105636,105644,105653,105655,105658,105682,105687,105690,105712,105714,105753,105755,105762,105764,105772,105775,105778,105790,105831,105838,105849,105856,105859,105908,105911,105914,105920,105922,105927,105953,105956],[10,104495,104491],{"id":104496},"_3python-控制接口读取状态与推进仿真",[14,104498,100820],{"id":100819},[19,104500,104501],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104503,104504],{},"你将学习:",[243,104506,104507,104512,104517,104521,104526,104537],{},[246,104508,104509],{},[25,104510,104511],{},"MjModel.from_xml_string",[246,104513,104514],{},[25,104515,104516],{},"MjData(model)",[246,104518,104519],{},[25,104520,101388],{},[246,104522,104523],{},[25,104524,104525],{},"mj_resetData",[246,104527,104528,104529,511,104531,511,104534],{},"读取 ",[25,104530,104203],{},[25,104532,104533],{},"qvel",[25,104535,104536],{},"ctrl",[246,104538,104539,104540],{},"使用 ",[25,104541,104542],{},"model.opt.timestep",[19,104544,104545],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[280,104547,104550],{"className":104548,"code":104549,"language":5360,"meta":205},[5358],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[25,104551,104549],{"__ignoreMap":205},[19,104553,104554],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104556,100943],{"id":100942},[19,104558,100946],{},[280,104560,104562],{"className":23995,"code":104561,"language":23997,"meta":205,"style":205},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[25,104563,104564],{"__ignoreMap":205},[288,104565,104566,104568,104570,104572,104574,104577,104579,104581,104583],{"class":290,"line":291},[288,104567,24749],{"class":2135},[288,104569,26488],{"class":403},[288,104571,24007],{"class":403},[288,104573,26573],{"class":347},[288,104575,104576],{"class":403}," python3",[288,104578,100971],{"class":403},[288,104580,102674],{"class":403},[288,104582,100987],{"class":403},[288,104584,104585],{"class":403}," glfw\n",[19,104587,102992],{},[280,104589,104590],{"className":23995,"code":101092,"language":23997,"meta":205,"style":205},[25,104591,104592],{"__ignoreMap":205},[288,104593,104594,104596,104598,104600],{"class":290,"line":291},[288,104595,24004],{"class":2135},[288,104597,24007],{"class":403},[288,104599,101103],{"class":403},[288,104601,101106],{"class":403},[19,104603,103009],{},[280,104605,104607],{"className":23995,"code":104606,"language":23997,"meta":205,"style":205},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[25,104608,104609,104626,104635],{"__ignoreMap":205},[288,104610,104611,104613,104615,104617,104620,104622,104624],{"class":290,"line":291},[288,104612,30503],{"class":2135},[288,104614,29349],{"class":403},[288,104616,25288],{"class":347},[288,104618,104619],{"class":403}," mujoco-python-api",[288,104621,101148],{"class":403},[288,104623,101151],{"class":347},[288,104625,101154],{"class":347},[288,104627,104628,104630,104632],{"class":290,"line":206},[288,104629,30503],{"class":2135},[288,104631,101161],{"class":403},[288,104633,104634],{"class":403}," mujoco-python-api\n",[288,104636,104637,104639,104641,104643],{"class":290,"line":1352},[288,104638,24004],{"class":2135},[288,104640,24007],{"class":403},[288,104642,101103],{"class":403},[288,104644,101106],{"class":403},[19,104646,101177],{},[243,104648,104649,104656,104665],{},[246,104650,104651,101191,104653,104655],{},[25,104652,100848],{},[25,104654,100853],{}," 是官方 Python bindings 的类名。",[246,104657,104658,104659,104662,104663,28558],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[25,104660,104661],{},"mjModel"," 在 Python 中是 ",[25,104664,100882],{},[246,104666,104667,104668,28558],{},"不要使用 ",[25,104669,104670],{},"sim = mujoco_py.MjSim(...)",[14,104672,101218],{"id":101217},[19,104674,104675],{},"仿真推进核心代码:",[280,104677,104679],{"className":30551,"code":104678,"language":30553,"meta":205,"style":205},"mujoco.mj_step(model, data)\n",[25,104680,104681],{"__ignoreMap":205},[288,104682,104683],{"class":290,"line":291},[288,104684,104678],{"class":298},[19,104686,104687,104688,511,104690,511,104692,28558],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[25,104689,101243],{},[25,104691,101246],{},[25,104693,101240],{},[19,104695,104696],{},"重置仿真:",[280,104698,104700],{"className":30551,"code":104699,"language":30553,"meta":205,"style":205},"mujoco.mj_resetData(model, data)\n",[25,104701,104702],{"__ignoreMap":205},[288,104703,104704],{"class":290,"line":291},[288,104705,104699],{"class":298},[19,104707,104708,104709,82712,104711,104713],{},"如果手动修改了 ",[25,104710,101243],{},[25,104712,101246],{},"，通常应调用:",[280,104715,104717],{"className":30551,"code":104716,"language":30553,"meta":205,"style":205},"mujoco.mj_forward(model, data)\n",[25,104718,104719],{"__ignoreMap":205},[288,104720,104721],{"class":290,"line":291},[288,104722,104716],{"class":298},[19,104724,104725],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[260,104727,104729,511,104731,511,104733,104735],{"id":104728},"qposqvelctrl-是什么",[25,104730,104203],{},[25,104732,104533],{},[25,104734,104536],{}," 是什么",[19,104737,104738],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[436,104740,104741,104753],{},[439,104742,104743],{},[442,104744,104745,104748,104750],{},[445,104746,104747],{"align":23909},"字段",[445,104749,100873],{"align":23909},[445,104751,104752],{"align":23909},"谁来修改",[483,104754,104755,104767,104779],{},[442,104756,104757,104761,104764],{},[488,104758,104759],{"align":23909},[25,104760,101243],{},[488,104762,104763],{"align":23909},"广义位置，例如小车位置、关节角、自由物体位置姿态",[488,104765,104766],{"align":23909},"MuJoCo 更新，也可以手动设置初始状态",[442,104768,104769,104773,104776],{},[488,104770,104771],{"align":23909},[25,104772,101246],{},[488,104774,104775],{"align":23909},"广义速度，例如小车速度、关节角速度",[488,104777,104778],{"align":23909},"MuJoCo 更新，也可以手动清零",[442,104780,104781,104785,104788],{},[488,104782,104783],{"align":23909},[25,104784,101249],{},[488,104786,104787],{"align":23909},"actuator 的控制输入",[488,104789,104790],{"align":23909},"主要由你的控制代码写入",[19,104792,9198,104793,101191,104795,104797],{},[25,104794,104203],{},[25,104796,104533],{}," 不一定同维。自由刚体就是典型例子：",[280,104799,104802],{"className":104800,"code":104801,"language":5360,"meta":205},[5358],"freejoint: qpos 7 维，qvel 6 维\n",[25,104803,104801],{"__ignoreMap":205},[260,104805,104807,101191,104809,104811],{"id":104806},"mj_step-和-mj_forward-的区别",[25,104808,101388],{},[25,104810,104423],{}," 的区别",[436,104813,104814,104827],{},[439,104815,104816],{},[442,104817,104818,104821,104824],{},[445,104819,104820],{"align":23909},"函数",[445,104822,104823],{"align":23909},"是否推进时间",[445,104825,104826],{"align":23909},"什么时候用",[483,104828,104829,104842],{},[442,104830,104831,104836,104839],{},[488,104832,104833],{"align":23909},[25,104834,104835],{},"mj_step(model, data)",[488,104837,104838],{"align":23909},"是",[488,104840,104841],{"align":23909},"正常仿真循环，每调用一次前进一步",[442,104843,104844,104849,104852],{},[488,104845,104846],{"align":23909},[25,104847,104848],{},"mj_forward(model, data)",[488,104850,104851],{"align":23909},"否",[488,104853,104854,104855,511,104857,104859],{"align":23909},"手动改了 ",[25,104856,104203],{},[25,104858,104533],{}," 后，刷新派生量",[19,104861,104862],{},"例如你写：",[280,104864,104866],{"className":30551,"code":104865,"language":30553,"meta":205,"style":205},"data.qpos[2] = 2.0\n",[25,104867,104868],{"__ignoreMap":205},[288,104869,104870,104873,104875,104877,104879],{"class":290,"line":291},[288,104871,104872],{"class":298},"data.qpos[",[288,104874,376],{"class":347},[288,104876,4615],{"class":298},[288,104878,344],{"class":294},[288,104880,104881],{"class":347}," 2.0\n",[19,104883,104884],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[280,104886,104887],{"className":30551,"code":104716,"language":30553,"meta":205,"style":205},[25,104888,104889],{"__ignoreMap":205},[288,104890,104891],{"class":290,"line":291},[288,104892,104716],{"class":298},[260,104894,104896],{"id":104895},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104898,104899,104902,104903,104905],{},[25,104900,104901],{},"mujoco.mj_resetData(model, data)"," 会把 ",[25,104904,33574],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[280,104907,104909],{"className":30551,"code":104908,"language":30553,"meta":205,"style":205},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[25,104910,104911,104915,104925,104935],{"__ignoreMap":205},[288,104912,104913],{"class":290,"line":291},[288,104914,104699],{"class":298},[288,104916,104917,104920,104922],{"class":290,"line":206},[288,104918,104919],{"class":298},"data.qpos[:] ",[288,104921,344],{"class":294},[288,104923,104924],{"class":298}," random_qpos\n",[288,104926,104927,104930,104932],{"class":290,"line":1352},[288,104928,104929],{"class":298},"data.qvel[:] ",[288,104931,344],{"class":294},[288,104933,104934],{"class":347}," 0.0\n",[288,104936,104937],{"class":290,"line":1367},[288,104938,104716],{"class":298},[14,104940,101426],{"id":101425},[280,104942,104944],{"className":30551,"code":104943,"language":30553,"meta":205,"style":205},"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",[25,104945,104946,104952,104962,104966,104970,104978,104983,104987,104991,104995,105000,105004,105009,105014,105019,105023,105027,105031,105035,105039,105043,105062,105069,105081,105092,105108,105124,105128,105132,105144,105156,105164,105168,105179,105183,105199,105203,105207,105216,105220,105225,105234,105238,105251,105256,105265,105269,105273,105285],{"__ignoreMap":205},[288,104947,104948,104950],{"class":290,"line":291},[288,104949,30565],{"class":294},[288,104951,101474],{"class":298},[288,104953,104954,104956,104958,104960],{"class":290,"line":206},[288,104955,30565],{"class":294},[288,104957,31553],{"class":298},[288,104959,31556],{"class":294},[288,104961,31559],{"class":298},[288,104963,104964],{"class":290,"line":1352},[288,104965,2572],{"emptyLinePlaceholder":217},[288,104967,104968],{"class":290,"line":1367},[288,104969,2572],{"emptyLinePlaceholder":217},[288,104971,104972,104974,104976],{"class":290,"line":1373},[288,104973,101487],{"class":347},[288,104975,13737],{"class":294},[288,104977,101492],{"class":403},[288,104979,104980],{"class":290,"line":1387},[288,104981,104982],{"class":403},"\u003Cmujoco model=\"state_api\">\n",[288,104984,104985],{"class":290,"line":1393},[288,104986,101502],{"class":403},[288,104988,104989],{"class":290,"line":1484},[288,104990,2572],{"emptyLinePlaceholder":217},[288,104992,104993],{"class":290,"line":1490},[288,104994,101511],{"class":403},[288,104996,104997],{"class":290,"line":1502},[288,104998,104999],{"class":403},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[288,105001,105002],{"class":290,"line":1784},[288,105003,2572],{"emptyLinePlaceholder":217},[288,105005,105006],{"class":290,"line":1789},[288,105007,105008],{"class":403},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[288,105010,105011],{"class":290,"line":1795},[288,105012,105013],{"class":403},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[288,105015,105016],{"class":290,"line":1800},[288,105017,105018],{"class":403},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[288,105020,105021],{"class":290,"line":1814},[288,105022,101540],{"class":403},[288,105024,105025],{"class":290,"line":1819},[288,105026,101545],{"class":403},[288,105028,105029],{"class":290,"line":1825},[288,105030,101550],{"class":403},[288,105032,105033],{"class":290,"line":1846},[288,105034,95871],{"class":403},[288,105036,105037],{"class":290,"line":1851},[288,105038,2572],{"emptyLinePlaceholder":217},[288,105040,105041],{"class":290,"line":1865},[288,105042,2572],{"emptyLinePlaceholder":217},[288,105044,105045,105047,105050,105053,105055,105058,105060],{"class":290,"line":1870},[288,105046,32120],{"class":294},[288,105048,105049],{"class":2135}," print_state",[288,105051,105052],{"class":298},"(prefix: ",[288,105054,1472],{"class":347},[288,105056,105057],{"class":298},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[288,105059,95859],{"class":347},[288,105061,3911],{"class":298},[288,105063,105064,105066],{"class":290,"line":1899},[288,105065,31472],{"class":347},[288,105067,105068],{"class":298},"(prefix)\n",[288,105070,105071,105073,105075,105078],{"class":290,"line":1904},[288,105072,31472],{"class":347},[288,105074,299],{"class":298},[288,105076,105077],{"class":403},"\"  timestep:\"",[288,105079,105080],{"class":298},", model.opt.timestep)\n",[288,105082,105083,105085,105087,105090],{"class":290,"line":1921},[288,105084,31472],{"class":347},[288,105086,299],{"class":298},[288,105088,105089],{"class":403},"\"  time:\"",[288,105091,101651],{"class":298},[288,105093,105094,105096,105098,105101,105104,105106],{"class":290,"line":1926},[288,105095,31472],{"class":347},[288,105097,299],{"class":298},[288,105099,105100],{"class":403},"\"  qpos:\"",[288,105102,105103],{"class":298},", np.round(data.qpos.copy(), ",[288,105105,590],{"class":347},[288,105107,30670],{"class":298},[288,105109,105110,105112,105114,105117,105120,105122],{"class":290,"line":1931},[288,105111,31472],{"class":347},[288,105113,299],{"class":298},[288,105115,105116],{"class":403},"\"  qvel:\"",[288,105118,105119],{"class":298},", np.round(data.qvel.copy(), ",[288,105121,590],{"class":347},[288,105123,30670],{"class":298},[288,105125,105126],{"class":290,"line":1936},[288,105127,2572],{"emptyLinePlaceholder":217},[288,105129,105130],{"class":290,"line":1950},[288,105131,2572],{"emptyLinePlaceholder":217},[288,105133,105134,105136,105138,105140,105142],{"class":290,"line":1955},[288,105135,32120],{"class":294},[288,105137,2145],{"class":2135},[288,105139,101571],{"class":298},[288,105141,95859],{"class":347},[288,105143,3911],{"class":298},[288,105145,105146,105148,105150,105152,105154],{"class":290,"line":2749},[288,105147,101580],{"class":298},[288,105149,344],{"class":294},[288,105151,101585],{"class":298},[288,105153,101487],{"class":347},[288,105155,305],{"class":298},[288,105157,105158,105160,105162],{"class":290,"line":2763},[288,105159,101594],{"class":298},[288,105161,344],{"class":294},[288,105163,101599],{"class":298},[288,105165,105166],{"class":290,"line":2771},[288,105167,2572],{"emptyLinePlaceholder":217},[288,105169,105170,105173,105176],{"class":290,"line":2776},[288,105171,105172],{"class":298},"    print_state(",[288,105174,105175],{"class":403},"\"initial\"",[288,105177,105178],{"class":298},", model, data)\n",[288,105180,105181],{"class":290,"line":2782},[288,105182,2572],{"emptyLinePlaceholder":217},[288,105184,105185,105187,105189,105191,105193,105195,105197],{"class":290,"line":2788},[288,105186,3373],{"class":294},[288,105188,101674],{"class":298},[288,105190,26216],{"class":294},[288,105192,32616],{"class":347},[288,105194,299],{"class":298},[288,105196,953],{"class":347},[288,105198,30959],{"class":298},[288,105200,105201],{"class":290,"line":2793},[288,105202,101689],{"class":298},[288,105204,105205],{"class":290,"line":8121},[288,105206,2572],{"emptyLinePlaceholder":217},[288,105208,105209,105211,105214],{"class":290,"line":8145},[288,105210,105172],{"class":298},[288,105212,105213],{"class":403},"\"after 50 steps\"",[288,105215,105178],{"class":298},[288,105217,105218],{"class":290,"line":8150},[288,105219,2572],{"emptyLinePlaceholder":217},[288,105221,105222],{"class":290,"line":8156},[288,105223,105224],{"class":298},"    mujoco.mj_resetData(model, data)\n",[288,105226,105227,105229,105232],{"class":290,"line":8183},[288,105228,105172],{"class":298},[288,105230,105231],{"class":403},"\"after reset\"",[288,105233,105178],{"class":298},[288,105235,105236],{"class":290,"line":8188},[288,105237,2572],{"emptyLinePlaceholder":217},[288,105239,105240,105243,105245,105247,105249],{"class":290,"line":8194},[288,105241,105242],{"class":298},"    data.qpos[",[288,105244,376],{"class":347},[288,105246,4615],{"class":298},[288,105248,344],{"class":294},[288,105250,104881],{"class":347},[288,105252,105253],{"class":290,"line":8206},[288,105254,105255],{"class":298},"    mujoco.mj_forward(model, data)\n",[288,105257,105258,105260,105263],{"class":290,"line":8218},[288,105259,105172],{"class":298},[288,105261,105262],{"class":403},"\"after manual qpos edit\"",[288,105264,105178],{"class":298},[288,105266,105267],{"class":290,"line":8230},[288,105268,2572],{"emptyLinePlaceholder":217},[288,105270,105271],{"class":290,"line":9889},[288,105272,2572],{"emptyLinePlaceholder":217},[288,105274,105275,105277,105279,105281,105283],{"class":290,"line":9914},[288,105276,1703],{"class":294},[288,105278,31393],{"class":347},[288,105280,101732],{"class":294},[288,105282,101735],{"class":403},[288,105284,3911],{"class":298},[288,105286,105287],{"class":290,"line":9937},[288,105288,101742],{"class":298},[19,105290,103743],{},[280,105292,105294],{"className":23995,"code":105293,"language":23997,"meta":205,"style":205},"touch ch3_python_state.py\n",[25,105295,105296],{"__ignoreMap":205},[288,105297,105298,105300],{"class":290,"line":291},[288,105299,101456],{"class":2135},[288,105301,105302],{"class":403}," ch3_python_state.py\n",[19,105304,102474],{},[280,105306,105308],{"className":23995,"code":105307,"language":23997,"meta":205,"style":205},"python ch3_python_state.py\n",[25,105309,105310],{"__ignoreMap":205},[288,105311,105312,105314],{"class":290,"line":291},[288,105313,30553],{"class":2135},[288,105315,105302],{"class":403},[260,105317,101745],{"id":101745},[19,105319,105320],{},"打印状态的函数：",[280,105322,105324],{"className":30551,"code":105323,"language":30553,"meta":205,"style":205},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[25,105325,105326],{"__ignoreMap":205},[288,105327,105328,105330,105332,105334,105336,105338,105340],{"class":290,"line":291},[288,105329,32120],{"class":294},[288,105331,105049],{"class":2135},[288,105333,105052],{"class":298},[288,105335,1472],{"class":347},[288,105337,105057],{"class":298},[288,105339,95859],{"class":347},[288,105341,3911],{"class":298},[19,105343,105344,105345,105347],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[25,105346,33574],{}," 里发生了什么。",[19,105349,105350],{},"推进 50 步：",[280,105352,105354],{"className":30551,"code":105353,"language":30553,"meta":205,"style":205},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[25,105355,105356,105372],{"__ignoreMap":205},[288,105357,105358,105360,105362,105364,105366,105368,105370],{"class":290,"line":291},[288,105359,3197],{"class":294},[288,105361,101674],{"class":298},[288,105363,26216],{"class":294},[288,105365,32616],{"class":347},[288,105367,299],{"class":298},[288,105369,953],{"class":347},[288,105371,30959],{"class":298},[288,105373,105374],{"class":290,"line":206},[288,105375,101872],{"class":298},[19,105377,105378,105379,105382,105383,105385],{},"由于 ",[25,105380,105381],{},"timestep=0.01","，所以 50 步后时间约为 ",[25,105384,35502],{}," 秒。",[19,105387,105388],{},"重置：",[280,105390,105391],{"className":30551,"code":104699,"language":30553,"meta":205,"style":205},[25,105392,105393],{"__ignoreMap":205},[288,105394,105395],{"class":290,"line":291},[288,105396,104699],{"class":298},[19,105398,105399],{},"这会把时间、位置、速度恢复到初始状态。",[19,105401,105402],{},"手动改高度：",[280,105404,105406],{"className":30551,"code":105405,"language":30553,"meta":205,"style":205},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[25,105407,105408,105420],{"__ignoreMap":205},[288,105409,105410,105412,105414,105416,105418],{"class":290,"line":291},[288,105411,104872],{"class":298},[288,105413,376],{"class":347},[288,105415,4615],{"class":298},[288,105417,344],{"class":294},[288,105419,104881],{"class":347},[288,105421,105422],{"class":290,"line":206},[288,105423,104716],{"class":298},[19,105425,105426,105427,105430,105431,105434],{},"这个例子里 ",[25,105428,105429],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[25,105432,105433],{},"2.0"," 表示把小球放到更高的位置。",[260,105436,101881],{"id":101881},[280,105438,105439],{"className":30551,"code":105323,"language":30553,"meta":205,"style":205},[25,105440,105441],{"__ignoreMap":205},[288,105442,105443,105445,105447,105449,105451,105453,105455],{"class":290,"line":291},[288,105444,32120],{"class":294},[288,105446,105049],{"class":2135},[288,105448,105052],{"class":298},[288,105450,1472],{"class":347},[288,105452,105057],{"class":298},[288,105454,95859],{"class":347},[288,105456,3911],{"class":298},[19,105458,105459],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[243,105461,105462,105471,105476],{},[246,105463,105464,105467,105468,105470],{},[25,105465,105466],{},"prefix","：一段文字，比如 ",[25,105469,105175],{},"，用来说明现在打印的是哪个阶段。",[246,105472,105473,105475],{},[25,105474,102258],{},"：MuJoCo 模型。",[246,105477,105478,105480],{},[25,105479,33574],{},"：MuJoCo 当前状态。",[19,105482,105483,511,105486,105489],{},[25,105484,105485],{},"prefix: str",[25,105487,105488],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[280,105491,105493],{"className":30551,"code":105492,"language":30553,"meta":205,"style":205},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[25,105494,105495],{"__ignoreMap":205},[288,105496,105497,105499,105501,105503,105505,105507],{"class":290,"line":291},[288,105498,30588],{"class":347},[288,105500,299],{"class":298},[288,105502,105100],{"class":403},[288,105504,105103],{"class":298},[288,105506,590],{"class":347},[288,105508,30670],{"class":298},[19,105510,105511,105514],{},[25,105512,105513],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[280,105516,105518],{"className":30551,"code":105517,"language":30553,"meta":205,"style":205},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[25,105519,105520,105532],{"__ignoreMap":205},[288,105521,105522,105524,105526,105528,105530],{"class":290,"line":291},[288,105523,101807],{"class":298},[288,105525,344],{"class":294},[288,105527,101585],{"class":298},[288,105529,101487],{"class":347},[288,105531,305],{"class":298},[288,105533,105534,105536,105538],{"class":290,"line":206},[288,105535,101831],{"class":298},[288,105537,344],{"class":294},[288,105539,101599],{"class":298},[19,105541,105542],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[280,105544,105546],{"className":30551,"code":105545,"language":30553,"meta":205,"style":205},"print_state(\"initial\", model, data)\n",[25,105547,105548],{"__ignoreMap":205},[288,105549,105550,105553,105555],{"class":290,"line":291},[288,105551,105552],{"class":298},"print_state(",[288,105554,105175],{"class":403},[288,105556,105178],{"class":298},[19,105558,105559,105560,105563],{},"调用刚才定义的 ",[25,105561,105562],{},"print_state"," 函数，打印初始状态。",[280,105565,105566],{"className":30551,"code":105353,"language":30553,"meta":205,"style":205},[25,105567,105568,105584],{"__ignoreMap":205},[288,105569,105570,105572,105574,105576,105578,105580,105582],{"class":290,"line":291},[288,105571,3197],{"class":294},[288,105573,101674],{"class":298},[288,105575,26216],{"class":294},[288,105577,32616],{"class":347},[288,105579,299],{"class":298},[288,105581,953],{"class":347},[288,105583,30959],{"class":298},[288,105585,105586],{"class":290,"line":206},[288,105587,101872],{"class":298},[19,105589,105590],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[280,105592,105593],{"className":30551,"code":104699,"language":30553,"meta":205,"style":205},[25,105594,105595],{"__ignoreMap":205},[288,105596,105597],{"class":290,"line":291},[288,105598,104699],{"class":298},[19,105600,105601,105602,105604,105605,105607],{},"重置 ",[25,105603,33574],{},"。注意它不会重新创建 ",[25,105606,102258],{},"，因为模型结构没有变，只是状态回到初始值。",[280,105609,105610],{"className":30551,"code":104865,"language":30553,"meta":205,"style":205},[25,105611,105612],{"__ignoreMap":205},[288,105613,105614,105616,105618,105620,105622],{"class":290,"line":291},[288,105615,104872],{"class":298},[288,105617,376],{"class":347},[288,105619,4615],{"class":298},[288,105621,344],{"class":294},[288,105623,104881],{"class":347},[19,105625,105626,105627,511,105630,511,105633,105635],{},"这行是“手动改状态”。在 freejoint 中，",[25,105628,105629],{},"qpos[0]",[25,105631,105632],{},"qpos[1]",[25,105634,105429],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[280,105637,105638],{"className":30551,"code":104716,"language":30553,"meta":205,"style":205},[25,105639,105640],{"__ignoreMap":205},[288,105641,105642],{"class":290,"line":291},[288,105643,104716],{"class":298},[19,105645,105646,105647,105649,105650,105652],{},"手动改完 ",[25,105648,104203],{}," 后，调用 ",[25,105651,104423],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105654,102489],{"id":102488},[19,105656,105657],{},"你会看到:",[243,105659,105660,105665,105670,105673],{},[246,105661,105662,105663],{},"初始时间为 ",[25,105664,490],{},[246,105666,105667,105668],{},"50 步后时间约为 ",[25,105669,35502],{},[246,105671,105672],{},"reset 后状态恢复",[246,105674,105675,105676,105679,105680],{},"手动修改 ",[25,105677,105678],{},"data.qpos[2]"," 后，小球高度变为 ",[25,105681,105433],{},[19,105683,105684,105686],{},[25,105685,105429],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105688,105689],{},"输出里可以重点看三件事：",[243,105691,105692,105700,105705],{},[246,105693,105694,105696,105697,105699],{},[25,105695,2559],{}," 是否随着 ",[25,105698,101388],{}," 增加。",[246,105701,105702,105704],{},[25,105703,104203],{}," 的 z 坐标是否因为下落而变化。",[246,105706,105707,105709,105710,28558],{},[25,105708,104525],{}," 后时间是否回到 ",[25,105711,490],{},[14,105713,102521],{"id":102520},[243,105715,105716,105722,105728,105734,105737,105746],{},[246,105717,105718,105719,28558],{},"修改 timestep 为 ",[25,105720,105721],{},"0.005",[246,105723,105724,105725,28558],{},"重新运行，检查 50 步后时间是否约为 ",[25,105726,105727],{},"0.25",[246,105729,105730,105731,28558],{},"修改重力为 ",[25,105732,105733],{},"0 0 -1.0",[246,105735,105736],{},"观察小球下降速度是否变慢。",[246,105738,102584,105739,102587,105742,105745],{},[25,105740,105741],{},"data.qpos[2] = 2.0",[25,105743,105744],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[246,105747,105748,105749,105752],{},"注释掉 ",[25,105750,105751],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105754,102626],{"id":102625},[260,105756,105758,105759,105761],{"id":105757},"修改-dataqpos-后位置没有更新","修改 ",[25,105760,101243],{}," 后位置没有更新",[19,105763,102635],{},[280,105765,105766],{"className":30551,"code":104716,"language":30553,"meta":205,"style":205},[25,105767,105768],{"__ignoreMap":205},[288,105769,105770],{"class":290,"line":291},[288,105771,104716],{"class":298},[260,105773,105774],{"id":105774},"数组维度看不懂",[19,105776,105777],{},"打印模型维度:",[280,105779,105781],{"className":30551,"code":105780,"language":30553,"meta":205,"style":205},"print(model.nq, model.nv, model.nu)\n",[25,105782,105783],{"__ignoreMap":205},[288,105784,105785,105787],{"class":290,"line":291},[288,105786,30588],{"class":347},[288,105788,105789],{"class":298},"(model.nq, model.nv, model.nu)\n",[436,105791,105792,105800],{},[439,105793,105794],{},[442,105795,105796,105798],{},[445,105797,104747],{"align":23909},[445,105799,100873],{"align":23909},[483,105801,105802,105812,105822],{},[442,105803,105804,105809],{},[488,105805,105806],{"align":23909},[25,105807,105808],{},"nq",[488,105810,105811],{"align":23909},"位置变量数量",[442,105813,105814,105819],{},[488,105815,105816],{"align":23909},[25,105817,105818],{},"nv",[488,105820,105821],{"align":23909},"速度变量数量",[442,105823,105824,105828],{},[488,105825,105826],{"align":23909},[25,105827,102335],{},[488,105829,105830],{"align":23909},"控制输入数量",[260,105832,105834,105835,105837],{"id":105833},"误以为-qpos-一定等于关节数","误以为 ",[25,105836,104203],{}," 一定等于关节数",[19,105839,105840,105841,82703,105843,105845,105846,105848],{},"不是。例如 ",[25,105842,101793],{},[25,105844,104203],{}," 是 7 维，但 ",[25,105847,104533],{}," 是 6 维。",[260,105850,105852,105853,105855],{"id":105851},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[25,105854,104203],{}," 的第几位",[19,105857,105858],{},"初学时可以先打印：",[280,105860,105862],{"className":30551,"code":105861,"language":30553,"meta":205,"style":205},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[25,105863,105864,105874,105884,105896],{"__ignoreMap":205},[288,105865,105866,105868,105870,105872],{"class":290,"line":291},[288,105867,30588],{"class":347},[288,105869,299],{"class":298},[288,105871,101612],{"class":403},[288,105873,101615],{"class":298},[288,105875,105876,105878,105880,105882],{"class":290,"line":206},[288,105877,30588],{"class":347},[288,105879,299],{"class":298},[288,105881,101624],{"class":403},[288,105883,101627],{"class":298},[288,105885,105886,105888,105890,105893],{"class":290,"line":1352},[288,105887,30588],{"class":347},[288,105889,299],{"class":298},[288,105891,105892],{"class":403},"\"qpos:\"",[288,105894,105895],{"class":298},", data.qpos)\n",[288,105897,105898,105900,105902,105905],{"class":290,"line":1367},[288,105899,30588],{"class":347},[288,105901,299],{"class":298},[288,105903,105904],{"class":403},"\"qvel:\"",[288,105906,105907],{"class":298},", data.qvel)\n",[19,105909,105910],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[260,105912,105913],{"id":105913},"仿真结果每次都一样",[19,105915,105916,105917,105919],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[25,105918,104203],{},"、目标点或控制输入。",[14,105921,102780],{"id":102779},[19,105923,105924,105925,24791],{},"Python 控制 MuJoCo 的核心就是读写 ",[25,105926,33574],{},[243,105928,105929,105937,105942,105947],{},[246,105930,105931,105932,101191,105934,105936],{},"用 ",[25,105933,101243],{},[25,105935,101246],{}," 读取状态。",[246,105938,105931,105939,105941],{},[25,105940,101249],{}," 写入控制。",[246,105943,105931,105944,105946],{},[25,105945,101388],{}," 推进时间。",[246,105948,105949,105950,105952],{},"手动改状态后用 ",[25,105951,104423],{}," 刷新派生量。",[19,105954,105955],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5299,105957,105958],{},"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":205,"searchDepth":206,"depth":206,"links":105960},[105961,105962,105963,105970,105974,105975,105976,105986],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":105964},[105965,105967,105969],{"id":104728,"depth":1352,"text":105966},"qpos、qvel、ctrl 是什么",{"id":104806,"depth":1352,"text":105968},"mj_step 和 mj_forward 的区别",{"id":104895,"depth":1352,"text":104896},{"id":101425,"depth":206,"text":101426,"children":105971},[105972,105973],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":105977},[105978,105980,105981,105983,105985],{"id":105757,"depth":1352,"text":105979},"修改 data.qpos 后位置没有更新",{"id":105774,"depth":1352,"text":105774},{"id":105833,"depth":1352,"text":105982},"误以为 qpos 一定等于关节数",{"id":105851,"depth":1352,"text":105984},"不知道某个元素在 qpos 的第几位",{"id":105913,"depth":1352,"text":105913},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104491,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105993,"title":105994,"body":105995,"description":205,"extension":215,"meta":107685,"navigation":217,"path":107686,"seo":107687,"stem":107688,"__hash__":107689},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105996,"toc":107661},[105997,106000,106002,106005,106007,106032,106035,106054,106057,106059,106061,106085,106087,106101,106103,106144,106146,106170,106172,106175,106209,106211,106224,106227,106295,106304,106308,106311,106345,106351,106354,106358,106397,106400,106420,106424,106467,106469,106498,106501,106507,106510,106512,106906,106908,106920,106922,106933,106935,106938,106967,106975,106978,107013,107016,107018,107026,107029,107031,107042,107052,107072,107075,107111,107123,107171,107190,107232,107245,107273,107278,107299,107309,107327,107330,107364,107367,107387,107390,107409,107415,107417,107420,107426,107432,107442,107445,107451,107460,107462,107508,107510,107516,107522,107525,107528,107548,107551,107557,107563,107565,107588,107591,107594,107603,107606,107644,107646,107649,107655,107658],[10,105998,105994],{"id":105999},"_4关节actuator-与力控制",[14,106001,100820],{"id":100819},[19,106003,106004],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106006,104504],{},[243,106008,106009,106015,106020,106024,106029],{},[246,106010,106011,106014],{},[25,106012,106013],{},"hinge"," 关节",[246,106016,106017],{},[25,106018,106019],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[246,106021,106022],{},[25,106023,101249],{},[246,106025,106026],{},[25,106027,106028],{},"ctrlrange",[246,106030,106031],{},"读取关节角和角速度",[19,106033,106034],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[280,106036,106038],{"className":30551,"code":106037,"language":30553,"meta":205,"style":205},"data.ctrl[0] = ...\n",[25,106039,106040],{"__ignoreMap":205},[288,106041,106042,106045,106047,106049,106051],{"class":290,"line":291},[288,106043,106044],{"class":298},"data.ctrl[",[288,106046,490],{"class":347},[288,106048,4615],{"class":298},[288,106050,344],{"class":294},[288,106052,106053],{"class":347}," ...\n",[19,106055,106056],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106058,100943],{"id":100942},[19,106060,100946],{},[280,106062,106063],{"className":23995,"code":104561,"language":23997,"meta":205,"style":205},[25,106064,106065],{"__ignoreMap":205},[288,106066,106067,106069,106071,106073,106075,106077,106079,106081,106083],{"class":290,"line":291},[288,106068,24749],{"class":2135},[288,106070,26488],{"class":403},[288,106072,24007],{"class":403},[288,106074,26573],{"class":347},[288,106076,104576],{"class":403},[288,106078,100971],{"class":403},[288,106080,102674],{"class":403},[288,106082,100987],{"class":403},[288,106084,104585],{"class":403},[19,106086,102992],{},[280,106088,106089],{"className":23995,"code":101092,"language":23997,"meta":205,"style":205},[25,106090,106091],{"__ignoreMap":205},[288,106092,106093,106095,106097,106099],{"class":290,"line":291},[288,106094,24004],{"class":2135},[288,106096,24007],{"class":403},[288,106098,101103],{"class":403},[288,106100,101106],{"class":403},[19,106102,103009],{},[280,106104,106106],{"className":23995,"code":106105,"language":23997,"meta":205,"style":205},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[25,106107,106108,106125,106134],{"__ignoreMap":205},[288,106109,106110,106112,106114,106116,106119,106121,106123],{"class":290,"line":291},[288,106111,30503],{"class":2135},[288,106113,29349],{"class":403},[288,106115,25288],{"class":347},[288,106117,106118],{"class":403}," mujoco-control",[288,106120,101148],{"class":403},[288,106122,101151],{"class":347},[288,106124,101154],{"class":347},[288,106126,106127,106129,106131],{"class":290,"line":206},[288,106128,30503],{"class":2135},[288,106130,101161],{"class":403},[288,106132,106133],{"class":403}," mujoco-control\n",[288,106135,106136,106138,106140,106142],{"class":290,"line":1352},[288,106137,24004],{"class":2135},[288,106139,24007],{"class":403},[288,106141,101103],{"class":403},[288,106143,101106],{"class":403},[19,106145,101177],{},[243,106147,106148,106154,106161,106167],{},[246,106149,106150,106153],{},[25,106151,106152],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[246,106155,106156,106158,106159,28558],{},[25,106157,101249],{}," 长度等于 ",[25,106160,102331],{},[246,106162,82395,106163,106166],{},[25,106164,106165],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[246,106168,106169],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106171,101218],{"id":101217},[19,106173,106174],{},"关节决定 body 如何运动:",[280,106176,106178],{"className":53240,"code":106177,"language":53242,"meta":205,"style":205},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,106179,106180],{"__ignoreMap":205},[288,106181,106182,106184,106186,106188,106190,106193,106195,106197,106199,106202,106204,106207],{"class":290,"line":291},[288,106183,1207],{"class":298},[288,106185,103129],{"class":51473},[288,106187,15093],{"class":2135},[288,106189,344],{"class":298},[288,106191,106192],{"class":403},"\"hinge\"",[288,106194,53997],{"class":2135},[288,106196,344],{"class":298},[288,106198,106192],{"class":403},[288,106200,106201],{"class":2135}," axis",[288,106203,344],{"class":298},[288,106205,106206],{"class":403},"\"0 1 0\"",[288,106208,101317],{"class":298},[19,106210,103225],{},[243,106212,106213,106218,106221],{},[246,106214,106215,106216],{},"名字是 ",[25,106217,106013],{},[246,106219,106220],{},"类型是旋转关节",[246,106222,106223],{},"绕 y 轴旋转",[19,106225,106226],{},"actuator 决定如何施加控制:",[280,106228,106230],{"className":53240,"code":106229,"language":53242,"meta":205,"style":205},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[25,106231,106232,106241,106287],{"__ignoreMap":205},[288,106233,106234,106236,106239],{"class":290,"line":291},[288,106235,1207],{"class":298},[288,106237,106238],{"class":51473},"actuator",[288,106240,51480],{"class":298},[288,106242,106243,106245,106248,106250,106252,106255,106258,106260,106262,106265,106267,106269,106272,106274,106277,106280,106282,106285],{"class":290,"line":206},[288,106244,52317],{"class":298},[288,106246,106247],{"class":51473},"motor",[288,106249,15093],{"class":2135},[288,106251,344],{"class":298},[288,106253,106254],{"class":403},"\"hinge_motor\"",[288,106256,106257],{"class":2135}," joint",[288,106259,344],{"class":298},[288,106261,106192],{"class":403},[288,106263,106264],{"class":2135}," gear",[288,106266,344],{"class":298},[288,106268,3850],{"class":403},[288,106270,106271],{"class":2135}," ctrlrange",[288,106273,344],{"class":298},[288,106275,106276],{"class":403},"\"-2 2\"",[288,106278,106279],{"class":2135}," ctrllimited",[288,106281,344],{"class":298},[288,106283,106284],{"class":403},"\"true\"",[288,106286,101317],{"class":298},[288,106288,106289,106291,106293],{"class":290,"line":1352},[288,106290,51958],{"class":298},[288,106292,106238],{"class":51473},[288,106294,51480],{"class":298},[19,106296,106297,106300,106301,28558],{},[25,106298,106299],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[25,106302,106303],{},"[-2, 2]",[260,106305,106307],{"id":106306},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106309,106310],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[436,106312,106313,106323],{},[439,106314,106315],{},[442,106316,106317,106319,106321],{},[445,106318,25926],{"align":23909},[445,106320,102869],{"align":23909},[445,106322,100907],{"align":23909},[483,106324,106325,106335],{},[442,106326,106327,106329,106332],{},[488,106328,103129],{"align":23909},[488,106330,106331],{"align":23909},"定义能怎么动",[488,106333,106334],{"align":23909},"门轴允许门旋转",[442,106336,106337,106339,106342],{},[488,106338,106238],{"align":23909},[488,106340,106341],{"align":23909},"定义怎么施力或控制",[488,106343,106344],{"align":23909},"人推门、马达带动门",[19,106346,106347,106348,106350],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[25,106349,101249],{}," 主动控制它。",[19,106352,106353],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[260,106355,106357],{"id":106356},"hinge-joint","hinge joint",[280,106359,106361],{"className":53240,"code":106360,"language":53242,"meta":205,"style":205},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,106362,106363],{"__ignoreMap":205},[288,106364,106365,106367,106369,106371,106373,106375,106377,106379,106381,106383,106385,106387,106390,106392,106395],{"class":290,"line":291},[288,106366,1207],{"class":298},[288,106368,103129],{"class":51473},[288,106370,15093],{"class":2135},[288,106372,344],{"class":298},[288,106374,106192],{"class":403},[288,106376,53997],{"class":2135},[288,106378,344],{"class":298},[288,106380,106192],{"class":403},[288,106382,106201],{"class":2135},[288,106384,344],{"class":298},[288,106386,106206],{"class":403},[288,106388,106389],{"class":2135}," damping",[288,106391,344],{"class":298},[288,106393,106394],{"class":403},"\"0.1\"",[288,106396,101317],{"class":298},[19,106398,106399],{},"含义：",[243,106401,106402,106408,106414],{},[246,106403,106404,106407],{},[25,106405,106406],{},"type=\"hinge\"","：只能绕一个轴旋转。",[246,106409,106410,106413],{},[25,106411,106412],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[246,106415,106416,106419],{},[25,106417,106418],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[260,106421,106423],{"id":106422},"motor-actuator","motor actuator",[280,106425,106427],{"className":53240,"code":106426,"language":53242,"meta":205,"style":205},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[25,106428,106429],{"__ignoreMap":205},[288,106430,106431,106433,106435,106437,106439,106441,106443,106445,106447,106449,106451,106453,106455,106457,106459,106461,106463,106465],{"class":290,"line":291},[288,106432,1207],{"class":298},[288,106434,106247],{"class":51473},[288,106436,15093],{"class":2135},[288,106438,344],{"class":298},[288,106440,106254],{"class":403},[288,106442,106257],{"class":2135},[288,106444,344],{"class":298},[288,106446,106192],{"class":403},[288,106448,106264],{"class":2135},[288,106450,344],{"class":298},[288,106452,3850],{"class":403},[288,106454,106271],{"class":2135},[288,106456,344],{"class":298},[288,106458,106276],{"class":403},[288,106460,106279],{"class":2135},[288,106462,344],{"class":298},[288,106464,106284],{"class":403},[288,106466,101317],{"class":298},[19,106468,106399],{},[243,106470,106471,106480,106486,106492],{},[246,106472,106473,106476,106477,106479],{},[25,106474,106475],{},"joint=\"hinge\"","：这个电机作用在名为 ",[25,106478,106013],{}," 的关节上。",[246,106481,106482,106485],{},[25,106483,106484],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[246,106487,106488,106491],{},[25,106489,106490],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[246,106493,106494,106497],{},[25,106495,106496],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106499,106500],{},"简单理解：",[280,106502,106505],{"className":106503,"code":106504,"language":5360,"meta":205},[5358],"实际施加效果 ≈ data.ctrl[0] * gear\n",[25,106506,106504],{"__ignoreMap":205},[19,106508,106509],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106511,101426],{"id":101425},[280,106513,106515],{"className":30551,"code":106514,"language":30553,"meta":205,"style":205},"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",[25,106516,106517,106524,106528,106534,106544,106548,106552,106560,106565,106570,106574,106578,106583,106588,106592,106597,106602,106607,106612,106616,106620,106624,106629,106634,106639,106643,106647,106651,106655,106667,106679,106687,106691,106701,106711,106721,106725,106738,106751,106755,106772,106786,106821,106825,106829,106840,106855,106870,106882,106886,106890,106902],{"__ignoreMap":205},[288,106518,106519,106521],{"class":290,"line":291},[288,106520,30565],{"class":294},[288,106522,106523],{"class":298}," math\n",[288,106525,106526],{"class":290,"line":206},[288,106527,2572],{"emptyLinePlaceholder":217},[288,106529,106530,106532],{"class":290,"line":1352},[288,106531,30565],{"class":294},[288,106533,101474],{"class":298},[288,106535,106536,106538,106540,106542],{"class":290,"line":1367},[288,106537,30565],{"class":294},[288,106539,31553],{"class":298},[288,106541,31556],{"class":294},[288,106543,31559],{"class":298},[288,106545,106546],{"class":290,"line":1373},[288,106547,2572],{"emptyLinePlaceholder":217},[288,106549,106550],{"class":290,"line":1387},[288,106551,2572],{"emptyLinePlaceholder":217},[288,106553,106554,106556,106558],{"class":290,"line":1393},[288,106555,101487],{"class":347},[288,106557,13737],{"class":294},[288,106559,101492],{"class":403},[288,106561,106562],{"class":290,"line":1484},[288,106563,106564],{"class":403},"\u003Cmujoco model=\"one_link_motor\">\n",[288,106566,106567],{"class":290,"line":1490},[288,106568,106569],{"class":403},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[288,106571,106572],{"class":290,"line":1502},[288,106573,2572],{"emptyLinePlaceholder":217},[288,106575,106576],{"class":290,"line":1784},[288,106577,101511],{"class":403},[288,106579,106580],{"class":290,"line":1789},[288,106581,106582],{"class":403},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[288,106584,106585],{"class":290,"line":1795},[288,106586,106587],{"class":403},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[288,106589,106590],{"class":290,"line":1800},[288,106591,2572],{"emptyLinePlaceholder":217},[288,106593,106594],{"class":290,"line":1814},[288,106595,106596],{"class":403},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[288,106598,106599],{"class":290,"line":1819},[288,106600,106601],{"class":403},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[288,106603,106604],{"class":290,"line":1825},[288,106605,106606],{"class":403},"        \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",[288,106608,106609],{"class":290,"line":1846},[288,106610,106611],{"class":403},"      \u003C\u002Fbody>\n",[288,106613,106614],{"class":290,"line":1851},[288,106615,101540],{"class":403},[288,106617,106618],{"class":290,"line":1865},[288,106619,101545],{"class":403},[288,106621,106622],{"class":290,"line":1870},[288,106623,2572],{"emptyLinePlaceholder":217},[288,106625,106626],{"class":290,"line":1899},[288,106627,106628],{"class":403},"  \u003Cactuator>\n",[288,106630,106631],{"class":290,"line":1904},[288,106632,106633],{"class":403},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[288,106635,106636],{"class":290,"line":1921},[288,106637,106638],{"class":403},"  \u003C\u002Factuator>\n",[288,106640,106641],{"class":290,"line":1926},[288,106642,101550],{"class":403},[288,106644,106645],{"class":290,"line":1931},[288,106646,95871],{"class":403},[288,106648,106649],{"class":290,"line":1936},[288,106650,2572],{"emptyLinePlaceholder":217},[288,106652,106653],{"class":290,"line":1950},[288,106654,2572],{"emptyLinePlaceholder":217},[288,106656,106657,106659,106661,106663,106665],{"class":290,"line":1955},[288,106658,32120],{"class":294},[288,106660,2145],{"class":2135},[288,106662,101571],{"class":298},[288,106664,95859],{"class":347},[288,106666,3911],{"class":298},[288,106668,106669,106671,106673,106675,106677],{"class":290,"line":2749},[288,106670,101580],{"class":298},[288,106672,344],{"class":294},[288,106674,101585],{"class":298},[288,106676,101487],{"class":347},[288,106678,305],{"class":298},[288,106680,106681,106683,106685],{"class":290,"line":2763},[288,106682,101594],{"class":298},[288,106684,344],{"class":294},[288,106686,101599],{"class":298},[288,106688,106689],{"class":290,"line":2771},[288,106690,2572],{"emptyLinePlaceholder":217},[288,106692,106693,106695,106697,106699],{"class":290,"line":2776},[288,106694,31472],{"class":347},[288,106696,299],{"class":298},[288,106698,101612],{"class":403},[288,106700,101615],{"class":298},[288,106702,106703,106705,106707,106709],{"class":290,"line":2782},[288,106704,31472],{"class":347},[288,106706,299],{"class":298},[288,106708,101624],{"class":403},[288,106710,101627],{"class":298},[288,106712,106713,106715,106717,106719],{"class":290,"line":2788},[288,106714,31472],{"class":347},[288,106716,299],{"class":298},[288,106718,101636],{"class":403},[288,106720,101639],{"class":298},[288,106722,106723],{"class":290,"line":2793},[288,106724,2572],{"emptyLinePlaceholder":217},[288,106726,106727,106729,106732,106734,106736],{"class":290,"line":8121},[288,106728,3273],{"class":294},[288,106730,106731],{"class":298}," model.nu ",[288,106733,21121],{"class":294},[288,106735,25291],{"class":347},[288,106737,3911],{"class":298},[288,106739,106740,106742,106744,106746,106749],{"class":290,"line":8145},[288,106741,103605],{"class":294},[288,106743,103608],{"class":347},[288,106745,299],{"class":298},[288,106747,106748],{"class":403},"\"expected exactly one actuator\"",[288,106750,305],{"class":298},[288,106752,106753],{"class":290,"line":8150},[288,106754,2572],{"emptyLinePlaceholder":217},[288,106756,106757,106759,106761,106763,106765,106767,106770],{"class":290,"line":8156},[288,106758,3373],{"class":294},[288,106760,31789],{"class":298},[288,106762,26216],{"class":294},[288,106764,32616],{"class":347},[288,106766,299],{"class":298},[288,106768,106769],{"class":347},"2000",[288,106771,30959],{"class":298},[288,106773,106774,106777,106779,106781,106783],{"class":290,"line":8183},[288,106775,106776],{"class":298},"        t ",[288,106778,344],{"class":294},[288,106780,31789],{"class":298},[288,106782,752],{"class":294},[288,106784,106785],{"class":298}," model.opt.timestep\n",[288,106787,106788,106791,106793,106795,106797,106800,106802,106805,106807,106809,106812,106814,106816,106818],{"class":290,"line":8188},[288,106789,106790],{"class":298},"        data.ctrl[",[288,106792,490],{"class":347},[288,106794,4615],{"class":298},[288,106796,344],{"class":294},[288,106798,106799],{"class":347}," 1.5",[288,106801,6691],{"class":294},[288,106803,106804],{"class":298}," math.sin(",[288,106806,105433],{"class":347},[288,106808,6691],{"class":294},[288,106810,106811],{"class":298}," math.pi ",[288,106813,752],{"class":294},[288,106815,62040],{"class":347},[288,106817,6691],{"class":294},[288,106819,106820],{"class":298}," t)\n",[288,106822,106823],{"class":290,"line":8194},[288,106824,101689],{"class":298},[288,106826,106827],{"class":290,"line":8206},[288,106828,2572],{"emptyLinePlaceholder":217},[288,106830,106831,106833,106835,106838],{"class":290,"line":8218},[288,106832,31472],{"class":347},[288,106834,299],{"class":298},[288,106836,106837],{"class":403},"\"time:\"",[288,106839,101651],{"class":298},[288,106841,106842,106844,106846,106849,106851,106853],{"class":290,"line":8230},[288,106843,31472],{"class":347},[288,106845,299],{"class":298},[288,106847,106848],{"class":403},"\"joint qpos:\"",[288,106850,105103],{"class":298},[288,106852,590],{"class":347},[288,106854,30670],{"class":298},[288,106856,106857,106859,106861,106864,106866,106868],{"class":290,"line":9889},[288,106858,31472],{"class":347},[288,106860,299],{"class":298},[288,106862,106863],{"class":403},"\"joint qvel:\"",[288,106865,105119],{"class":298},[288,106867,590],{"class":347},[288,106869,30670],{"class":298},[288,106871,106872,106874,106876,106879],{"class":290,"line":9914},[288,106873,31472],{"class":347},[288,106875,299],{"class":298},[288,106877,106878],{"class":403},"\"last ctrl:\"",[288,106880,106881],{"class":298},", data.ctrl.copy())\n",[288,106883,106884],{"class":290,"line":9937},[288,106885,2572],{"emptyLinePlaceholder":217},[288,106887,106888],{"class":290,"line":9961},[288,106889,2572],{"emptyLinePlaceholder":217},[288,106891,106892,106894,106896,106898,106900],{"class":290,"line":9966},[288,106893,1703],{"class":294},[288,106895,31393],{"class":347},[288,106897,101732],{"class":294},[288,106899,101735],{"class":403},[288,106901,3911],{"class":298},[288,106903,106904],{"class":290,"line":9971},[288,106905,101742],{"class":298},[19,106907,103743],{},[280,106909,106911],{"className":23995,"code":106910,"language":23997,"meta":205,"style":205},"touch ch4_joint_motor.py\n",[25,106912,106913],{"__ignoreMap":205},[288,106914,106915,106917],{"class":290,"line":291},[288,106916,101456],{"class":2135},[288,106918,106919],{"class":403}," ch4_joint_motor.py\n",[19,106921,102474],{},[280,106923,106925],{"className":23995,"code":106924,"language":23997,"meta":205,"style":205},"python ch4_joint_motor.py\n",[25,106926,106927],{"__ignoreMap":205},[288,106928,106929,106931],{"class":290,"line":291},[288,106930,30553],{"class":2135},[288,106932,106919],{"class":403},[260,106934,101745],{"id":101745},[19,106936,106937],{},"检查 actuator 数量：",[280,106939,106941],{"className":30551,"code":106940,"language":30553,"meta":205,"style":205},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[25,106942,106943,106955],{"__ignoreMap":205},[288,106944,106945,106947,106949,106951,106953],{"class":290,"line":291},[288,106946,1703],{"class":294},[288,106948,106731],{"class":298},[288,106950,21121],{"class":294},[288,106952,25291],{"class":347},[288,106954,3911],{"class":298},[288,106956,106957,106959,106961,106963,106965],{"class":290,"line":206},[288,106958,104068],{"class":294},[288,106960,103608],{"class":347},[288,106962,299],{"class":298},[288,106964,106748],{"class":403},[288,106966,305],{"class":298},[19,106968,106969,106971,106972,106974],{},[25,106970,102331],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[25,106973,101249],{}," 长度应该是 1。",[19,106976,106977],{},"产生正弦控制信号：",[280,106979,106981],{"className":30551,"code":106980,"language":30553,"meta":205,"style":205},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[25,106982,106983],{"__ignoreMap":205},[288,106984,106985,106987,106989,106991,106993,106995,106997,106999,107001,107003,107005,107007,107009,107011],{"class":290,"line":291},[288,106986,106044],{"class":298},[288,106988,490],{"class":347},[288,106990,4615],{"class":298},[288,106992,344],{"class":294},[288,106994,106799],{"class":347},[288,106996,6691],{"class":294},[288,106998,106804],{"class":298},[288,107000,105433],{"class":347},[288,107002,6691],{"class":294},[288,107004,106811],{"class":298},[288,107006,752],{"class":294},[288,107008,62040],{"class":347},[288,107010,6691],{"class":294},[288,107012,106820],{"class":298},[19,107014,107015],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107017,101846],{},[280,107019,107020],{"className":30551,"code":104678,"language":30553,"meta":205,"style":205},[25,107021,107022],{"__ignoreMap":205},[288,107023,107024],{"class":290,"line":291},[288,107025,104678],{"class":298},[19,107027,107028],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[260,107030,101881],{"id":101881},[280,107032,107034],{"className":30551,"code":107033,"language":30553,"meta":205,"style":205},"import math\n",[25,107035,107036],{"__ignoreMap":205},[288,107037,107038,107040],{"class":290,"line":291},[288,107039,30565],{"class":294},[288,107041,106523],{"class":298},[19,107043,107044,107045,101191,107048,107051],{},"导入 Python 标准库里的数学模块。后面要用 ",[25,107046,107047],{},"math.sin",[25,107049,107050],{},"math.pi"," 生成周期变化的控制信号。",[280,107053,107054],{"className":30551,"code":103859,"language":30553,"meta":205,"style":205},[25,107055,107056,107062],{"__ignoreMap":205},[288,107057,107058,107060],{"class":290,"line":291},[288,107059,30565],{"class":294},[288,107061,101474],{"class":298},[288,107063,107064,107066,107068,107070],{"class":290,"line":206},[288,107065,30565],{"class":294},[288,107067,31553],{"class":298},[288,107069,31556],{"class":294},[288,107071,31559],{"class":298},[19,107073,107074],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[280,107076,107077],{"className":53240,"code":106360,"language":53242,"meta":205,"style":205},[25,107078,107079],{"__ignoreMap":205},[288,107080,107081,107083,107085,107087,107089,107091,107093,107095,107097,107099,107101,107103,107105,107107,107109],{"class":290,"line":291},[288,107082,1207],{"class":298},[288,107084,103129],{"class":51473},[288,107086,15093],{"class":2135},[288,107088,344],{"class":298},[288,107090,106192],{"class":403},[288,107092,53997],{"class":2135},[288,107094,344],{"class":298},[288,107096,106192],{"class":403},[288,107098,106201],{"class":2135},[288,107100,344],{"class":298},[288,107102,106206],{"class":403},[288,107104,106389],{"class":2135},[288,107106,344],{"class":298},[288,107108,106394],{"class":403},[288,107110,101317],{"class":298},[19,107112,107113,107114,107116,107117,107119,107120,107122],{},"这行定义关节。",[25,107115,106013],{}," 表示旋转关节。",[25,107118,106412],{}," 表示绕 y 轴旋转。",[25,107121,106418],{}," 表示有一点阻尼，运动不会完全无损耗。",[280,107124,107126],{"className":53240,"code":107125,"language":53242,"meta":205,"style":205},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[25,107127,107128],{"__ignoreMap":205},[288,107129,107130,107132,107134,107136,107138,107141,107143,107145,107148,107151,107153,107156,107158,107160,107162,107164,107166,107169],{"class":290,"line":291},[288,107131,1207],{"class":298},[288,107133,101293],{"class":51473},[288,107135,15093],{"class":2135},[288,107137,344],{"class":298},[288,107139,107140],{"class":403},"\"link_geom\"",[288,107142,53997],{"class":2135},[288,107144,344],{"class":298},[288,107146,107147],{"class":403},"\"capsule\"",[288,107149,107150],{"class":2135}," fromto",[288,107152,344],{"class":298},[288,107154,107155],{"class":403},"\"0 0 0 0 0 0.5\"",[288,107157,101309],{"class":2135},[288,107159,344],{"class":298},[288,107161,103951],{"class":403},[288,107163,102174],{"class":2135},[288,107165,344],{"class":298},[288,107167,107168],{"class":403},"\"0.5\"",[288,107170,101317],{"class":298},[19,107172,107173,107174,107176,107177,107179,107180,107183,107184,28558,107187,107189],{},"这行定义摆杆的形状。",[25,107175,103338],{}," 是胶囊体，适合表示杆子。",[25,107178,103349],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[25,107181,107182],{},"(0,0,0)"," 延伸到 ",[25,107185,107186],{},"(0,0,0.5)",[25,107188,103343],{}," 是半径。",[280,107191,107192],{"className":53240,"code":106426,"language":53242,"meta":205,"style":205},[25,107193,107194],{"__ignoreMap":205},[288,107195,107196,107198,107200,107202,107204,107206,107208,107210,107212,107214,107216,107218,107220,107222,107224,107226,107228,107230],{"class":290,"line":291},[288,107197,1207],{"class":298},[288,107199,106247],{"class":51473},[288,107201,15093],{"class":2135},[288,107203,344],{"class":298},[288,107205,106254],{"class":403},[288,107207,106257],{"class":2135},[288,107209,344],{"class":298},[288,107211,106192],{"class":403},[288,107213,106264],{"class":2135},[288,107215,344],{"class":298},[288,107217,3850],{"class":403},[288,107219,106271],{"class":2135},[288,107221,344],{"class":298},[288,107223,106276],{"class":403},[288,107225,106279],{"class":2135},[288,107227,344],{"class":298},[288,107229,106284],{"class":403},[288,107231,101317],{"class":298},[19,107233,107234,107235,107237,107238,107241,107242,107244],{},"这行定义电机。它作用在 ",[25,107236,106013],{}," 关节上。",[25,107239,107240],{},"gear"," 可以理解成放大倍数。",[25,107243,106028],{}," 限制控制输入范围。",[280,107246,107247],{"className":30551,"code":106940,"language":30553,"meta":205,"style":205},[25,107248,107249,107261],{"__ignoreMap":205},[288,107250,107251,107253,107255,107257,107259],{"class":290,"line":291},[288,107252,1703],{"class":294},[288,107254,106731],{"class":298},[288,107256,21121],{"class":294},[288,107258,25291],{"class":347},[288,107260,3911],{"class":298},[288,107262,107263,107265,107267,107269,107271],{"class":290,"line":206},[288,107264,104068],{"class":294},[288,107266,103608],{"class":347},[288,107268,299],{"class":298},[288,107270,106748],{"class":403},[288,107272,305],{"class":298},[19,107274,107275,107277],{},[25,107276,102331],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[280,107279,107281],{"className":30551,"code":107280,"language":30553,"meta":205,"style":205},"for step in range(2000):\n",[25,107282,107283],{"__ignoreMap":205},[288,107284,107285,107287,107289,107291,107293,107295,107297],{"class":290,"line":291},[288,107286,3197],{"class":294},[288,107288,31789],{"class":298},[288,107290,26216],{"class":294},[288,107292,32616],{"class":347},[288,107294,299],{"class":298},[288,107296,106769],{"class":347},[288,107298,30959],{"class":298},[19,107300,107301,107302,107304,107305,107308],{},"循环 2000 步。这里没有用 ",[25,107303,1289],{},"，而是用 ",[25,107306,107307],{},"step","，因为后面要用当前步数计算时间。",[280,107310,107312],{"className":30551,"code":107311,"language":30553,"meta":205,"style":205},"t = step * model.opt.timestep\n",[25,107313,107314],{"__ignoreMap":205},[288,107315,107316,107319,107321,107323,107325],{"class":290,"line":291},[288,107317,107318],{"class":298},"t ",[288,107320,344],{"class":294},[288,107322,31789],{"class":298},[288,107324,752],{"class":294},[288,107326,106785],{"class":298},[19,107328,107329],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[280,107331,107332],{"className":30551,"code":106980,"language":30553,"meta":205,"style":205},[25,107333,107334],{"__ignoreMap":205},[288,107335,107336,107338,107340,107342,107344,107346,107348,107350,107352,107354,107356,107358,107360,107362],{"class":290,"line":291},[288,107337,106044],{"class":298},[288,107339,490],{"class":347},[288,107341,4615],{"class":298},[288,107343,344],{"class":294},[288,107345,106799],{"class":347},[288,107347,6691],{"class":294},[288,107349,106804],{"class":298},[288,107351,105433],{"class":347},[288,107353,6691],{"class":294},[288,107355,106811],{"class":298},[288,107357,752],{"class":294},[288,107359,62040],{"class":347},[288,107361,6691],{"class":294},[288,107363,106820],{"class":298},[19,107365,107366],{},"这行给电机输入一个正弦波。拆开看：",[243,107368,107369,107375,107381],{},[246,107370,107371,107374],{},[25,107372,107373],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[246,107376,107377,107380],{},[25,107378,107379],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[246,107382,107383,107386],{},[25,107384,107385],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107388,107389],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[280,107391,107393],{"className":30551,"code":107392,"language":30553,"meta":205,"style":205},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[25,107394,107395],{"__ignoreMap":205},[288,107396,107397,107399,107401,107403,107405,107407],{"class":290,"line":291},[288,107398,30588],{"class":347},[288,107400,299],{"class":298},[288,107402,106848],{"class":403},[288,107404,105103],{"class":298},[288,107406,590],{"class":347},[288,107408,30670],{"class":298},[19,107410,107411,107412,107414],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[25,107413,101243],{}," 只有一个数。",[14,107416,102489],{"id":102488},[19,107418,107419],{},"输出类似:",[280,107421,107424],{"className":107422,"code":107423,"language":5360,"meta":205},[5358],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[25,107425,107423],{"__ignoreMap":205},[19,107427,107428,107429,107431],{},"这里 ",[25,107430,106299],{}," 是电机输入。",[19,107433,107434,107437,107438,107441],{},[25,107435,107436],{},"joint qpos"," 是关节角度，单位通常是弧度。",[25,107439,107440],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107443,107444],{},"角度单位提示：",[280,107446,107449],{"className":107447,"code":107448,"language":5360,"meta":205},[5358],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[25,107450,107448],{"__ignoreMap":205},[19,107452,107453,107454,107456,107457,107459],{},"如果你看到 ",[25,107455,104203],{}," 是 ",[25,107458,35502],{},"，大约就是 28.6 度。",[14,107461,102521],{"id":102520},[243,107463,107464,107471,107474,107481,107484,107492,107500],{},[246,107465,102584,107466,102587,107468,28558],{},[25,107467,106484],{},[25,107469,107470],{},"gear=\"5\"",[246,107472,107473],{},"重新运行，观察关节运动是否更剧烈。",[246,107475,102584,107476,102587,107478,28558],{},[25,107477,106028],{},[25,107479,107480],{},"-0.2 0.2",[246,107482,107483],{},"重新运行，观察控制能力是否变弱。",[246,107485,107486,107487,107489,107490,28558],{},"去掉 actuator，确认 ",[25,107488,102331],{}," 变成 ",[25,107491,490],{},[246,107493,102584,107494,102587,107496,107499],{},[25,107495,106418],{},[25,107497,107498],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[246,107501,102584,107502,102587,107504,107507],{},[25,107503,106412],{},[25,107505,107506],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107509,102626],{"id":102625},[260,107511,107513],{"id":107512},"indexerror-index-0-is-out-of-bounds",[25,107514,107515],{},"IndexError: index 0 is out of bounds",[19,107517,107518,107519,107521],{},"原因是 ",[25,107520,106165],{},"，没有 actuator。",[260,107523,107524],{"id":107524},"关节几乎不动",[19,107526,107527],{},"可能原因:",[243,107529,107530,107535,107539,107545],{},[246,107531,107532,107534],{},[25,107533,107240],{}," 太小",[246,107536,107537,107534],{},[25,107538,106028],{},[246,107540,107541,107544],{},[25,107542,107543],{},"damping"," 太大",[246,107546,107547],{},"重力方向导致运动不明显",[260,107549,107550],{"id":107550},"模型编译失败",[19,107552,107553,107554,107556],{},"检查 actuator 引用的 ",[25,107555,106475],{}," 是否存在，joint 名称是否拼写一致。",[260,107558,107560,107562],{"id":107559},"datactrl0-写了但没有效果",[25,107561,106299],{}," 写了但没有效果",[19,107564,102748],{},[243,107566,107567,107572,107575,107580,107585],{},[246,107568,107569,107571],{},[25,107570,102331],{}," 是否大于 0。",[246,107573,107574],{},"motor 是否引用了正确 joint。",[246,107576,107577,107579],{},[25,107578,107240],{}," 是否太小。",[246,107581,107582,107584],{},[25,107583,106028],{}," 是否把输入限制得太小。",[246,107586,107587],{},"body 是否真的有可动 joint。",[260,107589,107590],{"id":107590},"控制输入超过范围会怎样",[19,107592,107593],{},"如果设置了：",[280,107595,107597],{"className":53240,"code":107596,"language":53242,"meta":205,"style":205},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[25,107598,107599],{"__ignoreMap":205},[288,107600,107601],{"class":290,"line":291},[288,107602,107596],{"class":298},[19,107604,107605],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[280,107607,107609],{"className":30551,"code":107608,"language":30553,"meta":205,"style":205},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[25,107610,107611,107631],{"__ignoreMap":205},[288,107612,107613,107616,107618,107621,107623,107625,107627,107629],{"class":290,"line":291},[288,107614,107615],{"class":298},"action ",[288,107617,344],{"class":294},[288,107619,107620],{"class":298}," np.clip(action, ",[288,107622,829],{"class":294},[288,107624,105433],{"class":347},[288,107626,12608],{"class":298},[288,107628,105433],{"class":347},[288,107630,305],{"class":298},[288,107632,107633,107635,107637,107639,107641],{"class":290,"line":206},[288,107634,106044],{"class":298},[288,107636,490],{"class":347},[288,107638,4615],{"class":298},[288,107640,344],{"class":294},[288,107642,107643],{"class":298}," action\n",[14,107645,102780],{"id":102779},[19,107647,107648],{},"这一章建立了控制任务的基本形式：",[280,107650,107653],{"className":107651,"code":107652,"language":5360,"meta":205},[5358],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[25,107654,107652],{"__ignoreMap":205},[19,107656,107657],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5299,107659,107660],{},"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":205,"searchDepth":206,"depth":206,"links":107662},[107663,107664,107665,107670,107674,107675,107676,107684],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":107666},[107667,107668,107669],{"id":106306,"depth":1352,"text":106307},{"id":106356,"depth":1352,"text":106357},{"id":106422,"depth":1352,"text":106423},{"id":101425,"depth":206,"text":101426,"children":107671},[107672,107673],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":107677},[107678,107679,107680,107681,107683],{"id":107512,"depth":1352,"text":107515},{"id":107524,"depth":1352,"text":107524},{"id":107550,"depth":1352,"text":107550},{"id":107559,"depth":1352,"text":107682},"data.ctrl[0] 写了但没有效果",{"id":107590,"depth":1352,"text":107590},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105994,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107691,"title":107692,"body":107693,"description":205,"extension":215,"meta":109602,"navigation":217,"path":109603,"seo":109604,"stem":109605,"__hash__":109606},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107694,"toc":109578},[107695,107698,107700,107703,107711,107714,107731,107734,107759,107762,107808,107810,107812,107867,107869,107888,107890,107933,107936,107953,107956,107972,107982,107989,107991,107994,107997,108031,108034,108082,108086,108089,108103,108112,108116,108119,108144,108147,108151,108164,108167,108173,108176,108191,108193,108196,108456,108458,108470,108473,108785,108787,108799,108801,108804,108819,108824,108827,108849,108852,108855,108889,108892,108896,108907,108910,108927,108930,108944,108951,108971,108978,108992,108995,109007,109022,109042,109045,109067,109070,109074,109089,109100,109115,109118,109148,109164,109193,109201,109225,109228,109246,109256,109268,109275,109284,109290,109299,109302,109304,109313,109316,109331,109333,109336,109347,109350,109361,109364,109382,109384,109401,109404,109432,109434,109438,109441,109471,109477,109480,109484,109492,109495,109497,109518,109521,109524,109540,109543,109559,109561,109564,109575],[10,107696,107692],{"id":107697},"_5viewer-可视化与-renderer-离屏渲染",[14,107699,100820],{"id":100819},[19,107701,107702],{},"本章掌握两类可视化方式:",[243,107704,107705,107708],{},[246,107706,107707],{},"交互式 viewer: 适合人工观察仿真",[246,107709,107710],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107712,107713],{},"使用官方接口:",[280,107715,107717],{"className":30551,"code":107716,"language":30553,"meta":205,"style":205},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[25,107718,107719,107726],{"__ignoreMap":205},[288,107720,107721,107723],{"class":290,"line":291},[288,107722,30565],{"class":294},[288,107724,107725],{"class":298}," mujoco.viewer\n",[288,107727,107728],{"class":290,"line":206},[288,107729,107730],{"class":298},"mujoco.viewer.launch_passive(model, data)\n",[19,107732,107733],{},"以及:",[280,107735,107737],{"className":30551,"code":107736,"language":30553,"meta":205,"style":205},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[25,107738,107739,107749],{"__ignoreMap":205},[288,107740,107741,107744,107746],{"class":290,"line":291},[288,107742,107743],{"class":298},"renderer ",[288,107745,344],{"class":294},[288,107747,107748],{"class":298}," mujoco.Renderer(model)\n",[288,107750,107751,107754,107756],{"class":290,"line":206},[288,107752,107753],{"class":298},"image ",[288,107755,344],{"class":294},[288,107757,107758],{"class":298}," renderer.render()\n",[19,107760,107761],{},"新手建议先理解二者区别：",[436,107763,107764,107780],{},[439,107765,107766],{},[442,107767,107768,107771,107774,107777],{},[445,107769,107770],{"align":23909},"工具",[445,107772,107773],{"align":23909},"用途",[445,107775,107776],{"align":23909},"是否打开窗口",[445,107778,107779],{"align":23909},"常见场景",[483,107781,107782,107795],{},[442,107783,107784,107787,107790,107792],{},[488,107785,107786],{"align":23909},"Viewer",[488,107788,107789],{"align":23909},"人眼实时观察仿真",[488,107791,104838],{"align":23909},[488,107793,107794],{"align":23909},"调试模型、看控制效果",[442,107796,107797,107800,107803,107805],{},[488,107798,107799],{"align":23909},"Renderer",[488,107801,107802],{"align":23909},"生成图像数组",[488,107804,104851],{"align":23909},[488,107806,107807],{"align":23909},"保存图片、训练视觉策略、服务器批量采集",[14,107809,100943],{"id":100942},[19,107811,100946],{},[280,107813,107815],{"className":23995,"code":107814,"language":23997,"meta":205,"style":205},"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",[25,107816,107817,107829,107839,107847,107855],{"__ignoreMap":205},[288,107818,107819,107821,107823,107825,107827],{"class":290,"line":291},[288,107820,24749],{"class":2135},[288,107822,26488],{"class":403},[288,107824,24007],{"class":403},[288,107826,26573],{"class":347},[288,107828,24851],{"class":347},[288,107830,107831,107833,107835,107837],{"class":290,"line":206},[288,107832,100981],{"class":403},[288,107834,100984],{"class":403},[288,107836,100987],{"class":403},[288,107838,24851],{"class":347},[288,107840,107841,107843,107845],{"class":290,"line":1352},[288,107842,100994],{"class":403},[288,107844,100997],{"class":403},[288,107846,24851],{"class":347},[288,107848,107849,107851,107853],{"class":290,"line":1367},[288,107850,101004],{"class":403},[288,107852,101007],{"class":403},[288,107854,24851],{"class":347},[288,107856,107857,107859,107861,107863,107865],{"class":290,"line":1373},[288,107858,101014],{"class":403},[288,107860,101017],{"class":403},[288,107862,101020],{"class":403},[288,107864,101023],{"class":403},[288,107866,102689],{"class":403},[19,107868,102992],{},[280,107870,107872],{"className":23995,"code":107871,"language":23997,"meta":205,"style":205},"pip install \"mujoco>=2.3\" numpy pillow\n",[25,107873,107874],{"__ignoreMap":205},[288,107875,107876,107878,107880,107882,107885],{"class":290,"line":291},[288,107877,24004],{"class":2135},[288,107879,24007],{"class":403},[288,107881,101103],{"class":403},[288,107883,107884],{"class":403}," numpy",[288,107886,107887],{"class":403}," pillow\n",[19,107889,103009],{},[280,107891,107893],{"className":23995,"code":107892,"language":23997,"meta":205,"style":205},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[25,107894,107895,107912,107921],{"__ignoreMap":205},[288,107896,107897,107899,107901,107903,107906,107908,107910],{"class":290,"line":291},[288,107898,30503],{"class":2135},[288,107900,29349],{"class":403},[288,107902,25288],{"class":347},[288,107904,107905],{"class":403}," mujoco-render",[288,107907,101148],{"class":403},[288,107909,101151],{"class":347},[288,107911,101154],{"class":347},[288,107913,107914,107916,107918],{"class":290,"line":206},[288,107915,30503],{"class":2135},[288,107917,101161],{"class":403},[288,107919,107920],{"class":403}," mujoco-render\n",[288,107922,107923,107925,107927,107929,107931],{"class":290,"line":1352},[288,107924,24004],{"class":2135},[288,107926,24007],{"class":403},[288,107928,101103],{"class":403},[288,107930,107884],{"class":403},[288,107932,107887],{"class":403},[19,107934,107935],{},"离屏渲染后端:",[280,107937,107939],{"className":23995,"code":107938,"language":23997,"meta":205,"style":205},"export MUJOCO_GL=egl\n",[25,107940,107941],{"__ignoreMap":205},[288,107942,107943,107945,107948,107950],{"class":290,"line":291},[288,107944,25215],{"class":294},[288,107946,107947],{"class":298}," MUJOCO_GL",[288,107949,344],{"class":294},[288,107951,107952],{"class":298},"egl\n",[19,107954,107955],{},"或:",[280,107957,107959],{"className":23995,"code":107958,"language":23997,"meta":205,"style":205},"export MUJOCO_GL=osmesa\n",[25,107960,107961],{"__ignoreMap":205},[288,107962,107963,107965,107967,107969],{"class":290,"line":291},[288,107964,25215],{"class":294},[288,107966,107947],{"class":298},[288,107968,344],{"class":294},[288,107970,107971],{"class":298},"osmesa\n",[19,107973,107974,107975,107978,107979,28558],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[25,107976,107977],{},"egl"," 失败，再尝试 ",[25,107980,107981],{},"osmesa",[19,107983,107984,107985,107988],{},"如果你在本机桌面环境运行，通常先不要设置 ",[25,107986,107987],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107990,101218],{"id":101217},[19,107992,107993],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107995,107996],{},"典型 viewer 流程:",[280,107998,108000],{"className":30551,"code":107999,"language":30553,"meta":205,"style":205},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[25,108001,108002,108015,108022,108026],{"__ignoreMap":205},[288,108003,108004,108007,108010,108012],{"class":290,"line":291},[288,108005,108006],{"class":294},"with",[288,108008,108009],{"class":298}," mujoco.viewer.launch_passive(model, data) ",[288,108011,31556],{"class":294},[288,108013,108014],{"class":298}," viewer:\n",[288,108016,108017,108019],{"class":290,"line":206},[288,108018,2423],{"class":294},[288,108020,108021],{"class":298}," viewer.is_running():\n",[288,108023,108024],{"class":290,"line":1352},[288,108025,101689],{"class":298},[288,108027,108028],{"class":290,"line":1367},[288,108029,108030],{"class":298},"        viewer.sync()\n",[19,108032,108033],{},"典型 renderer 流程:",[280,108035,108037],{"className":30551,"code":108036,"language":30553,"meta":205,"style":205},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[25,108038,108039,108065,108069,108074],{"__ignoreMap":205},[288,108040,108041,108043,108045,108048,108050,108052,108054,108056,108058,108060,108063],{"class":290,"line":291},[288,108042,107743],{"class":298},[288,108044,344],{"class":294},[288,108046,108047],{"class":298}," mujoco.Renderer(model, ",[288,108049,25154],{"class":5389},[288,108051,344],{"class":294},[288,108053,42515],{"class":347},[288,108055,12608],{"class":298},[288,108057,25150],{"class":5389},[288,108059,344],{"class":294},[288,108061,108062],{"class":347},"640",[288,108064,305],{"class":298},[288,108066,108067],{"class":290,"line":206},[288,108068,104678],{"class":298},[288,108070,108071],{"class":290,"line":1352},[288,108072,108073],{"class":298},"renderer.update_scene(data)\n",[288,108075,108076,108078,108080],{"class":290,"line":1367},[288,108077,107753],{"class":298},[288,108079,344],{"class":294},[288,108081,107758],{"class":298},[260,108083,108085],{"id":108084},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108087,108088],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[280,108090,108092],{"className":30551,"code":108091,"language":30553,"meta":205,"style":205},"mujoco.mj_step(model, data)\nviewer.sync()\n",[25,108093,108094,108098],{"__ignoreMap":205},[288,108095,108096],{"class":290,"line":291},[288,108097,104678],{"class":298},[288,108099,108100],{"class":290,"line":206},[288,108101,108102],{"class":298},"viewer.sync()\n",[19,108104,108105,108107,108108,108111],{},[25,108106,101388],{}," 负责算物理，",[25,108109,108110],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[260,108113,108115],{"id":108114},"为什么要-sleep","为什么要 sleep",[19,108117,108118],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[280,108120,108122],{"className":30551,"code":108121,"language":30553,"meta":205,"style":205},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[25,108123,108124],{"__ignoreMap":205},[288,108125,108126,108129,108131,108134,108136,108139,108141],{"class":290,"line":291},[288,108127,108128],{"class":298},"sleep_time ",[288,108130,344],{"class":294},[288,108132,108133],{"class":298}," model.opt.timestep ",[288,108135,829],{"class":294},[288,108137,108138],{"class":298}," (time.time() ",[288,108140,829],{"class":294},[288,108142,108143],{"class":298}," step_start)\n",[19,108145,108146],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[260,108148,108150],{"id":108149},"renderer-输出是什么","renderer 输出是什么",[280,108152,108154],{"className":30551,"code":108153,"language":30553,"meta":205,"style":205},"image = renderer.render()\n",[25,108155,108156],{"__ignoreMap":205},[288,108157,108158,108160,108162],{"class":290,"line":291},[288,108159,107753],{"class":298},[288,108161,344],{"class":294},[288,108163,107758],{"class":298},[19,108165,108166],{},"得到的是 NumPy 数组，形状通常是：",[280,108168,108171],{"className":108169,"code":108170,"language":5360,"meta":205},[5358],"(height, width, 3)\n",[25,108172,108170],{"__ignoreMap":205},[19,108174,108175],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[280,108177,108179],{"className":30551,"code":108178,"language":30553,"meta":205,"style":205},"Image.fromarray(image).save(\"render_output.png\")\n",[25,108180,108181],{"__ignoreMap":205},[288,108182,108183,108186,108189],{"class":290,"line":291},[288,108184,108185],{"class":298},"Image.fromarray(image).save(",[288,108187,108188],{"class":403},"\"render_output.png\"",[288,108190,305],{"class":298},[14,108192,101426],{"id":101425},[19,108194,108195],{},"交互式 Viewer:",[280,108197,108199],{"className":30551,"code":108198,"language":30553,"meta":205,"style":205},"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",[25,108200,108201,108207,108211,108217,108223,108227,108231,108239,108244,108248,108252,108256,108261,108266,108270,108274,108278,108283,108287,108291,108295,108299,108303,108307,108319,108331,108339,108343,108353,108373,108383,108388,108393,108397,108414,108427,108432,108436,108440,108452],{"__ignoreMap":205},[288,108202,108203,108205],{"class":290,"line":291},[288,108204,30565],{"class":294},[288,108206,32002],{"class":298},[288,108208,108209],{"class":290,"line":206},[288,108210,2572],{"emptyLinePlaceholder":217},[288,108212,108213,108215],{"class":290,"line":1352},[288,108214,30565],{"class":294},[288,108216,101474],{"class":298},[288,108218,108219,108221],{"class":290,"line":1367},[288,108220,30565],{"class":294},[288,108222,107725],{"class":298},[288,108224,108225],{"class":290,"line":1373},[288,108226,2572],{"emptyLinePlaceholder":217},[288,108228,108229],{"class":290,"line":1387},[288,108230,2572],{"emptyLinePlaceholder":217},[288,108232,108233,108235,108237],{"class":290,"line":1393},[288,108234,101487],{"class":347},[288,108236,13737],{"class":294},[288,108238,101492],{"class":403},[288,108240,108241],{"class":290,"line":1484},[288,108242,108243],{"class":403},"\u003Cmujoco model=\"viewer_demo\">\n",[288,108245,108246],{"class":290,"line":1490},[288,108247,101502],{"class":403},[288,108249,108250],{"class":290,"line":1502},[288,108251,2572],{"emptyLinePlaceholder":217},[288,108253,108254],{"class":290,"line":1784},[288,108255,101511],{"class":403},[288,108257,108258],{"class":290,"line":1789},[288,108259,108260],{"class":403},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[288,108262,108263],{"class":290,"line":1795},[288,108264,108265],{"class":403},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[288,108267,108268],{"class":290,"line":1800},[288,108269,2572],{"emptyLinePlaceholder":217},[288,108271,108272],{"class":290,"line":1814},[288,108273,101525],{"class":403},[288,108275,108276],{"class":290,"line":1819},[288,108277,101530],{"class":403},[288,108279,108280],{"class":290,"line":1825},[288,108281,108282],{"class":403},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[288,108284,108285],{"class":290,"line":1846},[288,108286,101540],{"class":403},[288,108288,108289],{"class":290,"line":1851},[288,108290,101545],{"class":403},[288,108292,108293],{"class":290,"line":1865},[288,108294,101550],{"class":403},[288,108296,108297],{"class":290,"line":1870},[288,108298,95871],{"class":403},[288,108300,108301],{"class":290,"line":1899},[288,108302,2572],{"emptyLinePlaceholder":217},[288,108304,108305],{"class":290,"line":1904},[288,108306,2572],{"emptyLinePlaceholder":217},[288,108308,108309,108311,108313,108315,108317],{"class":290,"line":1921},[288,108310,32120],{"class":294},[288,108312,2145],{"class":2135},[288,108314,101571],{"class":298},[288,108316,95859],{"class":347},[288,108318,3911],{"class":298},[288,108320,108321,108323,108325,108327,108329],{"class":290,"line":1926},[288,108322,101580],{"class":298},[288,108324,344],{"class":294},[288,108326,101585],{"class":298},[288,108328,101487],{"class":347},[288,108330,305],{"class":298},[288,108332,108333,108335,108337],{"class":290,"line":1931},[288,108334,101594],{"class":298},[288,108336,344],{"class":294},[288,108338,101599],{"class":298},[288,108340,108341],{"class":290,"line":1936},[288,108342,2572],{"emptyLinePlaceholder":217},[288,108344,108345,108347,108349,108351],{"class":290,"line":1950},[288,108346,34351],{"class":294},[288,108348,108009],{"class":298},[288,108350,31556],{"class":294},[288,108352,108014],{"class":298},[288,108354,108355,108358,108361,108363,108366,108368,108371],{"class":290,"line":1955},[288,108356,108357],{"class":294},"        while",[288,108359,108360],{"class":298}," viewer.is_running() ",[288,108362,30635],{"class":294},[288,108364,108365],{"class":298}," data.time ",[288,108367,1207],{"class":294},[288,108369,108370],{"class":347}," 5.0",[288,108372,3911],{"class":298},[288,108374,108375,108378,108380],{"class":290,"line":2749},[288,108376,108377],{"class":298},"            step_start ",[288,108379,344],{"class":294},[288,108381,108382],{"class":298}," time.time()\n",[288,108384,108385],{"class":290,"line":2763},[288,108386,108387],{"class":298},"            mujoco.mj_step(model, data)\n",[288,108389,108390],{"class":290,"line":2771},[288,108391,108392],{"class":298},"            viewer.sync()\n",[288,108394,108395],{"class":290,"line":2776},[288,108396,2572],{"emptyLinePlaceholder":217},[288,108398,108399,108402,108404,108406,108408,108410,108412],{"class":290,"line":2782},[288,108400,108401],{"class":298},"            sleep_time ",[288,108403,344],{"class":294},[288,108405,108133],{"class":298},[288,108407,829],{"class":294},[288,108409,108138],{"class":298},[288,108411,829],{"class":294},[288,108413,108143],{"class":298},[288,108415,108416,108418,108421,108423,108425],{"class":290,"line":2788},[288,108417,4814],{"class":294},[288,108419,108420],{"class":298}," sleep_time ",[288,108422,1257],{"class":294},[288,108424,4265],{"class":347},[288,108426,3911],{"class":298},[288,108428,108429],{"class":290,"line":2793},[288,108430,108431],{"class":298},"                time.sleep(sleep_time)\n",[288,108433,108434],{"class":290,"line":8121},[288,108435,2572],{"emptyLinePlaceholder":217},[288,108437,108438],{"class":290,"line":8145},[288,108439,2572],{"emptyLinePlaceholder":217},[288,108441,108442,108444,108446,108448,108450],{"class":290,"line":8150},[288,108443,1703],{"class":294},[288,108445,31393],{"class":347},[288,108447,101732],{"class":294},[288,108449,101735],{"class":403},[288,108451,3911],{"class":298},[288,108453,108454],{"class":290,"line":8156},[288,108455,101742],{"class":298},[19,108457,103743],{},[280,108459,108461],{"className":23995,"code":108460,"language":23997,"meta":205,"style":205},"touch ch5_viewer.py\n",[25,108462,108463],{"__ignoreMap":205},[288,108464,108465,108467],{"class":290,"line":291},[288,108466,101456],{"class":2135},[288,108468,108469],{"class":403}," ch5_viewer.py\n",[19,108471,108472],{},"离屏 Renderer 保存图片:",[280,108474,108476],{"className":30551,"code":108475,"language":30553,"meta":205,"style":205},"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",[25,108477,108478,108490,108494,108500,108510,108514,108518,108526,108531,108535,108539,108543,108547,108552,108556,108560,108564,108568,108572,108576,108580,108584,108588,108592,108596,108608,108620,108628,108653,108657,108673,108677,108681,108696,108705,108709,108723,108728,108733,108737,108749,108761,108765,108769,108781],{"__ignoreMap":205},[288,108479,108480,108482,108485,108487],{"class":290,"line":291},[288,108481,30910],{"class":294},[288,108483,108484],{"class":298}," pathlib ",[288,108486,30565],{"class":294},[288,108488,108489],{"class":298}," Path\n",[288,108491,108492],{"class":290,"line":206},[288,108493,2572],{"emptyLinePlaceholder":217},[288,108495,108496,108498],{"class":290,"line":1352},[288,108497,30565],{"class":294},[288,108499,101474],{"class":298},[288,108501,108502,108504,108506,108508],{"class":290,"line":1367},[288,108503,30910],{"class":294},[288,108505,47436],{"class":347},[288,108507,47439],{"class":294},[288,108509,47442],{"class":298},[288,108511,108512],{"class":290,"line":1373},[288,108513,2572],{"emptyLinePlaceholder":217},[288,108515,108516],{"class":290,"line":1387},[288,108517,2572],{"emptyLinePlaceholder":217},[288,108519,108520,108522,108524],{"class":290,"line":1393},[288,108521,101487],{"class":347},[288,108523,13737],{"class":294},[288,108525,101492],{"class":403},[288,108527,108528],{"class":290,"line":1484},[288,108529,108530],{"class":403},"\u003Cmujoco model=\"renderer_demo\">\n",[288,108532,108533],{"class":290,"line":1490},[288,108534,101502],{"class":403},[288,108536,108537],{"class":290,"line":1502},[288,108538,2572],{"emptyLinePlaceholder":217},[288,108540,108541],{"class":290,"line":1784},[288,108542,101511],{"class":403},[288,108544,108545],{"class":290,"line":1789},[288,108546,108260],{"class":403},[288,108548,108549],{"class":290,"line":1795},[288,108550,108551],{"class":403},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[288,108553,108554],{"class":290,"line":1800},[288,108555,108265],{"class":403},[288,108557,108558],{"class":290,"line":1814},[288,108559,2572],{"emptyLinePlaceholder":217},[288,108561,108562],{"class":290,"line":1819},[288,108563,101525],{"class":403},[288,108565,108566],{"class":290,"line":1825},[288,108567,101530],{"class":403},[288,108569,108570],{"class":290,"line":1846},[288,108571,108282],{"class":403},[288,108573,108574],{"class":290,"line":1851},[288,108575,101540],{"class":403},[288,108577,108578],{"class":290,"line":1865},[288,108579,101545],{"class":403},[288,108581,108582],{"class":290,"line":1870},[288,108583,101550],{"class":403},[288,108585,108586],{"class":290,"line":1899},[288,108587,95871],{"class":403},[288,108589,108590],{"class":290,"line":1904},[288,108591,2572],{"emptyLinePlaceholder":217},[288,108593,108594],{"class":290,"line":1921},[288,108595,2572],{"emptyLinePlaceholder":217},[288,108597,108598,108600,108602,108604,108606],{"class":290,"line":1926},[288,108599,32120],{"class":294},[288,108601,2145],{"class":2135},[288,108603,101571],{"class":298},[288,108605,95859],{"class":347},[288,108607,3911],{"class":298},[288,108609,108610,108612,108614,108616,108618],{"class":290,"line":1931},[288,108611,101580],{"class":298},[288,108613,344],{"class":294},[288,108615,101585],{"class":298},[288,108617,101487],{"class":347},[288,108619,305],{"class":298},[288,108621,108622,108624,108626],{"class":290,"line":1936},[288,108623,101594],{"class":298},[288,108625,344],{"class":294},[288,108627,101599],{"class":298},[288,108629,108630,108633,108635,108637,108639,108641,108643,108645,108647,108649,108651],{"class":290,"line":1950},[288,108631,108632],{"class":298},"    renderer ",[288,108634,344],{"class":294},[288,108636,108047],{"class":298},[288,108638,25154],{"class":5389},[288,108640,344],{"class":294},[288,108642,42515],{"class":347},[288,108644,12608],{"class":298},[288,108646,25150],{"class":5389},[288,108648,344],{"class":294},[288,108650,108062],{"class":347},[288,108652,305],{"class":298},[288,108654,108655],{"class":290,"line":1955},[288,108656,2572],{"emptyLinePlaceholder":217},[288,108658,108659,108661,108663,108665,108667,108669,108671],{"class":290,"line":2749},[288,108660,3373],{"class":294},[288,108662,101674],{"class":298},[288,108664,26216],{"class":294},[288,108666,32616],{"class":347},[288,108668,299],{"class":298},[288,108670,608],{"class":347},[288,108672,30959],{"class":298},[288,108674,108675],{"class":290,"line":2763},[288,108676,101689],{"class":298},[288,108678,108679],{"class":290,"line":2771},[288,108680,2572],{"emptyLinePlaceholder":217},[288,108682,108683,108686,108689,108691,108694],{"class":290,"line":2776},[288,108684,108685],{"class":298},"    renderer.update_scene(data, ",[288,108687,108688],{"class":5389},"camera",[288,108690,344],{"class":294},[288,108692,108693],{"class":403},"\"fixed_camera\"",[288,108695,305],{"class":298},[288,108697,108698,108701,108703],{"class":290,"line":2782},[288,108699,108700],{"class":298},"    image ",[288,108702,344],{"class":294},[288,108704,107758],{"class":298},[288,108706,108707],{"class":290,"line":2788},[288,108708,2572],{"emptyLinePlaceholder":217},[288,108710,108711,108714,108716,108719,108721],{"class":290,"line":2793},[288,108712,108713],{"class":298},"    output_path ",[288,108715,344],{"class":294},[288,108717,108718],{"class":298}," Path(",[288,108720,108188],{"class":403},[288,108722,305],{"class":298},[288,108724,108725],{"class":290,"line":8121},[288,108726,108727],{"class":298},"    Image.fromarray(image).save(output_path)\n",[288,108729,108730],{"class":290,"line":8145},[288,108731,108732],{"class":298},"    renderer.close()\n",[288,108734,108735],{"class":290,"line":8150},[288,108736,2572],{"emptyLinePlaceholder":217},[288,108738,108739,108741,108743,108746],{"class":290,"line":8156},[288,108740,31472],{"class":347},[288,108742,299],{"class":298},[288,108744,108745],{"class":403},"\"saved:\"",[288,108747,108748],{"class":298},", output_path.resolve())\n",[288,108750,108751,108753,108755,108758],{"class":290,"line":8183},[288,108752,31472],{"class":347},[288,108754,299],{"class":298},[288,108756,108757],{"class":403},"\"image shape:\"",[288,108759,108760],{"class":298},", image.shape)\n",[288,108762,108763],{"class":290,"line":8188},[288,108764,2572],{"emptyLinePlaceholder":217},[288,108766,108767],{"class":290,"line":8194},[288,108768,2572],{"emptyLinePlaceholder":217},[288,108770,108771,108773,108775,108777,108779],{"class":290,"line":8206},[288,108772,1703],{"class":294},[288,108774,31393],{"class":347},[288,108776,101732],{"class":294},[288,108778,101735],{"class":403},[288,108780,3911],{"class":298},[288,108782,108783],{"class":290,"line":8218},[288,108784,101742],{"class":298},[19,108786,103743],{},[280,108788,108790],{"className":23995,"code":108789,"language":23997,"meta":205,"style":205},"touch ch5_renderer.py\n",[25,108791,108792],{"__ignoreMap":205},[288,108793,108794,108796],{"class":290,"line":291},[288,108795,101456],{"class":2135},[288,108797,108798],{"class":403}," ch5_renderer.py\n",[260,108800,101745],{"id":101745},[19,108802,108803],{},"viewer 上下文：",[280,108805,108807],{"className":30551,"code":108806,"language":30553,"meta":205,"style":205},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[25,108808,108809],{"__ignoreMap":205},[288,108810,108811,108813,108815,108817],{"class":290,"line":291},[288,108812,108006],{"class":294},[288,108814,108009],{"class":298},[288,108816,31556],{"class":294},[288,108818,108014],{"class":298},[19,108820,108821,108823],{},[25,108822,108006],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108825,108826],{},"窗口循环：",[280,108828,108830],{"className":30551,"code":108829,"language":30553,"meta":205,"style":205},"while viewer.is_running() and data.time \u003C 5.0:\n",[25,108831,108832],{"__ignoreMap":205},[288,108833,108834,108837,108839,108841,108843,108845,108847],{"class":290,"line":291},[288,108835,108836],{"class":294},"while",[288,108838,108360],{"class":298},[288,108840,30635],{"class":294},[288,108842,108365],{"class":298},[288,108844,1207],{"class":294},[288,108846,108370],{"class":347},[288,108848,3911],{"class":298},[19,108850,108851],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108853,108854],{},"固定相机：",[280,108856,108858],{"className":53240,"code":108857,"language":53242,"meta":205,"style":205},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[25,108859,108860],{"__ignoreMap":205},[288,108861,108862,108864,108866,108868,108870,108872,108874,108876,108879,108882,108884,108887],{"class":290,"line":291},[288,108863,1207],{"class":298},[288,108865,108688],{"class":51473},[288,108867,15093],{"class":2135},[288,108869,344],{"class":298},[288,108871,108693],{"class":403},[288,108873,101279],{"class":2135},[288,108875,344],{"class":298},[288,108877,108878],{"class":403},"\"1.5 -2.0 1.2\"",[288,108880,108881],{"class":2135}," xyaxes",[288,108883,344],{"class":298},[288,108885,108886],{"class":403},"\"1 0.75 0 0 0 1\"",[288,108888,101317],{"class":298},[19,108890,108891],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[260,108893,108895],{"id":108894},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[280,108897,108899],{"className":30551,"code":108898,"language":30553,"meta":205,"style":205},"import time\n",[25,108900,108901],{"__ignoreMap":205},[288,108902,108903,108905],{"class":290,"line":291},[288,108904,30565],{"class":294},[288,108906,32002],{"class":298},[19,108908,108909],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[280,108911,108913],{"className":30551,"code":108912,"language":30553,"meta":205,"style":205},"import mujoco\nimport mujoco.viewer\n",[25,108914,108915,108921],{"__ignoreMap":205},[288,108916,108917,108919],{"class":290,"line":291},[288,108918,30565],{"class":294},[288,108920,101474],{"class":298},[288,108922,108923,108925],{"class":290,"line":206},[288,108924,30565],{"class":294},[288,108926,107725],{"class":298},[19,108928,108929],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[280,108931,108932],{"className":30551,"code":108806,"language":30553,"meta":205,"style":205},[25,108933,108934],{"__ignoreMap":205},[288,108935,108936,108938,108940,108942],{"class":290,"line":291},[288,108937,108006],{"class":294},[288,108939,108009],{"class":298},[288,108941,31556],{"class":294},[288,108943,108014],{"class":298},[19,108945,108946,108947,108950],{},"打开一个 viewer 窗口。",[25,108948,108949],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[280,108952,108953],{"className":30551,"code":108829,"language":30553,"meta":205,"style":205},[25,108954,108955],{"__ignoreMap":205},[288,108956,108957,108959,108961,108963,108965,108967,108969],{"class":290,"line":291},[288,108958,108836],{"class":294},[288,108960,108360],{"class":298},[288,108962,30635],{"class":294},[288,108964,108365],{"class":298},[288,108966,1207],{"class":294},[288,108968,108370],{"class":347},[288,108970,3911],{"class":298},[19,108972,108973,108974,108977],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[25,108975,108976],{},"viewer.is_running()"," 会变成 false，循环结束。",[280,108979,108981],{"className":30551,"code":108980,"language":30553,"meta":205,"style":205},"step_start = time.time()\n",[25,108982,108983],{"__ignoreMap":205},[288,108984,108985,108988,108990],{"class":290,"line":291},[288,108986,108987],{"class":298},"step_start ",[288,108989,344],{"class":294},[288,108991,108382],{"class":298},[19,108993,108994],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[280,108996,108997],{"className":30551,"code":108091,"language":30553,"meta":205,"style":205},[25,108998,108999,109003],{"__ignoreMap":205},[288,109000,109001],{"class":290,"line":291},[288,109002,104678],{"class":298},[288,109004,109005],{"class":290,"line":206},[288,109006,108102],{"class":298},[19,109008,109009,109011,109012,109014,109015,109017,109018,109021],{},[25,109010,101388],{}," 推进物理仿真。",[25,109013,108110],{}," 把最新的 ",[25,109016,33574],{}," 同步到窗口里显示。没有 ",[25,109019,109020],{},"sync()","，窗口可能看不到最新状态。",[280,109023,109024],{"className":30551,"code":108121,"language":30553,"meta":205,"style":205},[25,109025,109026],{"__ignoreMap":205},[288,109027,109028,109030,109032,109034,109036,109038,109040],{"class":290,"line":291},[288,109029,108128],{"class":298},[288,109031,344],{"class":294},[288,109033,108133],{"class":298},[288,109035,829],{"class":294},[288,109037,108138],{"class":298},[288,109039,829],{"class":294},[288,109041,108143],{"class":298},[19,109043,109044],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[280,109046,109048],{"className":30551,"code":109047,"language":30553,"meta":205,"style":205},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[25,109049,109050,109062],{"__ignoreMap":205},[288,109051,109052,109054,109056,109058,109060],{"class":290,"line":291},[288,109053,1703],{"class":294},[288,109055,108420],{"class":298},[288,109057,1257],{"class":294},[288,109059,4265],{"class":347},[288,109061,3911],{"class":298},[288,109063,109064],{"class":290,"line":206},[288,109065,109066],{"class":298},"    time.sleep(sleep_time)\n",[19,109068,109069],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[260,109071,109073],{"id":109072},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[280,109075,109077],{"className":30551,"code":109076,"language":30553,"meta":205,"style":205},"from pathlib import Path\n",[25,109078,109079],{"__ignoreMap":205},[288,109080,109081,109083,109085,109087],{"class":290,"line":291},[288,109082,30910],{"class":294},[288,109084,108484],{"class":298},[288,109086,30565],{"class":294},[288,109088,108489],{"class":298},[19,109090,109091,109092,109095,109096,109099],{},"导入 ",[25,109093,109094],{},"Path","，用来处理文件路径。相比直接写字符串，",[25,109097,109098],{},"Path(\"render_output.png\")"," 更清晰。",[280,109101,109103],{"className":30551,"code":109102,"language":30553,"meta":205,"style":205},"from PIL import Image\n",[25,109104,109105],{"__ignoreMap":205},[288,109106,109107,109109,109111,109113],{"class":290,"line":291},[288,109108,30910],{"class":294},[288,109110,47436],{"class":347},[288,109112,47439],{"class":294},[288,109114,47442],{"class":298},[19,109116,109117],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[280,109119,109120],{"className":53240,"code":108857,"language":53242,"meta":205,"style":205},[25,109121,109122],{"__ignoreMap":205},[288,109123,109124,109126,109128,109130,109132,109134,109136,109138,109140,109142,109144,109146],{"class":290,"line":291},[288,109125,1207],{"class":298},[288,109127,108688],{"class":51473},[288,109129,15093],{"class":2135},[288,109131,344],{"class":298},[288,109133,108693],{"class":403},[288,109135,101279],{"class":2135},[288,109137,344],{"class":298},[288,109139,108878],{"class":403},[288,109141,108881],{"class":2135},[288,109143,344],{"class":298},[288,109145,108886],{"class":403},[288,109147,101317],{"class":298},[19,109149,109150,109151,109153,109154,109156,109157,109160,109161,109163],{},"定义一个相机。",[25,109152,79983],{}," 是相机名字。",[25,109155,104319],{}," 是相机在世界里的位置。",[25,109158,109159],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[25,109162,104319],{}," 来调视角。",[280,109165,109167],{"className":30551,"code":109166,"language":30553,"meta":205,"style":205},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[25,109168,109169],{"__ignoreMap":205},[288,109170,109171,109173,109175,109177,109179,109181,109183,109185,109187,109189,109191],{"class":290,"line":291},[288,109172,107743],{"class":298},[288,109174,344],{"class":294},[288,109176,108047],{"class":298},[288,109178,25154],{"class":5389},[288,109180,344],{"class":294},[288,109182,42515],{"class":347},[288,109184,12608],{"class":298},[288,109186,25150],{"class":5389},[288,109188,344],{"class":294},[288,109190,108062],{"class":347},[288,109192,305],{"class":298},[19,109194,109195,109196,101191,109198,109200],{},"创建离屏渲染器。",[25,109197,25154],{},[25,109199,25150],{}," 决定输出图片大小。",[280,109202,109203],{"className":30551,"code":101849,"language":30553,"meta":205,"style":205},[25,109204,109205,109221],{"__ignoreMap":205},[288,109206,109207,109209,109211,109213,109215,109217,109219],{"class":290,"line":291},[288,109208,3197],{"class":294},[288,109210,101674],{"class":298},[288,109212,26216],{"class":294},[288,109214,32616],{"class":347},[288,109216,299],{"class":298},[288,109218,608],{"class":347},[288,109220,30959],{"class":298},[288,109222,109223],{"class":290,"line":206},[288,109224,101872],{"class":298},[19,109226,109227],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[280,109229,109231],{"className":30551,"code":109230,"language":30553,"meta":205,"style":205},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[25,109232,109233],{"__ignoreMap":205},[288,109234,109235,109238,109240,109242,109244],{"class":290,"line":291},[288,109236,109237],{"class":298},"renderer.update_scene(data, ",[288,109239,108688],{"class":5389},[288,109241,344],{"class":294},[288,109243,108693],{"class":403},[288,109245,305],{"class":298},[19,109247,109248,109249,109251,109252,109255],{},"告诉 renderer：用当前 ",[25,109250,33574],{}," 的状态更新画面，并使用名为 ",[25,109253,109254],{},"fixed_camera"," 的相机视角。",[280,109257,109258],{"className":30551,"code":108153,"language":30553,"meta":205,"style":205},[25,109259,109260],{"__ignoreMap":205},[288,109261,109262,109264,109266],{"class":290,"line":291},[288,109263,107753],{"class":298},[288,109265,344],{"class":294},[288,109267,107758],{"class":298},[19,109269,109270,109271,109274],{},"真正渲染出图像。",[25,109272,109273],{},"image"," 是一个 NumPy 数组，不是文件。",[280,109276,109278],{"className":30551,"code":109277,"language":30553,"meta":205,"style":205},"Image.fromarray(image).save(output_path)\n",[25,109279,109280],{"__ignoreMap":205},[288,109281,109282],{"class":290,"line":291},[288,109283,109277],{"class":298},[19,109285,109286,109287,28558],{},"把数组转换成图片，并保存到 ",[25,109288,109289],{},"render_output.png",[280,109291,109293],{"className":30551,"code":109292,"language":30553,"meta":205,"style":205},"renderer.close()\n",[25,109294,109295],{"__ignoreMap":205},[288,109296,109297],{"class":290,"line":291},[288,109298,109292],{"class":298},[19,109300,109301],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109303,102489],{"id":102488},[19,109305,109306,109307,109309,109310,28558],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[25,109308,109289],{},"，并输出图像数组形状，例如 ",[25,109311,109312],{},"(480, 640, 3)",[19,109314,109315],{},"如果图片里看不到方块，先检查：",[243,109317,109318,109321,109324],{},[246,109319,109320],{},"方块是否掉到相机视野外。",[246,109322,109323],{},"camera 位置是否合理。",[246,109325,109326,109327,109330],{},"是否在 ",[25,109328,109329],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109332,102521],{"id":102520},[19,109334,109335],{},"运行 viewer:",[280,109337,109339],{"className":23995,"code":109338,"language":23997,"meta":205,"style":205},"python ch5_viewer.py\n",[25,109340,109341],{"__ignoreMap":205},[288,109342,109343,109345],{"class":290,"line":291},[288,109344,30553],{"class":2135},[288,109346,108469],{"class":403},[19,109348,109349],{},"运行 renderer:",[280,109351,109353],{"className":23995,"code":109352,"language":23997,"meta":205,"style":205},"python ch5_renderer.py\n",[25,109354,109355],{"__ignoreMap":205},[288,109356,109357,109359],{"class":290,"line":291},[288,109358,30553],{"class":2135},[288,109360,108798],{"class":403},[19,109362,109363],{},"如果在服务器上运行:",[280,109365,109367],{"className":23995,"code":109366,"language":23997,"meta":205,"style":205},"MUJOCO_GL=egl python ch5_renderer.py\n",[25,109368,109369],{"__ignoreMap":205},[288,109370,109371,109373,109375,109377,109380],{"class":290,"line":291},[288,109372,107987],{"class":298},[288,109374,344],{"class":294},[288,109376,107977],{"class":403},[288,109378,109379],{"class":2135}," python",[288,109381,108798],{"class":403},[19,109383,107955],{},[280,109385,109387],{"className":23995,"code":109386,"language":23997,"meta":205,"style":205},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[25,109388,109389],{"__ignoreMap":205},[288,109390,109391,109393,109395,109397,109399],{"class":290,"line":291},[288,109392,107987],{"class":298},[288,109394,344],{"class":294},[288,109396,107981],{"class":403},[288,109398,109379],{"class":2135},[288,109400,108798],{"class":403},[19,109402,109403],{},"再做几个练习：",[243,109405,109406,109413,109416,109422],{},[246,109407,109408,109409,109412],{},"把 renderer 分辨率改成 ",[25,109410,109411],{},"height=240, width=320","，观察输出 shape。",[246,109414,109415],{},"把方块颜色改成蓝色，重新保存图片。",[246,109417,109418,109419,109421],{},"把相机 ",[25,109420,104319],{}," 改远一点，观察画面中物体是否变小。",[246,109423,109424,109425,102587,109428,109431],{},"把 viewer 示例中的 ",[25,109426,109427],{},"data.time \u003C 5.0",[25,109429,109430],{},"data.time \u003C 20.0","，观察更长时间。",[14,109433,102626],{"id":102625},[260,109435,109437],{"id":109436},"viewer-窗口打不开","viewer 窗口打不开",[19,109439,109440],{},"安装:",[280,109442,109444],{"className":23995,"code":109443,"language":23997,"meta":205,"style":205},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[25,109445,109446],{"__ignoreMap":205},[288,109447,109448,109450,109452,109454,109456,109458,109460,109462,109464,109466,109468],{"class":290,"line":291},[288,109449,24749],{"class":2135},[288,109451,26488],{"class":403},[288,109453,24007],{"class":403},[288,109455,26573],{"class":347},[288,109457,102679],{"class":403},[288,109459,101007],{"class":403},[288,109461,102684],{"class":403},[288,109463,101020],{"class":403},[288,109465,101026],{"class":403},[288,109467,101017],{"class":403},[288,109469,109470],{"class":403}," libXinerama\n",[260,109472,109474],{"id":109473},"glfwerror",[25,109475,109476],{},"GLFWError",[19,109478,109479],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[260,109481,109483],{"id":109482},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109485,109486,109487,82712,109489,109491],{},"尝试 ",[25,109488,101210],{},[25,109490,101213],{},"。可能存在版本差异。",[260,109493,109494],{"id":109494},"保存图片是黑的",[19,109496,102748],{},[243,109498,109499,109502,109505,109515],{},[246,109500,109501],{},"XML 里是否有 light。",[246,109503,109504],{},"相机是否对着模型。",[246,109506,109507,109508,109511,109512,28558],{},"是否先 ",[25,109509,109510],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[25,109513,109514],{},"renderer.render()",[246,109516,109517],{},"物体是否已经掉出视野。",[260,109519,109520],{"id":109520},"远程服务器没有显示器",[19,109522,109523],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[280,109525,109526],{"className":23995,"code":109366,"language":23997,"meta":205,"style":205},[25,109527,109528],{"__ignoreMap":205},[288,109529,109530,109532,109534,109536,109538],{"class":290,"line":291},[288,109531,107987],{"class":298},[288,109533,344],{"class":294},[288,109535,107977],{"class":403},[288,109537,109379],{"class":2135},[288,109539,108798],{"class":403},[19,109541,109542],{},"如果 EGL 不可用，再尝试：",[280,109544,109545],{"className":23995,"code":109386,"language":23997,"meta":205,"style":205},[25,109546,109547],{"__ignoreMap":205},[288,109548,109549,109551,109553,109555,109557],{"class":290,"line":291},[288,109550,107987],{"class":298},[288,109552,344],{"class":294},[288,109554,107981],{"class":403},[288,109556,109379],{"class":2135},[288,109558,108798],{"class":403},[14,109560,102780],{"id":102779},[19,109562,109563],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[243,109565,109566,109569,109572],{},[246,109567,109568],{},"先用 viewer 看模型和控制是否正常。",[246,109570,109571],{},"再用 renderer 保存图片或构造视觉观测。",[246,109573,109574],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5299,109576,109577],{},"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":205,"searchDepth":206,"depth":206,"links":109579},[109580,109581,109582,109587,109592,109593,109594,109601],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":109583},[109584,109585,109586],{"id":108084,"depth":1352,"text":108085},{"id":108114,"depth":1352,"text":108115},{"id":108149,"depth":1352,"text":108150},{"id":101425,"depth":206,"text":101426,"children":109588},[109589,109590,109591],{"id":101745,"depth":1352,"text":101745},{"id":108894,"depth":1352,"text":108895},{"id":109072,"depth":1352,"text":109073},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":109595},[109596,109597,109598,109599,109600],{"id":109436,"depth":1352,"text":109437},{"id":109473,"depth":1352,"text":109476},{"id":109482,"depth":1352,"text":109483},{"id":109494,"depth":1352,"text":109494},{"id":109520,"depth":1352,"text":109520},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107692,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109608,"title":109609,"body":109610,"description":205,"extension":215,"meta":111521,"navigation":217,"path":111522,"seo":111523,"stem":111524,"__hash__":111525},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109611,"toc":111497},[109612,109615,109617,109620,109622,109641,109644,109650,109653,109655,109657,109681,109683,109697,109699,109740,109742,109753,109755,109758,109764,109767,109801,109804,109836,109839,109871,109875,109878,109918,109921,109927,109930,109936,109940,109943,109949,109952,109956,109959,109999,110001,110014,110017,110019,110601,110603,110615,110618,110629,110631,110634,110653,110665,110668,110689,110692,110695,110738,110741,110744,110764,110771,110773,110791,110806,110809,110815,110818,110824,110841,110848,110879,110890,110924,110935,110952,110961,110969,110974,110988,110991,111012,111018,111032,111037,111067,111077,111102,111110,111133,111136,111152,111155,111163,111169,111191,111204,111225,111234,111273,111284,111286,111289,111295,111298,111301,111307,111310,111330,111333,111335,111374,111376,111379,111387,111390,111393,111420,111423,111433,111439,111442,111448,111450,111456,111460,111463,111465,111468,111492,111495],[10,109613,109609],{"id":109614},"_6控制任务cartpole",[14,109616,100820],{"id":100819},[19,109618,109619],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109621,104504],{},[243,109623,109624,109627,109629,109632,109635,109638],{},[246,109625,109626],{},"slide joint",[246,109628,106357],{},[246,109630,109631],{},"cart force actuator",[246,109633,109634],{},"状态观测",[246,109636,109637],{},"简单控制循环",[246,109639,109640],{},"reward 设计雏形",[19,109642,109643],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[280,109645,109648],{"className":109646,"code":109647,"language":5360,"meta":205},[5358],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[25,109649,109647],{"__ignoreMap":205},[19,109651,109652],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109654,100943],{"id":100942},[19,109656,100946],{},[280,109658,109659],{"className":23995,"code":104561,"language":23997,"meta":205,"style":205},[25,109660,109661],{"__ignoreMap":205},[288,109662,109663,109665,109667,109669,109671,109673,109675,109677,109679],{"class":290,"line":291},[288,109664,24749],{"class":2135},[288,109666,26488],{"class":403},[288,109668,24007],{"class":403},[288,109670,26573],{"class":347},[288,109672,104576],{"class":403},[288,109674,100971],{"class":403},[288,109676,102674],{"class":403},[288,109678,100987],{"class":403},[288,109680,104585],{"class":403},[19,109682,102992],{},[280,109684,109685],{"className":23995,"code":101092,"language":23997,"meta":205,"style":205},[25,109686,109687],{"__ignoreMap":205},[288,109688,109689,109691,109693,109695],{"class":290,"line":291},[288,109690,24004],{"class":2135},[288,109692,24007],{"class":403},[288,109694,101103],{"class":403},[288,109696,101106],{"class":403},[19,109698,103009],{},[280,109700,109702],{"className":23995,"code":109701,"language":23997,"meta":205,"style":205},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[25,109703,109704,109721,109730],{"__ignoreMap":205},[288,109705,109706,109708,109710,109712,109715,109717,109719],{"class":290,"line":291},[288,109707,30503],{"class":2135},[288,109709,29349],{"class":403},[288,109711,25288],{"class":347},[288,109713,109714],{"class":403}," mujoco-cartpole",[288,109716,101148],{"class":403},[288,109718,101151],{"class":347},[288,109720,101154],{"class":347},[288,109722,109723,109725,109727],{"class":290,"line":206},[288,109724,30503],{"class":2135},[288,109726,101161],{"class":403},[288,109728,109729],{"class":403}," mujoco-cartpole\n",[288,109731,109732,109734,109736,109738],{"class":290,"line":1352},[288,109733,24004],{"class":2135},[288,109735,24007],{"class":403},[288,109737,101103],{"class":403},[288,109739,101106],{"class":403},[19,109741,101177],{},[243,109743,109744,109747,109750],{},[246,109745,109746],{},"本章不依赖 Gymnasium。",[246,109748,109749],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[246,109751,109752],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109754,101218],{"id":101217},[19,109756,109757],{},"Cartpole 的模型结构:",[280,109759,109762],{"className":109760,"code":109761,"language":5360,"meta":205},[5358],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[25,109763,109761],{"__ignoreMap":205},[19,109765,109766],{},"小车通过 slide joint 左右移动:",[280,109768,109770],{"className":53240,"code":109769,"language":53242,"meta":205,"style":205},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[25,109771,109772],{"__ignoreMap":205},[288,109773,109774,109776,109778,109780,109782,109785,109787,109789,109792,109794,109796,109799],{"class":290,"line":291},[288,109775,1207],{"class":298},[288,109777,103129],{"class":51473},[288,109779,15093],{"class":2135},[288,109781,344],{"class":298},[288,109783,109784],{"class":403},"\"cart_x\"",[288,109786,53997],{"class":2135},[288,109788,344],{"class":298},[288,109790,109791],{"class":403},"\"slide\"",[288,109793,106201],{"class":2135},[288,109795,344],{"class":298},[288,109797,109798],{"class":403},"\"1 0 0\"",[288,109800,101317],{"class":298},[19,109802,109803],{},"杆子通过 hinge joint 旋转:",[280,109805,109807],{"className":53240,"code":109806,"language":53242,"meta":205,"style":205},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,109808,109809],{"__ignoreMap":205},[288,109810,109811,109813,109815,109817,109819,109822,109824,109826,109828,109830,109832,109834],{"class":290,"line":291},[288,109812,1207],{"class":298},[288,109814,103129],{"class":51473},[288,109816,15093],{"class":2135},[288,109818,344],{"class":298},[288,109820,109821],{"class":403},"\"pole_hinge\"",[288,109823,53997],{"class":2135},[288,109825,344],{"class":298},[288,109827,106192],{"class":403},[288,109829,106201],{"class":2135},[288,109831,344],{"class":298},[288,109833,106206],{"class":403},[288,109835,101317],{"class":298},[19,109837,109838],{},"控制力作用在小车 slide joint 上:",[280,109840,109842],{"className":53240,"code":109841,"language":53242,"meta":205,"style":205},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[25,109843,109844],{"__ignoreMap":205},[288,109845,109846,109848,109850,109852,109854,109857,109859,109861,109863,109865,109867,109869],{"class":290,"line":291},[288,109847,1207],{"class":298},[288,109849,106247],{"class":51473},[288,109851,15093],{"class":2135},[288,109853,344],{"class":298},[288,109855,109856],{"class":403},"\"cart_motor\"",[288,109858,106257],{"class":2135},[288,109860,344],{"class":298},[288,109862,109784],{"class":403},[288,109864,106264],{"class":2135},[288,109866,344],{"class":298},[288,109868,54489],{"class":403},[288,109870,101317],{"class":298},[260,109872,109874],{"id":109873},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109876,109877],{},"这个简化模型有两个关节：",[436,109879,109880,109891],{},[439,109881,109882],{},[442,109883,109884,109886,109888],{},[445,109885,102932],{"align":23909},[445,109887,23910],{"align":23909},[445,109889,109890],{"align":23909},"对应状态",[483,109892,109893,109906],{},[442,109894,109895,109900,109903],{},[488,109896,109897],{"align":23909},[25,109898,109899],{},"cart_x",[488,109901,109902],{"align":23909},"slide",[488,109904,109905],{"align":23909},"小车 x 位置",[442,109907,109908,109913,109915],{},[488,109909,109910],{"align":23909},[25,109911,109912],{},"pole_hinge",[488,109914,106013],{"align":23909},[488,109916,109917],{"align":23909},"杆子角度",[19,109919,109920],{},"所以：",[280,109922,109925],{"className":109923,"code":109924,"language":5360,"meta":205},[5358],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[25,109926,109924],{"__ignoreMap":205},[19,109928,109929],{},"把它们拼起来就是观测：",[280,109931,109934],{"className":109932,"code":109933,"language":5360,"meta":205},[5358],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,109935,109933],{"__ignoreMap":205},[260,109937,109939],{"id":109938},"action-是什么","action 是什么",[19,109941,109942],{},"本章只有一个 actuator：",[280,109944,109947],{"className":109945,"code":109946,"language":5360,"meta":205},[5358],"data.ctrl[0] = action\n",[25,109948,109946],{"__ignoreMap":205},[19,109950,109951],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[260,109953,109955],{"id":109954},"reward-是什么","reward 是什么",[19,109957,109958],{},"奖励函数：",[280,109960,109962],{"className":30551,"code":109961,"language":30553,"meta":205,"style":205},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[25,109963,109964],{"__ignoreMap":205},[288,109965,109966,109968,109971,109973,109975,109977,109980,109982,109985,109987,109989,109991,109994,109996],{"class":290,"line":291},[288,109967,17219],{"class":294},[288,109969,109970],{"class":347}," float",[288,109972,299],{"class":298},[288,109974,102576],{"class":347},[288,109976,52444],{"class":294},[288,109978,109979],{"class":347}," 0.1",[288,109981,6691],{"class":294},[288,109983,109984],{"class":298}," cart_x ",[288,109986,752],{"class":294},[288,109988,109984],{"class":298},[288,109990,829],{"class":294},[288,109992,109993],{"class":298}," pole_angle ",[288,109995,752],{"class":294},[288,109997,109998],{"class":298}," pole_angle)\n",[19,110000,106399],{},[243,110002,110003,110008,110011],{},[246,110004,110005,110006,28558],{},"基础奖励是 ",[25,110007,102576],{},[246,110009,110010],{},"小车离中心越远，扣分越多。",[246,110012,110013],{},"杆子角度越大，扣分越多。",[19,110015,110016],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110018,101426],{"id":101425},[280,110020,110022],{"className":30551,"code":110021,"language":30553,"meta":205,"style":205},"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",[25,110023,110024,110030,110040,110044,110048,110056,110061,110065,110069,110073,110078,110082,110087,110092,110097,110101,110106,110111,110116,110120,110124,110128,110132,110136,110141,110145,110149,110153,110157,110161,110171,110178,110182,110186,110200,110214,110227,110257,110261,110265,110277,110289,110297,110301,110314,110318,110322,110331,110335,110351,110361,110374,110387,110391,110414,110432,110436,110448,110452,110456,110466,110476,110480,110496,110537,110541,110561,110577,110581,110585,110597],{"__ignoreMap":205},[288,110025,110026,110028],{"class":290,"line":291},[288,110027,30565],{"class":294},[288,110029,101474],{"class":298},[288,110031,110032,110034,110036,110038],{"class":290,"line":206},[288,110033,30565],{"class":294},[288,110035,31553],{"class":298},[288,110037,31556],{"class":294},[288,110039,31559],{"class":298},[288,110041,110042],{"class":290,"line":1352},[288,110043,2572],{"emptyLinePlaceholder":217},[288,110045,110046],{"class":290,"line":1367},[288,110047,2572],{"emptyLinePlaceholder":217},[288,110049,110050,110052,110054],{"class":290,"line":1373},[288,110051,101487],{"class":347},[288,110053,13737],{"class":294},[288,110055,101492],{"class":403},[288,110057,110058],{"class":290,"line":1387},[288,110059,110060],{"class":403},"\u003Cmujoco model=\"cartpole\">\n",[288,110062,110063],{"class":290,"line":1393},[288,110064,101502],{"class":403},[288,110066,110067],{"class":290,"line":1484},[288,110068,2572],{"emptyLinePlaceholder":217},[288,110070,110071],{"class":290,"line":1490},[288,110072,101511],{"class":403},[288,110074,110075],{"class":290,"line":1502},[288,110076,110077],{"class":403},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[288,110079,110080],{"class":290,"line":1784},[288,110081,2572],{"emptyLinePlaceholder":217},[288,110083,110084],{"class":290,"line":1789},[288,110085,110086],{"class":403},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[288,110088,110089],{"class":290,"line":1795},[288,110090,110091],{"class":403},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[288,110093,110094],{"class":290,"line":1800},[288,110095,110096],{"class":403},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[288,110098,110099],{"class":290,"line":1814},[288,110100,2572],{"emptyLinePlaceholder":217},[288,110102,110103],{"class":290,"line":1819},[288,110104,110105],{"class":403},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[288,110107,110108],{"class":290,"line":1825},[288,110109,110110],{"class":403},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[288,110112,110113],{"class":290,"line":1846},[288,110114,110115],{"class":403},"        \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",[288,110117,110118],{"class":290,"line":1851},[288,110119,106611],{"class":403},[288,110121,110122],{"class":290,"line":1865},[288,110123,101540],{"class":403},[288,110125,110126],{"class":290,"line":1870},[288,110127,101545],{"class":403},[288,110129,110130],{"class":290,"line":1899},[288,110131,2572],{"emptyLinePlaceholder":217},[288,110133,110134],{"class":290,"line":1904},[288,110135,106628],{"class":403},[288,110137,110138],{"class":290,"line":1921},[288,110139,110140],{"class":403},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[288,110142,110143],{"class":290,"line":1926},[288,110144,106638],{"class":403},[288,110146,110147],{"class":290,"line":1931},[288,110148,101550],{"class":403},[288,110150,110151],{"class":290,"line":1936},[288,110152,95871],{"class":403},[288,110154,110155],{"class":290,"line":1950},[288,110156,2572],{"emptyLinePlaceholder":217},[288,110158,110159],{"class":290,"line":1955},[288,110160,2572],{"emptyLinePlaceholder":217},[288,110162,110163,110165,110168],{"class":290,"line":2749},[288,110164,32120],{"class":294},[288,110166,110167],{"class":2135}," get_observation",[288,110169,110170],{"class":298},"(data: mujoco.MjData) -> np.ndarray:\n",[288,110172,110173,110175],{"class":290,"line":2763},[288,110174,4262],{"class":294},[288,110176,110177],{"class":298}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[288,110179,110180],{"class":290,"line":2771},[288,110181,2572],{"emptyLinePlaceholder":217},[288,110183,110184],{"class":290,"line":2776},[288,110185,2572],{"emptyLinePlaceholder":217},[288,110187,110188,110190,110193,110196,110198],{"class":290,"line":2782},[288,110189,32120],{"class":294},[288,110191,110192],{"class":2135}," compute_reward",[288,110194,110195],{"class":298},"(obs: np.ndarray) -> ",[288,110197,338],{"class":347},[288,110199,3911],{"class":298},[288,110201,110202,110205,110207,110210,110212],{"class":290,"line":2788},[288,110203,110204],{"class":298},"    cart_x ",[288,110206,344],{"class":294},[288,110208,110209],{"class":298}," obs[",[288,110211,490],{"class":347},[288,110213,33419],{"class":298},[288,110215,110216,110219,110221,110223,110225],{"class":290,"line":2793},[288,110217,110218],{"class":298},"    pole_angle ",[288,110220,344],{"class":294},[288,110222,110209],{"class":298},[288,110224,516],{"class":347},[288,110226,33419],{"class":298},[288,110228,110229,110231,110233,110235,110237,110239,110241,110243,110245,110247,110249,110251,110253,110255],{"class":290,"line":8121},[288,110230,4262],{"class":294},[288,110232,109970],{"class":347},[288,110234,299],{"class":298},[288,110236,102576],{"class":347},[288,110238,52444],{"class":294},[288,110240,109979],{"class":347},[288,110242,6691],{"class":294},[288,110244,109984],{"class":298},[288,110246,752],{"class":294},[288,110248,109984],{"class":298},[288,110250,829],{"class":294},[288,110252,109993],{"class":298},[288,110254,752],{"class":294},[288,110256,109998],{"class":298},[288,110258,110259],{"class":290,"line":8145},[288,110260,2572],{"emptyLinePlaceholder":217},[288,110262,110263],{"class":290,"line":8150},[288,110264,2572],{"emptyLinePlaceholder":217},[288,110266,110267,110269,110271,110273,110275],{"class":290,"line":8156},[288,110268,32120],{"class":294},[288,110270,2145],{"class":2135},[288,110272,101571],{"class":298},[288,110274,95859],{"class":347},[288,110276,3911],{"class":298},[288,110278,110279,110281,110283,110285,110287],{"class":290,"line":8183},[288,110280,101580],{"class":298},[288,110282,344],{"class":294},[288,110284,101585],{"class":298},[288,110286,101487],{"class":347},[288,110288,305],{"class":298},[288,110290,110291,110293,110295],{"class":290,"line":8188},[288,110292,101594],{"class":298},[288,110294,344],{"class":294},[288,110296,101599],{"class":298},[288,110298,110299],{"class":290,"line":8194},[288,110300,2572],{"emptyLinePlaceholder":217},[288,110302,110303,110305,110307,110309,110311],{"class":290,"line":8206},[288,110304,105242],{"class":298},[288,110306,516],{"class":347},[288,110308,4615],{"class":298},[288,110310,344],{"class":294},[288,110312,110313],{"class":347}," 0.1\n",[288,110315,110316],{"class":290,"line":8218},[288,110317,105255],{"class":298},[288,110319,110320],{"class":290,"line":8230},[288,110321,2572],{"emptyLinePlaceholder":217},[288,110323,110324,110327,110329],{"class":290,"line":9889},[288,110325,110326],{"class":298},"    total_reward ",[288,110328,344],{"class":294},[288,110330,104934],{"class":347},[288,110332,110333],{"class":290,"line":9914},[288,110334,2572],{"emptyLinePlaceholder":217},[288,110336,110337,110339,110341,110343,110345,110347,110349],{"class":290,"line":9937},[288,110338,3373],{"class":294},[288,110340,31789],{"class":298},[288,110342,26216],{"class":294},[288,110344,32616],{"class":347},[288,110346,299],{"class":298},[288,110348,6583],{"class":347},[288,110350,30959],{"class":298},[288,110352,110353,110356,110358],{"class":290,"line":9961},[288,110354,110355],{"class":298},"        obs ",[288,110357,344],{"class":294},[288,110359,110360],{"class":298}," get_observation(data)\n",[288,110362,110363,110366,110368,110370,110372],{"class":290,"line":9966},[288,110364,110365],{"class":298},"        pole_angle ",[288,110367,344],{"class":294},[288,110369,110209],{"class":298},[288,110371,516],{"class":347},[288,110373,33419],{"class":298},[288,110375,110376,110379,110381,110383,110385],{"class":290,"line":9971},[288,110377,110378],{"class":298},"        pole_angular_velocity ",[288,110380,344],{"class":294},[288,110382,110209],{"class":298},[288,110384,370],{"class":347},[288,110386,33419],{"class":298},[288,110388,110389],{"class":290,"line":9976},[288,110390,2572],{"emptyLinePlaceholder":217},[288,110392,110393,110396,110398,110401,110403,110405,110407,110409,110411],{"class":290,"line":9985},[288,110394,110395],{"class":298},"        action ",[288,110397,344],{"class":294},[288,110399,110400],{"class":347}," 2.0",[288,110402,6691],{"class":294},[288,110404,109993],{"class":298},[288,110406,778],{"class":294},[288,110408,62040],{"class":347},[288,110410,6691],{"class":294},[288,110412,110413],{"class":298}," pole_angular_velocity\n",[288,110415,110416,110418,110420,110422,110424,110426,110428,110430],{"class":290,"line":9990},[288,110417,110395],{"class":298},[288,110419,344],{"class":294},[288,110421,107620],{"class":298},[288,110423,829],{"class":294},[288,110425,102576],{"class":347},[288,110427,12608],{"class":298},[288,110429,102576],{"class":347},[288,110431,305],{"class":298},[288,110433,110434],{"class":290,"line":9996},[288,110435,2572],{"emptyLinePlaceholder":217},[288,110437,110438,110440,110442,110444,110446],{"class":290,"line":10017},[288,110439,106790],{"class":298},[288,110441,490],{"class":347},[288,110443,4615],{"class":298},[288,110445,344],{"class":294},[288,110447,107643],{"class":298},[288,110449,110450],{"class":290,"line":10023},[288,110451,101689],{"class":298},[288,110453,110454],{"class":290,"line":10037},[288,110455,2572],{"emptyLinePlaceholder":217},[288,110457,110458,110461,110463],{"class":290,"line":10043},[288,110459,110460],{"class":298},"        reward ",[288,110462,344],{"class":294},[288,110464,110465],{"class":298}," compute_reward(get_observation(data))\n",[288,110467,110468,110471,110473],{"class":290,"line":10070},[288,110469,110470],{"class":298},"        total_reward ",[288,110472,9650],{"class":294},[288,110474,110475],{"class":298}," reward\n",[288,110477,110478],{"class":290,"line":10079},[288,110479,2572],{"emptyLinePlaceholder":217},[288,110481,110482,110484,110486,110488,110490,110492,110494],{"class":290,"line":10085},[288,110483,2669],{"class":294},[288,110485,31789],{"class":298},[288,110487,625],{"class":294},[288,110489,5927],{"class":347},[288,110491,101732],{"class":294},[288,110493,4265],{"class":347},[288,110495,3911],{"class":298},[288,110497,110498,110500,110502,110505,110508,110511,110514,110516,110519,110522,110524,110526,110528,110530,110533,110535],{"class":290,"line":10093},[288,110499,34823],{"class":347},[288,110501,299],{"class":298},[288,110503,110504],{"class":403},"\"step:\"",[288,110506,110507],{"class":298},", step, ",[288,110509,110510],{"class":403},"\"obs:\"",[288,110512,110513],{"class":298},", np.round(obs, ",[288,110515,370],{"class":347},[288,110517,110518],{"class":298},"), ",[288,110520,110521],{"class":403},"\"action:\"",[288,110523,12608],{"class":298},[288,110525,32191],{"class":347},[288,110527,299],{"class":298},[288,110529,338],{"class":347},[288,110531,110532],{"class":298},"(action), ",[288,110534,370],{"class":347},[288,110536,30670],{"class":298},[288,110538,110539],{"class":290,"line":10098},[288,110540,2572],{"emptyLinePlaceholder":217},[288,110542,110543,110545,110547,110550,110552,110554,110557,110559],{"class":290,"line":16777},[288,110544,31472],{"class":347},[288,110546,299],{"class":298},[288,110548,110549],{"class":403},"\"total_reward:\"",[288,110551,12608],{"class":298},[288,110553,32191],{"class":347},[288,110555,110556],{"class":298},"(total_reward, ",[288,110558,370],{"class":347},[288,110560,30670],{"class":298},[288,110562,110563,110565,110567,110570,110573,110575],{"class":290,"line":16783},[288,110564,31472],{"class":347},[288,110566,299],{"class":298},[288,110568,110569],{"class":403},"\"final obs:\"",[288,110571,110572],{"class":298},", np.round(get_observation(data), ",[288,110574,370],{"class":347},[288,110576,30670],{"class":298},[288,110578,110579],{"class":290,"line":16806},[288,110580,2572],{"emptyLinePlaceholder":217},[288,110582,110583],{"class":290,"line":16812},[288,110584,2572],{"emptyLinePlaceholder":217},[288,110586,110587,110589,110591,110593,110595],{"class":290,"line":16835},[288,110588,1703],{"class":294},[288,110590,31393],{"class":347},[288,110592,101732],{"class":294},[288,110594,101735],{"class":403},[288,110596,3911],{"class":298},[288,110598,110599],{"class":290,"line":16849},[288,110600,101742],{"class":298},[19,110602,103743],{},[280,110604,110606],{"className":23995,"code":110605,"language":23997,"meta":205,"style":205},"touch ch6_cartpole.py\n",[25,110607,110608],{"__ignoreMap":205},[288,110609,110610,110612],{"class":290,"line":291},[288,110611,101456],{"class":2135},[288,110613,110614],{"class":403}," ch6_cartpole.py\n",[19,110616,110617],{},"运行：",[280,110619,110621],{"className":23995,"code":110620,"language":23997,"meta":205,"style":205},"python ch6_cartpole.py\n",[25,110622,110623],{"__ignoreMap":205},[288,110624,110625,110627],{"class":290,"line":291},[288,110626,30553],{"class":2135},[288,110628,110614],{"class":403},[260,110630,101745],{"id":101745},[19,110632,110633],{},"构造观测：",[280,110635,110637],{"className":30551,"code":110636,"language":30553,"meta":205,"style":205},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[25,110638,110639,110647],{"__ignoreMap":205},[288,110640,110641,110643,110645],{"class":290,"line":291},[288,110642,32120],{"class":294},[288,110644,110167],{"class":2135},[288,110646,110170],{"class":298},[288,110648,110649,110651],{"class":290,"line":206},[288,110650,4262],{"class":294},[288,110652,110177],{"class":298},[19,110654,110655,110658,110659,110661,110662,110664],{},[25,110656,110657],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[25,110660,104203],{}," 2 维，",[25,110663,104533],{}," 2 维，所以 obs 是 4 维。",[19,110666,110667],{},"设置初始角度：",[280,110669,110671],{"className":30551,"code":110670,"language":30553,"meta":205,"style":205},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[25,110672,110673,110685],{"__ignoreMap":205},[288,110674,110675,110677,110679,110681,110683],{"class":290,"line":291},[288,110676,104872],{"class":298},[288,110678,516],{"class":347},[288,110680,4615],{"class":298},[288,110682,344],{"class":294},[288,110684,110313],{"class":347},[288,110686,110687],{"class":290,"line":206},[288,110688,104716],{"class":298},[19,110690,110691],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110693,110694],{},"简单反馈控制：",[280,110696,110698],{"className":30551,"code":110697,"language":30553,"meta":205,"style":205},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[25,110699,110700,110720],{"__ignoreMap":205},[288,110701,110702,110704,110706,110708,110710,110712,110714,110716,110718],{"class":290,"line":291},[288,110703,107615],{"class":298},[288,110705,344],{"class":294},[288,110707,110400],{"class":347},[288,110709,6691],{"class":294},[288,110711,109993],{"class":298},[288,110713,778],{"class":294},[288,110715,62040],{"class":347},[288,110717,6691],{"class":294},[288,110719,110413],{"class":298},[288,110721,110722,110724,110726,110728,110730,110732,110734,110736],{"class":290,"line":206},[288,110723,107615],{"class":298},[288,110725,344],{"class":294},[288,110727,107620],{"class":298},[288,110729,829],{"class":294},[288,110731,102576],{"class":347},[288,110733,12608],{"class":298},[288,110735,102576],{"class":347},[288,110737,305],{"class":298},[19,110739,110740],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110742,110743],{},"限制动作：",[280,110745,110747],{"className":30551,"code":110746,"language":30553,"meta":205,"style":205},"np.clip(action, -1.0, 1.0)\n",[25,110748,110749],{"__ignoreMap":205},[288,110750,110751,110754,110756,110758,110760,110762],{"class":290,"line":291},[288,110752,110753],{"class":298},"np.clip(action, ",[288,110755,829],{"class":294},[288,110757,102576],{"class":347},[288,110759,12608],{"class":298},[288,110761,102576],{"class":347},[288,110763,305],{"class":298},[19,110765,110766,110767,110770],{},"因为 XML 里 ",[25,110768,110769],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[260,110772,101881],{"id":101881},[280,110774,110775],{"className":30551,"code":110636,"language":30553,"meta":205,"style":205},[25,110776,110777,110785],{"__ignoreMap":205},[288,110778,110779,110781,110783],{"class":290,"line":291},[288,110780,32120],{"class":294},[288,110782,110167],{"class":2135},[288,110784,110170],{"class":298},[288,110786,110787,110789],{"class":290,"line":206},[288,110788,4262],{"class":294},[288,110790,110177],{"class":298},[19,110792,110793,110794,110797,110798,110801,110802,110805],{},"这段定义了一个函数，用来获取当前观测。",[25,110795,110796],{},"data.qpos.copy()"," 是位置数组副本，",[25,110799,110800],{},"data.qvel.copy()"," 是速度数组副本。",[25,110803,110804],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110807,110808],{},"在本章模型里：",[280,110810,110813],{"className":110811,"code":110812,"language":5360,"meta":205},[5358],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[25,110814,110812],{"__ignoreMap":205},[19,110816,110817],{},"所以返回的 obs 是：",[280,110819,110822],{"className":110820,"code":110821,"language":5360,"meta":205},[5358],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[25,110823,110821],{"__ignoreMap":205},[280,110825,110827],{"className":30551,"code":110826,"language":30553,"meta":205,"style":205},"def compute_reward(obs: np.ndarray) -> float:\n",[25,110828,110829],{"__ignoreMap":205},[288,110830,110831,110833,110835,110837,110839],{"class":290,"line":291},[288,110832,32120],{"class":294},[288,110834,110192],{"class":2135},[288,110836,110195],{"class":298},[288,110838,338],{"class":347},[288,110840,3911],{"class":298},[19,110842,110843,110844,110847],{},"这行定义奖励函数。输入是观测 ",[25,110845,110846],{},"obs","，输出是一个浮点数奖励。",[280,110849,110851],{"className":30551,"code":110850,"language":30553,"meta":205,"style":205},"cart_x = obs[0]\npole_angle = obs[1]\n",[25,110852,110853,110866],{"__ignoreMap":205},[288,110854,110855,110858,110860,110862,110864],{"class":290,"line":291},[288,110856,110857],{"class":298},"cart_x ",[288,110859,344],{"class":294},[288,110861,110209],{"class":298},[288,110863,490],{"class":347},[288,110865,33419],{"class":298},[288,110867,110868,110871,110873,110875,110877],{"class":290,"line":206},[288,110869,110870],{"class":298},"pole_angle ",[288,110872,344],{"class":294},[288,110874,110209],{"class":298},[288,110876,516],{"class":347},[288,110878,33419],{"class":298},[19,110880,110881,110882,110885,110886,110889],{},"数组索引从 0 开始。",[25,110883,110884],{},"obs[0]"," 是第一个元素，也就是小车位置。",[25,110887,110888],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[280,110891,110892],{"className":30551,"code":109961,"language":30553,"meta":205,"style":205},[25,110893,110894],{"__ignoreMap":205},[288,110895,110896,110898,110900,110902,110904,110906,110908,110910,110912,110914,110916,110918,110920,110922],{"class":290,"line":291},[288,110897,17219],{"class":294},[288,110899,109970],{"class":347},[288,110901,299],{"class":298},[288,110903,102576],{"class":347},[288,110905,52444],{"class":294},[288,110907,109979],{"class":347},[288,110909,6691],{"class":294},[288,110911,109984],{"class":298},[288,110913,752],{"class":294},[288,110915,109984],{"class":298},[288,110917,829],{"class":294},[288,110919,109993],{"class":298},[288,110921,752],{"class":294},[288,110923,109998],{"class":298},[19,110925,110926,110927,110930,110931,110934],{},"这行计算奖励。",[25,110928,110929],{},"cart_x * cart_x"," 是小车位置的平方，",[25,110932,110933],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[280,110936,110938],{"className":30551,"code":110937,"language":30553,"meta":205,"style":205},"data.qpos[1] = 0.1\n",[25,110939,110940],{"__ignoreMap":205},[288,110941,110942,110944,110946,110948,110950],{"class":290,"line":291},[288,110943,104872],{"class":298},[288,110945,516],{"class":347},[288,110947,4615],{"class":298},[288,110949,344],{"class":294},[288,110951,110313],{"class":347},[19,110953,110954,110955,110957,110958,110960],{},"手动设置杆子的初始角度。因为 ",[25,110956,105629],{}," 是小车位置，",[25,110959,105632],{}," 是杆子角度，所以这里改的是杆子。",[280,110962,110963],{"className":30551,"code":104716,"language":30553,"meta":205,"style":205},[25,110964,110965],{"__ignoreMap":205},[288,110966,110967],{"class":290,"line":291},[288,110968,104716],{"class":298},[19,110970,105675,110971,110973],{},[25,110972,104203],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[280,110975,110977],{"className":30551,"code":110976,"language":30553,"meta":205,"style":205},"total_reward = 0.0\n",[25,110978,110979],{"__ignoreMap":205},[288,110980,110981,110984,110986],{"class":290,"line":291},[288,110982,110983],{"class":298},"total_reward ",[288,110985,344],{"class":294},[288,110987,104934],{"class":347},[19,110989,110990],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[280,110992,110994],{"className":30551,"code":110993,"language":30553,"meta":205,"style":205},"for step in range(1000):\n",[25,110995,110996],{"__ignoreMap":205},[288,110997,110998,111000,111002,111004,111006,111008,111010],{"class":290,"line":291},[288,110999,3197],{"class":294},[288,111001,31789],{"class":298},[288,111003,26216],{"class":294},[288,111005,32616],{"class":347},[288,111007,299],{"class":298},[288,111009,6583],{"class":347},[288,111011,30959],{"class":298},[19,111013,111014,111015,111017],{},"循环 1000 步。",[25,111016,107307],{}," 是当前步数，从 0 到 999。",[280,111019,111021],{"className":30551,"code":111020,"language":30553,"meta":205,"style":205},"obs = get_observation(data)\n",[25,111022,111023],{"__ignoreMap":205},[288,111024,111025,111028,111030],{"class":290,"line":291},[288,111026,111027],{"class":298},"obs ",[288,111029,344],{"class":294},[288,111031,110360],{"class":298},[19,111033,111034,111035,28558],{},"读取当前状态，保存到 ",[25,111036,110846],{},[280,111038,111040],{"className":30551,"code":111039,"language":30553,"meta":205,"style":205},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[25,111041,111042,111054],{"__ignoreMap":205},[288,111043,111044,111046,111048,111050,111052],{"class":290,"line":291},[288,111045,110870],{"class":298},[288,111047,344],{"class":294},[288,111049,110209],{"class":298},[288,111051,516],{"class":347},[288,111053,33419],{"class":298},[288,111055,111056,111059,111061,111063,111065],{"class":290,"line":206},[288,111057,111058],{"class":298},"pole_angular_velocity ",[288,111060,344],{"class":294},[288,111062,110209],{"class":298},[288,111064,370],{"class":347},[288,111066,33419],{"class":298},[19,111068,111069,111070,111073,111074,28558],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[25,111071,111072],{},"obs[3]","？因为 obs 的顺序是 ",[25,111075,111076],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[280,111078,111080],{"className":30551,"code":111079,"language":30553,"meta":205,"style":205},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[25,111081,111082],{"__ignoreMap":205},[288,111083,111084,111086,111088,111090,111092,111094,111096,111098,111100],{"class":290,"line":291},[288,111085,107615],{"class":298},[288,111087,344],{"class":294},[288,111089,110400],{"class":347},[288,111091,6691],{"class":294},[288,111093,109993],{"class":298},[288,111095,778],{"class":294},[288,111097,62040],{"class":347},[288,111099,6691],{"class":294},[288,111101,110413],{"class":298},[19,111103,111104,111105,101191,111107,111109],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[25,111106,105433],{},[25,111108,35502],{}," 是人为设置的系数，不是固定公式。",[280,111111,111113],{"className":30551,"code":111112,"language":30553,"meta":205,"style":205},"action = np.clip(action, -1.0, 1.0)\n",[25,111114,111115],{"__ignoreMap":205},[288,111116,111117,111119,111121,111123,111125,111127,111129,111131],{"class":290,"line":291},[288,111118,107615],{"class":298},[288,111120,344],{"class":294},[288,111122,107620],{"class":298},[288,111124,829],{"class":294},[288,111126,102576],{"class":347},[288,111128,12608],{"class":298},[288,111130,102576],{"class":347},[288,111132,305],{"class":298},[19,111134,111135],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[280,111137,111138],{"className":30551,"code":109946,"language":30553,"meta":205,"style":205},[25,111139,111140],{"__ignoreMap":205},[288,111141,111142,111144,111146,111148,111150],{"class":290,"line":291},[288,111143,106044],{"class":298},[288,111145,490],{"class":347},[288,111147,4615],{"class":298},[288,111149,344],{"class":294},[288,111151,107643],{"class":298},[19,111153,111154],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[280,111156,111157],{"className":30551,"code":104678,"language":30553,"meta":205,"style":205},[25,111158,111159],{"__ignoreMap":205},[288,111160,111161],{"class":290,"line":291},[288,111162,104678],{"class":298},[19,111164,111165,111166,111168],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[25,111167,106299],{}," 计算小车和杆子的下一刻状态。",[280,111170,111172],{"className":30551,"code":111171,"language":30553,"meta":205,"style":205},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[25,111173,111174,111183],{"__ignoreMap":205},[288,111175,111176,111179,111181],{"class":290,"line":291},[288,111177,111178],{"class":298},"reward ",[288,111180,344],{"class":294},[288,111182,110465],{"class":298},[288,111184,111185,111187,111189],{"class":290,"line":206},[288,111186,110983],{"class":298},[288,111188,9650],{"class":294},[288,111190,110475],{"class":298},[19,111192,111193,111194,111196,111197,111200,111201,28558],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[25,111195,9650],{}," 是简写，",[25,111198,111199],{},"total_reward += reward"," 等价于 ",[25,111202,111203],{},"total_reward = total_reward + reward",[280,111205,111207],{"className":30551,"code":111206,"language":30553,"meta":205,"style":205},"if step % 100 == 0:\n",[25,111208,111209],{"__ignoreMap":205},[288,111210,111211,111213,111215,111217,111219,111221,111223],{"class":290,"line":291},[288,111212,1703],{"class":294},[288,111214,31789],{"class":298},[288,111216,625],{"class":294},[288,111218,5927],{"class":347},[288,111220,101732],{"class":294},[288,111222,4265],{"class":347},[288,111224,3911],{"class":298},[19,111226,111227,111229,111230,111233],{},[25,111228,625],{}," 是取余数。",[25,111231,111232],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[280,111235,111237],{"className":30551,"code":111236,"language":30553,"meta":205,"style":205},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[25,111238,111239],{"__ignoreMap":205},[288,111240,111241,111243,111245,111247,111249,111251,111253,111255,111257,111259,111261,111263,111265,111267,111269,111271],{"class":290,"line":291},[288,111242,30588],{"class":347},[288,111244,299],{"class":298},[288,111246,110504],{"class":403},[288,111248,110507],{"class":298},[288,111250,110510],{"class":403},[288,111252,110513],{"class":298},[288,111254,370],{"class":347},[288,111256,110518],{"class":298},[288,111258,110521],{"class":403},[288,111260,12608],{"class":298},[288,111262,32191],{"class":347},[288,111264,299],{"class":298},[288,111266,338],{"class":347},[288,111268,110532],{"class":298},[288,111270,370],{"class":347},[288,111272,30670],{"class":298},[19,111274,111275,111276,111279,111280,111283],{},"打印当前步数、观测和动作。",[25,111277,111278],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[25,111281,111282],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111285,102489],{"id":102488},[19,111287,111288],{},"观测向量:",[280,111290,111293],{"className":111291,"code":111292,"language":5360,"meta":205},[5358],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,111294,111292],{"__ignoreMap":205},[19,111296,111297],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111299,111300],{},"每隔 100 步会打印一次：",[280,111302,111305],{"className":111303,"code":111304,"language":5360,"meta":205},[5358],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[25,111306,111304],{"__ignoreMap":205},[19,111308,111309],{},"重点观察：",[243,111311,111312,111318,111323],{},[246,111313,111314,111317],{},[25,111315,111316],{},"pole_angle"," 是否越来越大。",[246,111319,111320,111322],{},[25,111321,109899],{}," 是否跑得太远。",[246,111324,111325,111326,82712,111328,28558],{},"action 是否经常被 clip 到 ",[25,111327,104088],{},[25,111329,516],{},[19,111331,111332],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111334,102521],{"id":102520},[243,111336,111337,111343,111346,111352,111362,111368,111371],{},[246,111338,111339,111340,28558],{},"把初始角度改为 ",[25,111341,111342],{},"data.qpos[1] = 0.3",[246,111344,111345],{},"重新运行，观察控制是否变差。",[246,111347,111348,111349,111351],{},"把 actuator ",[25,111350,107240],{}," 改小。",[246,111353,111354,111355,111358,111359,28558],{},"打印 ",[25,111356,111357],{},"model.nq, model.nv, model.nu","，应为 ",[25,111360,111361],{},"2 2 1",[246,111363,111364,111365,111367],{},"把 reward 里的 ",[25,111366,110933],{}," 系数改大，观察总奖励变化。",[246,111369,111370],{},"把控制器改成反号，观察杆子是否更容易倒。",[246,111372,111373],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111375,102626],{"id":102625},[260,111377,111378],{"id":111378},"杆子方向和预期不一致",[19,111380,102569,111381,111383,111384,111386],{},[25,111382,106412],{}," 和 capsule 的 ",[25,111385,103349],{},"，必要时用 viewer 可视化确认。",[260,111388,111389],{"id":111389},"控制器越控越倒",[19,111391,111392],{},"说明反馈符号可能反了，尝试:",[280,111394,111396],{"className":30551,"code":111395,"language":30553,"meta":205,"style":205},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[25,111397,111398],{"__ignoreMap":205},[288,111399,111400,111402,111404,111406,111408,111410,111412,111414,111416,111418],{"class":290,"line":291},[288,111401,107615],{"class":298},[288,111403,344],{"class":294},[288,111405,52444],{"class":294},[288,111407,105433],{"class":347},[288,111409,6691],{"class":294},[288,111411,109993],{"class":298},[288,111413,829],{"class":294},[288,111415,62040],{"class":347},[288,111417,6691],{"class":294},[288,111419,110413],{"class":298},[260,111421,111422],{"id":111422},"小车飞走",[19,111424,111425,111426,111428,111429,111432],{},"降低 ",[25,111427,107240],{}," 或缩小 ",[25,111430,111431],{},"action"," 的 clip 范围。",[260,111434,111436,111438],{"id":111435},"obs3-为什么是杆子角速度",[25,111437,111072],{}," 为什么是杆子角速度",[19,111440,111441],{},"因为这个模型里：",[280,111443,111446],{"className":111444,"code":111445,"language":5360,"meta":205},[5358],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[25,111447,111445],{"__ignoreMap":205},[19,111449,109920],{},[280,111451,111454],{"className":111452,"code":111453,"language":5360,"meta":205},[5358],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[25,111455,111453],{"__ignoreMap":205},[260,111457,111459],{"id":111458},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111461,111462],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111464,102780],{"id":102779},[19,111466,111467],{},"一个控制任务通常包含：",[243,111469,111470,111473,111481,111486,111489],{},[246,111471,111472],{},"模型：Cartpole 的 body、joint、actuator。",[246,111474,111475,111476,511,111478,111480],{},"观测：从 ",[25,111477,104203],{},[25,111479,104533],{}," 里取状态。",[246,111482,111483,111484,28558],{},"动作：写入 ",[25,111485,101249],{},[246,111487,111488],{},"奖励：根据任务目标打分。",[246,111490,111491],{},"循环：obs -> action -> step -> reward。",[19,111493,111494],{},"这就是后面 Gymnasium 环境的基本骨架。",[5299,111496,104459],{},{"title":205,"searchDepth":206,"depth":206,"links":111498},[111499,111500,111501,111506,111510,111511,111512,111520],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":111502},[111503,111504,111505],{"id":109873,"depth":1352,"text":109874},{"id":109938,"depth":1352,"text":109939},{"id":109954,"depth":1352,"text":109955},{"id":101425,"depth":206,"text":101426,"children":111507},[111508,111509],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":111513},[111514,111515,111516,111517,111519],{"id":111378,"depth":1352,"text":111378},{"id":111389,"depth":1352,"text":111389},{"id":111422,"depth":1352,"text":111422},{"id":111435,"depth":1352,"text":111518},"obs[3] 为什么是杆子角速度",{"id":111458,"depth":1352,"text":111459},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109609,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111527,"title":111528,"body":111529,"description":205,"extension":215,"meta":113543,"navigation":217,"path":113544,"seo":113545,"stem":113546,"__hash__":113547},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111530,"toc":113519},[111531,111534,111536,111539,111541,111558,111561,111564,111570,111573,111575,111577,111601,111603,111617,111619,111660,111662,111680,111682,111685,111691,111694,111722,111726,111732,111757,111760,111791,111798,111801,111804,111810,111813,111819,111822,111828,111832,111835,111860,111863,111865,112625,112627,112639,112641,112652,112654,112657,112674,112677,112679,112690,112693,112695,112741,112744,112757,112760,112842,112845,112847,112863,112873,112886,112889,112928,112938,112949,112959,112972,112975,113004,113007,113017,113020,113026,113043,113054,113056,113062,113079,113090,113111,113114,113126,113129,113150,113153,113161,113169,113186,113189,113258,113265,113273,113276,113289,113296,113298,113301,113307,113310,113313,113319,113325,113327,113367,113369,113375,113384,113387,113389,113409,113412,113415,113421,113425,113427,113454,113457,113460,113487,113493,113496,113499,113501,113504,113507,113513,113516],[10,111532,111528],{"id":111533},"_7控制任务reacher-机械臂到达目标",[14,111535,100820],{"id":100819},[19,111537,111538],{},"本章搭建一个二维两关节 reacher 任务。",[19,111540,104504],{},[243,111542,111543,111546,111549,111552,111555],{},[246,111544,111545],{},"两个 hinge joint",[246,111547,111548],{},"两个 motor actuator",[246,111550,111551],{},"site 作为末端点和目标点",[246,111553,111554],{},"根据末端和目标距离设计 reward",[246,111556,111557],{},"构造机械臂任务的基本形式",[19,111559,111560],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111562,111563],{},"Reacher 任务可以理解为：",[280,111565,111568],{"className":111566,"code":111567,"language":5360,"meta":205},[5358],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[25,111569,111567],{"__ignoreMap":205},[19,111571,111572],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111574,100943],{"id":100942},[19,111576,100946],{},[280,111578,111579],{"className":23995,"code":104561,"language":23997,"meta":205,"style":205},[25,111580,111581],{"__ignoreMap":205},[288,111582,111583,111585,111587,111589,111591,111593,111595,111597,111599],{"class":290,"line":291},[288,111584,24749],{"class":2135},[288,111586,26488],{"class":403},[288,111588,24007],{"class":403},[288,111590,26573],{"class":347},[288,111592,104576],{"class":403},[288,111594,100971],{"class":403},[288,111596,102674],{"class":403},[288,111598,100987],{"class":403},[288,111600,104585],{"class":403},[19,111602,102992],{},[280,111604,111605],{"className":23995,"code":101092,"language":23997,"meta":205,"style":205},[25,111606,111607],{"__ignoreMap":205},[288,111608,111609,111611,111613,111615],{"class":290,"line":291},[288,111610,24004],{"class":2135},[288,111612,24007],{"class":403},[288,111614,101103],{"class":403},[288,111616,101106],{"class":403},[19,111618,103009],{},[280,111620,111622],{"className":23995,"code":111621,"language":23997,"meta":205,"style":205},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[25,111623,111624,111641,111650],{"__ignoreMap":205},[288,111625,111626,111628,111630,111632,111635,111637,111639],{"class":290,"line":291},[288,111627,30503],{"class":2135},[288,111629,29349],{"class":403},[288,111631,25288],{"class":347},[288,111633,111634],{"class":403}," mujoco-reacher",[288,111636,101148],{"class":403},[288,111638,101151],{"class":347},[288,111640,101154],{"class":347},[288,111642,111643,111645,111647],{"class":290,"line":206},[288,111644,30503],{"class":2135},[288,111646,101161],{"class":403},[288,111648,111649],{"class":403}," mujoco-reacher\n",[288,111651,111652,111654,111656,111658],{"class":290,"line":1352},[288,111653,24004],{"class":2135},[288,111655,24007],{"class":403},[288,111657,101103],{"class":403},[288,111659,101106],{"class":403},[19,111661,101177],{},[243,111663,111664,111667,111670],{},[246,111665,111666],{},"本章使用低维状态，不使用图像输入。",[246,111668,111669],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[246,111671,111672,111673,511,111675,511,111677,111679],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[25,111674,104203],{},[25,111676,104533],{},[25,111678,103853],{}," 的方法一致。",[14,111681,101218],{"id":101217},[19,111683,111684],{},"Reacher 任务核心:",[280,111686,111689],{"className":111687,"code":111688,"language":5360,"meta":205},[5358],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[25,111690,111688],{"__ignoreMap":205},[19,111692,111693],{},"读取 site 世界坐标:",[280,111695,111697],{"className":30551,"code":111696,"language":30553,"meta":205,"style":205},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[25,111698,111699,111712],{"__ignoreMap":205},[288,111700,111701,111703,111705,111707,111710],{"class":290,"line":291},[288,111702,103807],{"class":298},[288,111704,344],{"class":294},[288,111706,103578],{"class":298},[288,111708,111709],{"class":403},"\"tip\"",[288,111711,305],{"class":298},[288,111713,111714,111717,111719],{"class":290,"line":206},[288,111715,111716],{"class":298},"tip_pos ",[288,111718,344],{"class":294},[288,111720,111721],{"class":298}," data.site_xpos[site_id]\n",[260,111723,111725],{"id":111724},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111727,111728,111729,111731],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[25,111730,104203],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[280,111733,111735],{"className":30551,"code":111734,"language":30553,"meta":205,"style":205},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[25,111736,111737,111747],{"__ignoreMap":205},[288,111738,111739,111742,111744],{"class":290,"line":291},[288,111740,111741],{"class":298},"tip ",[288,111743,344],{"class":294},[288,111745,111746],{"class":298}," data.site_xpos[tip_site_id]\n",[288,111748,111749,111752,111754],{"class":290,"line":206},[288,111750,111751],{"class":298},"target ",[288,111753,344],{"class":294},[288,111755,111756],{"class":298}," data.site_xpos[target_site_id]\n",[19,111758,111759],{},"这样 reward 就很容易写：",[280,111761,111763],{"className":30551,"code":111762,"language":30553,"meta":205,"style":205},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[25,111764,111765,111780],{"__ignoreMap":205},[288,111766,111767,111770,111772,111775,111777],{"class":290,"line":291},[288,111768,111769],{"class":298},"dist ",[288,111771,344],{"class":294},[288,111773,111774],{"class":298}," np.linalg.norm(tip ",[288,111776,829],{"class":294},[288,111778,111779],{"class":298}," target)\n",[288,111781,111782,111784,111786,111788],{"class":290,"line":206},[288,111783,111178],{"class":298},[288,111785,344],{"class":294},[288,111787,52444],{"class":294},[288,111789,111790],{"class":298},"dist\n",[19,111792,111793,111794,111797],{},"距离越小，",[25,111795,111796],{},"-dist"," 越接近 0，奖励越高。",[260,111799,111800],{"id":111800},"两关节机械臂的状态",[19,111802,111803],{},"这个模型有两个 hinge joint：",[280,111805,111808],{"className":111806,"code":111807,"language":5360,"meta":205},[5358],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[25,111809,111807],{"__ignoreMap":205},[19,111811,111812],{},"再加上末端和目标位置：",[280,111814,111817],{"className":111815,"code":111816,"language":5360,"meta":205},[5358],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[25,111818,111816],{"__ignoreMap":205},[19,111820,111821],{},"总维度：",[280,111823,111826],{"className":111824,"code":111825,"language":5360,"meta":205},[5358],"2 + 2 + 3 + 3 = 10\n",[25,111827,111825],{"__ignoreMap":205},[260,111829,111831],{"id":111830},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111833,111834],{},"本章把重力设为：",[280,111836,111838],{"className":53240,"code":111837,"language":53242,"meta":205,"style":205},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[25,111839,111840],{"__ignoreMap":205},[288,111841,111842,111844,111846,111848,111850,111852,111854,111856,111858],{"class":290,"line":291},[288,111843,1207],{"class":298},[288,111845,69339],{"class":51473},[288,111847,101367],{"class":2135},[288,111849,344],{"class":298},[288,111851,101372],{"class":403},[288,111853,101375],{"class":2135},[288,111855,344],{"class":298},[288,111857,103944],{"class":403},[288,111859,101317],{"class":298},[19,111861,111862],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111864,101426],{"id":101425},[280,111866,111868],{"className":30551,"code":111867,"language":30553,"meta":205,"style":205},"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",[25,111869,111870,111876,111886,111890,111894,111902,111907,111912,111916,111920,111925,111930,111934,111939,111944,111949,111953,111958,111963,111968,111973,111977,111981,111985,111989,111993,111998,112003,112007,112011,112015,112019,112023,112038,112047,112059,112082,112089,112093,112097,112107,112121,112135,112142,112146,112150,112164,112176,112188,112201,112216,112233,112237,112241,112253,112265,112273,112281,112285,112301,112306,112319,112332,112347,112351,112386,112418,112422,112426,112435,112439,112455,112465,112476,112492,112508,112524,112540,112544,112562,112582,112601,112605,112609,112621],{"__ignoreMap":205},[288,111871,111872,111874],{"class":290,"line":291},[288,111873,30565],{"class":294},[288,111875,101474],{"class":298},[288,111877,111878,111880,111882,111884],{"class":290,"line":206},[288,111879,30565],{"class":294},[288,111881,31553],{"class":298},[288,111883,31556],{"class":294},[288,111885,31559],{"class":298},[288,111887,111888],{"class":290,"line":1352},[288,111889,2572],{"emptyLinePlaceholder":217},[288,111891,111892],{"class":290,"line":1367},[288,111893,2572],{"emptyLinePlaceholder":217},[288,111895,111896,111898,111900],{"class":290,"line":1373},[288,111897,101487],{"class":347},[288,111899,13737],{"class":294},[288,111901,101492],{"class":403},[288,111903,111904],{"class":290,"line":1387},[288,111905,111906],{"class":403},"\u003Cmujoco model=\"two_link_reacher\">\n",[288,111908,111909],{"class":290,"line":1393},[288,111910,111911],{"class":403},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[288,111913,111914],{"class":290,"line":1484},[288,111915,2572],{"emptyLinePlaceholder":217},[288,111917,111918],{"class":290,"line":1490},[288,111919,101511],{"class":403},[288,111921,111922],{"class":290,"line":1502},[288,111923,111924],{"class":403},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[288,111926,111927],{"class":290,"line":1784},[288,111928,111929],{"class":403},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[288,111931,111932],{"class":290,"line":1789},[288,111933,2572],{"emptyLinePlaceholder":217},[288,111935,111936],{"class":290,"line":1795},[288,111937,111938],{"class":403},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[288,111940,111941],{"class":290,"line":1800},[288,111942,111943],{"class":403},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[288,111945,111946],{"class":290,"line":1814},[288,111947,111948],{"class":403},"      \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",[288,111950,111951],{"class":290,"line":1819},[288,111952,2572],{"emptyLinePlaceholder":217},[288,111954,111955],{"class":290,"line":1825},[288,111956,111957],{"class":403},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[288,111959,111960],{"class":290,"line":1846},[288,111961,111962],{"class":403},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[288,111964,111965],{"class":290,"line":1851},[288,111966,111967],{"class":403},"        \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",[288,111969,111970],{"class":290,"line":1865},[288,111971,111972],{"class":403},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[288,111974,111975],{"class":290,"line":1870},[288,111976,106611],{"class":403},[288,111978,111979],{"class":290,"line":1899},[288,111980,101540],{"class":403},[288,111982,111983],{"class":290,"line":1904},[288,111984,101545],{"class":403},[288,111986,111987],{"class":290,"line":1921},[288,111988,2572],{"emptyLinePlaceholder":217},[288,111990,111991],{"class":290,"line":1926},[288,111992,106628],{"class":403},[288,111994,111995],{"class":290,"line":1931},[288,111996,111997],{"class":403},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[288,111999,112000],{"class":290,"line":1936},[288,112001,112002],{"class":403},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[288,112004,112005],{"class":290,"line":1950},[288,112006,106638],{"class":403},[288,112008,112009],{"class":290,"line":1955},[288,112010,101550],{"class":403},[288,112012,112013],{"class":290,"line":2749},[288,112014,95871],{"class":403},[288,112016,112017],{"class":290,"line":2763},[288,112018,2572],{"emptyLinePlaceholder":217},[288,112020,112021],{"class":290,"line":2771},[288,112022,2572],{"emptyLinePlaceholder":217},[288,112024,112025,112027,112030,112033,112035],{"class":290,"line":2776},[288,112026,32120],{"class":294},[288,112028,112029],{"class":2135}," site_position",[288,112031,112032],{"class":298},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[288,112034,1472],{"class":347},[288,112036,112037],{"class":298},") -> np.ndarray:\n",[288,112039,112040,112042,112044],{"class":290,"line":2782},[288,112041,103573],{"class":298},[288,112043,344],{"class":294},[288,112045,112046],{"class":298}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[288,112048,112049,112051,112053,112055,112057],{"class":290,"line":2788},[288,112050,3273],{"class":294},[288,112052,103622],{"class":298},[288,112054,1207],{"class":294},[288,112056,4265],{"class":347},[288,112058,3911],{"class":298},[288,112060,112061,112063,112065,112067,112069,112072,112074,112076,112078,112080],{"class":290,"line":2793},[288,112062,103605],{"class":294},[288,112064,103608],{"class":347},[288,112066,299],{"class":298},[288,112068,351],{"class":294},[288,112070,112071],{"class":403},"\"site not found: ",[288,112073,1193],{"class":347},[288,112075,79983],{"class":298},[288,112077,1243],{"class":347},[288,112079,109],{"class":403},[288,112081,305],{"class":298},[288,112083,112084,112086],{"class":290,"line":8121},[288,112085,4262],{"class":294},[288,112087,112088],{"class":298}," data.site_xpos[site_id].copy()\n",[288,112090,112091],{"class":290,"line":8145},[288,112092,2572],{"emptyLinePlaceholder":217},[288,112094,112095],{"class":290,"line":8150},[288,112096,2572],{"emptyLinePlaceholder":217},[288,112098,112099,112101,112104],{"class":290,"line":8156},[288,112100,32120],{"class":294},[288,112102,112103],{"class":2135}," get_obs",[288,112105,112106],{"class":298},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[288,112108,112109,112112,112114,112117,112119],{"class":290,"line":8183},[288,112110,112111],{"class":298},"    tip ",[288,112113,344],{"class":294},[288,112115,112116],{"class":298}," site_position(model, data, ",[288,112118,111709],{"class":403},[288,112120,305],{"class":298},[288,112122,112123,112126,112128,112130,112133],{"class":290,"line":8188},[288,112124,112125],{"class":298},"    target ",[288,112127,344],{"class":294},[288,112129,112116],{"class":298},[288,112131,112132],{"class":403},"\"target\"",[288,112134,305],{"class":298},[288,112136,112137,112139],{"class":290,"line":8194},[288,112138,4262],{"class":294},[288,112140,112141],{"class":298}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[288,112143,112144],{"class":290,"line":8206},[288,112145,2572],{"emptyLinePlaceholder":217},[288,112147,112148],{"class":290,"line":8218},[288,112149,2572],{"emptyLinePlaceholder":217},[288,112151,112152,112154,112157,112160,112162],{"class":290,"line":8230},[288,112153,32120],{"class":294},[288,112155,112156],{"class":2135}," reward",[288,112158,112159],{"class":298},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[288,112161,338],{"class":347},[288,112163,3911],{"class":298},[288,112165,112166,112168,112170,112172,112174],{"class":290,"line":9889},[288,112167,112111],{"class":298},[288,112169,344],{"class":294},[288,112171,112116],{"class":298},[288,112173,111709],{"class":403},[288,112175,305],{"class":298},[288,112177,112178,112180,112182,112184,112186],{"class":290,"line":9914},[288,112179,112125],{"class":298},[288,112181,344],{"class":294},[288,112183,112116],{"class":298},[288,112185,112132],{"class":403},[288,112187,305],{"class":298},[288,112189,112190,112193,112195,112197,112199],{"class":290,"line":9937},[288,112191,112192],{"class":298},"    dist ",[288,112194,344],{"class":294},[288,112196,111774],{"class":298},[288,112198,829],{"class":294},[288,112200,111779],{"class":298},[288,112202,112203,112206,112208,112211,112213],{"class":290,"line":9961},[288,112204,112205],{"class":298},"    control_cost ",[288,112207,344],{"class":294},[288,112209,112210],{"class":347}," 0.01",[288,112212,6691],{"class":294},[288,112214,112215],{"class":298}," np.sum(np.square(data.ctrl))\n",[288,112217,112218,112220,112222,112224,112226,112228,112230],{"class":290,"line":9966},[288,112219,4262],{"class":294},[288,112221,109970],{"class":347},[288,112223,299],{"class":298},[288,112225,829],{"class":294},[288,112227,111769],{"class":298},[288,112229,829],{"class":294},[288,112231,112232],{"class":298}," control_cost)\n",[288,112234,112235],{"class":290,"line":9971},[288,112236,2572],{"emptyLinePlaceholder":217},[288,112238,112239],{"class":290,"line":9976},[288,112240,2572],{"emptyLinePlaceholder":217},[288,112242,112243,112245,112247,112249,112251],{"class":290,"line":9985},[288,112244,32120],{"class":294},[288,112246,2145],{"class":2135},[288,112248,101571],{"class":298},[288,112250,95859],{"class":347},[288,112252,3911],{"class":298},[288,112254,112255,112257,112259,112261,112263],{"class":290,"line":9990},[288,112256,101580],{"class":298},[288,112258,344],{"class":294},[288,112260,101585],{"class":298},[288,112262,101487],{"class":347},[288,112264,305],{"class":298},[288,112266,112267,112269,112271],{"class":290,"line":9996},[288,112268,101594],{"class":298},[288,112270,344],{"class":294},[288,112272,101599],{"class":298},[288,112274,112275,112277,112279],{"class":290,"line":10017},[288,112276,110326],{"class":298},[288,112278,344],{"class":294},[288,112280,104934],{"class":347},[288,112282,112283],{"class":290,"line":10023},[288,112284,2572],{"emptyLinePlaceholder":217},[288,112286,112287,112289,112291,112293,112295,112297,112299],{"class":290,"line":10037},[288,112288,3373],{"class":294},[288,112290,31789],{"class":298},[288,112292,26216],{"class":294},[288,112294,32616],{"class":347},[288,112296,299],{"class":298},[288,112298,65247],{"class":347},[288,112300,30959],{"class":298},[288,112302,112303],{"class":290,"line":10043},[288,112304,112305],{"class":298},"        mujoco.mj_forward(model, data)\n",[288,112307,112308,112311,112313,112315,112317],{"class":290,"line":10070},[288,112309,112310],{"class":298},"        tip ",[288,112312,344],{"class":294},[288,112314,112116],{"class":298},[288,112316,111709],{"class":403},[288,112318,305],{"class":298},[288,112320,112321,112324,112326,112328,112330],{"class":290,"line":10079},[288,112322,112323],{"class":298},"        target ",[288,112325,344],{"class":294},[288,112327,112116],{"class":298},[288,112329,112132],{"class":403},[288,112331,305],{"class":298},[288,112333,112334,112337,112339,112342,112344],{"class":290,"line":10085},[288,112335,112336],{"class":298},"        error ",[288,112338,344],{"class":294},[288,112340,112341],{"class":298}," target ",[288,112343,829],{"class":294},[288,112345,112346],{"class":298}," tip\n",[288,112348,112349],{"class":290,"line":10093},[288,112350,2572],{"emptyLinePlaceholder":217},[288,112352,112353,112355,112357,112359,112361,112364,112366,112368,112371,112373,112376,112378,112380,112382,112384],{"class":290,"line":10098},[288,112354,106790],{"class":298},[288,112356,490],{"class":347},[288,112358,4615],{"class":298},[288,112360,344],{"class":294},[288,112362,112363],{"class":298}," np.clip(",[288,112365,105433],{"class":347},[288,112367,6691],{"class":294},[288,112369,112370],{"class":298}," error[",[288,112372,376],{"class":347},[288,112374,112375],{"class":298},"], ",[288,112377,829],{"class":294},[288,112379,102576],{"class":347},[288,112381,12608],{"class":298},[288,112383,102576],{"class":347},[288,112385,305],{"class":298},[288,112387,112388,112390,112392,112394,112396,112398,112400,112402,112404,112406,112408,112410,112412,112414,112416],{"class":290,"line":16777},[288,112389,106790],{"class":298},[288,112391,516],{"class":347},[288,112393,4615],{"class":298},[288,112395,344],{"class":294},[288,112397,112363],{"class":298},[288,112399,105433],{"class":347},[288,112401,6691],{"class":294},[288,112403,112370],{"class":298},[288,112405,490],{"class":347},[288,112407,112375],{"class":298},[288,112409,829],{"class":294},[288,112411,102576],{"class":347},[288,112413,12608],{"class":298},[288,112415,102576],{"class":347},[288,112417,305],{"class":298},[288,112419,112420],{"class":290,"line":16783},[288,112421,2572],{"emptyLinePlaceholder":217},[288,112423,112424],{"class":290,"line":16806},[288,112425,101689],{"class":298},[288,112427,112428,112430,112432],{"class":290,"line":16812},[288,112429,110470],{"class":298},[288,112431,9650],{"class":294},[288,112433,112434],{"class":298}," reward(model, data)\n",[288,112436,112437],{"class":290,"line":16835},[288,112438,2572],{"emptyLinePlaceholder":217},[288,112440,112441,112443,112445,112447,112449,112451,112453],{"class":290,"line":16849},[288,112442,2669],{"class":294},[288,112444,31789],{"class":298},[288,112446,625],{"class":294},[288,112448,5927],{"class":347},[288,112450,101732],{"class":294},[288,112452,4265],{"class":347},[288,112454,3911],{"class":298},[288,112456,112457,112460,112462],{"class":290,"line":16869},[288,112458,112459],{"class":298},"            obs ",[288,112461,344],{"class":294},[288,112463,112464],{"class":298}," get_obs(model, data)\n",[288,112466,112467,112469,112471,112473],{"class":290,"line":16875},[288,112468,34823],{"class":347},[288,112470,299],{"class":298},[288,112472,110504],{"class":403},[288,112474,112475],{"class":298},", step)\n",[288,112477,112478,112480,112482,112485,112488,112490],{"class":290,"line":16886},[288,112479,34823],{"class":347},[288,112481,299],{"class":298},[288,112483,112484],{"class":403},"\"  tip:\"",[288,112486,112487],{"class":298},", np.round(tip, ",[288,112489,370],{"class":347},[288,112491,30670],{"class":298},[288,112493,112494,112496,112498,112501,112504,112506],{"class":290,"line":16909},[288,112495,34823],{"class":347},[288,112497,299],{"class":298},[288,112499,112500],{"class":403},"\"  target:\"",[288,112502,112503],{"class":298},", np.round(target, ",[288,112505,370],{"class":347},[288,112507,30670],{"class":298},[288,112509,112510,112512,112514,112517,112520,112522],{"class":290,"line":16931},[288,112511,34823],{"class":347},[288,112513,299],{"class":298},[288,112515,112516],{"class":403},"\"  ctrl:\"",[288,112518,112519],{"class":298},", np.round(data.ctrl.copy(), ",[288,112521,370],{"class":347},[288,112523,30670],{"class":298},[288,112525,112526,112528,112530,112533,112536,112538],{"class":290,"line":16936},[288,112527,34823],{"class":347},[288,112529,299],{"class":298},[288,112531,112532],{"class":403},"\"  obs_dim:\"",[288,112534,112535],{"class":298},", obs.shape[",[288,112537,490],{"class":347},[288,112539,4829],{"class":298},[288,112541,112542],{"class":290,"line":16942},[288,112543,2572],{"emptyLinePlaceholder":217},[288,112545,112546,112548,112550,112552,112554,112556,112558,112560],{"class":290,"line":16956},[288,112547,31472],{"class":347},[288,112549,299],{"class":298},[288,112551,110549],{"class":403},[288,112553,12608],{"class":298},[288,112555,32191],{"class":347},[288,112557,110556],{"class":298},[288,112559,370],{"class":347},[288,112561,30670],{"class":298},[288,112563,112564,112566,112568,112571,112574,112576,112578,112580],{"class":290,"line":16969},[288,112565,31472],{"class":347},[288,112567,299],{"class":298},[288,112569,112570],{"class":403},"\"final tip:\"",[288,112572,112573],{"class":298},", np.round(site_position(model, data, ",[288,112575,111709],{"class":403},[288,112577,110518],{"class":298},[288,112579,370],{"class":347},[288,112581,30670],{"class":298},[288,112583,112584,112586,112588,112591,112593,112595,112597,112599],{"class":290,"line":16974},[288,112585,31472],{"class":347},[288,112587,299],{"class":298},[288,112589,112590],{"class":403},"\"target:\"",[288,112592,112573],{"class":298},[288,112594,112132],{"class":403},[288,112596,110518],{"class":298},[288,112598,370],{"class":347},[288,112600,30670],{"class":298},[288,112602,112603],{"class":290,"line":16988},[288,112604,2572],{"emptyLinePlaceholder":217},[288,112606,112607],{"class":290,"line":16993},[288,112608,2572],{"emptyLinePlaceholder":217},[288,112610,112611,112613,112615,112617,112619],{"class":290,"line":16999},[288,112612,1703],{"class":294},[288,112614,31393],{"class":347},[288,112616,101732],{"class":294},[288,112618,101735],{"class":403},[288,112620,3911],{"class":298},[288,112622,112623],{"class":290,"line":17004},[288,112624,101742],{"class":298},[19,112626,103743],{},[280,112628,112630],{"className":23995,"code":112629,"language":23997,"meta":205,"style":205},"touch ch7_reacher.py\n",[25,112631,112632],{"__ignoreMap":205},[288,112633,112634,112636],{"class":290,"line":291},[288,112635,101456],{"class":2135},[288,112637,112638],{"class":403}," ch7_reacher.py\n",[19,112640,110617],{},[280,112642,112644],{"className":23995,"code":112643,"language":23997,"meta":205,"style":205},"python ch7_reacher.py\n",[25,112645,112646],{"__ignoreMap":205},[288,112647,112648,112650],{"class":290,"line":291},[288,112649,30553],{"class":2135},[288,112651,112638],{"class":403},[260,112653,101745],{"id":101745},[19,112655,112656],{},"读取 site 坐标：",[280,112658,112660],{"className":30551,"code":112659,"language":30553,"meta":205,"style":205},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[25,112661,112662],{"__ignoreMap":205},[288,112663,112664,112666,112668,112670,112672],{"class":290,"line":291},[288,112665,32120],{"class":294},[288,112667,112029],{"class":2135},[288,112669,112032],{"class":298},[288,112671,1472],{"class":347},[288,112673,112037],{"class":298},[19,112675,112676],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112678,110633],{},[280,112680,112682],{"className":30551,"code":112681,"language":30553,"meta":205,"style":205},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[25,112683,112684],{"__ignoreMap":205},[288,112685,112686,112688],{"class":290,"line":291},[288,112687,17219],{"class":294},[288,112689,112141],{"class":298},[19,112691,112692],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112694,109958],{},[280,112696,112698],{"className":30551,"code":112697,"language":30553,"meta":205,"style":205},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[25,112699,112700,112712,112725],{"__ignoreMap":205},[288,112701,112702,112704,112706,112708,112710],{"class":290,"line":291},[288,112703,111769],{"class":298},[288,112705,344],{"class":294},[288,112707,111774],{"class":298},[288,112709,829],{"class":294},[288,112711,111779],{"class":298},[288,112713,112714,112717,112719,112721,112723],{"class":290,"line":206},[288,112715,112716],{"class":298},"control_cost ",[288,112718,344],{"class":294},[288,112720,112210],{"class":347},[288,112722,6691],{"class":294},[288,112724,112215],{"class":298},[288,112726,112727,112729,112731,112733,112735,112737,112739],{"class":290,"line":1352},[288,112728,17219],{"class":294},[288,112730,109970],{"class":347},[288,112732,299],{"class":298},[288,112734,829],{"class":294},[288,112736,111769],{"class":298},[288,112738,829],{"class":294},[288,112740,112232],{"class":298},[19,112742,112743],{},"奖励由两部分组成：",[243,112745,112746,112751],{},[246,112747,112748,112750],{},[25,112749,111796],{},"：末端离目标越远，奖励越低。",[246,112752,112753,112756],{},[25,112754,112755],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112758,112759],{},"简单控制器：",[280,112761,112763],{"className":30551,"code":112762,"language":30553,"meta":205,"style":205},"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",[25,112764,112765,112778,112810],{"__ignoreMap":205},[288,112766,112767,112770,112772,112774,112776],{"class":290,"line":291},[288,112768,112769],{"class":298},"error ",[288,112771,344],{"class":294},[288,112773,112341],{"class":298},[288,112775,829],{"class":294},[288,112777,112346],{"class":298},[288,112779,112780,112782,112784,112786,112788,112790,112792,112794,112796,112798,112800,112802,112804,112806,112808],{"class":290,"line":206},[288,112781,106044],{"class":298},[288,112783,490],{"class":347},[288,112785,4615],{"class":298},[288,112787,344],{"class":294},[288,112789,112363],{"class":298},[288,112791,105433],{"class":347},[288,112793,6691],{"class":294},[288,112795,112370],{"class":298},[288,112797,376],{"class":347},[288,112799,112375],{"class":298},[288,112801,829],{"class":294},[288,112803,102576],{"class":347},[288,112805,12608],{"class":298},[288,112807,102576],{"class":347},[288,112809,305],{"class":298},[288,112811,112812,112814,112816,112818,112820,112822,112824,112826,112828,112830,112832,112834,112836,112838,112840],{"class":290,"line":1352},[288,112813,106044],{"class":298},[288,112815,516],{"class":347},[288,112817,4615],{"class":298},[288,112819,344],{"class":294},[288,112821,112363],{"class":298},[288,112823,105433],{"class":347},[288,112825,6691],{"class":294},[288,112827,112370],{"class":298},[288,112829,490],{"class":347},[288,112831,112375],{"class":298},[288,112833,829],{"class":294},[288,112835,102576],{"class":347},[288,112837,12608],{"class":298},[288,112839,102576],{"class":347},[288,112841,305],{"class":298},[19,112843,112844],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[260,112846,101881],{"id":101881},[280,112848,112849],{"className":30551,"code":112659,"language":30553,"meta":205,"style":205},[25,112850,112851],{"__ignoreMap":205},[288,112852,112853,112855,112857,112859,112861],{"class":290,"line":291},[288,112854,32120],{"class":294},[288,112856,112029],{"class":2135},[288,112858,112032],{"class":298},[288,112860,1472],{"class":347},[288,112862,112037],{"class":298},[19,112864,112865,112866,112868,112869,82712,112871,28558],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[25,112867,79983],{}," 是 site 的名字，比如 ",[25,112870,111709],{},[25,112872,112132],{},[280,112874,112876],{"className":30551,"code":112875,"language":30553,"meta":205,"style":205},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[25,112877,112878],{"__ignoreMap":205},[288,112879,112880,112882,112884],{"class":290,"line":291},[288,112881,103807],{"class":298},[288,112883,344],{"class":294},[288,112885,112046],{"class":298},[19,112887,112888],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[280,112890,112892],{"className":30551,"code":112891,"language":30553,"meta":205,"style":205},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[25,112893,112894,112906],{"__ignoreMap":205},[288,112895,112896,112898,112900,112902,112904],{"class":290,"line":291},[288,112897,1703],{"class":294},[288,112899,103622],{"class":298},[288,112901,1207],{"class":294},[288,112903,4265],{"class":347},[288,112905,3911],{"class":298},[288,112907,112908,112910,112912,112914,112916,112918,112920,112922,112924,112926],{"class":290,"line":206},[288,112909,104068],{"class":294},[288,112911,103608],{"class":347},[288,112913,299],{"class":298},[288,112915,351],{"class":294},[288,112917,112071],{"class":403},[288,112919,1193],{"class":347},[288,112921,79983],{"class":298},[288,112923,1243],{"class":347},[288,112925,109],{"class":403},[288,112927,305],{"class":298},[19,112929,112930,112931,112934,112935,112937],{},"如果 site 没找到，就主动报错。",[25,112932,112933],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[25,112936,79983],{}," 的值放进字符串里。",[280,112939,112941],{"className":30551,"code":112940,"language":30553,"meta":205,"style":205},"return data.site_xpos[site_id].copy()\n",[25,112942,112943],{"__ignoreMap":205},[288,112944,112945,112947],{"class":290,"line":291},[288,112946,17219],{"class":294},[288,112948,112088],{"class":298},[19,112950,112951,112952,112954,112955,112958],{},"返回这个 site 的世界坐标。",[25,112953,103853],{}," 里的每一行都是一个 site 的 ",[25,112956,112957],{},"(x, y, z)"," 坐标。",[280,112960,112962],{"className":30551,"code":112961,"language":30553,"meta":205,"style":205},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[25,112963,112964],{"__ignoreMap":205},[288,112965,112966,112968,112970],{"class":290,"line":291},[288,112967,32120],{"class":294},[288,112969,112103],{"class":2135},[288,112971,112106],{"class":298},[19,112973,112974],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[280,112976,112978],{"className":30551,"code":112977,"language":30553,"meta":205,"style":205},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[25,112979,112980,112992],{"__ignoreMap":205},[288,112981,112982,112984,112986,112988,112990],{"class":290,"line":291},[288,112983,111741],{"class":298},[288,112985,344],{"class":294},[288,112987,112116],{"class":298},[288,112989,111709],{"class":403},[288,112991,305],{"class":298},[288,112993,112994,112996,112998,113000,113002],{"class":290,"line":206},[288,112995,111751],{"class":298},[288,112997,344],{"class":294},[288,112999,112116],{"class":298},[288,113001,112132],{"class":403},[288,113003,305],{"class":298},[19,113005,113006],{},"分别读取末端点和目标点的世界坐标。",[280,113008,113009],{"className":30551,"code":112681,"language":30553,"meta":205,"style":205},[25,113010,113011],{"__ignoreMap":205},[288,113012,113013,113015],{"class":290,"line":291},[288,113014,17219],{"class":294},[288,113016,112141],{"class":298},[19,113018,113019],{},"把四部分拼成一个观测数组：",[280,113021,113024],{"className":113022,"code":113023,"language":5360,"meta":205},[5358],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[25,113025,113023],{"__ignoreMap":205},[280,113027,113029],{"className":30551,"code":113028,"language":30553,"meta":205,"style":205},"dist = np.linalg.norm(tip - target)\n",[25,113030,113031],{"__ignoreMap":205},[288,113032,113033,113035,113037,113039,113041],{"class":290,"line":291},[288,113034,111769],{"class":298},[288,113036,344],{"class":294},[288,113038,111774],{"class":298},[288,113040,829],{"class":294},[288,113042,111779],{"class":298},[19,113044,113045,113046,113049,113050,113053],{},"计算 tip 到 target 的距离。",[25,113047,113048],{},"tip - target"," 得到一个三维向量，",[25,113051,113052],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113055,14806],{},[280,113057,113060],{"className":113058,"code":113059,"language":5360,"meta":205},[5358],"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",[25,113061,113059],{"__ignoreMap":205},[280,113063,113065],{"className":30551,"code":113064,"language":30553,"meta":205,"style":205},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[25,113066,113067],{"__ignoreMap":205},[288,113068,113069,113071,113073,113075,113077],{"class":290,"line":291},[288,113070,112716],{"class":298},[288,113072,344],{"class":294},[288,113074,112210],{"class":347},[288,113076,6691],{"class":294},[288,113078,112215],{"class":298},[19,113080,113081,113082,113085,113086,113089],{},"计算动作惩罚。",[25,113083,113084],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[25,113087,113088],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[280,113091,113093],{"className":30551,"code":113092,"language":30553,"meta":205,"style":205},"return float(-dist - control_cost)\n",[25,113094,113095],{"__ignoreMap":205},[288,113096,113097,113099,113101,113103,113105,113107,113109],{"class":290,"line":291},[288,113098,17219],{"class":294},[288,113100,109970],{"class":347},[288,113102,299],{"class":298},[288,113104,829],{"class":294},[288,113106,111769],{"class":298},[288,113108,829],{"class":294},[288,113110,112232],{"class":298},[19,113112,113113],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[280,113115,113116],{"className":30551,"code":110976,"language":30553,"meta":205,"style":205},[25,113117,113118],{"__ignoreMap":205},[288,113119,113120,113122,113124],{"class":290,"line":291},[288,113121,110983],{"class":298},[288,113123,344],{"class":294},[288,113125,104934],{"class":347},[19,113127,113128],{},"累计奖励变量，记录整个运行过程的总分。",[280,113130,113132],{"className":30551,"code":113131,"language":30553,"meta":205,"style":205},"for step in range(500):\n",[25,113133,113134],{"__ignoreMap":205},[288,113135,113136,113138,113140,113142,113144,113146,113148],{"class":290,"line":291},[288,113137,3197],{"class":294},[288,113139,31789],{"class":298},[288,113141,26216],{"class":294},[288,113143,32616],{"class":347},[288,113145,299],{"class":298},[288,113147,65247],{"class":347},[288,113149,30959],{"class":298},[19,113151,113152],{},"运行 500 个控制步。",[280,113154,113155],{"className":30551,"code":104716,"language":30553,"meta":205,"style":205},[25,113156,113157],{"__ignoreMap":205},[288,113158,113159],{"class":290,"line":291},[288,113160,104716],{"class":298},[19,113162,113163,113164,101191,113166,113168],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[25,113165,103404],{},[25,113167,103407],{}," 是当前状态下的坐标。",[280,113170,113172],{"className":30551,"code":113171,"language":30553,"meta":205,"style":205},"error = target - tip\n",[25,113173,113174],{"__ignoreMap":205},[288,113175,113176,113178,113180,113182,113184],{"class":290,"line":291},[288,113177,112769],{"class":298},[288,113179,344],{"class":294},[288,113181,112341],{"class":298},[288,113183,829],{"class":294},[288,113185,112346],{"class":298},[19,113187,113188],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[280,113190,113192],{"className":30551,"code":113191,"language":30553,"meta":205,"style":205},"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",[25,113193,113194,113226],{"__ignoreMap":205},[288,113195,113196,113198,113200,113202,113204,113206,113208,113210,113212,113214,113216,113218,113220,113222,113224],{"class":290,"line":291},[288,113197,106044],{"class":298},[288,113199,490],{"class":347},[288,113201,4615],{"class":298},[288,113203,344],{"class":294},[288,113205,112363],{"class":298},[288,113207,105433],{"class":347},[288,113209,6691],{"class":294},[288,113211,112370],{"class":298},[288,113213,376],{"class":347},[288,113215,112375],{"class":298},[288,113217,829],{"class":294},[288,113219,102576],{"class":347},[288,113221,12608],{"class":298},[288,113223,102576],{"class":347},[288,113225,305],{"class":298},[288,113227,113228,113230,113232,113234,113236,113238,113240,113242,113244,113246,113248,113250,113252,113254,113256],{"class":290,"line":206},[288,113229,106044],{"class":298},[288,113231,516],{"class":347},[288,113233,4615],{"class":298},[288,113235,344],{"class":294},[288,113237,112363],{"class":298},[288,113239,105433],{"class":347},[288,113241,6691],{"class":294},[288,113243,112370],{"class":298},[288,113245,490],{"class":347},[288,113247,112375],{"class":298},[288,113249,829],{"class":294},[288,113251,102576],{"class":347},[288,113253,12608],{"class":298},[288,113255,102576],{"class":347},[288,113257,305],{"class":298},[19,113259,113260,113261,113264],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[25,113262,113263],{},"error -> ctrl -> step"," 的流程。",[280,113266,113267],{"className":30551,"code":104678,"language":30553,"meta":205,"style":205},[25,113268,113269],{"__ignoreMap":205},[288,113270,113271],{"class":290,"line":291},[288,113272,104678],{"class":298},[19,113274,113275],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[280,113277,113279],{"className":30551,"code":113278,"language":30553,"meta":205,"style":205},"obs = get_obs(model, data)\n",[25,113280,113281],{"__ignoreMap":205},[288,113282,113283,113285,113287],{"class":290,"line":291},[288,113284,111027],{"class":298},[288,113286,344],{"class":294},[288,113288,112464],{"class":298},[19,113290,113291,113292,113295],{},"读取最新观测。后面打印 ",[25,113293,113294],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113297,102489],{"id":102488},[19,113299,113300],{},"观测维度为:",[280,113302,113305],{"className":113303,"code":113304,"language":5360,"meta":205},[5358],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[25,113306,113304],{"__ignoreMap":205},[19,113308,113309],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113311,113312],{},"程序每 100 步打印：",[280,113314,113317],{"className":113315,"code":113316,"language":5360,"meta":205},[5358],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[25,113318,113316],{"__ignoreMap":205},[19,113320,113321,113322,113324],{},"如果控制有效，你应该看到最终 ",[25,113323,103404],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113326,102521],{"id":102520},[243,113328,113329,113332,113335,113341,113347,113354,113364],{},[246,113330,113331],{},"修改目标点位置。",[246,113333,113334],{},"重新运行，观察最终 tip 是否变化。",[246,113336,113337,113338,113340],{},"把 gravity 改成 ",[25,113339,102762],{},"，观察控制是否变差。",[246,113342,111354,113343,111358,113345,28558],{},[25,113344,102331],{},[25,113346,376],{},[246,113348,102584,113349,102587,113351,113353],{},[25,113350,110769],{},[25,113352,107480],{},"，观察机械臂是否更难移动。",[246,113355,102584,113356,82703,113358,102587,113360,113363],{},[25,113357,103407],{},[25,113359,104319],{},[25,113361,113362],{},"0.2 0 0.6","，观察 reward 和 final tip。",[246,113365,113366],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113368,102626],{"id":102625},[260,113370,113372],{"id":113371},"site-not-found",[25,113373,113374],{},"site not found",[19,113376,113377,113378,101191,113381,28558],{},"检查 XML 中是否有 ",[25,113379,113380],{},"site name=\"tip\"",[25,113382,113383],{},"site name=\"target\"",[260,113385,113386],{"id":113386},"机械臂完全不动",[19,113388,102696],{},[243,113390,113391,113396,113399,113404],{},[246,113392,113393,113395],{},[25,113394,102331],{}," 是否为 2",[246,113397,113398],{},"actuator 是否引用正确 joint",[246,113400,113401,113403],{},[25,113402,101249],{}," 是否被赋值",[246,113405,113406,113407],{},"是否执行了 ",[25,113408,100858],{},[260,113410,113411],{"id":113411},"控制效果不好",[19,113413,113414],{},"正常。本章重点不是控制器最优，而是任务结构:",[280,113416,113419],{"className":113417,"code":113418,"language":5360,"meta":205},[5358],"obs → action → mj_step → reward → next_obs\n",[25,113420,113418],{"__ignoreMap":205},[260,113422,113424],{"id":113423},"tip-坐标不变化","tip 坐标不变化",[19,113426,102748],{},[243,113428,113429,113434,113442,113451],{},[246,113430,113431,113432,28558],{},"是否每步调用了 ",[25,113433,100858],{},[246,113435,113436,113437,101191,113439,28558],{},"是否写入了 ",[25,113438,106299],{},[25,113440,113441],{},"data.ctrl[1]",[246,113443,113444,113445,511,113448,28558],{},"actuator 是否正确引用 ",[25,113446,113447],{},"joint1",[25,113449,113450],{},"joint2",[246,113452,113453],{},"控制输入是否太小。",[260,113455,113456],{"id":113456},"目标点不会动",[19,113458,113459],{},"本章的 target 是固定 site：",[280,113461,113463],{"className":53240,"code":113462,"language":53242,"meta":205,"style":205},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[25,113464,113465],{"__ignoreMap":205},[288,113466,113467,113469,113471,113473,113475,113477,113479,113481,113484],{"class":290,"line":291},[288,113468,1207],{"class":298},[288,113470,103383],{"class":51473},[288,113472,15093],{"class":2135},[288,113474,344],{"class":298},[288,113476,112132],{"class":403},[288,113478,101279],{"class":2135},[288,113480,344],{"class":298},[288,113482,113483],{"class":403},"\"0.5 0 0.4\"",[288,113485,113486],{"class":298}," ...\u002F>\n",[19,113488,113489,113490,113492],{},"它直接挂在 ",[25,113491,102014],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[260,113494,113495],{"id":113495},"机械臂不像真实机械臂",[19,113497,113498],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113500,102780],{"id":102779},[19,113502,113503],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113505,113506],{},"核心公式：",[280,113508,113511],{"className":113509,"code":113510,"language":5360,"meta":205},[5358],"distance = ||tip - target||\nreward = -distance - action_cost\n",[25,113512,113510],{"__ignoreMap":205},[19,113514,113515],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5299,113517,113518],{},"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":205,"searchDepth":206,"depth":206,"links":113520},[113521,113522,113523,113528,113532,113533,113534,113542],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":113524},[113525,113526,113527],{"id":111724,"depth":1352,"text":111725},{"id":111800,"depth":1352,"text":111800},{"id":111830,"depth":1352,"text":111831},{"id":101425,"depth":206,"text":101426,"children":113529},[113530,113531],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":113535},[113536,113537,113538,113539,113540,113541],{"id":113371,"depth":1352,"text":113374},{"id":113386,"depth":1352,"text":113386},{"id":113411,"depth":1352,"text":113411},{"id":113423,"depth":1352,"text":113424},{"id":113456,"depth":1352,"text":113456},{"id":113495,"depth":1352,"text":113495},{"id":102779,"depth":206,"text":102780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111528,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113549,"title":113550,"body":113551,"description":205,"extension":215,"meta":117013,"navigation":217,"path":117014,"seo":117015,"stem":117016,"__hash__":117017},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113552,"toc":116984},[113553,113556,113558,113561,113564,113589,113592,113598,113601,113607,113609,113611,113635,113637,113655,113657,113700,113702,113729,113731,113734,113786,113789,113795,113804,113807,113845,113848,113887,113890,113898,113905,113908,113914,113916,113970,113977,114022,114025,114029,114045,114055,114057,115318,115320,115332,115334,115345,115347,115350,115371,115374,115377,115410,115416,115419,115452,115455,115458,115499,115504,115518,115521,115534,115539,115562,115564,115579,115589,115604,115611,115631,115646,115664,115667,115684,115692,115708,115714,115746,115759,115791,115801,115836,115850,115896,115910,115952,115963,115976,115982,116015,116018,116045,116055,116095,116105,116122,116129,116147,116150,116191,116204,116219,116222,116245,116248,116260,116263,116282,116287,116308,116311,116326,116329,116363,116375,116390,116393,116418,116421,116440,116443,116475,116478,116502,116508,116538,116545,116558,116561,116563,116565,116571,116574,116577,116589,116592,116594,116648,116650,116654,116660,116669,116672,116679,116681,116704,116707,116711,116713,116731,116737,116739,116772,116775,116781,116785,116788,116808,116813,116817,116824,116844,116849,116853,116856,116876,116879,116965,116969,116972,116978,116981],[10,113554,113550],{"id":113555},"_8gymnasium-风格强化学习接口基础",[14,113557,100820],{"id":100819},[19,113559,113560],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113562,113563],{},"你将实现:",[280,113565,113567],{"className":30551,"code":113566,"language":30553,"meta":205,"style":205},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[25,113568,113569,113579],{"__ignoreMap":205},[288,113570,113571,113574,113576],{"class":290,"line":291},[288,113572,113573],{"class":298},"obs, info ",[288,113575,344],{"class":294},[288,113577,113578],{"class":298}," env.reset()\n",[288,113580,113581,113584,113586],{"class":290,"line":206},[288,113582,113583],{"class":298},"obs, reward, terminated, truncated, info ",[288,113585,344],{"class":294},[288,113587,113588],{"class":298}," env.step(action)\n",[19,113590,113591],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113593,113594,113595,113597],{},"前面章节的代码都是“脚本式”的：在 ",[25,113596,102468],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113599,113600],{},"可以先记住 Gymnasium 环境的核心交互：",[280,113602,113605],{"className":113603,"code":113604,"language":5360,"meta":205},[5358],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[25,113606,113604],{"__ignoreMap":205},[14,113608,100943],{"id":100942},[19,113610,100946],{},[280,113612,113613],{"className":23995,"code":104561,"language":23997,"meta":205,"style":205},[25,113614,113615],{"__ignoreMap":205},[288,113616,113617,113619,113621,113623,113625,113627,113629,113631,113633],{"class":290,"line":291},[288,113618,24749],{"class":2135},[288,113620,26488],{"class":403},[288,113622,24007],{"class":403},[288,113624,26573],{"class":347},[288,113626,104576],{"class":403},[288,113628,100971],{"class":403},[288,113630,102674],{"class":403},[288,113632,100987],{"class":403},[288,113634,104585],{"class":403},[19,113636,102992],{},[280,113638,113640],{"className":23995,"code":113639,"language":23997,"meta":205,"style":205},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113641,113642],{"__ignoreMap":205},[288,113643,113644,113646,113648,113650,113652],{"class":290,"line":291},[288,113645,24004],{"class":2135},[288,113647,24007],{"class":403},[288,113649,101103],{"class":403},[288,113651,107884],{"class":403},[288,113653,113654],{"class":403}," gymnasium\n",[19,113656,103009],{},[280,113658,113660],{"className":23995,"code":113659,"language":23997,"meta":205,"style":205},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113661,113662,113679,113688],{"__ignoreMap":205},[288,113663,113664,113666,113668,113670,113673,113675,113677],{"class":290,"line":291},[288,113665,30503],{"class":2135},[288,113667,29349],{"class":403},[288,113669,25288],{"class":347},[288,113671,113672],{"class":403}," mujoco-gym-api",[288,113674,101148],{"class":403},[288,113676,101151],{"class":347},[288,113678,101154],{"class":347},[288,113680,113681,113683,113685],{"class":290,"line":206},[288,113682,30503],{"class":2135},[288,113684,101161],{"class":403},[288,113686,113687],{"class":403}," mujoco-gym-api\n",[288,113689,113690,113692,113694,113696,113698],{"class":290,"line":1352},[288,113691,24004],{"class":2135},[288,113693,24007],{"class":403},[288,113695,101103],{"class":403},[288,113697,107884],{"class":403},[288,113699,113654],{"class":403},[19,113701,101177],{},[243,113703,113704,113714,113717,113723],{},[246,113705,113706,113707,113710,113711,28558],{},"本章使用 ",[25,113708,113709],{},"gymnasium","，不是旧版 ",[25,113712,113713],{},"gym",[246,113715,113716],{},"Gymnasium API 与旧 Gym API 有差异。",[246,113718,113719,113720,28558],{},"旧 Gym 常见返回值是 4 个: ",[25,113721,113722],{},"obs, reward, done, info",[246,113724,113725,113726,28558],{},"Gymnasium 返回值是 5 个: ",[25,113727,113728],{},"obs, reward, terminated, truncated, info",[14,113730,101218],{"id":101217},[19,113732,113733],{},"强化学习环境接口包含:",[436,113735,113736,113745],{},[439,113737,113738],{},[442,113739,113740,113743],{},[445,113741,113742],{"align":23909},"方法",[445,113744,102869],{"align":23909},[483,113746,113747,113757,113767,113777],{},[442,113748,113749,113754],{},[488,113750,113751],{"align":23909},[25,113752,113753],{},"reset()",[488,113755,113756],{"align":23909},"重置环境",[442,113758,113759,113764],{},[488,113760,113761],{"align":23909},[25,113762,113763],{},"step(action)",[488,113765,113766],{"align":23909},"执行动作",[442,113768,113769,113774],{},[488,113770,113771],{"align":23909},[25,113772,113773],{},"observation_space",[488,113775,113776],{"align":23909},"观测空间",[442,113778,113779,113784],{},[488,113780,113781],{"align":23909},[25,113782,113783],{},"action_space",[488,113785,23827],{"align":23909},[19,113787,113788],{},"一个最小环境需要完成:",[280,113790,113793],{"className":113791,"code":113792,"language":5360,"meta":205},[5358],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[25,113794,113792],{"__ignoreMap":205},[260,113796,113798,101191,113801,104811],{"id":113797},"terminated-和-truncated-的区别",[25,113799,113800],{},"terminated",[25,113802,113803],{},"truncated",[19,113805,113806],{},"Gymnasium 把“结束”拆成两个概念：",[436,113808,113809,113819],{},[439,113810,113811],{},[442,113812,113813,113815,113817],{},[445,113814,104747],{"align":23909},[445,113816,100873],{"align":23909},[445,113818,21360],{"align":23909},[483,113820,113821,113833],{},[442,113822,113823,113827,113830],{},[488,113824,113825],{"align":23909},[25,113826,113800],{},[488,113828,113829],{"align":23909},"任务自然结束",[488,113831,113832],{"align":23909},"机械臂到达目标、机器人摔倒",[442,113834,113835,113839,113842],{},[488,113836,113837],{"align":23909},[25,113838,113803],{},[488,113840,113841],{"align":23909},"因外部限制截断",[488,113843,113844],{"align":23909},"达到最大步数、时间限制",[19,113846,113847],{},"本章中：",[280,113849,113851],{"className":30551,"code":113850,"language":30553,"meta":205,"style":205},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[25,113852,113853,113868],{"__ignoreMap":205},[288,113854,113855,113858,113860,113863,113865],{"class":290,"line":291},[288,113856,113857],{"class":298},"terminated ",[288,113859,344],{"class":294},[288,113861,113862],{"class":298}," dist ",[288,113864,1207],{"class":294},[288,113866,113867],{"class":347}," 0.05\n",[288,113869,113870,113873,113875,113877,113880,113882,113884],{"class":290,"line":206},[288,113871,113872],{"class":298},"truncated ",[288,113874,344],{"class":294},[288,113876,39046],{"class":347},[288,113878,113879],{"class":298},".steps ",[288,113881,1882],{"class":294},[288,113883,39046],{"class":347},[288,113885,113886],{"class":298},".max_steps\n",[19,113888,113889],{},"也就是：",[243,113891,113892,113895],{},[246,113893,113894],{},"末端距离目标小于 0.05，任务成功结束。",[246,113896,113897],{},"步数超过上限，episode 被截断。",[260,113899,113901,101191,113903],{"id":113900},"observation_space-和-action_space",[25,113902,113773],{},[25,113904,113783],{},[19,113906,113907],{},"这两个对象告诉算法：",[280,113909,113912],{"className":113910,"code":113911,"language":5360,"meta":205},[5358],"观测长什么样\n动作允许多大\n",[25,113913,113911],{"__ignoreMap":205},[19,113915,14806],{},[280,113917,113919],{"className":30551,"code":113918,"language":30553,"meta":205,"style":205},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[25,113920,113921],{"__ignoreMap":205},[288,113922,113923,113925,113928,113930,113933,113936,113939,113941,113943,113946,113948,113950,113952,113954,113956,113958,113960,113963,113965,113967],{"class":290,"line":291},[288,113924,30996],{"class":347},[288,113926,113927],{"class":298},".action_space ",[288,113929,344],{"class":294},[288,113931,113932],{"class":298}," spaces.Box(",[288,113934,113935],{"class":5389},"low",[288,113937,113938],{"class":294},"=-",[288,113940,102576],{"class":347},[288,113942,12608],{"class":298},[288,113944,113945],{"class":5389},"high",[288,113947,344],{"class":294},[288,113949,102576],{"class":347},[288,113951,12608],{"class":298},[288,113953,96136],{"class":5389},[288,113955,344],{"class":294},[288,113957,299],{"class":298},[288,113959,376],{"class":347},[288,113961,113962],{"class":298},",), ",[288,113964,93673],{"class":5389},[288,113966,344],{"class":294},[288,113968,113969],{"class":298},"np.float32)\n",[19,113971,113972,113973,113976],{},"表示动作是 2 维数组，每个值都在 ",[25,113974,113975],{},"[-1, 1]"," 范围内。",[280,113978,113980],{"className":30551,"code":113979,"language":30553,"meta":205,"style":205},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[25,113981,113982],{"__ignoreMap":205},[288,113983,113984,113986,113989,113991,113993,113995,113997,114000,114002,114004,114006,114008,114010,114012,114014,114016,114018,114020],{"class":290,"line":291},[288,113985,30996],{"class":347},[288,113987,113988],{"class":298},".observation_space ",[288,113990,344],{"class":294},[288,113992,113932],{"class":298},[288,113994,113935],{"class":5389},[288,113996,113938],{"class":294},[288,113998,113999],{"class":298},"np.inf, ",[288,114001,113945],{"class":5389},[288,114003,344],{"class":294},[288,114005,113999],{"class":298},[288,114007,96136],{"class":5389},[288,114009,344],{"class":294},[288,114011,299],{"class":298},[288,114013,743],{"class":347},[288,114015,113962],{"class":298},[288,114017,93673],{"class":5389},[288,114019,344],{"class":294},[288,114021,113969],{"class":298},[19,114023,114024],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[260,114026,114028],{"id":114027},"frame_skip-是什么","frame_skip 是什么",[280,114030,114032],{"className":30551,"code":114031,"language":30553,"meta":205,"style":205},"self.frame_skip = 5\n",[25,114033,114034],{"__ignoreMap":205},[288,114035,114036,114038,114041,114043],{"class":290,"line":291},[288,114037,30996],{"class":347},[288,114039,114040],{"class":298},".frame_skip ",[288,114042,344],{"class":294},[288,114044,54600],{"class":347},[19,114046,114047,114048,114051,114052,114054],{},"表示外部调用一次 ",[25,114049,114050],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[25,114053,101388],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114056,101426],{"id":101425},[280,114058,114060],{"className":30551,"code":114059,"language":30553,"meta":205,"style":205},"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",[25,114061,114062,114074,114080,114090,114101,114105,114109,114117,114122,114126,114130,114134,114138,114142,114146,114150,114155,114159,114163,114167,114172,114176,114180,114184,114188,114192,114196,114200,114204,114208,114212,114216,114220,114224,114242,114257,114261,114274,114284,114299,114316,114320,114341,114360,114385,114399,114403,114413,114425,114435,114439,114481,114519,114523,114533,114549,114564,114583,114590,114594,114607,114622,114637,114650,114669,114685,114689,114730,114745,114760,114764,114803,114814,114827,114831,114841,114850,114854,114864,114879,114897,114901,114912,114929,114942,114946,114956,114960,114971,114982,114986,115000,115014,115030,115034,115047,115064,115079,115086,115090,115094,115106,115116,115134,115146,115158,115162,115170,115186,115195,115204,115212,115254,115267,115272,115276,115294,115298,115302,115314],{"__ignoreMap":205},[288,114063,114064,114066,114069,114071],{"class":290,"line":291},[288,114065,30565],{"class":294},[288,114067,114068],{"class":298}," gymnasium ",[288,114070,31556],{"class":294},[288,114072,114073],{"class":298}," gym\n",[288,114075,114076,114078],{"class":290,"line":206},[288,114077,30565],{"class":294},[288,114079,101474],{"class":298},[288,114081,114082,114084,114086,114088],{"class":290,"line":1352},[288,114083,30565],{"class":294},[288,114085,31553],{"class":298},[288,114087,31556],{"class":294},[288,114089,31559],{"class":298},[288,114091,114092,114094,114096,114098],{"class":290,"line":1367},[288,114093,30910],{"class":294},[288,114095,114068],{"class":298},[288,114097,30565],{"class":294},[288,114099,114100],{"class":298}," spaces\n",[288,114102,114103],{"class":290,"line":1373},[288,114104,2572],{"emptyLinePlaceholder":217},[288,114106,114107],{"class":290,"line":1387},[288,114108,2572],{"emptyLinePlaceholder":217},[288,114110,114111,114113,114115],{"class":290,"line":1393},[288,114112,101487],{"class":347},[288,114114,13737],{"class":294},[288,114116,101492],{"class":403},[288,114118,114119],{"class":290,"line":1484},[288,114120,114121],{"class":403},"\u003Cmujoco model=\"gym_reacher\">\n",[288,114123,114124],{"class":290,"line":1490},[288,114125,111911],{"class":403},[288,114127,114128],{"class":290,"line":1502},[288,114129,2572],{"emptyLinePlaceholder":217},[288,114131,114132],{"class":290,"line":1784},[288,114133,101511],{"class":403},[288,114135,114136],{"class":290,"line":1789},[288,114137,111929],{"class":403},[288,114139,114140],{"class":290,"line":1795},[288,114141,2572],{"emptyLinePlaceholder":217},[288,114143,114144],{"class":290,"line":1800},[288,114145,111938],{"class":403},[288,114147,114148],{"class":290,"line":1814},[288,114149,111943],{"class":403},[288,114151,114152],{"class":290,"line":1819},[288,114153,114154],{"class":403},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[288,114156,114157],{"class":290,"line":1825},[288,114158,2572],{"emptyLinePlaceholder":217},[288,114160,114161],{"class":290,"line":1846},[288,114162,111957],{"class":403},[288,114164,114165],{"class":290,"line":1851},[288,114166,111962],{"class":403},[288,114168,114169],{"class":290,"line":1865},[288,114170,114171],{"class":403},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[288,114173,114174],{"class":290,"line":1870},[288,114175,111972],{"class":403},[288,114177,114178],{"class":290,"line":1899},[288,114179,106611],{"class":403},[288,114181,114182],{"class":290,"line":1904},[288,114183,101540],{"class":403},[288,114185,114186],{"class":290,"line":1921},[288,114187,101545],{"class":403},[288,114189,114190],{"class":290,"line":1926},[288,114191,2572],{"emptyLinePlaceholder":217},[288,114193,114194],{"class":290,"line":1931},[288,114195,106628],{"class":403},[288,114197,114198],{"class":290,"line":1936},[288,114199,111997],{"class":403},[288,114201,114202],{"class":290,"line":1950},[288,114203,112002],{"class":403},[288,114205,114206],{"class":290,"line":1955},[288,114207,106638],{"class":403},[288,114209,114210],{"class":290,"line":2749},[288,114211,101550],{"class":403},[288,114213,114214],{"class":290,"line":2763},[288,114215,95871],{"class":403},[288,114217,114218],{"class":290,"line":2771},[288,114219,2572],{"emptyLinePlaceholder":217},[288,114221,114222],{"class":290,"line":2776},[288,114223,2572],{"emptyLinePlaceholder":217},[288,114225,114226,114228,114231,114233,114235,114237,114240],{"class":290,"line":2782},[288,114227,14867],{"class":294},[288,114229,114230],{"class":2135}," ReacherEnv",[288,114232,299],{"class":298},[288,114234,113713],{"class":2135},[288,114236,855],{"class":298},[288,114238,114239],{"class":2135},"Env",[288,114241,30959],{"class":298},[288,114243,114244,114247,114249,114251,114254],{"class":290,"line":2788},[288,114245,114246],{"class":298},"    metadata ",[288,114248,344],{"class":294},[288,114250,4620],{"class":298},[288,114252,114253],{"class":403},"\"render_modes\"",[288,114255,114256],{"class":298},": []}\n",[288,114258,114259],{"class":290,"line":2793},[288,114260,2572],{"emptyLinePlaceholder":217},[288,114262,114263,114265,114267,114270,114272],{"class":290,"line":8121},[288,114264,30974],{"class":294},[288,114266,30977],{"class":347},[288,114268,114269],{"class":298},"(self) -> ",[288,114271,95859],{"class":347},[288,114273,3911],{"class":298},[288,114275,114276,114278,114280,114282],{"class":290,"line":8145},[288,114277,30990],{"class":347},[288,114279,17434],{"class":298},[288,114281,31002],{"class":347},[288,114283,2148],{"class":298},[288,114285,114286,114288,114291,114293,114295,114297],{"class":290,"line":8150},[288,114287,31018],{"class":347},[288,114289,114290],{"class":298},".model ",[288,114292,344],{"class":294},[288,114294,101585],{"class":298},[288,114296,101487],{"class":347},[288,114298,305],{"class":298},[288,114300,114301,114303,114306,114308,114311,114313],{"class":290,"line":8156},[288,114302,31018],{"class":347},[288,114304,114305],{"class":298},".data ",[288,114307,344],{"class":294},[288,114309,114310],{"class":298}," mujoco.MjData(",[288,114312,30996],{"class":347},[288,114314,114315],{"class":298},".model)\n",[288,114317,114318],{"class":290,"line":8183},[288,114319,2572],{"emptyLinePlaceholder":217},[288,114321,114322,114324,114327,114329,114332,114334,114337,114339],{"class":290,"line":8188},[288,114323,31018],{"class":347},[288,114325,114326],{"class":298},".tip_site_id ",[288,114328,344],{"class":294},[288,114330,114331],{"class":298}," mujoco.mj_name2id(",[288,114333,30996],{"class":347},[288,114335,114336],{"class":298},".model, mujoco.mjtObj.mjOBJ_SITE, ",[288,114338,111709],{"class":403},[288,114340,305],{"class":298},[288,114342,114343,114345,114348,114350,114352,114354,114356,114358],{"class":290,"line":8194},[288,114344,31018],{"class":347},[288,114346,114347],{"class":298},".target_site_id ",[288,114349,344],{"class":294},[288,114351,114331],{"class":298},[288,114353,30996],{"class":347},[288,114355,114336],{"class":298},[288,114357,112132],{"class":403},[288,114359,305],{"class":298},[288,114361,114362,114364,114366,114368,114370,114372,114375,114377,114379,114381,114383],{"class":290,"line":8206},[288,114363,2669],{"class":294},[288,114365,39046],{"class":347},[288,114367,114326],{"class":298},[288,114369,1207],{"class":294},[288,114371,4265],{"class":347},[288,114373,114374],{"class":294}," or",[288,114376,39046],{"class":347},[288,114378,114347],{"class":298},[288,114380,1207],{"class":294},[288,114382,4265],{"class":347},[288,114384,3911],{"class":298},[288,114386,114387,114390,114392,114394,114397],{"class":290,"line":8218},[288,114388,114389],{"class":294},"            raise",[288,114391,103608],{"class":347},[288,114393,299],{"class":298},[288,114395,114396],{"class":403},"\"required sites not found\"",[288,114398,305],{"class":298},[288,114400,114401],{"class":290,"line":8230},[288,114402,2572],{"emptyLinePlaceholder":217},[288,114404,114405,114407,114409,114411],{"class":290,"line":9889},[288,114406,31018],{"class":347},[288,114408,114040],{"class":298},[288,114410,344],{"class":294},[288,114412,54600],{"class":347},[288,114414,114415,114417,114420,114422],{"class":290,"line":9914},[288,114416,31018],{"class":347},[288,114418,114419],{"class":298},".max_steps ",[288,114421,344],{"class":294},[288,114423,114424],{"class":347}," 200\n",[288,114426,114427,114429,114431,114433],{"class":290,"line":9937},[288,114428,31018],{"class":347},[288,114430,113879],{"class":298},[288,114432,344],{"class":294},[288,114434,47506],{"class":347},[288,114436,114437],{"class":290,"line":9961},[288,114438,2572],{"emptyLinePlaceholder":217},[288,114440,114441,114443,114445,114447,114449,114451,114453,114455,114457,114459,114461,114463,114465,114467,114469,114471,114473,114475,114477,114479],{"class":290,"line":9966},[288,114442,31018],{"class":347},[288,114444,113927],{"class":298},[288,114446,344],{"class":294},[288,114448,113932],{"class":298},[288,114450,113935],{"class":5389},[288,114452,113938],{"class":294},[288,114454,102576],{"class":347},[288,114456,12608],{"class":298},[288,114458,113945],{"class":5389},[288,114460,344],{"class":294},[288,114462,102576],{"class":347},[288,114464,12608],{"class":298},[288,114466,96136],{"class":5389},[288,114468,344],{"class":294},[288,114470,299],{"class":298},[288,114472,376],{"class":347},[288,114474,113962],{"class":298},[288,114476,93673],{"class":5389},[288,114478,344],{"class":294},[288,114480,113969],{"class":298},[288,114482,114483,114485,114487,114489,114491,114493,114495,114497,114499,114501,114503,114505,114507,114509,114511,114513,114515,114517],{"class":290,"line":9971},[288,114484,31018],{"class":347},[288,114486,113988],{"class":298},[288,114488,344],{"class":294},[288,114490,113932],{"class":298},[288,114492,113935],{"class":5389},[288,114494,113938],{"class":294},[288,114496,113999],{"class":298},[288,114498,113945],{"class":5389},[288,114500,344],{"class":294},[288,114502,113999],{"class":298},[288,114504,96136],{"class":5389},[288,114506,344],{"class":294},[288,114508,299],{"class":298},[288,114510,743],{"class":347},[288,114512,113962],{"class":298},[288,114514,93673],{"class":5389},[288,114516,344],{"class":294},[288,114518,113969],{"class":298},[288,114520,114521],{"class":290,"line":9976},[288,114522,2572],{"emptyLinePlaceholder":217},[288,114524,114525,114527,114530],{"class":290,"line":9985},[288,114526,30974],{"class":294},[288,114528,114529],{"class":2135}," _get_obs",[288,114531,114532],{"class":298},"(self) -> np.ndarray:\n",[288,114534,114535,114537,114539,114541,114544,114546],{"class":290,"line":9990},[288,114536,112310],{"class":298},[288,114538,344],{"class":294},[288,114540,39046],{"class":347},[288,114542,114543],{"class":298},".data.site_xpos[",[288,114545,30996],{"class":347},[288,114547,114548],{"class":298},".tip_site_id].copy()\n",[288,114550,114551,114553,114555,114557,114559,114561],{"class":290,"line":9996},[288,114552,112323],{"class":298},[288,114554,344],{"class":294},[288,114556,39046],{"class":347},[288,114558,114543],{"class":298},[288,114560,30996],{"class":347},[288,114562,114563],{"class":298},".target_site_id].copy()\n",[288,114565,114566,114568,114570,114573,114575,114578,114580],{"class":290,"line":10017},[288,114567,110355],{"class":298},[288,114569,344],{"class":294},[288,114571,114572],{"class":298}," np.concatenate([",[288,114574,30996],{"class":347},[288,114576,114577],{"class":298},".data.qpos.copy(), ",[288,114579,30996],{"class":347},[288,114581,114582],{"class":298},".data.qvel.copy(), tip, target])\n",[288,114584,114585,114587],{"class":290,"line":10023},[288,114586,14925],{"class":294},[288,114588,114589],{"class":298}," obs.astype(np.float32)\n",[288,114591,114592],{"class":290,"line":10037},[288,114593,2572],{"emptyLinePlaceholder":217},[288,114595,114596,114598,114601,114603,114605],{"class":290,"line":10043},[288,114597,30974],{"class":294},[288,114599,114600],{"class":2135}," _get_reward",[288,114602,114269],{"class":298},[288,114604,338],{"class":347},[288,114606,3911],{"class":298},[288,114608,114609,114611,114613,114615,114617,114619],{"class":290,"line":10070},[288,114610,112310],{"class":298},[288,114612,344],{"class":294},[288,114614,39046],{"class":347},[288,114616,114543],{"class":298},[288,114618,30996],{"class":347},[288,114620,114621],{"class":298},".tip_site_id]\n",[288,114623,114624,114626,114628,114630,114632,114634],{"class":290,"line":10079},[288,114625,112323],{"class":298},[288,114627,344],{"class":294},[288,114629,39046],{"class":347},[288,114631,114543],{"class":298},[288,114633,30996],{"class":347},[288,114635,114636],{"class":298},".target_site_id]\n",[288,114638,114639,114642,114644,114646,114648],{"class":290,"line":10085},[288,114640,114641],{"class":298},"        dist ",[288,114643,344],{"class":294},[288,114645,111774],{"class":298},[288,114647,829],{"class":294},[288,114649,111779],{"class":298},[288,114651,114652,114655,114657,114659,114661,114664,114666],{"class":290,"line":10093},[288,114653,114654],{"class":298},"        control_cost ",[288,114656,344],{"class":294},[288,114658,112210],{"class":347},[288,114660,6691],{"class":294},[288,114662,114663],{"class":298}," np.sum(np.square(",[288,114665,30996],{"class":347},[288,114667,114668],{"class":298},".data.ctrl))\n",[288,114670,114671,114673,114675,114677,114679,114681,114683],{"class":290,"line":10098},[288,114672,14925],{"class":294},[288,114674,109970],{"class":347},[288,114676,299],{"class":298},[288,114678,829],{"class":294},[288,114680,111769],{"class":298},[288,114682,829],{"class":294},[288,114684,112232],{"class":298},[288,114686,114687],{"class":290,"line":16777},[288,114688,2572],{"emptyLinePlaceholder":217},[288,114690,114691,114693,114696,114699,114701,114704,114706,114708,114710,114712,114714,114717,114720,114722,114724,114726,114728],{"class":290,"line":16783},[288,114692,30974],{"class":294},[288,114694,114695],{"class":2135}," reset",[288,114697,114698],{"class":298},"(self, ",[288,114700,752],{"class":294},[288,114702,114703],{"class":298},", seed: ",[288,114705,302],{"class":347},[288,114707,25282],{"class":294},[288,114709,39106],{"class":347},[288,114711,13737],{"class":294},[288,114713,39106],{"class":347},[288,114715,114716],{"class":298},", options: ",[288,114718,114719],{"class":347},"dict",[288,114721,25282],{"class":294},[288,114723,39106],{"class":347},[288,114725,13737],{"class":294},[288,114727,39106],{"class":347},[288,114729,30959],{"class":298},[288,114731,114732,114734,114737,114740,114742],{"class":290,"line":16806},[288,114733,30990],{"class":347},[288,114735,114736],{"class":298},"().reset(",[288,114738,114739],{"class":5389},"seed",[288,114741,344],{"class":294},[288,114743,114744],{"class":298},"seed)\n",[288,114746,114747,114750,114752,114755,114757],{"class":290,"line":16812},[288,114748,114749],{"class":298},"        mujoco.mj_resetData(",[288,114751,30996],{"class":347},[288,114753,114754],{"class":298},".model, ",[288,114756,30996],{"class":347},[288,114758,114759],{"class":298},".data)\n",[288,114761,114762],{"class":290,"line":16835},[288,114763,2572],{"emptyLinePlaceholder":217},[288,114765,114766,114768,114771,114773,114775,114778,114780,114782,114784,114786,114788,114790,114792,114794,114796,114798,114800],{"class":290,"line":16849},[288,114767,31018],{"class":347},[288,114769,114770],{"class":298},".data.qpos[:] ",[288,114772,344],{"class":294},[288,114774,39046],{"class":347},[288,114776,114777],{"class":298},".np_random.uniform(",[288,114779,113935],{"class":5389},[288,114781,113938],{"class":294},[288,114783,86383],{"class":347},[288,114785,12608],{"class":298},[288,114787,113945],{"class":5389},[288,114789,344],{"class":294},[288,114791,86383],{"class":347},[288,114793,12608],{"class":298},[288,114795,31669],{"class":5389},[288,114797,344],{"class":294},[288,114799,30996],{"class":347},[288,114801,114802],{"class":298},".model.nq)\n",[288,114804,114805,114807,114810,114812],{"class":290,"line":16869},[288,114806,31018],{"class":347},[288,114808,114809],{"class":298},".data.qvel[:] ",[288,114811,344],{"class":294},[288,114813,104934],{"class":347},[288,114815,114816,114819,114821,114823,114825],{"class":290,"line":16875},[288,114817,114818],{"class":298},"        mujoco.mj_forward(",[288,114820,30996],{"class":347},[288,114822,114754],{"class":298},[288,114824,30996],{"class":347},[288,114826,114759],{"class":298},[288,114828,114829],{"class":290,"line":16886},[288,114830,2572],{"emptyLinePlaceholder":217},[288,114832,114833,114835,114837,114839],{"class":290,"line":16909},[288,114834,31018],{"class":347},[288,114836,113879],{"class":298},[288,114838,344],{"class":294},[288,114840,47506],{"class":347},[288,114842,114843,114845,114847],{"class":290,"line":16931},[288,114844,14925],{"class":294},[288,114846,39046],{"class":347},[288,114848,114849],{"class":298},"._get_obs(), {}\n",[288,114851,114852],{"class":290,"line":16936},[288,114853,2572],{"emptyLinePlaceholder":217},[288,114855,114856,114858,114861],{"class":290,"line":16942},[288,114857,30974],{"class":294},[288,114859,114860],{"class":2135}," step",[288,114862,114863],{"class":298},"(self, action):\n",[288,114865,114866,114868,114870,114873,114875,114877],{"class":290,"line":16956},[288,114867,110395],{"class":298},[288,114869,344],{"class":294},[288,114871,114872],{"class":298}," np.asarray(action, ",[288,114874,93673],{"class":5389},[288,114876,344],{"class":294},[288,114878,113969],{"class":298},[288,114880,114881,114883,114885,114887,114889,114892,114894],{"class":290,"line":16969},[288,114882,110395],{"class":298},[288,114884,344],{"class":294},[288,114886,107620],{"class":298},[288,114888,30996],{"class":347},[288,114890,114891],{"class":298},".action_space.low, ",[288,114893,30996],{"class":347},[288,114895,114896],{"class":298},".action_space.high)\n",[288,114898,114899],{"class":290,"line":16974},[288,114900,2572],{"emptyLinePlaceholder":217},[288,114902,114903,114905,114908,114910],{"class":290,"line":16988},[288,114904,31018],{"class":347},[288,114906,114907],{"class":298},".data.ctrl[:] ",[288,114909,344],{"class":294},[288,114911,107643],{"class":298},[288,114913,114914,114916,114918,114920,114922,114924,114926],{"class":290,"line":16993},[288,114915,3575],{"class":294},[288,114917,101674],{"class":298},[288,114919,26216],{"class":294},[288,114921,32616],{"class":347},[288,114923,299],{"class":298},[288,114925,30996],{"class":347},[288,114927,114928],{"class":298},".frame_skip):\n",[288,114930,114931,114934,114936,114938,114940],{"class":290,"line":16999},[288,114932,114933],{"class":298},"            mujoco.mj_step(",[288,114935,30996],{"class":347},[288,114937,114754],{"class":298},[288,114939,30996],{"class":347},[288,114941,114759],{"class":298},[288,114943,114944],{"class":290,"line":17004},[288,114945,2572],{"emptyLinePlaceholder":217},[288,114947,114948,114950,114952,114954],{"class":290,"line":17018},[288,114949,31018],{"class":347},[288,114951,113879],{"class":298},[288,114953,9650],{"class":294},[288,114955,55872],{"class":347},[288,114957,114958],{"class":290,"line":17023},[288,114959,2572],{"emptyLinePlaceholder":217},[288,114961,114962,114964,114966,114968],{"class":290,"line":17028},[288,114963,110355],{"class":298},[288,114965,344],{"class":294},[288,114967,39046],{"class":347},[288,114969,114970],{"class":298},"._get_obs()\n",[288,114972,114973,114975,114977,114979],{"class":290,"line":17042},[288,114974,110460],{"class":298},[288,114976,344],{"class":294},[288,114978,39046],{"class":347},[288,114980,114981],{"class":298},"._get_reward()\n",[288,114983,114984],{"class":290,"line":17054},[288,114985,2572],{"emptyLinePlaceholder":217},[288,114987,114988,114990,114992,114994,114996,114998],{"class":290,"line":17059},[288,114989,112310],{"class":298},[288,114991,344],{"class":294},[288,114993,39046],{"class":347},[288,114995,114543],{"class":298},[288,114997,30996],{"class":347},[288,114999,114621],{"class":298},[288,115001,115002,115004,115006,115008,115010,115012],{"class":290,"line":17072},[288,115003,112323],{"class":298},[288,115005,344],{"class":294},[288,115007,39046],{"class":347},[288,115009,114543],{"class":298},[288,115011,30996],{"class":347},[288,115013,114636],{"class":298},[288,115015,115016,115018,115020,115022,115025,115027],{"class":290,"line":17077},[288,115017,114641],{"class":298},[288,115019,344],{"class":294},[288,115021,109970],{"class":347},[288,115023,115024],{"class":298},"(np.linalg.norm(tip ",[288,115026,829],{"class":294},[288,115028,115029],{"class":298}," target))\n",[288,115031,115032],{"class":290,"line":17082},[288,115033,2572],{"emptyLinePlaceholder":217},[288,115035,115036,115039,115041,115043,115045],{"class":290,"line":17087},[288,115037,115038],{"class":298},"        terminated ",[288,115040,344],{"class":294},[288,115042,113862],{"class":298},[288,115044,1207],{"class":294},[288,115046,113867],{"class":347},[288,115048,115049,115052,115054,115056,115058,115060,115062],{"class":290,"line":17100},[288,115050,115051],{"class":298},"        truncated ",[288,115053,344],{"class":294},[288,115055,39046],{"class":347},[288,115057,113879],{"class":298},[288,115059,1882],{"class":294},[288,115061,39046],{"class":347},[288,115063,113886],{"class":298},[288,115065,115066,115069,115071,115073,115076],{"class":290,"line":17105},[288,115067,115068],{"class":298},"        info ",[288,115070,344],{"class":294},[288,115072,4620],{"class":298},[288,115074,115075],{"class":403},"\"distance\"",[288,115077,115078],{"class":298},": dist}\n",[288,115080,115081,115083],{"class":290,"line":32806},[288,115082,14925],{"class":294},[288,115084,115085],{"class":298}," obs, reward, terminated, truncated, info\n",[288,115087,115088],{"class":290,"line":32812},[288,115089,2572],{"emptyLinePlaceholder":217},[288,115091,115092],{"class":290,"line":32818},[288,115093,2572],{"emptyLinePlaceholder":217},[288,115095,115096,115098,115100,115102,115104],{"class":290,"line":32824},[288,115097,32120],{"class":294},[288,115099,2145],{"class":2135},[288,115101,101571],{"class":298},[288,115103,95859],{"class":347},[288,115105,3911],{"class":298},[288,115107,115108,115111,115113],{"class":290,"line":32830},[288,115109,115110],{"class":298},"    env ",[288,115112,344],{"class":294},[288,115114,115115],{"class":298}," ReacherEnv()\n",[288,115117,115118,115121,115123,115126,115128,115130,115132],{"class":290,"line":32841},[288,115119,115120],{"class":298},"    obs, info ",[288,115122,344],{"class":294},[288,115124,115125],{"class":298}," env.reset(",[288,115127,114739],{"class":5389},[288,115129,344],{"class":294},[288,115131,490],{"class":347},[288,115133,305],{"class":298},[288,115135,115136,115138,115140,115143],{"class":290,"line":32847},[288,115137,31472],{"class":347},[288,115139,299],{"class":298},[288,115141,115142],{"class":403},"\"initial obs shape:\"",[288,115144,115145],{"class":298},", obs.shape)\n",[288,115147,115148,115150,115152,115155],{"class":290,"line":32867},[288,115149,31472],{"class":347},[288,115151,299],{"class":298},[288,115153,115154],{"class":403},"\"initial info:\"",[288,115156,115157],{"class":298},", info)\n",[288,115159,115160],{"class":290,"line":32873},[288,115161,2572],{"emptyLinePlaceholder":217},[288,115163,115164,115166,115168],{"class":290,"line":32884},[288,115165,110326],{"class":298},[288,115167,344],{"class":294},[288,115169,104934],{"class":347},[288,115171,115172,115174,115176,115178,115180,115182,115184],{"class":290,"line":32890},[288,115173,3373],{"class":294},[288,115175,31789],{"class":298},[288,115177,26216],{"class":294},[288,115179,32616],{"class":347},[288,115181,299],{"class":298},[288,115183,997],{"class":347},[288,115185,30959],{"class":298},[288,115187,115188,115190,115192],{"class":290,"line":32896},[288,115189,110395],{"class":298},[288,115191,344],{"class":294},[288,115193,115194],{"class":298}," env.action_space.sample()\n",[288,115196,115197,115200,115202],{"class":290,"line":32902},[288,115198,115199],{"class":298},"        obs, reward, terminated, truncated, info ",[288,115201,344],{"class":294},[288,115203,113588],{"class":298},[288,115205,115206,115208,115210],{"class":290,"line":32908},[288,115207,110470],{"class":298},[288,115209,9650],{"class":294},[288,115211,110475],{"class":298},[288,115213,115214,115216,115218,115220,115222,115225,115227,115229,115232,115234,115236,115239,115241,115243,115246,115248,115250,115252],{"class":290,"line":32914},[288,115215,32624],{"class":347},[288,115217,299],{"class":298},[288,115219,110504],{"class":403},[288,115221,110507],{"class":298},[288,115223,115224],{"class":403},"\"reward:\"",[288,115226,12608],{"class":298},[288,115228,32191],{"class":347},[288,115230,115231],{"class":298},"(reward, ",[288,115233,370],{"class":347},[288,115235,110518],{"class":298},[288,115237,115238],{"class":403},"\"distance:\"",[288,115240,12608],{"class":298},[288,115242,32191],{"class":347},[288,115244,115245],{"class":298},"(info[",[288,115247,115075],{"class":403},[288,115249,112375],{"class":298},[288,115251,370],{"class":347},[288,115253,30670],{"class":298},[288,115255,115256,115258,115261,115264],{"class":290,"line":32920},[288,115257,2669],{"class":294},[288,115259,115260],{"class":298}," terminated ",[288,115262,115263],{"class":294},"or",[288,115265,115266],{"class":298}," truncated:\n",[288,115268,115269],{"class":290,"line":32926},[288,115270,115271],{"class":294},"            break\n",[288,115273,115274],{"class":290,"line":32946},[288,115275,2572],{"emptyLinePlaceholder":217},[288,115277,115278,115280,115282,115284,115286,115288,115290,115292],{"class":290,"line":32952},[288,115279,31472],{"class":347},[288,115281,299],{"class":298},[288,115283,110549],{"class":403},[288,115285,12608],{"class":298},[288,115287,32191],{"class":347},[288,115289,110556],{"class":298},[288,115291,370],{"class":347},[288,115293,30670],{"class":298},[288,115295,115296],{"class":290,"line":32968},[288,115297,2572],{"emptyLinePlaceholder":217},[288,115299,115300],{"class":290,"line":32974},[288,115301,2572],{"emptyLinePlaceholder":217},[288,115303,115304,115306,115308,115310,115312],{"class":290,"line":32988},[288,115305,1703],{"class":294},[288,115307,31393],{"class":347},[288,115309,101732],{"class":294},[288,115311,101735],{"class":403},[288,115313,3911],{"class":298},[288,115315,115316],{"class":290,"line":32994},[288,115317,101742],{"class":298},[19,115319,103743],{},[280,115321,115323],{"className":23995,"code":115322,"language":23997,"meta":205,"style":205},"touch ch8_gym_env.py\n",[25,115324,115325],{"__ignoreMap":205},[288,115326,115327,115329],{"class":290,"line":291},[288,115328,101456],{"class":2135},[288,115330,115331],{"class":403}," ch8_gym_env.py\n",[19,115333,110617],{},[280,115335,115337],{"className":23995,"code":115336,"language":23997,"meta":205,"style":205},"python ch8_gym_env.py\n",[25,115338,115339],{"__ignoreMap":205},[288,115340,115341,115343],{"class":290,"line":291},[288,115342,30553],{"class":2135},[288,115344,115331],{"class":403},[260,115346,101745],{"id":101745},[19,115348,115349],{},"继承 Gymnasium 环境：",[280,115351,115353],{"className":30551,"code":115352,"language":30553,"meta":205,"style":205},"class ReacherEnv(gym.Env):\n",[25,115354,115355],{"__ignoreMap":205},[288,115356,115357,115359,115361,115363,115365,115367,115369],{"class":290,"line":291},[288,115358,14867],{"class":294},[288,115360,114230],{"class":2135},[288,115362,299],{"class":298},[288,115364,113713],{"class":2135},[288,115366,855],{"class":298},[288,115368,114239],{"class":2135},[288,115370,30959],{"class":298},[19,115372,115373],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115375,115376],{},"初始化模型：",[280,115378,115380],{"className":30551,"code":115379,"language":30553,"meta":205,"style":205},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[25,115381,115382,115396],{"__ignoreMap":205},[288,115383,115384,115386,115388,115390,115392,115394],{"class":290,"line":291},[288,115385,30996],{"class":347},[288,115387,114290],{"class":298},[288,115389,344],{"class":294},[288,115391,101585],{"class":298},[288,115393,101487],{"class":347},[288,115395,305],{"class":298},[288,115397,115398,115400,115402,115404,115406,115408],{"class":290,"line":206},[288,115399,30996],{"class":347},[288,115401,114305],{"class":298},[288,115403,344],{"class":294},[288,115405,114310],{"class":298},[288,115407,30996],{"class":347},[288,115409,114315],{"class":298},[19,115411,115412,115413,115415],{},"这和前面章节一样，只是现在放到了类的 ",[25,115414,31002],{}," 里。",[19,115417,115418],{},"缓存 site ID：",[280,115420,115422],{"className":30551,"code":115421,"language":30553,"meta":205,"style":205},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[25,115423,115424,115438],{"__ignoreMap":205},[288,115425,115426,115428,115430,115432,115434,115436],{"class":290,"line":291},[288,115427,30996],{"class":347},[288,115429,114326],{"class":298},[288,115431,344],{"class":294},[288,115433,114331],{"class":298},[288,115435,89727],{"class":347},[288,115437,305],{"class":298},[288,115439,115440,115442,115444,115446,115448,115450],{"class":290,"line":206},[288,115441,30996],{"class":347},[288,115443,114347],{"class":298},[288,115445,344],{"class":294},[288,115447,114331],{"class":298},[288,115449,89727],{"class":347},[288,115451,305],{"class":298},[19,115453,115454],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115456,115457],{},"reset：",[280,115459,115461],{"className":30551,"code":115460,"language":30553,"meta":205,"style":205},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[25,115462,115463],{"__ignoreMap":205},[288,115464,115465,115467,115469,115471,115473,115475,115477,115479,115481,115483,115485,115487,115489,115491,115493,115495,115497],{"class":290,"line":291},[288,115466,32120],{"class":294},[288,115468,114695],{"class":2135},[288,115470,114698],{"class":298},[288,115472,752],{"class":294},[288,115474,114703],{"class":298},[288,115476,302],{"class":347},[288,115478,25282],{"class":294},[288,115480,39106],{"class":347},[288,115482,13737],{"class":294},[288,115484,39106],{"class":347},[288,115486,114716],{"class":298},[288,115488,114719],{"class":347},[288,115490,25282],{"class":294},[288,115492,39106],{"class":347},[288,115494,13737],{"class":294},[288,115496,39106],{"class":347},[288,115498,30959],{"class":298},[19,115500,115501,115503],{},[25,115502,70229],{}," 做四件事：",[243,115505,115506,115509,115512,115515],{},[246,115507,115508],{},"设置随机种子。",[246,115510,115511],{},"重置 MuJoCo data。",[246,115513,115514],{},"随机初始化关节角。",[246,115516,115517],{},"返回初始观测和 info。",[19,115519,115520],{},"step：",[280,115522,115524],{"className":30551,"code":115523,"language":30553,"meta":205,"style":205},"def step(self, action):\n",[25,115525,115526],{"__ignoreMap":205},[288,115527,115528,115530,115532],{"class":290,"line":291},[288,115529,32120],{"class":294},[288,115531,114860],{"class":2135},[288,115533,114863],{"class":298},[19,115535,115536,115538],{},[25,115537,107307],{}," 做六件事：",[243,115540,115541,115544,115550,115553,115556,115559],{},[246,115542,115543],{},"检查并裁剪 action。",[246,115545,115546,115547,28558],{},"写入 ",[25,115548,115549],{},"self.data.ctrl",[246,115551,115552],{},"连续推进若干个 MuJoCo 物理步。",[246,115554,115555],{},"计算新观测。",[246,115557,115558],{},"计算奖励和结束条件。",[246,115560,115561],{},"返回 Gymnasium 标准五元组。",[260,115563,101881],{"id":101881},[280,115565,115567],{"className":30551,"code":115566,"language":30553,"meta":205,"style":205},"import gymnasium as gym\n",[25,115568,115569],{"__ignoreMap":205},[288,115570,115571,115573,115575,115577],{"class":290,"line":291},[288,115572,30565],{"class":294},[288,115574,114068],{"class":298},[288,115576,31556],{"class":294},[288,115578,114073],{"class":298},[19,115580,115581,115582,115584,115585,115588],{},"导入 Gymnasium，并起别名 ",[25,115583,113713],{},"。后面写 ",[25,115586,115587],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[280,115590,115592],{"className":30551,"code":115591,"language":30553,"meta":205,"style":205},"from gymnasium import spaces\n",[25,115593,115594],{"__ignoreMap":205},[288,115595,115596,115598,115600,115602],{"class":290,"line":291},[288,115597,30910],{"class":294},[288,115599,114068],{"class":298},[288,115601,30565],{"class":294},[288,115603,114100],{"class":298},[19,115605,115606,115607,115610],{},"导入空间定义工具。",[25,115608,115609],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[280,115612,115613],{"className":30551,"code":115352,"language":30553,"meta":205,"style":205},[25,115614,115615],{"__ignoreMap":205},[288,115616,115617,115619,115621,115623,115625,115627,115629],{"class":290,"line":291},[288,115618,14867],{"class":294},[288,115620,114230],{"class":2135},[288,115622,299],{"class":298},[288,115624,113713],{"class":2135},[288,115626,855],{"class":298},[288,115628,114239],{"class":2135},[288,115630,30959],{"class":298},[19,115632,115633,115634,115637,115638,115640,115641,101191,115643,115645],{},"定义一个类，名字叫 ",[25,115635,115636],{},"ReacherEnv","。括号里的 ",[25,115639,115587],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[25,115642,70229],{},[25,115644,107307],{}," 这两个核心方法。",[280,115647,115649],{"className":30551,"code":115648,"language":30553,"meta":205,"style":205},"metadata = {\"render_modes\": []}\n",[25,115650,115651],{"__ignoreMap":205},[288,115652,115653,115656,115658,115660,115662],{"class":290,"line":291},[288,115654,115655],{"class":298},"metadata ",[288,115657,344],{"class":294},[288,115659,4620],{"class":298},[288,115661,114253],{"class":403},[288,115663,114256],{"class":298},[19,115665,115666],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[280,115668,115670],{"className":30551,"code":115669,"language":30553,"meta":205,"style":205},"def __init__(self) -> None:\n",[25,115671,115672],{"__ignoreMap":205},[288,115673,115674,115676,115678,115680,115682],{"class":290,"line":291},[288,115675,32120],{"class":294},[288,115677,30977],{"class":347},[288,115679,114269],{"class":298},[288,115681,95859],{"class":347},[288,115683,3911],{"class":298},[19,115685,115686,115688,115689,28558],{},[25,115687,31002],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[25,115690,115691],{},"env = ReacherEnv()",[280,115693,115695],{"className":30551,"code":115694,"language":30553,"meta":205,"style":205},"super().__init__()\n",[25,115696,115697],{"__ignoreMap":205},[288,115698,115699,115702,115704,115706],{"class":290,"line":291},[288,115700,115701],{"class":347},"super",[288,115703,17434],{"class":298},[288,115705,31002],{"class":347},[288,115707,2148],{"class":298},[19,115709,115710,115711,115713],{},"调用父类 ",[25,115712,115587],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[280,115715,115716],{"className":30551,"code":115379,"language":30553,"meta":205,"style":205},[25,115717,115718,115732],{"__ignoreMap":205},[288,115719,115720,115722,115724,115726,115728,115730],{"class":290,"line":291},[288,115721,30996],{"class":347},[288,115723,114290],{"class":298},[288,115725,344],{"class":294},[288,115727,101585],{"class":298},[288,115729,101487],{"class":347},[288,115731,305],{"class":298},[288,115733,115734,115736,115738,115740,115742,115744],{"class":290,"line":206},[288,115735,30996],{"class":347},[288,115737,114305],{"class":298},[288,115739,344],{"class":294},[288,115741,114310],{"class":298},[288,115743,30996],{"class":347},[288,115745,114315],{"class":298},[19,115747,115748,115749,115751,115752,101191,115755,115758],{},"把 MuJoCo 模型和状态保存到 ",[25,115750,30996],{}," 上。",[25,115753,115754],{},"self.model",[25,115756,115757],{},"self.data"," 表示这个环境对象自己的模型和状态。",[280,115760,115761],{"className":30551,"code":115421,"language":30553,"meta":205,"style":205},[25,115762,115763,115777],{"__ignoreMap":205},[288,115764,115765,115767,115769,115771,115773,115775],{"class":290,"line":291},[288,115766,30996],{"class":347},[288,115768,114326],{"class":298},[288,115770,344],{"class":294},[288,115772,114331],{"class":298},[288,115774,89727],{"class":347},[288,115776,305],{"class":298},[288,115778,115779,115781,115783,115785,115787,115789],{"class":290,"line":206},[288,115780,30996],{"class":347},[288,115782,114347],{"class":298},[288,115784,344],{"class":294},[288,115786,114331],{"class":298},[288,115788,89727],{"class":347},[288,115790,305],{"class":298},[19,115792,115793,115794,101191,115797,115800],{},"提前查好 tip 和 target 的 site ID。这样 ",[25,115795,115796],{},"_get_obs",[25,115798,115799],{},"_get_reward"," 里就不用每次按名字查找。",[280,115802,115804],{"className":30551,"code":115803,"language":30553,"meta":205,"style":205},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[25,115805,115806,115816,115826],{"__ignoreMap":205},[288,115807,115808,115810,115812,115814],{"class":290,"line":291},[288,115809,30996],{"class":347},[288,115811,114040],{"class":298},[288,115813,344],{"class":294},[288,115815,54600],{"class":347},[288,115817,115818,115820,115822,115824],{"class":290,"line":206},[288,115819,30996],{"class":347},[288,115821,114419],{"class":298},[288,115823,344],{"class":294},[288,115825,114424],{"class":347},[288,115827,115828,115830,115832,115834],{"class":290,"line":1352},[288,115829,30996],{"class":347},[288,115831,113879],{"class":298},[288,115833,344],{"class":294},[288,115835,47506],{"class":347},[19,115837,115838,115841,115842,115845,115846,115849],{},[25,115839,115840],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[25,115843,115844],{},"max_steps"," 是一个 episode 最多运行多少步。",[25,115847,115848],{},"steps"," 记录当前 episode 已经走了多少步。",[280,115851,115852],{"className":30551,"code":113918,"language":30553,"meta":205,"style":205},[25,115853,115854],{"__ignoreMap":205},[288,115855,115856,115858,115860,115862,115864,115866,115868,115870,115872,115874,115876,115878,115880,115882,115884,115886,115888,115890,115892,115894],{"class":290,"line":291},[288,115857,30996],{"class":347},[288,115859,113927],{"class":298},[288,115861,344],{"class":294},[288,115863,113932],{"class":298},[288,115865,113935],{"class":5389},[288,115867,113938],{"class":294},[288,115869,102576],{"class":347},[288,115871,12608],{"class":298},[288,115873,113945],{"class":5389},[288,115875,344],{"class":294},[288,115877,102576],{"class":347},[288,115879,12608],{"class":298},[288,115881,96136],{"class":5389},[288,115883,344],{"class":294},[288,115885,299],{"class":298},[288,115887,376],{"class":347},[288,115889,113962],{"class":298},[288,115891,93673],{"class":5389},[288,115893,344],{"class":294},[288,115895,113969],{"class":298},[19,115897,115898,115899,115902,115903,101191,115906,115909],{},"定义动作空间。",[25,115900,115901],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[25,115904,115905],{},"low=-1.0",[25,115907,115908],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[280,115911,115912],{"className":30551,"code":113979,"language":30553,"meta":205,"style":205},[25,115913,115914],{"__ignoreMap":205},[288,115915,115916,115918,115920,115922,115924,115926,115928,115930,115932,115934,115936,115938,115940,115942,115944,115946,115948,115950],{"class":290,"line":291},[288,115917,30996],{"class":347},[288,115919,113988],{"class":298},[288,115921,344],{"class":294},[288,115923,113932],{"class":298},[288,115925,113935],{"class":5389},[288,115927,113938],{"class":294},[288,115929,113999],{"class":298},[288,115931,113945],{"class":5389},[288,115933,344],{"class":294},[288,115935,113999],{"class":298},[288,115937,96136],{"class":5389},[288,115939,344],{"class":294},[288,115941,299],{"class":298},[288,115943,743],{"class":347},[288,115945,113962],{"class":298},[288,115947,93673],{"class":5389},[288,115949,344],{"class":294},[288,115951,113969],{"class":298},[19,115953,115954,115955,115958,115959,115962],{},"定义观测空间。",[25,115956,115957],{},"shape=(10,)"," 表示观测是 10 个数。",[25,115960,115961],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[280,115964,115966],{"className":30551,"code":115965,"language":30553,"meta":205,"style":205},"def _get_obs(self) -> np.ndarray:\n",[25,115967,115968],{"__ignoreMap":205},[288,115969,115970,115972,115974],{"class":290,"line":291},[288,115971,32120],{"class":294},[288,115973,114529],{"class":2135},[288,115975,114532],{"class":298},[19,115977,115978,115979,115981],{},"定义内部函数，用来生成观测。函数名前面的 ",[25,115980,1289],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[280,115983,115985],{"className":30551,"code":115984,"language":30553,"meta":205,"style":205},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[25,115986,115987,116001],{"__ignoreMap":205},[288,115988,115989,115991,115993,115995,115997,115999],{"class":290,"line":291},[288,115990,111741],{"class":298},[288,115992,344],{"class":294},[288,115994,39046],{"class":347},[288,115996,114543],{"class":298},[288,115998,30996],{"class":347},[288,116000,114548],{"class":298},[288,116002,116003,116005,116007,116009,116011,116013],{"class":290,"line":206},[288,116004,111751],{"class":298},[288,116006,344],{"class":294},[288,116008,39046],{"class":347},[288,116010,114543],{"class":298},[288,116012,30996],{"class":347},[288,116014,114563],{"class":298},[19,116016,116017],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[280,116019,116021],{"className":30551,"code":116020,"language":30553,"meta":205,"style":205},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[25,116022,116023,116039],{"__ignoreMap":205},[288,116024,116025,116027,116029,116031,116033,116035,116037],{"class":290,"line":291},[288,116026,111027],{"class":298},[288,116028,344],{"class":294},[288,116030,114572],{"class":298},[288,116032,30996],{"class":347},[288,116034,114577],{"class":298},[288,116036,30996],{"class":347},[288,116038,114582],{"class":298},[288,116040,116041,116043],{"class":290,"line":206},[288,116042,17219],{"class":294},[288,116044,114589],{"class":298},[19,116046,116047,116048,116051,116052,116054],{},"拼接观测，并转换成 ",[25,116049,116050],{},"float32","。很多强化学习库默认使用 ",[25,116053,116050],{},"，所以这里主动转换。",[280,116056,116057],{"className":30551,"code":115460,"language":30553,"meta":205,"style":205},[25,116058,116059],{"__ignoreMap":205},[288,116060,116061,116063,116065,116067,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087,116089,116091,116093],{"class":290,"line":291},[288,116062,32120],{"class":294},[288,116064,114695],{"class":2135},[288,116066,114698],{"class":298},[288,116068,752],{"class":294},[288,116070,114703],{"class":298},[288,116072,302],{"class":347},[288,116074,25282],{"class":294},[288,116076,39106],{"class":347},[288,116078,13737],{"class":294},[288,116080,39106],{"class":347},[288,116082,114716],{"class":298},[288,116084,114719],{"class":347},[288,116086,25282],{"class":294},[288,116088,39106],{"class":347},[288,116090,13737],{"class":294},[288,116092,39106],{"class":347},[288,116094,30959],{"class":298},[19,116096,116097,116098,116100,116101,116104],{},"定义 reset。",[25,116099,114739],{}," 用来控制随机数，保证实验可以复现。",[25,116102,116103],{},"options"," 用来接收额外配置，本章暂时不用。",[280,116106,116108],{"className":30551,"code":116107,"language":30553,"meta":205,"style":205},"super().reset(seed=seed)\n",[25,116109,116110],{"__ignoreMap":205},[288,116111,116112,116114,116116,116118,116120],{"class":290,"line":291},[288,116113,115701],{"class":347},[288,116115,114736],{"class":298},[288,116117,114739],{"class":5389},[288,116119,344],{"class":294},[288,116121,114744],{"class":298},[19,116123,116124,116125,116128],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[25,116126,116127],{},"self.np_random"," 生成可复现的随机数。",[280,116130,116132],{"className":30551,"code":116131,"language":30553,"meta":205,"style":205},"mujoco.mj_resetData(self.model, self.data)\n",[25,116133,116134],{"__ignoreMap":205},[288,116135,116136,116139,116141,116143,116145],{"class":290,"line":291},[288,116137,116138],{"class":298},"mujoco.mj_resetData(",[288,116140,30996],{"class":347},[288,116142,114754],{"class":298},[288,116144,30996],{"class":347},[288,116146,114759],{"class":298},[19,116148,116149],{},"把 MuJoCo 状态重置到默认状态。",[280,116151,116153],{"className":30551,"code":116152,"language":30553,"meta":205,"style":205},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[25,116154,116155],{"__ignoreMap":205},[288,116156,116157,116159,116161,116163,116165,116167,116169,116171,116173,116175,116177,116179,116181,116183,116185,116187,116189],{"class":290,"line":291},[288,116158,30996],{"class":347},[288,116160,114770],{"class":298},[288,116162,344],{"class":294},[288,116164,39046],{"class":347},[288,116166,114777],{"class":298},[288,116168,113935],{"class":5389},[288,116170,113938],{"class":294},[288,116172,86383],{"class":347},[288,116174,12608],{"class":298},[288,116176,113945],{"class":5389},[288,116178,344],{"class":294},[288,116180,86383],{"class":347},[288,116182,12608],{"class":298},[288,116184,31669],{"class":5389},[288,116186,344],{"class":294},[288,116188,30996],{"class":347},[288,116190,114802],{"class":298},[19,116192,115514,116193,116196,116197,116200,116201,116203],{},[25,116194,116195],{},"[:]"," 表示修改整个数组。",[25,116198,116199],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[25,116202,102323],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[280,116205,116207],{"className":30551,"code":116206,"language":30553,"meta":205,"style":205},"self.data.qvel[:] = 0.0\n",[25,116208,116209],{"__ignoreMap":205},[288,116210,116211,116213,116215,116217],{"class":290,"line":291},[288,116212,30996],{"class":347},[288,116214,114809],{"class":298},[288,116216,344],{"class":294},[288,116218,104934],{"class":347},[19,116220,116221],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[280,116223,116225],{"className":30551,"code":116224,"language":30553,"meta":205,"style":205},"self.steps = 0\nreturn self._get_obs(), {}\n",[25,116226,116227,116237],{"__ignoreMap":205},[288,116228,116229,116231,116233,116235],{"class":290,"line":291},[288,116230,30996],{"class":347},[288,116232,113879],{"class":298},[288,116234,344],{"class":294},[288,116236,47506],{"class":347},[288,116238,116239,116241,116243],{"class":290,"line":206},[288,116240,17219],{"class":294},[288,116242,39046],{"class":347},[288,116244,114849],{"class":298},[19,116246,116247],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[280,116249,116250],{"className":30551,"code":115523,"language":30553,"meta":205,"style":205},[25,116251,116252],{"__ignoreMap":205},[288,116253,116254,116256,116258],{"class":290,"line":291},[288,116255,32120],{"class":294},[288,116257,114860],{"class":2135},[288,116259,114863],{"class":298},[19,116261,116262],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[280,116264,116266],{"className":30551,"code":116265,"language":30553,"meta":205,"style":205},"action = np.asarray(action, dtype=np.float32)\n",[25,116267,116268],{"__ignoreMap":205},[288,116269,116270,116272,116274,116276,116278,116280],{"class":290,"line":291},[288,116271,107615],{"class":298},[288,116273,344],{"class":294},[288,116275,114872],{"class":298},[288,116277,93673],{"class":5389},[288,116279,344],{"class":294},[288,116281,113969],{"class":298},[19,116283,116284,116285,28558],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[25,116286,116050],{},[280,116288,116290],{"className":30551,"code":116289,"language":30553,"meta":205,"style":205},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[25,116291,116292],{"__ignoreMap":205},[288,116293,116294,116296,116298,116300,116302,116304,116306],{"class":290,"line":291},[288,116295,107615],{"class":298},[288,116297,344],{"class":294},[288,116299,107620],{"class":298},[288,116301,30996],{"class":347},[288,116303,114891],{"class":298},[288,116305,30996],{"class":347},[288,116307,114896],{"class":298},[19,116309,116310],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[280,116312,116314],{"className":30551,"code":116313,"language":30553,"meta":205,"style":205},"self.data.ctrl[:] = action\n",[25,116315,116316],{"__ignoreMap":205},[288,116317,116318,116320,116322,116324],{"class":290,"line":291},[288,116319,30996],{"class":347},[288,116321,114907],{"class":298},[288,116323,344],{"class":294},[288,116325,107643],{"class":298},[19,116327,116328],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[280,116330,116332],{"className":30551,"code":116331,"language":30553,"meta":205,"style":205},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[25,116333,116334,116350],{"__ignoreMap":205},[288,116335,116336,116338,116340,116342,116344,116346,116348],{"class":290,"line":291},[288,116337,3197],{"class":294},[288,116339,101674],{"class":298},[288,116341,26216],{"class":294},[288,116343,32616],{"class":347},[288,116345,299],{"class":298},[288,116347,30996],{"class":347},[288,116349,114928],{"class":298},[288,116351,116352,116355,116357,116359,116361],{"class":290,"line":206},[288,116353,116354],{"class":298},"    mujoco.mj_step(",[288,116356,30996],{"class":347},[288,116358,114754],{"class":298},[288,116360,30996],{"class":347},[288,116362,114759],{"class":298},[19,116364,116365,116366,116369,116370,116372,116373,28558],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[25,116367,116368],{},"frame_skip=5","，所以外部调用一次 ",[25,116371,114050],{},"，内部实际执行 5 次 ",[25,116374,101388],{},[280,116376,116378],{"className":30551,"code":116377,"language":30553,"meta":205,"style":205},"self.steps += 1\n",[25,116379,116380],{"__ignoreMap":205},[288,116381,116382,116384,116386,116388],{"class":290,"line":291},[288,116383,30996],{"class":347},[288,116385,113879],{"class":298},[288,116387,9650],{"class":294},[288,116389,55872],{"class":347},[19,116391,116392],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[280,116394,116396],{"className":30551,"code":116395,"language":30553,"meta":205,"style":205},"obs = self._get_obs()\nreward = self._get_reward()\n",[25,116397,116398,116408],{"__ignoreMap":205},[288,116399,116400,116402,116404,116406],{"class":290,"line":291},[288,116401,111027],{"class":298},[288,116403,344],{"class":294},[288,116405,39046],{"class":347},[288,116407,114970],{"class":298},[288,116409,116410,116412,116414,116416],{"class":290,"line":206},[288,116411,111178],{"class":298},[288,116413,344],{"class":294},[288,116415,39046],{"class":347},[288,116417,114981],{"class":298},[19,116419,116420],{},"计算新的观测和奖励。",[280,116422,116424],{"className":30551,"code":116423,"language":30553,"meta":205,"style":205},"dist = float(np.linalg.norm(tip - target))\n",[25,116425,116426],{"__ignoreMap":205},[288,116427,116428,116430,116432,116434,116436,116438],{"class":290,"line":291},[288,116429,111769],{"class":298},[288,116431,344],{"class":294},[288,116433,109970],{"class":347},[288,116435,115024],{"class":298},[288,116437,829],{"class":294},[288,116439,115029],{"class":298},[19,116441,116442],{},"计算末端到目标的距离，并转换成 Python float。",[280,116444,116445],{"className":30551,"code":113850,"language":30553,"meta":205,"style":205},[25,116446,116447,116459],{"__ignoreMap":205},[288,116448,116449,116451,116453,116455,116457],{"class":290,"line":291},[288,116450,113857],{"class":298},[288,116452,344],{"class":294},[288,116454,113862],{"class":298},[288,116456,1207],{"class":294},[288,116458,113867],{"class":347},[288,116460,116461,116463,116465,116467,116469,116471,116473],{"class":290,"line":206},[288,116462,113872],{"class":298},[288,116464,344],{"class":294},[288,116466,39046],{"class":347},[288,116468,113879],{"class":298},[288,116470,1882],{"class":294},[288,116472,39046],{"class":347},[288,116474,113886],{"class":298},[19,116476,116477],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[280,116479,116481],{"className":30551,"code":116480,"language":30553,"meta":205,"style":205},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[25,116482,116483,116496],{"__ignoreMap":205},[288,116484,116485,116488,116490,116492,116494],{"class":290,"line":291},[288,116486,116487],{"class":298},"info ",[288,116489,344],{"class":294},[288,116491,4620],{"class":298},[288,116493,115075],{"class":403},[288,116495,115078],{"class":298},[288,116497,116498,116500],{"class":290,"line":206},[288,116499,17219],{"class":294},[288,116501,115085],{"class":298},[19,116503,116504,116507],{},[25,116505,116506],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[280,116509,116511],{"className":30551,"code":116510,"language":30553,"meta":205,"style":205},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[25,116512,116513,116522],{"__ignoreMap":205},[288,116514,116515,116518,116520],{"class":290,"line":291},[288,116516,116517],{"class":298},"env ",[288,116519,344],{"class":294},[288,116521,115115],{"class":298},[288,116523,116524,116526,116528,116530,116532,116534,116536],{"class":290,"line":206},[288,116525,113573],{"class":298},[288,116527,344],{"class":294},[288,116529,115125],{"class":298},[288,116531,114739],{"class":5389},[288,116533,344],{"class":294},[288,116535,490],{"class":347},[288,116537,305],{"class":298},[19,116539,116540,116541,116544],{},"创建环境并重置。",[25,116542,116543],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[280,116546,116548],{"className":30551,"code":116547,"language":30553,"meta":205,"style":205},"action = env.action_space.sample()\n",[25,116549,116550],{"__ignoreMap":205},[288,116551,116552,116554,116556],{"class":290,"line":291},[288,116553,107615],{"class":298},[288,116555,344],{"class":294},[288,116557,115194],{"class":298},[19,116559,116560],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116562,102489],{"id":102488},[19,116564,105657],{},[280,116566,116569],{"className":116567,"code":116568,"language":5360,"meta":205},[5358],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[25,116570,116568],{"__ignoreMap":205},[19,116572,116573],{},"这个环境已经具备强化学习环境的基本结构。",[19,116575,116576],{},"主函数里使用随机动作：",[280,116578,116579],{"className":30551,"code":116547,"language":30553,"meta":205,"style":205},[25,116580,116581],{"__ignoreMap":205},[288,116582,116583,116585,116587],{"class":290,"line":291},[288,116584,107615],{"class":298},[288,116586,344],{"class":294},[288,116588,115194],{"class":298},[19,116590,116591],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116593,102521],{"id":102520},[243,116595,116596,116599,116605,116614,116623,116632,116638],{},[246,116597,116598],{},"运行程序。",[246,116600,116601,116602,28558],{},"确认 ",[25,116603,116604],{},"obs.shape == (10,)",[246,116606,111354,116607,116610,116611,28558],{},[25,116608,116609],{},"env.action_space","，应类似 ",[25,116612,116613],{},"Box(-1.0, 1.0, (2,), float32)",[246,116615,105758,116616,116619,116620,28558],{},[25,116617,116618],{},"self.max_steps = 10","，确认环境会更快 ",[25,116621,116622],{},"truncated=True",[246,116624,102584,116625,102587,116628,116631],{},[25,116626,116627],{},"terminated = dist \u003C 0.05",[25,116629,116630],{},"dist \u003C 0.2","，观察是否更容易结束。",[246,116633,102584,116634,116637],{},[25,116635,116636],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[246,116639,116640,116641,116643,116644,116647],{},"在 ",[25,116642,116506],{}," 里加入 ",[25,116645,116646],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116649,102626],{"id":102625},[260,116651,116653],{"id":116652},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116655,116656,116657,116659],{},"Gymnasium 的 ",[25,116658,107307],{}," 返回 5 个值:",[280,116661,116663],{"className":30551,"code":116662,"language":30553,"meta":205,"style":205},"obs, reward, terminated, truncated, info\n",[25,116664,116665],{"__ignoreMap":205},[288,116666,116667],{"class":290,"line":291},[288,116668,116662],{"class":298},[19,116670,116671],{},"不是旧 Gym 的 4 个值。",[260,116673,116675,116678],{"id":116674},"datactrl-action-维度错误",[25,116676,116677],{},"data.ctrl[:] = action"," 维度错误",[19,116680,102696],{},[280,116682,116684],{"className":30551,"code":116683,"language":30553,"meta":205,"style":205},"print(self.model.nu)\nprint(action.shape)\n",[25,116685,116686,116697],{"__ignoreMap":205},[288,116687,116688,116690,116692,116694],{"class":290,"line":291},[288,116689,30588],{"class":347},[288,116691,299],{"class":298},[288,116693,30996],{"class":347},[288,116695,116696],{"class":298},".model.nu)\n",[288,116698,116699,116701],{"class":290,"line":206},[288,116700,30588],{"class":347},[288,116702,116703],{"class":298},"(action.shape)\n",[19,116705,116706],{},"两者必须匹配。",[260,116708,116710],{"id":116709},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116712,102635],{},[280,116714,116716],{"className":30551,"code":116715,"language":30553,"meta":205,"style":205},"mujoco.mj_forward(self.model, self.data)\n",[25,116717,116718],{"__ignoreMap":205},[288,116719,116720,116723,116725,116727,116729],{"class":290,"line":291},[288,116721,116722],{"class":298},"mujoco.mj_forward(",[288,116724,30996],{"class":347},[288,116726,114754],{"class":298},[288,116728,30996],{"class":347},[288,116730,114759],{"class":298},[260,116732,116734,116736],{"id":116733},"observation_space-维度和-obs-不一致",[25,116735,113773],{}," 维度和 obs 不一致",[19,116738,102748],{},[280,116740,116742],{"className":30551,"code":116741,"language":30553,"meta":205,"style":205},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[25,116743,116744,116754,116761],{"__ignoreMap":205},[288,116745,116746,116748,116750,116752],{"class":290,"line":291},[288,116747,111027],{"class":298},[288,116749,344],{"class":294},[288,116751,39046],{"class":347},[288,116753,114970],{"class":298},[288,116755,116756,116758],{"class":290,"line":206},[288,116757,30588],{"class":347},[288,116759,116760],{"class":298},"(obs.shape)\n",[288,116762,116763,116765,116767,116769],{"class":290,"line":1352},[288,116764,30588],{"class":347},[288,116766,299],{"class":298},[288,116768,30996],{"class":347},[288,116770,116771],{"class":298},".observation_space.shape)\n",[19,116773,116774],{},"两者必须一致。本章观测是：",[280,116776,116779],{"className":116777,"code":116778,"language":5360,"meta":205},[5358],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[25,116780,116778],{"__ignoreMap":205},[260,116782,116784],{"id":116783},"action-超过范围","action 超过范围",[19,116786,116787],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[280,116789,116790],{"className":30551,"code":116289,"language":30553,"meta":205,"style":205},[25,116791,116792],{"__ignoreMap":205},[288,116793,116794,116796,116798,116800,116802,116804,116806],{"class":290,"line":291},[288,116795,107615],{"class":298},[288,116797,344],{"class":294},[288,116799,107620],{"class":298},[288,116801,30996],{"class":347},[288,116803,114891],{"class":298},[288,116805,30996],{"class":347},[288,116807,114896],{"class":298},[19,116809,116810,116811,28558],{},"这能避免无效动作直接写入 ",[25,116812,101249],{},[260,116814,116816],{"id":116815},"忘记返回-info","忘记返回 info",[19,116818,116656,116819,101191,116821,116823],{},[25,116820,70229],{},[25,116822,107307],{}," 都会返回 info：",[280,116825,116826],{"className":30551,"code":113566,"language":30553,"meta":205,"style":205},[25,116827,116828,116836],{"__ignoreMap":205},[288,116829,116830,116832,116834],{"class":290,"line":291},[288,116831,113573],{"class":298},[288,116833,344],{"class":294},[288,116835,113578],{"class":298},[288,116837,116838,116840,116842],{"class":290,"line":206},[288,116839,113583],{"class":298},[288,116841,344],{"class":294},[288,116843,113588],{"class":298},[19,116845,116846,116847,28558],{},"即使暂时没有额外信息，也返回 ",[25,116848,32632],{},[14,116850,116852],{"id":116851},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116854,116855],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[243,116857,116858,116861,116864,116867,116870,116873],{},[246,116859,116860],{},"更稳定的 reward。",[246,116862,116863],{},"合理的 episode 长度。",[246,116865,116866],{},"可重复的随机目标采样。",[246,116868,116869],{},"render 接口。",[246,116871,116872],{},"环境注册代码。",[246,116874,116875],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116877,116878],{},"如果只是自己写训练循环，最小形式是：",[280,116880,116882],{"className":30551,"code":116881,"language":30553,"meta":205,"style":205},"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",[25,116883,116884,116892,116908,116912,116928,116937,116946,116956],{"__ignoreMap":205},[288,116885,116886,116888,116890],{"class":290,"line":291},[288,116887,116517],{"class":298},[288,116889,344],{"class":294},[288,116891,115115],{"class":298},[288,116893,116894,116896,116898,116900,116902,116904,116906],{"class":290,"line":206},[288,116895,113573],{"class":298},[288,116897,344],{"class":294},[288,116899,115125],{"class":298},[288,116901,114739],{"class":5389},[288,116903,344],{"class":294},[288,116905,490],{"class":347},[288,116907,305],{"class":298},[288,116909,116910],{"class":290,"line":1352},[288,116911,2572],{"emptyLinePlaceholder":217},[288,116913,116914,116916,116918,116920,116922,116924,116926],{"class":290,"line":1367},[288,116915,3197],{"class":294},[288,116917,101674],{"class":298},[288,116919,26216],{"class":294},[288,116921,32616],{"class":347},[288,116923,299],{"class":298},[288,116925,6583],{"class":347},[288,116927,30959],{"class":298},[288,116929,116930,116933,116935],{"class":290,"line":1373},[288,116931,116932],{"class":298},"    action ",[288,116934,344],{"class":294},[288,116936,115194],{"class":298},[288,116938,116939,116942,116944],{"class":290,"line":1387},[288,116940,116941],{"class":298},"    obs, reward, terminated, truncated, info ",[288,116943,344],{"class":294},[288,116945,113588],{"class":298},[288,116947,116948,116950,116952,116954],{"class":290,"line":1393},[288,116949,3273],{"class":294},[288,116951,115260],{"class":298},[288,116953,115263],{"class":294},[288,116955,115266],{"class":298},[288,116957,116958,116961,116963],{"class":290,"line":1484},[288,116959,116960],{"class":298},"        obs, info ",[288,116962,344],{"class":294},[288,116964,113578],{"class":298},[14,116966,116968],{"id":116967},"_9本章小结","9.本章小结",[19,116970,116971],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[280,116973,116976],{"className":116974,"code":116975,"language":5360,"meta":205},[5358],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[25,116977,116975],{"__ignoreMap":205},[19,116979,116980],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5299,116982,116983],{},"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":205,"searchDepth":206,"depth":206,"links":116985},[116986,116987,116988,116995,116999,117000,117001,117011,117012],{"id":100819,"depth":206,"text":100820},{"id":100942,"depth":206,"text":100943},{"id":101217,"depth":206,"text":101218,"children":116989},[116990,116992,116994],{"id":113797,"depth":1352,"text":116991},"terminated 和 truncated 的区别",{"id":113900,"depth":1352,"text":116993},"observation_space 和 action_space",{"id":114027,"depth":1352,"text":114028},{"id":101425,"depth":206,"text":101426,"children":116996},[116997,116998],{"id":101745,"depth":1352,"text":101745},{"id":101881,"depth":1352,"text":101881},{"id":102488,"depth":206,"text":102489},{"id":102520,"depth":206,"text":102521},{"id":102625,"depth":206,"text":102626,"children":117002},[117003,117004,117006,117007,117009,117010],{"id":116652,"depth":1352,"text":116653},{"id":116674,"depth":1352,"text":117005},"data.ctrl[:] = action 维度错误",{"id":116709,"depth":1352,"text":116710},{"id":116733,"depth":1352,"text":117008},"observation_space 维度和 obs 不一致",{"id":116783,"depth":1352,"text":116784},{"id":116815,"depth":1352,"text":116816},{"id":116851,"depth":206,"text":116852},{"id":116967,"depth":206,"text":116968},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113550,"description":205},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117019,"title":117020,"body":117021,"description":117444,"extension":215,"meta":117445,"navigation":217,"path":117446,"seo":117447,"stem":117448,"__hash__":117449},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117022,"toc":117434},[117023,117027,117030,117033,117053,117059,117065,117075,117078,117081,117101,117104,117108,117111,117117,117120,117134,117137,117140,117214,117217,117223,117226,117249,117252,117302,117305,117311,117314,117317,117320,117339,117342,117348,117351,117354,117357,117377,117380,117383,117386,117431],[10,117024,117026],{"id":117025},"mujoco-学习","MuJoCo 学习",[19,117028,117029],{},"初版",[19,117031,117032],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[243,117034,117035,117038,117041,117050],{},[246,117036,117037],{},"MuJoCo 模型文件在描述什么。",[246,117039,117040],{},"Python 代码怎样读取和推进仿真。",[246,117042,117043,511,117045,511,117047,117049],{},[25,117044,104203],{},[25,117046,104533],{},[25,117048,104536],{}," 这些数组为什么重要。",[246,117051,117052],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117054,117055,117056,117058],{},"默认环境为 Fedora 44、Python >= 3.10、",[25,117057,101200],{}," 官方 Python bindings。",[19,117060,117061,117062,117064],{},"注意：本文禁止使用 ",[25,117063,101185],{},"。所有示例均使用：",[280,117066,117067],{"className":30551,"code":101751,"language":30553,"meta":205,"style":205},[25,117068,117069],{"__ignoreMap":205},[288,117070,117071,117073],{"class":290,"line":291},[288,117072,30565],{"class":294},[288,117074,101474],{"class":298},[14,117076,117077],{"id":117077},"适合谁阅读",[19,117079,117080],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[243,117082,117083,117086,117089,117092],{},[246,117084,117085],{},"没学过 MuJoCo，只会一点 Python。",[246,117087,117088],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[246,117090,117091],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[246,117093,117094,117095,117097,117098,117100],{},"以前接触过 ",[25,117096,101185],{},"，现在想迁移到官方 ",[25,117099,101194],{}," Python bindings。",[19,117102,117103],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117105,117107],{"id":117106},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117109,117110],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[280,117112,117115],{"className":117113,"code":117114,"language":5360,"meta":205},[5358],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[25,117116,117114],{"__ignoreMap":205},[19,117118,117119],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[243,117121,117122,117125,117128,117131],{},[246,117123,117124],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[246,117126,117127],{},"快速测试控制算法，不必一开始就上真实机器人。",[246,117129,117130],{},"生成强化学习环境。",[246,117132,117133],{},"采集状态、动作、图像、奖励等训练数据。",[14,117135,117136],{"id":117136},"学习前的心智模型",[19,117138,117139],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[436,117141,117142,117154],{},[439,117143,117144],{},[442,117145,117146,117149,117152],{},[445,117147,117148],{"align":23909},"部分",[445,117150,117151],{"align":23909},"负责什么",[445,117153,21360],{"align":23909},[483,117155,117156,117167,117179,117191,117203],{},[442,117157,117158,117161,117164],{},[488,117159,117160],{"align":23909},"MJCF XML",[488,117162,117163],{"align":23909},"定义世界和机器人结构",[488,117165,117166],{"align":23909},"地面、盒子、关节、电机、摄像头",[442,117168,117169,117173,117176],{},[488,117170,117171],{"align":23909},[25,117172,100882],{},[488,117174,117175],{"align":23909},"编译后的静态模型",[488,117177,117178],{"align":23909},"有几个关节、有几个电机、时间步长是多少",[442,117180,117181,117185,117188],{},[488,117182,117183],{"align":23909},[25,117184,100892],{},[488,117186,117187],{"align":23909},"运行中的动态状态",[488,117189,117190],{"align":23909},"当前时间、位置、速度、电机输入",[442,117192,117193,117197,117200],{},[488,117194,117195],{"align":23909},[25,117196,101388],{},[488,117198,117199],{"align":23909},"推进一步物理仿真",[488,117201,117202],{"align":23909},"根据重力、力、碰撞更新状态",[442,117204,117205,117208,117211],{},[488,117206,117207],{"align":23909},"Viewer \u002F Renderer",[488,117209,117210],{"align":23909},"把仿真显示出来",[488,117212,117213],{"align":23909},"打开窗口或保存图片",[19,117215,117216],{},"一句话总结：",[280,117218,117221],{"className":117219,"code":117220,"language":5360,"meta":205},[5358],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[25,117222,117220],{"__ignoreMap":205},[19,117224,117225],{},"参考来源：",[1304,117227,117228,117235,117242],{},[246,117229,117230,117231],{},"MuJoCo Python 官方文档：",[104,117232,117233],{"href":117233,"rel":117234},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[108],[246,117236,117237,117238],{},"MuJoCo XML Reference：",[104,117239,117240],{"href":117240,"rel":117241},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[108],[246,117243,117244,117245],{},"MuJoCo Overview：",[104,117246,117247],{"href":117247,"rel":117248},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[108],[14,117250,117251],{"id":117251},"章节目录",[243,117253,117254,117260,117266,117272,117278,117284,117290,117296],{},[246,117255,117256],{},[104,117257,117259],{"href":117258},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[246,117261,117262],{},[104,117263,117265],{"href":117264},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[246,117267,117268],{},[104,117269,117271],{"href":117270},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[246,117273,117274],{},[104,117275,117277],{"href":117276},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[246,117279,117280],{},[104,117281,117283],{"href":117282},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[246,117285,117286],{},[104,117287,117289],{"href":117288},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[246,117291,117292],{},[104,117293,117295],{"href":117294},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[246,117297,117298],{},[104,117299,117301],{"href":117300},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117303,117304],{"id":117304},"推荐学习路线",[280,117306,117309],{"className":117307,"code":117308,"language":5360,"meta":205},[5358],"环境安装\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",[25,117310,117308],{"__ignoreMap":205},[19,117312,117313],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117315,117316],{"id":117316},"建议的目录结构",[19,117318,117319],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[280,117321,117323],{"className":23995,"code":117322,"language":23997,"meta":205,"style":205},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[25,117324,117325,117333],{"__ignoreMap":205},[288,117326,117327,117329,117331],{"class":290,"line":291},[288,117328,101439],{"class":2135},[288,117330,29389],{"class":347},[288,117332,101444],{"class":403},[288,117334,117335,117337],{"class":290,"line":206},[288,117336,101449],{"class":347},[288,117338,101444],{"class":403},[19,117340,117341],{},"每一章的代码都单独保存：",[280,117343,117346],{"className":117344,"code":117345,"language":5360,"meta":205},[5358],"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",[25,117347,117345],{"__ignoreMap":205},[19,117349,117350],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117352,117353],{"id":117353},"学习方法",[19,117355,117356],{},"每章建议按这个顺序操作：",[243,117358,117359,117362,117365,117368,117371,117374],{},[246,117360,117361],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[246,117363,117364],{},"复制最小可运行代码，保存成指定文件。",[246,117366,117367],{},"运行代码，确认没有报错。",[246,117369,117370],{},"对照“运行结果说明”理解输出。",[246,117372,117373],{},"做“验证步骤”，主动改一两个参数。",[246,117375,117376],{},"遇到报错先看“常见错误与解决方案”。",[19,117378,117379],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117381,117382],{"id":117382},"全局排错顺序",[19,117384,117385],{},"遇到问题时，按下面顺序查：",[243,117387,117388,117394,117400,117405,117408,117411,117418,117428],{},[246,117389,117390,117391],{},"Python 环境是否激活：",[25,117392,117393],{},"which python",[246,117395,117396,117397],{},"MuJoCo 是否能导入：",[25,117398,117399],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[246,117401,117402,117403],{},"是否误装了 ",[25,117404,101185],{},[246,117406,117407],{},"XML 标签是否闭合、属性是否拼写正确",[246,117409,117410],{},"actuator 引用的 joint 名字是否存在",[246,117412,117413,117415,117416],{},[25,117414,101249],{}," 的长度是否等于 ",[25,117417,102331],{},[246,117419,105758,117420,82712,117422,117424,117425],{},[25,117421,104203],{},[25,117423,104533],{}," 后是否调用了 ",[25,117426,117427],{},"mujoco.mj_forward",[246,117429,117430],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5299,117432,117433],{},"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":205,"searchDepth":206,"depth":206,"links":117435},[117436,117437,117438,117439,117440,117441,117442,117443],{"id":117077,"depth":206,"text":117077},{"id":117106,"depth":206,"text":117107},{"id":117136,"depth":206,"text":117136},{"id":117251,"depth":206,"text":117251},{"id":117304,"depth":206,"text":117304},{"id":117316,"depth":206,"text":117316},{"id":117353,"depth":206,"text":117353},{"id":117382,"depth":206,"text":117382},"仿真搭建。",{"category":23551},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117020,"description":117444},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117451,"title":117452,"body":117453,"description":214,"extension":215,"meta":117908,"navigation":217,"path":117909,"seo":117910,"stem":117911,"__hash__":117912},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117454,"toc":117906},[117455,117458,117461,117467,117903],[10,117456,117452],{"id":117457},"_1-最常用的基本操作更新",[19,117459,117460],{},"装linux系统教程：",[19,117462,117463],{},[104,117464,117465],{"href":117465,"rel":117466},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[108],[280,117468,117472],{"className":117469,"code":117470,"language":117471,"meta":205,"style":205},"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",[25,117473,117474,117479,117484,117493,117498,117507,117512,117532,117537,117548,117553,117562,117567,117595,117600,117619,117624,117643,117647,117652,117668,117672,117677,117707,117711,117716,117732,117736,117741,117756,117760,117765,117781,117785,117790,117802,117814,117818,117823,117840,117844,117849,117867,117871,117876,117885,117889,117894],{"__ignoreMap":205},[288,117475,117476],{"class":290,"line":291},[288,117477,117478],{"class":357},"#更新相关的知识\n",[288,117480,117481],{"class":290,"line":206},[288,117482,117483],{"class":357},"# 更新软件包列表（从服务器获取最新软件信息）\n",[288,117485,117486,117488,117491],{"class":290,"line":1352},[288,117487,24749],{"class":2135},[288,117489,117490],{"class":403}," apt",[288,117492,26415],{"class":403},[288,117494,117495],{"class":290,"line":1367},[288,117496,117497],{"class":357},"# 升级所有可更新的软件包（不删除旧包）\n",[288,117499,117500,117502,117504],{"class":290,"line":1373},[288,117501,24749],{"class":2135},[288,117503,117490],{"class":403},[288,117505,117506],{"class":403}," upgrade\n",[288,117508,117509],{"class":290,"line":1387},[288,117510,117511],{"class":357},"#更新和升级软件包\n",[288,117513,117514,117516,117518,117521,117523,117525,117527,117530],{"class":290,"line":1393},[288,117515,24749],{"class":2135},[288,117517,117490],{"class":403},[288,117519,117520],{"class":403}," update",[288,117522,26363],{"class":298},[288,117524,24749],{"class":2135},[288,117526,117490],{"class":403},[288,117528,117529],{"class":403}," upgrade",[288,117531,101154],{"class":347},[288,117533,117534],{"class":290,"line":1484},[288,117535,117536],{"class":357},"#列出可更新的软件包及版本信息\n",[288,117538,117539,117542,117545],{"class":290,"line":1490},[288,117540,117541],{"class":2135},"apt",[288,117543,117544],{"class":403}," list",[288,117546,117547],{"class":347}," --upgradable\n",[288,117549,117550],{"class":290,"line":1502},[288,117551,117552],{"class":357},"#彻底升级（处理依赖关系，可能删除旧包）\n",[288,117554,117555,117557,117559],{"class":290,"line":1784},[288,117556,24749],{"class":2135},[288,117558,117490],{"class":403},[288,117560,117561],{"class":403}," full-upgrade\n",[288,117563,117564],{"class":290,"line":1789},[288,117565,117566],{"class":357},"#设置指定版本\n",[288,117568,117569,117571,117573,117575,117577,117580,117582,117584,117586,117588,117591,117593],{"class":290,"line":1795},[288,117570,24749],{"class":2135},[288,117572,117490],{"class":403},[288,117574,24007],{"class":403},[288,117576,29075],{"class":294},[288,117578,117579],{"class":403},"package_nam",[288,117581,373],{"class":298},[288,117583,1257],{"class":294},[288,117585,344],{"class":403},[288,117587,1207],{"class":294},[288,117589,117590],{"class":403},"version_numbe",[288,117592,967],{"class":298},[288,117594,51480],{"class":294},[288,117596,117597],{"class":290,"line":1800},[288,117598,117599],{"class":357},"#只安装软件包不升级\n",[288,117601,117602,117604,117606,117608,117610,117612,117614,117616],{"class":290,"line":1814},[288,117603,24749],{"class":2135},[288,117605,117490],{"class":403},[288,117607,24007],{"class":403},[288,117609,29075],{"class":294},[288,117611,117579],{"class":403},[288,117613,373],{"class":298},[288,117615,1257],{"class":294},[288,117617,117618],{"class":347}," --no-upgrade\n",[288,117620,117621],{"class":290,"line":1819},[288,117622,117623],{"class":357},"#只升级，不存在就不安装\n",[288,117625,117626,117628,117630,117632,117634,117636,117638,117640],{"class":290,"line":1825},[288,117627,24749],{"class":2135},[288,117629,117490],{"class":403},[288,117631,24007],{"class":403},[288,117633,29075],{"class":294},[288,117635,117579],{"class":403},[288,117637,373],{"class":298},[288,117639,1257],{"class":294},[288,117641,117642],{"class":347}," --only-upgrade\n",[288,117644,117645],{"class":290,"line":1846},[288,117646,2572],{"emptyLinePlaceholder":217},[288,117648,117649],{"class":290,"line":1851},[288,117650,117651],{"class":357},"#安装指定的软件命令\n",[288,117653,117654,117656,117658,117660,117662,117664,117666],{"class":290,"line":1865},[288,117655,24749],{"class":2135},[288,117657,117490],{"class":403},[288,117659,24007],{"class":403},[288,117661,29075],{"class":294},[288,117663,117579],{"class":403},[288,117665,373],{"class":298},[288,117667,51480],{"class":294},[288,117669,117670],{"class":290,"line":1870},[288,117671,2572],{"emptyLinePlaceholder":217},[288,117673,117674],{"class":290,"line":1899},[288,117675,117676],{"class":357},"#安装多个软件包\n",[288,117678,117679,117681,117683,117685,117687,117690,117693,117695,117697,117700,117702,117704],{"class":290,"line":1904},[288,117680,24749],{"class":2135},[288,117682,117490],{"class":403},[288,117684,24007],{"class":403},[288,117686,29075],{"class":294},[288,117688,117689],{"class":403},"package_",[288,117691,117692],{"class":294},"1>",[288,117694,29075],{"class":294},[288,117696,117689],{"class":403},[288,117698,117699],{"class":294},"2>",[288,117701,29075],{"class":294},[288,117703,117689],{"class":403},[288,117705,117706],{"class":294},"3>\n",[288,117708,117709],{"class":290,"line":1921},[288,117710,2572],{"emptyLinePlaceholder":217},[288,117712,117713],{"class":290,"line":1926},[288,117714,117715],{"class":357},"#更新指定的软件命令\n",[288,117717,117718,117720,117722,117724,117726,117728,117730],{"class":290,"line":1931},[288,117719,24749],{"class":2135},[288,117721,117490],{"class":403},[288,117723,117520],{"class":403},[288,117725,29075],{"class":294},[288,117727,117579],{"class":403},[288,117729,373],{"class":298},[288,117731,51480],{"class":294},[288,117733,117734],{"class":290,"line":1936},[288,117735,2572],{"emptyLinePlaceholder":217},[288,117737,117738],{"class":290,"line":1950},[288,117739,117740],{"class":357},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[288,117742,117743,117745,117748,117750,117752,117754],{"class":290,"line":1955},[288,117744,117541],{"class":2135},[288,117746,117747],{"class":403}," show",[288,117749,29075],{"class":294},[288,117751,117579],{"class":403},[288,117753,373],{"class":298},[288,117755,51480],{"class":294},[288,117757,117758],{"class":290,"line":2749},[288,117759,2572],{"emptyLinePlaceholder":217},[288,117761,117762],{"class":290,"line":2763},[288,117763,117764],{"class":357},"#删除软件包命令\n",[288,117766,117767,117769,117771,117773,117775,117777,117779],{"class":290,"line":2771},[288,117768,24749],{"class":2135},[288,117770,117490],{"class":403},[288,117772,26252],{"class":403},[288,117774,29075],{"class":294},[288,117776,117579],{"class":403},[288,117778,373],{"class":298},[288,117780,51480],{"class":294},[288,117782,117783],{"class":290,"line":2776},[288,117784,2572],{"emptyLinePlaceholder":217},[288,117786,117787],{"class":290,"line":2782},[288,117788,117789],{"class":357},"# 清理旧版本和缓存（释放磁盘空间）\n",[288,117791,117792,117794,117796,117799],{"class":290,"line":2788},[288,117793,24749],{"class":2135},[288,117795,117490],{"class":403},[288,117797,117798],{"class":403}," autoremove",[288,117800,117801],{"class":357},"  # 删除不再需要的依赖和库文件\n",[288,117803,117804,117806,117808,117811],{"class":290,"line":2793},[288,117805,24749],{"class":2135},[288,117807,117490],{"class":403},[288,117809,117810],{"class":403}," clean",[288,117812,117813],{"class":357},"       # 清理下载的缓存包\n",[288,117815,117816],{"class":290,"line":8121},[288,117817,2572],{"emptyLinePlaceholder":217},[288,117819,117820],{"class":290,"line":8145},[288,117821,117822],{"class":357},"#移除软件包及配置文件\n",[288,117824,117825,117827,117829,117832,117834,117836,117838],{"class":290,"line":8150},[288,117826,24749],{"class":2135},[288,117828,117490],{"class":403},[288,117830,117831],{"class":403}," purge",[288,117833,29075],{"class":294},[288,117835,117579],{"class":403},[288,117837,373],{"class":298},[288,117839,51480],{"class":294},[288,117841,117842],{"class":290,"line":8156},[288,117843,2572],{"emptyLinePlaceholder":217},[288,117845,117846],{"class":290,"line":8183},[288,117847,117848],{"class":357},"#查找软件包命令\n",[288,117850,117851,117853,117855,117858,117860,117863,117865],{"class":290,"line":8188},[288,117852,24749],{"class":2135},[288,117854,117490],{"class":403},[288,117856,117857],{"class":403}," search",[288,117859,29075],{"class":294},[288,117861,117862],{"class":403},"keywor",[288,117864,611],{"class":298},[288,117866,51480],{"class":294},[288,117868,117869],{"class":290,"line":8194},[288,117870,2572],{"emptyLinePlaceholder":217},[288,117872,117873],{"class":290,"line":8206},[288,117874,117875],{"class":357},"#列出所有已安装的包\n",[288,117877,117878,117880,117882],{"class":290,"line":8218},[288,117879,117541],{"class":2135},[288,117881,117544],{"class":403},[288,117883,117884],{"class":347}," --installed\n",[288,117886,117887],{"class":290,"line":8230},[288,117888,2572],{"emptyLinePlaceholder":217},[288,117890,117891],{"class":290,"line":9889},[288,117892,117893],{"class":357},"#列出所有已安装的包的版本信息\n",[288,117895,117896,117898,117900],{"class":290,"line":9914},[288,117897,117541],{"class":2135},[288,117899,117544],{"class":403},[288,117901,117902],{"class":347}," --all-versions\n",[5299,117904,117905],{},"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":205,"searchDepth":206,"depth":206,"links":117907},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117452,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117914,"title":117915,"body":117916,"description":214,"extension":215,"meta":118657,"navigation":217,"path":118658,"seo":118659,"stem":118660,"__hash__":118661},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117917,"toc":118644},[117918,117921,117925,117928,117934,117938,117942,117948,117953,117958,117963,117968,117973,117976,117979,117982,117985,117989,117992,117997,118000,118005,118008,118013,118020,118023,118026,118029,118032,118035,118046,118050,118054,118059,118064,118068,118073,118077,118082,118086,118090,118095,118098,118143,118148,118152,118156,118161,118167,118172,118182,118187,118197,118202,118207,118234,118238,118241,118246,118249,118274,118278,118283,118286,118291,118296,118316,118321,118324,118339,118343,118396,118399,118404,118408,118411,118426,118429,118432,118437,118441,118445,118448,118452,118456,118459,118464,118469,118473,118480,118488,118491,118498,118503,118508,118511,118516,118523,118528,118535,118539,118541,118546,118550,118553,118556,118561,118564,118569,118572,118577,118582,118587,118591,118596,118600,118641],[10,117919,117915],{"id":117920},"_2-linux装机教程",[14,117922,117924],{"id":117923},"_21-实体机","2.1 实体机",[19,117926,117927],{},"使用清华源：（Ubuntu24.04）",[19,117929,117930],{},[104,117931,117932],{"href":117932,"rel":117933},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[108],[14,117935,117937],{"id":117936},"_22-普通虚拟机","2.2 普通虚拟机",[260,117939,117941],{"id":117940},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117943,117944],{},[104,117945,117946],{"href":117946,"rel":117947},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[108],[19,117949,117950],{},[200,117951],{"alt":205,"src":117952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117954,117955],{},[200,117956],{"alt":205,"src":117957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117959,117960],{},[200,117961],{"alt":205,"src":117962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117964,117965],{},[200,117966],{"alt":205,"src":117967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117969,117970],{},[200,117971],{"alt":205,"src":117972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117974,117975],{},"内存4G（4096MB）；",[19,117977,117978],{},"CPU给4个核；",[19,117980,117981],{},"硬盘动态分配60G；",[19,117983,117984],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[260,117986,117988],{"id":117987},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117990,117991],{},"按照1.1的步骤下载Ubuntu",[19,117993,117994],{},[200,117995],{"alt":205,"src":117996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117998,117999],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118001,118002],{},[200,118003],{"alt":205,"src":118004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118006,118007],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118009,118010],{},[200,118011],{"alt":205,"src":118012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118014,118015,118016,118019],{},"选择“正常安装”(找不到都用Alt+F7)， ",[448,118017,118018],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118021,118022],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118024,118025],{},"将改动写入磁盘吗 继续",[19,118027,118028],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118030,118031],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118033,118034],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118036,118037,118038,118041,118042,118045],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[448,118039,118040],{},"除了"," 选不发送系统信息与不升级之外， ",[448,118043,118044],{},"其它"," 都跳过或前进）",[260,118047,118049],{"id":118048},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22171,118051,118053],{"id":118052},"_2231-全屏","2.2.3.1 全屏",[19,118055,118056],{},[200,118057],{"alt":205,"src":118058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118060,118061],{},[200,118062],{"alt":205,"src":118063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22171,118065,118067],{"id":118066},"_2232-文件交换","2.2.3.2 文件交换",[19,118069,118070],{},[200,118071],{"alt":205,"src":118072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22171,118074,118076],{"id":118075},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118078,118079],{},[200,118080],{"alt":205,"src":118081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118083,118085],{"id":118084},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[260,118087,118089],{"id":118088},"_231-简介与优缺点","2.3.1 简介与优缺点",[243,118091,118092],{},[246,118093,118094],{},"什么情况下推荐？",[19,118096,118097],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[243,118099,118100],{"start":206},[246,118101,118102,118103],{},"优缺点：",[243,118104,118105,118135],{},[246,118106,118107,118108],{},"优点：",[243,118109,118110,118113,118120,118123,118126,118129,118132],{},[246,118111,118112],{},"WSL2是最好的Linux发行版;(bushi)",[246,118114,118115,118116,118119],{},"性能损耗极低。且比在Windows上跑深度性能 ",[448,118117,118118],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[246,118121,118122],{},"非常方便调用USB设备，可以USB直通;",[246,118124,118125],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[246,118127,118128],{},"非常方便Win与WSL2互相传文件等协同操作;",[246,118130,118131],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[246,118133,118134],{},"非常方便使用Windows的VScode远程开发;",[246,118136,118137,118138],{},"缺点：",[243,118139,118140],{},[246,118141,118142],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118144,118145],{},[200,118146],{"alt":205,"src":118147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[260,118149,118151],{"id":118150},"_232-安装教程","2.3.2 安装教程",[22171,118153,118155],{"id":118154},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[243,118157,118158],{},[246,118159,118160],{},"方法一(图形界面)",[19,118162,118163,118164,24791],{},"用Win+R输入",[25,118165,118166],{},"appwiz.cpl",[19,118168,118169],{},[200,118170],{"alt":205,"src":118171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118173,118174,118175,118178,118179,26646],{},"点击OK进入 ",[448,118176,118177],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[448,118180,118181],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118183,118184],{},[200,118185],{"alt":205,"src":118186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118188,118189,118190,101191,118193,118196],{},"选择 ",[448,118191,118192],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[448,118194,118195],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118198,118199],{},[200,118200],{"alt":205,"src":118201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[243,118203,118204],{"start":206},[246,118205,118206],{},"方法二(命令行)",[280,118208,118212],{"className":118209,"code":118210,"language":118211,"meta":205,"style":205},"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",[25,118213,118214,118219,118224,118229],{"__ignoreMap":205},[288,118215,118216],{"class":290,"line":291},[288,118217,118218],{},"# 开启 Linux 子系统\n",[288,118220,118221],{"class":290,"line":206},[288,118222,118223],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[288,118225,118226],{"class":290,"line":1352},[288,118227,118228],{},"# 开启虚拟机平台\n",[288,118230,118231],{"class":290,"line":1367},[288,118232,118233],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22171,118235,118237],{"id":118236},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118239,118240],{},"用管理员权限打开powershell",[19,118242,118243],{},[200,118244],{"alt":205,"src":118245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118247,118248],{},"升级WSL并设置默认版本为WSL2",[280,118250,118252],{"className":118209,"code":118251,"language":118211,"meta":205,"style":205},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[25,118253,118254,118259,118264,118269],{"__ignoreMap":205},[288,118255,118256],{"class":290,"line":291},[288,118257,118258],{},"# 更新 wsl\n",[288,118260,118261],{"class":290,"line":206},[288,118262,118263],{},"wsl --update\n",[288,118265,118266],{"class":290,"line":1352},[288,118267,118268],{},"# 将 wsl 版本设置为 wsl2\n",[288,118270,118271],{"class":290,"line":1367},[288,118272,118273],{},"wsl --set-default-version 2\n",[22171,118275,118277],{"id":118276},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[243,118279,118280],{},[246,118281,118282],{},"方式一(商店下载)",[19,118284,118285],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118287,118288],{},[200,118289],{"alt":205,"src":118290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[243,118292,118293],{"start":206},[246,118294,118295],{},"方式二(命令行安装)",[280,118297,118299],{"className":118209,"code":118298,"language":118211,"meta":205,"style":205},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[25,118300,118301,118306,118311],{"__ignoreMap":205},[288,118302,118303],{"class":290,"line":291},[288,118304,118305],{},"# 列出可安装的 Linux 版本\n",[288,118307,118308],{"class":290,"line":206},[288,118309,118310],{},"#（需要科学手段）\n",[288,118312,118313],{"class":290,"line":1352},[288,118314,118315],{},"wsl --list --online\n",[19,118317,118318],{},[200,118319],{"alt":205,"src":118320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118322,118323],{},"选择对应发行版并安装",[280,118325,118327],{"className":118209,"code":118326,"language":118211,"meta":205,"style":205},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[25,118328,118329,118334],{"__ignoreMap":205},[288,118330,118331],{"class":290,"line":291},[288,118332,118333],{},"# Ubuntu安装完毕后需要重启系统\n",[288,118335,118336],{"class":290,"line":206},[288,118337,118338],{},"wsl --install -d Ubuntu-24.04\n",[22171,118340,118342],{"id":118341},"_2324-查看系统状态","2.3.2.4 查看系统状态",[280,118344,118346],{"className":118209,"code":118345,"language":118211,"meta":205,"style":205},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[25,118347,118348,118353,118358,118363,118368,118372,118376,118381,118386,118391],{"__ignoreMap":205},[288,118349,118350],{"class":290,"line":291},[288,118351,118352],{},"# 查看 wsl\n",[288,118354,118355],{"class":290,"line":206},[288,118356,118357],{},"wsl -l\n",[288,118359,118360],{"class":290,"line":1352},[288,118361,118362],{},"# 查看 wsl 运行版本或模式\n",[288,118364,118365],{"class":290,"line":1367},[288,118366,118367],{},"wsl -l -v\n",[288,118369,118370],{"class":290,"line":1373},[288,118371,2572],{"emptyLinePlaceholder":217},[288,118373,118374],{"class":290,"line":1387},[288,118375,2572],{"emptyLinePlaceholder":217},[288,118377,118378],{"class":290,"line":1393},[288,118379,118380],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[288,118382,118383],{"class":290,"line":1484},[288,118384,118385],{},"wsl --set-version \u003Cdistro> 2\n",[288,118387,118388],{"class":290,"line":1490},[288,118389,118390],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[288,118392,118393],{"class":290,"line":1502},[288,118394,118395],{},"wsl --unregister \u003Cdistro>\n",[19,118397,118398],{},"输出Version为2即正常",[19,118400,118401],{},[200,118402],{"alt":205,"src":118403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22171,118405,118407],{"id":118406},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118409,118410],{},"直接在Powershell里输入wsl命令进入子系统",[280,118412,118414],{"className":118209,"code":118413,"language":118211,"meta":205,"style":205},"# 进入子系统\nwsl\n",[25,118415,118416,118421],{"__ignoreMap":205},[288,118417,118418],{"class":290,"line":291},[288,118419,118420],{},"# 进入子系统\n",[288,118422,118423],{"class":290,"line":206},[288,118424,118425],{},"wsl\n",[19,118427,118428],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118430,118431],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118433,118434],{},[200,118435],{"alt":205,"src":118436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[260,118438,118440],{"id":118439},"_233-配置各种环境","2.3.3 配置各种环境",[22171,118442,118444],{"id":118443},"_2331-换源","2.3.3.1 换源",[19,118446,118447],{},"(同实体机LINUX，往下找教程)",[22171,118449,118451],{"id":118450},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23083,118453,118455],{"id":118454},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118457,118458],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118460,118461],{},[200,118462],{"alt":205,"src":118463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118465,118466],{},[200,118467],{"alt":205,"src":118468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23083,118470,118472],{"id":118471},"_23322-cuda","2.3.3.2.2 CUDA",[19,118474,118475,118476],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[104,118477,118478],{"href":118478,"rel":118479},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[108],[19,118481,118482,118485],{},[200,118483],{"alt":205,"src":118484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[200,118486],{"alt":205,"src":118487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118489,118490],{},"在下方的网站，选择合适的版本。",[19,118492,118493,118494],{},"WSL2 专属 CUDA 指南：",[104,118495,118496],{"href":118496,"rel":118497},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[108],[19,118499,118500],{},[448,118501,118502],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118504,118505],{},[200,118506],{"alt":205,"src":118507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118509,118510],{},"挨行敲一遍",[19,118512,118513],{},[200,118514],{"alt":205,"src":118515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118517,118518,118519,118522],{},"敲完后，输入",[25,118520,118521],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118524,118525],{},[200,118526],{"alt":205,"src":118527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118529,118530,118531,118534],{},"（请详看下方教程的",[448,118532,118533],{},"安装CUDA的配置环境来看","如何配置环境）",[23083,118536,118538],{"id":118537},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118540,118447],{},[19,118542,118543],{},[200,118544],{"alt":205,"src":118545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22171,118547,118549],{"id":118548},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118551,118552],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118554,118555],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118557,118558],{},[200,118559],{"alt":205,"src":118560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118562,118563],{},"连接WSL2",[19,118565,118566],{},[200,118567],{"alt":205,"src":118568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118570,118571],{},"远程开发成功。",[19,118573,118574],{},[200,118575],{"alt":205,"src":118576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118578,118579],{},[200,118580],{"alt":205,"src":118581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118583,118584],{},[200,118585],{"alt":205,"src":118586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22171,118588,118590],{"id":118589},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118592,118593],{},[200,118594],{"alt":205,"src":118595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22171,118597,118599],{"id":118598},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[280,118601,118603],{"className":117469,"code":118602,"language":117471,"meta":205,"style":205},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[25,118604,118605,118613,118621,118632,118636],{"__ignoreMap":205},[288,118606,118607,118609,118611],{"class":290,"line":291},[288,118608,24749],{"class":2135},[288,118610,117490],{"class":403},[288,118612,26415],{"class":403},[288,118614,118615,118617,118619],{"class":290,"line":206},[288,118616,24749],{"class":2135},[288,118618,117490],{"class":403},[288,118620,117506],{"class":403},[288,118622,118623,118625,118627,118629],{"class":290,"line":1352},[288,118624,24749],{"class":2135},[288,118626,117490],{"class":403},[288,118628,24007],{"class":403},[288,118630,118631],{"class":403}," mesa-utils\n",[288,118633,118634],{"class":290,"line":1367},[288,118635,2572],{"emptyLinePlaceholder":217},[288,118637,118638],{"class":290,"line":1373},[288,118639,118640],{"class":357},"#然后重启wsl2即可\n",[5299,118642,118643],{},"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":205,"searchDepth":206,"depth":206,"links":118645},[118646,118647,118652],{"id":117923,"depth":206,"text":117924},{"id":117936,"depth":206,"text":117937,"children":118648},[118649,118650,118651],{"id":117940,"depth":1352,"text":117941},{"id":117987,"depth":1352,"text":117988},{"id":118048,"depth":1352,"text":118049},{"id":118084,"depth":206,"text":118085,"children":118653},[118654,118655,118656],{"id":118088,"depth":1352,"text":118089},{"id":118150,"depth":1352,"text":118151},{"id":118439,"depth":1352,"text":118440},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117915,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118663,"title":118664,"body":118665,"description":214,"extension":215,"meta":121601,"navigation":217,"path":121602,"seo":121603,"stem":121604,"__hash__":121605},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118666,"toc":121573},[118667,118670,118674,118680,118684,118690,118694,118882,118885,118890,118894,118898,118901,118904,118910,118915,118918,118921,118926,118959,118964,118968,119045,119048,119053,119057,119060,119099,119102,119111,119129,119134,119141,119258,119263,119266,119293,119298,119302,119311,119361,119368,119372,119375,119389,119396,119430,119435,119439,119462,119465,119470,119474,119477,119480,119483,119525,119529,119532,119535,119576,119580,119584,119587,119592,119597,119600,119623,119626,119634,119639,119642,119647,119652,119655,119660,119664,119669,119692,119697,119759,119767,119772,119777,119780,119785,119788,119793,119798,119816,119821,119827,119832,119846,119850,119853,119856,119859,119902,119905,119910,120011,120014,120019,120023,120027,120064,120068,120072,120076,120122,120126,120171,120175,120182,120190,120245,120248,120325,120328,120351,120355,120358,120363,120368,120376,120379,120384,120389,120394,120397,120402,120411,120414,120419,120422,120493,120498,120501,120506,120509,120514,120517,120522,120525,120530,120535,120538,120613,120616,120629,120634,120637,120651,120654,120683,120688,120717,120720,120725,120729,120734,120743,120746,120751,120754,120759,120762,120765,120770,120773,120778,120783,120786,120791,120794,120919,120924,120954,120957,120962,120967,120984,120987,121030,121033,121060,121065,121078,121221,121225,121230,121244,121247,121298,121301,121331,121334,121350,121355,121369,121372,121439,121444,121453,121458,121461,121473,121478,121485,121509,121512,121517,121520,121539,121544,121551,121563,121570],[10,118668,118664],{"id":118669},"_3-安装必备配置",[14,118671,118673],{"id":118672},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[280,118675,118678],{"className":118676,"code":118677,"language":5360},[5358],"  打开下方网站（注意，该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",[25,118679,118677],{"__ignoreMap":205},[260,118681,118683],{"id":118682},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[280,118685,118688],{"className":118686,"code":118687,"language":5360},[5358],"  输入以下命令\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",[25,118689,118687],{"__ignoreMap":205},[260,118691,118693],{"id":118692},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[280,118695,118699],{"className":118696,"code":118697,"language":118698,"meta":205,"style":205},"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",[25,118700,118701,118709,118720,118732,118746,118750,118760,118765,118769,118773,118778,118782,118794,118798,118803,118807,118818,118822,118838,118842,118853,118857,118862,118866,118874],{"__ignoreMap":205},[288,118702,118703,118705,118707],{"class":290,"line":291},[288,118704,24749],{"class":2135},[288,118706,117490],{"class":403},[288,118708,26415],{"class":403},[288,118710,118711,118713,118715,118717],{"class":290,"line":206},[288,118712,24749],{"class":2135},[288,118714,117490],{"class":403},[288,118716,24007],{"class":403},[288,118718,118719],{"class":403}," vim\n",[288,118721,118722,118724,118727,118729],{"class":290,"line":1352},[288,118723,24749],{"class":2135},[288,118725,118726],{"class":403}," rm",[288,118728,25498],{"class":347},[288,118730,118731],{"class":403}," \u002Fetc\u002Fapt\u002Fsources.list\n",[288,118733,118734,118736,118738,118740,118743],{"class":290,"line":1367},[288,118735,24749],{"class":2135},[288,118737,118726],{"class":403},[288,118739,25498],{"class":347},[288,118741,118742],{"class":403}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[288,118744,118745],{"class":347},"**\n",[288,118747,118748],{"class":290,"line":1373},[288,118749,2572],{"emptyLinePlaceholder":217},[288,118751,118752,118754,118757],{"class":290,"line":1387},[288,118753,24749],{"class":2135},[288,118755,118756],{"class":403}," vim",[288,118758,118759],{"class":403}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[288,118761,118762],{"class":290,"line":1393},[288,118763,118764],{"class":403},"```\n",[288,118766,118767],{"class":290,"line":1484},[288,118768,2572],{"emptyLinePlaceholder":217},[288,118770,118771],{"class":290,"line":1490},[288,118772,2572],{"emptyLinePlaceholder":217},[288,118774,118775],{"class":290,"line":1502},[288,118776,118777],{"class":2135},"选择好Ubuntu版本后，复制下方的内容。\n",[288,118779,118780],{"class":290,"line":1784},[288,118781,2572],{"emptyLinePlaceholder":217},[288,118783,118784,118786,118789,118792],{"class":290,"line":1789},[288,118785,525],{"class":294},[288,118787,118788],{"class":403},"[](",[288,118790,118791],{"class":2135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[288,118793,305],{"class":403},[288,118795,118796],{"class":290,"line":1795},[288,118797,2572],{"emptyLinePlaceholder":217},[288,118799,118800],{"class":290,"line":1800},[288,118801,118802],{"class":2135},"粘贴进去\n",[288,118804,118805],{"class":290,"line":1814},[288,118806,2572],{"emptyLinePlaceholder":217},[288,118808,118809,118811,118813,118816],{"class":290,"line":1819},[288,118810,525],{"class":294},[288,118812,118788],{"class":403},[288,118814,118815],{"class":2135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[288,118817,305],{"class":403},[288,118819,118820],{"class":290,"line":1825},[288,118821,2572],{"emptyLinePlaceholder":217},[288,118823,118824,118827,118830,118833,118835],{"class":290,"line":1846},[288,118825,118826],{"class":2135},"按一下ESC，然后英文冒号，输入",[288,118828,118829],{"class":403}," `",[288,118831,118832],{"class":2135},":wq!",[288,118834,1269],{"class":403},[288,118836,118837],{"class":2135},"然后回车\n",[288,118839,118840],{"class":290,"line":1851},[288,118841,2572],{"emptyLinePlaceholder":217},[288,118843,118844,118846,118848,118851],{"class":290,"line":1865},[288,118845,525],{"class":294},[288,118847,118788],{"class":403},[288,118849,118850],{"class":2135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[288,118852,305],{"class":403},[288,118854,118855],{"class":290,"line":1870},[288,118856,2572],{"emptyLinePlaceholder":217},[288,118858,118859],{"class":290,"line":1899},[288,118860,118861],{"class":2135},"输入以下命令\n",[288,118863,118864],{"class":290,"line":1904},[288,118865,2572],{"emptyLinePlaceholder":217},[288,118867,118868,118871],{"class":290,"line":1921},[288,118869,118870],{"class":403},"```",[288,118872,118873],{"class":2135},"Bash\n",[288,118875,118876,118878,118880],{"class":290,"line":1926},[288,118877,24749],{"class":2135},[288,118879,117490],{"class":403},[288,118881,26415],{"class":403},[19,118883,118884],{},"这里被替换成对应学校则成功",[19,118886,118887],{},[200,118888],{"alt":205,"src":118889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118891,118893],{"id":118892},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[260,118895,118897],{"id":118896},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118899,118900],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118902,118903],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118905,118906],{},[104,118907,118908],{"href":118908,"rel":118909},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[108],[19,118911,118912],{},[200,118913],{"alt":205,"src":118914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118916,118917],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118919,118920],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118922,118923],{},[200,118924],{"alt":205,"src":118925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[280,118927,118929],{"className":117469,"code":118928,"language":117471,"meta":205,"style":205},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[25,118930,118931,118936,118943,118948],{"__ignoreMap":205},[288,118932,118933],{"class":290,"line":291},[288,118934,118935],{"class":357},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[288,118937,118938,118940],{"class":290,"line":206},[288,118939,101449],{"class":347},[288,118941,118942],{"class":403}," ~\u002FDownloads\n",[288,118944,118945],{"class":290,"line":1352},[288,118946,118947],{"class":357},"#下方chrome安装包名不一定是这个，根据名字来看\n",[288,118949,118950,118952,118954,118956],{"class":290,"line":1367},[288,118951,24749],{"class":2135},[288,118953,117490],{"class":403},[288,118955,24007],{"class":403},[288,118957,118958],{"class":403}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118960,118961],{},[200,118962],{"alt":205,"src":118963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[260,118965,118967],{"id":118966},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[280,118969,118971],{"className":117469,"code":118970,"language":117471,"meta":205,"style":205},"# 老版\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",[25,118972,118973,118978,118986,118997,119002,119006,119011,119021,119029,119040],{"__ignoreMap":205},[288,118974,118975],{"class":290,"line":291},[288,118976,118977],{"class":357},"# 老版\n",[288,118979,118980,118982,118984],{"class":290,"line":206},[288,118981,24749],{"class":2135},[288,118983,117490],{"class":403},[288,118985,26415],{"class":403},[288,118987,118988,118990,118992,118994],{"class":290,"line":1352},[288,118989,24749],{"class":2135},[288,118991,117490],{"class":403},[288,118993,24007],{"class":403},[288,118995,118996],{"class":403}," neofetch\n",[288,118998,118999],{"class":290,"line":1367},[288,119000,119001],{"class":2135},"neofetch\n",[288,119003,119004],{"class":290,"line":1373},[288,119005,2572],{"emptyLinePlaceholder":217},[288,119007,119008],{"class":290,"line":1387},[288,119009,119010],{"class":357},"# 新版\n",[288,119012,119013,119015,119018],{"class":290,"line":1393},[288,119014,24749],{"class":2135},[288,119016,119017],{"class":403}," add-apt-repository",[288,119019,119020],{"class":403}," ppa:zhangsongcui3371\u002Ffastfetch\n",[288,119022,119023,119025,119027],{"class":290,"line":1484},[288,119024,24749],{"class":2135},[288,119026,117490],{"class":403},[288,119028,26415],{"class":403},[288,119030,119031,119033,119035,119037],{"class":290,"line":1490},[288,119032,24749],{"class":2135},[288,119034,117490],{"class":403},[288,119036,24007],{"class":403},[288,119038,119039],{"class":403}," fastfetch\n",[288,119041,119042],{"class":290,"line":1502},[288,119043,119044],{"class":2135},"fastfetch\n",[19,119046,119047],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119049,119050],{},[200,119051],{"alt":205,"src":119052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[260,119054,119056],{"id":119055},"_323-移除snap应用","3.2.3 移除snap应用",[19,119058,119059],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[280,119061,119063],{"className":117469,"code":119062,"language":117471,"meta":205,"style":205},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[25,119064,119065,119077,119088],{"__ignoreMap":205},[288,119066,119067,119069,119071,119074],{"class":290,"line":291},[288,119068,24749],{"class":2135},[288,119070,26686],{"class":403},[288,119072,119073],{"class":403}," disable",[288,119075,119076],{"class":403}," snapd.service\n",[288,119078,119079,119081,119083,119085],{"class":290,"line":206},[288,119080,24749],{"class":2135},[288,119082,26686],{"class":403},[288,119084,119073],{"class":403},[288,119086,119087],{"class":403}," snapd.socket\n",[288,119089,119090,119092,119094,119096],{"class":290,"line":1352},[288,119091,24749],{"class":2135},[288,119093,26686],{"class":403},[288,119095,119073],{"class":403},[288,119097,119098],{"class":403}," snapd.seeded.service\n",[19,119100,119101],{},"然后查看snap应用列表",[19,119103,119104,119105,119110],{},"根据你安装的选择不同（最小安装或普通安装），有",[104,119106,119109],{"href":119107,"rel":119108},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[108],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[280,119112,119114],{"className":117469,"code":119113,"language":117471,"meta":205,"style":205},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[25,119115,119116,119121],{"__ignoreMap":205},[288,119117,119118],{"class":290,"line":291},[288,119119,119120],{"class":357},"# 查询当前系统上snap安装了哪些app\n",[288,119122,119123,119126],{"class":290,"line":206},[288,119124,119125],{"class":2135},"snap",[288,119127,119128],{"class":403}," list\n",[19,119130,119131],{},[200,119132],{"alt":205,"src":119133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119135,119136,119137,119140],{},"卸载掉图中所有应用，按照 ",[448,119138,119139],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[280,119142,119144],{"className":117469,"code":119143,"language":117471,"meta":205,"style":205},"#移除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",[25,119145,119146,119151,119163,119168,119179,119184,119195,119200,119211,119216,119220,119225,119236,119247],{"__ignoreMap":205},[288,119147,119148],{"class":290,"line":291},[288,119149,119150],{"class":357},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[288,119152,119153,119155,119158,119160],{"class":290,"line":206},[288,119154,24749],{"class":2135},[288,119156,119157],{"class":403}," snap",[288,119159,26252],{"class":403},[288,119161,119162],{"class":403}," snap-store\n",[288,119164,119165],{"class":290,"line":1352},[288,119166,119167],{"class":357},"#移除firefox浏览器\n",[288,119169,119170,119172,119174,119176],{"class":290,"line":1367},[288,119171,24749],{"class":2135},[288,119173,119157],{"class":403},[288,119175,26252],{"class":403},[288,119177,119178],{"class":403}," firefox\n",[288,119180,119181],{"class":290,"line":1373},[288,119182,119183],{"class":357},"#移除gnome-42-2204\n",[288,119185,119186,119188,119190,119192],{"class":290,"line":1387},[288,119187,24749],{"class":2135},[288,119189,119157],{"class":403},[288,119191,26252],{"class":403},[288,119193,119194],{"class":403}," gnome-42-2204\n",[288,119196,119197],{"class":290,"line":1393},[288,119198,119199],{"class":357},"#移除gtk-common-themes\n",[288,119201,119202,119204,119206,119208],{"class":290,"line":1484},[288,119203,24749],{"class":2135},[288,119205,119157],{"class":403},[288,119207,26252],{"class":403},[288,119209,119210],{"class":403}," gtk-common-themes\n",[288,119212,119213],{"class":290,"line":1490},[288,119214,119215],{"class":357},"#移除其它...\n",[288,119217,119218],{"class":290,"line":1502},[288,119219,2846],{"class":298},[288,119221,119222],{"class":290,"line":1784},[288,119223,119224],{"class":357},"#移除core22,bare以及snapd\n",[288,119226,119227,119229,119231,119233],{"class":290,"line":1789},[288,119228,24749],{"class":2135},[288,119230,119157],{"class":403},[288,119232,26252],{"class":403},[288,119234,119235],{"class":403}," core22\n",[288,119237,119238,119240,119242,119244],{"class":290,"line":1795},[288,119239,24749],{"class":2135},[288,119241,119157],{"class":403},[288,119243,26252],{"class":403},[288,119245,119246],{"class":403}," bare\n",[288,119248,119249,119251,119253,119255],{"class":290,"line":1800},[288,119250,24749],{"class":2135},[288,119252,119157],{"class":403},[288,119254,26252],{"class":403},[288,119256,119257],{"class":403}," snapd\n",[19,119259,119260],{},[200,119261],{"alt":205,"src":119262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119264,119265],{},"输入以下命令查看是否还有snap包",[280,119267,119269],{"className":117469,"code":119268,"language":117471,"meta":205,"style":205},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[25,119270,119271,119277,119281,119285,119289],{"__ignoreMap":205},[288,119272,119273,119275],{"class":290,"line":291},[288,119274,119125],{"class":2135},[288,119276,119128],{"class":403},[288,119278,119279],{"class":290,"line":206},[288,119280,118977],{"class":357},[288,119282,119283],{"class":290,"line":1352},[288,119284,119001],{"class":2135},[288,119286,119287],{"class":290,"line":1367},[288,119288,119010],{"class":357},[288,119290,119291],{"class":290,"line":1373},[288,119292,119044],{"class":2135},[19,119294,119295],{},[200,119296],{"alt":205,"src":119297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[260,119299,119301],{"id":119300},"_324-移除snap","3.2.4 移除snap",[19,119303,119304,119305,119310],{},"在删除掉",[104,119306,119309],{"href":119307,"rel":119308},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[108],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[280,119312,119314],{"className":117469,"code":119313,"language":117471,"meta":205,"style":205}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[25,119315,119316,119321,119334,119339,119350],{"__ignoreMap":205},[288,119317,119318],{"class":290,"line":291},[288,119319,119320],{"class":357}," #使用apt移除掉snap\n",[288,119322,119323,119325,119327,119329,119332],{"class":290,"line":206},[288,119324,24749],{"class":2135},[288,119326,117490],{"class":403},[288,119328,117798],{"class":403},[288,119330,119331],{"class":347}," --purge",[288,119333,119257],{"class":403},[288,119335,119336],{"class":290,"line":1352},[288,119337,119338],{"class":357},"#移除snapd的一些目录\n",[288,119340,119341,119343,119345,119347],{"class":290,"line":1367},[288,119342,24749],{"class":2135},[288,119344,118726],{"class":403},[288,119346,25498],{"class":347},[288,119348,119349],{"class":403}," \u002Fvar\u002Fcache\u002Fsnapd\n",[288,119351,119352,119354,119356,119358],{"class":290,"line":1373},[288,119353,24749],{"class":2135},[288,119355,118726],{"class":403},[288,119357,25498],{"class":347},[288,119359,119360],{"class":403}," ~\u002Fsnap\n",[19,119362,119363,119364,119367],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[25,119365,119366],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[260,119369,119371],{"id":119370},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119373,119374],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[280,119376,119378],{"className":117469,"code":119377,"language":117471,"meta":205,"style":205},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[25,119379,119380],{"__ignoreMap":205},[288,119381,119382,119384,119386],{"class":290,"line":291},[288,119383,24749],{"class":2135},[288,119385,118756],{"class":403},[288,119387,119388],{"class":403}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119390,119391,119392,119395],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[25,119393,119394],{},":wq"," 回车",[280,119397,119399],{"className":117469,"code":119398,"language":117471,"meta":205,"style":205},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[25,119400,119401,119408,119422],{"__ignoreMap":205},[288,119402,119403,119406],{"class":290,"line":291},[288,119404,119405],{"class":2135},"Package:",[288,119407,119257],{"class":403},[288,119409,119410,119413,119416,119419],{"class":290,"line":206},[288,119411,119412],{"class":2135},"Pin:",[288,119414,119415],{"class":403}," release",[288,119417,119418],{"class":403}," a=",[288,119420,119421],{"class":347},"*\n",[288,119423,119424,119427],{"class":290,"line":1352},[288,119425,119426],{"class":2135},"Pin-Priority:",[288,119428,119429],{"class":347}," -10\n",[19,119431,119432],{},[200,119433],{"alt":205,"src":119434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[260,119436,119438],{"id":119437},"_326-测试是否成功","3.2.6 测试是否成功",[280,119440,119442],{"className":117469,"code":119441,"language":117471,"meta":205,"style":205},"sudo apt update\nsudo apt install firefox\n",[25,119443,119444,119452],{"__ignoreMap":205},[288,119445,119446,119448,119450],{"class":290,"line":291},[288,119447,24749],{"class":2135},[288,119449,117490],{"class":403},[288,119451,26415],{"class":403},[288,119453,119454,119456,119458,119460],{"class":290,"line":206},[288,119455,24749],{"class":2135},[288,119457,117490],{"class":403},[288,119459,24007],{"class":403},[288,119461,119178],{"class":403},[19,119463,119464],{},"这里提示snapd无法被安装，就证明成功了",[19,119466,119467],{},[200,119468],{"alt":205,"src":119469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[260,119471,119473],{"id":119472},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119475,119476],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119478,119479],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119481,119482],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[280,119484,119486],{"className":117469,"code":119485,"language":117471,"meta":205,"style":205},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[25,119487,119488,119493,119502,119507,119515],{"__ignoreMap":205},[288,119489,119490],{"class":290,"line":291},[288,119491,119492],{"class":357},"# 添加Mozilla提供的源\n",[288,119494,119495,119497,119499],{"class":290,"line":206},[288,119496,24749],{"class":2135},[288,119498,119017],{"class":403},[288,119500,119501],{"class":403}," ppa:mozillateam\u002Fppa\n",[288,119503,119504],{"class":290,"line":1352},[288,119505,119506],{"class":357},"# 安装Firefox\n",[288,119508,119509,119511,119513],{"class":290,"line":1367},[288,119510,24749],{"class":2135},[288,119512,117490],{"class":403},[288,119514,26415],{"class":403},[288,119516,119517,119519,119521,119523],{"class":290,"line":1373},[288,119518,24749],{"class":2135},[288,119520,117490],{"class":403},[288,119522,24007],{"class":403},[288,119524,119178],{"class":403},[260,119526,119528],{"id":119527},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119530,119531],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119533,119534],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[280,119536,119538],{"className":117469,"code":119537,"language":117471,"meta":205,"style":205},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[25,119539,119540,119545,119555,119563,119567],{"__ignoreMap":205},[288,119541,119542],{"class":290,"line":291},[288,119543,119544],{"class":357},"#删掉禁止安装snap的配置文件\n",[288,119546,119547,119549,119551,119553],{"class":290,"line":206},[288,119548,24749],{"class":2135},[288,119550,118726],{"class":403},[288,119552,25498],{"class":347},[288,119554,119388],{"class":403},[288,119556,119557,119559,119561],{"class":290,"line":1352},[288,119558,24749],{"class":2135},[288,119560,117490],{"class":403},[288,119562,26415],{"class":403},[288,119564,119565],{"class":290,"line":1367},[288,119566,2572],{"emptyLinePlaceholder":217},[288,119568,119569,119571,119573],{"class":290,"line":1373},[288,119570,24749],{"class":2135},[288,119572,117490],{"class":403},[288,119574,119575],{"class":403}," dist-update\n",[14,119577,119579],{"id":119578},"_33-中文输入法","3.3 中文输入法",[260,119581,119583],{"id":119582},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119585,119586],{},"官网下载搜狗输入法",[19,119588,119589],{},[200,119590],{"alt":205,"src":119591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119593,119594],{},[200,119595],{"alt":205,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119598,119599],{},"打开终端输入如下",[280,119601,119603],{"className":117469,"code":119602,"language":117471,"meta":205,"style":205},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[25,119604,119605,119612],{"__ignoreMap":205},[288,119606,119607,119609],{"class":290,"line":291},[288,119608,101449],{"class":347},[288,119610,119611],{"class":403}," ~\u002FDownloads\u002F\n",[288,119613,119614,119616,119618,119620],{"class":290,"line":206},[288,119615,24749],{"class":2135},[288,119617,117490],{"class":403},[288,119619,24007],{"class":403},[288,119621,119622],{"class":403}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119624,119625],{},"打开Fcitx",[19,119627,119628,119631],{},[200,119629],{"alt":205,"src":119630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[200,119632],{"alt":205,"src":119633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119635,119636],{},[200,119637],{"alt":205,"src":119638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119640,119641],{},"添加搜狗输入法",[19,119643,119644],{},[200,119645],{"alt":205,"src":119646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119648,119649],{},[200,119650],{"alt":205,"src":119651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119653,119654],{},"将搜狗输入法设置为唯一输入法",[19,119656,119657],{},[200,119658],{"alt":205,"src":119659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[260,119661,119663],{"id":119662},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[243,119665,119666],{},[246,119667,119668],{},"卸载旧输入法",[280,119670,119672],{"className":118696,"code":119671,"language":118698,"meta":205,"style":205},"sudo apt purge fcitx* ibus*\n",[25,119673,119674],{"__ignoreMap":205},[288,119675,119676,119678,119680,119682,119685,119687,119690],{"class":290,"line":291},[288,119677,24749],{"class":2135},[288,119679,117490],{"class":403},[288,119681,117831],{"class":403},[288,119683,119684],{"class":403}," fcitx",[288,119686,752],{"class":347},[288,119688,119689],{"class":403}," ibus",[288,119691,119421],{"class":347},[243,119693,119694],{"start":206},[246,119695,119696],{},"安装Fcitx5",[280,119698,119700],{"className":117469,"code":119699,"language":117471,"meta":205,"style":205},"# 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",[25,119701,119702,119707,119721,119725,119730,119739,119747],{"__ignoreMap":205},[288,119703,119704],{"class":290,"line":291},[288,119705,119706],{"class":357},"# Ubuntu22.04及以上、Debian12及以上\n",[288,119708,119709,119711,119713,119715,119718],{"class":290,"line":206},[288,119710,24749],{"class":2135},[288,119712,117490],{"class":403},[288,119714,24007],{"class":403},[288,119716,119717],{"class":403}," fcitx5",[288,119719,119720],{"class":403}," fcitx5-chinese-addons\n",[288,119722,119723],{"class":290,"line":1352},[288,119724,2572],{"emptyLinePlaceholder":217},[288,119726,119727],{"class":290,"line":1367},[288,119728,119729],{"class":357},"# Ubuntu20.04\n",[288,119731,119732,119734,119736],{"class":290,"line":1373},[288,119733,24749],{"class":2135},[288,119735,119017],{"class":403},[288,119737,119738],{"class":403}," ppa:zhsj\u002Ffcitx5\n",[288,119740,119741,119743,119745],{"class":290,"line":1387},[288,119742,24749],{"class":2135},[288,119744,117490],{"class":403},[288,119746,26415],{"class":403},[288,119748,119749,119751,119753,119755,119757],{"class":290,"line":1393},[288,119750,24749],{"class":2135},[288,119752,117490],{"class":403},[288,119754,24007],{"class":403},[288,119756,119717],{"class":403},[288,119758,119720],{"class":403},[243,119760,119761,119764],{"start":1352},[246,119762,119763],{},"Reboot System",[246,119765,119766],{},"启动Fcitx5",[19,119768,119769],{},[200,119770],{"alt":205,"src":119771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[243,119773,119774],{"start":1373},[246,119775,119776],{},"修改一些设置",[19,119778,119779],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119781,119782],{},[200,119783],{"alt":205,"src":119784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119786,119787],{},"添加快捷键以便于更好切换中英文",[19,119789,119790],{},[200,119791],{"alt":205,"src":119792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[243,119794,119795],{"start":1387},[246,119796,119797],{},"重启",[280,119799,119801],{"className":118696,"code":119800,"language":118698,"meta":205,"style":205},"sudo shutdown -r now\n",[25,119802,119803],{"__ignoreMap":205},[288,119804,119805,119807,119810,119813],{"class":290,"line":291},[288,119806,24749],{"class":2135},[288,119808,119809],{"class":403}," shutdown",[288,119811,119812],{"class":347}," -r",[288,119814,119815],{"class":403}," now\n",[243,119817,119818],{"start":1393},[246,119819,119820],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119822,119823],{},[104,119824,119825],{"href":119825,"rel":119826},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[108],[243,119828,119829],{"start":1484},[246,119830,119831],{},"再重启",[280,119833,119834],{"className":118696,"code":119800,"language":118698,"meta":205,"style":205},[25,119835,119836],{"__ignoreMap":205},[288,119837,119838,119840,119842,119844],{"class":290,"line":291},[288,119839,24749],{"class":2135},[288,119841,119809],{"class":403},[288,119843,119812],{"class":347},[288,119845,119815],{"class":403},[14,119847,119849],{"id":119848},"_34-pip3源替换","3.4 pip3源替换",[19,119851,119852],{},"非Debian系发行版需要做。",[19,119854,119855],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119857,119858],{},"使用dnf的系统也可能不用做。",[280,119860,119862],{"className":117469,"code":119861,"language":117471,"meta":205,"style":205},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,119863,119864,119869,119876,119881,119886],{"__ignoreMap":205},[288,119865,119866],{"class":290,"line":291},[288,119867,119868],{"class":357},"# 检查是否已安装 pip\n",[288,119870,119871,119874],{"class":290,"line":206},[288,119872,119873],{"class":2135},"pip3",[288,119875,26466],{"class":347},[288,119877,119878],{"class":290,"line":1352},[288,119879,119880],{"class":357},"# 如果未安装，先安装 pip3（见下方）\n",[288,119882,119883],{"class":290,"line":1367},[288,119884,119885],{"class":357},"# 配置 pip 使用清华源\n",[288,119887,119888,119890,119893,119896,119899],{"class":290,"line":1373},[288,119889,119873],{"class":2135},[288,119891,119892],{"class":403}," config",[288,119894,119895],{"class":403}," set",[288,119897,119898],{"class":403}," global.index-url",[288,119900,119901],{"class":403}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119903,119904],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119906,119907],{},[200,119908],{"alt":205,"src":119909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[280,119911,119913],{"className":117469,"code":119912,"language":117471,"meta":205,"style":205},"#安装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",[25,119914,119915,119920,119928,119939,119943,119948,119967,119971,119976,119988,119992,119997],{"__ignoreMap":205},[288,119916,119917],{"class":290,"line":291},[288,119918,119919],{"class":357},"#安装pip3\n",[288,119921,119922,119924,119926],{"class":290,"line":206},[288,119923,24749],{"class":2135},[288,119925,117490],{"class":403},[288,119927,26415],{"class":403},[288,119929,119930,119932,119934,119936],{"class":290,"line":1352},[288,119931,24749],{"class":2135},[288,119933,26249],{"class":403},[288,119935,24007],{"class":403},[288,119937,119938],{"class":403}," python3-pip\n",[288,119940,119941],{"class":290,"line":1367},[288,119942,2572],{"emptyLinePlaceholder":217},[288,119944,119945],{"class":290,"line":1373},[288,119946,119947],{"class":357},"#更新pip3\n",[288,119949,119950,119952,119954,119956,119958,119960,119963,119965],{"class":290,"line":1387},[288,119951,101052],{"class":2135},[288,119953,101055],{"class":347},[288,119955,101078],{"class":403},[288,119957,24007],{"class":403},[288,119959,26603],{"class":347},[288,119961,119962],{"class":403}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[288,119964,101083],{"class":347},[288,119966,101086],{"class":403},[288,119968,119969],{"class":290,"line":1393},[288,119970,2572],{"emptyLinePlaceholder":217},[288,119972,119973],{"class":290,"line":1484},[288,119974,119975],{"class":357},"#设置pip源为清华源\n",[288,119977,119978,119980,119982,119984,119986],{"class":290,"line":1490},[288,119979,119873],{"class":2135},[288,119981,119892],{"class":403},[288,119983,119895],{"class":403},[288,119985,119898],{"class":403},[288,119987,119901],{"class":403},[288,119989,119990],{"class":290,"line":1502},[288,119991,2572],{"emptyLinePlaceholder":217},[288,119993,119994],{"class":290,"line":1784},[288,119995,119996],{"class":357},"#测试\n",[288,119998,119999,120001,120003,120005,120007,120009],{"class":290,"line":1789},[288,120000,101052],{"class":2135},[288,120002,101055],{"class":347},[288,120004,101078],{"class":403},[288,120006,24007],{"class":403},[288,120008,101083],{"class":347},[288,120010,101086],{"class":403},[19,120012,120013],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120015,120016],{},[200,120017],{"alt":205,"src":120018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120020,120022],{"id":120021},"_35-显卡驱动安装","3.5 显卡驱动安装",[260,120024,120026],{"id":120025},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[280,120028,120030],{"className":118696,"code":120029,"language":118698,"meta":205,"style":205},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[25,120031,120032,120037,120052,120057],{"__ignoreMap":205},[288,120033,120034],{"class":290,"line":291},[288,120035,120036],{"class":357},"# 如果是使用apt安装的驱动\n",[288,120038,120039,120041,120043,120045,120047,120050],{"class":290,"line":206},[288,120040,24749],{"class":2135},[288,120042,26249],{"class":403},[288,120044,26252],{"class":403},[288,120046,119331],{"class":347},[288,120048,120049],{"class":403}," nvidia",[288,120051,119421],{"class":347},[288,120053,120054],{"class":290,"line":1352},[288,120055,120056],{"class":357},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[288,120058,120059,120061],{"class":290,"line":1367},[288,120060,24749],{"class":2135},[288,120062,120063],{"class":403}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[260,120065,120067],{"id":120066},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22171,120069,120071],{"id":120070},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23083,120073,120075],{"id":120074},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[280,120077,120079],{"className":118696,"code":120078,"language":118698,"meta":205,"style":205},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120080,120081,120086,120097,120102,120112,120117],{"__ignoreMap":205},[288,120082,120083],{"class":290,"line":291},[288,120084,120085],{"class":357},"# 安装英伟达驱动\n",[288,120087,120088,120090,120092,120094],{"class":290,"line":206},[288,120089,24749],{"class":2135},[288,120091,117490],{"class":403},[288,120093,24007],{"class":403},[288,120095,120096],{"class":403}," nvidia-driver-版本号\n",[288,120098,120099],{"class":290,"line":1352},[288,120100,120101],{"class":357},"# 重启 \n",[288,120103,120104,120106,120108,120110],{"class":290,"line":1367},[288,120105,24749],{"class":2135},[288,120107,119809],{"class":403},[288,120109,119812],{"class":347},[288,120111,119815],{"class":403},[288,120113,120114],{"class":290,"line":1373},[288,120115,120116],{"class":357},"# 检查驱动是否安装成功\n",[288,120118,120119],{"class":290,"line":1387},[288,120120,120121],{"class":2135},"nvidia-smi\n",[23083,120123,120125],{"id":120124},"_35212-debian","3.5.2.1.2 Debian",[280,120127,120129],{"className":118696,"code":120128,"language":118698,"meta":205,"style":205},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120130,120131,120135,120149,120153,120163,120167],{"__ignoreMap":205},[288,120132,120133],{"class":290,"line":291},[288,120134,120085],{"class":357},[288,120136,120137,120139,120141,120143,120146],{"class":290,"line":206},[288,120138,24749],{"class":2135},[288,120140,117490],{"class":403},[288,120142,24007],{"class":403},[288,120144,120145],{"class":403}," nvidia-driver",[288,120147,120148],{"class":403}," nvidia-settings\n",[288,120150,120151],{"class":290,"line":1352},[288,120152,120101],{"class":357},[288,120154,120155,120157,120159,120161],{"class":290,"line":1367},[288,120156,24749],{"class":2135},[288,120158,119809],{"class":403},[288,120160,119812],{"class":347},[288,120162,119815],{"class":403},[288,120164,120165],{"class":290,"line":1373},[288,120166,120116],{"class":357},[288,120168,120169],{"class":290,"line":1387},[288,120170,120121],{"class":2135},[22171,120172,120174],{"id":120173},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120176,120177,120178,120181],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[448,120179,120180],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120183,120184,120185],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23726,120186,120187],{},[448,120188,120189],{},"（也可以不禁用桌面环境，直接进行下一步。）",[280,120191,120193],{"className":118696,"code":120192,"language":118698,"meta":205,"style":205},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[25,120194,120195,120200,120210,120215,120228,120233],{"__ignoreMap":205},[288,120196,120197],{"class":290,"line":291},[288,120198,120199],{"class":357},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[288,120201,120202,120204,120207],{"class":290,"line":206},[288,120203,24749],{"class":2135},[288,120205,120206],{"class":403}," telinit",[288,120208,120209],{"class":347}," 3\n",[288,120211,120212],{"class":290,"line":1352},[288,120213,120214],{"class":357},"# ubuntu 使用下方命令\n",[288,120216,120217,120219,120222,120225],{"class":290,"line":1367},[288,120218,24749],{"class":2135},[288,120220,120221],{"class":403}," service",[288,120223,120224],{"class":403}," lightdm",[288,120226,120227],{"class":403}," stop\n",[288,120229,120230],{"class":290,"line":1373},[288,120231,120232],{"class":357},"# Fedora 使用下方命令\n",[288,120234,120235,120237,120239,120242],{"class":290,"line":1387},[288,120236,24749],{"class":2135},[288,120238,26686],{"class":403},[288,120240,120241],{"class":403}," isolate",[288,120243,120244],{"class":403}," multi-user.target\n",[19,120246,120247],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[280,120249,120251],{"className":118696,"code":120250,"language":118698,"meta":205,"style":205},"# 编译环境+准备工作\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",[25,120252,120253,120258,120269,120274,120281,120286,120298,120303,120310,120315],{"__ignoreMap":205},[288,120254,120255],{"class":290,"line":291},[288,120256,120257],{"class":357},"# 编译环境+准备工作\n",[288,120259,120260,120262,120264,120266],{"class":290,"line":206},[288,120261,24749],{"class":2135},[288,120263,117490],{"class":403},[288,120265,24007],{"class":403},[288,120267,120268],{"class":403}," build-essential\n",[288,120270,120271],{"class":290,"line":1352},[288,120272,120273],{"class":357},"# 进入到.run目录中\n",[288,120275,120276,120278],{"class":290,"line":1367},[288,120277,101449],{"class":347},[288,120279,120280],{"class":403}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[288,120282,120283],{"class":290,"line":1373},[288,120284,120285],{"class":357},"# 给驱动文件增加可执行权限：\n",[288,120287,120288,120290,120292,120295],{"class":290,"line":1387},[288,120289,24749],{"class":2135},[288,120291,24752],{"class":403},[288,120293,120294],{"class":403}," a+x",[288,120296,120297],{"class":403}," NVIDIA-Linux-x86_64-550.107.02.run\n",[288,120299,120300],{"class":290,"line":1393},[288,120301,120302],{"class":357},"# 然后执行安装：\n",[288,120304,120305,120307],{"class":290,"line":1484},[288,120306,24749],{"class":2135},[288,120308,120309],{"class":403}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[288,120311,120312],{"class":290,"line":1490},[288,120313,120314],{"class":357},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[288,120316,120317,120319,120322],{"class":290,"line":1502},[288,120318,24749],{"class":2135},[288,120320,120321],{"class":403}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[288,120323,120324],{"class":347},"  --no-opengl-files\n",[19,120326,120327],{},"安装完毕重启即可",[280,120329,120331],{"className":118696,"code":120330,"language":118698,"meta":205,"style":205},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120332,120333,120337,120343,120347],{"__ignoreMap":205},[288,120334,120335],{"class":290,"line":291},[288,120336,120101],{"class":357},[288,120338,120339,120341],{"class":290,"line":206},[288,120340,24749],{"class":2135},[288,120342,26820],{"class":403},[288,120344,120345],{"class":290,"line":1352},[288,120346,120116],{"class":357},[288,120348,120349],{"class":290,"line":1367},[288,120350,120121],{"class":2135},[260,120352,120354],{"id":120353},"_353-安装cuda","3.5.3 安装CUDA",[19,120356,120357],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120359,120360],{},[200,120361],{"alt":205,"src":120362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[243,120364,120365],{},[246,120366,120367],{},"先查看显卡驱动所支持的最高CUDA版本",[280,120369,120370],{"className":118696,"code":120121,"language":118698,"meta":205,"style":205},[25,120371,120372],{"__ignoreMap":205},[288,120373,120374],{"class":290,"line":291},[288,120375,120121],{"class":2135},[19,120377,120378],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120380,120381],{},[200,120382],{"alt":205,"src":120383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[243,120385,120386],{"start":206},[246,120387,120388],{},"下载CUDA并安装CUDA",[19,120390,118475,120391],{},[104,120392,118478],{"href":118478,"rel":120393},[108],[19,120395,120396],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120398,120399],{},[200,120400],{"alt":205,"src":120401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120403,120404,120405,120410],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[104,120406,120409],{"href":120407,"rel":120408},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[108],"Vinci机器人队单片机教程","）",[19,120412,120413],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120415,120416],{},[200,120417],{"alt":205,"src":120418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120420,120421],{},"将最下方框框里的命令敲入终端",[280,120423,120425],{"className":118696,"code":120424,"language":118698,"meta":205,"style":205},"# 在当前文件夹下创建一个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",[25,120426,120427,120432,120441,120446,120453,120458,120466,120471,120482,120487],{"__ignoreMap":205},[288,120428,120429],{"class":290,"line":291},[288,120430,120431],{"class":357},"# 在当前文件夹下创建一个ttt的子文件夹\n",[288,120433,120434,120436,120438],{"class":290,"line":206},[288,120435,101439],{"class":2135},[288,120437,29389],{"class":347},[288,120439,120440],{"class":403}," .\u002Fttt\n",[288,120442,120443],{"class":290,"line":1352},[288,120444,120445],{"class":357},"# 进入ttt文件夹\n",[288,120447,120448,120450],{"class":290,"line":1367},[288,120449,101449],{"class":347},[288,120451,120452],{"class":403}," ttt\n",[288,120454,120455],{"class":290,"line":1373},[288,120456,120457],{"class":357},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[288,120459,120460,120463],{"class":290,"line":1387},[288,120461,120462],{"class":2135},"wget",[288,120464,120465],{"class":403}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[288,120467,120468],{"class":290,"line":1393},[288,120469,120470],{"class":357},"# 给予权限\n",[288,120472,120473,120475,120477,120479],{"class":290,"line":1484},[288,120474,24749],{"class":2135},[288,120476,24752],{"class":403},[288,120478,120294],{"class":403},[288,120480,120481],{"class":403}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[288,120483,120484],{"class":290,"line":1490},[288,120485,120486],{"class":357},"# 运行脚本\n",[288,120488,120489,120491],{"class":290,"line":1502},[288,120490,24749],{"class":2135},[288,120492,120481],{"class":403},[19,120494,120495],{},[200,120496],{"alt":205,"src":120497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120499,120500],{},"正在安装中：",[19,120502,120503],{},[200,120504],{"alt":205,"src":120505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120507,120508],{},"输入accept接受即可",[19,120510,120511],{},[200,120512],{"alt":205,"src":120513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120515,120516],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120518,120519],{},[200,120520],{"alt":205,"src":120521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120523,120524],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120526,120527],{},[200,120528],{"alt":205,"src":120529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[243,120531,120532],{"start":1352},[246,120533,120534],{},"配置环境",[19,120536,120537],{},"根据上方确认一下路径，比如我上面红色框起来的为",[280,120539,120541],{"className":118696,"code":120540,"language":118698,"meta":205,"style":205},"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",[25,120542,120543,120559,120574],{"__ignoreMap":205},[288,120544,120545,120548,120551,120554,120557],{"class":290,"line":291},[288,120546,120547],{"class":2135},"Please",[288,120549,120550],{"class":403}," make",[288,120552,120553],{"class":403}," sure",[288,120555,120556],{"class":403}," that",[288,120558,2846],{"class":298},[288,120560,120561,120563,120566,120569,120572],{"class":290,"line":206},[288,120562,52444],{"class":2135},[288,120564,120565],{"class":403},"   PATH",[288,120567,120568],{"class":403}," includes",[288,120570,120571],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[288,120573,2846],{"class":298},[288,120575,120576,120578,120581,120583,120586,120589,120591,120594,120597,120600,120603,120605,120608,120610],{"class":290,"line":1352},[288,120577,52444],{"class":2135},[288,120579,120580],{"class":403},"   LD_LIBRARY_PATH",[288,120582,120568],{"class":403},[288,120584,120585],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[288,120587,120588],{"class":403}," or,",[288,120590,5382],{"class":403},[288,120592,120593],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[288,120595,120596],{"class":403}," to",[288,120598,120599],{"class":403}," \u002Fetc\u002Fld.so.conf",[288,120601,120602],{"class":403}," and",[288,120604,27403],{"class":403},[288,120606,120607],{"class":403}," ldconfig",[288,120609,64777],{"class":403},[288,120611,120612],{"class":403}," root\n",[19,120614,120615],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[280,120617,120619],{"className":118696,"code":120618,"language":118698,"meta":205,"style":205},"which nvcc\n",[25,120620,120621],{"__ignoreMap":205},[288,120622,120623,120626],{"class":290,"line":291},[288,120624,120625],{"class":347},"which",[288,120627,120628],{"class":403}," nvcc\n",[19,120630,120631],{},[200,120632],{"alt":205,"src":120633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120635,120636],{},"所以我进行以下操作：",[280,120638,120640],{"className":118696,"code":120639,"language":118698,"meta":205,"style":205},"sudo vim ~\u002F.bashrc\n",[25,120641,120642],{"__ignoreMap":205},[288,120643,120644,120646,120648],{"class":290,"line":291},[288,120645,24749],{"class":2135},[288,120647,118756],{"class":403},[288,120649,120650],{"class":403}," ~\u002F.bashrc\n",[19,120652,120653],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[280,120655,120657],{"className":118696,"code":120656,"language":118698,"meta":205,"style":205},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[25,120658,120659,120671],{"__ignoreMap":205},[288,120660,120661,120663,120666,120668],{"class":290,"line":291},[288,120662,25215],{"class":294},[288,120664,120665],{"class":298}," PATH",[288,120667,344],{"class":294},[288,120669,120670],{"class":298},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[288,120672,120673,120675,120678,120680],{"class":290,"line":206},[288,120674,25215],{"class":294},[288,120676,120677],{"class":298}," LD_LIBRARY_PATH",[288,120679,344],{"class":294},[288,120681,120682],{"class":298},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120684,120685],{},[200,120686],{"alt":205,"src":120687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[280,120689,120691],{"className":118696,"code":120690,"language":118698,"meta":205,"style":205},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[25,120692,120693,120698,120704,120709],{"__ignoreMap":205},[288,120694,120695],{"class":290,"line":291},[288,120696,120697],{"class":357},"# 刷新当前终端的环境变量\n",[288,120699,120700,120702],{"class":290,"line":206},[288,120701,101066],{"class":347},[288,120703,120650],{"class":403},[288,120705,120706],{"class":290,"line":1352},[288,120707,120708],{"class":357},"# 验证CUDA是否安装成功\n",[288,120710,120711,120714],{"class":290,"line":1367},[288,120712,120713],{"class":2135},"nvcc",[288,120715,120716],{"class":347}," -V\n",[19,120718,120719],{},"出现下图这种则安装成功。",[19,120721,120722],{},[200,120723],{"alt":205,"src":120724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[260,120726,120728],{"id":120727},"_354-安装cudnn","3.5.4 安装cuDNN",[243,120730,120731],{},[246,120732,120733],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120735,120736,120737,120742],{},"前往 NVIDIA cuDNN 下载页面：",[104,120738,120741],{"href":120739,"rel":120740},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[108],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120744,120745],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120747,120748],{},[200,120749],{"alt":205,"src":120750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120752,120753],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120755,120756],{},[200,120757],{"alt":205,"src":120758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120760,120761],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120763,120764],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120766,120767],{},[448,120768,120769],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120771,120772],{},"下载好的：",[19,120774,120775],{},[200,120776],{"alt":205,"src":120777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[243,120779,120780],{"start":206},[246,120781,120782],{},"安装cuDNN",[19,120784,120785],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120787,120788],{},[200,120789],{"alt":205,"src":120790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120792,120793],{},"解压文件，并复制到对应位置完成安装",[280,120795,120797],{"className":118696,"code":120796,"language":118698,"meta":205,"style":205},"# 解压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",[25,120798,120799,120804,120815,120820,120827,120832,120848,120862,120867,120878,120887,120891,120907],{"__ignoreMap":205},[288,120800,120801],{"class":290,"line":291},[288,120802,120803],{"class":357},"# 解压cuDNN文件\n",[288,120805,120806,120809,120812],{"class":290,"line":206},[288,120807,120808],{"class":2135},"tar",[288,120810,120811],{"class":347}," -xvf",[288,120813,120814],{"class":403}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[288,120816,120817],{"class":290,"line":1352},[288,120818,120819],{"class":357},"# cd进文件夹\n",[288,120821,120822,120824],{"class":290,"line":1367},[288,120823,101449],{"class":347},[288,120825,120826],{"class":403}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[288,120828,120829],{"class":290,"line":1373},[288,120830,120831],{"class":357},"# 复制cuDNN文件到CUDA目录\n",[288,120833,120834,120836,120838,120841,120843,120846],{"class":290,"line":1387},[288,120835,24749],{"class":2135},[288,120837,28034],{"class":403},[288,120839,120840],{"class":403}," include\u002Fcudnn",[288,120842,752],{"class":347},[288,120844,120845],{"class":403},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[288,120847,2846],{"class":298},[288,120849,120850,120852,120854,120857,120859],{"class":290,"line":1393},[288,120851,24749],{"class":2135},[288,120853,28034],{"class":403},[288,120855,120856],{"class":403}," lib\u002Flibcudnn",[288,120858,752],{"class":347},[288,120860,120861],{"class":403},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[288,120863,120864],{"class":290,"line":1484},[288,120865,120866],{"class":357},"# 对比一下有没有缺文件\n",[288,120868,120869,120871,120874,120876],{"class":290,"line":1490},[288,120870,26934],{"class":2135},[288,120872,120873],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[288,120875,752],{"class":347},[288,120877,2846],{"class":298},[288,120879,120880,120882,120885],{"class":290,"line":1502},[288,120881,26934],{"class":2135},[288,120883,120884],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[288,120886,119421],{"class":347},[288,120888,120889],{"class":290,"line":1784},[288,120890,120470],{"class":357},[288,120892,120893,120895,120897,120900,120902,120904],{"class":290,"line":1789},[288,120894,24749],{"class":2135},[288,120896,24752],{"class":403},[288,120898,120899],{"class":403}," a+r",[288,120901,120873],{"class":403},[288,120903,752],{"class":347},[288,120905,120906],{"class":298},"   \n",[288,120908,120909,120911,120913,120915,120917],{"class":290,"line":1795},[288,120910,24749],{"class":2135},[288,120912,24752],{"class":403},[288,120914,120899],{"class":403},[288,120916,120884],{"class":403},[288,120918,119421],{"class":347},[243,120920,120921],{"start":1352},[246,120922,120923],{},"检查是否安装成功",[280,120925,120927],{"className":118696,"code":120926,"language":118698,"meta":205,"style":205},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[25,120928,120929,120934],{"__ignoreMap":205},[288,120930,120931],{"class":290,"line":291},[288,120932,120933],{"class":357},"# 检查cuDNN版本命令\n",[288,120935,120936,120939,120942,120944,120946,120949,120952],{"class":290,"line":206},[288,120937,120938],{"class":2135},"cat",[288,120940,120941],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[288,120943,25282],{"class":294},[288,120945,30409],{"class":2135},[288,120947,120948],{"class":403}," CUDNN_MAJOR",[288,120950,120951],{"class":347}," -A",[288,120953,47896],{"class":347},[19,120955,120956],{},"出现下图这样的就是安装成功了",[19,120958,120959],{},[200,120960],{"alt":205,"src":120961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[243,120963,120964],{"start":1367},[246,120965,120966],{},"软链接(一般不需要)",[280,120968,120970],{"className":118696,"code":120969,"language":118698,"meta":205,"style":205},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[25,120971,120972,120977],{"__ignoreMap":205},[288,120973,120974],{"class":290,"line":291},[288,120975,120976],{"class":357},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[288,120978,120979,120981],{"class":290,"line":206},[288,120980,24749],{"class":2135},[288,120982,120983],{"class":403}," ldconfig\n",[19,120985,120986],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[280,120988,120993],{"className":120989,"code":120990,"language":120991,"meta":120992,"style":205},"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",[25,120994,120995,121000,121005,121010,121015,121020,121025],{"__ignoreMap":205},[288,120996,120997],{"class":290,"line":291},[288,120998,120999],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[288,121001,121002],{"class":290,"line":206},[288,121003,121004],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[288,121006,121007],{"class":290,"line":1352},[288,121008,121009],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[288,121011,121012],{"class":290,"line":1367},[288,121013,121014],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[288,121016,121017],{"class":290,"line":1373},[288,121018,121019],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[288,121021,121022],{"class":290,"line":1387},[288,121023,121024],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[288,121026,121027],{"class":290,"line":1393},[288,121028,121029],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121031,121032],{},"运行下方的命令",[280,121034,121036],{"className":118696,"code":121035,"language":118698,"meta":205,"style":205},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[25,121037,121038,121043,121050,121055],{"__ignoreMap":205},[288,121039,121040],{"class":290,"line":291},[288,121041,121042],{"class":357},"# cd进入CUDA路径\n",[288,121044,121045,121047],{"class":290,"line":206},[288,121046,101449],{"class":347},[288,121048,121049],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[288,121051,121052],{"class":290,"line":1352},[288,121053,121054],{"class":357}," # 查看本路径下的需要软链接的文件名\n",[288,121056,121057],{"class":290,"line":1367},[288,121058,121059],{"class":2135}," ls\n",[19,121061,121062],{},[200,121063],{"alt":205,"src":121064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121066,121067,121068,18583,121071,18583,121074,121077],{},"如上图，我需要将",[25,121069,121070],{},"libcudnn_xxx_xxxxx.so.8.9.7",[25,121072,121073],{},"libcudnn_xxx_xxxxx.so.8",[25,121075,121076],{},"libcudnn_xxx_xxxxx.so","软链接",[280,121079,121081],{"className":118696,"code":121080,"language":118698,"meta":205,"style":205},"# 创建符号链接。对于每个 .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",[25,121082,121083,121088,121104,121118,121132,121146,121160,121174,121188,121193,121199,121204],{"__ignoreMap":205},[288,121084,121085],{"class":290,"line":291},[288,121086,121087],{"class":357},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[288,121089,121090,121092,121095,121098,121101],{"class":290,"line":206},[288,121091,24749],{"class":2135},[288,121093,121094],{"class":403}," ln",[288,121096,121097],{"class":347}," -sf",[288,121099,121100],{"class":403}," libcudnn_cnn_train.so.8.9.7",[288,121102,121103],{"class":403}," libcudnn_cnn_train.so.8\n",[288,121105,121106,121108,121110,121112,121115],{"class":290,"line":1352},[288,121107,24749],{"class":2135},[288,121109,121094],{"class":403},[288,121111,121097],{"class":347},[288,121113,121114],{"class":403}," libcudnn_adv_infer.so.8.9.7",[288,121116,121117],{"class":403}," libcudnn_adv_infer.so.8\n",[288,121119,121120,121122,121124,121126,121129],{"class":290,"line":1367},[288,121121,24749],{"class":2135},[288,121123,121094],{"class":403},[288,121125,121097],{"class":347},[288,121127,121128],{"class":403}," libcudnn_adv_train.so.8.9.7",[288,121130,121131],{"class":403}," libcudnn_adv_train.so.8\n",[288,121133,121134,121136,121138,121140,121143],{"class":290,"line":1373},[288,121135,24749],{"class":2135},[288,121137,121094],{"class":403},[288,121139,121097],{"class":347},[288,121141,121142],{"class":403}," libcudnn_cnn_infer.so.8.9.7",[288,121144,121145],{"class":403}," libcudnn_cnn_infer.so.8\n",[288,121147,121148,121150,121152,121154,121157],{"class":290,"line":1387},[288,121149,24749],{"class":2135},[288,121151,121094],{"class":403},[288,121153,121097],{"class":347},[288,121155,121156],{"class":403}," libcudnn.so.8.9.7",[288,121158,121159],{"class":403}," libcudnn.so.8\n",[288,121161,121162,121164,121166,121168,121171],{"class":290,"line":1393},[288,121163,24749],{"class":2135},[288,121165,121094],{"class":403},[288,121167,121097],{"class":347},[288,121169,121170],{"class":403}," libcudnn_ops_infer.so.8.9.7",[288,121172,121173],{"class":403}," libcudnn_ops_infer.so.8\n",[288,121175,121176,121178,121180,121182,121185],{"class":290,"line":1484},[288,121177,24749],{"class":2135},[288,121179,121094],{"class":403},[288,121181,121097],{"class":347},[288,121183,121184],{"class":403}," libcudnn_ops_train.so.8.9.7",[288,121186,121187],{"class":403}," libcudnn_ops_train.so.8\n",[288,121189,121190],{"class":290,"line":1490},[288,121191,121192],{"class":357},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[288,121194,121195,121197],{"class":290,"line":1502},[288,121196,24749],{"class":2135},[288,121198,120983],{"class":403},[288,121200,121201],{"class":290,"line":1784},[288,121202,121203],{"class":357},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[288,121205,121206,121208,121211,121214,121216,121219],{"class":290,"line":1789},[288,121207,26934],{"class":2135},[288,121209,121210],{"class":347}," -l",[288,121212,121213],{"class":403}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[288,121215,752],{"class":347},[288,121217,121218],{"class":403},".so",[288,121220,119421],{"class":347},[260,121222,121224],{"id":121223},"_355-常见问题","3.5.5 常见问题",[243,121226,121227],{},[246,121228,121229],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[280,121231,121233],{"className":118696,"code":121232,"language":118698,"meta":205,"style":205},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[25,121234,121235],{"__ignoreMap":205},[288,121236,121237,121239,121241],{"class":290,"line":291},[288,121238,24749],{"class":2135},[288,121240,118756],{"class":403},[288,121242,121243],{"class":403}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121245,121246],{},"blacklist-nouveau.conf文件内容如下：",[280,121248,121250],{"className":118696,"code":121249,"language":118698,"meta":205,"style":205},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[25,121251,121252,121260,121267,121279,121289],{"__ignoreMap":205},[288,121253,121254,121257],{"class":290,"line":291},[288,121255,121256],{"class":2135},"blacklist",[288,121258,121259],{"class":403}," nouveau\n",[288,121261,121262,121264],{"class":290,"line":206},[288,121263,121256],{"class":2135},[288,121265,121266],{"class":403}," lbm-nouveau\n",[288,121268,121269,121271,121274,121277],{"class":290,"line":1352},[288,121270,116103],{"class":2135},[288,121272,121273],{"class":403}," nouveau",[288,121275,121276],{"class":403}," modeset=",[288,121278,3257],{"class":347},[288,121280,121281,121284,121286],{"class":290,"line":1367},[288,121282,121283],{"class":347},"alias",[288,121285,121273],{"class":403},[288,121287,121288],{"class":403}," off\n",[288,121290,121291,121293,121296],{"class":290,"line":1373},[288,121292,121283],{"class":347},[288,121294,121295],{"class":403}," lbm-nouveau",[288,121297,121288],{"class":403},[19,121299,121300],{},"接着运行下方命令",[280,121302,121304],{"className":118696,"code":121303,"language":118698,"meta":205,"style":205},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[25,121305,121306,121316,121321],{"__ignoreMap":205},[288,121307,121308,121310,121313],{"class":290,"line":291},[288,121309,24749],{"class":2135},[288,121311,121312],{"class":403}," update-initramfs",[288,121314,121315],{"class":347}," -u\n",[288,121317,121318],{"class":290,"line":206},[288,121319,121320],{"class":2135},"或者\n",[288,121322,121323,121325,121328],{"class":290,"line":1352},[288,121324,24749],{"class":2135},[288,121326,121327],{"class":403}," dracut",[288,121329,121330],{"class":347}," --force\n",[19,121332,121333],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[280,121335,121337],{"className":118696,"code":121336,"language":118698,"meta":205,"style":205},"lsmod | grep nouveau\n",[25,121338,121339],{"__ignoreMap":205},[288,121340,121341,121344,121346,121348],{"class":290,"line":291},[288,121342,121343],{"class":2135},"lsmod",[288,121345,25282],{"class":294},[288,121347,30409],{"class":2135},[288,121349,121259],{"class":403},[243,121351,121352],{"start":206},[246,121353,121354],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[280,121356,121358],{"className":118696,"code":121357,"language":118698,"meta":205,"style":205},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[25,121359,121360],{"__ignoreMap":205},[288,121361,121362,121364,121366],{"class":290,"line":291},[288,121363,24749],{"class":2135},[288,121365,118756],{"class":403},[288,121367,121368],{"class":403}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121370,121371],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[280,121373,121375],{"className":118696,"code":121374,"language":118698,"meta":205,"style":205},"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",[25,121376,121377,121385,121393,121401,121408,121416,121426,121434],{"__ignoreMap":205},[288,121378,121379,121382],{"class":290,"line":291},[288,121380,121381],{"class":2135},"Section",[288,121383,121384],{"class":403}," \"OutputClass\"\n",[288,121386,121387,121390],{"class":290,"line":206},[288,121388,121389],{"class":2135},"   Identifier",[288,121391,121392],{"class":403}," \"nvidia\"\n",[288,121394,121395,121398],{"class":290,"line":1352},[288,121396,121397],{"class":2135},"   MatchDriver",[288,121399,121400],{"class":403}," \"nvidia-drm\"\n",[288,121402,121403,121406],{"class":290,"line":1367},[288,121404,121405],{"class":2135},"   Driver",[288,121407,121392],{"class":403},[288,121409,121410,121413],{"class":290,"line":1373},[288,121411,121412],{"class":2135},"   Option",[288,121414,121415],{"class":403}," \"AllowEmptyInitialConfiguration\"\n",[288,121417,121418,121420,121423],{"class":290,"line":1387},[288,121419,121412],{"class":2135},[288,121421,121422],{"class":403}," \"PrimaryGPU\"",[288,121424,121425],{"class":403}," \"yes\"\n",[288,121427,121428,121431],{"class":290,"line":1393},[288,121429,121430],{"class":2135},"   ModulePath",[288,121432,121433],{"class":403}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[288,121435,121436],{"class":290,"line":1484},[288,121437,121438],{"class":2135},"EndSection\n",[243,121440,121441],{"start":1352},[246,121442,121443],{},"安装N卡驱动提示错误",[280,121445,121447],{"className":120989,"code":121446,"language":120991,"meta":120992,"style":205},"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",[25,121448,121449],{"__ignoreMap":205},[288,121450,121451],{"class":290,"line":291},[288,121452,121446],{},[243,121454,121455],{},[246,121456,121457],{},"检查当前运行的内核版本：",[19,121459,121460],{},"运行以下命令以查看你当前正在使用的内核版本：",[280,121462,121464],{"className":117469,"code":121463,"language":117471,"meta":205,"style":205},"uname -r\n",[25,121465,121466],{"__ignoreMap":205},[288,121467,121468,121470],{"class":290,"line":291},[288,121469,70377],{"class":2135},[288,121471,121472],{"class":347}," -r\n",[243,121474,121475],{"start":206},[246,121476,121477],{},"安装内核开发文件：",[19,121479,121480,121481,121484],{},"确保你已经安装了与当前内核版本相匹配的 ",[25,121482,121483],{},"kernel-devel"," 包。运行以下命令来安装：",[280,121486,121488],{"className":117469,"code":121487,"language":117471,"meta":205,"style":205},"sudo dnf install kernel-devel-$(uname -r)\n",[25,121489,121490],{"__ignoreMap":205},[288,121491,121492,121494,121496,121498,121501,121503,121505,121507],{"class":290,"line":291},[288,121493,24749],{"class":2135},[288,121495,26488],{"class":403},[288,121497,24007],{"class":403},[288,121499,121500],{"class":403}," kernel-devel-",[288,121502,25272],{"class":298},[288,121504,70377],{"class":2135},[288,121506,119812],{"class":347},[288,121508,305],{"class":298},[19,121510,121511],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[243,121513,121514],{"start":1352},[246,121515,121516],{},"安装内核源代码（如果需要）：",[19,121518,121519],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[280,121521,121523],{"className":117469,"code":121522,"language":117471,"meta":205,"style":205},"sudo dnf install kernel-headers kernel-source\n",[25,121524,121525],{"__ignoreMap":205},[288,121526,121527,121529,121531,121533,121536],{"class":290,"line":291},[288,121528,24749],{"class":2135},[288,121530,26488],{"class":403},[288,121532,24007],{"class":403},[288,121534,121535],{"class":403}," kernel-headers",[288,121537,121538],{"class":403}," kernel-source\n",[243,121540,121541],{"start":1367},[246,121542,121543],{},"检查安装：",[19,121545,121546,121547,121550],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[25,121548,121549],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[280,121552,121554],{"className":117469,"code":121553,"language":117471,"meta":205,"style":205},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[25,121555,121556],{"__ignoreMap":205},[288,121557,121558,121560],{"class":290,"line":291},[288,121559,26934],{"class":2135},[288,121561,121562],{"class":403}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121564,121565,121566,121569],{},"如果仍然遇到问题，可以通过 ",[25,121567,121568],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5299,121571,121572],{},"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":205,"searchDepth":206,"depth":206,"links":121574},[121575,121579,121589,121593,121594],{"id":118672,"depth":206,"text":118673,"children":121576},[121577,121578],{"id":118682,"depth":1352,"text":118683},{"id":118692,"depth":1352,"text":118693},{"id":118892,"depth":206,"text":118893,"children":121580},[121581,121582,121583,121584,121585,121586,121587,121588],{"id":118896,"depth":1352,"text":118897},{"id":118966,"depth":1352,"text":118967},{"id":119055,"depth":1352,"text":119056},{"id":119300,"depth":1352,"text":119301},{"id":119370,"depth":1352,"text":119371},{"id":119437,"depth":1352,"text":119438},{"id":119472,"depth":1352,"text":119473},{"id":119527,"depth":1352,"text":119528},{"id":119578,"depth":206,"text":119579,"children":121590},[121591,121592],{"id":119582,"depth":1352,"text":119583},{"id":119662,"depth":1352,"text":119663},{"id":119848,"depth":206,"text":119849},{"id":120021,"depth":206,"text":120022,"children":121595},[121596,121597,121598,121599,121600],{"id":120025,"depth":1352,"text":120026},{"id":120066,"depth":1352,"text":120067},{"id":120353,"depth":1352,"text":120354},{"id":120727,"depth":1352,"text":120728},{"id":121223,"depth":1352,"text":121224},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118664,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121607,"title":121608,"body":121609,"description":214,"extension":215,"meta":121949,"navigation":217,"path":121950,"seo":121951,"stem":121952,"__hash__":121953},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121610,"toc":121947},[121611,121614,121619,121622,121868,121873,121876,121912,121915,121944],[10,121612,121608],{"id":121613},"_4-命令教程长期积累",[243,121615,121616],{},[246,121617,121618],{},"大多数命令",[19,121620,121621],{},"常用 Linux 命令速查：",[280,121623,121625],{"className":117469,"code":121624,"language":117471,"meta":205,"style":205},"# 文件与目录\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",[25,121626,121627,121632,121639,121646,121654,121661,121668,121676,121684,121691,121698,121706,121710,121715,121722,121730,121737,121741,121746,121753,121761,121769,121777,121785,121789,121794,121802,121809,121816,121824,121832,121836,121841,121850,121859],{"__ignoreMap":205},[288,121628,121629],{"class":290,"line":291},[288,121630,121631],{"class":357},"# 文件与目录\n",[288,121633,121634,121636],{"class":290,"line":206},[288,121635,26934],{"class":2135},[288,121637,121638],{"class":357},"        # 列出目录内容\n",[288,121640,121641,121643],{"class":290,"line":1352},[288,121642,101449],{"class":347},[288,121644,121645],{"class":357},"        # 切换目录\n",[288,121647,121648,121651],{"class":290,"line":1367},[288,121649,121650],{"class":347},"pwd",[288,121652,121653],{"class":357},"       # 显示当前路径\n",[288,121655,121656,121658],{"class":290,"line":1373},[288,121657,101439],{"class":2135},[288,121659,121660],{"class":357},"     # 创建目录\n",[288,121662,121663,121665],{"class":290,"line":1387},[288,121664,25495],{"class":2135},[288,121666,121667],{"class":357},"        # 删除文件或目录\n",[288,121669,121670,121673],{"class":290,"line":1393},[288,121671,121672],{"class":2135},"cp",[288,121674,121675],{"class":357},"        # 复制文件或目录\n",[288,121677,121678,121681],{"class":290,"line":1484},[288,121679,121680],{"class":2135},"mv",[288,121682,121683],{"class":357},"        # 移动\u002F重命名文件或目录\n",[288,121685,121686,121688],{"class":290,"line":1490},[288,121687,101456],{"class":2135},[288,121689,121690],{"class":357},"     # 创建空文件\n",[288,121692,121693,121695],{"class":290,"line":1502},[288,121694,120938],{"class":2135},[288,121696,121697],{"class":357},"       # 查看文件内容\n",[288,121699,121700,121703],{"class":290,"line":1784},[288,121701,121702],{"class":2135},"head\u002Ftail",[288,121704,121705],{"class":357}," # 查看文件头部\u002F尾部\n",[288,121707,121708],{"class":290,"line":1789},[288,121709,2572],{"emptyLinePlaceholder":217},[288,121711,121712],{"class":290,"line":1795},[288,121713,121714],{"class":357},"# 权限管理\n",[288,121716,121717,121719],{"class":290,"line":1800},[288,121718,24784],{"class":2135},[288,121720,121721],{"class":357},"     # 修改文件权限\n",[288,121723,121724,121727],{"class":290,"line":1814},[288,121725,121726],{"class":2135},"chown",[288,121728,121729],{"class":357},"     # 修改文件所有者\n",[288,121731,121732,121734],{"class":290,"line":1819},[288,121733,24749],{"class":2135},[288,121735,121736],{"class":357},"      # 以管理员身份执行\n",[288,121738,121739],{"class":290,"line":1825},[288,121740,2572],{"emptyLinePlaceholder":217},[288,121742,121743],{"class":290,"line":1846},[288,121744,121745],{"class":357},"# 系统信息\n",[288,121747,121748,121750],{"class":290,"line":1851},[288,121749,70377],{"class":2135},[288,121751,121752],{"class":357},"     # 系统信息\n",[288,121754,121755,121758],{"class":290,"line":1865},[288,121756,121757],{"class":2135},"df",[288,121759,121760],{"class":357},"        # 磁盘使用情况\n",[288,121762,121763,121766],{"class":290,"line":1870},[288,121764,121765],{"class":2135},"free",[288,121767,121768],{"class":357},"      # 内存使用情况\n",[288,121770,121771,121774],{"class":290,"line":1899},[288,121772,121773],{"class":2135},"top\u002Fhtop",[288,121775,121776],{"class":357},"  # 进程监控\n",[288,121778,121779,121782],{"class":290,"line":1904},[288,121780,121781],{"class":2135},"ps",[288,121783,121784],{"class":357},"        # 查看进程\n",[288,121786,121787],{"class":290,"line":1921},[288,121788,2572],{"emptyLinePlaceholder":217},[288,121790,121791],{"class":290,"line":1926},[288,121792,121793],{"class":357},"# 网络\n",[288,121795,121796,121799],{"class":290,"line":1931},[288,121797,121798],{"class":2135},"ping",[288,121800,121801],{"class":357},"      # 测试网络连通性\n",[288,121803,121804,121806],{"class":290,"line":1936},[288,121805,27022],{"class":2135},[288,121807,121808],{"class":357},"      # 发送 HTTP 请求\n",[288,121810,121811,121813],{"class":290,"line":1950},[288,121812,120462],{"class":2135},[288,121814,121815],{"class":357},"      # 下载文件\n",[288,121817,121818,121821],{"class":290,"line":1955},[288,121819,121820],{"class":2135},"ssh",[288,121822,121823],{"class":357},"       # 远程登录\n",[288,121825,121826,121829],{"class":290,"line":2749},[288,121827,121828],{"class":2135},"scp",[288,121830,121831],{"class":357},"       # 远程文件传输\n",[288,121833,121834],{"class":290,"line":2763},[288,121835,2572],{"emptyLinePlaceholder":217},[288,121837,121838],{"class":290,"line":2771},[288,121839,121840],{"class":357},"# 包管理（Debian\u002FUbuntu）\n",[288,121842,121843,121845,121847],{"class":290,"line":2776},[288,121844,117541],{"class":2135},[288,121846,117520],{"class":403},[288,121848,121849],{"class":357},"   # 更新软件源\n",[288,121851,121852,121854,121856],{"class":290,"line":2782},[288,121853,117541],{"class":2135},[288,121855,24007],{"class":403},[288,121857,121858],{"class":357},"  # 安装软件包\n",[288,121860,121861,121863,121865],{"class":290,"line":2788},[288,121862,117541],{"class":2135},[288,121864,26252],{"class":403},[288,121866,121867],{"class":357},"   # 卸载软件包\n",[243,121869,121870],{"start":206},[246,121871,121872],{},"KDE Dolphin 以root打开",[19,121874,121875],{},"kde5",[280,121877,121879],{"className":117469,"code":121878,"language":117471,"meta":205,"style":205},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[25,121880,121881],{"__ignoreMap":205},[288,121882,121883,121886,121889,121892,121894,121896,121899,121902,121904,121907,121909],{"class":290,"line":291},[288,121884,121885],{"class":2135},"pkexec",[288,121887,121888],{"class":403}," env",[288,121890,121891],{"class":403}," DISPLAY=",[288,121893,28316],{"class":298},[288,121895,28374],{"class":403},[288,121897,121898],{"class":298},"$XAUTHORITY ",[288,121900,121901],{"class":403},"KDE_SESSION_VERSION=",[288,121903,616],{"class":347},[288,121905,121906],{"class":403}," KDE_FULL_SESSION=",[288,121908,1535],{"class":347},[288,121910,121911],{"class":403}," dolphin\n",[19,121913,121914],{},"kde6",[280,121916,121918],{"className":117469,"code":121917,"language":117471,"meta":205,"style":205},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[25,121919,121920],{"__ignoreMap":205},[288,121921,121922,121924,121926,121928,121930,121932,121934,121936,121938,121940,121942],{"class":290,"line":291},[288,121923,121885],{"class":2135},[288,121925,121888],{"class":403},[288,121927,121891],{"class":403},[288,121929,28316],{"class":298},[288,121931,28374],{"class":403},[288,121933,121898],{"class":298},[288,121935,121901],{"class":403},[288,121937,641],{"class":347},[288,121939,121906],{"class":403},[288,121941,1535],{"class":347},[288,121943,121911],{"class":403},[5299,121945,121946],{},"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":205,"searchDepth":206,"depth":206,"links":121948},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121608,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121955,"title":121956,"body":121957,"description":214,"extension":215,"meta":121971,"navigation":217,"path":121972,"seo":121973,"stem":121974,"__hash__":121975},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121958,"toc":121969},[121959,121962],[10,121960,121956],{"id":121961},"_5-各种环境配置",[19,121963,121964],{},[104,121965,121968],{"href":121966,"rel":121967},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[108],"电控组环境搭建大全",{"title":205,"searchDepth":206,"depth":206,"links":121970},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121956,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121977,"title":121978,"body":121979,"description":214,"extension":215,"meta":122327,"navigation":217,"path":122328,"seo":122329,"stem":122330,"__hash__":122331},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121980,"toc":122319},[121981,121984,121988,121992,121996,122001,122008,122012,122305,122309,122316],[10,121982,121978],{"id":121983},"_6-拓展功能",[14,121985,121987],{"id":121986},"_61-wine","6.1 Wine",[14,121989,121991],{"id":121990},"_62-android","6.2 Android",[260,121993,121995],{"id":121994},"_621-i卡a卡","6.2.1 I卡、A卡",[243,121997,121998],{},[246,121999,122000],{},"Wayland-Waydroid(体验超级好)",[19,122002,122003,122004],{},"Waydroid 官网与安装指南：",[104,122005,122006],{"href":122006,"rel":122007},"https:\u002F\u002Fwaydro.id\u002F",[108],[260,122009,122011],{"id":122010},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[243,122013,122014],{},[246,122015,122016,122017,122019,122020,122024,122026,122029,122034,122231],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53889,122018],{},"BlissOS 官网下载：",[104,122021,122022],{"href":122022,"rel":122023},"https:\u002F\u002Fblissos.org\u002F",[108],[53889,122025],{},[200,122027],{"alt":205,"src":122028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[243,122030,122031],{"start":1352},[246,122032,122033],{},"比较推荐的配置",[280,122035,122037],{"className":117469,"code":122036,"language":117471,"meta":205,"style":205},"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",[25,122038,122039,122046,122056,122066,122076,122088,122098,122105,122115,122124,122133,122143,122153,122162,122172,122182,122194,122204,122213,122223],{"__ignoreMap":205},[288,122040,122041,122044],{"class":290,"line":291},[288,122042,122043],{"class":2135},"qemu-system-x86_64",[288,122045,24851],{"class":347},[288,122047,122048,122051,122054],{"class":290,"line":206},[288,122049,122050],{"class":347},"        -M",[288,122052,122053],{"class":403}," q35,vmport=off",[288,122055,24851],{"class":347},[288,122057,122058,122061,122064],{"class":290,"line":1352},[288,122059,122060],{"class":347},"        -accel",[288,122062,122063],{"class":403}," kvm",[288,122065,24851],{"class":347},[288,122067,122068,122071,122074],{"class":290,"line":1367},[288,122069,122070],{"class":347},"        -cpu",[288,122072,122073],{"class":403}," qemu64,+sse3,+sse4.2",[288,122075,24851],{"class":347},[288,122077,122078,122081,122084,122086],{"class":290,"line":1373},[288,122079,122080],{"class":347},"        -smp",[288,122082,122083],{"class":403}," 8,cores=",[288,122085,590],{"class":347},[288,122087,24851],{"class":347},[288,122089,122090,122093,122096],{"class":290,"line":1387},[288,122091,122092],{"class":347},"        -m",[288,122094,122095],{"class":403}," 6G",[288,122097,24851],{"class":347},[288,122099,122100,122103],{"class":290,"line":1393},[288,122101,122102],{"class":347},"        -usb",[288,122104,24851],{"class":347},[288,122106,122107,122110,122113],{"class":290,"line":1484},[288,122108,122109],{"class":347},"        -device",[288,122111,122112],{"class":403}," virtio-tablet",[288,122114,24851],{"class":347},[288,122116,122117,122119,122122],{"class":290,"line":1490},[288,122118,122109],{"class":347},[288,122120,122121],{"class":403}," virtio-keyboard",[288,122123,24851],{"class":347},[288,122125,122126,122128,122131],{"class":290,"line":1502},[288,122127,122109],{"class":347},[288,122129,122130],{"class":403}," usb-tablet",[288,122132,24851],{"class":347},[288,122134,122135,122138,122141],{"class":290,"line":1784},[288,122136,122137],{"class":347},"        -bios",[288,122139,122140],{"class":403}," OVMF-pure-efi64.fd",[288,122142,24851],{"class":347},[288,122144,122145,122148,122151],{"class":290,"line":1789},[288,122146,122147],{"class":347},"        -net",[288,122149,122150],{"class":403}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[288,122152,24851],{"class":347},[288,122154,122155,122157,122160],{"class":290,"line":1795},[288,122156,122147],{"class":347},[288,122158,122159],{"class":403}," nic,model=virtio",[288,122161,24851],{"class":347},[288,122163,122164,122167,122170],{"class":290,"line":1800},[288,122165,122166],{"class":347},"        -audio",[288,122168,122169],{"class":403}," sdl,model=hda",[288,122171,24851],{"class":347},[288,122173,122174,122177,122180],{"class":290,"line":1814},[288,122175,122176],{"class":347},"        -display",[288,122178,122179],{"class":403}," sdl,gl=on,show-cursor=on",[288,122181,24851],{"class":347},[288,122183,122184,122186,122189,122192],{"class":290,"line":1819},[288,122185,122109],{"class":347},[288,122187,122188],{"class":403}," virtio-vga-gl,xres=1920,yres=",[288,122190,122191],{"class":347},"1080",[288,122193,24851],{"class":347},[288,122195,122196,122199,122202],{"class":290,"line":1825},[288,122197,122198],{"class":347},"        -drive",[288,122200,122201],{"class":403}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[288,122203,24851],{"class":347},[288,122205,122206,122208,122211],{"class":290,"line":1846},[288,122207,122198],{"class":347},[288,122209,122210],{"class":403}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[288,122212,24851],{"class":347},[288,122214,122215,122218,122221],{"class":290,"line":1851},[288,122216,122217],{"class":347},"        -monitor",[288,122219,122220],{"class":403}," stdio",[288,122222,24851],{"class":347},[288,122224,122225,122228],{"class":290,"line":1865},[288,122226,122227],{"class":347},"        -serial",[288,122229,122230],{"class":403}," none\n",[243,122232,122233],{"start":1373},[246,122234,122235,122236],{},"常用操作：",[243,122237,122238,122241,122297],{},[246,122239,122240],{},"全屏：Ctrl+Alt+F",[246,122242,122243,122244,122249],{},"adb调试",[243,122245,122246],{},[246,122247,122248],{},"使Linux与Android用ADB连接。",[280,122250,122252],{"className":117469,"code":122251,"language":117471,"meta":205,"style":205},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[25,122253,122254,122259,122270,122275,122287,122292],{"__ignoreMap":205},[288,122255,122256],{"class":290,"line":291},[288,122257,122258],{"class":357},"# 连接安卓\n",[288,122260,122261,122264,122267],{"class":290,"line":206},[288,122262,122263],{"class":2135},"adb",[288,122265,122266],{"class":403}," connect",[288,122268,122269],{"class":347}," 127.0.0.1\n",[288,122271,122272],{"class":290,"line":1352},[288,122273,122274],{"class":357},"# 打开shell\n",[288,122276,122277,122279,122281,122284],{"class":290,"line":1367},[288,122278,122263],{"class":2135},[288,122280,27056],{"class":347},[288,122282,122283],{"class":403}," 127.0.0.1:5555",[288,122285,122286],{"class":403}," shell\n",[288,122288,122289],{"class":290,"line":1373},[288,122290,122291],{"class":357},"# 使用root权限\n",[288,122293,122294],{"class":290,"line":1387},[288,122295,122296],{"class":2135},"su\n",[246,122298,122299,122300],{},"中文输入法",[243,122301,122302],{},[246,122303,122304],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122306,122308],{"id":122307},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122310,122311,122312],{},"rEFInd 官网与文档：",[104,122313,122314],{"href":122314,"rel":122315},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[108],[5299,122317,122318],{},"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":205,"searchDepth":206,"depth":206,"links":122320},[122321,122322,122326],{"id":121986,"depth":206,"text":121987},{"id":121990,"depth":206,"text":121991,"children":122323},[122324,122325],{"id":121994,"depth":1352,"text":121995},{"id":122010,"depth":1352,"text":122011},{"id":122307,"depth":206,"text":122308},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121978,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122333,"title":122334,"body":122335,"description":214,"extension":215,"meta":125634,"navigation":217,"path":125635,"seo":125636,"stem":125637,"__hash__":125638},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122336,"toc":125608},[122337,122340,122344,122347,122354,122604,122607,122679,122682,122686,122690,122695,122698,122701,122704,122709,122712,122715,122718,122723,122726,122731,122734,122737,122742,122745,122750,122753,122757,122761,122764,122769,122772,122786,122789,122792,122801,122804,122813,122816,122819,122828,122831,122840,122843,122846,122855,122858,122861,122876,122879,122882,122891,122896,122899,122902,122911,122914,122923,122926,122935,122938,122947,122952,122955,122963,122968,122971,122980,122983,122991,122996,122999,123008,123011,123014,123018,123021,123026,123029,123034,123048,123053,123058,123069,123074,123080,123085,123100,123105,123108,123113,123118,123123,123131,123136,123143,123148,123159,123164,123167,123171,123174,123177,123182,123185,123204,123209,123212,123221,123226,123229,123251,123254,123284,123287,123292,123295,123309,123314,123333,123336,123339,123344,123356,123361,123366,123369,123374,123377,123392,123395,123400,123405,123409,123414,123454,123457,123461,123467,123473,123478,123481,123488,123493,123500,123503,123506,123513,123527,123530,123590,123593,123607,123619,123622,123625,123628,123692,123695,123698,123701,123721,123724,123729,123736,123740,123743,123747,123752,123757,123761,123764,123767,123809,123814,123817,123839,123854,123856,123861,123873,123933,123935,123937,123991,123993,123995,124001,124006,124009,124014,124018,124021,124083,124088,124091,124093,124097,124109,124191,124193,124195,124249,124255,124257,124261,124266,124268,124273,124277,124297,124332,124336,124339,124342,124345,124352,124355,124367,124370,124385,124388,124407,124455,124458,124475,124478,124492,124497,124500,124509,124524,124536,124574,124579,124588,124593,124598,124624,124633,124637,124641,124646,124649,124653,124657,124662,124665,124670,124673,124678,124681,124686,124689,124693,124698,124701,124706,124709,124713,124718,124721,124726,124729,124734,124737,124741,124746,124749,124754,124757,124762,124765,124769,124774,124777,124782,124785,124790,124793,124798,124801,124806,124809,124814,124817,124821,124826,124829,124834,124841,124845,124850,124853,124858,124861,124865,124870,124873,124876,124879,124882,124885,124889,124892,124902,124907,124912,124934,124939,124944,124951,124955,124960,124963,124966,124971,124974,124977,124980,124983,124986,124989,124992,124995,124998,125001,125004,125007,125012,125017,125022,125027,125032,125037,125042,125045,125049,125052,125056,125061,125066,125071,125076,125080,125086,125094,125099,125102,125107,125122,125125,125130,125164,125179,125182,125237,125263,125275,125278,125287,125290,125305,125310,125313,125319,125324,125327,125332,125335,125340,125345,125352,125355,125370,125373,125408,125413,125421,125459,125462,125465,125470,125473,125478,125489,125523,125528,125531,125540,125545,125551,125554,125559,125568,125573,125576,125579,125584,125592,125595,125600,125605],[10,122338,122334],{"id":122339},"_7-其他操作",[14,122341,122343],{"id":122342},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122345,122346],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122348,122349,122350,122353],{},"进入工控机的硬盘目录，进入",[25,122351,122352],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[280,122355,122359],{"className":122356,"code":122357,"language":122358,"meta":205,"style":205},"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",[25,122360,122361,122369,122380,122387,122394,122406,122413,122425,122436,122447,122454,122461,122468,122480,122492,122499,122511,122523,122530,122542,122554,122566,122577,122584,122595],{"__ignoreMap":205},[288,122362,122363,122366],{"class":290,"line":291},[288,122364,122365],{"class":51473},"network",[288,122367,122368],{"class":298},": \n",[288,122370,122371,122374,122376,122378],{"class":290,"line":206},[288,122372,122373],{"class":51473},"  version",[288,122375,51610],{"class":298},[288,122377,376],{"class":347},[288,122379,2846],{"class":298},[288,122381,122382,122385],{"class":290,"line":1352},[288,122383,122384],{"class":51473},"  wifis",[288,122386,122368],{"class":298},[288,122388,122389,122392],{"class":290,"line":1367},[288,122390,122391],{"class":51473},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[288,122393,122368],{"class":298},[288,122395,122396,122399,122401,122404],{"class":290,"line":1373},[288,122397,122398],{"class":51473},"      renderer",[288,122400,51610],{"class":298},[288,122402,122403],{"class":403},"NetworkManager",[288,122405,2846],{"class":298},[288,122407,122408,122411],{"class":290,"line":1387},[288,122409,122410],{"class":51473},"      match",[288,122412,122368],{"class":298},[288,122414,122415,122418,122420,122423],{"class":290,"line":1393},[288,122416,122417],{"class":51473},"        name",[288,122419,51610],{"class":298},[288,122421,122422],{"class":403},"\"wlan0\"",[288,122424,2846],{"class":298},[288,122426,122427,122430,122432,122434],{"class":290,"line":1484},[288,122428,122429],{"class":51473},"      dhcp4",[288,122431,51610],{"class":298},[288,122433,1535],{"class":347},[288,122435,2846],{"class":298},[288,122437,122438,122441,122443,122445],{"class":290,"line":1490},[288,122439,122440],{"class":51473},"      dhcp6",[288,122442,51610],{"class":298},[288,122444,1535],{"class":347},[288,122446,2846],{"class":298},[288,122448,122449,122452],{"class":290,"line":1502},[288,122450,122451],{"class":51473},"      access-points",[288,122453,122368],{"class":298},[288,122455,122456,122459],{"class":290,"line":1784},[288,122457,122458],{"class":403},"        \"EMIS_Vinci_Robocon_5G\"",[288,122460,122368],{"class":298},[288,122462,122463,122466],{"class":290,"line":1789},[288,122464,122465],{"class":51473},"          auth",[288,122467,122368],{"class":298},[288,122469,122470,122473,122475,122478],{"class":290,"line":1795},[288,122471,122472],{"class":51473},"            key-management",[288,122474,51610],{"class":298},[288,122476,122477],{"class":403},"\"psk\"",[288,122479,2846],{"class":298},[288,122481,122482,122485,122487,122490],{"class":290,"line":1800},[288,122483,122484],{"class":51473},"            password",[288,122486,51610],{"class":298},[288,122488,122489],{"class":403},"\"vinci666\"",[288,122491,2846],{"class":298},[288,122493,122494,122497],{"class":290,"line":1814},[288,122495,122496],{"class":51473},"          networkmanager",[288,122498,122368],{"class":298},[288,122500,122501,122504,122506,122509],{"class":290,"line":1819},[288,122502,122503],{"class":51473},"            uuid",[288,122505,51610],{"class":298},[288,122507,122508],{"class":403},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[288,122510,2846],{"class":298},[288,122512,122513,122516,122518,122521],{"class":290,"line":1825},[288,122514,122515],{"class":51473},"            name",[288,122517,51610],{"class":298},[288,122519,122520],{"class":403},"\"EMIS_Vinci_Robocon_5G\"",[288,122522,2846],{"class":298},[288,122524,122525,122528],{"class":290,"line":1846},[288,122526,122527],{"class":51473},"            passthrough",[288,122529,122368],{"class":298},[288,122531,122532,122535,122537,122540],{"class":290,"line":1851},[288,122533,122534],{"class":51473},"              wifi-security.auth-alg",[288,122536,51610],{"class":298},[288,122538,122539],{"class":403},"\"open\"",[288,122541,2846],{"class":298},[288,122543,122544,122547,122549,122552],{"class":290,"line":1865},[288,122545,122546],{"class":51473},"              ipv6.addr-gen-mode",[288,122548,51610],{"class":298},[288,122550,122551],{"class":403},"\"default\"",[288,122553,2846],{"class":298},[288,122555,122556,122559,122561,122564],{"class":290,"line":1870},[288,122557,122558],{"class":51473},"              ipv6.ip6-privacy",[288,122560,51610],{"class":298},[288,122562,122563],{"class":403},"\"-1\"",[288,122565,2846],{"class":298},[288,122567,122568,122571,122573,122575],{"class":290,"line":1899},[288,122569,122570],{"class":51473},"              proxy._",[288,122572,51610],{"class":298},[288,122574,7825],{"class":403},[288,122576,2846],{"class":298},[288,122578,122579,122582],{"class":290,"line":1904},[288,122580,122581],{"class":51473},"      networkmanager",[288,122583,122368],{"class":298},[288,122585,122586,122589,122591,122593],{"class":290,"line":1921},[288,122587,122588],{"class":51473},"        uuid",[288,122590,51610],{"class":298},[288,122592,122508],{"class":403},[288,122594,2846],{"class":298},[288,122596,122597,122599,122601],{"class":290,"line":1926},[288,122598,122417],{"class":51473},[288,122600,51610],{"class":298},[288,122602,122603],{"class":403},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122605,122606],{},"将其改为新wifi的名和密码：",[280,122608,122610],{"className":122356,"code":122609,"language":122358,"meta":205,"style":205},"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",[25,122611,122612,122618,122627,122633,122640,122649,122657,122663,122669],{"__ignoreMap":205},[288,122613,122614,122616],{"class":290,"line":291},[288,122615,122365],{"class":51473},[288,122617,3911],{"class":298},[288,122619,122620,122622,122624],{"class":290,"line":206},[288,122621,122373],{"class":51473},[288,122623,51610],{"class":298},[288,122625,122626],{"class":347},"2\n",[288,122628,122629,122631],{"class":290,"line":1352},[288,122630,122384],{"class":51473},[288,122632,3911],{"class":298},[288,122634,122635,122638],{"class":290,"line":1367},[288,122636,122637],{"class":51473},"    wlan0",[288,122639,3911],{"class":298},[288,122641,122642,122644,122646],{"class":290,"line":1373},[288,122643,122429],{"class":51473},[288,122645,51610],{"class":298},[288,122647,122648],{"class":347},"true\n",[288,122650,122651,122653,122655],{"class":290,"line":1387},[288,122652,122440],{"class":51473},[288,122654,51610],{"class":298},[288,122656,122648],{"class":347},[288,122658,122659,122661],{"class":290,"line":1393},[288,122660,122451],{"class":51473},[288,122662,3911],{"class":298},[288,122664,122665,122667],{"class":290,"line":1484},[288,122666,122458],{"class":403},[288,122668,3911],{"class":298},[288,122670,122671,122674,122676],{"class":290,"line":1490},[288,122672,122673],{"class":51473},"          password",[288,122675,51610],{"class":298},[288,122677,122678],{"class":403},"\"vinci666\"\n",[19,122680,122681],{},"工控机开机即可连上网。",[14,122683,122685],{"id":122684},"_72-ssh远程开发","7.2 SSH远程开发",[260,122687,122689],{"id":122688},"_721-环境准备","7.2.1 环境准备",[19,122691,122692],{},[448,122693,122694],{},"1.硬件准备",[19,122696,122697],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122699,122700],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122702,122703],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122705,122706],{},[448,122707,122708],{},"2.设置固定IP",[19,122710,122711],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122713,122714],{},"1.进入设置界面",[19,122716,122717],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122719,122720],{},[200,122721],{"alt":205,"src":122722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122724,122725],{},"2.配置所连接的网络",[19,122727,122728],{},[200,122729],{"alt":205,"src":122730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122732,122733],{},"3.设置固定IP",[19,122735,122736],{},"查看当前IP地址。",[19,122738,122739],{},[200,122740],{"alt":205,"src":122741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122743,122744],{},"设置固定IP。",[19,122746,122747],{},[200,122748],{"alt":205,"src":122749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122751,122752],{},"至此，IP配置完毕。",[260,122754,122756],{"id":122755},"_722-环境搭建","7.2.2 环境搭建",[19,122758,122759],{},[448,122760,25926],{},[19,122762,122763],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122765,122766],{},[448,122767,122768],{},"实现",[19,122770,122771],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[243,122773,122774,122777,122780,122783],{},[246,122775,122776],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[246,122778,122779],{},"远程主机启动SSH服务；",[246,122781,122782],{},"本地主机登陆远程主机；",[246,122784,122785],{},"实现数据传输。",[19,122787,122788],{},"1.安装SSH客户端与服务端",[19,122790,122791],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[280,122793,122795],{"className":120989,"code":122794,"language":120991,"meta":120992,"style":205}," sudo apt install openssh-server\n",[25,122796,122797],{"__ignoreMap":205},[288,122798,122799],{"class":290,"line":291},[288,122800,122794],{},[19,122802,122803],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[280,122805,122807],{"className":120989,"code":122806,"language":120991,"meta":120992,"style":205},"sudo apt install openssh-client\n",[25,122808,122809],{"__ignoreMap":205},[288,122810,122811],{"class":290,"line":291},[288,122812,122806],{},[19,122814,122815],{},"2.远程主机启动SSH服务",[19,122817,122818],{},"远程主机启动 ssh 服务命令如下：",[280,122820,122822],{"className":120989,"code":122821,"language":120991,"meta":120992,"style":205},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[25,122823,122824],{"__ignoreMap":205},[288,122825,122826],{"class":290,"line":291},[288,122827,122821],{},[19,122829,122830],{},"启动后可使用如下命令查看服务是否正常运行：",[280,122832,122834],{"className":120989,"code":122833,"language":120991,"meta":120992,"style":205},"ps -e | grep ssh\n",[25,122835,122836],{"__ignoreMap":205},[288,122837,122838],{"class":290,"line":291},[288,122839,122833],{},[19,122841,122842],{},"如果启动成功，会包含 sshd 程序。",[19,122844,122845],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[280,122847,122849],{"className":120989,"code":122848,"language":120991,"meta":120992,"style":205},"sudo systemctl enable ssh\n",[25,122850,122851],{"__ignoreMap":205},[288,122852,122853],{"class":290,"line":291},[288,122854,122848],{},[19,122856,122857],{},"3.本地远程登录",[19,122859,122860],{},"登录远程主机可以调用如下命令:",[280,122862,122864],{"className":117469,"code":122863,"language":117471,"meta":205,"style":205},"ssh -X 用户名@ip地址\n",[25,122865,122866],{"__ignoreMap":205},[288,122867,122868,122870,122873],{"class":290,"line":291},[288,122869,121820],{"class":2135},[288,122871,122872],{"class":347}," -X",[288,122874,122875],{"class":403}," 用户名@ip地址\n",[19,122877,122878],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122880,122881],{},"如果退出，可以调用exit命令：",[280,122883,122885],{"className":120989,"code":122884,"language":120991,"meta":120992,"style":205},"exit\n",[25,122886,122887],{"__ignoreMap":205},[288,122888,122889],{"class":290,"line":291},[288,122890,122884],{},[19,122892,122893],{},[448,122894,122895],{},"4.实现数据传输",[19,122897,122898],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122900,122901],{},"上传文件指令格式如下：",[280,122903,122905],{"className":120989,"code":122904,"language":120991,"meta":120992,"style":205},"scp 本地文件路径 账号@ip:路径\n",[25,122906,122907],{"__ignoreMap":205},[288,122908,122909],{"class":290,"line":291},[288,122910,122904],{},[19,122912,122913],{},"上传文件夹指令格式如下：",[280,122915,122917],{"className":120989,"code":122916,"language":120991,"meta":120992,"style":205},"scp -r 本地文件夹路径 账号@ip:路径\n",[25,122918,122919],{"__ignoreMap":205},[288,122920,122921],{"class":290,"line":291},[288,122922,122916],{},[19,122924,122925],{},"下载文件指令格式如下：",[280,122927,122929],{"className":120989,"code":122928,"language":120991,"meta":120992,"style":205},"scp 账号@ip:路径 本地文件夹路径\n",[25,122930,122931],{"__ignoreMap":205},[288,122932,122933],{"class":290,"line":291},[288,122934,122928],{},[19,122936,122937],{},"下载文件夹指令格式如下：",[280,122939,122941],{"className":120989,"code":122940,"language":120991,"meta":120992,"style":205},"scp -r 账号@ip:路径 本地文件夹路径\n",[25,122942,122943],{"__ignoreMap":205},[288,122944,122945],{"class":290,"line":291},[288,122946,122940],{},[19,122948,122949],{},[448,122950,122951],{},"优化",[19,122953,122954],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[243,122956,122957,122960],{},[246,122958,122959],{},"本地生成密钥对；",[246,122961,122962],{},"将公钥上传至远程主机。",[19,122964,122965],{},[448,122966,122967],{},"1.生成密钥对",[19,122969,122970],{},"本地客户端生成公私钥：（一路回车默认即可）",[280,122972,122974],{"className":120989,"code":122973,"language":120991,"meta":120992,"style":205},"ssh-keygen\n",[25,122975,122976],{"__ignoreMap":205},[288,122977,122978],{"class":290,"line":291},[288,122979,122973],{},[19,122981,122982],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[243,122984,122985,122988],{},[246,122986,122987],{},"id_rsa （私钥）；",[246,122989,122990],{},"id_rsa.pub (公钥)。",[19,122992,122993],{},[448,122994,122995],{},"2.公钥上传",[19,122997,122998],{},"上传指令如下：",[280,123000,123002],{"className":120989,"code":123001,"language":120991,"meta":120992,"style":205},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[25,123003,123004],{"__ignoreMap":205},[288,123005,123006],{"class":290,"line":291},[288,123007,123001],{},[19,123009,123010],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123012,123013],{},"以后再远程登录就无需录入密码了。",[260,123015,123017],{"id":123016},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123019,123020],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123022,123023],{},[448,123024,123025],{},"1.准备工作",[19,123027,123028],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123030,123031],{},[448,123032,123033],{},"2.为VScode安装远程开发插件",[19,123035,123036,123037,123040,123041,123044,123045,28558],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[25,123038,123039],{},"扩展：商店","的搜索栏输入",[25,123042,123043],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[25,123046,123047],{},"安装",[19,123049,123050],{},[200,123051],{"alt":205,"src":123052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123054,123055],{},[448,123056,123057],{},"3.配置远程连接",[19,123059,123060,123061,123064,123065,123068],{},"步骤1：使用快捷键",[25,123062,123063],{},"ctrl + shift + p","打开命令输入窗口，并输入",[25,123066,123067],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123070,123071],{},[200,123072],{"alt":205,"src":123073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123075,123076,123077,28558],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[25,123078,123079],{},"Add New SSH Host",[19,123081,123082],{},[200,123083],{"alt":205,"src":123084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123086,123087,123088,123091,123092,123095,123096,123099],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[25,123089,123090],{},"ssh +X ubuntu@192.168.43.164","，其中，",[25,123093,123094],{},"ubuntu","需要替换为你的登录用户名，",[25,123097,123098],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123101,123102],{},[200,123103],{"alt":205,"src":123104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123106,123107],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123109,123110],{},[200,123111],{"alt":205,"src":123112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123114,123115],{},[200,123116],{"alt":205,"src":123117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123119,123120],{},[448,123121,123122],{},"4.使用",[19,123124,123125,123126,123064,123128,123130],{},"步骤1：继续使用快捷键",[25,123127,123063],{},[25,123129,123067],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123132,123133],{},[200,123134],{"alt":205,"src":123135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123137,123138,123139,123142],{},"或者，也可以点击侧边栏的",[25,123140,123141],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123144,123145],{},[200,123146],{"alt":205,"src":123147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123149,123150,123151,123154,123155,123158],{},"步骤2：选择菜单栏的",[25,123152,123153],{},"文件","下的",[25,123156,123157],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123160,123161],{},[200,123162],{"alt":205,"src":123163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123165,123166],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123168,123170],{"id":123169},"_73-远程桌面","7.3 远程桌面",[19,123172,123173],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123175,123176],{},"我们选择使用VNC来看。",[243,123178,123179],{},[246,123180,123181],{},"安装VNC服务器：",[19,123183,123184],{},"这里以TigerVNC为例进行安装：",[280,123186,123188],{"className":117469,"code":123187,"language":117471,"meta":205,"style":205},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[25,123189,123190],{"__ignoreMap":205},[288,123191,123192,123194,123196,123198,123201],{"class":290,"line":291},[288,123193,24749],{"class":2135},[288,123195,117490],{"class":403},[288,123197,24007],{"class":403},[288,123199,123200],{"class":403}," tigervnc-standalone-server",[288,123202,123203],{"class":403}," tigervnc-common\n",[243,123205,123206],{"start":206},[246,123207,123208],{},"设置VNC密码：",[19,123210,123211],{},"为VNC用户设置密码，运行以下命令：",[280,123213,123215],{"className":117469,"code":123214,"language":117471,"meta":205,"style":205},"vncpasswd\n",[25,123216,123217],{"__ignoreMap":205},[288,123218,123219],{"class":290,"line":291},[288,123220,123214],{"class":2135},[243,123222,123223],{"start":1352},[246,123224,123225],{},"配置VNC启动脚本:",[19,123227,123228],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[280,123230,123232],{"className":117469,"code":123231,"language":117471,"meta":205,"style":205},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[25,123233,123234,123243],{"__ignoreMap":205},[288,123235,123236,123238,123240],{"class":290,"line":291},[288,123237,101439],{"class":2135},[288,123239,29389],{"class":347},[288,123241,123242],{"class":403}," ~\u002F.vnc\n",[288,123244,123245,123248],{"class":290,"line":206},[288,123246,123247],{"class":2135},"nano",[288,123249,123250],{"class":403}," ~\u002F.vnc\u002Fxstartup\n",[19,123252,123253],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[280,123255,123257],{"className":117469,"code":123256,"language":117471,"meta":205,"style":205},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[25,123258,123259,123264,123272,123279],{"__ignoreMap":205},[288,123260,123261],{"class":290,"line":291},[288,123262,123263],{"class":357},"#!\u002Fbin\u002Fsh\n",[288,123265,123266,123269],{"class":290,"line":206},[288,123267,123268],{"class":347},"unset",[288,123270,123271],{"class":403}," SESSION_MANAGER\n",[288,123273,123274,123276],{"class":290,"line":1352},[288,123275,123268],{"class":347},[288,123277,123278],{"class":403}," DBUS_SESSION_BUS_ADDRESS\n",[288,123280,123281],{"class":290,"line":1367},[288,123282,123283],{"class":2135},"gnome-session\n",[19,123285,123286],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[243,123288,123289],{"start":1367},[246,123290,123291],{},"给予执行权限：",[19,123293,123294],{},"为xstartup文件设置执行权限：",[280,123296,123298],{"className":117469,"code":123297,"language":117471,"meta":205,"style":205},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[25,123299,123300],{"__ignoreMap":205},[288,123301,123302,123304,123307],{"class":290,"line":291},[288,123303,24784],{"class":2135},[288,123305,123306],{"class":403}," +x",[288,123308,123250],{"class":403},[243,123310,123311],{"start":1373},[246,123312,123313],{},"启动VNC服务器：",[280,123315,123317],{"className":117469,"code":123316,"language":117471,"meta":205,"style":205},"vncserver -geometry 1920x1080 -localhost=0\n",[25,123318,123319],{"__ignoreMap":205},[288,123320,123321,123324,123327,123330],{"class":290,"line":291},[288,123322,123323],{"class":2135},"vncserver",[288,123325,123326],{"class":347}," -geometry",[288,123328,123329],{"class":403}," 1920x1080",[288,123331,123332],{"class":347}," -localhost=0\n",[19,123334,123335],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123337,123338],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[243,123340,123341],{"start":1387},[246,123342,123343],{},"查看已开启的VNC服务器：",[280,123345,123347],{"className":117469,"code":123346,"language":117471,"meta":205,"style":205},"vncserver -list\n",[25,123348,123349],{"__ignoreMap":205},[288,123350,123351,123353],{"class":290,"line":291},[288,123352,123323],{"class":2135},[288,123354,123355],{"class":347}," -list\n",[19,123357,123358],{},[200,123359],{"alt":205,"src":123360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[243,123362,123363],{"start":1393},[246,123364,123365],{},"连接到VNC服务器：",[19,123367,123368],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[243,123370,123371],{"start":1484},[246,123372,123373],{},"停止VNC服务器：",[19,123375,123376],{},"如果需要停止VNC服务器，可以使用以下命令：",[280,123378,123380],{"className":117469,"code":123379,"language":117471,"meta":205,"style":205},"vncserver -kill :1\n",[25,123381,123382],{"__ignoreMap":205},[288,123383,123384,123386,123389],{"class":290,"line":291},[288,123385,123323],{"class":2135},[288,123387,123388],{"class":347}," -kill",[288,123390,123391],{"class":403}," :1\n",[19,123393,123394],{},"将:1替换为你实际使用的显示编号。",[19,123396,123397],{},[200,123398],{"alt":205,"src":123399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123401,123402],{},[200,123403],{"alt":205,"src":123404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123406,123408],{"id":123407},"_74-usb端口设置","7.4 USB端口设置",[19,123410,123411],{},[448,123412,123413],{},"首先先配置好权限",[280,123415,123417],{"className":117469,"code":123416,"language":117471,"meta":205,"style":205},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[25,123418,123419,123424,123437,123444,123449],{"__ignoreMap":205},[288,123420,123421],{"class":290,"line":291},[288,123422,123423],{"class":357},"# 将用户权限提高\n",[288,123425,123426,123428,123430,123432,123435],{"class":290,"line":206},[288,123427,24749],{"class":2135},[288,123429,26747],{"class":403},[288,123431,26750],{"class":347},[288,123433,123434],{"class":403}," dialout",[288,123436,26755],{"class":298},[288,123438,123439,123441],{"class":290,"line":1352},[288,123440,26774],{"class":2135},[288,123442,123443],{"class":403}," dialout\n",[288,123445,123446],{"class":290,"line":1367},[288,123447,123448],{"class":357},"# 查看下面命令是否输出dialout（若输出才正常）\n",[288,123450,123451],{"class":290,"line":1373},[288,123452,123453],{"class":2135},"groups\n",[19,123455,123456],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[260,123458,123460],{"id":123459},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123462,123463,123466],{},[448,123464,123465],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123468,123469,123472],{},[448,123470,123471],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123474,123475],{},[448,123476,123477],{},"流程如下：",[19,123479,123480],{},"（1）.查找设备idVendor和idProduct",[19,123482,123483,123484,123487],{},"接入两个USB设备，在终端调用指令",[25,123485,123486],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123489,123490],{},[200,123491],{"alt":205,"src":123492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123494,123495,123496,123499],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[25,123497,123498],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123501,123502],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123504,123505],{},"（2）.编写映射规则",[19,123507,123508,123509,123512],{},"在",[25,123510,123511],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[280,123514,123516],{"className":117469,"code":123515,"language":117471,"meta":205,"style":205},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[25,123517,123518],{"__ignoreMap":205},[288,123519,123520,123522,123524],{"class":290,"line":291},[288,123521,24749],{"class":2135},[288,123523,118756],{"class":403},[288,123525,123526],{"class":403}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123528,123529],{},"输入如下内容：",[280,123531,123533],{"className":117469,"code":123532,"language":117471,"meta":205,"style":205},"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",[25,123534,123535,123565],{"__ignoreMap":205},[288,123536,123537,123540,123542,123545,123548,123551,123554,123556,123559,123562],{"class":290,"line":291},[288,123538,123539],{"class":298},"KERNEL",[288,123541,344],{"class":294},[288,123543,123544],{"class":403},"=\"ttyUSB*\",",[288,123546,123547],{"class":2135}," ATTRS",[288,123549,123550],{"class":403},"{idVendor}==",[288,123552,123553],{"class":2135},"\"10c4\"",[288,123555,675],{"class":2135},[288,123557,123558],{"class":403}," ATTRS{idProduct}==\"ea60\",",[288,123560,123561],{"class":403}," MODE:=\"0777\",",[288,123563,123564],{"class":403}," SYMLINK+=\"mylidar\"\n",[288,123566,123567,123569,123571,123573,123575,123577,123580,123582,123585,123587],{"class":290,"line":206},[288,123568,123539],{"class":298},[288,123570,344],{"class":294},[288,123572,123544],{"class":403},[288,123574,123547],{"class":2135},[288,123576,123550],{"class":403},[288,123578,123579],{"class":2135},"\"1a86\"",[288,123581,675],{"class":2135},[288,123583,123584],{"class":403}," ATTRS{idProduct}==\"7523\",",[288,123586,123561],{"class":403},[288,123588,123589],{"class":403}," SYMLINK+=\"mycar\"\n",[19,123591,123592],{},"代码解释：",[1304,123594,123595,123598,123601,123604],{},[246,123596,123597],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[246,123599,123600],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[246,123602,123603],{},"SYMLINK是符号连接，即绑定的别名；",[246,123605,123606],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123608,123609,123610,123613,123616],{},"***小提示：***",[23726,123611,123612],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[25,123614,123615],{},"\u002Fetc\u002Fudev\u002Frule.d",[23726,123617,123618],{},"目录即可。",[19,123620,123621],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123623,123624],{},"（3）.使规则生效",[19,123626,123627],{},"在终端下输入如下指令：",[280,123629,123631],{"className":117469,"code":123630,"language":117471,"meta":205,"style":205},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[25,123632,123633,123638,123650,123661,123665,123670,123683],{"__ignoreMap":205},[288,123634,123635],{"class":290,"line":291},[288,123636,123637],{"class":357},"# Ubuntu用下方命令\n",[288,123639,123640,123642,123644,123647],{"class":290,"line":206},[288,123641,24749],{"class":2135},[288,123643,120221],{"class":403},[288,123645,123646],{"class":403}," udev",[288,123648,123649],{"class":403}," reload\n",[288,123651,123652,123654,123656,123658],{"class":290,"line":1352},[288,123653,24749],{"class":2135},[288,123655,120221],{"class":403},[288,123657,123646],{"class":403},[288,123659,123660],{"class":403}," restart\n",[288,123662,123663],{"class":290,"line":1367},[288,123664,2572],{"emptyLinePlaceholder":217},[288,123666,123667],{"class":290,"line":1373},[288,123668,123669],{"class":357},"#Fedora用下方命令\n",[288,123671,123672,123674,123677,123680],{"class":290,"line":1387},[288,123673,24749],{"class":2135},[288,123675,123676],{"class":403}," udevadm",[288,123678,123679],{"class":403}," control",[288,123681,123682],{"class":347}," --reload\n",[288,123684,123685,123687,123689],{"class":290,"line":1393},[288,123686,24749],{"class":2135},[288,123688,123676],{"class":403},[288,123690,123691],{"class":403}," trigger\n",[19,123693,123694],{},"再重新插拔设备即可。",[19,123696,123697],{},"（4）.测试",[19,123699,123700],{},"终端下输入如下指令",[280,123702,123704],{"className":117469,"code":123703,"language":117471,"meta":205,"style":205},"ll \u002Fdev | grep ttyUSB\n",[25,123705,123706],{"__ignoreMap":205},[288,123707,123708,123711,123714,123716,123718],{"class":290,"line":291},[288,123709,123710],{"class":2135},"ll",[288,123712,123713],{"class":403}," \u002Fdev",[288,123715,25282],{"class":294},[288,123717,30409],{"class":2135},[288,123719,123720],{"class":403}," ttyUSB\n",[19,123722,123723],{},"运行结果如下：",[19,123725,123726],{},[200,123727],{"alt":205,"src":123728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123730,123731,123732,123735],{},"也可以多次插拔USB设备，会发现设备端口",[25,123733,123734],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123737,123738],{},[448,123739,118137],{},[19,123741,123742],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[260,123744,123746],{"id":123745},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123748,123749,123751],{},[448,123750,123465],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123753,123754,123756],{},[448,123755,123471],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123758,123759],{},[448,123760,123477],{},[19,123762,123763],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123765,123766],{},"调用如下指令查看第一台雷达的USB信息：",[280,123768,123770],{"className":117469,"code":123769,"language":117471,"meta":205,"style":205},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[25,123771,123772,123792],{"__ignoreMap":205},[288,123773,123774,123777,123779,123782,123785,123787,123789],{"class":290,"line":291},[288,123775,123776],{"class":2135},"udevadm",[288,123778,69994],{"class":403},[288,123780,123781],{"class":347}," --attribute-walk",[288,123783,123784],{"class":347}," --name=\u002Fdev\u002FttyUSB0",[288,123786,25282],{"class":294},[288,123788,30409],{"class":2135},[288,123790,123791],{"class":403}," KERNELS\n",[288,123793,123794,123796,123798,123800,123803,123805,123807],{"class":290,"line":206},[288,123795,123776],{"class":2135},[288,123797,69994],{"class":403},[288,123799,123781],{"class":347},[288,123801,123802],{"class":347}," --name=\u002Fdev\u002FttyACM0",[288,123804,25282],{"class":294},[288,123806,30409],{"class":2135},[288,123808,123791],{"class":403},[19,123810,123811],{},[200,123812],{"alt":205,"src":123813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123815,123816],{},"调用如下指令查看第二台雷达的USB信息：",[280,123818,123820],{"className":117469,"code":123819,"language":117471,"meta":205,"style":205},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[25,123821,123822],{"__ignoreMap":205},[288,123823,123824,123826,123828,123830,123833,123835,123837],{"class":290,"line":291},[288,123825,123776],{"class":2135},[288,123827,69994],{"class":403},[288,123829,123781],{"class":347},[288,123831,123832],{"class":347}," --name=\u002Fdev\u002FttyUSB1",[288,123834,25282],{"class":294},[288,123836,30409],{"class":2135},[288,123838,123791],{"class":403},[19,123840,123841,123842,123845,123846,123849,123850,123853],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[25,123843,123844],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[25,123847,123848],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[448,123851,123852],{},"唯一性标识","”。",[19,123855,123505],{},[19,123857,123508,123858,123860],{},[25,123859,123511],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[280,123862,123863],{"className":117469,"code":123515,"language":117471,"meta":205,"style":205},[25,123864,123865],{"__ignoreMap":205},[288,123866,123867,123869,123871],{"class":290,"line":291},[288,123868,24749],{"class":2135},[288,123870,118756],{"class":403},[288,123872,123526],{"class":403},[280,123874,123876],{"className":117469,"code":123875,"language":117471,"meta":205,"style":205},"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",[25,123877,123878,123907],{"__ignoreMap":205},[288,123879,123880,123882,123884,123886,123889,123891,123894,123897,123899,123902,123904],{"class":290,"line":291},[288,123881,123539],{"class":298},[288,123883,344],{"class":294},[288,123885,123544],{"class":403},[288,123887,123888],{"class":298}," KERNELS",[288,123890,344],{"class":294},[288,123892,123893],{"class":403},"=\"1-1.3:1.0\",",[288,123895,123896],{"class":2135}," MODE:",[288,123898,344],{"class":403},[288,123900,123901],{"class":2135},"\"0777\"",[288,123903,675],{"class":2135},[288,123905,123906],{"class":403}," SYMLINK+=\"rplidar_front\"\n",[288,123908,123909,123911,123913,123915,123917,123919,123922,123924,123926,123928,123930],{"class":290,"line":206},[288,123910,123539],{"class":298},[288,123912,344],{"class":294},[288,123914,123544],{"class":403},[288,123916,123888],{"class":298},[288,123918,344],{"class":294},[288,123920,123921],{"class":403},"=\"1-1.4:1.0\",",[288,123923,123896],{"class":2135},[288,123925,344],{"class":403},[288,123927,123901],{"class":2135},[288,123929,675],{"class":2135},[288,123931,123932],{"class":403}," SYMLINK+=\"rplidar_back\"\n",[19,123934,123624],{},[19,123936,123627],{},[280,123938,123939],{"className":117469,"code":123630,"language":117471,"meta":205,"style":205},[25,123940,123941,123945,123955,123965,123969,123973,123983],{"__ignoreMap":205},[288,123942,123943],{"class":290,"line":291},[288,123944,123637],{"class":357},[288,123946,123947,123949,123951,123953],{"class":290,"line":206},[288,123948,24749],{"class":2135},[288,123950,120221],{"class":403},[288,123952,123646],{"class":403},[288,123954,123649],{"class":403},[288,123956,123957,123959,123961,123963],{"class":290,"line":1352},[288,123958,24749],{"class":2135},[288,123960,120221],{"class":403},[288,123962,123646],{"class":403},[288,123964,123660],{"class":403},[288,123966,123967],{"class":290,"line":1367},[288,123968,2572],{"emptyLinePlaceholder":217},[288,123970,123971],{"class":290,"line":1373},[288,123972,123669],{"class":357},[288,123974,123975,123977,123979,123981],{"class":290,"line":1387},[288,123976,24749],{"class":2135},[288,123978,123676],{"class":403},[288,123980,123679],{"class":403},[288,123982,123682],{"class":347},[288,123984,123985,123987,123989],{"class":290,"line":1393},[288,123986,24749],{"class":2135},[288,123988,123676],{"class":403},[288,123990,123691],{"class":403},[19,123992,123694],{},[19,123994,123697],{},[19,123996,123700,123997,124000],{},[25,123998,123999],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124002,124003],{},[200,124004],{"alt":205,"src":124005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124007,124008],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124010,124011,124013],{},[448,124012,118137],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[260,124015,124017],{"id":124016},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124019,124020],{},"（1）.查看所连接的主机USB接口的信息",[280,124022,124024],{"className":117469,"code":124023,"language":117471,"meta":205,"style":205},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[25,124025,124026,124056],{"__ignoreMap":205},[288,124027,124028,124030,124032,124035,124037,124039,124041,124043,124046,124049,124051,124054],{"class":290,"line":291},[288,124029,123776],{"class":2135},[288,124031,69994],{"class":403},[288,124033,124034],{"class":347}," -a",[288,124036,29389],{"class":347},[288,124038,28595],{"class":298},[288,124040,123776],{"class":2135},[288,124042,69994],{"class":403},[288,124044,124045],{"class":347}," -q",[288,124047,124048],{"class":403}," path",[288,124050,25288],{"class":347},[288,124052,124053],{"class":403}," \u002Fdev\u002FttyACM0",[288,124055,305],{"class":298},[288,124057,124058,124060,124062,124064,124066,124068,124070,124072,124074,124076,124078,124081],{"class":290,"line":206},[288,124059,123776],{"class":2135},[288,124061,69994],{"class":403},[288,124063,124034],{"class":347},[288,124065,29389],{"class":347},[288,124067,28595],{"class":298},[288,124069,123776],{"class":2135},[288,124071,69994],{"class":403},[288,124073,124045],{"class":347},[288,124075,124048],{"class":403},[288,124077,25288],{"class":347},[288,124079,124080],{"class":403}," \u002Fdev\u002FttyUSB0",[288,124082,305],{"class":298},[19,124084,124085],{},[200,124086],{"alt":205,"src":124087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124089,124090],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124092,123505],{},[19,124094,123508,124095,123860],{},[25,124096,123511],{},[280,124098,124099],{"className":117469,"code":123515,"language":117471,"meta":205,"style":205},[25,124100,124101],{"__ignoreMap":205},[288,124102,124103,124105,124107],{"class":290,"line":291},[288,124104,24749],{"class":2135},[288,124106,118756],{"class":403},[288,124108,123526],{"class":403},[280,124110,124112],{"className":117469,"code":124111,"language":117471,"meta":205,"style":205},"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",[25,124113,124114,124142,124168],{"__ignoreMap":205},[288,124115,124116,124118,124120,124123,124125,124127,124129,124131,124134,124137,124139],{"class":290,"line":291},[288,124117,123539],{"class":298},[288,124119,344],{"class":294},[288,124121,124122],{"class":403},"=\"ttyACM*\",",[288,124124,123547],{"class":2135},[288,124126,123550],{"class":403},[288,124128,123579],{"class":2135},[288,124130,675],{"class":2135},[288,124132,124133],{"class":403}," ATTRS{idProduct}==\"55d4\",",[288,124135,124136],{"class":403}," ATTRS{serial}==\"0001\",",[288,124138,123561],{"class":403},[288,124140,124141],{"class":403}," SYMLINK+=\"ttyACM_MCU\"\n",[288,124143,124144,124146,124148,124150,124152,124154,124156,124158,124160,124163,124165],{"class":290,"line":206},[288,124145,123539],{"class":298},[288,124147,344],{"class":294},[288,124149,124122],{"class":403},[288,124151,123547],{"class":2135},[288,124153,123550],{"class":403},[288,124155,123579],{"class":2135},[288,124157,675],{"class":2135},[288,124159,124133],{"class":403},[288,124161,124162],{"class":403}," ATTRS{serial}==\"0002\",",[288,124164,123561],{"class":403},[288,124166,124167],{"class":403}," SYMLINK+=\"ttyACM_Lidar\"\n",[288,124169,124170,124172,124174,124176,124178,124180,124182,124184,124186,124188],{"class":290,"line":1352},[288,124171,123539],{"class":298},[288,124173,344],{"class":294},[288,124175,123544],{"class":403},[288,124177,123547],{"class":2135},[288,124179,123550],{"class":403},[288,124181,123579],{"class":2135},[288,124183,675],{"class":2135},[288,124185,123584],{"class":403},[288,124187,123561],{"class":403},[288,124189,124190],{"class":403}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124192,123624],{},[19,124194,123627],{},[280,124196,124197],{"className":117469,"code":123630,"language":117471,"meta":205,"style":205},[25,124198,124199,124203,124213,124223,124227,124231,124241],{"__ignoreMap":205},[288,124200,124201],{"class":290,"line":291},[288,124202,123637],{"class":357},[288,124204,124205,124207,124209,124211],{"class":290,"line":206},[288,124206,24749],{"class":2135},[288,124208,120221],{"class":403},[288,124210,123646],{"class":403},[288,124212,123649],{"class":403},[288,124214,124215,124217,124219,124221],{"class":290,"line":1352},[288,124216,24749],{"class":2135},[288,124218,120221],{"class":403},[288,124220,123646],{"class":403},[288,124222,123660],{"class":403},[288,124224,124225],{"class":290,"line":1367},[288,124226,2572],{"emptyLinePlaceholder":217},[288,124228,124229],{"class":290,"line":1373},[288,124230,123669],{"class":357},[288,124232,124233,124235,124237,124239],{"class":290,"line":1387},[288,124234,24749],{"class":2135},[288,124236,123676],{"class":403},[288,124238,123679],{"class":403},[288,124240,123682],{"class":347},[288,124242,124243,124245,124247],{"class":290,"line":1393},[288,124244,24749],{"class":2135},[288,124246,123676],{"class":403},[288,124248,123691],{"class":403},[19,124250,124251,124252],{},"再重新插拔设备即可，或者 ",[448,124253,124254],{},"直接重启系统。",[19,124256,123697],{},[19,124258,123700,124259,124000],{},[25,124260,123999],{},[19,124262,124263],{},[200,124264],{"alt":205,"src":124265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124267,124008],{},[19,124269,124270,124272],{},[448,124271,118137],{}," 一些设备可能没有串口号等。",[260,124274,124276],{"id":124275},"_744-其他注意事项","7.4.4 其他注意事项",[19,124278,124279,124280,124282,124283,124286,124287,18583,124290,124293,124294,124296],{},"并非所有的USB设备端口号都是",[25,124281,123734],{},"的格式，比如Arduino的端口号可能是",[25,124284,124285],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[25,124288,124289],{},"videon",[25,124291,124292],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[25,124295,124289],{},"端口，绑定时需要关联的也是该接口。",[19,124298,124299,124300,124303,124304,124307,124308,124310,124311,124314,124315,124318,124319,124322,124323,124322,124326,124322,124329,28558],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[25,124301,124302],{},"KERNEL==\"ttyUSB*\"","修改为",[25,124305,124306],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[25,124309,124302],{},"修改为类似于",[25,124312,124313],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[25,124316,124317],{},"video[0,2,4,6]","表示可以绑定的端口为",[25,124320,124321],{},"video0","或",[25,124324,124325],{},"video2",[25,124327,124328],{},"video4",[25,124330,124331],{},"video6",[14,124333,124335],{"id":124334},"_75-挂载内网网页","7.5 挂载内网网页",[19,124337,124338],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124340,124341],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124343,124344],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124346,124347,124348],{},"Termux 下载地址（F-Droid）：",[104,124349,124350],{"href":124350,"rel":124351},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[108],[19,124353,124354],{},"首先打开app后，先更新软件缓存：",[280,124356,124358],{"className":117469,"code":124357,"language":117471,"meta":205,"style":205},"pkg update\n",[25,124359,124360],{"__ignoreMap":205},[288,124361,124362,124365],{"class":290,"line":291},[288,124363,124364],{"class":2135},"pkg",[288,124366,26415],{"class":403},[19,124368,124369],{},"然后换源",[280,124371,124373],{"className":117469,"code":124372,"language":117471,"meta":205,"style":205},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[25,124374,124375],{"__ignoreMap":205},[288,124376,124377,124379,124382],{"class":290,"line":291},[288,124378,123247],{"class":2135},[288,124380,124381],{"class":298}," $PREFIX",[288,124383,124384],{"class":403},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124386,124387],{},"将该文件内容替换为下面：",[280,124389,124391],{"className":117469,"code":124390,"language":117471,"meta":205,"style":205},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[25,124392,124393],{"__ignoreMap":205},[288,124394,124395,124398,124401,124404],{"class":290,"line":291},[288,124396,124397],{"class":2135},"deb",[288,124399,124400],{"class":403}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[288,124402,124403],{"class":403}," stable",[288,124405,124406],{"class":403}," main\n",[1304,124408,124409,124436],{},[246,124410,124411,124412,124414,124415],{},"如果你使用的是",[25,124413,123247],{},"编辑器：",[1304,124416,124417,124424,124430],{},[246,124418,124419,124420,124423],{},"按 ",[25,124421,124422],{},"Ctrl+O"," 保存文件。",[246,124425,124419,124426,124429],{},[25,124427,124428],{},"Enter"," 确认文件名。",[246,124431,124419,124432,124435],{},[25,124433,124434],{},"Ctrl+X"," 退出编辑器。",[246,124437,124411,124438,124414,124441],{},[25,124439,124440],{},"vim",[1304,124442,124443,124449],{},[246,124444,124419,124445,124448],{},[25,124446,124447],{},"Esc"," 退出编辑模式。",[246,124450,124451,124452,124454],{},"输入 ",[25,124453,119394],{}," 保存并退出。",[19,124456,124457],{},"接下来重新更新软件源：",[280,124459,124461],{"className":117469,"code":124460,"language":117471,"meta":205,"style":205},"pkg update && pkg upgrade\n",[25,124462,124463],{"__ignoreMap":205},[288,124464,124465,124467,124469,124471,124473],{"class":290,"line":291},[288,124466,124364],{"class":2135},[288,124468,117520],{"class":403},[288,124470,26363],{"class":298},[288,124472,124364],{"class":2135},[288,124474,117506],{"class":403},[19,124476,124477],{},"安装python：",[280,124479,124481],{"className":117469,"code":124480,"language":117471,"meta":205,"style":205},"pkg install python\n",[25,124482,124483],{"__ignoreMap":205},[288,124484,124485,124487,124489],{"class":290,"line":291},[288,124486,124364],{"class":2135},[288,124488,24007],{"class":403},[288,124490,124491],{"class":403}," python\n",[19,124493,124494,26646],{},[448,124495,124496],{},"通过Termux访问设备存储",[19,124498,124499],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[280,124501,124503],{"className":117469,"code":124502,"language":117471,"meta":205,"style":205},"termux-setup-storage\n",[25,124504,124505],{"__ignoreMap":205},[288,124506,124507],{"class":290,"line":291},[288,124508,124502],{"class":2135},[243,124510,124511],{},[246,124512,124513,26646,124516],{},[448,124514,124515],{},"进入HTML文件所在的目录",[243,124517,124518],{},[246,124519,124520,124521,124523],{},"使用",[25,124522,101449],{},"命令进入HTML文件所在的目录：",[280,124525,124527],{"className":117469,"code":124526,"language":117471,"meta":205,"style":205},"cd ~\u002Fyour_html_folder\n",[25,124528,124529],{"__ignoreMap":205},[288,124530,124531,124533],{"class":290,"line":291},[288,124532,101449],{"class":347},[288,124534,124535],{"class":403}," ~\u002Fyour_html_folder\n",[243,124537,124538],{"start":206},[246,124539,124540,26646,124543,124548,124565],{},[448,124541,124542],{},"启动Python HTTP服务器",[243,124544,124545],{},[246,124546,124547],{},"运行以下命令启动一个简单的HTTP服务器：",[280,124549,124551],{"className":117469,"code":124550,"language":117471,"meta":205,"style":205},"python -m http.server 8000\n",[25,124552,124553],{"__ignoreMap":205},[288,124554,124555,124557,124559,124562],{"class":290,"line":291},[288,124556,30553],{"class":2135},[288,124558,101055],{"class":347},[288,124560,124561],{"class":403}," http.server",[288,124563,124564],{"class":347}," 8000\n",[243,124566,124567],{"start":1352},[246,124568,124569,124570,124573],{},"这会在端口",[25,124571,124572],{},"8000","上启动一个Web服务器。",[1304,124575,124576],{},[246,124577,124578],{},"启动服务器后，Termux会显示日志信息，例如：",[280,124580,124582],{"className":120989,"code":124581,"language":120991,"meta":120992,"style":205},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[25,124583,124584],{"__ignoreMap":205},[288,124585,124586],{"class":290,"line":291},[288,124587,124581],{},[1304,124589,124590],{},[246,124591,124592],{},"这表示服务器已成功启动。",[19,124594,124595],{},[448,124596,124597],{},"在浏览器中访问HTML文件",[243,124599,124600],{},[246,124601,124602,26646,124605,124610],{},[448,124603,124604],{},"在同一设备上访问",[243,124606,124607],{},[246,124608,124609],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[280,124611,124614],{"className":124612,"code":124613,"language":71837,"meta":205,"style":205},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[25,124615,124616],{"__ignoreMap":205},[288,124617,124618,124621],{"class":290,"line":291},[288,124619,124620],{"class":298},"http:",[288,124622,124623],{"class":357},"\u002F\u002Flocalhost:8000\n",[1304,124625,124626],{},[246,124627,124628,124629,124632],{},"如果HTML文件中有",[25,124630,124631],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124634,124636],{"id":124635},"_76-linux重点知识","7.6 Linux重点知识",[260,124638,124640],{"id":124639},"_761-关于点的说明","7.6.1 关于点的说明",[19,124642,124643],{},[200,124644],{"alt":205,"src":124645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124647,124648],{},"一点本目录，两点上目录",[260,124650,124652],{"id":124651},"_762-目录","7.6.2 目录",[22171,124654,124656],{"id":124655},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124658,124659],{},[448,124660,124661],{},"\u002Fboot:",[19,124663,124664],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124666,124667],{},[448,124668,124669],{},"\u002Fetc:",[19,124671,124672],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124674,124675],{},[448,124676,124677],{},"\u002Flib：",[19,124679,124680],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124682,124683],{},[448,124684,124685],{},"\u002Fsys:",[19,124687,124688],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22171,124690,124692],{"id":124691},"_7622-指令集合","7.6.2.2 指令集合",[19,124694,124695],{},[448,124696,124697],{},"\u002Fbin:",[19,124699,124700],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124702,124703],{},[448,124704,124705],{},"\u002Fsbin:",[19,124707,124708],{},"只有系统管理员才能使用的程序和指令",[22171,124710,124712],{"id":124711},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124714,124715],{},[448,124716,124717],{},"\u002Fdev:",[19,124719,124720],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124722,124723],{},[448,124724,124725],{},"\u002Fmedia:",[19,124727,124728],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124730,124731],{},[448,124732,124733],{},"\u002Fmnt:",[19,124735,124736],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22171,124738,124740],{"id":124739},"_7624-临时文件","7.6.2.4 临时文件",[19,124742,124743],{},[448,124744,124745],{},"\u002Frun:",[19,124747,124748],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124750,124751],{},[448,124752,124753],{},"\u002Flost+found:",[19,124755,124756],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124758,124759],{},[448,124760,124761],{},"\u002Ftmp:",[19,124763,124764],{},"这个目录是用来存放一些临时文件的",[22171,124766,124768],{"id":124767},"_7625-账户","7.6.2.5 账户",[19,124770,124771],{},[448,124772,124773],{},"\u002Froot：",[19,124775,124776],{},"系统管理员的用户主目录",[19,124778,124779,26646],{},[448,124780,124781],{},"\u002Fhome",[19,124783,124784],{},"用户的主目录，以用户的账号命名的",[19,124786,124787,26646],{},[448,124788,124789],{},"\u002Fusr",[19,124791,124792],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124794,124795],{},[448,124796,124797],{},"\u002Fusr\u002Fbin：",[19,124799,124800],{},"系统用户使用的应用程序与指令",[19,124802,124803],{},[448,124804,124805],{},"\u002Fusr\u002Fsbin：",[19,124807,124808],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124810,124811],{},[448,124812,124813],{},"\u002Fusr\u002Fsrc：",[19,124815,124816],{},"内核源代码默认的放置目录",[22171,124818,124820],{"id":124819},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124822,124823],{},[448,124824,124825],{},"\u002Fvar：",[19,124827,124828],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124830,124831],{},[448,124832,124833],{},"\u002Fproc:",[19,124835,124836,124837,124840],{},"管理 ",[448,124838,124839],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22171,124842,124844],{"id":124843},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124846,124847],{},[448,124848,124849],{},"\u002Fopt:",[19,124851,124852],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124854,124855],{},[448,124856,124857],{},"\u002Fsrv:",[19,124859,124860],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[260,124862,124864],{"id":124863},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124866,124867],{},[200,124868],{"alt":205,"src":124869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124871,124872],{},"windows-->linux:",[19,124874,124875],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124877,124878],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124880,124881],{},"linux传输文件到windows",[19,124883,124884],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[260,124886,124888],{"id":124887},"_764-易忘知识","7.6.4 易忘知识",[19,124890,124891],{},"操作系统内核查看",[280,124893,124894],{"className":117469,"code":121463,"language":117471,"meta":205,"style":205},[25,124895,124896],{"__ignoreMap":205},[288,124897,124898,124900],{"class":290,"line":291},[288,124899,70377],{"class":2135},[288,124901,121472],{"class":347},[19,124903,124904],{},[200,124905],{"alt":205,"src":124906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124908,124909],{},[200,124910],{"alt":205,"src":124911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[280,124913,124915],{"className":117469,"code":124914,"language":117471,"meta":205,"style":205},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[25,124916,124917,124929],{"__ignoreMap":205},[288,124918,124919,124921,124924,124927],{"class":290,"line":291},[288,124920,121680],{"class":2135},[288,124922,124923],{"class":403}," mvtest",[288,124925,124926],{"class":403}," mvtest2",[288,124928,2846],{"class":298},[288,124930,124931],{"class":290,"line":206},[288,124932,124933],{"class":2135},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124935,124936],{},[200,124937],{"alt":205,"src":124938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124940,124941],{},[200,124942],{"alt":205,"src":124943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124945,124946,124947,124950],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[25,124948,124949],{},"du -a"," 可以快速查看磁盘使用细节。",[260,124952,124954],{"id":124953},"_765-vim","7.6.5 Vim",[19,124956,124957],{},[200,124958],{"alt":205,"src":124959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124961,124962],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124964,124965],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124967,124968],{},[448,124969,124970],{},"1.命令模式：",[19,124972,124973],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124975,124976],{},"x 删除当前光标所在处的字符",[19,124978,124979],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124981,124982],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124984,124985],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124987,124988],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124990,124991],{},"dd 剪切当前行",[19,124993,124994],{},"yy 复制当前行",[19,124996,124997],{},"p 粘贴剪贴板内容到光标下方",[19,124999,125000],{},"P 粘贴剪贴板内容到光标上方",[19,125002,125003],{},"u 撤销上一次操作",[19,125005,125006],{},"ctrl+r 重做上一次操作",[19,125008,125009,125011],{},[1092,125010],{}," 保存文件",[19,125013,125014,125016],{},[942,125015],{}," 退出Vim编辑器",[19,125018,125019,125021],{},[942,125020],{},"! 强制退出Vim编辑器，不保存修改",[19,125023,125024],{},[448,125025,125026],{},"2.输入模式：",[19,125028,125029],{},[200,125030],{"alt":205,"src":125031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125033,125034],{},[448,125035,125036],{},"3.底线命令模式：",[19,125038,125039],{},[200,125040],{"alt":205,"src":125041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125043,125044],{},"按下esc可以退出底线命令模式",[260,125046,125048],{"id":125047},"_766-apt","7.6.6 apt",[19,125050,125051],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[260,125053,125055],{"id":125054},"_767-home与root的区别","7.6.7 home与root的区别",[19,125057,125058],{},[200,125059],{"alt":205,"src":125060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125062,125063],{},[200,125064],{"alt":205,"src":125065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125067,125068],{},[200,125069],{"alt":205,"src":125070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125072,125073],{},[200,125074],{"alt":205,"src":125075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[260,125077,125079],{"id":125078},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125081,125082],{},[104,125083,125084],{"href":125084,"rel":125085},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[108],[243,125087,125088,125091],{},[246,125089,125090],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[246,125092,125093],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125095,125096],{},[200,125097],{"alt":205,"src":125098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125100,125101],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125103,125104],{},[200,125105],{"alt":205,"src":125106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[280,125108,125110],{"className":120989,"code":125109,"language":120991,"meta":120992,"style":205},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[25,125111,125112,125117],{"__ignoreMap":205},[288,125113,125114],{"class":290,"line":291},[288,125115,125116],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[288,125118,125119],{"class":290,"line":206},[288,125120,125121],{},".\u002Fpycharm.sh\n",[19,125123,125124],{},"3️⃣创建.desktop文件",[19,125126,125127],{},[448,125128,125129],{},"原理：",[1304,125131,125132,125142],{},[246,125133,125134,125135,125141],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[448,125136,125137,125140],{},[25,125138,125139],{},".desktop"," 文件"," 来识别应用。",[246,125143,125144,125146,125147],{},[25,125145,125139],{}," 文件相当于一个“应用注册表”，告诉系统：",[1304,125148,125149,125152,125155,125158,125161],{},[246,125150,125151],{},"应用名字（Name）",[246,125153,125154],{},"图标（Icon）",[246,125156,125157],{},"执行命令（Exec）",[246,125159,125160],{},"分类（Categories）",[246,125162,125163],{},"是否需要终端（Terminal）",[280,125165,125167],{"className":120989,"code":125166,"language":120991,"meta":120992,"style":205},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[25,125168,125169,125174],{"__ignoreMap":205},[288,125170,125171],{"class":290,"line":291},[288,125172,125173],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[288,125175,125176],{"class":290,"line":206},[288,125177,125178],{},"nano pycharm.desktop\n",[19,125180,125181],{},"nano是一个命令行下的编辑器，也可以使用vim",[280,125183,125185],{"className":120989,"code":125184,"language":120991,"meta":120992,"style":205},"[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",[25,125186,125187,125192,125197,125202,125207,125212,125217,125222,125227,125232],{"__ignoreMap":205},[288,125188,125189],{"class":290,"line":291},[288,125190,125191],{},"[Desktop Entry]\n",[288,125193,125194],{"class":290,"line":206},[288,125195,125196],{},"Version=1.0\n",[288,125198,125199],{"class":290,"line":1352},[288,125200,125201],{},"Type=Application\n",[288,125203,125204],{"class":290,"line":1367},[288,125205,125206],{},"Name=PyCharm\n",[288,125208,125209],{"class":290,"line":1373},[288,125210,125211],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[288,125213,125214],{"class":290,"line":1387},[288,125215,125216],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[288,125218,125219],{"class":290,"line":1393},[288,125220,125221],{},"Comment=JetBrains PyCharm IDE\n",[288,125223,125224],{"class":290,"line":1484},[288,125225,125226],{},"Categories=Development;IDE;\n",[288,125228,125229],{"class":290,"line":1490},[288,125230,125231],{},"Terminal=false\n",[288,125233,125234],{"class":290,"line":1502},[288,125235,125236],{},"StartupWMClass=jetbrains-pycharm\n",[1304,125238,125239,125245,125251,125257],{},[246,125240,125241,125244],{},[25,125242,125243],{},"Exec"," → 点击图标时执行的命令",[246,125246,125247,125250],{},[25,125248,125249],{},"Icon"," → 显示在菜单和桌面上的图标",[246,125252,125253,125256],{},[25,125254,125255],{},"Terminal=false"," → 不打开终端",[246,125258,125259,125262],{},[25,125260,125261],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125264,125265,125266],"blockquote",{},[19,125267,125268,125269,125271,125272],{},"可以理解成 ",[25,125270,125139],{}," 文件是 Linux 的 ",[448,125273,125274],{},"快捷方式配置文件",[19,125276,125277],{},"4️⃣设置可执行权限",[280,125279,125281],{"className":120989,"code":125280,"language":120991,"meta":120992,"style":205},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[25,125282,125283],{"__ignoreMap":205},[288,125284,125285],{"class":290,"line":291},[288,125286,125280],{},[19,125288,125289],{},"5️⃣桌面图标启动的话如下：",[280,125291,125293],{"className":120989,"code":125292,"language":120991,"meta":120992,"style":205},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[25,125294,125295,125300],{"__ignoreMap":205},[288,125296,125297],{"class":290,"line":291},[288,125298,125299],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[288,125301,125302],{"class":290,"line":206},[288,125303,125304],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[243,125306,125307],{"start":1352},[246,125308,125309],{},"下载Appimage文件实现软件的安装",[19,125311,125312],{},"1️⃣先下载appimage",[19,125314,125315],{},[104,125316,125317],{"href":125317,"rel":125318},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[108],[19,125320,125321],{},[200,125322],{"alt":205,"src":125323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125325,125326],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125328,125329],{},[200,125330],{"alt":205,"src":125331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125333,125334],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125336,125337],{},[200,125338],{"alt":205,"src":125339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125341,125342],{},[200,125343],{"alt":205,"src":125344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125346,125347,125348,125351],{},"3️⃣给他们放在",[25,125349,125350],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125353,125354],{},"4️⃣给软件执行权限",[280,125356,125358],{"className":120989,"code":125357,"language":120991,"meta":120992,"style":205},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[25,125359,125360,125365],{"__ignoreMap":205},[288,125361,125362],{"class":290,"line":291},[288,125363,125364],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[288,125366,125367],{"class":290,"line":206},[288,125368,125369],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125371,125372],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[280,125374,125376],{"className":117469,"code":125375,"language":117471,"meta":205,"style":205},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[25,125377,125378,125385,125392,125398],{"__ignoreMap":205},[288,125379,125380,125382],{"class":290,"line":291},[288,125381,101449],{"class":347},[288,125383,125384],{"class":403}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[288,125386,125387,125389],{"class":290,"line":206},[288,125388,101456],{"class":2135},[288,125390,125391],{"class":403}," .\u002Fqqmusic.desktop\n",[288,125393,125394,125396],{"class":290,"line":1352},[288,125395,124440],{"class":2135},[288,125397,125391],{"class":403},[288,125399,125400,125402,125404,125406],{"class":290,"line":1367},[288,125401,24749],{"class":2135},[288,125403,24752],{"class":403},[288,125405,123306],{"class":403},[288,125407,125391],{"class":403},[19,125409,125410,125412],{},[25,125411,101456],{},"：一个 Linux 命令，主要功能是：",[1304,125414,125415,125418],{},[246,125416,125417],{},"如果文件不存在，就创建一个新的空文件",[246,125419,125420],{},"如果文件已存在，就更新该文件的最后修改时间",[280,125422,125424],{"className":120989,"code":125423,"language":120991,"meta":120992,"style":205},"[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",[25,125425,125426,125430,125435,125440,125445,125449,125454],{"__ignoreMap":205},[288,125427,125428],{"class":290,"line":291},[288,125429,125191],{},[288,125431,125432],{"class":290,"line":206},[288,125433,125434],{},"Name=QQ音乐\n",[288,125436,125437],{"class":290,"line":1352},[288,125438,125439],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[288,125441,125442],{"class":290,"line":1367},[288,125443,125444],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[288,125446,125447],{"class":290,"line":1373},[288,125448,125201],{},[288,125450,125451],{"class":290,"line":1387},[288,125452,125453],{},"Categories=Audio;Music;Player;\n",[288,125455,125456],{"class":290,"line":1393},[288,125457,125458],{},"Comment=QQ Music Client for Linux\n",[19,125460,125461],{},"将文件复制进去",[19,125463,125464],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125466,125467],{},[200,125468],{"alt":205,"src":125469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125471,125472],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125474,125475],{},[200,125476],{"alt":205,"src":125477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125479,125480,125481,125484,125485,125488],{},"如果你用的不是KDE，那么也可以直接修改",[25,125482,125483],{},"qqmuic.desktop","：在exec的末尾加上",[25,125486,125487],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[280,125490,125492],{"className":120989,"code":125491,"language":120991,"meta":120992,"style":205},"[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",[25,125493,125494,125498,125502,125507,125511,125515,125519],{"__ignoreMap":205},[288,125495,125496],{"class":290,"line":291},[288,125497,125191],{},[288,125499,125500],{"class":290,"line":206},[288,125501,125434],{},[288,125503,125504],{"class":290,"line":1352},[288,125505,125506],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[288,125508,125509],{"class":290,"line":1367},[288,125510,125444],{},[288,125512,125513],{"class":290,"line":1373},[288,125514,125201],{},[288,125516,125517],{"class":290,"line":1387},[288,125518,125453],{},[288,125520,125521],{"class":290,"line":1393},[288,125522,125458],{},[19,125524,125525],{},[200,125526],{"alt":205,"src":125527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125529,125530],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[280,125532,125534],{"className":120989,"code":125533,"language":120991,"meta":120992,"style":205},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[25,125535,125536],{"__ignoreMap":205},[288,125537,125538],{"class":290,"line":291},[288,125539,125533],{},[243,125541,125542],{"start":1367},[246,125543,125544],{},"去Flathub上安装软件",[19,125546,125547],{},[104,125548,125549],{"href":125549,"rel":125550},"https:\u002F\u002Fflathub.org\u002F",[108],[19,125552,125553],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125555,125556],{},[200,125557],{"alt":205,"src":125558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[280,125560,125562],{"className":120989,"code":125561,"language":120991,"meta":120992,"style":205},"flatpak install flathub com.obsproject.Studio\n",[25,125563,125564],{"__ignoreMap":205},[288,125565,125566],{"class":290,"line":291},[288,125567,125561],{},[19,125569,125570],{},[200,125571],{"alt":205,"src":125572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125574,125575],{},"2️⃣运行软件",[19,125577,125578],{},"a.官方方式：",[19,125580,125581],{},[200,125582],{"alt":205,"src":125583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[280,125585,125586],{"className":120989,"code":125561,"language":120991,"meta":120992,"style":205},[25,125587,125588],{"__ignoreMap":205},[288,125589,125590],{"class":290,"line":291},[288,125591,125561],{},[19,125593,125594],{},"b.当普通软件运行：",[19,125596,125597],{},[200,125598],{"alt":205,"src":125599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125601,125602],{},[200,125603],{"alt":205,"src":125604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5299,125606,125607],{},"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":205,"searchDepth":206,"depth":206,"links":125609},[125610,125611,125616,125617,125623,125624],{"id":122342,"depth":206,"text":122343},{"id":122684,"depth":206,"text":122685,"children":125612},[125613,125614,125615],{"id":122688,"depth":1352,"text":122689},{"id":122755,"depth":1352,"text":122756},{"id":123016,"depth":1352,"text":123017},{"id":123169,"depth":206,"text":123170},{"id":123407,"depth":206,"text":123408,"children":125618},[125619,125620,125621,125622],{"id":123459,"depth":1352,"text":123460},{"id":123745,"depth":1352,"text":123746},{"id":124016,"depth":1352,"text":124017},{"id":124275,"depth":1352,"text":124276},{"id":124334,"depth":206,"text":124335},{"id":124635,"depth":206,"text":124636,"children":125625},[125626,125627,125628,125629,125630,125631,125632,125633],{"id":124639,"depth":1352,"text":124640},{"id":124651,"depth":1352,"text":124652},{"id":124863,"depth":1352,"text":124864},{"id":124887,"depth":1352,"text":124888},{"id":124953,"depth":1352,"text":124954},{"id":125047,"depth":1352,"text":125048},{"id":125054,"depth":1352,"text":125055},{"id":125078,"depth":1352,"text":125079},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122334,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125640,"title":125641,"body":125642,"description":214,"extension":215,"meta":125646,"navigation":217,"path":125647,"seo":125648,"stem":125649,"__hash__":125650},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125643,"toc":125644},[],{"title":205,"searchDepth":206,"depth":206,"links":125645},[],{"category":30436},"\u002Fwiki\u002F2025-01-27-linux",{"title":125641,"description":214},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125652,"title":125653,"body":125654,"description":125658,"extension":215,"meta":126049,"navigation":217,"path":126050,"seo":126051,"stem":126052,"__hash__":126053},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125655,"toc":126047},[125656,125659,125663,125680,125683,125736,125740,125742,125782,125791,125795,125798,126039,126044],[19,125657,125658],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125660,125662],{"id":125661},"_1ubuntu环境配置","1.Ubuntu环境配置",[243,125664,125665,125668,125671,125674,125677],{},[246,125666,125667],{},"ubuntu环境换源",[246,125669,125670],{},"安装cuda",[246,125672,125673],{},"安装miniconda",[246,125675,125676],{},"安装pytorch",[246,125678,125679],{},"安装genesis",[19,125681,125682],{},"参考链接：",[280,125684,125686],{"className":23995,"code":125685,"language":23997,"meta":205,"style":205},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[25,125687,125688],{"__ignoreMap":205},[288,125689,125690,125693,125696,125699,125701,125704,125707,125709,125712,125715,125717,125720,125723,125725,125728,125731,125733],{"class":290,"line":291},[288,125691,125692],{"class":2135},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[288,125694,125695],{"class":403},"=blogdetail",[288,125697,125698],{"class":298},"&sharetype",[288,125700,344],{"class":294},[288,125702,125703],{"class":403},"blogdetail",[288,125705,125706],{"class":298},"&sharerId",[288,125708,344],{"class":294},[288,125710,125711],{"class":403},"144728092",[288,125713,125714],{"class":298},"&sharerefer",[288,125716,344],{"class":294},[288,125718,125719],{"class":403},"PC",[288,125721,125722],{"class":298},"&sharesource",[288,125724,344],{"class":294},[288,125726,125727],{"class":403},"qq_69379513",[288,125729,125730],{"class":298},"&sharefrom",[288,125732,344],{"class":294},[288,125734,125735],{"class":403},"from_link\n",[10,125737,125739],{"id":125738},"_2genesis-报错issue","2.Genesis 报错issue",[19,125741,125682],{},[280,125743,125744],{"className":23995,"code":125685,"language":23997,"meta":205,"style":205},[25,125745,125746],{"__ignoreMap":205},[288,125747,125748,125750,125752,125754,125756,125758,125760,125762,125764,125766,125768,125770,125772,125774,125776,125778,125780],{"class":290,"line":291},[288,125749,125692],{"class":2135},[288,125751,125695],{"class":403},[288,125753,125698],{"class":298},[288,125755,344],{"class":294},[288,125757,125703],{"class":403},[288,125759,125706],{"class":298},[288,125761,344],{"class":294},[288,125763,125711],{"class":403},[288,125765,125714],{"class":298},[288,125767,344],{"class":294},[288,125769,125719],{"class":403},[288,125771,125722],{"class":298},[288,125773,344],{"class":294},[288,125775,125727],{"class":403},[288,125777,125730],{"class":298},[288,125779,344],{"class":294},[288,125781,125735],{"class":403},[280,125783,125785],{"className":23995,"code":125784,"language":23997,"meta":205,"style":205},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[25,125786,125787],{"__ignoreMap":205},[288,125788,125789],{"class":290,"line":291},[288,125790,125784],{"class":2135},[10,125792,125794],{"id":125793},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125796,125797],{},"hello_robot.py",[280,125799,125801],{"className":30551,"code":125800,"language":30553,"meta":205,"style":205},"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",[25,125802,125803,125809,125824,125828,125840,125852,125856,125869,125873,125892,125902,125912,125926,125930,125934,125939,125943,125953,125960,125974,125981,125991,125996,126000,126018,126023,126027,126034],{"__ignoreMap":205},[288,125804,125805,125807],{"class":290,"line":291},[288,125806,30565],{"class":294},[288,125808,45478],{"class":298},[288,125810,125811,125814,125817,125819,125821],{"class":290,"line":206},[288,125812,125813],{"class":298},"os.environ[",[288,125815,125816],{"class":403},"'PYOPENGL_PLATFORM'",[288,125818,4615],{"class":298},[288,125820,344],{"class":294},[288,125822,125823],{"class":403}," 'glx'\n",[288,125825,125826],{"class":290,"line":1352},[288,125827,2572],{"emptyLinePlaceholder":217},[288,125829,125830,125832,125835,125837],{"class":290,"line":1367},[288,125831,30565],{"class":294},[288,125833,125834],{"class":298}," genesis ",[288,125836,31556],{"class":294},[288,125838,125839],{"class":298}," gs\n",[288,125841,125842,125844,125847,125849],{"class":290,"line":1373},[288,125843,30910],{"class":294},[288,125845,125846],{"class":298}," pynput ",[288,125848,30565],{"class":294},[288,125850,125851],{"class":298}," keyboard\n",[288,125853,125854],{"class":290,"line":1387},[288,125855,2572],{"emptyLinePlaceholder":217},[288,125857,125858,125861,125864,125866],{"class":290,"line":1393},[288,125859,125860],{"class":298},"gs.init(",[288,125862,125863],{"class":5389},"backend",[288,125865,344],{"class":294},[288,125867,125868],{"class":298},"gs.gpu)\n",[288,125870,125871],{"class":290,"line":1484},[288,125872,2572],{"emptyLinePlaceholder":217},[288,125874,125875,125878,125880,125883,125886,125888,125890],{"class":290,"line":1490},[288,125876,125877],{"class":298},"scene ",[288,125879,344],{"class":294},[288,125881,125882],{"class":298}," gs.Scene(",[288,125884,125885],{"class":5389},"show_viewer",[288,125887,344],{"class":294},[288,125889,31649],{"class":347},[288,125891,305],{"class":298},[288,125893,125894,125897,125899],{"class":290,"line":1502},[288,125895,125896],{"class":298},"plane ",[288,125898,344],{"class":294},[288,125900,125901],{"class":298}," scene.add_entity(gs.morphs.Plane())\n",[288,125903,125904,125907,125909],{"class":290,"line":1784},[288,125905,125906],{"class":298},"franka ",[288,125908,344],{"class":294},[288,125910,125911],{"class":298}," scene.add_entity(\n",[288,125913,125914,125917,125919,125921,125924],{"class":290,"line":1789},[288,125915,125916],{"class":298},"    gs.morphs.MJCF(",[288,125918,45527],{"class":5389},[288,125920,344],{"class":294},[288,125922,125923],{"class":403},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[288,125925,38220],{"class":298},[288,125927,125928],{"class":290,"line":1795},[288,125929,305],{"class":298},[288,125931,125932],{"class":290,"line":1800},[288,125933,2572],{"emptyLinePlaceholder":217},[288,125935,125936],{"class":290,"line":1814},[288,125937,125938],{"class":298},"scene.build()\n",[288,125940,125941],{"class":290,"line":1819},[288,125942,2572],{"emptyLinePlaceholder":217},[288,125944,125945,125947,125950],{"class":290,"line":1825},[288,125946,32120],{"class":294},[288,125948,125949],{"class":2135}," on_press",[288,125951,125952],{"class":298},"(key):\n",[288,125954,125955,125958],{"class":290,"line":1846},[288,125956,125957],{"class":294},"    try",[288,125959,3911],{"class":298},[288,125961,125962,125964,125967,125969,125972],{"class":290,"line":1851},[288,125963,2669],{"class":294},[288,125965,125966],{"class":298}," key.char ",[288,125968,3121],{"class":294},[288,125970,125971],{"class":403}," 'q'",[288,125973,3911],{"class":298},[288,125975,125976,125978],{"class":290,"line":1865},[288,125977,15905],{"class":294},[288,125979,125980],{"class":347}," False\n",[288,125982,125983,125986,125989],{"class":290,"line":1870},[288,125984,125985],{"class":294},"    except",[288,125987,125988],{"class":347}," AttributeError",[288,125990,3911],{"class":298},[288,125992,125993],{"class":290,"line":1899},[288,125994,125995],{"class":294},"        pass\n",[288,125997,125998],{"class":290,"line":1904},[288,125999,2572],{"emptyLinePlaceholder":217},[288,126001,126002,126005,126007,126010,126013,126015],{"class":290,"line":1921},[288,126003,126004],{"class":298},"listener ",[288,126006,344],{"class":294},[288,126008,126009],{"class":298}," keyboard.Listener(",[288,126011,126012],{"class":5389},"on_press",[288,126014,344],{"class":294},[288,126016,126017],{"class":298},"on_press)\n",[288,126019,126020],{"class":290,"line":1926},[288,126021,126022],{"class":298},"listener.start()\n",[288,126024,126025],{"class":290,"line":1931},[288,126026,2572],{"emptyLinePlaceholder":217},[288,126028,126029,126031],{"class":290,"line":1936},[288,126030,108836],{"class":294},[288,126032,126033],{"class":298}," listener.running:\n",[288,126035,126036],{"class":290,"line":1950},[288,126037,126038],{"class":298},"    scene.step()\n",[19,126040,126041],{},[200,126042],{"alt":205,"src":126043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5299,126045,126046],{},"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":205,"searchDepth":206,"depth":206,"links":126048},[],{"category":23551},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125653,"description":125658},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126055,"title":126056,"body":126057,"description":214,"extension":215,"meta":126072,"navigation":217,"path":126073,"seo":126074,"stem":126075,"__hash__":126076},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126058,"toc":126069},[126059,126062,126066],[10,126060,126056],{"id":126061},"_1-基础知识",[14,126063,126065],{"id":126064},"_11-js的组成","1.1 js的组成",[19,126067,126068],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":205,"searchDepth":206,"depth":206,"links":126070},[126071],{"id":126064,"depth":206,"text":126065},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126056,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126078,"title":126079,"body":126080,"description":214,"extension":215,"meta":126219,"navigation":217,"path":126220,"seo":126221,"stem":126222,"__hash__":126223},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126081,"toc":126207},[126082,126085,126089,126092,126096,126106,126110,126113,126116,126119,126123,126130,126136,126140,126146,126157,126161,126164,126168,126171,126175,126178,126182,126185,126189,126192,126195,126198,126201,126204],[10,126083,126079],{"id":126084},"_2-vscode必备内容",[14,126086,126088],{"id":126087},"_21-标签分类","2.1 标签分类",[19,126090,126091],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126093,126095],{"id":126094},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126097,126098,126099,126101,126102,126105],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[25,126100,525],{}," 然后按 ",[25,126103,126104],{},"Tab","，快速自动生成基本结构。",[14,126107,126109],{"id":126108},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126111,126112],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126114,126115],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126117,126118],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126120,126122],{"id":126121},"_24-视图缩放","2.4 视图缩放",[19,126124,126125,126126,126129],{},"缩放视图 ",[25,126127,126128],{},"ctrl+"," 可实现代码增大。",[19,126131,126132,126135],{},[25,126133,126134],{},"ctrl-"," 可实现代码减小。",[14,126137,126139],{"id":126138},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126141,126142,126143,28558],{},"VSCode 新建文件快捷键为 ",[25,126144,126145],{},"ctrl+N",[19,126147,126148,126149,126152,126153,126156],{},"保存快捷键为 ",[25,126150,126151],{},"ctrl+S","，将文本保存为 ",[25,126154,126155],{},".html"," 文件。",[14,126158,126160],{"id":126159},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126162,126163],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126165,126167],{"id":126166},"_27-vscode-icons","2.7 vscode-icons",[19,126169,126170],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126172,126174],{"id":126173},"_28-easy-less","2.8 Easy LESS",[19,126176,126177],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126179,126181],{"id":126180},"_29-会了吧插件","2.9 会了吧插件",[19,126183,126184],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126186,126188],{"id":126187},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126190,126191],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126193,126194],{},"②选定多个相同的单词:ctrl+D",[19,126196,126197],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126199,126200],{},"④全局替换某些单词:ctrl+h",[19,126202,126203],{},"⑤快速定位到某一行:ctrl+g",[19,126205,126206],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":205,"searchDepth":206,"depth":206,"links":126208},[126209,126210,126211,126212,126213,126214,126215,126216,126217,126218],{"id":126087,"depth":206,"text":126088},{"id":126094,"depth":206,"text":126095},{"id":126108,"depth":206,"text":126109},{"id":126121,"depth":206,"text":126122},{"id":126138,"depth":206,"text":126139},{"id":126159,"depth":206,"text":126160},{"id":126166,"depth":206,"text":126167},{"id":126173,"depth":206,"text":126174},{"id":126180,"depth":206,"text":126181},{"id":126187,"depth":206,"text":126188},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126079,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126225,"title":126226,"body":126227,"description":214,"extension":215,"meta":126386,"navigation":217,"path":126387,"seo":126388,"stem":126389,"__hash__":126390},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126228,"toc":126378},[126229,126232,126236,126246,126252,126258,126262,126271,126275,126280,126283,126286,126290,126293,126303,126312,126321,126330,126340,126347,126352,126357,126370],[10,126230,126226],{"id":126231},"_3-html文本与容器标签",[14,126233,126235],{"id":126234},"_31-标题标签","3.1 标题标签",[19,126237,126238,126241,126242,126245],{},[25,126239,126240],{},"\u003Ch1>","我是一级标签",[25,126243,126244],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126247,126248,126241,126250],{},[25,126249,126240],{},[25,126251,126244],{},[19,126253,123508,126254,126257],{},[25,126255,126256],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126259,126261],{"id":126260},"_32-段落标签","3.2 段落标签",[19,126263,126264,126267,126268],{},[25,126265,126266],{},"\u003Cp>","....",[25,126269,126270],{},"\u003C\u002Fp>",[14,126272,126274],{"id":126273},"_33-换行标签","3.3 换行标签",[19,126276,126277],{},[25,126278,126279],{},"\u003Cbr \u002F>",[19,126281,126282],{},"具有强制换行的作用",[19,126284,126285],{},"单标签",[14,126287,126289],{"id":126288},"_34-文本格式化标签","3.4 文本格式化标签",[19,126291,126292],{},"提供粗体、斜体和下划线等效果",[19,126294,126295,126296,82712,126299,126302],{},"加粗：",[25,126297,126298],{},"\u003Cstrong>...\u003C\u002Fstrong>",[25,126300,126301],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126304,126305,126306,82712,126309,126302],{},"斜体：",[25,126307,126308],{},"\u003Cem>...\u003C\u002Fem>",[25,126310,126311],{},"\u003Ci>...\u003C\u002Fi>",[19,126313,126314,126315,82712,126318,126302],{},"删除线：",[25,126316,126317],{},"\u003Cdel>...\u003C\u002Fdel>",[25,126319,126320],{},"\u003Cs>...\u003C\u002Fs>",[19,126322,126323,126324,82712,126327,126302],{},"下划线：",[25,126325,126326],{},"\u003Cins>...\u003C\u002Fins>",[25,126328,126329],{},"\u003Cu>...\u003C\u002Fu>",[14,126331,126333,126334,18583,126337,102866],{"id":126332},"_35-div和span标签","3.5 ",[25,126335,126336],{},"\u003Cdiv>",[25,126338,126339],{},"\u003Cspan>",[19,126341,126342,101191,126344,126346],{},[25,126343,126336],{},[25,126345,126339],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126348,126349],{},[25,126350,126351],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126353,126354],{},[25,126355,126356],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126358,126359,126360,126362,126363,126365,126366,126369],{},"两者特点：①",[25,126361,126336],{}," 标签用来布局，但一行通常只放一个 ",[25,126364,126336],{},"。可以理解为一个大盒子，独占一行，在 ",[25,126367,126368],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126371,77422,126372,126374,126375,126377],{},[25,126373,126339],{}," 标签也可用于布局，一行可以放多个 ",[25,126376,126339],{},"，可理解为小盒子。",{"title":205,"searchDepth":206,"depth":206,"links":126379},[126380,126381,126382,126383,126384],{"id":126234,"depth":206,"text":126235},{"id":126260,"depth":206,"text":126261},{"id":126273,"depth":206,"text":126274},{"id":126288,"depth":206,"text":126289},{"id":126332,"depth":206,"text":126385},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126226,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":4,"title":5,"body":126392,"description":214,"extension":215,"meta":126521,"navigation":217,"path":218,"seo":126522,"stem":220,"__hash__":221},{"type":7,"value":126393,"toc":126513},[126394,126396,126398,126400,126404,126408,126412,126416,126418,126420,126422,126424,126426,126428,126430,126432,126434,126436,126438,126442,126446,126450,126455,126457,126461,126465,126467,126469,126473,126477,126481,126483,126485,126487,126489,126495,126499,126501,126507,126509,126511],[10,126395,5],{"id":12},[14,126397,17],{"id":16},[19,126399,21],{},[19,126401,126402,28],{},[25,126403,27],{},[19,126405,31,126406,35],{},[25,126407,34],{},[19,126409,38,126410],{},[25,126411,41],{},[19,126413,44,126414],{},[25,126415,47],{},[19,126417,50],{},[19,126419,53],{},[19,126421,56],{},[19,126423,59],{},[19,126425,62],{},[19,126427,65],{},[19,126429,68],{},[14,126431,72],{"id":71},[19,126433,75],{},[19,126435,78],{},[19,126437,81],{},[19,126439,84,126440],{},[25,126441,87],{},[19,126443,90,126444],{},[25,126445,93],{},[19,126447,96,126448],{},[25,126449,99],{},[19,126451,102,126452,109],{},[104,126453,106],{"href":106,"rel":126454},[108],[14,126456,113],{"id":112},[19,126458,126459,119],{},[25,126460,118],{},[19,126462,122,126463],{},[25,126464,125],{},[19,126466,128],{},[19,126468,131],{},[19,126470,134,126471],{},[25,126472,137],{},[19,126474,140,126475],{},[25,126476,143],{},[19,126478,146,126479],{},[25,126480,149],{},[19,126482,152],{},[19,126484,155],{},[14,126486,159],{"id":158},[19,126488,162],{},[19,126490,165,126491,169,126493],{},[25,126492,168],{},[25,126494,172],{},[19,126496,175,126497],{},[25,126498,178],{},[14,126500,182],{"id":181},[19,126502,126503,188,126505],{},[25,126504,187],{},[25,126506,191],{},[14,126508,195],{"id":194},[19,126510,198],{},[200,126512],{"style":202,"src":203},{"title":205,"searchDepth":206,"depth":206,"links":126514},[126515,126516,126517,126518,126519,126520],{"id":16,"depth":206,"text":17},{"id":71,"depth":206,"text":72},{"id":112,"depth":206,"text":113},{"id":158,"depth":206,"text":159},{"id":181,"depth":206,"text":182},{"id":194,"depth":206,"text":195},{},{"title":5,"description":214},{"id":126524,"title":126525,"body":126526,"description":214,"extension":215,"meta":126819,"navigation":217,"path":126820,"seo":126821,"stem":126822,"__hash__":126823},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126527,"toc":126810},[126528,126531,126535,126538,126541,126544,126547,126550,126553,126556,126559,126562,126582,126588,126592,126595,126598,126601,126604,126607,126610,126614,126617,126620,126623,126626,126639,126644,126647,126650,126665,126668,126671,126674,126677,126680,126684,126687,126694,126697,126700,126703,126706,126709,126715,126718,126721,126727,126730,126733,126736,126742,126745,126748,126762,126769,126772,126775,126782,126791,126794,126797,126800,126804,126807],[10,126529,126525],{"id":126530},"_5-html表格列表与表单",[14,126532,126534],{"id":126533},"_51-表格标签","5.1 表格标签",[19,126536,126537],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126539,126540],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126542,126543],{},"②表格基本语法：",[200,126545],{"style":202,"src":126546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126548,126549],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[200,126551],{"style":202,"src":126552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126554,126555],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[200,126557],{"style":202,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126560,126561],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126563,126564,126567,126568,126570,126571,126574,126575,126577,126578,126581],{},[25,126565,126566],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[25,126569,126566],{},"内部必须拥有",[25,126572,126573],{},"\u003Ctr>","标签，一般位于第一行，",[25,126576,126566],{},"比",[25,126579,126580],{},"\u003Cth>","范围广",[19,126583,126584,126587],{},[25,126585,126586],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126589,126591],{"id":126590},"_52-合并单元格","5.2 合并单元格",[19,126593,126594],{},"（1）合并单元格方式：",[19,126596,126597],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126599,126600],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126602,126603],{},"（2）目标单元格：",[19,126605,126606],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126608,126609],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126611,126613],{"id":126612},"_53-列表标签","5.3 列表标签",[19,126615,126616],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126618,126619],{},"①无序列表：",[200,126621],{"style":202,"src":126622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126624,126625],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126627,126628,126631,126632,126635,126636,126638],{},[25,126629,126630],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[25,126633,126634],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[25,126637,126630],{},"中输入其他标签或文字是不对的",[19,126640,126641,126643],{},[25,126642,126634],{},"之间相当于一个容器，可以容纳所有元素",[19,126645,126646],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126648,126649],{},"在css中去除前边的小圆点采用如下代码:",[280,126651,126655],{"className":126652,"code":126653,"language":126654,"meta":205,"style":205},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[25,126656,126657],{"__ignoreMap":205},[288,126658,126659,126662],{"class":290,"line":291},[288,126660,126661],{"class":51473},"list-style",[288,126663,126664],{"class":298},": none;\n",[19,126666,126667],{},"②有序列表：",[200,126669],{"style":202,"src":126670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126672,126673],{},"③自定义列表：",[200,126675],{"style":202,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[200,126678],{"style":202,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126681,126683],{"id":126682},"_54-表单标签","5.4 表单标签",[19,126685,126686],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126688,126689,126690,126693],{},"（1）表单域：包含单元素的区域，",[25,126691,126692],{},"\u003Cform>","标签可以实现信息的收集和传递。",[200,126695],{"style":202,"src":126696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126698,126699],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126701,126702],{},"表单元素提交必须有name属性",[19,126704,126705],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126707,126708],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126710,77399,126711,126714],{},[25,126712,126713],{},"\u003Cinput>","输入表单元素",[200,126716],{"style":202,"src":126717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[200,126719],{"style":202,"src":126720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126722,126723,126724],{},"单选按钮：",[25,126725,126726],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[200,126728],{"style":202,"src":126729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126731,126732],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[200,126734],{"style":202,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126737,126738,126741],{},[448,126739,126740],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126743,126744],{},"②select下拉表单元素：可以节约页面控件",[200,126746],{"style":202,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126749,126750,13968,126752,126755,126756,126758,126759,126761],{},[448,126751,328],{},[25,126753,126754],{},"\u003Cselect>","中至少包含一对",[25,126757,102887],{},"；在",[25,126760,102887],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126763,126764,126765,126768],{},"③",[25,126766,126767],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[200,126770],{"style":202,"src":126771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126773,126774],{},"3行20列",[14,126776,126778,126779,102866],{"id":126777},"_55-lable标签","5.5 ",[25,126780,126781],{},"\u003Clable>",[19,126783,126784,126785,126787,126788,126790],{},"它不是表单标签，但常常与表单标签搭配使用，",[25,126786,126781],{},"标签用于绑定一个表单标签，当点击",[25,126789,126781],{},"标签内的文本",[19,126792,126793],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[200,126795],{"style":202,"src":126796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[200,126798],{"style":202,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126801,126803],{"id":126802},"_56-实例","5.6 实例",[200,126805],{"style":202,"src":126806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5299,126808,126809],{},"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":205,"searchDepth":206,"depth":206,"links":126811},[126812,126813,126814,126815,126816,126818],{"id":126533,"depth":206,"text":126534},{"id":126590,"depth":206,"text":126591},{"id":126612,"depth":206,"text":126613},{"id":126682,"depth":206,"text":126683},{"id":126777,"depth":206,"text":126817},"5.5 \u003Clable>标签",{"id":126802,"depth":206,"text":126803},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126525,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126825,"title":126826,"body":126827,"description":214,"extension":215,"meta":127376,"navigation":217,"path":127377,"seo":127378,"stem":127379,"__hash__":127380},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126828,"toc":127351},[126829,126832,126836,126839,126842,126846,126849,126852,126855,126858,126861,126864,126867,126871,126874,126878,126881,126884,126887,126891,126894,126897,126900,126906,126909,126912,126915,126918,126921,126924,126927,126960,126964,126967,126970,126973,126977,126980,126983,126986,126989,126992,126996,126999,127002,127005,127009,127012,127016,127019,127023,127026,127031,127035,127038,127042,127045,127048,127051,127054,127081,127084,127088,127091,127094,127099,127102,127105,127109,127112,127117,127120,127123,127126,127130,127133,127136,127139,127143,127146,127149,127152,127156,127160,127163,127203,127206,127210,127217,127220,127224,127227,127273,127277,127280,127283,127286,127314,127318,127321,127348],[10,126830,126826],{"id":126831},"_6-css语法与文本样式",[14,126833,126835],{"id":126834},"_61-css语法规范","6.1 css语法规范",[19,126837,126838],{},"由两部分组成，选择器及一条或多条声明",[200,126840],{"style":202,"src":126841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126843,126844],{},[448,126845,328],{},[19,126847,126848],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126850,126851],{},"②属性与属性值以“键值对”的形式出现",[19,126853,126854],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126856,126857],{},"④属性和属性值之间用英文“;”分开",[200,126859],{"style":202,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[200,126862],{"style":202,"src":126863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[200,126865],{"style":202,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126868,126870],{"id":126869},"_62-css选择器","6.2 css选择器",[19,126872,126873],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[260,126875,126877],{"id":126876},"_621-标签选择器","6.2.1 标签选择器",[19,126879,126880],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126882,126883],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[200,126885],{"style":202,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[260,126888,126890],{"id":126889},"_622-类选择器","6.2.2 类选择器",[19,126892,126893],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126895,126896],{},"②样例",[200,126898],{"style":202,"src":126899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126901,126902,126903,126905],{},"③ ",[448,126904,126740],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126907,126908],{},"可以理解为给这个标签起了个名字，来表示；",[19,126910,126911],{},"长名称或词组可以使用横线来为选择器命名；",[19,126913,126914],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126916,126917],{},"命名要有意义；",[200,126919],{"style":202,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126922,126923],{},"类选择器也可以指定特殊的元素p.center{}",[19,126925,126926],{},"p.center和.center都对",[280,126928,126930],{"className":126652,"code":126929,"language":126654,"meta":205,"style":205},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[25,126931,126932,126937,126946,126956],{"__ignoreMap":205},[288,126933,126934],{"class":290,"line":291},[288,126935,126936],{"class":357},"\u002F* 类选择器指定特殊元素 *\u002F\n",[288,126938,126939,126941,126944],{"class":290,"line":206},[288,126940,19],{"class":51473},[288,126942,126943],{"class":2135},".center",[288,126945,15745],{"class":298},[288,126947,126948,126950,126952,126954],{"class":290,"line":1352},[288,126949,70699],{"class":347},[288,126951,51610],{"class":298},[288,126953,51765],{"class":347},[288,126955,1463],{"class":298},[288,126957,126958],{"class":290,"line":1367},[288,126959,1737],{"class":298},[260,126961,126963],{"id":126962},"_623-多类名使用","6.2.3 多类名使用",[19,126965,126966],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[200,126968],{"style":202,"src":126969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126971,126972],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[260,126974,126976],{"id":126975},"_624-id选择器","6.2.4 id选择器",[19,126978,126979],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126981,126982],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[200,126984],{"style":202,"src":126985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126987,126988],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126990,126991],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[260,126993,126995],{"id":126994},"_625-通配符选择器","6.2.5 通配符选择器",[19,126997,126998],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127000,127001],{},"* {",[19,127003,127004],{},"color=\"red\"}",[260,127006,127008],{"id":127007},"_626-总结","6.2.6 总结",[200,127010],{"style":202,"src":127011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127013,127015],{"id":127014},"_63-css字体属性","6.3 css字体属性",[19,127017,127018],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[260,127020,127022],{"id":127021},"_631-字体系列","6.3.1 字体系列",[19,127024,127025],{},"font-family: '宋体';",[19,127027,127028,127030],{},[448,127029,328],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[260,127032,127034],{"id":127033},"_632-字体大小","6.3.2 字体大小",[19,127036,127037],{},"font-size: 20px",[19,127039,127040,26646],{},[448,127041,126740],{},[19,127043,127044],{},"①px（像素）大小是网页的最常用单位",[19,127046,127047],{},"②谷歌浏览器默认为16px",[19,127049,127050],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127052,127053],{},"④可以给body指定整个页面的大小：会自动引用",[280,127055,127057],{"className":126652,"code":127056,"language":126654,"meta":205,"style":205},"body {\n  font-size: 16px;\n}\n",[25,127058,127059,127065,127077],{"__ignoreMap":205},[288,127060,127061,127063],{"class":290,"line":291},[288,127062,51973],{"class":51473},[288,127064,15745],{"class":298},[288,127066,127067,127069,127071,127073,127075],{"class":290,"line":206},[288,127068,70799],{"class":347},[288,127070,51610],{"class":298},[288,127072,898],{"class":347},[288,127074,51665],{"class":294},[288,127076,1463],{"class":298},[288,127078,127079],{"class":290,"line":1352},[288,127080,1737],{"class":298},[19,127082,127083],{},"⑤标题标签比较特殊，需要单独指定大小",[260,127085,127087],{"id":127086},"_633-字体粗细","6.3.3 字体粗细",[19,127089,127090],{},"font-weight: bold;",[19,127092,127093],{},"font-weight: 100；",[19,127095,127096,127098],{},[448,127097,328],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127100,127101],{},"font-weight= 400;",[19,127103,127104],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[260,127106,127108],{"id":127107},"_634-文字样式","6.3.4 文字样式",[19,127110,127111],{},"font-style: normal；",[19,127113,127114,26646],{},[448,127115,127116],{},"属性值",[19,127118,127119],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127121,127122],{},"②italic：浏览器会显示斜体的字体样式",[200,127124],{"style":202,"src":127125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[260,127127,127129],{"id":127128},"_635-字体符合属性","6.3.5 字体符合属性",[200,127131],{"style":202,"src":127132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[200,127134],{"style":202,"src":127135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127137,127138],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127140,127141,26646],{},[448,127142,126740],{},[19,127144,127145],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127147,127148],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127150,127151],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127153,127155],{"id":127154},"_64-css-test文本属性","6.4 css test文本属性",[260,127157,127159],{"id":127158},"_641-文本颜色","6.4.1 文本颜色",[19,127161,127162],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[280,127164,127166],{"className":126652,"code":127165,"language":126654,"meta":205,"style":205},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[25,127167,127168,127173,127179,127189,127194,127199],{"__ignoreMap":205},[288,127169,127170],{"class":290,"line":291},[288,127171,127172],{"class":357},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[288,127174,127175,127177],{"class":290,"line":206},[288,127176,19],{"class":51473},[288,127178,15745],{"class":298},[288,127180,127181,127183,127185,127187],{"class":290,"line":1352},[288,127182,71078],{"class":347},[288,127184,51610],{"class":298},[288,127186,57594],{"class":347},[288,127188,1463],{"class":298},[288,127190,127191],{"class":290,"line":1367},[288,127192,127193],{"class":357},"  \u002F* color: #ff0000; *\u002F\n",[288,127195,127196],{"class":290,"line":1373},[288,127197,127198],{"class":357},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[288,127200,127201],{"class":290,"line":1387},[288,127202,1737],{"class":298},[200,127204],{"style":202,"src":127205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[260,127207,127209],{"id":127208},"_642-对齐文本","6.4.2 对齐文本",[19,127211,127212,127213,127216],{},"text-align属于用于设置元素内文本内容的 ",[448,127214,127215],{},"水平对齐"," 方式",[19,127218,127219],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[260,127221,127223],{"id":127222},"_643-装饰文本","6.4.3 装饰文本",[19,127225,127226],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[280,127228,127230],{"className":126652,"code":127229,"language":126654,"meta":205,"style":205},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[25,127231,127232,127238,127248,127252,127258,127269],{"__ignoreMap":205},[288,127233,127234,127236],{"class":290,"line":291},[288,127235,104],{"class":51473},[288,127237,15745],{"class":298},[288,127239,127240,127242,127244,127246],{"class":290,"line":206},[288,127241,70675],{"class":347},[288,127243,51610],{"class":298},[288,127245,54910],{"class":347},[288,127247,1463],{"class":298},[288,127249,127250],{"class":290,"line":1352},[288,127251,1737],{"class":298},[288,127253,127254,127256],{"class":290,"line":1367},[288,127255,19],{"class":51473},[288,127257,15745],{"class":298},[288,127259,127260,127262,127264,127267],{"class":290,"line":1373},[288,127261,70675],{"class":347},[288,127263,51610],{"class":298},[288,127265,127266],{"class":347},"underline",[288,127268,1463],{"class":298},[288,127270,127271],{"class":290,"line":1387},[288,127272,1737],{"class":298},[260,127274,127276],{"id":127275},"_644-文本缩进","6.4.4 文本缩进",[19,127278,127279],{},"实现文本的第一行首行缩进自己指定的距离",[19,127281,127282],{},"20px往右边走；-20px往左边走",[19,127284,127285],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[280,127287,127289],{"className":126652,"code":127288,"language":126654,"meta":205,"style":205},"p {\n  text-indent: 2em;\n}\n",[25,127290,127291,127297,127310],{"__ignoreMap":205},[288,127292,127293,127295],{"class":290,"line":291},[288,127294,19],{"class":51473},[288,127296,15745],{"class":298},[288,127298,127299,127302,127304,127306,127308],{"class":290,"line":206},[288,127300,127301],{"class":347},"  text-indent",[288,127303,51610],{"class":298},[288,127305,376],{"class":347},[288,127307,23726],{"class":294},[288,127309,1463],{"class":298},[288,127311,127312],{"class":290,"line":1352},[288,127313,1737],{"class":298},[260,127315,127317],{"id":127316},"_645-行间距","6.4.5 行间距",[19,127319,127320],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[280,127322,127324],{"className":126652,"code":127323,"language":126654,"meta":205,"style":205},"p {\n  line-height: 1.6;\n}\n",[25,127325,127326,127332,127344],{"__ignoreMap":205},[288,127327,127328,127330],{"class":290,"line":291},[288,127329,19],{"class":51473},[288,127331,15745],{"class":298},[288,127333,127334,127337,127339,127342],{"class":290,"line":206},[288,127335,127336],{"class":347},"  line-height",[288,127338,51610],{"class":298},[288,127340,127341],{"class":347},"1.6",[288,127343,1463],{"class":298},[288,127345,127346],{"class":290,"line":1352},[288,127347,1737],{"class":298},[5299,127349,127350],{},"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":205,"searchDepth":206,"depth":206,"links":127352},[127353,127354,127362,127369],{"id":126834,"depth":206,"text":126835},{"id":126869,"depth":206,"text":126870,"children":127355},[127356,127357,127358,127359,127360,127361],{"id":126876,"depth":1352,"text":126877},{"id":126889,"depth":1352,"text":126890},{"id":126962,"depth":1352,"text":126963},{"id":126975,"depth":1352,"text":126976},{"id":126994,"depth":1352,"text":126995},{"id":127007,"depth":1352,"text":127008},{"id":127014,"depth":206,"text":127015,"children":127363},[127364,127365,127366,127367,127368],{"id":127021,"depth":1352,"text":127022},{"id":127033,"depth":1352,"text":127034},{"id":127086,"depth":1352,"text":127087},{"id":127107,"depth":1352,"text":127108},{"id":127128,"depth":1352,"text":127129},{"id":127154,"depth":206,"text":127155,"children":127370},[127371,127372,127373,127374,127375],{"id":127158,"depth":1352,"text":127159},{"id":127208,"depth":1352,"text":127209},{"id":127222,"depth":1352,"text":127223},{"id":127275,"depth":1352,"text":127276},{"id":127316,"depth":1352,"text":127317},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126826,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127382,"title":127383,"body":127384,"description":214,"extension":215,"meta":128033,"navigation":217,"path":128034,"seo":128035,"stem":128036,"__hash__":128037},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127385,"toc":128014},[127386,127389,127393,127397,127457,127461,127471,127474,127477,127481,127506,127510,127513,127516,127519,127522,127525,127529,127532,127535,127577,127580,127606,127612,127615,127619,127623,127629,127632,127635,127638,127641,127644,127647,127692,127696,127699,127702,127706,127710,127739,127742,127747,127750,127753,127756,127759,127763,127767,127770,127772,127775,127779,127782,127786,127789,127792,127795,127799,127803,127809,127819,127822,127825,127828,127831,127834,127957,127965,127973,128011],[10,127387,127383],{"id":127388},"_7-css引入方式与选择器进阶",[14,127390,127392],{"id":127391},"_71-css引入方式","7.1 css引入方式",[260,127394,127396],{"id":127395},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[280,127398,127402],{"className":127399,"code":127400,"language":127401,"meta":205,"style":205},"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",[25,127403,127404,127412,127419,127431,127444,127449],{"__ignoreMap":205},[288,127405,127406,127408,127410],{"class":290,"line":291},[288,127407,1207],{"class":298},[288,127409,5299],{"class":51473},[288,127411,51480],{"class":298},[288,127413,127414,127417],{"class":290,"line":206},[288,127415,127416],{"class":51473},"  h1",[288,127418,15745],{"class":298},[288,127420,127421,127424,127426,127429],{"class":290,"line":1352},[288,127422,127423],{"class":347},"    color",[288,127425,51610],{"class":298},[288,127427,127428],{"class":347},"blue",[288,127430,1463],{"class":298},[288,127432,127433,127436,127438,127440,127442],{"class":290,"line":1367},[288,127434,127435],{"class":347},"    font-size",[288,127437,51610],{"class":298},[288,127439,1097],{"class":347},[288,127441,51665],{"class":294},[288,127443,1463],{"class":298},[288,127445,127446],{"class":290,"line":1373},[288,127447,127448],{"class":298},"  }\n",[288,127450,127451,127453,127455],{"class":290,"line":1387},[288,127452,51958],{"class":298},[288,127454,5299],{"class":51473},[288,127456,51480],{"class":298},[19,127458,127459,26646],{},[448,127460,126740],{},[19,127462,77399,127463,127466,127467,127470],{},[25,127464,127465],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[25,127468,127469],{},"\u003Chead>","标签中",[19,127472,127473],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127475,127476],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[260,127478,127480],{"id":127479},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[280,127482,127484],{"className":127399,"code":127483,"language":127401,"meta":205,"style":205},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[25,127485,127486],{"__ignoreMap":205},[288,127487,127488,127490,127492,127494,127496,127499,127502,127504],{"class":290,"line":291},[288,127489,1207],{"class":298},[288,127491,19],{"class":51473},[288,127493,62799],{"class":2135},[288,127495,344],{"class":298},[288,127497,127498],{"class":403},"\"color: red; font-size: 16px;\"",[288,127500,127501],{"class":298},">这是一个段落\u003C\u002F",[288,127503,19],{"class":51473},[288,127505,51480],{"class":298},[19,127507,127508,26646],{},[448,127509,126740],{},[19,127511,127512],{},"①style其实就是标签的属性",[19,127514,127515],{},"②在双引号中间，写法要符合css规范",[19,127517,127518],{},"③可以控制当前的标签设置样式",[19,127520,127521],{},"④书写繁琐，简单时才用",[19,127523,127524],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[260,127526,127528],{"id":127527},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127530,127531],{},"使用最多，单独建一个css文件，然后html引用",[19,127533,127534],{},"①css文件部分： style.css",[280,127536,127538],{"className":126652,"code":127537,"language":126654,"meta":205,"style":205},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[25,127539,127540,127545,127551,127561,127573],{"__ignoreMap":205},[288,127541,127542],{"class":290,"line":291},[288,127543,127544],{"class":357},"\u002F* style.css *\u002F\n",[288,127546,127547,127549],{"class":290,"line":206},[288,127548,10],{"class":51473},[288,127550,15745],{"class":298},[288,127552,127553,127555,127557,127559],{"class":290,"line":1352},[288,127554,71078],{"class":347},[288,127556,51610],{"class":298},[288,127558,127428],{"class":347},[288,127560,1463],{"class":298},[288,127562,127563,127565,127567,127569,127571],{"class":290,"line":1367},[288,127564,70799],{"class":347},[288,127566,51610],{"class":298},[288,127568,1097],{"class":347},[288,127570,51665],{"class":294},[288,127572,1463],{"class":298},[288,127574,127575],{"class":290,"line":1373},[288,127576,1737],{"class":298},[19,127578,127579],{},"②html部分",[280,127581,127583],{"className":127399,"code":127582,"language":127401,"meta":205,"style":205},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[25,127584,127585],{"__ignoreMap":205},[288,127586,127587,127589,127591,127593,127595,127597,127599,127601,127604],{"class":290,"line":291},[288,127588,1207],{"class":298},[288,127590,69178],{"class":51473},[288,127592,69181],{"class":2135},[288,127594,344],{"class":298},[288,127596,69186],{"class":403},[288,127598,61230],{"class":2135},[288,127600,344],{"class":298},[288,127602,127603],{"class":403},"\"style.css\"",[288,127605,51480],{"class":298},[19,127607,127608,127611],{},[25,127609,127610],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127613,127614],{},"ctrl+0回到页面原来大小",[14,127616,127618],{"id":127617},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[260,127620,127622],{"id":127621},"_721-快速生成html","7.2.1 快速生成html",[19,127624,127625,127626],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[25,127627,127628],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127630,127631],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127633,127634],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127636,127637],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127639,127640],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127642,127643],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127645,127646],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[280,127648,127650],{"className":127399,"code":127649,"language":127401,"meta":205,"style":205},"\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",[25,127651,127652,127657,127662,127667,127672,127677,127682,127687],{"__ignoreMap":205},[288,127653,127654],{"class":290,"line":291},[288,127655,127656],{"class":357},"\u003C!-- Emmet 语法示例 -->\n",[288,127658,127659],{"class":290,"line":206},[288,127660,127661],{"class":357},"\u003C!-- div*3        → 生成3个div -->\n",[288,127663,127664],{"class":290,"line":1352},[288,127665,127666],{"class":357},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[288,127668,127669],{"class":290,"line":1367},[288,127670,127671],{"class":357},"\u003C!-- div+p        → 兄弟div和p -->\n",[288,127673,127674],{"class":290,"line":1373},[288,127675,127676],{"class":357},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[288,127678,127679],{"class":290,"line":1387},[288,127680,127681],{"class":357},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[288,127683,127684],{"class":290,"line":1393},[288,127685,127686],{"class":357},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[288,127688,127689],{"class":290,"line":1484},[288,127690,127691],{"class":357},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[260,127693,127695],{"id":127694},"_722-快速生成css","7.2.2 快速生成css",[19,127697,127698],{},"简写开头",[19,127700,127701],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127703,127705],{"id":127704},"_73-css复合选择器","7.3 css复合选择器",[260,127707,127709],{"id":127708},"_731-后代选择器","7.3.1 后代选择器",[280,127711,127713],{"className":126652,"code":127712,"language":126654,"meta":205,"style":205},".parent .child {\n  color: blue;\n}\n",[25,127714,127715,127725,127735],{"__ignoreMap":205},[288,127716,127717,127720,127723],{"class":290,"line":291},[288,127718,127719],{"class":2135},".parent",[288,127721,127722],{"class":2135}," .child",[288,127724,15745],{"class":298},[288,127726,127727,127729,127731,127733],{"class":290,"line":206},[288,127728,71078],{"class":347},[288,127730,51610],{"class":298},[288,127732,127428],{"class":347},[288,127734,1463],{"class":298},[288,127736,127737],{"class":290,"line":1352},[288,127738,1737],{"class":298},[19,127740,127741],{},"元素1 元素2 {样式声明}",[19,127743,127744],{},[448,127745,127746],{},"注意点:",[19,127748,127749],{},"①元素1和元素2中间用空格隔开",[19,127751,127752],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127754,127755],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127757,127758],{},"④元素1和元素2可以是任意基础选择器",[260,127760,127762],{"id":127761},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127764,127765],{},[448,127766,127746],{},[19,127768,127769],{},"①元素1和元素2中间用大于号隔开",[19,127771,127752],{},[19,127773,127774],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[260,127776,127778],{"id":127777},"_733-并集选择器","7.3.3 并集选择器",[19,127780,127781],{},"元素1，元素2 {样式声明}",[19,127783,127784],{},[448,127785,127746],{},[19,127787,127788],{},"①元素1和元素2中间用逗号隔开",[19,127790,127791],{},"②逗号可以理解为和的意思",[19,127793,127794],{},"③并集选择器通常用于集体声明",[260,127796,127798],{"id":127797},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127800,127801],{},[448,127802,127746],{},[19,127804,127805,127806,127808],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69178,127807],{},"－:visited－:hover－:active。",[19,127810,127811,127812,127815,127816,25913],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127813,127814],"hover",{}," 、 ",[127817,127818],"first-child",{},[19,127820,127821],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127823,127824],{},"link对没访问的进行设置",[19,127826,127827],{},"vistied对已访问的进行改变",[19,127829,127830],{},"hover鼠标经过就会变",[19,127832,127833],{},"active常按(点)就会变",[280,127835,127837],{"className":126652,"code":127836,"language":126654,"meta":205,"style":205},"\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",[25,127838,127839,127844,127853,127863,127873,127877,127886,127897,127901,127909,127919,127929,127933,127942,127953],{"__ignoreMap":205},[288,127840,127841],{"class":290,"line":291},[288,127842,127843],{"class":357},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[288,127845,127846,127848,127851],{"class":290,"line":206},[288,127847,104],{"class":51473},[288,127849,127850],{"class":2135},":link",[288,127852,15745],{"class":298},[288,127854,127855,127857,127859,127861],{"class":290,"line":1352},[288,127856,71078],{"class":347},[288,127858,51610],{"class":298},[288,127860,62542],{"class":347},[288,127862,1463],{"class":298},[288,127864,127865,127867,127869,127871],{"class":290,"line":1367},[288,127866,70675],{"class":347},[288,127868,51610],{"class":298},[288,127870,54910],{"class":347},[288,127872,1463],{"class":298},[288,127874,127875],{"class":290,"line":1373},[288,127876,1737],{"class":298},[288,127878,127879,127881,127884],{"class":290,"line":1387},[288,127880,104],{"class":51473},[288,127882,127883],{"class":2135},":visited",[288,127885,15745],{"class":298},[288,127887,127888,127890,127892,127895],{"class":290,"line":1393},[288,127889,71078],{"class":347},[288,127891,51610],{"class":298},[288,127893,127894],{"class":347},"purple",[288,127896,1463],{"class":298},[288,127898,127899],{"class":290,"line":1484},[288,127900,1737],{"class":298},[288,127902,127903,127905,127907],{"class":290,"line":1490},[288,127904,104],{"class":51473},[288,127906,61113],{"class":2135},[288,127908,15745],{"class":298},[288,127910,127911,127913,127915,127917],{"class":290,"line":1502},[288,127912,71078],{"class":347},[288,127914,51610],{"class":298},[288,127916,55062],{"class":347},[288,127918,1463],{"class":298},[288,127920,127921,127923,127925,127927],{"class":290,"line":1784},[288,127922,70675],{"class":347},[288,127924,51610],{"class":298},[288,127926,127266],{"class":347},[288,127928,1463],{"class":298},[288,127930,127931],{"class":290,"line":1789},[288,127932,1737],{"class":298},[288,127934,127935,127937,127940],{"class":290,"line":1795},[288,127936,104],{"class":51473},[288,127938,127939],{"class":2135},":active",[288,127941,15745],{"class":298},[288,127943,127944,127946,127948,127951],{"class":290,"line":1800},[288,127945,71078],{"class":347},[288,127947,51610],{"class":298},[288,127949,127950],{"class":347},"green",[288,127952,1463],{"class":298},[288,127954,127955],{"class":290,"line":1814},[288,127956,1737],{"class":298},[260,127958,127960,127961,127964],{"id":127959},"_735-伪类选择器","7.3.5 ",[127962,127963],"focus",{},"伪类选择器",[19,127966,127967,127969,127970,127972],{},[127962,127968],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[25,127971,126713],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[280,127974,127976],{"className":126652,"code":127975,"language":126654,"meta":205,"style":205},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[25,127977,127978,127986,127997,128007],{"__ignoreMap":205},[288,127979,127980,127982,127984],{"class":290,"line":291},[288,127981,53994],{"class":51473},[288,127983,62073],{"class":2135},[288,127985,15745],{"class":298},[288,127987,127988,127991,127993,127995],{"class":290,"line":206},[288,127989,127990],{"class":347},"  border-color",[288,127992,51610],{"class":298},[288,127994,55062],{"class":347},[288,127996,1463],{"class":298},[288,127998,127999,128001,128003,128005],{"class":290,"line":1352},[288,128000,70971],{"class":347},[288,128002,51610],{"class":298},[288,128004,54910],{"class":347},[288,128006,1463],{"class":298},[288,128008,128009],{"class":290,"line":1367},[288,128010,1737],{"class":298},[5299,128012,128013],{},"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":205,"searchDepth":206,"depth":206,"links":128015},[128016,128021,128025],{"id":127391,"depth":206,"text":127392,"children":128017},[128018,128019,128020],{"id":127395,"depth":1352,"text":127396},{"id":127479,"depth":1352,"text":127480},{"id":127527,"depth":1352,"text":127528},{"id":127617,"depth":206,"text":127618,"children":128022},[128023,128024],{"id":127621,"depth":1352,"text":127622},{"id":127694,"depth":1352,"text":127695},{"id":127704,"depth":206,"text":127705,"children":128026},[128027,128028,128029,128030,128031],{"id":127708,"depth":1352,"text":127709},{"id":127761,"depth":1352,"text":127762},{"id":127777,"depth":1352,"text":127778},{"id":127797,"depth":1352,"text":127798},{"id":127959,"depth":1352,"text":128032},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127383,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128039,"title":128040,"body":128041,"description":214,"extension":215,"meta":129964,"navigation":217,"path":129965,"seo":129966,"stem":129967,"__hash__":129968},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128042,"toc":129938},[128043,128046,128050,128059,128063,128089,128094,128097,128100,128103,128106,128110,128113,128123,128131,128135,128170,128175,128178,128181,128184,128187,128191,128194,128203,128207,128220,128225,128228,128231,128234,128238,128241,128245,128248,128303,128306,128337,128340,128394,128398,128401,128567,128690,128693,128696,128699,128702,128706,128709,128713,128716,128719,128723,128726,128757,128784,128812,128815,128819,128845,128888,128892,128986,128989,129016,129019,129022,129025,129028,129031,129034,129037,129040,129043,129047,129104,129131,129135,129183,129187,129228,129230,129233,129236,129239,129242,129246,129338,129341,129344,129347,129351,129474,129675,129679,129683,129686,129689,129692,129696,129699,129702,129727,129730,129733,129736,129739,129742,129746,129754,129816,129819,129877,129880,129883,129886,129889,129892,129895,129898,129935],[10,128044,128040],{"id":128045},"_8-css显示模式与背景特性",[14,128047,128049],{"id":128048},"_81-css元素显示模式","8.1 css元素显示模式",[19,128051,128052,128053,128055,128056,128058],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[25,128054,126336],{},"自己占一行，比如一行可以放多个",[25,128057,126339],{},"，HTML 元素一般分为块元素和行内元素两种类型",[260,128060,128062],{"id":128061},"_811-块元素","8.1.1 块元素",[19,128064,128065,128066,128068,128069,511,128072,511,128074,511,128076,511,128079,511,128082,128085,128086,128088],{},"常见的块元素有",[25,128067,126240],{},"~",[25,128070,128071],{},"\u003Ch6>",[25,128073,126266],{},[25,128075,126336],{},[25,128077,128078],{},"\u003Cul>",[25,128080,128081],{},"\u003Col>",[25,128083,128084],{},"\u003Cli>","等，其中 ",[25,128087,126336],{}," 标签是最典型的块元素",[19,128090,128091],{},[448,128092,128093],{},"块级元素的特点：",[19,128095,128096],{},"① 比较霸道，自己独占一行。",[19,128098,128099],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128101,128102],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128104,128105],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128107,128108],{},[448,128109,328],{},[19,128111,128112],{},"①文字类的元素内不能使用块级元素",[19,128114,77422,128115,128117,128118,128120,128121],{},[25,128116,126266],{}," 标签主要用于存放文字，因此 ",[25,128119,126266],{}," 里面不能放块级元素，特别是不能放",[25,128122,126336],{},[19,128124,128125,128126,128068,128128,128130],{},"⑥同理， ",[25,128127,126240],{},[25,128129,128071],{},"等都是文字类块级标签，里面也不能放其他块级元素",[260,128132,128134],{"id":128133},"_812-行内元素","8.1.2 行内元素",[19,128136,128137,128138,511,128140,511,128143,511,128146,511,128149,511,128152,511,128155,511,128158,511,128161,511,128164,128166,128167,128169],{},"常见的行内元素有 ",[25,128139,118],{},[25,128141,128142],{},"\u003Cstrong>",[25,128144,128145],{},"\u003Cb>",[25,128147,128148],{},"\u003Cem>",[25,128150,128151],{},"\u003Ci>",[25,128153,128154],{},"\u003Cdel>",[25,128156,128157],{},"\u003Cs>",[25,128159,128160],{},"\u003Cins>",[25,128162,128163],{},"\u003Cu>",[25,128165,126339],{}," 等，其中 ",[25,128168,126339],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128171,128172],{},[448,128173,128174],{},"特点：",[19,128176,128177],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128179,128180],{},"② 高、宽直接设置是无效的。",[19,128182,128183],{},"③ 默认宽度就是它本身内容的宽度。",[19,128185,128186],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128188,128189],{},[448,128190,328],{},[19,128192,128193],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128195,128196,128197,128199,128200,128202],{},"②特殊情况链接 ",[25,128198,118],{}," 里面可以放块级元素，但是给 ",[25,128201,118],{}," 转换一下块级模式最安全",[260,128204,128206],{"id":128205},"_813-行内块元素","8.1.3 行内块元素",[19,128208,128209,128210,511,128213,511,128216,128219],{},"在行内元素中有几个特殊的标签 —— ",[25,128211,128212],{},"\u003Cimg \u002F>",[25,128214,128215],{},"\u003Cinput \u002F>",[25,128217,128218],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128221,128222],{},[448,128223,128224],{},"行内块元素的特点：",[19,128226,128227],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128229,128230],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128232,128233],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[260,128235,128237],{"id":128236},"_814-总结","8.1.4 总结",[200,128239],{"style":202,"src":128240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[260,128242,128244],{"id":128243},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128246,128247],{},"①转换为块元素：display:block;",[280,128249,128251],{"className":126652,"code":128250,"language":126654,"meta":205,"style":205},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[25,128252,128253,128258,128264,128275,128287,128299],{"__ignoreMap":205},[288,128254,128255],{"class":290,"line":291},[288,128256,128257],{"class":357},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[288,128259,128260,128262],{"class":290,"line":206},[288,128261,104],{"class":51473},[288,128263,15745],{"class":298},[288,128265,128266,128269,128271,128273],{"class":290,"line":1352},[288,128267,128268],{"class":347},"  display",[288,128270,51610],{"class":298},[288,128272,61042],{"class":347},[288,128274,1463],{"class":298},[288,128276,128277,128279,128281,128283,128285],{"class":290,"line":1367},[288,128278,70741],{"class":347},[288,128280,51610],{"class":298},[288,128282,608],{"class":347},[288,128284,51665],{"class":294},[288,128286,1463],{"class":298},[288,128288,128289,128291,128293,128295,128297],{"class":290,"line":1373},[288,128290,70961],{"class":347},[288,128292,51610],{"class":298},[288,128294,698],{"class":347},[288,128296,51665],{"class":294},[288,128298,1463],{"class":298},[288,128300,128301],{"class":290,"line":1387},[288,128302,1737],{"class":298},[19,128304,128305],{},"②转换为行内元素：display:inline;",[280,128307,128309],{"className":126652,"code":128308,"language":126654,"meta":205,"style":205},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[25,128310,128311,128316,128322,128333],{"__ignoreMap":205},[288,128312,128313],{"class":290,"line":291},[288,128314,128315],{"class":357},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[288,128317,128318,128320],{"class":290,"line":206},[288,128319,51784],{"class":51473},[288,128321,15745],{"class":298},[288,128323,128324,128326,128328,128331],{"class":290,"line":1352},[288,128325,128268],{"class":347},[288,128327,51610],{"class":298},[288,128329,128330],{"class":347},"inline",[288,128332,1463],{"class":298},[288,128334,128335],{"class":290,"line":1367},[288,128336,1737],{"class":298},[19,128338,128339],{},"③转换为行内块：display:inline-block;",[280,128341,128343],{"className":126652,"code":128342,"language":126654,"meta":205,"style":205},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[25,128344,128345,128350,128356,128366,128378,128390],{"__ignoreMap":205},[288,128346,128347],{"class":290,"line":291},[288,128348,128349],{"class":357},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[288,128351,128352,128354],{"class":290,"line":206},[288,128353,288],{"class":51473},[288,128355,15745],{"class":298},[288,128357,128358,128360,128362,128364],{"class":290,"line":1352},[288,128359,128268],{"class":347},[288,128361,51610],{"class":298},[288,128363,72556],{"class":347},[288,128365,1463],{"class":298},[288,128367,128368,128370,128372,128374,128376],{"class":290,"line":1367},[288,128369,70741],{"class":347},[288,128371,51610],{"class":298},[288,128373,909],{"class":347},[288,128375,51665],{"class":294},[288,128377,1463],{"class":298},[288,128379,128380,128382,128384,128386,128388],{"class":290,"line":1373},[288,128381,70961],{"class":347},[288,128383,51610],{"class":298},[288,128385,1248],{"class":347},[288,128387,51665],{"class":294},[288,128389,1463],{"class":298},[288,128391,128392],{"class":290,"line":1387},[288,128393,1737],{"class":298},[260,128395,128397],{"id":128396},"_816-小米侧边栏","8.1.6 小米侧边栏",[200,128399],{"style":202,"src":128400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[280,128402,128404],{"className":127399,"code":128403,"language":127401,"meta":205,"style":205},"\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",[25,128405,128406,128411,128426,128445,128464,128483,128502,128521,128540,128559],{"__ignoreMap":205},[288,128407,128408],{"class":290,"line":291},[288,128409,128410],{"class":357},"\u003C!-- 小米侧边栏案例 -->\n",[288,128412,128413,128415,128417,128419,128421,128424],{"class":290,"line":206},[288,128414,1207],{"class":298},[288,128416,51784],{"class":51473},[288,128418,53659],{"class":2135},[288,128420,344],{"class":298},[288,128422,128423],{"class":403},"\"sidebar\"",[288,128425,51480],{"class":298},[288,128427,128428,128430,128432,128434,128436,128438,128441,128443],{"class":290,"line":1352},[288,128429,52317],{"class":298},[288,128431,104],{"class":51473},[288,128433,61230],{"class":2135},[288,128435,344],{"class":298},[288,128437,61235],{"class":403},[288,128439,128440],{"class":298},">手机 电话卡\u003C\u002F",[288,128442,104],{"class":51473},[288,128444,51480],{"class":298},[288,128446,128447,128449,128451,128453,128455,128457,128460,128462],{"class":290,"line":1367},[288,128448,52317],{"class":298},[288,128450,104],{"class":51473},[288,128452,61230],{"class":2135},[288,128454,344],{"class":298},[288,128456,61235],{"class":403},[288,128458,128459],{"class":298},">电视 盒子\u003C\u002F",[288,128461,104],{"class":51473},[288,128463,51480],{"class":298},[288,128465,128466,128468,128470,128472,128474,128476,128479,128481],{"class":290,"line":1373},[288,128467,52317],{"class":298},[288,128469,104],{"class":51473},[288,128471,61230],{"class":2135},[288,128473,344],{"class":298},[288,128475,61235],{"class":403},[288,128477,128478],{"class":298},">笔记本 平板\u003C\u002F",[288,128480,104],{"class":51473},[288,128482,51480],{"class":298},[288,128484,128485,128487,128489,128491,128493,128495,128498,128500],{"class":290,"line":1387},[288,128486,52317],{"class":298},[288,128488,104],{"class":51473},[288,128490,61230],{"class":2135},[288,128492,344],{"class":298},[288,128494,61235],{"class":403},[288,128496,128497],{"class":298},">出行 穿戴\u003C\u002F",[288,128499,104],{"class":51473},[288,128501,51480],{"class":298},[288,128503,128504,128506,128508,128510,128512,128514,128517,128519],{"class":290,"line":1393},[288,128505,52317],{"class":298},[288,128507,104],{"class":51473},[288,128509,61230],{"class":2135},[288,128511,344],{"class":298},[288,128513,61235],{"class":403},[288,128515,128516],{"class":298},">智能 路由器\u003C\u002F",[288,128518,104],{"class":51473},[288,128520,51480],{"class":298},[288,128522,128523,128525,128527,128529,128531,128533,128536,128538],{"class":290,"line":1484},[288,128524,52317],{"class":298},[288,128526,104],{"class":51473},[288,128528,61230],{"class":2135},[288,128530,344],{"class":298},[288,128532,61235],{"class":403},[288,128534,128535],{"class":298},">健康 儿童\u003C\u002F",[288,128537,104],{"class":51473},[288,128539,51480],{"class":298},[288,128541,128542,128544,128546,128548,128550,128552,128555,128557],{"class":290,"line":1490},[288,128543,52317],{"class":298},[288,128545,104],{"class":51473},[288,128547,61230],{"class":2135},[288,128549,344],{"class":298},[288,128551,61235],{"class":403},[288,128553,128554],{"class":298},">耳机 音响\u003C\u002F",[288,128556,104],{"class":51473},[288,128558,51480],{"class":298},[288,128560,128561,128563,128565],{"class":290,"line":1502},[288,128562,51958],{"class":298},[288,128564,51784],{"class":51473},[288,128566,51480],{"class":298},[280,128568,128570],{"className":126652,"code":128569,"language":126654,"meta":205,"style":205},".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",[25,128571,128572,128581,128591,128604,128616,128628,128640,128650,128661,128665,128675,128686],{"__ignoreMap":205},[288,128573,128574,128577,128579],{"class":290,"line":291},[288,128575,128576],{"class":2135},".sidebar",[288,128578,1571],{"class":51473},[288,128580,15745],{"class":298},[288,128582,128583,128585,128587,128589],{"class":290,"line":206},[288,128584,128268],{"class":347},[288,128586,51610],{"class":298},[288,128588,61042],{"class":347},[288,128590,1463],{"class":298},[288,128592,128593,128595,128597,128600,128602],{"class":290,"line":1352},[288,128594,70741],{"class":347},[288,128596,51610],{"class":298},[288,128598,128599],{"class":347},"234",[288,128601,51665],{"class":294},[288,128603,1463],{"class":298},[288,128605,128606,128608,128610,128612,128614],{"class":290,"line":1367},[288,128607,70961],{"class":347},[288,128609,51610],{"class":298},[288,128611,749],{"class":347},[288,128613,51665],{"class":294},[288,128615,1463],{"class":298},[288,128617,128618,128620,128622,128624,128626],{"class":290,"line":1373},[288,128619,127336],{"class":347},[288,128621,51610],{"class":298},[288,128623,749],{"class":347},[288,128625,51665],{"class":294},[288,128627,1463],{"class":298},[288,128629,128630,128632,128634,128636,128638],{"class":290,"line":1387},[288,128631,70996],{"class":347},[288,128633,51610],{"class":298},[288,128635,1248],{"class":347},[288,128637,51665],{"class":294},[288,128639,1463],{"class":298},[288,128641,128642,128644,128646,128648],{"class":290,"line":1393},[288,128643,71078],{"class":347},[288,128645,51610],{"class":298},[288,128647,61015],{"class":347},[288,128649,1463],{"class":298},[288,128651,128652,128654,128656,128659],{"class":290,"line":1484},[288,128653,71051],{"class":347},[288,128655,51610],{"class":298},[288,128657,128658],{"class":347},"#55585a",[288,128660,1463],{"class":298},[288,128662,128663],{"class":290,"line":1490},[288,128664,1737],{"class":298},[288,128666,128667,128669,128671,128673],{"class":290,"line":1502},[288,128668,128576],{"class":2135},[288,128670,1571],{"class":51473},[288,128672,61113],{"class":2135},[288,128674,15745],{"class":298},[288,128676,128677,128679,128681,128684],{"class":290,"line":1784},[288,128678,71051],{"class":347},[288,128680,51610],{"class":298},[288,128682,128683],{"class":347},"#ff6700",[288,128685,1463],{"class":298},[288,128687,128688],{"class":290,"line":1789},[288,128689,1737],{"class":298},[200,128691],{"style":202,"src":128692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128694,128695],{},"行高=盒子高度：实现文字的垂直居中",[19,128697,128698],{},"原理讲解：",[200,128700],{"style":202,"src":128701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128703,128705],{"id":128704},"_82-css背景","8.2 css背景",[19,128707,128708],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[260,128710,128712],{"id":128711},"_821-背景颜色","8.2.1 背景颜色",[19,128714,128715],{},"background-color:颜色值;",[19,128717,128718],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[260,128720,128722],{"id":128721},"_822-背景图片","8.2.2 背景图片",[19,128724,128725],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[280,128727,128729],{"className":126652,"code":128728,"language":126654,"meta":205,"style":205},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[25,128730,128731,128737,128753],{"__ignoreMap":205},[288,128732,128733,128735],{"class":290,"line":291},[288,128734,51784],{"class":51473},[288,128736,15745],{"class":298},[288,128738,128739,128742,128744,128746,128748,128751],{"class":290,"line":206},[288,128740,128741],{"class":347},"  background-image",[288,128743,51610],{"class":298},[288,128745,61899],{"class":347},[288,128747,299],{"class":298},[288,128749,128750],{"class":5389},"images\u002Fbg.png",[288,128752,2891],{"class":298},[288,128754,128755],{"class":290,"line":1352},[288,128756,1737],{"class":298},[436,128758,128759,128768],{},[439,128760,128761],{},[442,128762,128763,128766],{},[445,128764,128765],{"align":23909},"参数值",[445,128767,102869],{"align":23909},[483,128769,128770,128777],{},[442,128771,128772,128774],{},[488,128773,54910],{"align":23909},[488,128775,128776],{"align":23909},"无背景图（默认的）",[442,128778,128779,128781],{},[488,128780,61899],{"align":23909},[488,128782,128783],{"align":23909},"使用绝对或相对地址指定背景图像",[280,128785,128786],{"className":126652,"code":128728,"language":126654,"meta":205,"style":205},[25,128787,128788,128794,128808],{"__ignoreMap":205},[288,128789,128790,128792],{"class":290,"line":291},[288,128791,51784],{"class":51473},[288,128793,15745],{"class":298},[288,128795,128796,128798,128800,128802,128804,128806],{"class":290,"line":206},[288,128797,128741],{"class":347},[288,128799,51610],{"class":298},[288,128801,61899],{"class":347},[288,128803,299],{"class":298},[288,128805,128750],{"class":5389},[288,128807,2891],{"class":298},[288,128809,128810],{"class":290,"line":1352},[288,128811,1737],{"class":298},[19,128813,128814],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[260,128816,128818],{"id":128817},"_823-背景平铺","8.2.3 背景平铺",[280,128820,128822],{"className":126652,"code":128821,"language":126654,"meta":205,"style":205},"div {\n  background-repeat: no-repeat;\n}\n",[25,128823,128824,128830,128841],{"__ignoreMap":205},[288,128825,128826,128828],{"class":290,"line":291},[288,128827,51784],{"class":51473},[288,128829,15745],{"class":298},[288,128831,128832,128835,128837,128839],{"class":290,"line":206},[288,128833,128834],{"class":347},"  background-repeat",[288,128836,51610],{"class":298},[288,128838,61909],{"class":347},[288,128840,1463],{"class":298},[288,128842,128843],{"class":290,"line":1352},[288,128844,1737],{"class":298},[436,128846,128847,128855],{},[439,128848,128849],{},[442,128850,128851,128853],{},[445,128852,128765],{"align":23909},[445,128854,102869],{"align":23909},[483,128856,128857,128865,128872,128880],{},[442,128858,128859,128862],{},[488,128860,128861],{"align":23909},"repeat",[488,128863,128864],{"align":23909},"背景图像在纵向和横向上平铺（默认的）",[442,128866,128867,128869],{},[488,128868,61909],{"align":23909},[488,128870,128871],{"align":23909},"背景图像不平铺",[442,128873,128874,128877],{},[488,128875,128876],{"align":23909},"repeat-x",[488,128878,128879],{"align":23909},"背景图像在横向上平铺",[442,128881,128882,128885],{},[488,128883,128884],{"align":23909},"repeat-y",[488,128886,128887],{"align":23909},"背景图像在纵向平铺",[260,128889,128891],{"id":128890},"_824-背景图片位置","8.2.4 背景图片位置",[280,128893,128895],{"className":126652,"code":128894,"language":126654,"meta":205,"style":205},"\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",[25,128896,128897,128902,128908,128922,128926,128931,128937,128953,128957,128962,128968,128982],{"__ignoreMap":205},[288,128898,128899],{"class":290,"line":291},[288,128900,128901],{"class":357},"\u002F* 方位名词 *\u002F\n",[288,128903,128904,128906],{"class":290,"line":206},[288,128905,51784],{"class":51473},[288,128907,15745],{"class":298},[288,128909,128910,128913,128915,128917,128920],{"class":290,"line":1352},[288,128911,128912],{"class":347},"  background-position",[288,128914,51610],{"class":298},[288,128916,51765],{"class":347},[288,128918,128919],{"class":347}," top",[288,128921,1463],{"class":298},[288,128923,128924],{"class":290,"line":1367},[288,128925,1737],{"class":298},[288,128927,128928],{"class":290,"line":1373},[288,128929,128930],{"class":357},"\u002F* 精确单位 *\u002F\n",[288,128932,128933,128935],{"class":290,"line":1387},[288,128934,51784],{"class":51473},[288,128936,15745],{"class":298},[288,128938,128939,128941,128943,128945,128947,128949,128951],{"class":290,"line":1393},[288,128940,128912],{"class":347},[288,128942,51610],{"class":298},[288,128944,997],{"class":347},[288,128946,51665],{"class":294},[288,128948,57677],{"class":347},[288,128950,51665],{"class":294},[288,128952,1463],{"class":298},[288,128954,128955],{"class":290,"line":1484},[288,128956,1737],{"class":298},[288,128958,128959],{"class":290,"line":1490},[288,128960,128961],{"class":357},"\u002F* 混合单位 *\u002F\n",[288,128963,128964,128966],{"class":290,"line":1502},[288,128965,51784],{"class":51473},[288,128967,15745],{"class":298},[288,128969,128970,128972,128974,128976,128978,128980],{"class":290,"line":1784},[288,128971,128912],{"class":347},[288,128973,51610],{"class":298},[288,128975,997],{"class":347},[288,128977,51665],{"class":294},[288,128979,17317],{"class":347},[288,128981,1463],{"class":298},[288,128983,128984],{"class":290,"line":1789},[288,128985,1737],{"class":298},[19,128987,128988],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[436,128990,128991,128999],{},[439,128992,128993],{},[442,128994,128995,128997],{},[445,128996,128765],{"align":23909},[445,128998,26042],{"align":23909},[483,129000,129001,129008],{},[442,129002,129003,129005],{},[488,129004,52141],{"align":23909},[488,129006,129007],{"align":23909},"百分数|由浮点数和单位标识符组成的长度值",[442,129009,129010,129013],{},[488,129011,129012],{"align":23909},"position",[488,129014,129015],{"align":23909},"top|center|bottom|left|center|right 方位名词",[19,129017,129018],{},"其他说明：",[19,129020,129021],{},"①参数是方位名词",[19,129023,129024],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129026,129027],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129029,129030],{},"②参数是精确单位",[19,129032,129033],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129035,129036],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129038,129039],{},"③参数是混合单位",[19,129041,129042],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[260,129044,129046],{"id":129045},"_825-背景图片固定","8.2.5 背景图片固定",[280,129048,129050],{"className":126652,"code":129049,"language":126654,"meta":205,"style":205},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[25,129051,129052,129057,129063,129075,129079,129084,129090,129100],{"__ignoreMap":205},[288,129053,129054],{"class":290,"line":291},[288,129055,129056],{"class":357},"\u002F* 背景滚动（默认） *\u002F\n",[288,129058,129059,129061],{"class":290,"line":206},[288,129060,51784],{"class":51473},[288,129062,15745],{"class":298},[288,129064,129065,129068,129070,129073],{"class":290,"line":1352},[288,129066,129067],{"class":347},"  background-attachment",[288,129069,51610],{"class":298},[288,129071,129072],{"class":347},"scroll",[288,129074,1463],{"class":298},[288,129076,129077],{"class":290,"line":1367},[288,129078,1737],{"class":298},[288,129080,129081],{"class":290,"line":1373},[288,129082,129083],{"class":357},"\u002F* 背景固定 *\u002F\n",[288,129085,129086,129088],{"class":290,"line":1387},[288,129087,51784],{"class":51473},[288,129089,15745],{"class":298},[288,129091,129092,129094,129096,129098],{"class":290,"line":1393},[288,129093,129067],{"class":347},[288,129095,51610],{"class":298},[288,129097,86406],{"class":347},[288,129099,1463],{"class":298},[288,129101,129102],{"class":290,"line":1484},[288,129103,1737],{"class":298},[436,129105,129106,129115],{},[439,129107,129108],{},[442,129109,129110,129113],{},[445,129111,129112],{"align":23909},"参数",[445,129114,102869],{"align":23909},[483,129116,129117,129124],{},[442,129118,129119,129121],{},[488,129120,129072],{"align":23909},[488,129122,129123],{"align":23909},"背景图像是随对象内容滚动",[442,129125,129126,129128],{},[488,129127,86406],{"align":23909},[488,129129,129130],{"align":23909},"背景图像固定",[260,129132,129134],{"id":129133},"_826-背景样式合写","8.2.6 背景样式合写",[280,129136,129138],{"className":126652,"code":129137,"language":126654,"meta":205,"style":205},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[25,129139,129140,129145,129151,129179],{"__ignoreMap":205},[288,129141,129142],{"class":290,"line":291},[288,129143,129144],{"class":357},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[288,129146,129147,129149],{"class":290,"line":206},[288,129148,51784],{"class":51473},[288,129150,15745],{"class":298},[288,129152,129153,129155,129157,129159,129162,129164,129166,129168,129170,129173,129175,129177],{"class":290,"line":1352},[288,129154,70784],{"class":347},[288,129156,51610],{"class":298},[288,129158,61015],{"class":347},[288,129160,129161],{"class":347}," url",[288,129163,299],{"class":298},[288,129165,128750],{"class":5389},[288,129167,13887],{"class":298},[288,129169,61909],{"class":347},[288,129171,129172],{"class":347}," fixed",[288,129174,17317],{"class":347},[288,129176,128919],{"class":347},[288,129178,1463],{"class":298},[288,129180,129181],{"class":290,"line":1367},[288,129182,1737],{"class":298},[260,129184,129186],{"id":129185},"_827-背景色半透明","8.2.7 背景色半透明",[280,129188,129190],{"className":126652,"code":129189,"language":126654,"meta":205,"style":205},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[25,129191,129192,129198,129224],{"__ignoreMap":205},[288,129193,129194,129196],{"class":290,"line":291},[288,129195,51784],{"class":51473},[288,129197,15745],{"class":298},[288,129199,129200,129202,129204,129206,129208,129210,129212,129214,129216,129218,129220,129222],{"class":290,"line":206},[288,129201,70784],{"class":347},[288,129203,51610],{"class":298},[288,129205,55283],{"class":347},[288,129207,299],{"class":298},[288,129209,490],{"class":347},[288,129211,12608],{"class":298},[288,129213,490],{"class":347},[288,129215,12608],{"class":298},[288,129217,490],{"class":347},[288,129219,12608],{"class":298},[288,129221,100694],{"class":347},[288,129223,2891],{"class":298},[288,129225,129226],{"class":290,"line":1352},[288,129227,1737],{"class":298},[19,129229,99569],{},[19,129231,129232],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129234,129235],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129237,129238],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129240,129241],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[260,129243,129245],{"id":129244},"_828-总结","8.2.8 总结",[436,129247,129248,129259],{},[439,129249,129250],{},[442,129251,129252,129255,129257],{},[445,129253,129254],{"align":23909},"属性",[445,129256,102869],{"align":23909},[445,129258,451],{"align":23909},[483,129260,129261,129272,129283,129294,129305,129316,129327],{},[442,129262,129263,129266,129269],{},[488,129264,129265],{"align":23909},"background-color",[488,129267,129268],{"align":23909},"背景颜色",[488,129270,129271],{"align":23909},"预定义的颜色值\u002F十六进制\u002FRGB代码",[442,129273,129274,129277,129280],{},[488,129275,129276],{"align":23909},"background-image",[488,129278,129279],{"align":23909},"背景图片",[488,129281,129282],{"align":23909},"url(图片路径)",[442,129284,129285,129288,129291],{},[488,129286,129287],{"align":23909},"background-repeat",[488,129289,129290],{"align":23909},"是否平铺",[488,129292,129293],{"align":23909},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[442,129295,129296,129299,129302],{},[488,129297,129298],{"align":23909},"background-position",[488,129300,129301],{"align":23909},"背景位置",[488,129303,129304],{"align":23909},"length\u002Fposition 分别是x和y坐标",[442,129306,129307,129310,129313],{},[488,129308,129309],{"align":23909},"background-attachment",[488,129311,129312],{"align":23909},"背景附着",[488,129314,129315],{"align":23909},"scroll(背景滚动) \u002Ffixed (背景固定)",[442,129317,129318,129321,129324],{},[488,129319,129320],{"align":23909},"背景简写",[488,129322,129323],{"align":23909},"书写更简单",[488,129325,129326],{"align":23909},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[442,129328,129329,129332,129335],{},[488,129330,129331],{"align":23909},"背景半透明",[488,129333,129334],{"align":23909},"背景颜色半透明",[488,129336,129337],{"align":23909},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129339,129340],{},"颜色渐变：",[200,129342],{"style":202,"src":129343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[200,129345],{"style":202,"src":129346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[260,129348,129350],{"id":129349},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[280,129352,129354],{"className":127399,"code":129353,"language":127401,"meta":205,"style":205},"\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",[25,129355,129356,129371,129390,129409,129428,129447,129466],{"__ignoreMap":205},[288,129357,129358,129360,129362,129364,129366,129369],{"class":290,"line":291},[288,129359,1207],{"class":298},[288,129361,51784],{"class":51473},[288,129363,53659],{"class":2135},[288,129365,344],{"class":298},[288,129367,129368],{"class":403},"\"nav\"",[288,129370,51480],{"class":298},[288,129372,129373,129375,129377,129379,129381,129383,129386,129388],{"class":290,"line":206},[288,129374,52317],{"class":298},[288,129376,104],{"class":51473},[288,129378,61230],{"class":2135},[288,129380,344],{"class":298},[288,129382,61235],{"class":403},[288,129384,129385],{"class":298},">五彩导航1\u003C\u002F",[288,129387,104],{"class":51473},[288,129389,51480],{"class":298},[288,129391,129392,129394,129396,129398,129400,129402,129405,129407],{"class":290,"line":1352},[288,129393,52317],{"class":298},[288,129395,104],{"class":51473},[288,129397,61230],{"class":2135},[288,129399,344],{"class":298},[288,129401,61235],{"class":403},[288,129403,129404],{"class":298},">五彩导航2\u003C\u002F",[288,129406,104],{"class":51473},[288,129408,51480],{"class":298},[288,129410,129411,129413,129415,129417,129419,129421,129424,129426],{"class":290,"line":1367},[288,129412,52317],{"class":298},[288,129414,104],{"class":51473},[288,129416,61230],{"class":2135},[288,129418,344],{"class":298},[288,129420,61235],{"class":403},[288,129422,129423],{"class":298},">五彩导航3\u003C\u002F",[288,129425,104],{"class":51473},[288,129427,51480],{"class":298},[288,129429,129430,129432,129434,129436,129438,129440,129443,129445],{"class":290,"line":1373},[288,129431,52317],{"class":298},[288,129433,104],{"class":51473},[288,129435,61230],{"class":2135},[288,129437,344],{"class":298},[288,129439,61235],{"class":403},[288,129441,129442],{"class":298},">五彩导航4\u003C\u002F",[288,129444,104],{"class":51473},[288,129446,51480],{"class":298},[288,129448,129449,129451,129453,129455,129457,129459,129462,129464],{"class":290,"line":1387},[288,129450,52317],{"class":298},[288,129452,104],{"class":51473},[288,129454,61230],{"class":2135},[288,129456,344],{"class":298},[288,129458,61235],{"class":403},[288,129460,129461],{"class":298},">五彩导航5\u003C\u002F",[288,129463,104],{"class":51473},[288,129465,51480],{"class":298},[288,129467,129468,129470,129472],{"class":290,"line":1393},[288,129469,51958],{"class":298},[288,129471,51784],{"class":51473},[288,129473,51480],{"class":298},[280,129475,129477],{"className":126652,"code":129476,"language":126654,"meta":205,"style":205},".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",[25,129478,129479,129488,129498,129510,129522,129532,129544,129554,129558,129583,129606,129629,129652],{"__ignoreMap":205},[288,129480,129481,129484,129486],{"class":290,"line":291},[288,129482,129483],{"class":2135},".nav",[288,129485,1571],{"class":51473},[288,129487,15745],{"class":298},[288,129489,129490,129492,129494,129496],{"class":290,"line":206},[288,129491,128268],{"class":347},[288,129493,51610],{"class":298},[288,129495,72556],{"class":347},[288,129497,1463],{"class":298},[288,129499,129500,129502,129504,129506,129508],{"class":290,"line":1352},[288,129501,70741],{"class":347},[288,129503,51610],{"class":298},[288,129505,1114],{"class":347},[288,129507,51665],{"class":294},[288,129509,1463],{"class":298},[288,129511,129512,129514,129516,129518,129520],{"class":290,"line":1367},[288,129513,70961],{"class":347},[288,129515,51610],{"class":298},[288,129517,1153],{"class":347},[288,129519,51665],{"class":294},[288,129521,1463],{"class":298},[288,129523,129524,129526,129528,129530],{"class":290,"line":1373},[288,129525,70699],{"class":347},[288,129527,51610],{"class":298},[288,129529,51765],{"class":347},[288,129531,1463],{"class":298},[288,129533,129534,129536,129538,129540,129542],{"class":290,"line":1387},[288,129535,127336],{"class":347},[288,129537,51610],{"class":298},[288,129539,1153],{"class":347},[288,129541,51665],{"class":294},[288,129543,1463],{"class":298},[288,129545,129546,129548,129550,129552],{"class":290,"line":1393},[288,129547,71078],{"class":347},[288,129549,51610],{"class":298},[288,129551,61015],{"class":347},[288,129553,1463],{"class":298},[288,129555,129556],{"class":290,"line":1484},[288,129557,1737],{"class":298},[288,129559,129560,129562,129564,129567,129569,129571,129574,129576,129578,129580],{"class":290,"line":1490},[288,129561,129483],{"class":2135},[288,129563,1571],{"class":51473},[288,129565,129566],{"class":2135},":nth-child",[288,129568,299],{"class":298},[288,129570,516],{"class":347},[288,129572,129573],{"class":298},") { ",[288,129575,129265],{"class":347},[288,129577,51610],{"class":298},[288,129579,128683],{"class":347},[288,129581,129582],{"class":298},"; }\n",[288,129584,129585,129587,129589,129591,129593,129595,129597,129599,129601,129604],{"class":290,"line":1502},[288,129586,129483],{"class":2135},[288,129588,1571],{"class":51473},[288,129590,129566],{"class":2135},[288,129592,299],{"class":298},[288,129594,376],{"class":347},[288,129596,129573],{"class":298},[288,129598,129265],{"class":347},[288,129600,51610],{"class":298},[288,129602,129603],{"class":347},"#ff0000",[288,129605,129582],{"class":298},[288,129607,129608,129610,129612,129614,129616,129618,129620,129622,129624,129627],{"class":290,"line":1784},[288,129609,129483],{"class":2135},[288,129611,1571],{"class":51473},[288,129613,129566],{"class":2135},[288,129615,299],{"class":298},[288,129617,370],{"class":347},[288,129619,129573],{"class":298},[288,129621,129265],{"class":347},[288,129623,51610],{"class":298},[288,129625,129626],{"class":347},"#00a4ff",[288,129628,129582],{"class":298},[288,129630,129631,129633,129635,129637,129639,129641,129643,129645,129647,129650],{"class":290,"line":1789},[288,129632,129483],{"class":2135},[288,129634,1571],{"class":51473},[288,129636,129566],{"class":2135},[288,129638,299],{"class":298},[288,129640,590],{"class":347},[288,129642,129573],{"class":298},[288,129644,129265],{"class":347},[288,129646,51610],{"class":298},[288,129648,129649],{"class":347},"#ff00ff",[288,129651,129582],{"class":298},[288,129653,129654,129656,129658,129660,129662,129664,129666,129668,129670,129673],{"class":290,"line":1795},[288,129655,129483],{"class":2135},[288,129657,1571],{"class":51473},[288,129659,129566],{"class":2135},[288,129661,299],{"class":298},[288,129663,616],{"class":347},[288,129665,129573],{"class":298},[288,129667,129265],{"class":347},[288,129669,51610],{"class":298},[288,129671,129672],{"class":347},"#00ff00",[288,129674,129582],{"class":298},[14,129676,129678],{"id":129677},"_83-css三大特性","8.3 css三大特性",[260,129680,129682],{"id":129681},"_831-层叠性","8.3.1 层叠性",[19,129684,129685],{},"为了解决样式冲突问题",[19,129687,129688],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129690,129691],{},"   ②样式不冲突，不会层叠",[260,129693,129695],{"id":129694},"_832-继承性","8.3.2 继承性",[19,129697,129698],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129700,129701],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[280,129703,129705],{"className":126652,"code":129704,"language":126654,"meta":205,"style":205},"p {\n  color: #333;\n}\n",[25,129706,129707,129713,129723],{"__ignoreMap":205},[288,129708,129709,129711],{"class":290,"line":291},[288,129710,19],{"class":51473},[288,129712,15745],{"class":298},[288,129714,129715,129717,129719,129721],{"class":290,"line":206},[288,129716,71078],{"class":347},[288,129718,51610],{"class":298},[288,129720,62542],{"class":347},[288,129722,1463],{"class":298},[288,129724,129725],{"class":290,"line":1352},[288,129726,1737],{"class":298},[200,129728],{"style":202,"src":129729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129731,129732],{},"解释：①行高可以跟单位也可以不跟单位",[19,129734,129735],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129737,129738],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129740,129741],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[260,129743,129745],{"id":129744},"_833-优先级","8.3.3 优先级",[243,129747,129748,129751],{},[246,129749,129750],{},"选择器相同，则执行层叠性",[246,129752,129753],{},"选择器不同，则根据选择器权重执行",[436,129755,129756,129766],{},[439,129757,129758],{},[442,129759,129760,129763],{},[445,129761,129762],{"align":23909},"选择器",[445,129764,129765],{"align":23909},"选择器权重",[483,129767,129768,129776,129784,129792,129800,129808],{},[442,129769,129770,129773],{},[488,129771,129772],{"align":23909},"继承 或者*",[488,129774,129775],{"align":23909},"0，0，0，0",[442,129777,129778,129781],{},[488,129779,129780],{"align":23909},"标签选择器",[488,129782,129783],{"align":23909},"0，0，0，1",[442,129785,129786,129789],{},[488,129787,129788],{"align":23909},"类选择器，伪类选择器",[488,129790,129791],{"align":23909},"0，0，1，0",[442,129793,129794,129797],{},[488,129795,129796],{"align":23909},"ID选择器",[488,129798,129799],{"align":23909},"0，1，0，0",[442,129801,129802,129805],{},[488,129803,129804],{"align":23909},"行内样式",[488,129806,129807],{"align":23909},"1，0，0，0",[442,129809,129810,129813],{},[488,129811,129812],{"align":23909},"！important",[488,129814,129815],{"align":23909},"无穷大",[19,129817,129818],{},"! important用法：",[280,129820,129822],{"className":126652,"code":129821,"language":126654,"meta":205,"style":205},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[25,129823,129824,129829,129835,129848,129852,129857,129863,129873],{"__ignoreMap":205},[288,129825,129826],{"class":290,"line":291},[288,129827,129828],{"class":357},"\u002F* !important 拥有最高优先级 *\u002F\n",[288,129830,129831,129833],{"class":290,"line":206},[288,129832,51784],{"class":51473},[288,129834,15745],{"class":298},[288,129836,129837,129839,129841,129843,129846],{"class":290,"line":1352},[288,129838,71078],{"class":347},[288,129840,51610],{"class":298},[288,129842,51818],{"class":347},[288,129844,129845],{"class":294}," !important",[288,129847,1463],{"class":298},[288,129849,129850],{"class":290,"line":1367},[288,129851,1737],{"class":298},[288,129853,129854],{"class":290,"line":1373},[288,129855,129856],{"class":357},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[288,129858,129859,129861],{"class":290,"line":1387},[288,129860,51784],{"class":51473},[288,129862,15745],{"class":298},[288,129864,129865,129867,129869,129871],{"class":290,"line":1393},[288,129866,71078],{"class":347},[288,129868,51610],{"class":298},[288,129870,57594],{"class":347},[288,129872,1463],{"class":298},[288,129874,129875],{"class":290,"line":1484},[288,129876,1737],{"class":298},[19,129878,129879],{},"优先级注意点：",[19,129881,129882],{},"①权重是有4组数字组成,但是不会有进位",[19,129884,129885],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129887,129888],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129890,129891],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129893,129894],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129896,129897],{},"⑥复合选择器",[436,129899,129900,129910],{},[439,129901,129902],{},[442,129903,129904,129907],{},[445,129905,129906],{"align":23909},"div ul li",[445,129908,129909],{"align":23909},"0,0,0,3",[483,129911,129912,129920,129928],{},[442,129913,129914,129917],{},[488,129915,129916],{"align":23909},".nav ul li",[488,129918,129919],{"align":23909},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[442,129921,129922,129925],{},[488,129923,129924],{"align":23909},"a:hover",[488,129926,129927],{"align":23909},"0,0,1,1",[442,129929,129930,129933],{},[488,129931,129932],{"align":23909},".nav a",[488,129934,129927],{"align":23909},[5299,129936,129937],{},"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":205,"searchDepth":206,"depth":206,"links":129939},[129940,129948,129959],{"id":128048,"depth":206,"text":128049,"children":129941},[129942,129943,129944,129945,129946,129947],{"id":128061,"depth":1352,"text":128062},{"id":128133,"depth":1352,"text":128134},{"id":128205,"depth":1352,"text":128206},{"id":128236,"depth":1352,"text":128237},{"id":128243,"depth":1352,"text":128244},{"id":128396,"depth":1352,"text":128397},{"id":128704,"depth":206,"text":128705,"children":129949},[129950,129951,129952,129953,129954,129955,129956,129957,129958],{"id":128711,"depth":1352,"text":128712},{"id":128721,"depth":1352,"text":128722},{"id":128817,"depth":1352,"text":128818},{"id":128890,"depth":1352,"text":128891},{"id":129045,"depth":1352,"text":129046},{"id":129133,"depth":1352,"text":129134},{"id":129185,"depth":1352,"text":129186},{"id":129244,"depth":1352,"text":129245},{"id":129349,"depth":1352,"text":129350},{"id":129677,"depth":206,"text":129678,"children":129960},[129961,129962,129963],{"id":129681,"depth":1352,"text":129682},{"id":129694,"depth":1352,"text":129695},{"id":129744,"depth":1352,"text":129745},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128040,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129970,"title":129971,"body":129972,"description":214,"extension":215,"meta":131562,"navigation":217,"path":131563,"seo":131564,"stem":131565,"__hash__":131566},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129973,"toc":131541},[129974,129977,129981,129984,129987,129990,129993,129996,129999,130002,130006,130014,130051,130087,130090,130104,130109,130143,130146,130239,130244,130247,130277,130280,130285,130293,130297,130304,130350,130394,130399,130402,130405,130408,130411,130414,130417,130419,130422,130426,130431,130475,130480,130483,130486,130523,130528,130531,130534,130537,130540,130572,130575,130578,130581,130613,130616,130619,130622,130626,130629,130661,130664,130668,130688,130691,130699,130702,130706,130711,130714,130746,130751,130754,130792,130796,130801,130804,130807,130838,130841,130858,130863,130915,130975,130980,131034,131072,131076,131080,131083,131087,131095,131098,131100,131111,131116,131164,131198,131201,131204,131207,131210,131254,131257,131260,131263,131266,131269,131272,131316,131319,131322,131325,131328,131331,131334,131340,131343,131387,131390,131393,131396,131399,131402,131446,131449,131451,131454,131458,131462,131500,131504,131507,131510,131514,131522,131526,131529,131532,131535,131538],[10,129975,129971],{"id":129976},"_9-css盒模型浮动与切图",[14,129978,129980],{"id":129979},"_91-盒子模型","9.1 盒子模型",[19,129982,129983],{},"利用盒子来设计网页",[19,129985,129986],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129988,129989],{},"网页布局设置：",[19,129991,129992],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129994,129995],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129997,129998],{},"③往盒子里装内容",[200,130000],{"style":202,"src":130001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[260,130003,130005],{"id":130004},"_911-边框border","9.1.1 边框（border）",[243,130007,130008,130011],{},[246,130009,130010],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[246,130012,130013],{},"语法",[280,130015,130017],{"className":126652,"code":130016,"language":126654,"meta":205,"style":205},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[25,130018,130019,130024,130030,130047],{"__ignoreMap":205},[288,130020,130021],{"class":290,"line":291},[288,130022,130023],{"class":357},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[288,130025,130026,130028],{"class":290,"line":206},[288,130027,51784],{"class":51473},[288,130029,15745],{"class":298},[288,130031,130032,130034,130036,130038,130040,130042,130045],{"class":290,"line":1352},[288,130033,71069],{"class":347},[288,130035,51610],{"class":298},[288,130037,516],{"class":347},[288,130039,51665],{"class":294},[288,130041,51694],{"class":347},[288,130043,130044],{"class":347}," #ccc",[288,130046,1463],{"class":298},[288,130048,130049],{"class":290,"line":1367},[288,130050,1737],{"class":298},[436,130052,130053,130061],{},[439,130054,130055],{},[442,130056,130057,130059],{},[445,130058,129254],{"align":23909},[445,130060,102869],{"align":23909},[483,130062,130063,130071,130079],{},[442,130064,130065,130068],{},[488,130066,130067],{"align":23909},"border-width",[488,130069,130070],{"align":23909},"定义边框粗细，单位是px",[442,130072,130073,130076],{},[488,130074,130075],{"align":23909},"border-style",[488,130077,130078],{"align":23909},"边框的样式",[442,130080,130081,130084],{},[488,130082,130083],{"align":23909},"border-color",[488,130085,130086],{"align":23909},"边框的颜色",[19,130088,130089],{},"边框样式 border-style 可以设置如下值：",[1304,130091,130092,130095,130098,130101],{},[246,130093,130094],{},"none：没有边框即忽略所有边框的宽度（默认值）",[246,130096,130097],{},"solid：边框为单实线(最为常用的)",[246,130099,130100],{},"dashed：边框为虚线",[246,130102,130103],{},"dotted：边框为点线",[243,130105,130106],{"start":1352},[246,130107,130108],{},"边框的合写分写",[280,130110,130111],{"className":126652,"code":130016,"language":126654,"meta":205,"style":205},[25,130112,130113,130117,130123,130139],{"__ignoreMap":205},[288,130114,130115],{"class":290,"line":291},[288,130116,130023],{"class":357},[288,130118,130119,130121],{"class":290,"line":206},[288,130120,51784],{"class":51473},[288,130122,15745],{"class":298},[288,130124,130125,130127,130129,130131,130133,130135,130137],{"class":290,"line":1352},[288,130126,71069],{"class":347},[288,130128,51610],{"class":298},[288,130130,516],{"class":347},[288,130132,51665],{"class":294},[288,130134,51694],{"class":347},[288,130136,130044],{"class":347},[288,130138,1463],{"class":298},[288,130140,130141],{"class":290,"line":1367},[288,130142,1737],{"class":298},[19,130144,130145],{},"边框分开写法：",[280,130147,130149],{"className":126652,"code":130148,"language":126654,"meta":205,"style":205},"\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",[25,130150,130151,130156,130162,130180,130198,130217,130235],{"__ignoreMap":205},[288,130152,130153],{"class":290,"line":291},[288,130154,130155],{"class":357},"\u002F* 边框分开写法 *\u002F\n",[288,130157,130158,130160],{"class":290,"line":206},[288,130159,51784],{"class":51473},[288,130161,15745],{"class":298},[288,130163,130164,130167,130169,130171,130173,130175,130178],{"class":290,"line":1352},[288,130165,130166],{"class":347},"  border-top",[288,130168,51610],{"class":298},[288,130170,516],{"class":347},[288,130172,51665],{"class":294},[288,130174,51694],{"class":347},[288,130176,130177],{"class":347}," #000",[288,130179,1463],{"class":298},[288,130181,130182,130185,130187,130189,130191,130193,130196],{"class":290,"line":1367},[288,130183,130184],{"class":347},"  border-right",[288,130186,51610],{"class":298},[288,130188,376],{"class":347},[288,130190,51665],{"class":294},[288,130192,62414],{"class":347},[288,130194,130195],{"class":347}," #333",[288,130197,1463],{"class":298},[288,130199,130200,130203,130205,130207,130209,130212,130215],{"class":290,"line":1373},[288,130201,130202],{"class":347},"  border-bottom",[288,130204,51610],{"class":298},[288,130206,370],{"class":347},[288,130208,51665],{"class":294},[288,130210,130211],{"class":347}," dotted",[288,130213,130214],{"class":347}," #666",[288,130216,1463],{"class":298},[288,130218,130219,130222,130224,130226,130228,130230,130233],{"class":290,"line":1387},[288,130220,130221],{"class":347},"  border-left",[288,130223,51610],{"class":298},[288,130225,516],{"class":347},[288,130227,51665],{"class":294},[288,130229,51694],{"class":347},[288,130231,130232],{"class":347}," #999",[288,130234,1463],{"class":298},[288,130236,130237],{"class":290,"line":1393},[288,130238,1737],{"class":298},[243,130240,130241],{"start":1367},[246,130242,130243],{},"表格的细线边框",[19,130245,130246],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[280,130248,130250],{"className":126652,"code":130249,"language":126654,"meta":205,"style":205},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[25,130251,130252,130257,130263,130273],{"__ignoreMap":205},[288,130253,130254],{"class":290,"line":291},[288,130255,130256],{"class":357},"\u002F* 表格细线边框合并 *\u002F\n",[288,130258,130259,130261],{"class":290,"line":206},[288,130260,436],{"class":51473},[288,130262,15745],{"class":298},[288,130264,130265,130267,130269,130271],{"class":290,"line":1352},[288,130266,70751],{"class":347},[288,130268,51610],{"class":298},[288,130270,65208],{"class":347},[288,130272,1463],{"class":298},[288,130274,130275],{"class":290,"line":1367},[288,130276,1737],{"class":298},[19,130278,130279],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[243,130281,130282],{"start":1373},[246,130283,130284],{},"解决边框额外增加盒子的实际大小的方法：",[1304,130286,130287,130290],{},[246,130288,130289],{},"测量盒子大小的时候,不量边框",[246,130291,130292],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[260,130294,130296],{"id":130295},"_912-内边距","9.1.2 内边距",[243,130298,130299,130302],{},[246,130300,130301],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[246,130303,130013],{},[436,130305,130306,130316],{},[439,130307,130308],{},[442,130309,130310,130313],{},[445,130311,130312],{"align":23909},"值的个数",[445,130314,130315],{"align":23909},"表达意思",[483,130317,130318,130326,130334,130342],{},[442,130319,130320,130323],{},[488,130321,130322],{"align":23909},"padding: 5px;",[488,130324,130325],{"align":23909},"1个值，代表上下左右都有5个元素",[442,130327,130328,130331],{},[488,130329,130330],{"align":23909},"padding: 5px 10px;",[488,130332,130333],{"align":23909},"2个值，代表上下内边距为5像素，左右内边距为10像素",[442,130335,130336,130339],{},[488,130337,130338],{"align":23909},"padding: 5px 10px 20px;",[488,130340,130341],{"align":23909},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[442,130343,130344,130347],{},[488,130345,130346],{"align":23909},"padding: 5px 10px 20px 30px;",[488,130348,130349],{"align":23909},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[436,130351,130352,130360],{},[439,130353,130354],{},[442,130355,130356,130358],{},[445,130357,129254],{"align":23909},[445,130359,102869],{"align":23909},[483,130361,130362,130370,130378,130386],{},[442,130363,130364,130367],{},[488,130365,130366],{"align":23909},"padding-left",[488,130368,130369],{"align":23909},"左内边距",[442,130371,130372,130375],{},[488,130373,130374],{"align":23909},"padding-right",[488,130376,130377],{"align":23909},"右内边距",[442,130379,130380,130383],{},[488,130381,130382],{"align":23909},"padding-top",[488,130384,130385],{"align":23909},"上内边距",[442,130387,130388,130391],{},[488,130389,130390],{"align":23909},"padding-bottom",[488,130392,130393],{"align":23909},"下内边距",[243,130395,130396],{"start":1352},[246,130397,130398],{},"内边距会影响盒子的实际大小",[19,130400,130401],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130403,130404],{},"①内容和边框有了距离，添加了内边距",[19,130406,130407],{},"②padding影响了盒子实际大小",[19,130409,130410],{},"内边距对盒子大小的影响：",[19,130412,130413],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130415,130416],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130418,95393],{},[19,130420,130421],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[260,130423,130425],{"id":130424},"_913-外边距","9.1.3 外边距",[243,130427,130428],{},[246,130429,130430],{},"控制盒子与盒子之间的距离",[436,130432,130433,130441],{},[439,130434,130435],{},[442,130436,130437,130439],{},[445,130438,129254],{"align":23909},[445,130440,102869],{"align":23909},[483,130442,130443,130451,130459,130467],{},[442,130444,130445,130448],{},[488,130446,130447],{"align":23909},"margin-left",[488,130449,130450],{"align":23909},"左外边距",[442,130452,130453,130456],{},[488,130454,130455],{"align":23909},"margin-right",[488,130457,130458],{"align":23909},"右外边距",[442,130460,130461,130464],{},[488,130462,130463],{"align":23909},"margin-top",[488,130465,130466],{"align":23909},"上外边距",[442,130468,130469,130472],{},[488,130470,130471],{"align":23909},"margin-bottom",[488,130473,130474],{"align":23909},"下外边距",[243,130476,130477],{"start":206},[246,130478,130479],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130481,130482],{},"①盒子必须指定了宽度（width）",[19,130484,130485],{},"②盒子左右的外边距都设置为 auto",[280,130487,130489],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,130490,130491,130496,130503,130519],{"__ignoreMap":205},[288,130492,130493],{"class":290,"line":291},[288,130494,130495],{"class":357},"\u002F* margin 复合写法（同上） *\u002F\n",[288,130497,130498,130501],{"class":290,"line":206},[288,130499,130500],{"class":2135},".box",[288,130502,15745],{"class":298},[288,130504,130505,130507,130509,130511,130513,130516],{"class":290,"line":1352},[288,130506,70643],{"class":347},[288,130508,51610],{"class":298},[288,130510,490],{"class":347},[288,130512,51729],{"class":347},[288,130514,130515],{"class":298},";  ",[288,130517,130518],{"class":357},"\u002F* 块级盒子水平居中 *\u002F\n",[288,130520,130521],{"class":290,"line":1367},[288,130522,1737],{"class":298},[243,130524,130525],{"start":1352},[246,130526,130527],{},"外边距塌陷问题",[19,130529,130530],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[200,130532],{"style":202,"src":130533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130535,130536],{},"解决方案：",[19,130538,130539],{},"①可以为父亲元素定义上边距",[280,130541,130542],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},[25,130543,130544,130548,130554,130568],{"__ignoreMap":205},[288,130545,130546],{"class":290,"line":291},[288,130547,130495],{"class":357},[288,130549,130550,130552],{"class":290,"line":206},[288,130551,130500],{"class":2135},[288,130553,15745],{"class":298},[288,130555,130556,130558,130560,130562,130564,130566],{"class":290,"line":1352},[288,130557,70643],{"class":347},[288,130559,51610],{"class":298},[288,130561,490],{"class":347},[288,130563,51729],{"class":347},[288,130565,130515],{"class":298},[288,130567,130518],{"class":357},[288,130569,130570],{"class":290,"line":1367},[288,130571,1737],{"class":298},[19,130573,130574],{},"②可以为父亲元素定义上内边距",[19,130576,130577],{},"③可以为父亲元素添加overflow:hidden",[200,130579],{"style":202,"src":130580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[280,130582,130583],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},[25,130584,130585,130589,130595,130609],{"__ignoreMap":205},[288,130586,130587],{"class":290,"line":291},[288,130588,130495],{"class":357},[288,130590,130591,130593],{"class":290,"line":206},[288,130592,130500],{"class":2135},[288,130594,15745],{"class":298},[288,130596,130597,130599,130601,130603,130605,130607],{"class":290,"line":1352},[288,130598,70643],{"class":347},[288,130600,51610],{"class":298},[288,130602,490],{"class":347},[288,130604,51729],{"class":347},[288,130606,130515],{"class":298},[288,130608,130518],{"class":357},[288,130610,130611],{"class":290,"line":1367},[288,130612,1737],{"class":298},[200,130614],{"style":202,"src":130615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130617,130618],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130620,130621],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[260,130623,130625],{"id":130624},"_914-清除内外边距","9.1.4 清除内外边距",[19,130627,130628],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[280,130630,130631],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},[25,130632,130633,130637,130643,130657],{"__ignoreMap":205},[288,130634,130635],{"class":290,"line":291},[288,130636,130495],{"class":357},[288,130638,130639,130641],{"class":290,"line":206},[288,130640,130500],{"class":2135},[288,130642,15745],{"class":298},[288,130644,130645,130647,130649,130651,130653,130655],{"class":290,"line":1352},[288,130646,70643],{"class":347},[288,130648,51610],{"class":298},[288,130650,490],{"class":347},[288,130652,51729],{"class":347},[288,130654,130515],{"class":298},[288,130656,130518],{"class":357},[288,130658,130659],{"class":290,"line":1367},[288,130660,1737],{"class":298},[19,130662,130663],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[260,130665,130667],{"id":130666},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1304,130669,130670,130673,130676,130679,130682,130685],{},[246,130671,130672],{},"文件→打开 ：可以打开我们要测量的图片",[246,130674,130675],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[246,130677,130678],{},"右击标尺，把里面的单位改为像素",[246,130680,130681],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[246,130683,130684],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[246,130686,130687],{},"用选区拖动 可以测量大小",[200,130689],{"style":202,"src":130690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1304,130692,130693,130696],{},[246,130694,130695],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[246,130697,130698],{},"吸管取色工具",[200,130700],{"style":202,"src":130701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[260,130703,130705],{"id":130704},"_916-案例","9.1.6 案例",[243,130707,130708],{},[246,130709,130710],{},"小米商品",[200,130712],{"style":202,"src":130713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[280,130715,130716],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},[25,130717,130718,130722,130728,130742],{"__ignoreMap":205},[288,130719,130720],{"class":290,"line":291},[288,130721,130495],{"class":357},[288,130723,130724,130726],{"class":290,"line":206},[288,130725,130500],{"class":2135},[288,130727,15745],{"class":298},[288,130729,130730,130732,130734,130736,130738,130740],{"class":290,"line":1352},[288,130731,70643],{"class":347},[288,130733,51610],{"class":298},[288,130735,490],{"class":347},[288,130737,51729],{"class":347},[288,130739,130515],{"class":298},[288,130741,130518],{"class":357},[288,130743,130744],{"class":290,"line":1367},[288,130745,1737],{"class":298},[243,130747,130748],{"start":206},[246,130749,130750],{},"快报模块",[200,130752],{"style":202,"src":130753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[280,130755,130757],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[25,130758,130759,130764,130779,130784],{"__ignoreMap":205},[288,130760,130761],{"class":290,"line":291},[288,130762,130763],{"class":357},"\u003C!-- HTML 代码示例 -->\n",[288,130765,130766,130768,130770,130772,130774,130777],{"class":290,"line":206},[288,130767,1207],{"class":298},[288,130769,51784],{"class":51473},[288,130771,53659],{"class":2135},[288,130773,344],{"class":298},[288,130775,130776],{"class":403},"\"example\"",[288,130778,51480],{"class":298},[288,130780,130781],{"class":290,"line":1352},[288,130782,130783],{"class":298},"  示例内容\n",[288,130785,130786,130788,130790],{"class":290,"line":1367},[288,130787,51958],{"class":298},[288,130789,51784],{"class":51473},[288,130791,51480],{"class":298},[260,130793,130795],{"id":130794},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[243,130797,130798],{},[246,130799,130800],{},"圆角边框",[19,130802,130803],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[200,130805],{"style":202,"src":130806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[280,130808,130810],{"className":126652,"code":130809,"language":126654,"meta":205,"style":205},"div {\n  border: 1px solid #ccc;\n}\n",[25,130811,130812,130818,130834],{"__ignoreMap":205},[288,130813,130814,130816],{"class":290,"line":291},[288,130815,51784],{"class":51473},[288,130817,15745],{"class":298},[288,130819,130820,130822,130824,130826,130828,130830,130832],{"class":290,"line":206},[288,130821,71069],{"class":347},[288,130823,51610],{"class":298},[288,130825,516],{"class":347},[288,130827,51665],{"class":294},[288,130829,51694],{"class":347},[288,130831,130044],{"class":347},[288,130833,1463],{"class":298},[288,130835,130836],{"class":290,"line":1352},[288,130837,1737],{"class":298},[19,130839,130840],{},"解释:",[1304,130842,130843,130846,130849,130852,130855],{},[246,130844,130845],{},"参数值可以为数值或百分比的形式",[246,130847,130848],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[246,130850,130851],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[246,130853,130854],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[246,130856,130857],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[243,130859,130860],{"start":206},[246,130861,130862],{},"盒子阴影",[280,130864,130866],{"className":126652,"code":130865,"language":126654,"meta":205,"style":205},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[25,130867,130868,130874,130911],{"__ignoreMap":205},[288,130869,130870,130872],{"class":290,"line":291},[288,130871,51784],{"class":51473},[288,130873,15745],{"class":298},[288,130875,130876,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909],{"class":290,"line":206},[288,130877,130878],{"class":347},"  box-shadow",[288,130880,51610],{"class":298},[288,130882,490],{"class":347},[288,130884,14928],{"class":347},[288,130886,51665],{"class":294},[288,130888,2210],{"class":347},[288,130890,51665],{"class":294},[288,130892,78940],{"class":347},[288,130894,299],{"class":298},[288,130896,490],{"class":347},[288,130898,12608],{"class":298},[288,130900,490],{"class":347},[288,130902,12608],{"class":298},[288,130904,490],{"class":347},[288,130906,12608],{"class":298},[288,130908,86383],{"class":347},[288,130910,2891],{"class":298},[288,130912,130913],{"class":290,"line":1352},[288,130914,1737],{"class":298},[436,130916,130917,130925],{},[439,130918,130919],{},[442,130920,130921,130923],{},[445,130922,451],{"align":23909},[445,130924,27662],{"align":23909},[483,130926,130927,130935,130943,130951,130959,130967],{},[442,130928,130929,130932],{},[488,130930,130931],{"align":23909},"h-shadow",[488,130933,130934],{"align":23909},"必需,水平阴影的位置,允许负值",[442,130936,130937,130940],{},[488,130938,130939],{"align":23909},"v-shadow",[488,130941,130942],{"align":23909},"必需,垂直阴影的位置,允许负值",[442,130944,130945,130948],{},[488,130946,130947],{"align":23909},"blur",[488,130949,130950],{"align":23909},"可选,模糊距离,就是影子的虚实",[442,130952,130953,130956],{},[488,130954,130955],{"align":23909},"spread",[488,130957,130958],{"align":23909},"可选,阴影尺寸",[442,130960,130961,130964],{},[488,130962,130963],{"align":23909},"color",[488,130965,130966],{"align":23909},"可选,阴影的颜色",[442,130968,130969,130972],{},[488,130970,130971],{"align":23909},"inset",[488,130973,130974],{"align":23909},"可选,将外部阴影(outset)改为内部阴影",[243,130976,130977],{"start":1352},[246,130978,130979],{},"文字阴影",[280,130981,130983],{"className":126652,"code":130982,"language":126654,"meta":205,"style":205},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[25,130984,130985,130991,131030],{"__ignoreMap":205},[288,130986,130987,130989],{"class":290,"line":291},[288,130988,19],{"class":51473},[288,130990,15745],{"class":298},[288,130992,130993,130996,130998,131000,131002,131004,131006,131008,131010,131012,131014,131016,131018,131020,131022,131024,131026,131028],{"class":290,"line":206},[288,130994,130995],{"class":347},"  text-shadow",[288,130997,51610],{"class":298},[288,130999,516],{"class":347},[288,131001,51665],{"class":294},[288,131003,25291],{"class":347},[288,131005,51665],{"class":294},[288,131007,14928],{"class":347},[288,131009,51665],{"class":294},[288,131011,78940],{"class":347},[288,131013,299],{"class":298},[288,131015,490],{"class":347},[288,131017,12608],{"class":298},[288,131019,490],{"class":347},[288,131021,12608],{"class":298},[288,131023,490],{"class":347},[288,131025,12608],{"class":298},[288,131027,100694],{"class":347},[288,131029,2891],{"class":298},[288,131031,131032],{"class":290,"line":1352},[288,131033,1737],{"class":298},[436,131035,131036,131044],{},[439,131037,131038],{},[442,131039,131040,131042],{},[445,131041,451],{"align":23909},[445,131043,27662],{"align":23909},[483,131045,131046,131052,131059,131066],{},[442,131047,131048,131050],{},[488,131049,130931],{"align":23909},[488,131051,130934],{"align":23909},[442,131053,131054,131056],{},[488,131055,130939],{"align":23909},[488,131057,131058],{"align":23909},"必需,垂直阴影位置,允许负值",[442,131060,131061,131063],{},[488,131062,130947],{"align":23909},[488,131064,131065],{"align":23909},"可选,模糊的距离",[442,131067,131068,131070],{},[488,131069,130963],{"align":23909},[488,131071,130966],{"align":23909},[14,131073,131075],{"id":131074},"_92-浮动","9.2 浮动",[260,131077,131079],{"id":131078},"_921-浮动介绍","9.2.1 浮动介绍",[19,131081,131082],{},"在16.2中详细介绍",[260,131084,131086],{"id":131085},"_922-清除浮动","9.2.2 清除浮动",[243,131088,131089,131092],{},[246,131090,131091],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[246,131093,131094],{},"清除浮动的本质",[19,131096,131097],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131099,9198],{},[1304,131101,131102,131105,131108],{},[246,131103,131104],{},"如果父盒子本身有高度，则不需要清除浮动",[246,131106,131107],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[246,131109,131110],{},"父级有了高度，就不会影响下面的标准流了",[243,131112,131113],{"start":1352},[246,131114,131115],{},"清除浮动样式",[280,131117,131119],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[25,131120,131121,131128,131139,131143,131150,131160],{"__ignoreMap":205},[288,131122,131123,131126],{"class":290,"line":291},[288,131124,131125],{"class":2135},".left",[288,131127,15745],{"class":298},[288,131129,131130,131133,131135,131137],{"class":290,"line":206},[288,131131,131132],{"class":347},"  float",[288,131134,51610],{"class":298},[288,131136,23909],{"class":347},[288,131138,1463],{"class":298},[288,131140,131141],{"class":290,"line":1352},[288,131142,1737],{"class":298},[288,131144,131145,131148],{"class":290,"line":1367},[288,131146,131147],{"class":2135},".right",[288,131149,15745],{"class":298},[288,131151,131152,131154,131156,131158],{"class":290,"line":1373},[288,131153,131132],{"class":347},[288,131155,51610],{"class":298},[288,131157,72695],{"class":347},[288,131159,1463],{"class":298},[288,131161,131162],{"class":290,"line":1387},[288,131163,1737],{"class":298},[436,131165,131166,131174],{},[439,131167,131168],{},[442,131169,131170,131172],{},[445,131171,127116],{"align":23909},[445,131173,27662],{"align":23909},[483,131175,131176,131183,131190],{},[442,131177,131178,131180],{},[488,131179,23909],{"align":23909},[488,131181,131182],{"align":23909},"不允许左侧有浮动元素（清除左侧浮动的影响）",[442,131184,131185,131187],{},[488,131186,72695],{"align":23909},[488,131188,131189],{"align":23909},"不允许右侧有浮动元素（清除右侧浮动的影响）",[442,131191,131192,131195],{},[488,131193,131194],{"align":23909},"both",[488,131196,131197],{"align":23909},"同时清除左右侧浮动的影响",[19,131199,131200],{},"法一",[19,131202,131203],{},"额外标签法也称为隔墙法",[19,131205,131206],{},"使用方式：",[19,131208,131209],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[280,131211,131212],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,131213,131214,131220,131230,131234,131240,131250],{"__ignoreMap":205},[288,131215,131216,131218],{"class":290,"line":291},[288,131217,131125],{"class":2135},[288,131219,15745],{"class":298},[288,131221,131222,131224,131226,131228],{"class":290,"line":206},[288,131223,131132],{"class":347},[288,131225,51610],{"class":298},[288,131227,23909],{"class":347},[288,131229,1463],{"class":298},[288,131231,131232],{"class":290,"line":1352},[288,131233,1737],{"class":298},[288,131235,131236,131238],{"class":290,"line":1367},[288,131237,131147],{"class":2135},[288,131239,15745],{"class":298},[288,131241,131242,131244,131246,131248],{"class":290,"line":1373},[288,131243,131132],{"class":347},[288,131245,51610],{"class":298},[288,131247,72695],{"class":347},[288,131249,1463],{"class":298},[288,131251,131252],{"class":290,"line":1387},[288,131253,1737],{"class":298},[19,131255,131256],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131258,131259],{},"优点： 通俗易懂，书写方便",[19,131261,131262],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131264,131265],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131267,131268],{},"法二",[19,131270,131271],{},"父级添加overflow属性",[280,131273,131274],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,131275,131276,131282,131292,131296,131302,131312],{"__ignoreMap":205},[288,131277,131278,131280],{"class":290,"line":291},[288,131279,131125],{"class":2135},[288,131281,15745],{"class":298},[288,131283,131284,131286,131288,131290],{"class":290,"line":206},[288,131285,131132],{"class":347},[288,131287,51610],{"class":298},[288,131289,23909],{"class":347},[288,131291,1463],{"class":298},[288,131293,131294],{"class":290,"line":1352},[288,131295,1737],{"class":298},[288,131297,131298,131300],{"class":290,"line":1367},[288,131299,131147],{"class":2135},[288,131301,15745],{"class":298},[288,131303,131304,131306,131308,131310],{"class":290,"line":1373},[288,131305,131132],{"class":347},[288,131307,51610],{"class":298},[288,131309,72695],{"class":347},[288,131311,1463],{"class":298},[288,131313,131314],{"class":290,"line":1387},[288,131315,1737],{"class":298},[19,131317,131318],{},"overflow: hidden;",[19,131320,131321],{},"优点：代码简洁",[19,131323,131324],{},"缺点：无法显示溢出的部分",[19,131326,131327],{},"注意：是给父元素添加代码",[19,131329,131330],{},"法三",[19,131332,131333],{},"父级添加after伪元素",[19,131335,131336,131339],{},[131337,131338],"after",{}," 方式是额外标签法的升级版",[19,131341,131342],{},"使用的时候复制就可以",[280,131344,131345],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,131346,131347,131353,131363,131367,131373,131383],{"__ignoreMap":205},[288,131348,131349,131351],{"class":290,"line":291},[288,131350,131125],{"class":2135},[288,131352,15745],{"class":298},[288,131354,131355,131357,131359,131361],{"class":290,"line":206},[288,131356,131132],{"class":347},[288,131358,51610],{"class":298},[288,131360,23909],{"class":347},[288,131362,1463],{"class":298},[288,131364,131365],{"class":290,"line":1352},[288,131366,1737],{"class":298},[288,131368,131369,131371],{"class":290,"line":1367},[288,131370,131147],{"class":2135},[288,131372,15745],{"class":298},[288,131374,131375,131377,131379,131381],{"class":290,"line":1373},[288,131376,131132],{"class":347},[288,131378,51610],{"class":298},[288,131380,72695],{"class":347},[288,131382,1463],{"class":298},[288,131384,131385],{"class":290,"line":1387},[288,131386,1737],{"class":298},[19,131388,131389],{},"优点：没有增加标签，结构更简单",[19,131391,131392],{},"缺点：照顾低版本浏览器",[19,131394,131395],{},"代表网站： 百度、淘宝网、网易等",[19,131397,131398],{},"法四",[19,131400,131401],{},"父级添加双伪元素",[280,131403,131404],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,131405,131406,131412,131422,131426,131432,131442],{"__ignoreMap":205},[288,131407,131408,131410],{"class":290,"line":291},[288,131409,131125],{"class":2135},[288,131411,15745],{"class":298},[288,131413,131414,131416,131418,131420],{"class":290,"line":206},[288,131415,131132],{"class":347},[288,131417,51610],{"class":298},[288,131419,23909],{"class":347},[288,131421,1463],{"class":298},[288,131423,131424],{"class":290,"line":1352},[288,131425,1737],{"class":298},[288,131427,131428,131430],{"class":290,"line":1367},[288,131429,131147],{"class":2135},[288,131431,15745],{"class":298},[288,131433,131434,131436,131438,131440],{"class":290,"line":1373},[288,131435,131132],{"class":347},[288,131437,51610],{"class":298},[288,131439,72695],{"class":347},[288,131441,1463],{"class":298},[288,131443,131444],{"class":290,"line":1387},[288,131445,1737],{"class":298},[19,131447,131448],{},"优点：代码更简洁",[19,131450,131392],{},[19,131452,131453],{},"代表网站：小米、腾讯等",[14,131455,131457],{"id":131456},"_93-ps切图","9.3 PS切图",[260,131459,131461],{"id":131460},"_931-常见图片格式","9.3.1 常见图片格式",[436,131463,131464,131474],{},[439,131465,131466],{},[442,131467,131468,131471],{},[445,131469,131470],{"align":23909},"jpg图像格式",[445,131472,131473],{"align":23909},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[483,131475,131476,131484,131492],{},[442,131477,131478,131481],{},[488,131479,131480],{"align":23909},"gif图像格式",[488,131482,131483],{"align":23909},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[442,131485,131486,131489],{},[488,131487,131488],{"align":23909},"png图像格式",[488,131490,131491],{"align":23909},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[442,131493,131494,131497],{},[488,131495,131496],{"align":23909},"PSD图像格式",[488,131498,131499],{"align":23909},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[260,131501,131503],{"id":131502},"_932-图层切图","9.3.2 图层切图",[19,131505,131506],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131508,131509],{},"按住shift选中两个图层->图层菜单->合并图层",[260,131511,131513],{"id":131512},"_933-切片切图","9.3.3 切片切图",[1304,131515,131516,131519],{},[246,131517,131518],{},"利用切片工具手动划出",[246,131520,131521],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[260,131523,131525],{"id":131524},"_934-切图步骤","9.3.4 切图步骤",[19,131527,131528],{},"用切片工具选中：",[200,131530],{"style":202,"src":131531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131533,131534],{},"文件 -> 导出",[200,131536],{"style":202,"src":131537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5299,131539,131540],{},"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":205,"searchDepth":206,"depth":206,"links":131542},[131543,131552,131556],{"id":129979,"depth":206,"text":129980,"children":131544},[131545,131546,131547,131548,131549,131550,131551],{"id":130004,"depth":1352,"text":130005},{"id":130295,"depth":1352,"text":130296},{"id":130424,"depth":1352,"text":130425},{"id":130624,"depth":1352,"text":130625},{"id":130666,"depth":1352,"text":130667},{"id":130704,"depth":1352,"text":130705},{"id":130794,"depth":1352,"text":130795},{"id":131074,"depth":206,"text":131075,"children":131553},[131554,131555],{"id":131078,"depth":1352,"text":131079},{"id":131085,"depth":1352,"text":131086},{"id":131456,"depth":206,"text":131457,"children":131557},[131558,131559,131560,131561],{"id":131460,"depth":1352,"text":131461},{"id":131502,"depth":1352,"text":131503},{"id":131512,"depth":1352,"text":131513},{"id":131524,"depth":1352,"text":131525},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129971,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131568,"title":131569,"body":131570,"description":214,"extension":215,"meta":132211,"navigation":217,"path":132212,"seo":132213,"stem":132214,"__hash__":132215},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131571,"toc":132199},[131572,131575,131579,131605,131639,131643,131647,131650,131692,131699,131709,131717,131719,131722,131725,131728,131735,131749,131753,131756,131785,131789,131792,131806,131810,131813,131841,131845,131848,131874,131878,131883,131916,131921,131949,131953,131970,132016,132021,132065,132082,132189,132197],[10,131573,131569],{"id":131574},"_10-css规范与学成在线案例",[14,131576,131578],{"id":131577},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[243,131580,131581,131587,131593,131599],{},[246,131582,131583,131586],{},[448,131584,131585],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[246,131588,131589,131592],{},[448,131590,131591],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[246,131594,131595,131598],{},[448,131596,131597],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[246,131600,131601,131604],{},[448,131602,131603],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[280,131606,131607],{"className":126652,"code":130016,"language":126654,"meta":205,"style":205},[25,131608,131609,131613,131619,131635],{"__ignoreMap":205},[288,131610,131611],{"class":290,"line":291},[288,131612,130023],{"class":357},[288,131614,131615,131617],{"class":290,"line":206},[288,131616,51784],{"class":51473},[288,131618,15745],{"class":298},[288,131620,131621,131623,131625,131627,131629,131631,131633],{"class":290,"line":1352},[288,131622,71069],{"class":347},[288,131624,51610],{"class":298},[288,131626,516],{"class":347},[288,131628,51665],{"class":294},[288,131630,51694],{"class":347},[288,131632,130044],{"class":347},[288,131634,1463],{"class":298},[288,131636,131637],{"class":290,"line":1367},[288,131638,1737],{"class":298},[14,131640,131642],{"id":131641},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[260,131644,131646],{"id":131645},"_1021-header头部制作","10.2.1 header头部制作",[200,131648],{"style":202,"src":131649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1304,131651,131652,131659,131666,131672,131679,131686],{},[246,131653,131654,131655,131658],{},"1号是版心盒子 ",[448,131656,131657],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[246,131660,131661,131662,131665],{},"版心盒子 里面包含 2号盒子 ",[448,131663,131664],{},"logo"," 图标",[246,131667,131668,131669,131671],{},"版心盒子 里面包含 3号盒子 ",[448,131670,53886],{}," 导航栏",[246,131673,131674,131675,131678],{},"版心盒子 里面包含 4号盒子 ",[448,131676,131677],{},"search"," 搜索框",[246,131680,131681,131682,131685],{},"版心盒子 里面包含 5号盒子 ",[448,131683,131684],{},"user"," 个人信息",[246,131687,131688,131689],{},"注意，要求里面的 ",[448,131690,131691],{},"4个子盒子 必须都浮动",[243,131693,131694],{},[246,131695,131696],{},[448,131697,131698],{},"导航栏注意点:",[19,131700,131701,131702,131705,131706],{},"实际开发中， ",[448,131703,131704],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[448,131707,131708],{},"用 li 包含链接(li+a)的做法",[1304,131710,131711,131714],{},[246,131712,131713],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[246,131715,131716],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131718,9198],{},[19,131720,131721],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131723,131724],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131726,131727],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[243,131729,131730],{"start":206},[246,131731,131732],{},[448,131733,131734],{},"4号盒子search的细节：",[1304,131736,131737,131740,131743],{},[246,131738,131739],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[246,131741,131742],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[246,131744,131745,131748],{},[25,131746,131747],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[260,131750,131752],{"id":131751},"_1022-banner制作","10.2.2 banner制作",[200,131754],{"style":202,"src":131755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1304,131757,131758,131765,131771,131778],{},[246,131759,131760,131761,131764],{},"1号盒子是通栏的大盒子 ",[448,131762,131763],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[246,131766,131767,131768,131770],{},"2号盒子是版心 ",[448,131769,1092],{}," ， 要水平居中对齐",[246,131772,131773,131774,131777],{},"3号盒子版心内，左对齐 ",[448,131775,131776],{},"subnav"," 侧导航栏",[246,131779,131780,131781,131784],{},"4号盒子版心内，右对齐 ",[448,131782,131783],{},"course"," 课程",[260,131786,131788],{"id":131787},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[200,131790],{"style":202,"src":131791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1304,131793,131794,131797,131800,131803],{},[246,131795,131796],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[246,131798,131799],{},"1号盒子是标题 H3 左侧浮动",[246,131801,131802],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[246,131804,131805],{},"3号盒子 右浮动 mod 修改",[260,131807,131809],{"id":131808},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[200,131811],{"style":202,"src":131812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1304,131814,131815,131821,131828,131835,131838],{},[246,131816,131817,131818,131820],{},"1号盒子为最大的盒子 ",[448,131819,53887],{}," 版心水平居中对齐",[246,131822,131823,131824,131827],{},"2号盒子为上面部分 ",[448,131825,131826],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[246,131829,131830,131831,131834],{},"3号盒子为底下部分 ",[448,131832,131833],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[246,131836,131837],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[246,131839,131840],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[260,131842,131844],{"id":131843},"_1025-底部模块制作","10.2.5 底部模块制作",[200,131846],{"style":202,"src":131847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1304,131849,131850,131857,131860,131867],{},[246,131851,131852,131853,131856],{},"1号盒子通栏大盒子 底部 ",[448,131854,131855],{},"footer"," 给高度 底色是白色",[246,131858,131859],{},"2号盒子版心水平居中",[246,131861,131862,131863,131866],{},"3号盒子版权 ",[448,131864,131865],{},"copyright"," 左对齐",[246,131868,131869,131870,131873],{},"4号盒子 链接组 ",[448,131871,131872],{},"links"," 右对齐",[260,131875,131877],{"id":131876},"_1026-代码模块","10.2.6 代码模块",[243,131879,131880],{},[246,131881,131882],{},"html部分",[280,131884,131886],{"className":127399,"code":131885,"language":127401,"meta":205,"style":205},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[25,131887,131888],{"__ignoreMap":205},[288,131889,131890,131892,131894,131896,131898,131901,131904,131906,131909,131912,131914],{"class":290,"line":291},[288,131891,1207],{"class":298},[288,131893,104],{"class":51473},[288,131895,61230],{"class":2135},[288,131897,344],{"class":298},[288,131899,131900],{"class":403},"\"https:\u002F\u002Fexample.com\"",[288,131902,131903],{"class":2135}," target",[288,131905,344],{"class":298},[288,131907,131908],{"class":403},"\"_blank\"",[288,131910,131911],{"class":298},">链接文字\u003C\u002F",[288,131913,104],{"class":51473},[288,131915,51480],{"class":298},[243,131917,131918],{"start":206},[246,131919,131920],{},"css部分",[280,131922,131923],{"className":127399,"code":131885,"language":127401,"meta":205,"style":205},[25,131924,131925],{"__ignoreMap":205},[288,131926,131927,131929,131931,131933,131935,131937,131939,131941,131943,131945,131947],{"class":290,"line":291},[288,131928,1207],{"class":298},[288,131930,104],{"class":51473},[288,131932,61230],{"class":2135},[288,131934,344],{"class":298},[288,131936,131900],{"class":403},[288,131938,131903],{"class":2135},[288,131940,344],{"class":298},[288,131942,131908],{"class":403},[288,131944,131911],{"class":298},[288,131946,104],{"class":51473},[288,131948,51480],{"class":298},[260,131950,131952],{"id":131951},"_1027-收获","10.2.7 收获",[243,131954,131955,131958,131961,131964,131967],{},[246,131956,131957],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[246,131959,131960],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[246,131962,131963],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[246,131965,131966],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[246,131968,131969],{},"遗忘代码",[280,131971,131973],{"className":126652,"code":131972,"language":126654,"meta":205,"style":205},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[25,131974,131975,131997,132002,132012],{"__ignoreMap":205},[288,131976,131977,131979,131981,131983,131985,131987,131989,131991,131993,131995],{"class":290,"line":291},[288,131978,51784],{"class":51473},[288,131980,12608],{"class":298},[288,131982,19],{"class":51473},[288,131984,12608],{"class":298},[288,131986,10],{"class":51473},[288,131988,12608],{"class":298},[288,131990,1304],{"class":51473},[288,131992,12608],{"class":298},[288,131994,246],{"class":51473},[288,131996,15745],{"class":298},[288,131998,131999],{"class":290,"line":206},[288,132000,132001],{"class":357},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[288,132003,132004,132006,132008,132010],{"class":290,"line":1352},[288,132005,128268],{"class":347},[288,132007,51610],{"class":298},[288,132009,61042],{"class":347},[288,132011,1463],{"class":298},[288,132013,132014],{"class":290,"line":1367},[288,132015,1737],{"class":298},[243,132017,132018],{"start":1387},[246,132019,132020],{},"html引css的程序",[280,132022,132023],{"className":126652,"code":131972,"language":126654,"meta":205,"style":205},[25,132024,132025,132047,132051,132061],{"__ignoreMap":205},[288,132026,132027,132029,132031,132033,132035,132037,132039,132041,132043,132045],{"class":290,"line":291},[288,132028,51784],{"class":51473},[288,132030,12608],{"class":298},[288,132032,19],{"class":51473},[288,132034,12608],{"class":298},[288,132036,10],{"class":51473},[288,132038,12608],{"class":298},[288,132040,1304],{"class":51473},[288,132042,12608],{"class":298},[288,132044,246],{"class":51473},[288,132046,15745],{"class":298},[288,132048,132049],{"class":290,"line":206},[288,132050,132001],{"class":357},[288,132052,132053,132055,132057,132059],{"class":290,"line":1352},[288,132054,128268],{"class":347},[288,132056,51610],{"class":298},[288,132058,61042],{"class":347},[288,132060,1463],{"class":298},[288,132062,132063],{"class":290,"line":1367},[288,132064,1737],{"class":298},[243,132066,132067,132070,132073,132076,132079],{"start":1393},[246,132068,132069],{},"浮动的盒子不会有外边距合并问题",[246,132071,132072],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[246,132074,132075],{},"ctrl+g快速定位行；shift+alt多个光标",[246,132077,132078],{},"学习上方各个模块的选择器起名方法，以后就这样用",[246,132080,132081],{},"在写选择器时尽量写全一些，例如",[280,132083,132085],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},"\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",[25,132086,132087,132092,132108,132113,132128,132133,132148,132153,132168,132173],{"__ignoreMap":205},[288,132088,132089],{"class":290,"line":291},[288,132090,132091],{"class":357},"\u002F* 静态定位（默认） *\u002F\n",[288,132093,132094,132097,132099,132101,132103,132106],{"class":290,"line":206},[288,132095,132096],{"class":2135},".static",[288,132098,79980],{"class":298},[288,132100,129012],{"class":347},[288,132102,51610],{"class":298},[288,132104,132105],{"class":347},"static",[288,132107,129582],{"class":298},[288,132109,132110],{"class":290,"line":1352},[288,132111,132112],{"class":357},"\u002F* 相对定位 *\u002F\n",[288,132114,132115,132118,132120,132122,132124,132126],{"class":290,"line":1367},[288,132116,132117],{"class":2135},".relative",[288,132119,79980],{"class":298},[288,132121,129012],{"class":347},[288,132123,51610],{"class":298},[288,132125,54937],{"class":347},[288,132127,129582],{"class":298},[288,132129,132130],{"class":290,"line":1373},[288,132131,132132],{"class":357},"\u002F* 绝对定位 *\u002F\n",[288,132134,132135,132138,132140,132142,132144,132146],{"class":290,"line":1387},[288,132136,132137],{"class":2135},".absolute",[288,132139,79980],{"class":298},[288,132141,129012],{"class":347},[288,132143,51610],{"class":298},[288,132145,55004],{"class":347},[288,132147,129582],{"class":298},[288,132149,132150],{"class":290,"line":1393},[288,132151,132152],{"class":357},"\u002F* 固定定位 *\u002F\n",[288,132154,132155,132158,132160,132162,132164,132166],{"class":290,"line":1484},[288,132156,132157],{"class":2135},".fixed",[288,132159,79980],{"class":298},[288,132161,129012],{"class":347},[288,132163,51610],{"class":298},[288,132165,86406],{"class":347},[288,132167,129582],{"class":298},[288,132169,132170],{"class":290,"line":1490},[288,132171,132172],{"class":357},"\u002F* 粘性定位 *\u002F\n",[288,132174,132175,132178,132180,132182,132184,132187],{"class":290,"line":1502},[288,132176,132177],{"class":2135},".sticky",[288,132179,79980],{"class":298},[288,132181,129012],{"class":347},[288,132183,51610],{"class":298},[288,132185,132186],{"class":347},"sticky",[288,132188,129582],{"class":298},[243,132190,132191,132194],{"start":1789},[246,132192,132193],{},"一定要用好注释",[246,132195,132196],{},"浮动的盒子不会有外边距合并的问题",[5299,132198,131540],{},{"title":205,"searchDepth":206,"depth":206,"links":132200},[132201,132202],{"id":131577,"depth":206,"text":131578},{"id":131641,"depth":206,"text":131642,"children":132203},[132204,132205,132206,132207,132208,132209,132210],{"id":131645,"depth":1352,"text":131646},{"id":131751,"depth":1352,"text":131752},{"id":131787,"depth":1352,"text":131788},{"id":131808,"depth":1352,"text":131809},{"id":131843,"depth":1352,"text":131844},{"id":131876,"depth":1352,"text":131877},{"id":131951,"depth":1352,"text":131952},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131569,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132217,"title":132218,"body":132219,"description":214,"extension":215,"meta":133705,"navigation":217,"path":133706,"seo":133707,"stem":133708,"__hash__":133709},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132220,"toc":133697},[132221,132224,132228,132232,132243,132247,132264,132308,132341,132344,132361,132364,132367,132411,132415,132419,132422,132425,132429,132432,132443,132506,132547,132550,132565,132619,132627,132630,132641,132695,132721,132724,132737,132791,132823,132877,132900,132954,132957,132960,132967,133021,133042,133096,133099,133102,133187,133195,133252,133275,133279,133282,133300,133304,133323,133377,133415,133419,133422,133425,133447,133451,133459,133462,133467,133478,133481,133485,133499,133543,133546,133550,133553,133558,133584,133589,133666,133669,133673,133676,133679,133682,133685,133688,133691,133694],[10,132222,132218],{"id":132223},"_11-传统布局与定位体系",[14,132225,132227],{"id":132226},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[260,132229,132231],{"id":132230},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1304,132233,132234,132237,132240],{},[246,132235,132236],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[246,132238,132239],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[246,132241,132242],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[260,132244,132246],{"id":132245},"_1112-浮动","11.1.2 浮动",[1304,132248,132249,132252,132255,132258,132261],{},[246,132250,132251],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[246,132253,132254],{},"浮动可以改变元素标签默认的排列方式",[246,132256,132257],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[246,132259,132260],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[246,132262,132263],{},"在使用行内块转换时盒子之间是有空隙的",[280,132265,132266],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,132267,132268,132274,132284,132288,132294,132304],{"__ignoreMap":205},[288,132269,132270,132272],{"class":290,"line":291},[288,132271,131125],{"class":2135},[288,132273,15745],{"class":298},[288,132275,132276,132278,132280,132282],{"class":290,"line":206},[288,132277,131132],{"class":347},[288,132279,51610],{"class":298},[288,132281,23909],{"class":347},[288,132283,1463],{"class":298},[288,132285,132286],{"class":290,"line":1352},[288,132287,1737],{"class":298},[288,132289,132290,132292],{"class":290,"line":1367},[288,132291,131147],{"class":2135},[288,132293,15745],{"class":298},[288,132295,132296,132298,132300,132302],{"class":290,"line":1373},[288,132297,131132],{"class":347},[288,132299,51610],{"class":298},[288,132301,72695],{"class":347},[288,132303,1463],{"class":298},[288,132305,132306],{"class":290,"line":1387},[288,132307,1737],{"class":298},[436,132309,132310,132318],{},[439,132311,132312],{},[442,132313,132314,132316],{},[445,132315,127116],{"align":23909},[445,132317,27662],{"align":23909},[483,132319,132320,132327,132334],{},[442,132321,132322,132324],{},[488,132323,54910],{"align":23909},[488,132325,132326],{"align":23909},"元素不浮动（默认值）",[442,132328,132329,132331],{},[488,132330,23909],{"align":23909},[488,132332,132333],{"align":23909},"元素向左浮动",[442,132335,132336,132338],{},[488,132337,72695],{"align":23909},[488,132339,132340],{"align":23909},"元素向右浮动",[19,132342,132343],{},"浮动重点：",[1304,132345,132346,132349,132352,132355,132358],{},[246,132347,132348],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[246,132350,132351],{},"浮动的元素会一行内显示并且元素顶部对齐",[246,132353,132354],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[246,132356,132357],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[246,132359,132360],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132362,132363],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132365,132366],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[280,132368,132369],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,132370,132371,132377,132387,132391,132397,132407],{"__ignoreMap":205},[288,132372,132373,132375],{"class":290,"line":291},[288,132374,131125],{"class":2135},[288,132376,15745],{"class":298},[288,132378,132379,132381,132383,132385],{"class":290,"line":206},[288,132380,131132],{"class":347},[288,132382,51610],{"class":298},[288,132384,23909],{"class":347},[288,132386,1463],{"class":298},[288,132388,132389],{"class":290,"line":1352},[288,132390,1737],{"class":298},[288,132392,132393,132395],{"class":290,"line":1367},[288,132394,131147],{"class":2135},[288,132396,15745],{"class":298},[288,132398,132399,132401,132403,132405],{"class":290,"line":1373},[288,132400,131132],{"class":347},[288,132402,51610],{"class":298},[288,132404,72695],{"class":347},[288,132406,1463],{"class":298},[288,132408,132409],{"class":290,"line":1387},[288,132410,1737],{"class":298},[260,132412,132414],{"id":132413},"_1113-定位","11.1.3 定位",[22171,132416,132418],{"id":132417},"_11131-使用场景","11.1.3.1 使用场景",[19,132420,132421],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132423,132424],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22171,132426,132428],{"id":132427},"_11132-定位组成","11.1.3.2 定位组成",[19,132430,132431],{},"定位 = 定位模式 + 边偏移",[243,132433,132434],{},[246,132435,132436,132439,132440],{},[448,132437,132438],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[448,132441,132442],{},"定位模式",[280,132444,132446],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[25,132447,132448,132454,132468,132485,132502],{"__ignoreMap":205},[288,132449,132450,132452],{"class":290,"line":291},[288,132451,130500],{"class":2135},[288,132453,15745],{"class":298},[288,132455,132456,132459,132461,132463,132465],{"class":290,"line":206},[288,132457,132458],{"class":347},"  position",[288,132460,51610],{"class":298},[288,132462,54937],{"class":347},[288,132464,130515],{"class":298},[288,132466,132467],{"class":357},"\u002F* 定位模式 *\u002F\n",[288,132469,132470,132473,132475,132477,132479,132482],{"class":290,"line":1352},[288,132471,132472],{"class":347},"  top",[288,132474,51610],{"class":298},[288,132476,743],{"class":347},[288,132478,51665],{"class":294},[288,132480,132481],{"class":298},";           ",[288,132483,132484],{"class":357},"\u002F* 边偏移：上 *\u002F\n",[288,132486,132487,132490,132492,132494,132496,132499],{"class":290,"line":1367},[288,132488,132489],{"class":347},"  left",[288,132491,51610],{"class":298},[288,132493,997],{"class":347},[288,132495,51665],{"class":294},[288,132497,132498],{"class":298},";          ",[288,132500,132501],{"class":357},"\u002F* 边偏移：左 *\u002F\n",[288,132503,132504],{"class":290,"line":1373},[288,132505,1737],{"class":298},[436,132507,132508,132517],{},[439,132509,132510],{},[442,132511,132512,132514],{},[445,132513,451],{"align":23909},[445,132515,132516],{"align":23909},"语义",[483,132518,132519,132526,132533,132540],{},[442,132520,132521,132523],{},[488,132522,132105],{"align":23909},[488,132524,132525],{"align":23909},"静态定位",[442,132527,132528,132530],{},[488,132529,54937],{"align":23909},[488,132531,132532],{"align":23909},"相对定位",[442,132534,132535,132537],{},[488,132536,55004],{"align":23909},[488,132538,132539],{"align":23909},"绝对定位",[442,132541,132542,132544],{},[488,132543,86406],{"align":23909},[488,132545,132546],{"align":23909},"固定定位",[19,132548,132549],{},"（1）静态定位：",[1304,132551,132552,132563],{},[246,132553,132554,132555,132558,132559,132562],{},"静态定位是元素的 ",[448,132556,132557],{},"默认定位方式"," ， ",[448,132560,132561],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[246,132564,5354],{},[280,132566,132567],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,132568,132569,132575,132587,132601,132615],{"__ignoreMap":205},[288,132570,132571,132573],{"class":290,"line":291},[288,132572,130500],{"class":2135},[288,132574,15745],{"class":298},[288,132576,132577,132579,132581,132583,132585],{"class":290,"line":206},[288,132578,132458],{"class":347},[288,132580,51610],{"class":298},[288,132582,54937],{"class":347},[288,132584,130515],{"class":298},[288,132586,132467],{"class":357},[288,132588,132589,132591,132593,132595,132597,132599],{"class":290,"line":1352},[288,132590,132472],{"class":347},[288,132592,51610],{"class":298},[288,132594,743],{"class":347},[288,132596,51665],{"class":294},[288,132598,132481],{"class":298},[288,132600,132484],{"class":357},[288,132602,132603,132605,132607,132609,132611,132613],{"class":290,"line":1367},[288,132604,132489],{"class":347},[288,132606,51610],{"class":298},[288,132608,997],{"class":347},[288,132610,51665],{"class":294},[288,132612,132498],{"class":298},[288,132614,132501],{"class":357},[288,132616,132617],{"class":290,"line":1373},[288,132618,1737],{"class":298},[1304,132620,132621,132624],{},[246,132622,132623],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[246,132625,132626],{},"静态定位在布局时我们几乎不用的",[19,132628,132629],{},"（2）相对定位",[1304,132631,132632,132639],{},[246,132633,132634,132635,132638],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[448,132636,132637],{},"原来的位置"," 来说的（自恋型）",[246,132640,5354],{},[280,132642,132643],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,132644,132645,132651,132663,132677,132691],{"__ignoreMap":205},[288,132646,132647,132649],{"class":290,"line":291},[288,132648,130500],{"class":2135},[288,132650,15745],{"class":298},[288,132652,132653,132655,132657,132659,132661],{"class":290,"line":206},[288,132654,132458],{"class":347},[288,132656,51610],{"class":298},[288,132658,54937],{"class":347},[288,132660,130515],{"class":298},[288,132662,132467],{"class":357},[288,132664,132665,132667,132669,132671,132673,132675],{"class":290,"line":1352},[288,132666,132472],{"class":347},[288,132668,51610],{"class":298},[288,132670,743],{"class":347},[288,132672,51665],{"class":294},[288,132674,132481],{"class":298},[288,132676,132484],{"class":357},[288,132678,132679,132681,132683,132685,132687,132689],{"class":290,"line":1367},[288,132680,132489],{"class":347},[288,132682,51610],{"class":298},[288,132684,997],{"class":347},[288,132686,51665],{"class":294},[288,132688,132498],{"class":298},[288,132690,132501],{"class":357},[288,132692,132693],{"class":290,"line":1373},[288,132694,1737],{"class":298},[1304,132696,132697],{},[246,132698,132699,132700,132702,132703,132705,132706,132709,132710,132713,132714,132716,132717,132720],{},"相对定位的特点：",[53889,132701],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53889,132704],{},"  ② ",[448,132707,132708],{},"原来"," 在标准流的 ",[448,132711,132712],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53889,132715],{},"  ③因此， ",[448,132718,132719],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132722,132723],{},"（3）绝对定位",[1304,132725,132726,132735],{},[246,132727,132728,132730,132731,132734],{},[448,132729,132539],{}," 是元素在移动位置的时候，是相对于它 ",[448,132732,132733],{},"祖先元素"," 来说的（拼爹型）",[246,132736,5354],{},[280,132738,132739],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,132740,132741,132747,132759,132773,132787],{"__ignoreMap":205},[288,132742,132743,132745],{"class":290,"line":291},[288,132744,130500],{"class":2135},[288,132746,15745],{"class":298},[288,132748,132749,132751,132753,132755,132757],{"class":290,"line":206},[288,132750,132458],{"class":347},[288,132752,51610],{"class":298},[288,132754,54937],{"class":347},[288,132756,130515],{"class":298},[288,132758,132467],{"class":357},[288,132760,132761,132763,132765,132767,132769,132771],{"class":290,"line":1352},[288,132762,132472],{"class":347},[288,132764,51610],{"class":298},[288,132766,743],{"class":347},[288,132768,51665],{"class":294},[288,132770,132481],{"class":298},[288,132772,132484],{"class":357},[288,132774,132775,132777,132779,132781,132783,132785],{"class":290,"line":1367},[288,132776,132489],{"class":347},[288,132778,51610],{"class":298},[288,132780,997],{"class":347},[288,132782,51665],{"class":294},[288,132784,132498],{"class":298},[288,132786,132501],{"class":357},[288,132788,132789],{"class":290,"line":1373},[288,132790,1737],{"class":298},[1304,132792,132793,132808,132817,132820],{},[246,132794,132795,132796,132798,132799,132801,132802,132804,132805,132807],{},"绝对定位的特点：",[53889,132797],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53889,132800],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53889,132803],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53889,132806],{},"  (4)固定定位",[246,132809,132810,132812,132813,132816],{},[448,132811,132546],{}," 是元素 ",[448,132814,132815],{},"固定于浏览器可视区的位置"," 。（认死理型）",[246,132818,132819],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[246,132821,132822],{},"语法:",[280,132824,132825],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,132826,132827,132833,132845,132859,132873],{"__ignoreMap":205},[288,132828,132829,132831],{"class":290,"line":291},[288,132830,130500],{"class":2135},[288,132832,15745],{"class":298},[288,132834,132835,132837,132839,132841,132843],{"class":290,"line":206},[288,132836,132458],{"class":347},[288,132838,51610],{"class":298},[288,132840,54937],{"class":347},[288,132842,130515],{"class":298},[288,132844,132467],{"class":357},[288,132846,132847,132849,132851,132853,132855,132857],{"class":290,"line":1352},[288,132848,132472],{"class":347},[288,132850,51610],{"class":298},[288,132852,743],{"class":347},[288,132854,51665],{"class":294},[288,132856,132481],{"class":298},[288,132858,132484],{"class":357},[288,132860,132861,132863,132865,132867,132869,132871],{"class":290,"line":1367},[288,132862,132489],{"class":347},[288,132864,51610],{"class":298},[288,132866,997],{"class":347},[288,132868,51665],{"class":294},[288,132870,132498],{"class":298},[288,132872,132501],{"class":357},[288,132874,132875],{"class":290,"line":1373},[288,132876,1737],{"class":298},[1304,132878,132879,132888],{},[246,132880,132881,132882,132884,132885,132887],{},"特点:",[53889,132883],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53889,132886],{},"  ②固定定位不再占有原先的位置,完全脱标",[246,132889,132890,132891,132893,132894,132896,132897,132899],{},"固定在版心位置的方法:",[53889,132892],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53889,132895],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53889,132898],{},"  实例：",[280,132901,132902],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,132903,132904,132910,132922,132936,132950],{"__ignoreMap":205},[288,132905,132906,132908],{"class":290,"line":291},[288,132907,130500],{"class":2135},[288,132909,15745],{"class":298},[288,132911,132912,132914,132916,132918,132920],{"class":290,"line":206},[288,132913,132458],{"class":347},[288,132915,51610],{"class":298},[288,132917,54937],{"class":347},[288,132919,130515],{"class":298},[288,132921,132467],{"class":357},[288,132923,132924,132926,132928,132930,132932,132934],{"class":290,"line":1352},[288,132925,132472],{"class":347},[288,132927,51610],{"class":298},[288,132929,743],{"class":347},[288,132931,51665],{"class":294},[288,132933,132481],{"class":298},[288,132935,132484],{"class":357},[288,132937,132938,132940,132942,132944,132946,132948],{"class":290,"line":1367},[288,132939,132489],{"class":347},[288,132941,51610],{"class":298},[288,132943,997],{"class":347},[288,132945,51665],{"class":294},[288,132947,132498],{"class":298},[288,132949,132501],{"class":357},[288,132951,132952],{"class":290,"line":1373},[288,132953,1737],{"class":298},[200,132955],{"style":202,"src":132956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132958,132959],{},"(5)粘性定位",[1304,132961,132962,132965],{},[246,132963,132964],{},"粘性定位可以被认为是相对定位和固定定位的混合",[246,132966,5354],{},[280,132968,132969],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,132970,132971,132977,132989,133003,133017],{"__ignoreMap":205},[288,132972,132973,132975],{"class":290,"line":291},[288,132974,130500],{"class":2135},[288,132976,15745],{"class":298},[288,132978,132979,132981,132983,132985,132987],{"class":290,"line":206},[288,132980,132458],{"class":347},[288,132982,51610],{"class":298},[288,132984,54937],{"class":347},[288,132986,130515],{"class":298},[288,132988,132467],{"class":357},[288,132990,132991,132993,132995,132997,132999,133001],{"class":290,"line":1352},[288,132992,132472],{"class":347},[288,132994,51610],{"class":298},[288,132996,743],{"class":347},[288,132998,51665],{"class":294},[288,133000,132481],{"class":298},[288,133002,132484],{"class":357},[288,133004,133005,133007,133009,133011,133013,133015],{"class":290,"line":1367},[288,133006,132489],{"class":347},[288,133008,51610],{"class":298},[288,133010,997],{"class":347},[288,133012,51665],{"class":294},[288,133014,132498],{"class":298},[288,133016,132501],{"class":357},[288,133018,133019],{"class":290,"line":1373},[288,133020,1737],{"class":298},[1304,133022,133023],{},[246,133024,133025,133026,133028,133029,133031,133032,133034,133035,133038,133039,133041],{},"粘性定位的特点：",[53889,133027],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53889,133030],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53889,133033],{},"  ③必须添加 top 、left、right、bottom ",[448,133036,133037],{},"其中一个"," 才有效",[53889,133040],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[280,133043,133044],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,133045,133046,133052,133064,133078,133092],{"__ignoreMap":205},[288,133047,133048,133050],{"class":290,"line":291},[288,133049,130500],{"class":2135},[288,133051,15745],{"class":298},[288,133053,133054,133056,133058,133060,133062],{"class":290,"line":206},[288,133055,132458],{"class":347},[288,133057,51610],{"class":298},[288,133059,54937],{"class":347},[288,133061,130515],{"class":298},[288,133063,132467],{"class":357},[288,133065,133066,133068,133070,133072,133074,133076],{"class":290,"line":1352},[288,133067,132472],{"class":347},[288,133069,51610],{"class":298},[288,133071,743],{"class":347},[288,133073,51665],{"class":294},[288,133075,132481],{"class":298},[288,133077,132484],{"class":357},[288,133079,133080,133082,133084,133086,133088,133090],{"class":290,"line":1367},[288,133081,132489],{"class":347},[288,133083,51610],{"class":298},[288,133085,997],{"class":347},[288,133087,51665],{"class":294},[288,133089,132498],{"class":298},[288,133091,132501],{"class":357},[288,133093,133094],{"class":290,"line":1373},[288,133095,1737],{"class":298},[200,133097],{"style":202,"src":133098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133100,133101],{},"(6)总结",[436,133103,133104,133119],{},[439,133105,133106],{},[442,133107,133108,133110,133113,133116],{},[445,133109,132442],{"align":23909},[445,133111,133112],{"align":23909},"是否脱标",[445,133114,133115],{"align":23909},"移动位置",[445,133117,133118],{"align":23909},"是否常用",[483,133120,133121,133134,133148,133162,133175],{},[442,133122,133123,133126,133128,133131],{},[488,133124,133125],{"align":23909},"Static 静态定位",[488,133127,104851],{"align":23909},[488,133129,133130],{"align":23909},"不能使用边偏移",[488,133132,133133],{"align":23909},"很少",[442,133135,133136,133139,133142,133145],{},[488,133137,133138],{"align":23909},"Relative 相对定位",[488,133140,133141],{"align":23909},"否(占有位置)",[488,133143,133144],{"align":23909},"相对于自身位置移动",[488,133146,133147],{"align":23909},"基本单独使用",[442,133149,133150,133153,133156,133159],{},[488,133151,133152],{"align":23909},"Absolute 绝对定位",[488,133154,133155],{"align":23909},"是(不占有位置)",[488,133157,133158],{"align":23909},"带有定位的父级",[488,133160,133161],{"align":23909},"要和定位父级元素搭配使用",[442,133163,133164,133167,133169,133172],{},[488,133165,133166],{"align":23909},"Fixed 固定定位",[488,133168,133155],{"align":23909},[488,133170,133171],{"align":23909},"浏览器可视区",[488,133173,133174],{"align":23909},"单独使用,不需要父级",[442,133176,133177,133180,133182,133184],{},[488,133178,133179],{"align":23909},"Sticky 粘性定位",[488,133181,133141],{"align":23909},[488,133183,133171],{"align":23909},[488,133185,133186],{"align":23909},"当前阶段少",[243,133188,133189],{"start":206},[246,133190,133191,133194],{},[448,133192,133193],{},"边偏移"," 则决定了该元素的最终位置",[436,133196,133197,133208],{},[439,133198,133199],{},[442,133200,133201,133204,133206],{},[445,133202,133203],{"align":23909},"边偏移属性",[445,133205,27665],{"align":23909},[445,133207,27662],{"align":23909},[483,133209,133210,133221,133232,133242],{},[442,133211,133212,133215,133218],{},[488,133213,133214],{"align":23909},"top",[488,133216,133217],{"align":23909},"top: 80px;",[488,133219,133220],{"align":23909},"顶端偏移量，定义元素相对于父元素上边线的距离",[442,133222,133223,133226,133229],{},[488,133224,133225],{"align":23909},"bottom",[488,133227,133228],{"align":23909},"bottom: 80px ;",[488,133230,133231],{"align":23909},"底部偏移量，定义元素相对于其父元素下边线的距离",[442,133233,133234,133236,133239],{},[488,133235,23909],{"align":23909},[488,133237,133238],{"align":23909},"left: 80px ;",[488,133240,133241],{"align":23909},"左侧偏移量，定义元素相对于其父元素左边线的距离",[442,133243,133244,133246,133249],{},[488,133245,72695],{"align":23909},[488,133247,133248],{"align":23909},"right: 80px ;",[488,133250,133251],{"align":23909},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1304,133253,133254],{},[246,133255,9198,133256,133258,133259,133261,133262,133264,133265,133268,133269,133271,133272,133274],{},[53889,133257],{},"  ① ",[448,133260,133193],{}," 需要和 ",[448,133263,132442],{}," 联合使用， ",[448,133266,133267],{},"单独使用无效"," ；",[53889,133270],{},"  ②top和bottom不要同时使用",[53889,133273],{},"  ③left和right不要同时使用",[22171,133276,133278],{"id":133277},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133280,133281],{},"子级是绝对定位的话，父级要用相对定位",[1304,133283,133284,133287,133290,133293],{},[246,133285,133286],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[246,133288,133289],{},"父盒子需要加定位限制子盒子在父盒子内显示",[246,133291,133292],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[246,133294,133295,133296,133299],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[448,133297,133298],{},"子绝父绝"," 也会遇到",[22171,133301,133303],{"id":133302},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1304,133305,133306,133321],{},[246,133307,133308,133309,133312,133313,133316,133317,133320],{},"在使用 ",[448,133310,133311],{},"定位"," 布局时，可能会 ",[448,133314,133315],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[448,133318,133319],{},"z-index"," 来控制盒子的前后次序 (z轴)",[246,133322,5354],{},[280,133324,133325],{"className":126652,"code":132445,"language":126654,"meta":205,"style":205},[25,133326,133327,133333,133345,133359,133373],{"__ignoreMap":205},[288,133328,133329,133331],{"class":290,"line":291},[288,133330,130500],{"class":2135},[288,133332,15745],{"class":298},[288,133334,133335,133337,133339,133341,133343],{"class":290,"line":206},[288,133336,132458],{"class":347},[288,133338,51610],{"class":298},[288,133340,54937],{"class":347},[288,133342,130515],{"class":298},[288,133344,132467],{"class":357},[288,133346,133347,133349,133351,133353,133355,133357],{"class":290,"line":1352},[288,133348,132472],{"class":347},[288,133350,51610],{"class":298},[288,133352,743],{"class":347},[288,133354,51665],{"class":294},[288,133356,132481],{"class":298},[288,133358,132484],{"class":357},[288,133360,133361,133363,133365,133367,133369,133371],{"class":290,"line":1367},[288,133362,132489],{"class":347},[288,133364,51610],{"class":298},[288,133366,997],{"class":347},[288,133368,51665],{"class":294},[288,133370,132498],{"class":298},[288,133372,132501],{"class":357},[288,133374,133375],{"class":290,"line":1373},[288,133376,1737],{"class":298},[1304,133378,133379],{},[246,133380,133381,133382,133258,133384,133386,133387,127815,133390,82712,133393,133395,133396,133398,133399,133402,133403,133268,133406,133408,133409,133412,133414],{},"z-index的特性",[53889,133383],{},[448,133385,127116],{}," ： ",[448,133388,133389],{},"正整数",[448,133391,133392],{},"负整数",[448,133394,490],{}," ，默认值是 0，数值越大，盒子越靠上；",[53889,133397],{},"  ②如果 ",[448,133400,133401],{},"属性值相同"," ，则按照书写顺序， ",[448,133404,133405],{},"后来居上",[53889,133407],{},"  ③数字后面 ",[448,133410,133411],{},"不能加单位",[53889,133413],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22171,133416,133418],{"id":133417},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133420,133421],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133423,133424],{},"方法:",[1304,133426,133427,133437],{},[246,133428,133429,133430,133433,133434],{},"left: 50%; 让 ",[448,133431,133432],{},"盒子的左侧"," 移动到 ",[448,133435,133436],{},"父级元素的水平中心位置",[246,133438,133439,133440,133443,133444],{},"margin-left: -100px; 让盒子 ",[448,133441,133442],{},"向左"," 移动 ",[448,133445,133446],{},"自身宽度的一半",[22171,133448,133450],{"id":133449},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[243,133452,133453,133456],{},[246,133454,133455],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[246,133457,133458],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133460,133461],{},"也就是说绝对定位和固定定位和浮动类似",[243,133463,133464],{"start":1352},[246,133465,133466],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1304,133468,133469,133472,133475],{},[246,133470,133471],{},"可以用inline-block 转换为行内块",[246,133473,133474],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[246,133476,133477],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133479,133480],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22171,133482,133484],{"id":133483},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[243,133486,133487,133490,133493,133496],{},[246,133488,133489],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[246,133491,133492],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[246,133494,133495],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[246,133497,133498],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[280,133500,133501],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,133502,133503,133509,133519,133523,133529,133539],{"__ignoreMap":205},[288,133504,133505,133507],{"class":290,"line":291},[288,133506,131125],{"class":2135},[288,133508,15745],{"class":298},[288,133510,133511,133513,133515,133517],{"class":290,"line":206},[288,133512,131132],{"class":347},[288,133514,51610],{"class":298},[288,133516,23909],{"class":347},[288,133518,1463],{"class":298},[288,133520,133521],{"class":290,"line":1352},[288,133522,1737],{"class":298},[288,133524,133525,133527],{"class":290,"line":1367},[288,133526,131147],{"class":2135},[288,133528,15745],{"class":298},[288,133530,133531,133533,133535,133537],{"class":290,"line":1373},[288,133532,131132],{"class":347},[288,133534,51610],{"class":298},[288,133536,72695],{"class":347},[288,133538,1463],{"class":298},[288,133540,133541],{"class":290,"line":1387},[288,133542,1737],{"class":298},[200,133544],{"style":202,"src":133545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22171,133547,133549],{"id":133548},"_11138-轮播图","11.1.3.8 轮播图",[200,133551],{"style":202,"src":133552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[243,133554,133555],{},[246,133556,133557],{},"制作顺序:",[1304,133559,133560,133563,133566,133575],{},[246,133561,133562],{},"大盒子我们类名为： tb-promo 淘宝广告",[246,133564,133565],{},"里面先放一张图片",[246,133567,133568,133569,133571,133572,133574],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53889,133570],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53889,133573],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[246,133576,133577,133578,133580,133581,133583],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53889,133579],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53889,133582],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[243,133585,133586],{"start":206},[246,133587,133588],{},"代码模块",[280,133590,133592],{"className":126652,"code":133591,"language":126654,"meta":205,"style":205},"\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",[25,133593,133594,133599,133606,133616,133626,133636,133640,133645,133652,133662],{"__ignoreMap":205},[288,133595,133596],{"class":290,"line":291},[288,133597,133598],{"class":357},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[288,133600,133601,133604],{"class":290,"line":206},[288,133602,133603],{"class":2135},".son",[288,133605,15745],{"class":298},[288,133607,133608,133610,133612,133614],{"class":290,"line":1352},[288,133609,132458],{"class":347},[288,133611,51610],{"class":298},[288,133613,55004],{"class":347},[288,133615,1463],{"class":298},[288,133617,133618,133620,133622,133624],{"class":290,"line":1367},[288,133619,132472],{"class":347},[288,133621,51610],{"class":298},[288,133623,490],{"class":347},[288,133625,1463],{"class":298},[288,133627,133628,133630,133632,133634],{"class":290,"line":1373},[288,133629,132489],{"class":347},[288,133631,51610],{"class":298},[288,133633,490],{"class":347},[288,133635,1463],{"class":298},[288,133637,133638],{"class":290,"line":1387},[288,133639,1737],{"class":298},[288,133641,133642],{"class":290,"line":1393},[288,133643,133644],{"class":357},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[288,133646,133647,133650],{"class":290,"line":1484},[288,133648,133649],{"class":2135},".father",[288,133651,15745],{"class":298},[288,133653,133654,133656,133658,133660],{"class":290,"line":1490},[288,133655,132458],{"class":347},[288,133657,51610],{"class":298},[288,133659,54937],{"class":347},[288,133661,1463],{"class":298},[288,133663,133664],{"class":290,"line":1502},[288,133665,1737],{"class":298},[19,133667,133668],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[260,133670,133672],{"id":133671},"_1114-定位数值的移动","11.1.4 定位数值的移动",[200,133674],{"style":202,"src":133675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133677,133678],{},"✨ 黄金口诀：",[19,133680,133681],{},"\"TOP正下负上，LEFT正右负左\"",[19,133683,133684],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133686,133687],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133689,133690],{},"✨ 简单记：",[19,133692,133693],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5299,133695,133696],{},"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":205,"searchDepth":206,"depth":206,"links":133698},[133699],{"id":132226,"depth":206,"text":132227,"children":133700},[133701,133702,133703,133704],{"id":132230,"depth":1352,"text":132231},{"id":132245,"depth":1352,"text":132246},{"id":132413,"depth":1352,"text":132414},{"id":133671,"depth":1352,"text":133672},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132218,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133711,"title":133712,"body":133713,"description":214,"extension":215,"meta":135136,"navigation":217,"path":135137,"seo":135138,"stem":135139,"__hash__":135140},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133714,"toc":135115},[133715,133718,133722,133730,133734,133739,133747,133759,133763,133768,133776,133787,133791,133796,133837,133845,133849,133852,133855,133858,133952,133955,134049,134052,134146,134149,134152,134187,134190,134193,134223,134226,134229,134232,134235,134238,134241,134244,134314,134317,134321,134325,134366,134370,134376,134379,134382,134386,134389,134392,134395,134476,134479,134482,134486,134490,134493,134496,134499,134502,134505,134511,134520,134524,134543,134547,134557,134560,134563,134566,134569,134572,134575,134578,134581,134590,134594,134603,134606,134611,134664,134669,134835,134838,134841,134846,134849,134852,134855,134858,134863,135011,135014,135017,135022,135025,135030,135064,135067,135070,135074,135077,135084,135087,135090,135093,135096,135099,135102,135105,135109,135112],[10,133716,133712],{"id":133717},"_12-显示隐藏与图形资源",[14,133719,133721],{"id":133720},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1304,133723,133724,133727],{},[246,133725,133726],{},"目的:让一个元素在页面中消失或者显示出来",[246,133728,133729],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[260,133731,133733],{"id":133732},"_1211-display-显示","12.1.1 display 显示",[243,133735,133736],{},[246,133737,133738],{},"display 设置或检索对象是否及如何显示",[1304,133740,133741,133744],{},[246,133742,133743],{},"display: none;隐藏对象",[246,133745,133746],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[243,133748,133749,133756],{"start":206},[246,133750,133751,133752,133755],{},"特点： display 隐藏元素后， ",[448,133753,133754],{},"不再占"," 有原来的位置",[246,133757,133758],{},"在js中使用非常的广泛",[260,133760,133762],{"id":133761},"_1212-visibility可见性","12.1.2 visibility可见性",[243,133764,133765],{},[246,133766,133767],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1304,133769,133770,133773],{},[246,133771,133772],{},"visibility： visible；元素可见",[246,133774,133775],{},"visibility：hidden；元素隐藏",[243,133777,133778,133781,133784],{"start":206},[246,133779,133780],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[246,133782,133783],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[246,133785,133786],{},"隐藏后继续占有原有位置",[260,133788,133790],{"id":133789},"_1213-overflow溢出","12.1.3 overflow溢出",[1304,133792,133793],{},[246,133794,133795],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[436,133797,133798,133806],{},[439,133799,133800],{},[442,133801,133802,133804],{},[445,133803,127116],{"align":23909},[445,133805,27662],{"align":23909},[483,133807,133808,133816,133823,133830],{},[442,133809,133810,133813],{},[488,133811,133812],{"align":23909},"visible",[488,133814,133815],{"align":23909},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[442,133817,133818,133820],{},[488,133819,61887],{"align":23909},[488,133821,133822],{"align":23909},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[442,133824,133825,133827],{},[488,133826,129072],{"align":23909},[488,133828,133829],{"align":23909},"不管超出内容否，总是显示滚动条",[442,133831,133832,133834],{},[488,133833,72836],{"align":23909},[488,133835,133836],{"align":23909},"超出自动显示滚动条，不超出不显示滚动条",[1304,133838,133839,133842],{},[246,133840,133841],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[246,133843,133844],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[260,133846,133848],{"id":133847},"_1214-案例收获","12.1.4 案例收获",[200,133850],{"style":202,"src":133851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133853,133854],{},"问题：没做出来动态效果，使用hover没实现",[19,133856,133857],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[280,133859,133860],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,133861,133862,133866,133880,133884,133898,133902,133916,133920,133934,133938],{"__ignoreMap":205},[288,133863,133864],{"class":290,"line":291},[288,133865,132091],{"class":357},[288,133867,133868,133870,133872,133874,133876,133878],{"class":290,"line":206},[288,133869,132096],{"class":2135},[288,133871,79980],{"class":298},[288,133873,129012],{"class":347},[288,133875,51610],{"class":298},[288,133877,132105],{"class":347},[288,133879,129582],{"class":298},[288,133881,133882],{"class":290,"line":1352},[288,133883,132112],{"class":357},[288,133885,133886,133888,133890,133892,133894,133896],{"class":290,"line":1367},[288,133887,132117],{"class":2135},[288,133889,79980],{"class":298},[288,133891,129012],{"class":347},[288,133893,51610],{"class":298},[288,133895,54937],{"class":347},[288,133897,129582],{"class":298},[288,133899,133900],{"class":290,"line":1373},[288,133901,132132],{"class":357},[288,133903,133904,133906,133908,133910,133912,133914],{"class":290,"line":1387},[288,133905,132137],{"class":2135},[288,133907,79980],{"class":298},[288,133909,129012],{"class":347},[288,133911,51610],{"class":298},[288,133913,55004],{"class":347},[288,133915,129582],{"class":298},[288,133917,133918],{"class":290,"line":1393},[288,133919,132152],{"class":357},[288,133921,133922,133924,133926,133928,133930,133932],{"class":290,"line":1484},[288,133923,132157],{"class":2135},[288,133925,79980],{"class":298},[288,133927,129012],{"class":347},[288,133929,51610],{"class":298},[288,133931,86406],{"class":347},[288,133933,129582],{"class":298},[288,133935,133936],{"class":290,"line":1490},[288,133937,132172],{"class":357},[288,133939,133940,133942,133944,133946,133948,133950],{"class":290,"line":1502},[288,133941,132177],{"class":2135},[288,133943,79980],{"class":298},[288,133945,129012],{"class":347},[288,133947,51610],{"class":298},[288,133949,132186],{"class":347},[288,133951,129582],{"class":298},[19,133953,133954],{},"完整代码：",[280,133956,133957],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,133958,133959,133963,133977,133981,133995,133999,134013,134017,134031,134035],{"__ignoreMap":205},[288,133960,133961],{"class":290,"line":291},[288,133962,132091],{"class":357},[288,133964,133965,133967,133969,133971,133973,133975],{"class":290,"line":206},[288,133966,132096],{"class":2135},[288,133968,79980],{"class":298},[288,133970,129012],{"class":347},[288,133972,51610],{"class":298},[288,133974,132105],{"class":347},[288,133976,129582],{"class":298},[288,133978,133979],{"class":290,"line":1352},[288,133980,132112],{"class":357},[288,133982,133983,133985,133987,133989,133991,133993],{"class":290,"line":1367},[288,133984,132117],{"class":2135},[288,133986,79980],{"class":298},[288,133988,129012],{"class":347},[288,133990,51610],{"class":298},[288,133992,54937],{"class":347},[288,133994,129582],{"class":298},[288,133996,133997],{"class":290,"line":1373},[288,133998,132132],{"class":357},[288,134000,134001,134003,134005,134007,134009,134011],{"class":290,"line":1387},[288,134002,132137],{"class":2135},[288,134004,79980],{"class":298},[288,134006,129012],{"class":347},[288,134008,51610],{"class":298},[288,134010,55004],{"class":347},[288,134012,129582],{"class":298},[288,134014,134015],{"class":290,"line":1393},[288,134016,132152],{"class":357},[288,134018,134019,134021,134023,134025,134027,134029],{"class":290,"line":1484},[288,134020,132157],{"class":2135},[288,134022,79980],{"class":298},[288,134024,129012],{"class":347},[288,134026,51610],{"class":298},[288,134028,86406],{"class":347},[288,134030,129582],{"class":298},[288,134032,134033],{"class":290,"line":1490},[288,134034,132172],{"class":357},[288,134036,134037,134039,134041,134043,134045,134047],{"class":290,"line":1502},[288,134038,132177],{"class":2135},[288,134040,79980],{"class":298},[288,134042,129012],{"class":347},[288,134044,51610],{"class":298},[288,134046,132186],{"class":347},[288,134048,129582],{"class":298},[19,134050,134051],{},"分布思路重点详解：",[280,134053,134054],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,134055,134056,134060,134074,134078,134092,134096,134110,134114,134128,134132],{"__ignoreMap":205},[288,134057,134058],{"class":290,"line":291},[288,134059,132091],{"class":357},[288,134061,134062,134064,134066,134068,134070,134072],{"class":290,"line":206},[288,134063,132096],{"class":2135},[288,134065,79980],{"class":298},[288,134067,129012],{"class":347},[288,134069,51610],{"class":298},[288,134071,132105],{"class":347},[288,134073,129582],{"class":298},[288,134075,134076],{"class":290,"line":1352},[288,134077,132112],{"class":357},[288,134079,134080,134082,134084,134086,134088,134090],{"class":290,"line":1367},[288,134081,132117],{"class":2135},[288,134083,79980],{"class":298},[288,134085,129012],{"class":347},[288,134087,51610],{"class":298},[288,134089,54937],{"class":347},[288,134091,129582],{"class":298},[288,134093,134094],{"class":290,"line":1373},[288,134095,132132],{"class":357},[288,134097,134098,134100,134102,134104,134106,134108],{"class":290,"line":1387},[288,134099,132137],{"class":2135},[288,134101,79980],{"class":298},[288,134103,129012],{"class":347},[288,134105,51610],{"class":298},[288,134107,55004],{"class":347},[288,134109,129582],{"class":298},[288,134111,134112],{"class":290,"line":1393},[288,134113,132152],{"class":357},[288,134115,134116,134118,134120,134122,134124,134126],{"class":290,"line":1484},[288,134117,132157],{"class":2135},[288,134119,79980],{"class":298},[288,134121,129012],{"class":347},[288,134123,51610],{"class":298},[288,134125,86406],{"class":347},[288,134127,129582],{"class":298},[288,134129,134130],{"class":290,"line":1490},[288,134131,132172],{"class":357},[288,134133,134134,134136,134138,134140,134142,134144],{"class":290,"line":1502},[288,134135,132177],{"class":2135},[288,134137,79980],{"class":298},[288,134139,129012],{"class":347},[288,134141,51610],{"class":298},[288,134143,132186],{"class":347},[288,134145,129582],{"class":298},[200,134147],{"style":202,"src":134148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134150,134151],{},"图片太大，盒子太小，此时需要修改图片的大小",[280,134153,134155],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[25,134156,134157],{"__ignoreMap":205},[288,134158,134159,134161,134163,134165,134167,134170,134172,134174,134177,134180,134182,134185],{"class":290,"line":291},[288,134160,1207],{"class":298},[288,134162,200],{"class":51473},[288,134164,55412],{"class":2135},[288,134166,344],{"class":298},[288,134168,134169],{"class":403},"\"images\u002Fpic.jpg\"",[288,134171,55420],{"class":2135},[288,134173,344],{"class":298},[288,134175,134176],{"class":403},"\"描述文字\"",[288,134178,134179],{"class":2135}," title",[288,134181,344],{"class":298},[288,134183,134184],{"class":403},"\"悬停提示\"",[288,134186,51480],{"class":298},[200,134188],{"style":202,"src":134189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134191,134192],{},"制造遮罩层",[280,134194,134195],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,134196,134197],{"__ignoreMap":205},[288,134198,134199,134201,134203,134205,134207,134209,134211,134213,134215,134217,134219,134221],{"class":290,"line":291},[288,134200,1207],{"class":298},[288,134202,200],{"class":51473},[288,134204,55412],{"class":2135},[288,134206,344],{"class":298},[288,134208,134169],{"class":403},[288,134210,55420],{"class":2135},[288,134212,344],{"class":298},[288,134214,134176],{"class":403},[288,134216,134179],{"class":2135},[288,134218,344],{"class":298},[288,134220,134184],{"class":403},[288,134222,51480],{"class":298},[19,134224,134225],{},"此时是这样的为标准流",[200,134227],{"style":202,"src":134228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134230,134231],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134233,134234],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134236,134237],{},"让他在中间，用center(background-position)",[19,134239,134240],{},"将需要变的尽可能放到一个盒子中",[19,134242,134243],{},"放大盒子上内部盒子发生变化",[280,134245,134247],{"className":126652,"code":134246,"language":126654,"meta":205,"style":205},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[25,134248,134249,134255,134265,134269,134276,134286,134298,134310],{"__ignoreMap":205},[288,134250,134251,134253],{"class":290,"line":291},[288,134252,127719],{"class":2135},[288,134254,15745],{"class":298},[288,134256,134257,134259,134261,134263],{"class":290,"line":206},[288,134258,132458],{"class":347},[288,134260,51610],{"class":298},[288,134262,54937],{"class":347},[288,134264,1463],{"class":298},[288,134266,134267],{"class":290,"line":1352},[288,134268,1737],{"class":298},[288,134270,134271,134274],{"class":290,"line":1367},[288,134272,134273],{"class":2135},".child",[288,134275,15745],{"class":298},[288,134277,134278,134280,134282,134284],{"class":290,"line":1373},[288,134279,132458],{"class":347},[288,134281,51610],{"class":298},[288,134283,55004],{"class":347},[288,134285,1463],{"class":298},[288,134287,134288,134290,134292,134294,134296],{"class":290,"line":1387},[288,134289,132472],{"class":347},[288,134291,51610],{"class":298},[288,134293,953],{"class":347},[288,134295,625],{"class":294},[288,134297,1463],{"class":298},[288,134299,134300,134302,134304,134306,134308],{"class":290,"line":1393},[288,134301,132489],{"class":347},[288,134303,51610],{"class":298},[288,134305,953],{"class":347},[288,134307,625],{"class":294},[288,134309,1463],{"class":298},[288,134311,134312],{"class":290,"line":1484},[288,134313,1737],{"class":298},[19,134315,134316],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134318,134320],{"id":134319},"_122-精灵图","12.2 精灵图",[260,134322,134324],{"id":134323},"_1221-理解","12.2.1 理解",[243,134326,134327,134345],{},[246,134328,134329,134330,132558,134333,134336,134337,134340,134341,134344],{},"目的： ",[448,134331,134332],{},"为了有效地减少服务器接收和发送请求的次数",[448,134334,134335],{},"提高"," 页面的 ",[448,134338,134339],{},"加载速度"," ，出现了 ",[448,134342,134343],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[246,134346,134347,134348,134350,134351,134353,134354,134356,134357,134359,134360,134362,134363,134365],{},"使用精灵图核心：",[53889,134349],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53889,134352],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53889,134355],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53889,134358],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53889,134361],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53889,134364],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[260,134367,134369],{"id":134368},"_1222-扒图","12.2.2 扒图",[280,134371,134374],{"className":134372,"code":134373,"language":5360},[5358],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[25,134375,134373],{"__ignoreMap":205},[200,134377],{"style":202,"src":134378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[200,134380],{"style":202,"src":134381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[260,134383,134385],{"id":134384},"_1223-精灵图的实现","12.2.3 精灵图的实现",[200,134387],{"style":202,"src":134388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134390,134391],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[200,134393],{"style":202,"src":134394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[280,134396,134398],{"className":126652,"code":134397,"language":126654,"meta":205,"style":205},"\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",[25,134399,134400,134405,134412,134424,134436,134455,134472],{"__ignoreMap":205},[288,134401,134402],{"class":290,"line":291},[288,134403,134404],{"class":357},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[288,134406,134407,134410],{"class":290,"line":206},[288,134408,134409],{"class":2135},".icon",[288,134411,15745],{"class":298},[288,134413,134414,134416,134418,134420,134422],{"class":290,"line":1352},[288,134415,70741],{"class":347},[288,134417,51610],{"class":298},[288,134419,997],{"class":347},[288,134421,51665],{"class":294},[288,134423,1463],{"class":298},[288,134425,134426,134428,134430,134432,134434],{"class":290,"line":1367},[288,134427,70961],{"class":347},[288,134429,51610],{"class":298},[288,134431,997],{"class":347},[288,134433,51665],{"class":294},[288,134435,1463],{"class":298},[288,134437,134438,134440,134442,134444,134446,134449,134451,134453],{"class":290,"line":1373},[288,134439,70784],{"class":347},[288,134441,51610],{"class":298},[288,134443,61899],{"class":347},[288,134445,299],{"class":298},[288,134447,134448],{"class":5389},"sprites.png",[288,134450,13887],{"class":298},[288,134452,61909],{"class":347},[288,134454,1463],{"class":298},[288,134456,134457,134459,134461,134463,134465,134468,134470],{"class":290,"line":1387},[288,134458,128912],{"class":347},[288,134460,51610],{"class":298},[288,134462,51936],{"class":347},[288,134464,51665],{"class":294},[288,134466,134467],{"class":347}," -20",[288,134469,51665],{"class":294},[288,134471,1463],{"class":298},[288,134473,134474],{"class":290,"line":1393},[288,134475,1737],{"class":298},[200,134477],{"style":202,"src":134478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134480,134481],{},"在前端中坐标轴的正方向是右和下",[14,134483,134485],{"id":134484},"_123-字体图标","12.3 字体图标",[260,134487,134489],{"id":134488},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134491,134492],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134494,134495],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134497,134498],{},"1.图片文件还是比较大的。",[19,134500,134501],{},"2.图片本身放大和缩小会失真。",[19,134503,134504],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134506,134507,134508,25913],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[448,134509,134510],{},"字体图标 iconfont",[19,134512,134513,134516,134517,28558],{},[448,134514,134515],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[448,134518,134519],{},"展示的是图标，本质属于字体",[260,134521,134523],{"id":134522},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1304,134525,134526,134531,134534,134537,134540],{},[246,134527,134528,134530],{},[448,134529,26049],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[246,134532,134533],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[246,134535,134536],{},"兼容性：几乎支持所有的浏览器，请放心使用",[246,134538,134539],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[246,134541,134542],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[260,134544,134546],{"id":134545},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1304,134548,134549],{},[246,134550,134551,134552],{},"icomoon字体库：",[104,134553,134556],{"href":134554,"rel":134555},"http:\u002F\u002Ficomoon.io\u002F",[108],"http:\u002F\u002Ficomoon.io",[19,134558,134559],{},"进去之后点icomoon app",[200,134561],{"style":202,"src":134562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134564,134565],{},"可以对其编辑：",[200,134567],{"style":202,"src":134568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134570,134571],{},"生成字体：",[200,134573],{"style":202,"src":134574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134576,134577],{},"下载：",[200,134579],{"style":202,"src":134580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1304,134582,134583],{},[246,134584,134585,134586],{},"阿里iconfont字体库： ",[104,134587,134588],{"href":134588,"rel":134589},"http:\u002F\u002Fwww.iconfont.cn\u002F",[108],[260,134591,134593],{"id":134592},"_1234-字体图标的引入","12.3.4 字体图标的引入",[243,134595,134596],{},[246,134597,134598,134599,134602],{},"把下载包里面的 ",[448,134600,134601],{},"fonts"," 文件夹放入页面根目录下",[200,134604],{"style":202,"src":134605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[243,134607,134608],{"start":206},[246,134609,134610],{},"字体文件格式",[436,134612,134613,134622],{},[439,134614,134615],{},[442,134616,134617,134620],{},[445,134618,134619],{"align":23909},"格式",[445,134621,23913],{"align":23909},[483,134623,134624,134634,134644,134654],{},[442,134625,134626,134631],{},[488,134627,134628],{"align":23909},[448,134629,134630],{},".ttf",[488,134632,134633],{"align":23909},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[442,134635,134636,134641],{},[488,134637,134638],{"align":23909},[448,134639,134640],{},".woff",[488,134642,134643],{"align":23909},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[442,134645,134646,134651],{},[488,134647,134648],{"align":23909},[448,134649,134650],{},".eot",[488,134652,134653],{"align":23909},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[442,134655,134656,134661],{},[488,134657,134658],{"align":23909},[448,134659,134660],{},"svg",[488,134662,134663],{"align":23909},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[243,134665,134666],{"start":1352},[246,134667,134668],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[280,134670,134672],{"className":126652,"code":134671,"language":126654,"meta":205,"style":205},"\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",[25,134673,134674,134679,134686,134698,134714,134739,134760,134780,134800,134804,134810,134820,134831],{"__ignoreMap":205},[288,134675,134676],{"class":290,"line":291},[288,134677,134678],{"class":357},"\u002F* 引入字体图标 *\u002F\n",[288,134680,134681,134684],{"class":290,"line":206},[288,134682,134683],{"class":294},"@font-face",[288,134685,15745],{"class":298},[288,134687,134688,134691,134693,134696],{"class":290,"line":1352},[288,134689,134690],{"class":347},"  font-family",[288,134692,51610],{"class":298},[288,134694,134695],{"class":403},"'icomoon'",[288,134697,1463],{"class":298},[288,134699,134700,134703,134705,134707,134709,134712],{"class":290,"line":1367},[288,134701,134702],{"class":347},"  src",[288,134704,51610],{"class":298},[288,134706,61899],{"class":347},[288,134708,299],{"class":298},[288,134710,134711],{"class":403},"'fonts\u002Ficomoon.eot'",[288,134713,2891],{"class":298},[288,134715,134716,134718,134720,134722,134724,134727,134729,134732,134734,134737],{"class":290,"line":1373},[288,134717,134702],{"class":347},[288,134719,51610],{"class":298},[288,134721,61899],{"class":347},[288,134723,299],{"class":298},[288,134725,134726],{"class":403},"'fonts\u002Ficomoon.eot?#iefix'",[288,134728,13887],{"class":298},[288,134730,134731],{"class":347},"format",[288,134733,299],{"class":298},[288,134735,134736],{"class":403},"'embedded-opentype'",[288,134738,38220],{"class":298},[288,134740,134741,134744,134746,134749,134751,134753,134755,134758],{"class":290,"line":1387},[288,134742,134743],{"class":347},"       url",[288,134745,299],{"class":298},[288,134747,134748],{"class":403},"'fonts\u002Ficomoon.woff'",[288,134750,13887],{"class":298},[288,134752,134731],{"class":347},[288,134754,299],{"class":298},[288,134756,134757],{"class":403},"'woff'",[288,134759,38220],{"class":298},[288,134761,134762,134764,134766,134769,134771,134773,134775,134778],{"class":290,"line":1393},[288,134763,134743],{"class":347},[288,134765,299],{"class":298},[288,134767,134768],{"class":403},"'fonts\u002Ficomoon.ttf'",[288,134770,13887],{"class":298},[288,134772,134731],{"class":347},[288,134774,299],{"class":298},[288,134776,134777],{"class":403},"'truetype'",[288,134779,38220],{"class":298},[288,134781,134782,134784,134786,134789,134791,134793,134795,134798],{"class":290,"line":1484},[288,134783,134743],{"class":347},[288,134785,299],{"class":298},[288,134787,134788],{"class":403},"'fonts\u002Ficomoon.svg#icomoon'",[288,134790,13887],{"class":298},[288,134792,134731],{"class":347},[288,134794,299],{"class":298},[288,134796,134797],{"class":403},"'svg'",[288,134799,2891],{"class":298},[288,134801,134802],{"class":290,"line":1490},[288,134803,1737],{"class":298},[288,134805,134806,134808],{"class":290,"line":1502},[288,134807,134409],{"class":2135},[288,134809,15745],{"class":298},[288,134811,134812,134814,134816,134818],{"class":290,"line":1784},[288,134813,134690],{"class":347},[288,134815,51610],{"class":298},[288,134817,134695],{"class":403},[288,134819,1463],{"class":298},[288,134821,134822,134825,134827,134829],{"class":290,"line":1789},[288,134823,134824],{"class":347},"  font-style",[288,134826,51610],{"class":298},[288,134828,64014],{"class":347},[288,134830,1463],{"class":298},[288,134832,134833],{"class":290,"line":1795},[288,134834,1737],{"class":298},[19,134836,134837],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[200,134839],{"style":202,"src":134840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[243,134842,134843],{"start":1367},[246,134844,134845],{},"添加字体",[200,134847],{"style":202,"src":134848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134850,134851],{},"复制：",[200,134853],{"style":202,"src":134854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134856,134857],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[243,134859,134860],{"start":1373},[246,134861,134862],{},"代码展示：",[280,134864,134865],{"className":126652,"code":134671,"language":126654,"meta":205,"style":205},[25,134866,134867,134871,134877,134887,134901,134923,134941,134959,134977,134981,134987,134997,135007],{"__ignoreMap":205},[288,134868,134869],{"class":290,"line":291},[288,134870,134678],{"class":357},[288,134872,134873,134875],{"class":290,"line":206},[288,134874,134683],{"class":294},[288,134876,15745],{"class":298},[288,134878,134879,134881,134883,134885],{"class":290,"line":1352},[288,134880,134690],{"class":347},[288,134882,51610],{"class":298},[288,134884,134695],{"class":403},[288,134886,1463],{"class":298},[288,134888,134889,134891,134893,134895,134897,134899],{"class":290,"line":1367},[288,134890,134702],{"class":347},[288,134892,51610],{"class":298},[288,134894,61899],{"class":347},[288,134896,299],{"class":298},[288,134898,134711],{"class":403},[288,134900,2891],{"class":298},[288,134902,134903,134905,134907,134909,134911,134913,134915,134917,134919,134921],{"class":290,"line":1373},[288,134904,134702],{"class":347},[288,134906,51610],{"class":298},[288,134908,61899],{"class":347},[288,134910,299],{"class":298},[288,134912,134726],{"class":403},[288,134914,13887],{"class":298},[288,134916,134731],{"class":347},[288,134918,299],{"class":298},[288,134920,134736],{"class":403},[288,134922,38220],{"class":298},[288,134924,134925,134927,134929,134931,134933,134935,134937,134939],{"class":290,"line":1387},[288,134926,134743],{"class":347},[288,134928,299],{"class":298},[288,134930,134748],{"class":403},[288,134932,13887],{"class":298},[288,134934,134731],{"class":347},[288,134936,299],{"class":298},[288,134938,134757],{"class":403},[288,134940,38220],{"class":298},[288,134942,134943,134945,134947,134949,134951,134953,134955,134957],{"class":290,"line":1393},[288,134944,134743],{"class":347},[288,134946,299],{"class":298},[288,134948,134768],{"class":403},[288,134950,13887],{"class":298},[288,134952,134731],{"class":347},[288,134954,299],{"class":298},[288,134956,134777],{"class":403},[288,134958,38220],{"class":298},[288,134960,134961,134963,134965,134967,134969,134971,134973,134975],{"class":290,"line":1484},[288,134962,134743],{"class":347},[288,134964,299],{"class":298},[288,134966,134788],{"class":403},[288,134968,13887],{"class":298},[288,134970,134731],{"class":347},[288,134972,299],{"class":298},[288,134974,134797],{"class":403},[288,134976,2891],{"class":298},[288,134978,134979],{"class":290,"line":1490},[288,134980,1737],{"class":298},[288,134982,134983,134985],{"class":290,"line":1502},[288,134984,134409],{"class":2135},[288,134986,15745],{"class":298},[288,134988,134989,134991,134993,134995],{"class":290,"line":1784},[288,134990,134690],{"class":347},[288,134992,51610],{"class":298},[288,134994,134695],{"class":403},[288,134996,1463],{"class":298},[288,134998,134999,135001,135003,135005],{"class":290,"line":1789},[288,135000,134824],{"class":347},[288,135002,51610],{"class":298},[288,135004,64014],{"class":347},[288,135006,1463],{"class":298},[288,135008,135009],{"class":290,"line":1795},[288,135010,1737],{"class":298},[200,135012],{"style":202,"src":135013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135015,135016],{},"更加细节展示：",[243,135018,135019],{},[246,135020,135021],{},"html 标签内添加小图标",[200,135023],{"style":202,"src":135024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[243,135026,135027],{"start":206},[246,135028,135029],{},"给标签定义字体",[280,135031,135032],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,135033,135034,135038,135052,135056],{"__ignoreMap":205},[288,135035,135036],{"class":290,"line":291},[288,135037,130763],{"class":357},[288,135039,135040,135042,135044,135046,135048,135050],{"class":290,"line":206},[288,135041,1207],{"class":298},[288,135043,51784],{"class":51473},[288,135045,53659],{"class":2135},[288,135047,344],{"class":298},[288,135049,130776],{"class":403},[288,135051,51480],{"class":298},[288,135053,135054],{"class":290,"line":1352},[288,135055,130783],{"class":298},[288,135057,135058,135060,135062],{"class":290,"line":1367},[288,135059,51958],{"class":298},[288,135061,51784],{"class":51473},[288,135063,51480],{"class":298},[19,135065,135066],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[200,135068],{"style":202,"src":135069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[260,135071,135073],{"id":135072},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135075,135076],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135078,135079,135080,135083],{},"把压缩包里面的 ",[448,135081,135082],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135085,135086],{},"打开网站，点下方：",[200,135088],{"style":202,"src":135089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[200,135091],{"style":202,"src":135092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[200,135094],{"style":202,"src":135095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135097,135098],{},"点yes重新加载",[19,135100,135101],{},"然后重复之前的操作就可以实现了",[19,135103,135104],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[260,135106,135108],{"id":135107},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[200,135110],{"style":202,"src":135111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5299,135113,135114],{},"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":205,"searchDepth":206,"depth":206,"links":135116},[135117,135123,135128],{"id":133720,"depth":206,"text":133721,"children":135118},[135119,135120,135121,135122],{"id":133732,"depth":1352,"text":133733},{"id":133761,"depth":1352,"text":133762},{"id":133789,"depth":1352,"text":133790},{"id":133847,"depth":1352,"text":133848},{"id":134319,"depth":206,"text":134320,"children":135124},[135125,135126,135127],{"id":134323,"depth":1352,"text":134324},{"id":134368,"depth":1352,"text":134369},{"id":134384,"depth":1352,"text":134385},{"id":134484,"depth":206,"text":134485,"children":135129},[135130,135131,135132,135133,135134,135135],{"id":134488,"depth":1352,"text":134489},{"id":134522,"depth":1352,"text":134523},{"id":134545,"depth":1352,"text":134546},{"id":134592,"depth":1352,"text":134593},{"id":135072,"depth":1352,"text":135073},{"id":135107,"depth":1352,"text":135108},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133712,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135142,"title":135143,"body":135144,"description":214,"extension":215,"meta":136371,"navigation":217,"path":136372,"seo":136373,"stem":136374,"__hash__":136375},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135145,"toc":136352},[135146,135149,135153,135156,135170,135238,135268,135271,135275,135279,135381,135428,135432,135435,135438,135472,135475,135478,135481,135484,135487,135490,135493,135495,135498,135501,135504,135507,135510,135513,135516,135544,135547,135551,135554,135561,135564,135567,135593,135596,135600,135603,135606,135613,135617,135620,135622,135654,135657,135660,135672,135678,135681,135684,135687,135689,135693,135696,135699,135702,135747,135751,135753,135756,135763,135805,135808,135812,135817,135831,135835,135838,135841,135844,135847,135850,135884,135887,135890,135944,135947,135950,135953,135956,136008,136011,136014,136063,136067,136069,136072,136075,136078,136081,136084,136142,136145,136151,136154,136157,136189,136192,136196,136200,136203,136235,136239,136242,136286,136290,136293,136296,136299,136302,136305,136308,136311,136313,136316,136318,136321,136324,136327,136330,136335,136338,136340,136343,136346,136349],[10,135147,135143],{"id":135148},"_13-界面样式与布局技巧",[14,135150,135152],{"id":135151},"_131-css三角","13.1 css三角",[19,135154,135155],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1304,135157,135158,135161,135164,135167],{},[246,135159,135160],{},"用css 边框可以模拟三角效果",[246,135162,135163],{},"宽度高度为0",[246,135165,135166],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[246,135168,135169],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[280,135171,135173],{"className":126652,"code":135172,"language":126654,"meta":205,"style":205},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[25,135174,135175,135180,135187,135197,135207,135223,135234],{"__ignoreMap":205},[288,135176,135177],{"class":290,"line":291},[288,135178,135179],{"class":357},"\u002F* CSS 实现三角形 *\u002F\n",[288,135181,135182,135185],{"class":290,"line":206},[288,135183,135184],{"class":2135},".triangle",[288,135186,15745],{"class":298},[288,135188,135189,135191,135193,135195],{"class":290,"line":1352},[288,135190,70741],{"class":347},[288,135192,51610],{"class":298},[288,135194,490],{"class":347},[288,135196,1463],{"class":298},[288,135198,135199,135201,135203,135205],{"class":290,"line":1367},[288,135200,70961],{"class":347},[288,135202,51610],{"class":298},[288,135204,490],{"class":347},[288,135206,1463],{"class":298},[288,135208,135209,135211,135213,135215,135217,135219,135221],{"class":290,"line":1373},[288,135210,71069],{"class":347},[288,135212,51610],{"class":298},[288,135214,743],{"class":347},[288,135216,51665],{"class":294},[288,135218,51694],{"class":347},[288,135220,64164],{"class":347},[288,135222,1463],{"class":298},[288,135224,135225,135228,135230,135232],{"class":290,"line":1387},[288,135226,135227],{"class":347},"  border-bottom-color",[288,135229,51610],{"class":298},[288,135231,62542],{"class":347},[288,135233,1463],{"class":298},[288,135235,135236],{"class":290,"line":1393},[288,135237,1737],{"class":298},[280,135239,135240],{"className":126652,"code":130809,"language":126654,"meta":205,"style":205},[25,135241,135242,135248,135264],{"__ignoreMap":205},[288,135243,135244,135246],{"class":290,"line":291},[288,135245,51784],{"class":51473},[288,135247,15745],{"class":298},[288,135249,135250,135252,135254,135256,135258,135260,135262],{"class":290,"line":206},[288,135251,71069],{"class":347},[288,135253,51610],{"class":298},[288,135255,516],{"class":347},[288,135257,51665],{"class":294},[288,135259,51694],{"class":347},[288,135261,130044],{"class":347},[288,135263,1463],{"class":298},[288,135265,135266],{"class":290,"line":1352},[288,135267,1737],{"class":298},[200,135269],{"style":202,"src":135270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135272,135274],{"id":135273},"_132-css用户界面样式","13.2 css用户界面样式",[260,135276,135278],{"id":135277},"_1321-鼠标样式","13.2.1 鼠标样式",[280,135280,135282],{"className":126652,"code":135281,"language":126654,"meta":205,"style":205},"\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",[25,135283,135284,135289,135308,135326,135345,135362],{"__ignoreMap":205},[288,135285,135286],{"class":290,"line":291},[288,135287,135288],{"class":357},"\u002F* 鼠标样式 *\u002F\n",[288,135290,135291,135293,135295,135298,135300,135302,135305],{"class":290,"line":206},[288,135292,51784],{"class":51473},[288,135294,79980],{"class":298},[288,135296,135297],{"class":347},"cursor",[288,135299,51610],{"class":298},[288,135301,62203],{"class":347},[288,135303,135304],{"class":298},"; }   ",[288,135306,135307],{"class":357},"\u002F* 手型 *\u002F\n",[288,135309,135310,135312,135314,135316,135318,135321,135323],{"class":290,"line":1352},[288,135311,51784],{"class":51473},[288,135313,79980],{"class":298},[288,135315,135297],{"class":347},[288,135317,51610],{"class":298},[288,135319,135320],{"class":347},"default",[288,135322,135304],{"class":298},[288,135324,135325],{"class":357},"\u002F* 默认 *\u002F\n",[288,135327,135328,135330,135332,135334,135336,135339,135342],{"class":290,"line":1367},[288,135329,51784],{"class":51473},[288,135331,79980],{"class":298},[288,135333,135297],{"class":347},[288,135335,51610],{"class":298},[288,135337,135338],{"class":347},"move",[288,135340,135341],{"class":298},"; }      ",[288,135343,135344],{"class":357},"\u002F* 移动 *\u002F\n",[288,135346,135347,135349,135351,135353,135355,135357,135359],{"class":290,"line":1373},[288,135348,51784],{"class":51473},[288,135350,79980],{"class":298},[288,135352,135297],{"class":347},[288,135354,51610],{"class":298},[288,135356,5360],{"class":347},[288,135358,135341],{"class":298},[288,135360,135361],{"class":357},"\u002F* 文本 *\u002F\n",[288,135363,135364,135366,135368,135370,135372,135375,135378],{"class":290,"line":1387},[288,135365,51784],{"class":51473},[288,135367,79980],{"class":298},[288,135369,135297],{"class":347},[288,135371,51610],{"class":298},[288,135373,135374],{"class":347},"not-allowed",[288,135376,135377],{"class":298},"; } ",[288,135379,135380],{"class":357},"\u002F* 禁止 *\u002F\n",[436,135382,135383,135391],{},[439,135384,135385],{},[442,135386,135387,135389],{},[445,135388,127116],{"align":23909},[445,135390,27662],{"align":23909},[483,135392,135393,135400,135407,135414,135421],{},[442,135394,135395,135397],{},[488,135396,135320],{"align":23909},[488,135398,135399],{"align":23909},"小白 默认",[442,135401,135402,135404],{},[488,135403,62203],{"align":23909},[488,135405,135406],{"align":23909},"小手",[442,135408,135409,135411],{},[488,135410,135338],{"align":23909},[488,135412,135413],{"align":23909},"移动",[442,135415,135416,135418],{},[488,135417,5360],{"align":23909},[488,135419,135420],{"align":23909},"文本",[442,135422,135423,135425],{},[488,135424,135374],{"align":23909},[488,135426,135427],{"align":23909},"禁止",[260,135429,135431],{"id":135430},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135433,135434],{},"去除表单轮廓线",[19,135436,135437],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[280,135439,135440],{"className":126652,"code":130016,"language":126654,"meta":205,"style":205},[25,135441,135442,135446,135452,135468],{"__ignoreMap":205},[288,135443,135444],{"class":290,"line":291},[288,135445,130023],{"class":357},[288,135447,135448,135450],{"class":290,"line":206},[288,135449,51784],{"class":51473},[288,135451,15745],{"class":298},[288,135453,135454,135456,135458,135460,135462,135464,135466],{"class":290,"line":1352},[288,135455,71069],{"class":347},[288,135457,51610],{"class":298},[288,135459,516],{"class":347},[288,135461,51665],{"class":294},[288,135463,51694],{"class":347},[288,135465,130044],{"class":347},[288,135467,1463],{"class":298},[288,135469,135470],{"class":290,"line":1367},[288,135471,1737],{"class":298},[19,135473,135474],{},"文本域：",[200,135476],{"style":202,"src":135477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135479,135480],{},"此时会有一个空白区域",[200,135482],{"style":202,"src":135483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135485,135486],{},"写在同一行就不会出现这个问题",[200,135488],{"style":202,"src":135489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135491,135492],{},"文本域是行内块元素，一定记住！！！",[19,135494,98406],{},[200,135496],{"style":202,"src":135497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135499,135500],{},"文本域尽量放在一行",[19,135502,135503],{},"知识回顾：cols是列，rols是行",[200,135505],{"style":202,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135508,135509],{},"它可以进行拖动，显然这是我们不愿意看到的",[200,135511],{"style":202,"src":135512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135514,135515],{},"使用resize进行解决",[280,135517,135519],{"className":126652,"code":135518,"language":126654,"meta":205,"style":205},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[25,135520,135521,135527,135540],{"__ignoreMap":205},[288,135522,135523,135525],{"class":290,"line":291},[288,135524,53994],{"class":51473},[288,135526,15745],{"class":298},[288,135528,135529,135531,135533,135535,135537],{"class":290,"line":206},[288,135530,70971],{"class":347},[288,135532,51610],{"class":298},[288,135534,54910],{"class":347},[288,135536,130515],{"class":298},[288,135538,135539],{"class":357},"\u002F* 取消表单轮廓线 *\u002F\n",[288,135541,135542],{"class":290,"line":1352},[288,135543,1737],{"class":298},[19,135545,135546],{},"此时就无法通过右下方实现拖动了",[260,135548,135550],{"id":135549},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135552,135553],{},"实现一个盒子中的文字和图片对齐",[19,135555,135556,135557,135560],{},"用于设置一个元素的 ",[448,135558,135559],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135562,135563],{},"图片和文字默认是基线对齐",[200,135565],{"style":202,"src":135566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[280,135568,135569],{"className":126652,"code":135518,"language":126654,"meta":205,"style":205},[25,135570,135571,135577,135589],{"__ignoreMap":205},[288,135572,135573,135575],{"class":290,"line":291},[288,135574,53994],{"class":51473},[288,135576,15745],{"class":298},[288,135578,135579,135581,135583,135585,135587],{"class":290,"line":206},[288,135580,70971],{"class":347},[288,135582,51610],{"class":298},[288,135584,54910],{"class":347},[288,135586,130515],{"class":298},[288,135588,135539],{"class":357},[288,135590,135591],{"class":290,"line":1352},[288,135592,1737],{"class":298},[200,135594],{"style":202,"src":135595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22171,135597,135599],{"id":135598},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135601,135602],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[200,135604],{"style":202,"src":135605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135607,135608,135609,135612],{},"此时可以给图片、表单这些行内块元素的 ",[448,135610,135611],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22171,135614,135616],{"id":135615},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135618,135619],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135621,14806],{},[280,135623,135625],{"className":126652,"code":135624,"language":126654,"meta":205,"style":205},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[25,135626,135627,135632,135638,135650],{"__ignoreMap":205},[288,135628,135629],{"class":290,"line":291},[288,135630,135631],{"class":357},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[288,135633,135634,135636],{"class":290,"line":206},[288,135635,200],{"class":51473},[288,135637,15745],{"class":298},[288,135639,135640,135643,135645,135648],{"class":290,"line":1352},[288,135641,135642],{"class":347},"  vertical-align",[288,135644,51610],{"class":298},[288,135646,135647],{"class":347},"middle",[288,135649,1463],{"class":298},[288,135651,135652],{"class":290,"line":1367},[288,135653,1737],{"class":298},[200,135655],{"style":202,"src":135656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135658,135659],{},"主要解决方法有两种：",[243,135661,135662],{},[246,135663,135664,135667,135668,135671],{},[448,135665,135666],{},"给图片"," 添加 ",[448,135669,135670],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135673,135674,135675],{},"2.把图片转换为块级元素 ",[448,135676,135677],{},"display: block",[19,135679,135680],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135682,135683],{},"img {",[19,135685,135686],{},"vertical-align:middle;",[19,135688,1243],{},[260,135690,135692],{"id":135691},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135694,135695],{},"效果：",[200,135697],{"style":202,"src":135698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135700,135701],{},"单行文本溢出显示省略号--必须满足三个条件：",[280,135703,135705],{"className":126652,"code":135704,"language":126654,"meta":205,"style":205},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[25,135706,135707,135712,135718,135728,135733,135743],{"__ignoreMap":205},[288,135708,135709],{"class":290,"line":291},[288,135710,135711],{"class":357},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[288,135713,135714,135716],{"class":290,"line":206},[288,135715,200],{"class":51473},[288,135717,15745],{"class":298},[288,135719,135720,135722,135724,135726],{"class":290,"line":1352},[288,135721,135642],{"class":347},[288,135723,51610],{"class":298},[288,135725,135647],{"class":347},[288,135727,1463],{"class":298},[288,135729,135730],{"class":290,"line":1367},[288,135731,135732],{"class":357},"  \u002F* 或 *\u002F\n",[288,135734,135735,135737,135739,135741],{"class":290,"line":1373},[288,135736,128268],{"class":347},[288,135738,51610],{"class":298},[288,135740,61042],{"class":347},[288,135742,1463],{"class":298},[288,135744,135745],{"class":290,"line":1387},[288,135746,1737],{"class":298},[260,135748,135750],{"id":135749},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135752,135695],{},[200,135754],{"style":202,"src":135755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135757,135758,135759,135762],{},"多行文本溢出显示省略号， ",[448,135760,135761],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[280,135764,135765],{"className":126652,"code":135704,"language":126654,"meta":205,"style":205},[25,135766,135767,135771,135777,135787,135791,135801],{"__ignoreMap":205},[288,135768,135769],{"class":290,"line":291},[288,135770,135711],{"class":357},[288,135772,135773,135775],{"class":290,"line":206},[288,135774,200],{"class":51473},[288,135776,15745],{"class":298},[288,135778,135779,135781,135783,135785],{"class":290,"line":1352},[288,135780,135642],{"class":347},[288,135782,51610],{"class":298},[288,135784,135647],{"class":347},[288,135786,1463],{"class":298},[288,135788,135789],{"class":290,"line":1367},[288,135790,135732],{"class":357},[288,135792,135793,135795,135797,135799],{"class":290,"line":1373},[288,135794,128268],{"class":347},[288,135796,51610],{"class":298},[288,135798,61042],{"class":347},[288,135800,1463],{"class":298},[288,135802,135803],{"class":290,"line":1387},[288,135804,1737],{"class":298},[19,135806,135807],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135809,135811],{"id":135810},"_133-常见布局技巧","13.3 常见布局技巧",[19,135813,135814],{},[448,135815,135816],{},"巧妙利用一个技术更快更好的布局：",[243,135818,135819,135822,135825,135828],{},[246,135820,135821],{},"margin负值的运用",[246,135823,135824],{},"文字围绕浮动元素",[246,135826,135827],{},"行内块的巧妙运用",[246,135829,135830],{},"CSS三角强化",[260,135832,135834],{"id":135833},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135836,135837],{},"应用场景：",[200,135839],{"style":202,"src":135840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[200,135842],{"style":202,"src":135843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135845,135846],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135848,135849],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[280,135851,135852],{"className":126652,"code":130016,"language":126654,"meta":205,"style":205},[25,135853,135854,135858,135864,135880],{"__ignoreMap":205},[288,135855,135856],{"class":290,"line":291},[288,135857,130023],{"class":357},[288,135859,135860,135862],{"class":290,"line":206},[288,135861,51784],{"class":51473},[288,135863,15745],{"class":298},[288,135865,135866,135868,135870,135872,135874,135876,135878],{"class":290,"line":1352},[288,135867,71069],{"class":347},[288,135869,51610],{"class":298},[288,135871,516],{"class":347},[288,135873,51665],{"class":294},[288,135875,51694],{"class":347},[288,135877,130044],{"class":347},[288,135879,1463],{"class":298},[288,135881,135882],{"class":290,"line":1367},[288,135883,1737],{"class":298},[200,135885],{"style":202,"src":135886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135888,135889],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[280,135891,135893],{"className":126652,"code":135892,"language":126654,"meta":205,"style":205},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,135894,135895,135900,135906,135916,135928,135940],{"__ignoreMap":205},[288,135896,135897],{"class":290,"line":291},[288,135898,135899],{"class":357},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[288,135901,135902,135904],{"class":290,"line":206},[288,135903,130500],{"class":2135},[288,135905,15745],{"class":298},[288,135907,135908,135910,135912,135914],{"class":290,"line":1352},[288,135909,132458],{"class":347},[288,135911,51610],{"class":298},[288,135913,54937],{"class":347},[288,135915,1463],{"class":298},[288,135917,135918,135920,135922,135924,135926],{"class":290,"line":1367},[288,135919,132472],{"class":347},[288,135921,51610],{"class":298},[288,135923,743],{"class":347},[288,135925,51665],{"class":294},[288,135927,1463],{"class":298},[288,135929,135930,135932,135934,135936,135938],{"class":290,"line":1373},[288,135931,132489],{"class":347},[288,135933,51610],{"class":298},[288,135935,997],{"class":347},[288,135937,51665],{"class":294},[288,135939,1463],{"class":298},[288,135941,135942],{"class":290,"line":1387},[288,135943,1737],{"class":298},[19,135945,135946],{},"加上上述代码会发现：",[200,135948],{"style":202,"src":135949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135951,135952],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135954,135955],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[280,135957,135958],{"className":126652,"code":135892,"language":126654,"meta":205,"style":205},[25,135959,135960,135964,135970,135980,135992,136004],{"__ignoreMap":205},[288,135961,135962],{"class":290,"line":291},[288,135963,135899],{"class":357},[288,135965,135966,135968],{"class":290,"line":206},[288,135967,130500],{"class":2135},[288,135969,15745],{"class":298},[288,135971,135972,135974,135976,135978],{"class":290,"line":1352},[288,135973,132458],{"class":347},[288,135975,51610],{"class":298},[288,135977,54937],{"class":347},[288,135979,1463],{"class":298},[288,135981,135982,135984,135986,135988,135990],{"class":290,"line":1367},[288,135983,132472],{"class":347},[288,135985,51610],{"class":298},[288,135987,743],{"class":347},[288,135989,51665],{"class":294},[288,135991,1463],{"class":298},[288,135993,135994,135996,135998,136000,136002],{"class":290,"line":1373},[288,135995,132489],{"class":347},[288,135997,51610],{"class":298},[288,135999,997],{"class":347},[288,136001,51665],{"class":294},[288,136003,1463],{"class":298},[288,136005,136006],{"class":290,"line":1387},[288,136007,1737],{"class":298},[19,136009,136010],{},"解决方式2：",[19,136012,136013],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[280,136015,136017],{"className":126652,"code":136016,"language":126654,"meta":205,"style":205},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,136018,136019,136025,136035,136047,136059],{"__ignoreMap":205},[288,136020,136021,136023],{"class":290,"line":291},[288,136022,51784],{"class":51473},[288,136024,15745],{"class":298},[288,136026,136027,136029,136031,136033],{"class":290,"line":206},[288,136028,132458],{"class":347},[288,136030,51610],{"class":298},[288,136032,54937],{"class":347},[288,136034,1463],{"class":298},[288,136036,136037,136039,136041,136043,136045],{"class":290,"line":1352},[288,136038,132472],{"class":347},[288,136040,51610],{"class":298},[288,136042,743],{"class":347},[288,136044,51665],{"class":294},[288,136046,1463],{"class":298},[288,136048,136049,136051,136053,136055,136057],{"class":290,"line":1367},[288,136050,132489],{"class":347},[288,136052,51610],{"class":298},[288,136054,997],{"class":347},[288,136056,51665],{"class":294},[288,136058,1463],{"class":298},[288,136060,136061],{"class":290,"line":1373},[288,136062,1737],{"class":298},[260,136064,136066],{"id":136065},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136068,135837],{},[200,136070],{"style":202,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136073,136074],{},"实现结构图：",[200,136076],{"style":202,"src":136077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136079,136080],{},"巧妙运用浮动元素不会压住文字的特性",[19,136082,136083],{},"代码显示：",[280,136085,136087],{"className":126652,"code":136086,"language":126654,"meta":205,"style":205},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,136088,136089,136095,136105,136109,136114,136118,136124,136138],{"__ignoreMap":205},[288,136090,136091,136093],{"class":290,"line":291},[288,136092,130500],{"class":2135},[288,136094,15745],{"class":298},[288,136096,136097,136099,136101,136103],{"class":290,"line":206},[288,136098,131132],{"class":347},[288,136100,51610],{"class":298},[288,136102,23909],{"class":347},[288,136104,1463],{"class":298},[288,136106,136107],{"class":290,"line":1352},[288,136108,1737],{"class":298},[288,136110,136111],{"class":290,"line":1367},[288,136112,136113],{"class":298},"```Css\n",[288,136115,136116],{"class":290,"line":1373},[288,136117,130495],{"class":357},[288,136119,136120,136122],{"class":290,"line":1387},[288,136121,130500],{"class":2135},[288,136123,15745],{"class":298},[288,136125,136126,136128,136130,136132,136134,136136],{"class":290,"line":1393},[288,136127,70643],{"class":347},[288,136129,51610],{"class":298},[288,136131,490],{"class":347},[288,136133,51729],{"class":347},[288,136135,130515],{"class":298},[288,136137,130518],{"class":357},[288,136139,136140],{"class":290,"line":1484},[288,136141,1737],{"class":298},[19,136143,136144],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[280,136146,136149],{"className":136147,"code":136148,"language":5360},[5358],"\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",[25,136150,136148],{"__ignoreMap":205},[200,136152],{"style":202,"src":136153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136155,136156],{},"最终展示结果：",[280,136158,136159],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},[25,136160,136161,136165,136171,136185],{"__ignoreMap":205},[288,136162,136163],{"class":290,"line":291},[288,136164,130495],{"class":357},[288,136166,136167,136169],{"class":290,"line":206},[288,136168,130500],{"class":2135},[288,136170,15745],{"class":298},[288,136172,136173,136175,136177,136179,136181,136183],{"class":290,"line":1352},[288,136174,70643],{"class":347},[288,136176,51610],{"class":298},[288,136178,490],{"class":347},[288,136180,51729],{"class":347},[288,136182,130515],{"class":298},[288,136184,130518],{"class":357},[288,136186,136187],{"class":290,"line":1367},[288,136188,1737],{"class":298},[200,136190],{"style":202,"src":136191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136193,136195],{"id":136194},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[260,136197,136199],{"id":136198},"_1341-原理","13.4.1 原理",[200,136201],{"style":202,"src":136202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[280,136204,136205],{"className":126652,"code":130488,"language":126654,"meta":205,"style":205},[25,136206,136207,136211,136217,136231],{"__ignoreMap":205},[288,136208,136209],{"class":290,"line":291},[288,136210,130495],{"class":357},[288,136212,136213,136215],{"class":290,"line":206},[288,136214,130500],{"class":2135},[288,136216,15745],{"class":298},[288,136218,136219,136221,136223,136225,136227,136229],{"class":290,"line":1352},[288,136220,70643],{"class":347},[288,136222,51610],{"class":298},[288,136224,490],{"class":347},[288,136226,51729],{"class":347},[288,136228,130515],{"class":298},[288,136230,130518],{"class":357},[288,136232,136233],{"class":290,"line":1367},[288,136234,1737],{"class":298},[260,136236,136238],{"id":136237},"_1342-实例","13.4.2 实例",[200,136240],{"style":202,"src":136241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[280,136243,136244],{"className":126652,"code":131118,"language":126654,"meta":205,"style":205},[25,136245,136246,136252,136262,136266,136272,136282],{"__ignoreMap":205},[288,136247,136248,136250],{"class":290,"line":291},[288,136249,131125],{"class":2135},[288,136251,15745],{"class":298},[288,136253,136254,136256,136258,136260],{"class":290,"line":206},[288,136255,131132],{"class":347},[288,136257,51610],{"class":298},[288,136259,23909],{"class":347},[288,136261,1463],{"class":298},[288,136263,136264],{"class":290,"line":1352},[288,136265,1737],{"class":298},[288,136267,136268,136270],{"class":290,"line":1367},[288,136269,131147],{"class":2135},[288,136271,15745],{"class":298},[288,136273,136274,136276,136278,136280],{"class":290,"line":1373},[288,136275,131132],{"class":347},[288,136277,51610],{"class":298},[288,136279,72695],{"class":347},[288,136281,1463],{"class":298},[288,136283,136284],{"class":290,"line":1387},[288,136285,1737],{"class":298},[14,136287,136289],{"id":136288},"_135-css的初始化","13.5 css的初始化",[19,136291,136292],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136294,136295],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136297,136298],{},"每个网页都必须首先进行 CSS初始化。",[19,136300,136301],{},"这里我们以 京东CSS初始化代码为例。",[19,136303,136304],{},"在网页右键查看网页源代码",[19,136306,136307],{},"找到css的link引入语句",[19,136309,136310],{},"然后ctrl+f 输入body",[19,136312,77399],{},[200,136314],{"style":202,"src":136315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136317,77422],{},[200,136319],{"style":202,"src":136320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136322,136323],{},"③打开了网页上传压缩的代码",[200,136325],{"style":202,"src":136326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136328,136329],{},"④从body前可以查看这个网页的初始化代码",[19,136331,136332],{},[448,136333,136334],{},"Unicode编码字体：",[19,136336,136337],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136339,83380],{},[19,136341,136342],{},"黑体 \\9ED1\\4F53",[19,136344,136345],{},"宋体 \\5B8B\\4F53",[19,136347,136348],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5299,136350,136351],{},"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":205,"searchDepth":206,"depth":206,"links":136353},[136354,136355,136362,136366,136370],{"id":135151,"depth":206,"text":135152},{"id":135273,"depth":206,"text":135274,"children":136356},[136357,136358,136359,136360,136361],{"id":135277,"depth":1352,"text":135278},{"id":135430,"depth":1352,"text":135431},{"id":135549,"depth":1352,"text":135550},{"id":135691,"depth":1352,"text":135692},{"id":135749,"depth":1352,"text":135750},{"id":135810,"depth":206,"text":135811,"children":136363},[136364,136365],{"id":135833,"depth":1352,"text":135834},{"id":136065,"depth":1352,"text":136066},{"id":136194,"depth":206,"text":136195,"children":136367},[136368,136369],{"id":136198,"depth":1352,"text":136199},{"id":136237,"depth":1352,"text":136238},{"id":136288,"depth":206,"text":136289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135143,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136377,"title":136378,"body":136379,"description":214,"extension":215,"meta":138065,"navigation":217,"path":138066,"seo":138067,"stem":138068,"__hash__":138069},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136380,"toc":138054},[136381,136384,136388,136392,136395,136402,136405,136408,136446,136449,136451,136465,136469,136478,136482,136487,136490,136493,136496,136531,136536,136539,136569,136572,136577,136580,136583,136613,136616,136670,136673,136677,136682,136694,136697,136701,136731,136734,136739,136742,136772,136775,136779,136796,136800,136804,136807,136840,136843,136847,136850,136853,136856,136859,136862,136973,136976,136979,136982,137084,137087,137091,137095,137099,137102,137142,137145,137147,137163,137167,137170,137175,137256,137259,137262,137388,137393,137396,137404,137407,137412,137497,137500,137504,137507,137510,137514,137534,137539,137623,137626,137631,137634,137637,137715,137718,137721,137724,137727,137730,137735,137738,137741,137813,137816,137821,137824,137921,137924,137930,137933,137936,137939,137942,137945,137948,137951,137954,137958,137963,137966,137999,138004,138007,138048,138051],[10,136382,136378],{"id":136383},"_14-html5与css3新特性",[14,136385,136387],{"id":136386},"_141-html5的新特性","14.1 HTML5的新特性",[260,136389,136391],{"id":136390},"_1411-基本标签","14.1.1 基本标签",[19,136393,136394],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136396,136397,136398,136401],{},"这些新特性都有兼容性问题，基本是 ",[448,136399,136400],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136403,136404],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136406,136407],{},"现在使用的是新特性：",[1304,136409,136410,136416,136422,136428,136434,136440],{},[246,136411,136412,136415],{},[25,136413,136414],{},"\u003Cheader>"," 头部标签",[246,136417,136418,136421],{},[25,136419,136420],{},"\u003Cnav>"," 导航标签",[246,136423,136424,136427],{},[25,136425,136426],{},"\u003Carticle>"," 内容标签",[246,136429,136430,136433],{},[25,136431,136432],{},"\u003Csection>"," 定义文档某个区域",[246,136435,136436,136439],{},[25,136437,136438],{},"\u003Caside>"," 侧边栏标签",[246,136441,136442,136445],{},[25,136443,136444],{},"\u003Cfooter>"," 尾部标签",[200,136447],{"style":202,"src":136448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136450,328],{},[1304,136452,136453,136456,136459,136462],{},[246,136454,136455],{},"这种语义化标准主要是针对搜索引擎的",[246,136457,136458],{},"这些标签页面中可以经常使用",[246,136460,136461],{},"在IE9中，需要把这些元素转换为块级元素",[246,136463,136464],{},"移动端更喜欢使用这些标签",[260,136466,136468],{"id":136467},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136470,136471,136472,136474,136475,136477],{},"音频 ",[448,136473,28347],{}," 和视频 ",[448,136476,28356],{}," 两个标签",[22171,136479,136481],{"id":136480},"_14121-视频标签-video","14.1.2.1 视频标签- video",[243,136483,136484],{},[246,136485,136486],{},"支持格式：",[200,136488],{"style":202,"src":136489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136491,136492],{},"尽量使用MP4，兼容性好",[19,136494,136495],{},"用MP4就可以",[280,136497,136499],{"className":127399,"code":136498,"language":127401,"meta":205,"style":205},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[25,136500,136501],{"__ignoreMap":205},[288,136502,136503,136505,136507,136509,136511,136514,136516,136519,136522,136525,136527,136529],{"class":290,"line":291},[288,136504,1207],{"class":298},[288,136506,28356],{"class":51473},[288,136508,55412],{"class":2135},[288,136510,344],{"class":298},[288,136512,136513],{"class":403},"\"movie.mp4\"",[288,136515,92596],{"class":2135},[288,136517,136518],{"class":2135}," autoplay",[288,136520,136521],{"class":2135}," muted",[288,136523,136524],{"class":2135}," loop",[288,136526,55487],{"class":298},[288,136528,28356],{"class":51473},[288,136530,51480],{"class":298},[243,136532,136533],{"start":206},[246,136534,136535],{},"兼容写法",[19,136537,136538],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[280,136540,136541],{"className":127399,"code":136498,"language":127401,"meta":205,"style":205},[25,136542,136543],{"__ignoreMap":205},[288,136544,136545,136547,136549,136551,136553,136555,136557,136559,136561,136563,136565,136567],{"class":290,"line":291},[288,136546,1207],{"class":298},[288,136548,28356],{"class":51473},[288,136550,55412],{"class":2135},[288,136552,344],{"class":298},[288,136554,136513],{"class":403},[288,136556,92596],{"class":2135},[288,136558,136518],{"class":2135},[288,136560,136521],{"class":2135},[288,136562,136524],{"class":2135},[288,136564,55487],{"class":298},[288,136566,28356],{"class":51473},[288,136568,51480],{"class":298},[19,136570,136571],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[243,136573,136574],{"start":1352},[246,136575,136576],{},"video常用属性",[200,136578],{"style":202,"src":136579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136581,136582],{},"poster属性后面是跟的等待加载图片的地址",[280,136584,136585],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,136586,136587],{"__ignoreMap":205},[288,136588,136589,136591,136593,136595,136597,136599,136601,136603,136605,136607,136609,136611],{"class":290,"line":291},[288,136590,1207],{"class":298},[288,136592,200],{"class":51473},[288,136594,55412],{"class":2135},[288,136596,344],{"class":298},[288,136598,134169],{"class":403},[288,136600,55420],{"class":2135},[288,136602,344],{"class":298},[288,136604,134176],{"class":403},[288,136606,134179],{"class":2135},[288,136608,344],{"class":298},[288,136610,134184],{"class":403},[288,136612,51480],{"class":298},[19,136614,136615],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[280,136617,136619],{"className":126652,"code":136618,"language":126654,"meta":205,"style":205},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[25,136620,136621,136626,136632,136656,136661,136666],{"__ignoreMap":205},[288,136622,136623],{"class":290,"line":291},[288,136624,136625],{"class":357},"\u002F* 2D 位移 *\u002F\n",[288,136627,136628,136630],{"class":290,"line":206},[288,136629,51784],{"class":51473},[288,136631,15745],{"class":298},[288,136633,136634,136637,136639,136642,136644,136646,136648,136650,136652,136654],{"class":290,"line":1352},[288,136635,136636],{"class":347},"  transform",[288,136638,51610],{"class":298},[288,136640,136641],{"class":347},"translate",[288,136643,299],{"class":298},[288,136645,608],{"class":347},[288,136647,51665],{"class":294},[288,136649,12608],{"class":298},[288,136651,953],{"class":347},[288,136653,51665],{"class":294},[288,136655,2891],{"class":298},[288,136657,136658],{"class":290,"line":1367},[288,136659,136660],{"class":357},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[288,136662,136663],{"class":290,"line":1373},[288,136664,136665],{"class":357},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[288,136667,136668],{"class":290,"line":1387},[288,136669,1737],{"class":298},[19,136671,136672],{},"muted:自动静音属性",[22171,136674,136676],{"id":136675},"_14122-音频标签audio","14.1.2.2 音频标签audio",[243,136678,136679],{},[246,136680,136681],{},"基本使用",[19,136683,136684,136685,136690,136691],{},"当前 ",[448,136686,136687],{},[25,136688,136689],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[448,136692,136693],{},"mp3格式",[200,136695],{"style":202,"src":136696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[243,136698,136699],{"start":206},[246,136700,136535],{},[280,136702,136703],{"className":127399,"code":136498,"language":127401,"meta":205,"style":205},[25,136704,136705],{"__ignoreMap":205},[288,136706,136707,136709,136711,136713,136715,136717,136719,136721,136723,136725,136727,136729],{"class":290,"line":291},[288,136708,1207],{"class":298},[288,136710,28356],{"class":51473},[288,136712,55412],{"class":2135},[288,136714,344],{"class":298},[288,136716,136513],{"class":403},[288,136718,92596],{"class":2135},[288,136720,136518],{"class":2135},[288,136722,136521],{"class":2135},[288,136724,136524],{"class":2135},[288,136726,55487],{"class":298},[288,136728,28356],{"class":51473},[288,136730,51480],{"class":298},[19,136732,136733],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[243,136735,136736],{"start":1352},[246,136737,136738],{},"常用属性",[200,136740],{"style":202,"src":136741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[280,136743,136744],{"className":127399,"code":136498,"language":127401,"meta":205,"style":205},[25,136745,136746],{"__ignoreMap":205},[288,136747,136748,136750,136752,136754,136756,136758,136760,136762,136764,136766,136768,136770],{"class":290,"line":291},[288,136749,1207],{"class":298},[288,136751,28356],{"class":51473},[288,136753,55412],{"class":2135},[288,136755,344],{"class":298},[288,136757,136513],{"class":403},[288,136759,92596],{"class":2135},[288,136761,136518],{"class":2135},[288,136763,136521],{"class":2135},[288,136765,136524],{"class":2135},[288,136767,55487],{"class":298},[288,136769,28356],{"class":51473},[288,136771,51480],{"class":298},[19,136773,136774],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22171,136776,136778],{"id":136777},"_14123-总结","14.1.2.3 总结",[1304,136780,136781,136784,136787,136790,136793],{},[246,136782,136783],{},"音频标签和视频标签使用方式基本一致",[246,136785,136786],{},"浏览器支持情况不同",[246,136788,136789],{},"谷歌浏览器把音频和视频自动播放禁止了",[246,136791,136792],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[246,136794,136795],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[260,136797,136799],{"id":136798},"_1413-表单元素","14.1.3 表单元素",[22171,136801,136803],{"id":136802},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[200,136805],{"style":202,"src":136806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[280,136808,136810],{"className":127399,"code":136809,"language":127401,"meta":205,"style":205},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[25,136811,136812],{"__ignoreMap":205},[288,136813,136814,136816,136818,136820,136822,136824,136826,136828,136831,136833,136835,136838],{"class":290,"line":291},[288,136815,1207],{"class":298},[288,136817,53994],{"class":51473},[288,136819,53997],{"class":2135},[288,136821,344],{"class":298},[288,136823,62872],{"class":403},[288,136825,15093],{"class":2135},[288,136827,344],{"class":298},[288,136829,136830],{"class":403},"\"username\"",[288,136832,61193],{"class":2135},[288,136834,344],{"class":298},[288,136836,136837],{"class":403},"\"请输入用户名\"",[288,136839,51480],{"class":298},[200,136841],{"style":202,"src":136842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22171,136844,136846],{"id":136845},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[200,136848],{"style":202,"src":136849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136851,136852],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136854,136855],{},"快捷操作：",[200,136857],{"style":202,"src":136858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136860,136861],{},"例子1：",[280,136863,136865],{"className":127399,"code":136864,"language":127401,"meta":205,"style":205},"\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",[25,136866,136867,136890,136917,136946,136965],{"__ignoreMap":205},[288,136868,136869,136871,136873,136875,136877,136880,136883,136885,136888],{"class":290,"line":291},[288,136870,1207],{"class":298},[288,136872,66798],{"class":51473},[288,136874,66801],{"class":2135},[288,136876,344],{"class":298},[288,136878,136879],{"class":403},"\"\u002Fsubmit\"",[288,136881,136882],{"class":2135}," method",[288,136884,344],{"class":298},[288,136886,136887],{"class":403},"\"post\"",[288,136889,51480],{"class":298},[288,136891,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912,136915],{"class":290,"line":206},[288,136893,52317],{"class":298},[288,136895,53994],{"class":51473},[288,136897,53997],{"class":2135},[288,136899,344],{"class":298},[288,136901,62872],{"class":403},[288,136903,15093],{"class":2135},[288,136905,344],{"class":298},[288,136907,136830],{"class":403},[288,136909,61193],{"class":2135},[288,136911,344],{"class":298},[288,136913,136914],{"class":403},"\"用户名\"",[288,136916,51480],{"class":298},[288,136918,136919,136921,136923,136925,136927,136930,136932,136934,136937,136939,136941,136944],{"class":290,"line":1352},[288,136920,52317],{"class":298},[288,136922,53994],{"class":51473},[288,136924,53997],{"class":2135},[288,136926,344],{"class":298},[288,136928,136929],{"class":403},"\"password\"",[288,136931,15093],{"class":2135},[288,136933,344],{"class":298},[288,136935,136936],{"class":403},"\"pwd\"",[288,136938,61193],{"class":2135},[288,136940,344],{"class":298},[288,136942,136943],{"class":403},"\"密码\"",[288,136945,51480],{"class":298},[288,136947,136948,136950,136952,136954,136956,136958,136961,136963],{"class":290,"line":1367},[288,136949,52317],{"class":298},[288,136951,54060],{"class":51473},[288,136953,53997],{"class":2135},[288,136955,344],{"class":298},[288,136957,66821],{"class":403},[288,136959,136960],{"class":298},">提交\u003C\u002F",[288,136962,54060],{"class":51473},[288,136964,51480],{"class":298},[288,136966,136967,136969,136971],{"class":290,"line":1373},[288,136968,51958],{"class":298},[288,136970,66798],{"class":51473},[288,136972,51480],{"class":298},[200,136974],{"style":202,"src":136975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136977,136978],{},"value是表单域的内容",[19,136980,136981],{},"例子2：",[280,136983,136984],{"className":127399,"code":136864,"language":127401,"meta":205,"style":205},[25,136985,136986,137006,137032,137058,137076],{"__ignoreMap":205},[288,136987,136988,136990,136992,136994,136996,136998,137000,137002,137004],{"class":290,"line":291},[288,136989,1207],{"class":298},[288,136991,66798],{"class":51473},[288,136993,66801],{"class":2135},[288,136995,344],{"class":298},[288,136997,136879],{"class":403},[288,136999,136882],{"class":2135},[288,137001,344],{"class":298},[288,137003,136887],{"class":403},[288,137005,51480],{"class":298},[288,137007,137008,137010,137012,137014,137016,137018,137020,137022,137024,137026,137028,137030],{"class":290,"line":206},[288,137009,52317],{"class":298},[288,137011,53994],{"class":51473},[288,137013,53997],{"class":2135},[288,137015,344],{"class":298},[288,137017,62872],{"class":403},[288,137019,15093],{"class":2135},[288,137021,344],{"class":298},[288,137023,136830],{"class":403},[288,137025,61193],{"class":2135},[288,137027,344],{"class":298},[288,137029,136914],{"class":403},[288,137031,51480],{"class":298},[288,137033,137034,137036,137038,137040,137042,137044,137046,137048,137050,137052,137054,137056],{"class":290,"line":1352},[288,137035,52317],{"class":298},[288,137037,53994],{"class":51473},[288,137039,53997],{"class":2135},[288,137041,344],{"class":298},[288,137043,136929],{"class":403},[288,137045,15093],{"class":2135},[288,137047,344],{"class":298},[288,137049,136936],{"class":403},[288,137051,61193],{"class":2135},[288,137053,344],{"class":298},[288,137055,136943],{"class":403},[288,137057,51480],{"class":298},[288,137059,137060,137062,137064,137066,137068,137070,137072,137074],{"class":290,"line":1367},[288,137061,52317],{"class":298},[288,137063,54060],{"class":51473},[288,137065,53997],{"class":2135},[288,137067,344],{"class":298},[288,137069,66821],{"class":403},[288,137071,136960],{"class":298},[288,137073,54060],{"class":51473},[288,137075,51480],{"class":298},[288,137077,137078,137080,137082],{"class":290,"line":1373},[288,137079,51958],{"class":298},[288,137081,66798],{"class":51473},[288,137083,51480],{"class":298},[200,137085],{"style":202,"src":137086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137088,137090],{"id":137089},"_142-css新特性","14.2 CSS新特性",[260,137092,137094],{"id":137093},"_1421-新增选择器","14.2.1 新增选择器",[22171,137096,137098],{"id":137097},"_14211-属性选择器","14.2.1.1 属性选择器",[200,137100],{"style":202,"src":137101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[280,137103,137105],{"className":126652,"code":137104,"language":126654,"meta":205,"style":205},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[25,137106,137107,137122,137138],{"__ignoreMap":205},[288,137108,137109,137111,137113,137115,137117,137119],{"class":290,"line":291},[288,137110,53994],{"class":51473},[288,137112,1187],{"class":298},[288,137114,103280],{"class":2135},[288,137116,344],{"class":294},[288,137118,62872],{"class":403},[288,137120,137121],{"class":298},"] {\n",[288,137123,137124,137126,137128,137130,137132,137134,137136],{"class":290,"line":206},[288,137125,71069],{"class":347},[288,137127,51610],{"class":298},[288,137129,516],{"class":347},[288,137131,51665],{"class":294},[288,137133,51694],{"class":347},[288,137135,130232],{"class":347},[288,137137,1463],{"class":298},[288,137139,137140],{"class":290,"line":1352},[288,137141,1737],{"class":298},[200,137143],{"style":202,"src":137144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137146,328],{},[1304,137148,137149,137152,137155,137158],{},[246,137150,137151],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[246,137153,137154],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[246,137156,137157],{},"属性选择器也可以选择出来自定义的属性",[246,137159,137160,137162],{},[448,137161,9198],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22171,137164,137166],{"id":137165},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[200,137168],{"style":202,"src":137169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[243,137171,137172],{},[246,137173,137174],{},"fist-child",[280,137176,137178],{"className":126652,"code":137177,"language":126654,"meta":205,"style":205},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[25,137179,137180,137185,137200,137220,137238],{"__ignoreMap":205},[288,137181,137182],{"class":290,"line":291},[288,137183,137184],{"class":357},"\u002F* 属性选择器 *\u002F\n",[288,137186,137187,137189,137191,137193,137195,137197],{"class":290,"line":206},[288,137188,53994],{"class":51473},[288,137190,1187],{"class":298},[288,137192,103280],{"class":2135},[288,137194,344],{"class":294},[288,137196,62872],{"class":403},[288,137198,137199],{"class":298},"] { }\n",[288,137201,137202,137204,137206,137208,137211,137214,137217],{"class":290,"line":1352},[288,137203,53994],{"class":51473},[288,137205,1187],{"class":298},[288,137207,14867],{"class":2135},[288,137209,137210],{"class":294},"^=",[288,137212,137213],{"class":403},"\"icon\"",[288,137215,137216],{"class":298},"] { }  ",[288,137218,137219],{"class":357},"\u002F* 以 icon 开头 *\u002F\n",[288,137221,137222,137224,137226,137228,137231,137233,137235],{"class":290,"line":1367},[288,137223,53994],{"class":51473},[288,137225,1187],{"class":298},[288,137227,14867],{"class":2135},[288,137229,137230],{"class":294},"$=",[288,137232,137213],{"class":403},[288,137234,137216],{"class":298},[288,137236,137237],{"class":357},"\u002F* 以 icon 结尾 *\u002F\n",[288,137239,137240,137242,137244,137246,137249,137251,137253],{"class":290,"line":1373},[288,137241,53994],{"class":51473},[288,137243,1187],{"class":298},[288,137245,14867],{"class":2135},[288,137247,137248],{"class":294},"*=",[288,137250,137213],{"class":403},[288,137252,137216],{"class":298},[288,137254,137255],{"class":357},"\u002F* 包含 icon *\u002F\n",[19,137257,137258],{},"ul的第一个儿子文本为红色",[19,137260,137261],{},"一定要在冒号前加空格，不然就是选中所有的了",[280,137263,137265],{"className":126652,"code":137264,"language":126654,"meta":205,"style":205},".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",[25,137266,137267,137273,137283,137287,137291,137296,137309,137322,137338,137355,137372],{"__ignoreMap":205},[288,137268,137269,137271],{"class":290,"line":291},[288,137270,126943],{"class":2135},[288,137272,15745],{"class":298},[288,137274,137275,137277,137279,137281],{"class":290,"line":206},[288,137276,71078],{"class":347},[288,137278,51610],{"class":298},[288,137280,57594],{"class":347},[288,137282,1463],{"class":298},[288,137284,137285],{"class":290,"line":1352},[288,137286,1737],{"class":298},[288,137288,137289],{"class":290,"line":1367},[288,137290,136113],{"class":298},[288,137292,137293],{"class":290,"line":1373},[288,137294,137295],{"class":357},"\u002F* 结构伪类选择器 *\u002F\n",[288,137297,137298,137300,137303,137306],{"class":290,"line":1387},[288,137299,246],{"class":51473},[288,137301,137302],{"class":2135},":first-child",[288,137304,137305],{"class":298}," { }           ",[288,137307,137308],{"class":357},"\u002F* 第一个 *\u002F\n",[288,137310,137311,137313,137316,137319],{"class":290,"line":1393},[288,137312,246],{"class":51473},[288,137314,137315],{"class":2135},":last-child",[288,137317,137318],{"class":298}," { }            ",[288,137320,137321],{"class":357},"\u002F* 最后一个 *\u002F\n",[288,137323,137324,137326,137328,137330,137332,137335],{"class":290,"line":1484},[288,137325,246],{"class":51473},[288,137327,129566],{"class":2135},[288,137329,299],{"class":298},[288,137331,376],{"class":347},[288,137333,137334],{"class":298},") { }          ",[288,137336,137337],{"class":357},"\u002F* 第2个 *\u002F\n",[288,137339,137340,137342,137344,137346,137349,137352],{"class":290,"line":1490},[288,137341,246],{"class":51473},[288,137343,129566],{"class":2135},[288,137345,299],{"class":298},[288,137347,137348],{"class":347},"2n",[288,137350,137351],{"class":298},") { }         ",[288,137353,137354],{"class":357},"\u002F* 偶数 *\u002F\n",[288,137356,137357,137359,137361,137363,137366,137369],{"class":290,"line":1502},[288,137358,246],{"class":51473},[288,137360,129566],{"class":2135},[288,137362,299],{"class":298},[288,137364,137365],{"class":347},"2n+1",[288,137367,137368],{"class":298},") { }       ",[288,137370,137371],{"class":357},"\u002F* 奇数 *\u002F\n",[288,137373,137374,137376,137378,137380,137383,137385],{"class":290,"line":1784},[288,137375,246],{"class":51473},[288,137377,129566],{"class":2135},[288,137379,299],{"class":298},[288,137381,137382],{"class":347},"-n+3",[288,137384,137368],{"class":298},[288,137386,137387],{"class":357},"\u002F* 前3个 *\u002F\n",[51784,137389,137392],{"className":137390},[137391],"example","\n  示例内容\n",[19,137394,137395],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1304,137397,137398],{},[246,137399,137400,137403],{},[25,137401,137402],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137405,137406],{},"也就是说它选择的是熊大",[243,137408,137409],{"start":1387},[246,137410,137411],{},"权重",[280,137413,137415],{"className":126652,"code":137414,"language":126654,"meta":205,"style":205},"\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",[25,137416,137417,137421,137431,137441,137455,137469,137483],{"__ignoreMap":205},[288,137418,137419],{"class":290,"line":291},[288,137420,137295],{"class":357},[288,137422,137423,137425,137427,137429],{"class":290,"line":206},[288,137424,246],{"class":51473},[288,137426,137302],{"class":2135},[288,137428,137305],{"class":298},[288,137430,137308],{"class":357},[288,137432,137433,137435,137437,137439],{"class":290,"line":1352},[288,137434,246],{"class":51473},[288,137436,137315],{"class":2135},[288,137438,137318],{"class":298},[288,137440,137321],{"class":357},[288,137442,137443,137445,137447,137449,137451,137453],{"class":290,"line":1367},[288,137444,246],{"class":51473},[288,137446,129566],{"class":2135},[288,137448,299],{"class":298},[288,137450,376],{"class":347},[288,137452,137334],{"class":298},[288,137454,137337],{"class":357},[288,137456,137457,137459,137461,137463,137465,137467],{"class":290,"line":1373},[288,137458,246],{"class":51473},[288,137460,129566],{"class":2135},[288,137462,299],{"class":298},[288,137464,137348],{"class":347},[288,137466,137351],{"class":298},[288,137468,137354],{"class":357},[288,137470,137471,137473,137475,137477,137479,137481],{"class":290,"line":1387},[288,137472,246],{"class":51473},[288,137474,129566],{"class":2135},[288,137476,299],{"class":298},[288,137478,137365],{"class":347},[288,137480,137368],{"class":298},[288,137482,137371],{"class":357},[288,137484,137485,137487,137489,137491,137493,137495],{"class":290,"line":1393},[288,137486,246],{"class":51473},[288,137488,129566],{"class":2135},[288,137490,299],{"class":298},[288,137492,137382],{"class":347},[288,137494,137368],{"class":298},[288,137496,137387],{"class":357},[19,137498,137499],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22171,137501,137503],{"id":137502},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137505,137506],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[200,137508],{"style":202,"src":137509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[243,137511,137512],{},[246,137513,328],{},[1304,137515,137516,137519,137522,137525,137528,137531],{},[246,137517,137518],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[246,137520,137521],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[246,137523,137524],{},"语法： element::before {}",[246,137526,137527],{},"before 和 after 必须有 content 属性",[246,137529,137530],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[246,137532,137533],{},"伪元素选择器和标签选择器一样，权重为 1",[243,137535,137536],{"start":206},[246,137537,137538],{},"实例",[280,137540,137541],{"className":126652,"code":137414,"language":126654,"meta":205,"style":205},[25,137542,137543,137547,137557,137567,137581,137595,137609],{"__ignoreMap":205},[288,137544,137545],{"class":290,"line":291},[288,137546,137295],{"class":357},[288,137548,137549,137551,137553,137555],{"class":290,"line":206},[288,137550,246],{"class":51473},[288,137552,137302],{"class":2135},[288,137554,137305],{"class":298},[288,137556,137308],{"class":357},[288,137558,137559,137561,137563,137565],{"class":290,"line":1352},[288,137560,246],{"class":51473},[288,137562,137315],{"class":2135},[288,137564,137318],{"class":298},[288,137566,137321],{"class":357},[288,137568,137569,137571,137573,137575,137577,137579],{"class":290,"line":1367},[288,137570,246],{"class":51473},[288,137572,129566],{"class":2135},[288,137574,299],{"class":298},[288,137576,376],{"class":347},[288,137578,137334],{"class":298},[288,137580,137337],{"class":357},[288,137582,137583,137585,137587,137589,137591,137593],{"class":290,"line":1373},[288,137584,246],{"class":51473},[288,137586,129566],{"class":2135},[288,137588,299],{"class":298},[288,137590,137348],{"class":347},[288,137592,137351],{"class":298},[288,137594,137354],{"class":357},[288,137596,137597,137599,137601,137603,137605,137607],{"class":290,"line":1387},[288,137598,246],{"class":51473},[288,137600,129566],{"class":2135},[288,137602,299],{"class":298},[288,137604,137365],{"class":347},[288,137606,137368],{"class":298},[288,137608,137371],{"class":357},[288,137610,137611,137613,137615,137617,137619,137621],{"class":290,"line":1393},[288,137612,246],{"class":51473},[288,137614,129566],{"class":2135},[288,137616,299],{"class":298},[288,137618,137382],{"class":347},[288,137620,137368],{"class":298},[288,137622,137387],{"class":357},[200,137624],{"style":202,"src":137625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[243,137627,137628],{"start":1352},[246,137629,137630],{},"使用场景1",[200,137632],{"style":202,"src":137633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137635,137636],{},"不需要再加盒子来整红色那部分了",[280,137638,137640],{"className":126652,"code":137639,"language":126654,"meta":205,"style":205},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[25,137641,137642,137647,137656,137667,137677,137681,137690,137701,137711],{"__ignoreMap":205},[288,137643,137644],{"class":290,"line":291},[288,137645,137646],{"class":357},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[288,137648,137649,137651,137654],{"class":290,"line":206},[288,137650,51784],{"class":51473},[288,137652,137653],{"class":2135},"::before",[288,137655,15745],{"class":298},[288,137657,137658,137661,137663,137665],{"class":290,"line":1352},[288,137659,137660],{"class":347},"  content",[288,137662,51610],{"class":298},[288,137664,7825],{"class":403},[288,137666,1463],{"class":298},[288,137668,137669,137671,137673,137675],{"class":290,"line":1367},[288,137670,128268],{"class":347},[288,137672,51610],{"class":298},[288,137674,61042],{"class":347},[288,137676,1463],{"class":298},[288,137678,137679],{"class":290,"line":1373},[288,137680,1737],{"class":298},[288,137682,137683,137685,137688],{"class":290,"line":1387},[288,137684,51784],{"class":51473},[288,137686,137687],{"class":2135},"::after",[288,137689,15745],{"class":298},[288,137691,137692,137694,137696,137699],{"class":290,"line":1393},[288,137693,137660],{"class":347},[288,137695,51610],{"class":298},[288,137697,137698],{"class":403},"\"→\"",[288,137700,1463],{"class":298},[288,137702,137703,137705,137707,137709],{"class":290,"line":1484},[288,137704,71078],{"class":347},[288,137706,51610],{"class":298},[288,137708,62243],{"class":347},[288,137710,1463],{"class":298},[288,137712,137713],{"class":290,"line":1490},[288,137714,1737],{"class":298},[200,137716],{"style":202,"src":137717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137719,137720],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[200,137722],{"style":202,"src":137723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137725,137726],{},"但是在引用时需要先转义一下",[19,137728,137729],{},"content='\\e930'",[243,137731,137732],{"start":1367},[246,137733,137734],{},"使用场景2",[19,137736,137737],{},"仿土豆效果",[19,137739,137740],{},"通过使用伪元素选择器可以减少body中盒子的数量",[280,137742,137743],{"className":126652,"code":137639,"language":126654,"meta":205,"style":205},[25,137744,137745,137749,137757,137767,137777,137781,137789,137799,137809],{"__ignoreMap":205},[288,137746,137747],{"class":290,"line":291},[288,137748,137646],{"class":357},[288,137750,137751,137753,137755],{"class":290,"line":206},[288,137752,51784],{"class":51473},[288,137754,137653],{"class":2135},[288,137756,15745],{"class":298},[288,137758,137759,137761,137763,137765],{"class":290,"line":1352},[288,137760,137660],{"class":347},[288,137762,51610],{"class":298},[288,137764,7825],{"class":403},[288,137766,1463],{"class":298},[288,137768,137769,137771,137773,137775],{"class":290,"line":1367},[288,137770,128268],{"class":347},[288,137772,51610],{"class":298},[288,137774,61042],{"class":347},[288,137776,1463],{"class":298},[288,137778,137779],{"class":290,"line":1373},[288,137780,1737],{"class":298},[288,137782,137783,137785,137787],{"class":290,"line":1387},[288,137784,51784],{"class":51473},[288,137786,137687],{"class":2135},[288,137788,15745],{"class":298},[288,137790,137791,137793,137795,137797],{"class":290,"line":1393},[288,137792,137660],{"class":347},[288,137794,51610],{"class":298},[288,137796,137698],{"class":403},[288,137798,1463],{"class":298},[288,137800,137801,137803,137805,137807],{"class":290,"line":1484},[288,137802,71078],{"class":347},[288,137804,51610],{"class":298},[288,137806,62243],{"class":347},[288,137808,1463],{"class":298},[288,137810,137811],{"class":290,"line":1490},[288,137812,1737],{"class":298},[200,137814],{"style":202,"src":137815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[243,137817,137818],{"start":1373},[246,137819,137820],{},"使用场景3",[19,137822,137823],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[280,137825,137827],{"className":126652,"code":137826,"language":126654,"meta":205,"style":205},".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",[25,137828,137829,137835,137845,137849,137853,137857,137865,137875,137885,137889,137897,137907,137917],{"__ignoreMap":205},[288,137830,137831,137833],{"class":290,"line":291},[288,137832,130500],{"class":2135},[288,137834,15745],{"class":298},[288,137836,137837,137839,137841,137843],{"class":290,"line":206},[288,137838,131132],{"class":347},[288,137840,51610],{"class":298},[288,137842,23909],{"class":347},[288,137844,1463],{"class":298},[288,137846,137847],{"class":290,"line":1352},[288,137848,1737],{"class":298},[288,137850,137851],{"class":290,"line":1367},[288,137852,136113],{"class":298},[288,137854,137855],{"class":290,"line":1373},[288,137856,137646],{"class":357},[288,137858,137859,137861,137863],{"class":290,"line":1387},[288,137860,51784],{"class":51473},[288,137862,137653],{"class":2135},[288,137864,15745],{"class":298},[288,137866,137867,137869,137871,137873],{"class":290,"line":1393},[288,137868,137660],{"class":347},[288,137870,51610],{"class":298},[288,137872,7825],{"class":403},[288,137874,1463],{"class":298},[288,137876,137877,137879,137881,137883],{"class":290,"line":1484},[288,137878,128268],{"class":347},[288,137880,51610],{"class":298},[288,137882,61042],{"class":347},[288,137884,1463],{"class":298},[288,137886,137887],{"class":290,"line":1490},[288,137888,1737],{"class":298},[288,137890,137891,137893,137895],{"class":290,"line":1502},[288,137892,51784],{"class":51473},[288,137894,137687],{"class":2135},[288,137896,15745],{"class":298},[288,137898,137899,137901,137903,137905],{"class":290,"line":1784},[288,137900,137660],{"class":347},[288,137902,51610],{"class":298},[288,137904,137698],{"class":403},[288,137906,1463],{"class":298},[288,137908,137909,137911,137913,137915],{"class":290,"line":1789},[288,137910,71078],{"class":347},[288,137912,51610],{"class":298},[288,137914,62243],{"class":347},[288,137916,1463],{"class":298},[288,137918,137919],{"class":290,"line":1795},[288,137920,1737],{"class":298},[19,137922,137923],{},"div {\nmargin: 0 auto;\n}",[280,137925,137928],{"className":137926,"code":137927,"language":5360},[5358],"\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",[25,137929,137927],{"__ignoreMap":205},[19,137931,137932],{},"如果想让多个元素都发生变化",[19,137934,137935],{},"不能如下操作：",[19,137937,137938],{},"transition: width 2s ease 0.5s;",[19,137940,137941],{},"transition: height 2s ease 0.5s;不对！！！",[19,137943,137944],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137946,137947],{},"使用如下：加逗号隔开",[19,137949,137950],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137952,137953],{},"transition all 2s ease;",[260,137955,137957],{"id":137956},"_1426-过渡练习","14.2.6 过渡练习",[243,137959,137960],{},[246,137961,137962],{},"进度条",[200,137964],{"style":202,"src":137965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[280,137967,137969],{"className":126652,"code":137968,"language":126654,"meta":205,"style":205},"div {\n  transition: all 0.3s ease;\n}\n",[25,137970,137971,137977,137995],{"__ignoreMap":205},[288,137972,137973,137975],{"class":290,"line":291},[288,137974,51784],{"class":51473},[288,137976,15745],{"class":298},[288,137978,137979,137982,137984,137986,137989,137991,137993],{"class":290,"line":206},[288,137980,137981],{"class":347},"  transition",[288,137983,51610],{"class":298},[288,137985,28294],{"class":347},[288,137987,137988],{"class":347}," 0.3",[288,137990,992],{"class":294},[288,137992,78853],{"class":347},[288,137994,1463],{"class":298},[288,137996,137997],{"class":290,"line":1352},[288,137998,1737],{"class":298},[243,138000,138001],{"start":206},[246,138002,138003],{},"小米logo",[19,138005,138006],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[280,138008,138010],{"className":126652,"code":138009,"language":126654,"meta":205,"style":205},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[25,138011,138012,138017,138023,138039,138044],{"__ignoreMap":205},[288,138013,138014],{"class":290,"line":291},[288,138015,138016],{"class":357},"\u002F* CSS3 过渡 *\u002F\n",[288,138018,138019,138021],{"class":290,"line":206},[288,138020,51784],{"class":51473},[288,138022,15745],{"class":298},[288,138024,138025,138027,138029,138031,138033,138035,138037],{"class":290,"line":1352},[288,138026,137981],{"class":347},[288,138028,51610],{"class":298},[288,138030,28294],{"class":347},[288,138032,137988],{"class":347},[288,138034,992],{"class":294},[288,138036,78853],{"class":347},[288,138038,1463],{"class":298},[288,138040,138041],{"class":290,"line":1367},[288,138042,138043],{"class":357},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[288,138045,138046],{"class":290,"line":1373},[288,138047,1737],{"class":298},[19,138049,138050],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5299,138052,138053],{},"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":205,"searchDepth":206,"depth":206,"links":138055},[138056,138061],{"id":136386,"depth":206,"text":136387,"children":138057},[138058,138059,138060],{"id":136390,"depth":1352,"text":136391},{"id":136467,"depth":1352,"text":136468},{"id":136798,"depth":1352,"text":136799},{"id":137089,"depth":206,"text":137090,"children":138062},[138063,138064],{"id":137093,"depth":1352,"text":137094},{"id":137956,"depth":1352,"text":137957},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136378,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138071,"title":138072,"body":138073,"description":214,"extension":215,"meta":139817,"navigation":217,"path":139818,"seo":139819,"stem":139820,"__hash__":139821},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138074,"toc":139798},[138075,138078,138082,138085,138091,138097,138101,138103,138106,138109,138112,138115,138118,138121,138124,138128,138132,138135,138138,138141,138145,138148,138151,138156,138159,138162,138165,138169,138172,138181,138184,138187,138191,138194,138197,138202,138209,138223,138231,138238,138243,138246,138249,138252,138259,138263,138269,138275,138278,138281,138286,138292,138294,138302,138307,138310,138316,138318,138323,138328,138331,138333,138338,138341,138346,138351,138385,138389,138393,138396,138400,138403,138489,138492,138529,138532,138568,138572,138577,138590,138644,138646,138674,138676,138704,138710,138724,138726,138770,138772,138816,138819,138826,138837,138839,138866,138868,138894,138901,138917,138919,139013,139015,139109,139116,139119,139124,139130,139204,139207,139209,139245,139247,139283,139286,139293,139312,139315,139318,139320,139345,139347,139371,139374,139377,139407,139411,139414,139477,139479,139545,139547,139611,139614,139646,139648,139674,139676,139702,139705,139736,139738,139764,139766,139792,139795],[10,138076,138072],{"id":138077},"_15-品优购项目上篇-搭建与公共模块",[14,138079,138081],{"id":138080},"_151-项目规划","15.1 项目规划",[200,138083],{"style":202,"src":138084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138086,138087,138090],{},[448,138088,138089],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138092,138093,138096],{},[448,138094,138095],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138098,138100],{"id":138099},"_152-项目介绍","15.2 项目介绍",[19,138102,138089],{},[200,138104],{"style":202,"src":138105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138107,138108],{},"主页：",[200,138110],{"style":202,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138113,138114],{},"列表页：",[200,138116],{"style":202,"src":138117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138119,138120],{},"注册页：",[200,138122],{"style":202,"src":138123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138125,138127],{"id":138126},"_153-项目搭建工作","15.3 项目搭建工作",[260,138129,138131],{"id":138130},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[200,138133],{"style":202,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138136,138137],{},"经常更换的图片要放到upload文件夹中",[19,138139,138140],{},"不经常换的放到images文件夹中",[260,138142,138144],{"id":138143},"_1532-创建文件如下","15.3.2 创建文件如下",[200,138146],{"style":202,"src":138147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[200,138149],{"style":202,"src":138150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138152,138153],{},[448,138154,138155],{},"初始化样式：",[19,138157,138158],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138160,138161],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138163,138164],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[260,138166,138168],{"id":138167},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138170,138171],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138173,138174,138175,138180],{},"这里最典型的应用就是 ",[448,138176,138177],{},[25,138178,138179],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[200,138182],{"style":202,"src":138183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138185,138186],{},"通过link方法来引入",[260,138188,138190],{"id":138189},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[200,138192],{"style":202,"src":138193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138195,138196],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[243,138198,138199],{},[246,138200,138201],{},"制作favicon图标",[19,138203,138204,138205,138208],{},"①把品优购图标切成 ",[25,138206,138207],{},"png"," 图片",[19,138210,138211,138212,138214,138215,138218,138219],{},"②把 ",[25,138213,138207],{}," 图片转换为 ",[25,138216,138217],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[104,138220,138221],{"href":138221,"rel":138222},"http:\u002F\u002Fwww.bitbug.net\u002F",[108],[243,138224,138225,138228],{"start":206},[246,138226,138227],{},"favicon图标放到网站根目录下",[246,138229,138230],{},"HTML页面引入favicon",[19,138232,138233,138234,138237],{},"在html 页面里面的 ",[25,138235,138236],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138239,138240],{},[25,138241,138242],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138244,138245],{},"复制这行代码或者在生成这个的网站进行复制",[200,138247],{"style":202,"src":138248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138250,138251],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138253,138254,138255],{},"例如:",[104,138256,138257],{"href":138257,"rel":138258},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[108],[260,138260,138262],{"id":138261},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138264,138265,138268],{},[448,138266,138267],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138270,138271,138274],{},[448,138272,138273],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138276,138277],{},"页面必须有三个标签用来符合 SEO 优化",[200,138279],{"style":202,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[243,138282,138283],{},[246,138284,138285],{},"title网站标题",[19,138287,138288,138291],{},[448,138289,138290],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138293,68963],{},[1304,138295,138296,138299],{},[246,138297,138298],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[246,138300,138301],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[243,138303,138304],{"start":206},[246,138305,138306],{},"description网站描述",[19,138308,138309],{},"简要说明我们网站主要是做什么的",[19,138311,138312,138315],{},[448,138313,138314],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138317,68963],{},[19,138319,138320],{},[25,138321,138322],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[243,138324,138325],{"start":1352},[246,138326,138327],{},"keywords关键词",[19,138329,138330],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138332,68963],{},[19,138334,138335],{},[25,138336,138337],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138339,138340],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138342,138343],{},[448,138344,138345],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[243,138347,138348],{"start":1367},[246,138349,138350],{},"代码总结",[280,138352,138353],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,138354,138355,138359,138373,138377],{"__ignoreMap":205},[288,138356,138357],{"class":290,"line":291},[288,138358,130763],{"class":357},[288,138360,138361,138363,138365,138367,138369,138371],{"class":290,"line":206},[288,138362,1207],{"class":298},[288,138364,51784],{"class":51473},[288,138366,53659],{"class":2135},[288,138368,344],{"class":298},[288,138370,130776],{"class":403},[288,138372,51480],{"class":298},[288,138374,138375],{"class":290,"line":1352},[288,138376,130783],{"class":298},[288,138378,138379,138381,138383],{"class":290,"line":1367},[288,138380,51958],{"class":298},[288,138382,51784],{"class":51473},[288,138384,51480],{"class":298},[14,138386,138388],{"id":138387},"_154-项目公共部分制作","15.4 项目公共部分制作",[260,138390,138392],{"id":138391},"_1541-常用模块类命名","15.4.1 常用模块类命名",[200,138394],{"style":202,"src":138395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[260,138397,138399],{"id":138398},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138401,138402],{},"布局思路：",[1304,138404,138405,138408,138411,138433,138466],{},[246,138406,138407],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[246,138409,138410],{},"里面包含版心的盒子",[246,138412,138413,138414],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1304,138415,138416,138424,138430],{},[246,138417,138418,138419,21673,138421,138423],{},"1 号盒子 里面包含一个",[25,138420,1304],{},[25,138422,1304],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[246,138425,138426,138427,138429],{},"里面的内容是水平排列，所以需要给",[25,138428,246],{},"设置浮动",[246,138431,138432],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[246,138434,138435,138436],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1304,138437,138438,138452,138457],{},[246,138439,138440,138441,21673,138443,138445,138446,138448,138449,138451],{},"2 号盒子 里面包含一个",[25,138442,1304],{},[25,138444,1304],{},"包裹",[25,138447,246],{},"，中间的",[25,138450,1218],{},"可以用样式去设置，也可以用字符 |",[246,138453,138454,138455,138429],{},"里面内容水平排列，给",[25,138456,246],{},[246,138458,138459,138460,138462,138463,138465],{},"找到里面所有偶数的 ",[25,138461,246],{}," 设置样式（偶数的 ",[25,138464,246],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[246,138467,138468,138469],{},"需要用到字体图标",[1304,138470,138471,138477,138480,138483,138486],{},[246,138472,138473,138474],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[25,138475,138476],{},"arrow-icon",[246,138478,138479],{},"先要引入字体图片的资源",[246,138481,138482],{},"在样式里面利用 font-face 来进行声明",[246,138484,138485],{},"在伪元素的 content属性设置 图标的编码",[246,138487,138488],{},"给伪元素设置font-family属性",[19,138490,138491],{},"结构实例代码：",[280,138493,138495],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},"div::before {\n  content: \"\";\n  display: block;\n}\n",[25,138496,138497,138505,138515,138525],{"__ignoreMap":205},[288,138498,138499,138501,138503],{"class":290,"line":291},[288,138500,51784],{"class":51473},[288,138502,137653],{"class":2135},[288,138504,15745],{"class":298},[288,138506,138507,138509,138511,138513],{"class":290,"line":206},[288,138508,137660],{"class":347},[288,138510,51610],{"class":298},[288,138512,7825],{"class":403},[288,138514,1463],{"class":298},[288,138516,138517,138519,138521,138523],{"class":290,"line":1352},[288,138518,128268],{"class":347},[288,138520,51610],{"class":298},[288,138522,61042],{"class":347},[288,138524,1463],{"class":298},[288,138526,138527],{"class":290,"line":1367},[288,138528,1737],{"class":298},[19,138530,138531],{},"样式实例代码：",[280,138533,138534],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,138535,138536,138544,138554,138564],{"__ignoreMap":205},[288,138537,138538,138540,138542],{"class":290,"line":291},[288,138539,51784],{"class":51473},[288,138541,137653],{"class":2135},[288,138543,15745],{"class":298},[288,138545,138546,138548,138550,138552],{"class":290,"line":206},[288,138547,137660],{"class":347},[288,138549,51610],{"class":298},[288,138551,7825],{"class":403},[288,138553,1463],{"class":298},[288,138555,138556,138558,138560,138562],{"class":290,"line":1352},[288,138557,128268],{"class":347},[288,138559,51610],{"class":298},[288,138561,61042],{"class":347},[288,138563,1463],{"class":298},[288,138565,138566],{"class":290,"line":1367},[288,138567,1737],{"class":298},[260,138569,138571],{"id":138570},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1304,138573,138574],{},[246,138575,138576],{},"header 盒子必须要有高度",[19,138578,138579,138580,138582,138583],{},"1 号盒子是 ",[25,138581,131664],{}," 标志定位，在正常开发过程中， ",[448,138584,138585,138586,138589],{},"logo的布局其实是有讲究的，需要进行 ",[25,138587,138588],{},"logoSEO","的优化 （★★★）",[1304,138591,138592,138600,138608,138635],{},[246,138593,138594,138596,138597,138599],{},[25,138595,131664],{}," 里面首先放一个 ",[25,138598,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[246,138601,138602,138604,138605,138607],{},[25,138603,10],{}," 里面再放一个链接，可以返回首页的，把 ",[25,138606,131664],{}," 的背景图片给链接即可",[246,138609,138610,138611],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1304,138612,138613,138628],{},[246,138614,138615,138616,138619,138620,138623,138624,138627],{},"方法1：",[25,138617,138618],{},"text-indent"," 移到盒子外面（",[25,138621,138622],{},"text-indent: -9999px",") ，然后 ",[25,138625,138626],{},"overflow:hidden"," ，淘宝的做法",[246,138629,138630,138631,138634],{},"方法2：直接给 ",[25,138632,138633],{},"font-size: 0;"," 就看不到文字了，京东的做法",[246,138636,138637,138638,138640,138641,138643],{},"最后给链接一个 ",[25,138639,51580],{}," 属性，这样鼠标放到 ",[25,138642,131664],{}," 上就可以看到提示文字了",[19,138645,138491],{},[280,138647,138648],{"className":127399,"code":131885,"language":127401,"meta":205,"style":205},[25,138649,138650],{"__ignoreMap":205},[288,138651,138652,138654,138656,138658,138660,138662,138664,138666,138668,138670,138672],{"class":290,"line":291},[288,138653,1207],{"class":298},[288,138655,104],{"class":51473},[288,138657,61230],{"class":2135},[288,138659,344],{"class":298},[288,138661,131900],{"class":403},[288,138663,131903],{"class":2135},[288,138665,344],{"class":298},[288,138667,131908],{"class":403},[288,138669,131911],{"class":298},[288,138671,104],{"class":51473},[288,138673,51480],{"class":298},[19,138675,138531],{},[280,138677,138678],{"className":127399,"code":131885,"language":127401,"meta":205,"style":205},[25,138679,138680],{"__ignoreMap":205},[288,138681,138682,138684,138686,138688,138690,138692,138694,138696,138698,138700,138702],{"class":290,"line":291},[288,138683,1207],{"class":298},[288,138685,104],{"class":51473},[288,138687,61230],{"class":2135},[288,138689,344],{"class":298},[288,138691,131900],{"class":403},[288,138693,131903],{"class":2135},[288,138695,344],{"class":298},[288,138697,131908],{"class":403},[288,138699,131911],{"class":298},[288,138701,104],{"class":51473},[288,138703,51480],{"class":298},[19,138705,138706,138707,138709],{},"2 号盒子是 ",[25,138708,131677],{}," 搜索模块定位",[1304,138711,138712,138715,138718,138721],{},[246,138713,138714],{},"search盒子利用定位的方式放在对应的位置",[246,138716,138717],{},"search盒子设置绝对定位，header盒子设置相对定位",[246,138719,138720],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[246,138722,138723],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138725,138491],{},[280,138727,138728],{"className":126652,"code":131972,"language":126654,"meta":205,"style":205},[25,138729,138730,138752,138756,138766],{"__ignoreMap":205},[288,138731,138732,138734,138736,138738,138740,138742,138744,138746,138748,138750],{"class":290,"line":291},[288,138733,51784],{"class":51473},[288,138735,12608],{"class":298},[288,138737,19],{"class":51473},[288,138739,12608],{"class":298},[288,138741,10],{"class":51473},[288,138743,12608],{"class":298},[288,138745,1304],{"class":51473},[288,138747,12608],{"class":298},[288,138749,246],{"class":51473},[288,138751,15745],{"class":298},[288,138753,138754],{"class":290,"line":206},[288,138755,132001],{"class":357},[288,138757,138758,138760,138762,138764],{"class":290,"line":1352},[288,138759,128268],{"class":347},[288,138761,51610],{"class":298},[288,138763,61042],{"class":347},[288,138765,1463],{"class":298},[288,138767,138768],{"class":290,"line":1367},[288,138769,1737],{"class":298},[19,138771,138531],{},[280,138773,138774],{"className":126652,"code":131972,"language":126654,"meta":205,"style":205},[25,138775,138776,138798,138802,138812],{"__ignoreMap":205},[288,138777,138778,138780,138782,138784,138786,138788,138790,138792,138794,138796],{"class":290,"line":291},[288,138779,51784],{"class":51473},[288,138781,12608],{"class":298},[288,138783,19],{"class":51473},[288,138785,12608],{"class":298},[288,138787,10],{"class":51473},[288,138789,12608],{"class":298},[288,138791,1304],{"class":51473},[288,138793,12608],{"class":298},[288,138795,246],{"class":51473},[288,138797,15745],{"class":298},[288,138799,138800],{"class":290,"line":206},[288,138801,132001],{"class":357},[288,138803,138804,138806,138808,138810],{"class":290,"line":1352},[288,138805,128268],{"class":347},[288,138807,51610],{"class":298},[288,138809,61042],{"class":347},[288,138811,1463],{"class":298},[288,138813,138814],{"class":290,"line":1367},[288,138815,1737],{"class":298},[19,138817,138818],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138820,138821,138822,138825],{},"3 号盒子是 ",[25,138823,138824],{},"hotwords"," 热词模块定位",[1304,138827,138828,138831,138834],{},[246,138829,138830],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[246,138832,138833],{},"给里面所有的a标签设置 左右10px的外边距",[246,138835,138836],{},"给第一个a标签设置文字变红色（#c81623）",[19,138838,138491],{},[280,138840,138842],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},"div {\n  margin: 0 auto;\n}\n",[25,138843,138844,138850,138862],{"__ignoreMap":205},[288,138845,138846,138848],{"class":290,"line":291},[288,138847,51784],{"class":51473},[288,138849,15745],{"class":298},[288,138851,138852,138854,138856,138858,138860],{"class":290,"line":206},[288,138853,70643],{"class":347},[288,138855,51610],{"class":298},[288,138857,490],{"class":347},[288,138859,51729],{"class":347},[288,138861,1463],{"class":298},[288,138863,138864],{"class":290,"line":1352},[288,138865,1737],{"class":298},[19,138867,138531],{},[280,138869,138870],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,138871,138872,138878,138890],{"__ignoreMap":205},[288,138873,138874,138876],{"class":290,"line":291},[288,138875,51784],{"class":51473},[288,138877,15745],{"class":298},[288,138879,138880,138882,138884,138886,138888],{"class":290,"line":206},[288,138881,70643],{"class":347},[288,138883,51610],{"class":298},[288,138885,490],{"class":347},[288,138887,51729],{"class":347},[288,138889,1463],{"class":298},[288,138891,138892],{"class":290,"line":1352},[288,138893,1737],{"class":298},[19,138895,138896,138897,138900],{},"4 号盒子是 ",[25,138898,138899],{},"shopcar"," 购物车模块",[1304,138902,138903,138908,138911,138914],{},[246,138904,123508,138905,138907],{},[25,138906,138899],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[246,138909,138910],{},"count 统计部分用绝对定位做",[246,138912,138913],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[246,138915,138916],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138918,138491],{},[280,138920,138921],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,138922,138923,138927,138941,138945,138959,138963,138977,138981,138995,138999],{"__ignoreMap":205},[288,138924,138925],{"class":290,"line":291},[288,138926,132091],{"class":357},[288,138928,138929,138931,138933,138935,138937,138939],{"class":290,"line":206},[288,138930,132096],{"class":2135},[288,138932,79980],{"class":298},[288,138934,129012],{"class":347},[288,138936,51610],{"class":298},[288,138938,132105],{"class":347},[288,138940,129582],{"class":298},[288,138942,138943],{"class":290,"line":1352},[288,138944,132112],{"class":357},[288,138946,138947,138949,138951,138953,138955,138957],{"class":290,"line":1367},[288,138948,132117],{"class":2135},[288,138950,79980],{"class":298},[288,138952,129012],{"class":347},[288,138954,51610],{"class":298},[288,138956,54937],{"class":347},[288,138958,129582],{"class":298},[288,138960,138961],{"class":290,"line":1373},[288,138962,132132],{"class":357},[288,138964,138965,138967,138969,138971,138973,138975],{"class":290,"line":1387},[288,138966,132137],{"class":2135},[288,138968,79980],{"class":298},[288,138970,129012],{"class":347},[288,138972,51610],{"class":298},[288,138974,55004],{"class":347},[288,138976,129582],{"class":298},[288,138978,138979],{"class":290,"line":1393},[288,138980,132152],{"class":357},[288,138982,138983,138985,138987,138989,138991,138993],{"class":290,"line":1484},[288,138984,132157],{"class":2135},[288,138986,79980],{"class":298},[288,138988,129012],{"class":347},[288,138990,51610],{"class":298},[288,138992,86406],{"class":347},[288,138994,129582],{"class":298},[288,138996,138997],{"class":290,"line":1490},[288,138998,132172],{"class":357},[288,139000,139001,139003,139005,139007,139009,139011],{"class":290,"line":1502},[288,139002,132177],{"class":2135},[288,139004,79980],{"class":298},[288,139006,129012],{"class":347},[288,139008,51610],{"class":298},[288,139010,132186],{"class":347},[288,139012,129582],{"class":298},[19,139014,138531],{},[280,139016,139017],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,139018,139019,139023,139037,139041,139055,139059,139073,139077,139091,139095],{"__ignoreMap":205},[288,139020,139021],{"class":290,"line":291},[288,139022,132091],{"class":357},[288,139024,139025,139027,139029,139031,139033,139035],{"class":290,"line":206},[288,139026,132096],{"class":2135},[288,139028,79980],{"class":298},[288,139030,129012],{"class":347},[288,139032,51610],{"class":298},[288,139034,132105],{"class":347},[288,139036,129582],{"class":298},[288,139038,139039],{"class":290,"line":1352},[288,139040,132112],{"class":357},[288,139042,139043,139045,139047,139049,139051,139053],{"class":290,"line":1367},[288,139044,132117],{"class":2135},[288,139046,79980],{"class":298},[288,139048,129012],{"class":347},[288,139050,51610],{"class":298},[288,139052,54937],{"class":347},[288,139054,129582],{"class":298},[288,139056,139057],{"class":290,"line":1373},[288,139058,132132],{"class":357},[288,139060,139061,139063,139065,139067,139069,139071],{"class":290,"line":1387},[288,139062,132137],{"class":2135},[288,139064,79980],{"class":298},[288,139066,129012],{"class":347},[288,139068,51610],{"class":298},[288,139070,55004],{"class":347},[288,139072,129582],{"class":298},[288,139074,139075],{"class":290,"line":1393},[288,139076,132152],{"class":357},[288,139078,139079,139081,139083,139085,139087,139089],{"class":290,"line":1484},[288,139080,132157],{"class":2135},[288,139082,79980],{"class":298},[288,139084,129012],{"class":347},[288,139086,51610],{"class":298},[288,139088,86406],{"class":347},[288,139090,129582],{"class":298},[288,139092,139093],{"class":290,"line":1490},[288,139094,132172],{"class":357},[288,139096,139097,139099,139101,139103,139105,139107],{"class":290,"line":1502},[288,139098,132177],{"class":2135},[288,139100,79980],{"class":298},[288,139102,129012],{"class":347},[288,139104,51610],{"class":298},[288,139106,132186],{"class":347},[288,139108,129582],{"class":298},[260,139110,139112,139113,139115],{"id":139111},"_1544-nav导航模块制作","15.4.4 ",[25,139114,53886],{},"导航模块制作",[200,139117],{"style":202,"src":139118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139120,139121,139123],{},[25,139122,53886],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139125,139126,139127],{},"1 号盒子左侧浮动，",[25,139128,139129],{},"dropdown",[1304,139131,139132,139142,139150,139156,139164,139174,139182,139193],{},[246,139133,139134,139135,101191,139138,139141],{},"1号盒子有讲究，根据相关性 里面包含 ",[25,139136,139137],{},".dt",[25,139139,139140],{},".dd"," 两个盒子",[246,139143,139144,139146,139147,139149],{},[25,139145,139137],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[25,139148,139140],{}," 挤到下面去了",[246,139151,139152,139153,139155],{},"给 ",[25,139154,139140],{}," 盒子设置宽度 和 高度，以及背景颜色",[246,139157,139152,139158,139160,139161,120410],{},[25,139159,139140],{}," 盒子里面定义 无序列表 （",[25,139162,139163],{},"ul > li > a",[246,139165,139166,139167,139169,139170,139173],{},"每个 ",[25,139168,246],{}," 都有一个高度（",[25,139171,139172],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[246,139175,139152,139176,139178,139179,120410],{},[25,139177,246],{}," 里面的a设置文字大小（",[25,139180,139181],{},"14px",[246,139183,139152,139184,139186,139187,139189,139190,139192],{},[25,139185,246],{}," 设置 ",[25,139188,127813],{},"，当鼠标移入的时候，让",[25,139191,246],{},"的背景变成白色，让里面的文字变成红色",[246,139194,139195,139197,139198,139200,139201,139203],{},[25,139196,246],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[25,139199,246],{},"的右侧，那么给",[25,139202,246],{},"设置相对定位",[19,139205,139206],{},"一定要注意相关性",[19,139208,138491],{},[280,139210,139211],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,139212,139213,139221,139231,139241],{"__ignoreMap":205},[288,139214,139215,139217,139219],{"class":290,"line":291},[288,139216,51784],{"class":51473},[288,139218,137653],{"class":2135},[288,139220,15745],{"class":298},[288,139222,139223,139225,139227,139229],{"class":290,"line":206},[288,139224,137660],{"class":347},[288,139226,51610],{"class":298},[288,139228,7825],{"class":403},[288,139230,1463],{"class":298},[288,139232,139233,139235,139237,139239],{"class":290,"line":1352},[288,139234,128268],{"class":347},[288,139236,51610],{"class":298},[288,139238,61042],{"class":347},[288,139240,1463],{"class":298},[288,139242,139243],{"class":290,"line":1367},[288,139244,1737],{"class":298},[19,139246,138531],{},[280,139248,139249],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,139250,139251,139259,139269,139279],{"__ignoreMap":205},[288,139252,139253,139255,139257],{"class":290,"line":291},[288,139254,51784],{"class":51473},[288,139256,137653],{"class":2135},[288,139258,15745],{"class":298},[288,139260,139261,139263,139265,139267],{"class":290,"line":206},[288,139262,137660],{"class":347},[288,139264,51610],{"class":298},[288,139266,7825],{"class":403},[288,139268,1463],{"class":298},[288,139270,139271,139273,139275,139277],{"class":290,"line":1352},[288,139272,128268],{"class":347},[288,139274,51610],{"class":298},[288,139276,61042],{"class":347},[288,139278,1463],{"class":298},[288,139280,139281],{"class":290,"line":1367},[288,139282,1737],{"class":298},[19,139284,139285],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139287,139288,139289,139292],{},"2 号盒子左侧浮动，",[25,139290,139291],{},"navitems"," 导航栏组",[1304,139294,139295,139300,139309],{},[246,139296,139297,139298],{},"里面结构是 ",[25,139299,139163],{},[246,139301,139302,139303,139305,139306,139308],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[25,139304,104],{},"左右的",[25,139307,31056],{},"把两侧撑开",[246,139310,139311],{},"让文字垂直居中（行高等于高度）",[200,139313],{"style":202,"src":139314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139316,139317],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139319,138491],{},[280,139321,139323],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},".box {\n  float: left;\n}\n",[25,139324,139325,139331,139341],{"__ignoreMap":205},[288,139326,139327,139329],{"class":290,"line":291},[288,139328,130500],{"class":2135},[288,139330,15745],{"class":298},[288,139332,139333,139335,139337,139339],{"class":290,"line":206},[288,139334,131132],{"class":347},[288,139336,51610],{"class":298},[288,139338,23909],{"class":347},[288,139340,1463],{"class":298},[288,139342,139343],{"class":290,"line":1352},[288,139344,1737],{"class":298},[19,139346,138531],{},[280,139348,139349],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,139350,139351,139357,139367],{"__ignoreMap":205},[288,139352,139353,139355],{"class":290,"line":291},[288,139354,130500],{"class":2135},[288,139356,15745],{"class":298},[288,139358,139359,139361,139363,139365],{"class":290,"line":206},[288,139360,131132],{"class":347},[288,139362,51610],{"class":298},[288,139364,23909],{"class":347},[288,139366,1463],{"class":298},[288,139368,139369],{"class":290,"line":1352},[288,139370,1737],{"class":298},[19,139372,139373],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[200,139375],{"style":202,"src":139376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[280,139378,139379],{"className":126652,"code":130809,"language":126654,"meta":205,"style":205},[25,139380,139381,139387,139403],{"__ignoreMap":205},[288,139382,139383,139385],{"class":290,"line":291},[288,139384,51784],{"class":51473},[288,139386,15745],{"class":298},[288,139388,139389,139391,139393,139395,139397,139399,139401],{"class":290,"line":206},[288,139390,71069],{"class":347},[288,139392,51610],{"class":298},[288,139394,516],{"class":347},[288,139396,51665],{"class":294},[288,139398,51694],{"class":347},[288,139400,130044],{"class":347},[288,139402,1463],{"class":298},[288,139404,139405],{"class":290,"line":1352},[288,139406,1737],{"class":298},[260,139408,139410],{"id":139409},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[200,139412],{"style":202,"src":139413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1304,139415,139416,139421,139426],{},[246,139417,139418,139420],{},[25,139419,131855],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[246,139422,139423,139425],{},[25,139424,131855],{}," 里面有一个大的版心",[246,139427,139428,139429,139432,139433],{},"版心里面包含 1 号盒子，",[25,139430,139431],{},"mod_service"," 是服务模块，mod 是模块的意思",[1304,139434,139435,139440,139453,139469,139474],{},[246,139436,139152,139437,139439],{},[25,139438,139431],{}," 设置高度（80px）和下边框",[246,139441,139442,139443,139446,139447,139449,139450,139452],{},"在里面定义 ",[25,139444,139445],{},"ul > li"," ,每个",[25,139448,246],{}," 宽度是300px 高度是 50px，给每个",[25,139451,246],{},"设置35px的左内边距",[246,139454,139455,139456,139458,139459,139461,139462,139464,139465,18583,139467,120410],{},"在每个",[25,139457,246],{},"里面，放一个 ",[25,139460,23083],{},"（里面放图标），一个",[25,139463,51784],{},"（里面放",[25,139466,51784],{},[25,139468,19],{},[246,139470,139152,139471,139473],{},[25,139472,23083],{},"设置浮动，让h5与这个div左右排列",[246,139475,139476],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139478,138491],{},[280,139480,139482],{"className":126652,"code":139481,"language":126654,"meta":205,"style":205},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[25,139483,139484,139490,139502,139514,139541],{"__ignoreMap":205},[288,139485,139486,139488],{"class":290,"line":291},[288,139487,134409],{"class":2135},[288,139489,15745],{"class":298},[288,139491,139492,139494,139496,139498,139500],{"class":290,"line":206},[288,139493,70741],{"class":347},[288,139495,51610],{"class":298},[288,139497,997],{"class":347},[288,139499,51665],{"class":294},[288,139501,1463],{"class":298},[288,139503,139504,139506,139508,139510,139512],{"class":290,"line":1352},[288,139505,70961],{"class":347},[288,139507,51610],{"class":298},[288,139509,997],{"class":347},[288,139511,51665],{"class":294},[288,139513,1463],{"class":298},[288,139515,139516,139518,139520,139522,139524,139526,139528,139530,139533,139535,139537,139539],{"class":290,"line":1367},[288,139517,70784],{"class":347},[288,139519,51610],{"class":298},[288,139521,61899],{"class":347},[288,139523,299],{"class":298},[288,139525,134448],{"class":5389},[288,139527,13887],{"class":298},[288,139529,61909],{"class":347},[288,139531,139532],{"class":347}," -10",[288,139534,51665],{"class":294},[288,139536,134467],{"class":347},[288,139538,51665],{"class":294},[288,139540,1463],{"class":298},[288,139542,139543],{"class":290,"line":1373},[288,139544,1737],{"class":298},[19,139546,138531],{},[280,139548,139549],{"className":126652,"code":139481,"language":126654,"meta":205,"style":205},[25,139550,139551,139557,139569,139581,139607],{"__ignoreMap":205},[288,139552,139553,139555],{"class":290,"line":291},[288,139554,134409],{"class":2135},[288,139556,15745],{"class":298},[288,139558,139559,139561,139563,139565,139567],{"class":290,"line":206},[288,139560,70741],{"class":347},[288,139562,51610],{"class":298},[288,139564,997],{"class":347},[288,139566,51665],{"class":294},[288,139568,1463],{"class":298},[288,139570,139571,139573,139575,139577,139579],{"class":290,"line":1352},[288,139572,70961],{"class":347},[288,139574,51610],{"class":298},[288,139576,997],{"class":347},[288,139578,51665],{"class":294},[288,139580,1463],{"class":298},[288,139582,139583,139585,139587,139589,139591,139593,139595,139597,139599,139601,139603,139605],{"class":290,"line":1367},[288,139584,70784],{"class":347},[288,139586,51610],{"class":298},[288,139588,61899],{"class":347},[288,139590,299],{"class":298},[288,139592,134448],{"class":5389},[288,139594,13887],{"class":298},[288,139596,61909],{"class":347},[288,139598,139532],{"class":347},[288,139600,51665],{"class":294},[288,139602,134467],{"class":347},[288,139604,51665],{"class":294},[288,139606,1463],{"class":298},[288,139608,139609],{"class":290,"line":1373},[288,139610,1737],{"class":298},[19,139612,139613],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1304,139615,139616,139619,139625,139631,139643],{},[246,139617,139618],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[246,139620,139621,139622,120410],{},"里面的布局利用 自定义列表来实现（",[25,139623,139624],{},"dl > dt + dd",[246,139626,139152,139627,139630],{},[25,139628,139629],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[246,139632,139152,139633,139636,139637,18583,139639,139642],{},[25,139634,139635],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[25,139638,139635],{},[25,139640,139641],{},"dd","之间有些距离",[246,139644,139645],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139647,138491],{},[280,139649,139650],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,139651,139652,139658,139670],{"__ignoreMap":205},[288,139653,139654,139656],{"class":290,"line":291},[288,139655,51784],{"class":51473},[288,139657,15745],{"class":298},[288,139659,139660,139662,139664,139666,139668],{"class":290,"line":206},[288,139661,70643],{"class":347},[288,139663,51610],{"class":298},[288,139665,490],{"class":347},[288,139667,51729],{"class":347},[288,139669,1463],{"class":298},[288,139671,139672],{"class":290,"line":1352},[288,139673,1737],{"class":298},[19,139675,138531],{},[280,139677,139678],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,139679,139680,139686,139698],{"__ignoreMap":205},[288,139681,139682,139684],{"class":290,"line":291},[288,139683,51784],{"class":51473},[288,139685,15745],{"class":298},[288,139687,139688,139690,139692,139694,139696],{"class":290,"line":206},[288,139689,70643],{"class":347},[288,139691,51610],{"class":298},[288,139693,490],{"class":347},[288,139695,51729],{"class":347},[288,139697,1463],{"class":298},[288,139699,139700],{"class":290,"line":1352},[288,139701,1737],{"class":298},[19,139703,139704],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1304,139706,139707,139716,139719,139730],{},[246,139708,139709,139710,139712,139713,139715],{},"分为上下两块，上面是 ",[25,139711,131872],{}," 友情链接，下面是 ",[25,139714,131865],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[246,139717,139718],{},"把内容分别复制到相应模块中",[246,139720,139152,139721,139723,139724,139726,139727,139729],{},[25,139722,131872],{}," 设置 15px 的下外边距，给",[25,139725,131872],{}," 里面 的 ",[25,139728,104],{}," 标签设置 左右 3px 的外边距",[246,139731,139732,139733,139735],{},"给",[25,139734,131865],{}," 设置 20px 的行高",[19,139737,138491],{},[280,139739,139740],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,139741,139742,139748,139760],{"__ignoreMap":205},[288,139743,139744,139746],{"class":290,"line":291},[288,139745,51784],{"class":51473},[288,139747,15745],{"class":298},[288,139749,139750,139752,139754,139756,139758],{"class":290,"line":206},[288,139751,70643],{"class":347},[288,139753,51610],{"class":298},[288,139755,490],{"class":347},[288,139757,51729],{"class":347},[288,139759,1463],{"class":298},[288,139761,139762],{"class":290,"line":1352},[288,139763,1737],{"class":298},[19,139765,138531],{},[280,139767,139768],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,139769,139770,139776,139788],{"__ignoreMap":205},[288,139771,139772,139774],{"class":290,"line":291},[288,139773,51784],{"class":51473},[288,139775,15745],{"class":298},[288,139777,139778,139780,139782,139784,139786],{"class":290,"line":206},[288,139779,70643],{"class":347},[288,139781,51610],{"class":298},[288,139783,490],{"class":347},[288,139785,51729],{"class":347},[288,139787,1463],{"class":298},[288,139789,139790],{"class":290,"line":1352},[288,139791,1737],{"class":298},[19,139793,139794],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5299,139796,139797],{},"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":205,"searchDepth":206,"depth":206,"links":139799},[139800,139801,139802,139809],{"id":138080,"depth":206,"text":138081},{"id":138099,"depth":206,"text":138100},{"id":138126,"depth":206,"text":138127,"children":139803},[139804,139805,139806,139807,139808],{"id":138130,"depth":1352,"text":138131},{"id":138143,"depth":1352,"text":138144},{"id":138167,"depth":1352,"text":138168},{"id":138189,"depth":1352,"text":138190},{"id":138261,"depth":1352,"text":138262},{"id":138387,"depth":206,"text":138388,"children":139810},[139811,139812,139813,139814,139816],{"id":138391,"depth":1352,"text":138392},{"id":138398,"depth":1352,"text":138399},{"id":138570,"depth":1352,"text":138571},{"id":139111,"depth":1352,"text":139815},"15.4.4 nav导航模块制作",{"id":139409,"depth":1352,"text":139410},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138072,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139823,"title":139824,"body":139825,"description":214,"extension":215,"meta":142227,"navigation":217,"path":142228,"seo":142229,"stem":142230,"__hash__":142231},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139826,"toc":142204},[139827,139830,139834,139838,139850,139853,139856,139859,139870,139872,139896,139898,139922,139927,139930,139932,139968,139970,140006,140009,140014,140017,140020,140023,140053,140060,140063,140073,140075,140109,140112,140146,140152,140169,140171,140207,140209,140245,140250,140275,140277,140303,140305,140329,140336,140339,140403,140405,140447,140449,140489,140496,140501,140503,140533,140535,140565,140569,140572,140579,140591,140593,140619,140621,140645,140648,140650,140674,140680,140690,140692,140722,140724,140754,140761,140802,140804,140840,140842,140878,140882,140885,140888,140891,140897,140902,140905,140928,140931,140955,140958,140982,140987,140990,140993,140996,140999,141002,141076,141078,141108,141110,141140,141143,141146,141178,141182,141186,141200,141209,141212,141217,141219,141313,141315,141409,141432,141434,141458,141460,141484,141491,141494,141504,141506,141530,141535,141543,141545,141575,141580,141620,141622,141648,141650,141676,141680,141683,141688,141691,141695,141703,141710,141718,141720,141750,141752,141782,141790,141793,141796,141798,141828,141830,141860,141863,141868,141870,141894,141896,141920,141923,142008,142010,142034,142036,142060,142064,142066,142090,142092,142126,142130,142144,142147,142152,142155,142160,142163,142193,142201],[10,139828,139824],{"id":139829},"_16-品优购项目下篇-主体与页面开发",[14,139831,139833],{"id":139832},"_161-项目主体模块制作","16.1 项目主体模块制作",[260,139835,139837],{"id":139836},"_1611-首页制作","16.1.1 首页制作",[19,139839,139840,139842,139843,139845,139846,139849],{},[448,139841,102231],{}," 主体模块是 ",[448,139844,74231],{}," 里面专有的，注意需要新的样式文件 ",[448,139847,139848],{},"index.css，"," 就不要写在common.css中了",[200,139851],{"style":202,"src":139852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[200,139854],{"style":202,"src":139855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139857,139858],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1304,139860,139861,139864,139867],{},[246,139862,139863],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[246,139865,139866],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[246,139868,139869],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139871,138491],{},[280,139873,139874],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,139875,139876,139882,139892],{"__ignoreMap":205},[288,139877,139878,139880],{"class":290,"line":291},[288,139879,130500],{"class":2135},[288,139881,15745],{"class":298},[288,139883,139884,139886,139888,139890],{"class":290,"line":206},[288,139885,131132],{"class":347},[288,139887,51610],{"class":298},[288,139889,23909],{"class":347},[288,139891,1463],{"class":298},[288,139893,139894],{"class":290,"line":1352},[288,139895,1737],{"class":298},[19,139897,138531],{},[280,139899,139900],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,139901,139902,139908,139918],{"__ignoreMap":205},[288,139903,139904,139906],{"class":290,"line":291},[288,139905,130500],{"class":2135},[288,139907,15745],{"class":298},[288,139909,139910,139912,139914,139916],{"class":290,"line":206},[288,139911,131132],{"class":347},[288,139913,51610],{"class":298},[288,139915,23909],{"class":347},[288,139917,1463],{"class":298},[288,139919,139920],{"class":290,"line":1352},[288,139921,1737],{"class":298},[243,139923,139924],{},[246,139925,139926],{},"左侧focus模块制作",[200,139928],{"style":202,"src":139929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139931,138491],{},[280,139933,139934],{"className":126652,"code":127975,"language":126654,"meta":205,"style":205},[25,139935,139936,139944,139954,139964],{"__ignoreMap":205},[288,139937,139938,139940,139942],{"class":290,"line":291},[288,139939,53994],{"class":51473},[288,139941,62073],{"class":2135},[288,139943,15745],{"class":298},[288,139945,139946,139948,139950,139952],{"class":290,"line":206},[288,139947,127990],{"class":347},[288,139949,51610],{"class":298},[288,139951,55062],{"class":347},[288,139953,1463],{"class":298},[288,139955,139956,139958,139960,139962],{"class":290,"line":1352},[288,139957,70971],{"class":347},[288,139959,51610],{"class":298},[288,139961,54910],{"class":347},[288,139963,1463],{"class":298},[288,139965,139966],{"class":290,"line":1367},[288,139967,1737],{"class":298},[19,139969,138531],{},[280,139971,139972],{"className":126652,"code":127975,"language":126654,"meta":205,"style":205},[25,139973,139974,139982,139992,140002],{"__ignoreMap":205},[288,139975,139976,139978,139980],{"class":290,"line":291},[288,139977,53994],{"class":51473},[288,139979,62073],{"class":2135},[288,139981,15745],{"class":298},[288,139983,139984,139986,139988,139990],{"class":290,"line":206},[288,139985,127990],{"class":347},[288,139987,51610],{"class":298},[288,139989,55062],{"class":347},[288,139991,1463],{"class":298},[288,139993,139994,139996,139998,140000],{"class":290,"line":1352},[288,139995,70971],{"class":347},[288,139997,51610],{"class":298},[288,139999,54910],{"class":347},[288,140001,1463],{"class":298},[288,140003,140004],{"class":290,"line":1367},[288,140005,1737],{"class":298},[19,140007,140008],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[243,140010,140011],{"start":206},[246,140012,140013],{},"右侧newsflash模块制作",[200,140015],{"style":202,"src":140016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140018,140019],{},"右侧的模块 分为上中下三个盒子",[19,140021,140022],{},"结构代码：",[280,140024,140025],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,140026,140027],{"__ignoreMap":205},[288,140028,140029,140031,140033,140035,140037,140039,140041,140043,140045,140047,140049,140051],{"class":290,"line":291},[288,140030,1207],{"class":298},[288,140032,200],{"class":51473},[288,140034,55412],{"class":2135},[288,140036,344],{"class":298},[288,140038,134169],{"class":403},[288,140040,55420],{"class":2135},[288,140042,344],{"class":298},[288,140044,134176],{"class":403},[288,140046,134179],{"class":2135},[288,140048,344],{"class":298},[288,140050,134184],{"class":403},[288,140052,51480],{"class":298},[19,140054,140055,140056,140059],{},"1 号盒子为 ",[25,140057,140058],{},"news"," 新闻模块 高度为 165px",[200,140061],{"style":202,"src":140062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140064,140065,140066,140069,140070],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[25,140067,140068],{},"news-hd","，下面是 ",[25,140071,140072],{},"news-bd",[19,140074,140022],{},[280,140076,140077],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,140078,140079,140083,140097,140101],{"__ignoreMap":205},[288,140080,140081],{"class":290,"line":291},[288,140082,130763],{"class":357},[288,140084,140085,140087,140089,140091,140093,140095],{"class":290,"line":206},[288,140086,1207],{"class":298},[288,140088,51784],{"class":51473},[288,140090,53659],{"class":2135},[288,140092,344],{"class":298},[288,140094,130776],{"class":403},[288,140096,51480],{"class":298},[288,140098,140099],{"class":290,"line":1352},[288,140100,130783],{"class":298},[288,140102,140103,140105,140107],{"class":290,"line":1367},[288,140104,51958],{"class":298},[288,140106,51784],{"class":51473},[288,140108,51480],{"class":298},[19,140110,140111],{},"样式代码：",[280,140113,140114],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,140115,140116,140120,140134,140138],{"__ignoreMap":205},[288,140117,140118],{"class":290,"line":291},[288,140119,130763],{"class":357},[288,140121,140122,140124,140126,140128,140130,140132],{"class":290,"line":206},[288,140123,1207],{"class":298},[288,140125,51784],{"class":51473},[288,140127,53659],{"class":2135},[288,140129,344],{"class":298},[288,140131,130776],{"class":403},[288,140133,51480],{"class":298},[288,140135,140136],{"class":290,"line":1352},[288,140137,130783],{"class":298},[288,140139,140140,140142,140144],{"class":290,"line":1367},[288,140141,51958],{"class":298},[288,140143,51784],{"class":51473},[288,140145,51480],{"class":298},[19,140147,140148,140149,140151],{},"上面是",[25,140150,140068],{},"，设置高度是 33px，设置下边框",[1304,140153,140154,140160],{},[246,140155,140156,140157,140159],{},"里面放一个",[25,140158,23083],{}," 标题",[246,140161,140162,140163,140165,140166,140168],{},"放一个a",[25,140164,102866],{},"，内容是 更多，然后让 ",[25,140167,104],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140170,140022],{},[280,140172,140173],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,140174,140175,140183,140193,140203],{"__ignoreMap":205},[288,140176,140177,140179,140181],{"class":290,"line":291},[288,140178,51784],{"class":51473},[288,140180,137653],{"class":2135},[288,140182,15745],{"class":298},[288,140184,140185,140187,140189,140191],{"class":290,"line":206},[288,140186,137660],{"class":347},[288,140188,51610],{"class":298},[288,140190,7825],{"class":403},[288,140192,1463],{"class":298},[288,140194,140195,140197,140199,140201],{"class":290,"line":1352},[288,140196,128268],{"class":347},[288,140198,51610],{"class":298},[288,140200,61042],{"class":347},[288,140202,1463],{"class":298},[288,140204,140205],{"class":290,"line":1367},[288,140206,1737],{"class":298},[19,140208,140111],{},[280,140210,140211],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,140212,140213,140221,140231,140241],{"__ignoreMap":205},[288,140214,140215,140217,140219],{"class":290,"line":291},[288,140216,51784],{"class":51473},[288,140218,137653],{"class":2135},[288,140220,15745],{"class":298},[288,140222,140223,140225,140227,140229],{"class":290,"line":206},[288,140224,137660],{"class":347},[288,140226,51610],{"class":298},[288,140228,7825],{"class":403},[288,140230,1463],{"class":298},[288,140232,140233,140235,140237,140239],{"class":290,"line":1352},[288,140234,128268],{"class":347},[288,140236,51610],{"class":298},[288,140238,61042],{"class":347},[288,140240,1463],{"class":298},[288,140242,140243],{"class":290,"line":1367},[288,140244,1737],{"class":298},[19,140246,140247,140248],{},"下面是",[25,140249,140072],{},[1304,140251,140252,140260],{},[246,140253,140254,140255,101191,140257,140259],{},"里面包含 ",[25,140256,1304],{},[25,140258,246],{}," 还有链接",[246,140261,139732,140262,140264,140265,140267,140268,140271,140272],{},[25,140263,246],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[25,140266,131318],{}," 2.设置 ",[25,140269,140270],{},"white-space: nowrap;"," 3. 设置 ",[25,140273,140274],{},"text-overflow: ellipsis;",[19,140276,140022],{},[280,140278,140280],{"className":126652,"code":140279,"language":126654,"meta":205,"style":205},"div {\n  overflow: hidden;\n}\n",[25,140281,140282,140288,140299],{"__ignoreMap":205},[288,140283,140284,140286],{"class":290,"line":291},[288,140285,51784],{"class":51473},[288,140287,15745],{"class":298},[288,140289,140290,140293,140295,140297],{"class":290,"line":206},[288,140291,140292],{"class":347},"  overflow",[288,140294,51610],{"class":298},[288,140296,61887],{"class":347},[288,140298,1463],{"class":298},[288,140300,140301],{"class":290,"line":1352},[288,140302,1737],{"class":298},[19,140304,140111],{},[280,140306,140307],{"className":126652,"code":140279,"language":126654,"meta":205,"style":205},[25,140308,140309,140315,140325],{"__ignoreMap":205},[288,140310,140311,140313],{"class":290,"line":291},[288,140312,51784],{"class":51473},[288,140314,15745],{"class":298},[288,140316,140317,140319,140321,140323],{"class":290,"line":206},[288,140318,140292],{"class":347},[288,140320,51610],{"class":298},[288,140322,61887],{"class":347},[288,140324,1463],{"class":298},[288,140326,140327],{"class":290,"line":1352},[288,140328,1737],{"class":298},[19,140330,140331,140332,140335],{},"2 号盒子为 ",[25,140333,140334],{},"lifeservice"," 生活服务模块 高度为 209px",[200,140337],{"style":202,"src":140338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1304,140340,140341,140344,140354,140378,140389],{},[246,140342,140343],{},"设置边框（左右下边框）",[246,140345,140346,140347,140350,140351,140353],{},"里面的内容 是 ",[25,140348,140349],{},"ul > 12*li","，给",[25,140352,246],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[246,140355,140356,140357],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1304,140358,140359,140364,140373],{},[246,140360,140361,140363],{},[25,140362,140334],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[246,140365,140366,140367,140369,140370,140372],{},"可以让 ",[25,140368,140334],{}," 里面的 ",[25,140371,1304],{}," 宽度为 252，就可以装的下 4 个 小 li",[246,140374,140375,140377],{},[25,140376,140334],{}," 盒子 overflow 隐藏多余的部分就可以了",[246,140379,116640,140380,140382,140383,140385,140386,140388],{},[25,140381,246],{}," 里面放一个 ",[25,140384,738],{},"（里面放图标），下面的文本用 ",[25,140387,19],{}," 标签包裹",[246,140390,139152,140391,140393,140394,140396,140397,139186,140399,140402],{},[25,140392,738],{}," 设置 24px宽和28px的高（注意 ",[25,140395,738],{}," 是行内元素， 转成行内块），给 ",[25,140398,246],{},[25,140400,140401],{},"text-align:center"," 让里面内容居中显示",[19,140404,140022],{},[280,140406,140408],{"className":126652,"code":140407,"language":126654,"meta":205,"style":205},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[25,140409,140410,140428,140433,140443],{"__ignoreMap":205},[288,140411,140412,140414,140416,140418,140420,140422,140424,140426],{"class":290,"line":291},[288,140413,288],{"class":51473},[288,140415,12608],{"class":298},[288,140417,104],{"class":51473},[288,140419,12608],{"class":298},[288,140421,23726],{"class":51473},[288,140423,12608],{"class":298},[288,140425,448],{"class":51473},[288,140427,15745],{"class":298},[288,140429,140430],{"class":290,"line":206},[288,140431,140432],{"class":357},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[288,140434,140435,140437,140439,140441],{"class":290,"line":1352},[288,140436,128268],{"class":347},[288,140438,51610],{"class":298},[288,140440,128330],{"class":347},[288,140442,1463],{"class":298},[288,140444,140445],{"class":290,"line":1367},[288,140446,1737],{"class":298},[19,140448,140111],{},[280,140450,140451],{"className":126652,"code":140407,"language":126654,"meta":205,"style":205},[25,140452,140453,140471,140475,140485],{"__ignoreMap":205},[288,140454,140455,140457,140459,140461,140463,140465,140467,140469],{"class":290,"line":291},[288,140456,288],{"class":51473},[288,140458,12608],{"class":298},[288,140460,104],{"class":51473},[288,140462,12608],{"class":298},[288,140464,23726],{"class":51473},[288,140466,12608],{"class":298},[288,140468,448],{"class":51473},[288,140470,15745],{"class":298},[288,140472,140473],{"class":290,"line":206},[288,140474,140432],{"class":357},[288,140476,140477,140479,140481,140483],{"class":290,"line":1352},[288,140478,128268],{"class":347},[288,140480,51610],{"class":298},[288,140482,128330],{"class":347},[288,140484,1463],{"class":298},[288,140486,140487],{"class":290,"line":1367},[288,140488,1737],{"class":298},[19,140490,140491,140492,140495],{},"3 号盒子为 ",[25,140493,140494],{},"bargain"," 特价商品",[1304,140497,140498],{},[246,140499,140500],{},"这个比较简单，直接插入一张图片即可",[19,140502,140022],{},[280,140504,140505],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,140506,140507],{"__ignoreMap":205},[288,140508,140509,140511,140513,140515,140517,140519,140521,140523,140525,140527,140529,140531],{"class":290,"line":291},[288,140510,1207],{"class":298},[288,140512,200],{"class":51473},[288,140514,55412],{"class":2135},[288,140516,344],{"class":298},[288,140518,134169],{"class":403},[288,140520,55420],{"class":2135},[288,140522,344],{"class":298},[288,140524,134176],{"class":403},[288,140526,134179],{"class":2135},[288,140528,344],{"class":298},[288,140530,134184],{"class":403},[288,140532,51480],{"class":298},[19,140534,140111],{},[280,140536,140537],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,140538,140539],{"__ignoreMap":205},[288,140540,140541,140543,140545,140547,140549,140551,140553,140555,140557,140559,140561,140563],{"class":290,"line":291},[288,140542,1207],{"class":298},[288,140544,200],{"class":51473},[288,140546,55412],{"class":2135},[288,140548,344],{"class":298},[288,140550,134169],{"class":403},[288,140552,55420],{"class":2135},[288,140554,344],{"class":298},[288,140556,134176],{"class":403},[288,140558,134179],{"class":2135},[288,140560,344],{"class":298},[288,140562,134184],{"class":403},[288,140564,51480],{"class":298},[260,140566,140568],{"id":140567},"_1612-推荐模块制作","16.1.2 推荐模块制作",[200,140570],{"style":202,"src":140571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140573,140574,140575,140578],{},"大盒子 ",[25,140576,140577],{},"recom"," 推荐模块 recommend",[1304,140580,140581],{},[246,140582,140583,140584,140586,140587,140590],{},"给这个 ",[25,140585,140577],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[25,140588,140589],{},"#ebebeb","），设置距离上边 12px",[19,140592,140022],{},[280,140594,140596],{"className":126652,"code":140595,"language":126654,"meta":205,"style":205},"div {\n  background-color: #f0f0f0;\n}\n",[25,140597,140598,140604,140615],{"__ignoreMap":205},[288,140599,140600,140602],{"class":290,"line":291},[288,140601,51784],{"class":51473},[288,140603,15745],{"class":298},[288,140605,140606,140608,140610,140613],{"class":290,"line":206},[288,140607,71051],{"class":347},[288,140609,51610],{"class":298},[288,140611,140612],{"class":347},"#f0f0f0",[288,140614,1463],{"class":298},[288,140616,140617],{"class":290,"line":1352},[288,140618,1737],{"class":298},[19,140620,140111],{},[280,140622,140623],{"className":126652,"code":140595,"language":126654,"meta":205,"style":205},[25,140624,140625,140631,140641],{"__ignoreMap":205},[288,140626,140627,140629],{"class":290,"line":291},[288,140628,51784],{"class":51473},[288,140630,15745],{"class":298},[288,140632,140633,140635,140637,140639],{"class":290,"line":206},[288,140634,71051],{"class":347},[288,140636,51610],{"class":298},[288,140638,140612],{"class":347},[288,140640,1463],{"class":298},[288,140642,140643],{"class":290,"line":1352},[288,140644,1737],{"class":298},[19,140646,140647],{},"里面包含 2 个盒子， 浮动即可",[19,140649,140022],{},[280,140651,140652],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,140653,140654,140660,140670],{"__ignoreMap":205},[288,140655,140656,140658],{"class":290,"line":291},[288,140657,130500],{"class":2135},[288,140659,15745],{"class":298},[288,140661,140662,140664,140666,140668],{"class":290,"line":206},[288,140663,131132],{"class":347},[288,140665,51610],{"class":298},[288,140667,23909],{"class":347},[288,140669,1463],{"class":298},[288,140671,140672],{"class":290,"line":1352},[288,140673,1737],{"class":298},[19,140675,140676,140677],{},"1 号盒子 ",[25,140678,140679],{},"recom_hd",[1304,140681,140682,140685],{},[246,140683,140684],{},"设置宽度205px，高度163px",[246,140686,140156,140687,140689],{},[25,140688,200],{},"标签，插入图片即可",[19,140691,140022],{},[280,140693,140694],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,140695,140696],{"__ignoreMap":205},[288,140697,140698,140700,140702,140704,140706,140708,140710,140712,140714,140716,140718,140720],{"class":290,"line":291},[288,140699,1207],{"class":298},[288,140701,200],{"class":51473},[288,140703,55412],{"class":2135},[288,140705,344],{"class":298},[288,140707,134169],{"class":403},[288,140709,55420],{"class":2135},[288,140711,344],{"class":298},[288,140713,134176],{"class":403},[288,140715,134179],{"class":2135},[288,140717,344],{"class":298},[288,140719,134184],{"class":403},[288,140721,51480],{"class":298},[19,140723,140111],{},[280,140725,140726],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,140727,140728],{"__ignoreMap":205},[288,140729,140730,140732,140734,140736,140738,140740,140742,140744,140746,140748,140750,140752],{"class":290,"line":291},[288,140731,1207],{"class":298},[288,140733,200],{"class":51473},[288,140735,55412],{"class":2135},[288,140737,344],{"class":298},[288,140739,134169],{"class":403},[288,140741,55420],{"class":2135},[288,140743,344],{"class":298},[288,140745,134176],{"class":403},[288,140747,134179],{"class":2135},[288,140749,344],{"class":298},[288,140751,134184],{"class":403},[288,140753,51480],{"class":298},[19,140755,140756,140757,140760],{},"2 号盒子 ",[25,140758,140759],{},"recom_bd"," ，注意里面的小竖线",[1304,140762,140763,140774,140777,140782,140787],{},[246,140764,140765,140766,140768,140769,140771,140772],{},"右侧结构里面放 ",[25,140767,1304],{}," 包含 4个 ",[25,140770,246],{},"，每个li里面包含一个",[25,140773,200],{},[246,140775,140776],{},"直接利用切片工具把里面的内容当成一张图片",[246,140778,139152,140779,140781],{},[25,140780,246],{}," 设置浮动",[246,140783,139152,140784,140786],{},[25,140785,200],{}," 设置宽高，宽度 248px，高度 163px",[246,140788,140789,140790,140350,140793,140795,140796,140798,140799],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[25,140791,140792],{},"top 10px",[25,140794,246],{},"设置相对定位（注意，最后一个",[25,140797,246],{},"不用设置伪元素），可以利用 ",[25,140800,140801],{},"nth-child(-n+3){...}",[19,140803,140022],{},[280,140805,140806],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,140807,140808,140816,140826,140836],{"__ignoreMap":205},[288,140809,140810,140812,140814],{"class":290,"line":291},[288,140811,51784],{"class":51473},[288,140813,137653],{"class":2135},[288,140815,15745],{"class":298},[288,140817,140818,140820,140822,140824],{"class":290,"line":206},[288,140819,137660],{"class":347},[288,140821,51610],{"class":298},[288,140823,7825],{"class":403},[288,140825,1463],{"class":298},[288,140827,140828,140830,140832,140834],{"class":290,"line":1352},[288,140829,128268],{"class":347},[288,140831,51610],{"class":298},[288,140833,61042],{"class":347},[288,140835,1463],{"class":298},[288,140837,140838],{"class":290,"line":1367},[288,140839,1737],{"class":298},[19,140841,140111],{},[280,140843,140844],{"className":126652,"code":138494,"language":126654,"meta":205,"style":205},[25,140845,140846,140854,140864,140874],{"__ignoreMap":205},[288,140847,140848,140850,140852],{"class":290,"line":291},[288,140849,51784],{"class":51473},[288,140851,137653],{"class":2135},[288,140853,15745],{"class":298},[288,140855,140856,140858,140860,140862],{"class":290,"line":206},[288,140857,137660],{"class":347},[288,140859,51610],{"class":298},[288,140861,7825],{"class":403},[288,140863,1463],{"class":298},[288,140865,140866,140868,140870,140872],{"class":290,"line":1352},[288,140867,128268],{"class":347},[288,140869,51610],{"class":298},[288,140871,61042],{"class":347},[288,140873,1463],{"class":298},[288,140875,140876],{"class":290,"line":1367},[288,140877,1737],{"class":298},[260,140879,140881],{"id":140880},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[200,140883],{"style":202,"src":140884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140886,140887],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140889,140890],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140892,140893,140896],{},[25,140894,140895],{},"box_hd"," 制作",[19,140898,140676,140899,140901],{},[25,140900,140895],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[200,140903],{"style":202,"src":140904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1304,140906,140907,140912,140917,140920],{},[246,140908,140909,140911],{},[25,140910,140895],{}," 给 30px 的高度，2个像素的下边框",[246,140913,140914,140915],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[25,140916,139163],{},[246,140918,140919],{},"左侧盒左浮动，右侧盒子右浮动",[246,140921,140922,140924,140925,140927],{},[25,140923,104],{},"标签之间的距离用左右的",[25,140926,31056],{},"撑开即可",[19,140929,140930],{},"结构代码",[280,140932,140933],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,140934,140935,140941,140951],{"__ignoreMap":205},[288,140936,140937,140939],{"class":290,"line":291},[288,140938,130500],{"class":2135},[288,140940,15745],{"class":298},[288,140942,140943,140945,140947,140949],{"class":290,"line":206},[288,140944,131132],{"class":347},[288,140946,51610],{"class":298},[288,140948,23909],{"class":347},[288,140950,1463],{"class":298},[288,140952,140953],{"class":290,"line":1352},[288,140954,1737],{"class":298},[19,140956,140957],{},"样式代码",[280,140959,140960],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,140961,140962,140968,140978],{"__ignoreMap":205},[288,140963,140964,140966],{"class":290,"line":291},[288,140965,130500],{"class":2135},[288,140967,15745],{"class":298},[288,140969,140970,140972,140974,140976],{"class":290,"line":206},[288,140971,131132],{"class":347},[288,140973,51610],{"class":298},[288,140975,23909],{"class":347},[288,140977,1463],{"class":298},[288,140979,140980],{"class":290,"line":1352},[288,140981,1737],{"class":298},[19,140983,140984,140896],{},[25,140985,140986],{},"box_bd",[19,140988,140989],{},"2 号盒子 box_bd，不要给高度",[200,140991],{"style":202,"src":140992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140994,140995],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140997,140998],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141000,141001],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1304,141003,141004,141016,141032],{},[246,141005,141006,141008,141009,141012,141013,141015],{},[25,141007,140986],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[25,141010,141011],{},"tab_content","，在",[25,141014,141011],{}," 里面包裹tab选项卡对应的内容",[246,141017,141018,141019,141022,141023,141025,141026,141028,141029,141031],{},"内容被一个大盒子包裹（",[25,141020,141021],{},"tab_list_item","），里面是 ",[25,141024,1304],{}," 包裹 5个 ",[25,141027,246],{},"，每个",[25,141030,246],{},"设置对应的宽度，然后设置浮动",[246,141033,141034,141035,141037,141038,141040,141041],{},"而这5个",[25,141036,246],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[25,141039,246],{},"设置",[1304,141042,141043,141061,141064],{},[246,141044,141045,141046,141048,141049,141051,141052,141054,141055,141057,141058,141060],{},"第一个小 ",[25,141047,246],{}," 分为上下结构，上面是 ",[25,141050,1304],{}," 包裹 ",[25,141053,246],{}," ，",[25,141056,246],{},"里面包裹 ",[25,141059,104],{},"，下面插入一张图片",[246,141062,141063],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[246,141065,141066,141067,141069,141070,141072,141073,141075],{},"后面的小 ",[25,141068,246],{}," 里面先放一个",[25,141071,104],{},"标签，然后在",[25,141074,104],{},"标签里面插入图片即可",[19,141077,140930],{},[280,141079,141080],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,141081,141082],{"__ignoreMap":205},[288,141083,141084,141086,141088,141090,141092,141094,141096,141098,141100,141102,141104,141106],{"class":290,"line":291},[288,141085,1207],{"class":298},[288,141087,200],{"class":51473},[288,141089,55412],{"class":2135},[288,141091,344],{"class":298},[288,141093,134169],{"class":403},[288,141095,55420],{"class":2135},[288,141097,344],{"class":298},[288,141099,134176],{"class":403},[288,141101,134179],{"class":2135},[288,141103,344],{"class":298},[288,141105,134184],{"class":403},[288,141107,51480],{"class":298},[19,141109,140957],{},[280,141111,141112],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,141113,141114],{"__ignoreMap":205},[288,141115,141116,141118,141120,141122,141124,141126,141128,141130,141132,141134,141136,141138],{"class":290,"line":291},[288,141117,1207],{"class":298},[288,141119,200],{"class":51473},[288,141121,55412],{"class":2135},[288,141123,344],{"class":298},[288,141125,134169],{"class":403},[288,141127,55420],{"class":2135},[288,141129,344],{"class":298},[288,141131,134176],{"class":403},[288,141133,134179],{"class":2135},[288,141135,344],{"class":298},[288,141137,134184],{"class":403},[288,141139,51480],{"class":298},[19,141141,141142],{},"tab栏切换需求！！！！！！介绍：",[200,141144],{"style":202,"src":141145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1304,141147,141148,141156,141162,141165],{},[246,141149,141150,141153,141154],{},[25,141151,141152],{},"tab","栏的布局是 ",[25,141155,139163],{},[246,141157,141158,141159,141161],{},"有多少个",[25,141160,141152],{},"选项卡，那么对应就有多少个内容",[246,141163,141164],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[246,141166,141167,141168,141171,141172,141174,141175,141177],{},"等后面我们学习了",[25,141169,141170],{},"js","之后，我们就会配合",[25,141173,141170],{},"来实现，",[25,141176,141152],{},"栏的切换",[14,141179,141181],{"id":141180},"_162-列表制作","16.2 列表制作",[260,141183,141185],{"id":141184},"_1621-准备工作","16.2.1 准备工作",[1304,141187,141188,141191,141194,141197],{},[246,141189,141190],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[246,141192,141193],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[246,141195,141196],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[246,141198,141199],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[260,141201,141203,141204,101191,141206,141208],{"id":141202},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[25,141205,131657],{},[25,141207,53886],{}," 修改",[200,141210],{"style":202,"src":141211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1304,141213,141214],{},[246,141215,141216],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141218,140022],{},[280,141220,141221],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,141222,141223,141227,141241,141245,141259,141263,141277,141281,141295,141299],{"__ignoreMap":205},[288,141224,141225],{"class":290,"line":291},[288,141226,132091],{"class":357},[288,141228,141229,141231,141233,141235,141237,141239],{"class":290,"line":206},[288,141230,132096],{"class":2135},[288,141232,79980],{"class":298},[288,141234,129012],{"class":347},[288,141236,51610],{"class":298},[288,141238,132105],{"class":347},[288,141240,129582],{"class":298},[288,141242,141243],{"class":290,"line":1352},[288,141244,132112],{"class":357},[288,141246,141247,141249,141251,141253,141255,141257],{"class":290,"line":1367},[288,141248,132117],{"class":2135},[288,141250,79980],{"class":298},[288,141252,129012],{"class":347},[288,141254,51610],{"class":298},[288,141256,54937],{"class":347},[288,141258,129582],{"class":298},[288,141260,141261],{"class":290,"line":1373},[288,141262,132132],{"class":357},[288,141264,141265,141267,141269,141271,141273,141275],{"class":290,"line":1387},[288,141266,132137],{"class":2135},[288,141268,79980],{"class":298},[288,141270,129012],{"class":347},[288,141272,51610],{"class":298},[288,141274,55004],{"class":347},[288,141276,129582],{"class":298},[288,141278,141279],{"class":290,"line":1393},[288,141280,132152],{"class":357},[288,141282,141283,141285,141287,141289,141291,141293],{"class":290,"line":1484},[288,141284,132157],{"class":2135},[288,141286,79980],{"class":298},[288,141288,129012],{"class":347},[288,141290,51610],{"class":298},[288,141292,86406],{"class":347},[288,141294,129582],{"class":298},[288,141296,141297],{"class":290,"line":1490},[288,141298,132172],{"class":357},[288,141300,141301,141303,141305,141307,141309,141311],{"class":290,"line":1502},[288,141302,132177],{"class":2135},[288,141304,79980],{"class":298},[288,141306,129012],{"class":347},[288,141308,51610],{"class":298},[288,141310,132186],{"class":347},[288,141312,129582],{"class":298},[19,141314,140111],{},[280,141316,141317],{"className":126652,"code":132084,"language":126654,"meta":205,"style":205},[25,141318,141319,141323,141337,141341,141355,141359,141373,141377,141391,141395],{"__ignoreMap":205},[288,141320,141321],{"class":290,"line":291},[288,141322,132091],{"class":357},[288,141324,141325,141327,141329,141331,141333,141335],{"class":290,"line":206},[288,141326,132096],{"class":2135},[288,141328,79980],{"class":298},[288,141330,129012],{"class":347},[288,141332,51610],{"class":298},[288,141334,132105],{"class":347},[288,141336,129582],{"class":298},[288,141338,141339],{"class":290,"line":1352},[288,141340,132112],{"class":357},[288,141342,141343,141345,141347,141349,141351,141353],{"class":290,"line":1367},[288,141344,132117],{"class":2135},[288,141346,79980],{"class":298},[288,141348,129012],{"class":347},[288,141350,51610],{"class":298},[288,141352,54937],{"class":347},[288,141354,129582],{"class":298},[288,141356,141357],{"class":290,"line":1373},[288,141358,132132],{"class":357},[288,141360,141361,141363,141365,141367,141369,141371],{"class":290,"line":1387},[288,141362,132137],{"class":2135},[288,141364,79980],{"class":298},[288,141366,129012],{"class":347},[288,141368,51610],{"class":298},[288,141370,55004],{"class":347},[288,141372,129582],{"class":298},[288,141374,141375],{"class":290,"line":1393},[288,141376,132152],{"class":357},[288,141378,141379,141381,141383,141385,141387,141389],{"class":290,"line":1484},[288,141380,132157],{"class":2135},[288,141382,79980],{"class":298},[288,141384,129012],{"class":347},[288,141386,51610],{"class":298},[288,141388,86406],{"class":347},[288,141390,129582],{"class":298},[288,141392,141393],{"class":290,"line":1490},[288,141394,132172],{"class":357},[288,141396,141397,141399,141401,141403,141405,141407],{"class":290,"line":1502},[288,141398,132177],{"class":2135},[288,141400,79980],{"class":298},[288,141402,129012],{"class":347},[288,141404,51610],{"class":298},[288,141406,132186],{"class":347},[288,141408,129582],{"class":298},[1304,141410,141411,141422],{},[246,141412,141413,141414,141417,141418,101191,141420],{},"1 号盒子左侧浮动 ",[25,141415,141416],{},"sk_list"," 里面包含 ",[25,141419,1304],{},[25,141421,246],{},[246,141423,141424,141425,141417,141428,101191,141430],{},"2 号盒子左侧浮动 ",[25,141426,141427],{},"sk_con",[25,141429,1304],{},[25,141431,246],{},[19,141433,140022],{},[280,141435,141436],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,141437,141438,141444,141454],{"__ignoreMap":205},[288,141439,141440,141442],{"class":290,"line":291},[288,141441,130500],{"class":2135},[288,141443,15745],{"class":298},[288,141445,141446,141448,141450,141452],{"class":290,"line":206},[288,141447,131132],{"class":347},[288,141449,51610],{"class":298},[288,141451,23909],{"class":347},[288,141453,1463],{"class":298},[288,141455,141456],{"class":290,"line":1352},[288,141457,1737],{"class":298},[19,141459,140111],{},[280,141461,141462],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,141463,141464,141470,141480],{"__ignoreMap":205},[288,141465,141466,141468],{"class":290,"line":291},[288,141467,130500],{"class":2135},[288,141469,15745],{"class":298},[288,141471,141472,141474,141476,141478],{"class":290,"line":206},[288,141473,131132],{"class":347},[288,141475,51610],{"class":298},[288,141477,23909],{"class":347},[288,141479,1463],{"class":298},[288,141481,141482],{"class":290,"line":1352},[288,141483,1737],{"class":298},[260,141485,141487,141488],{"id":141486},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[25,141489,141490],{},"sk_container",[200,141492],{"style":202,"src":141493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1304,141495,141496,141501],{},[246,141497,140676,141498,141500],{},[25,141499,141490],{}," 给宽度 1200，不要给高度",[246,141502,141503],{},"一定不要忘记清除浮动",[19,141505,140022],{},[280,141507,141508],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,141509,141510,141516,141526],{"__ignoreMap":205},[288,141511,141512,141514],{"class":290,"line":291},[288,141513,130500],{"class":2135},[288,141515,15745],{"class":298},[288,141517,141518,141520,141522,141524],{"class":290,"line":206},[288,141519,131132],{"class":347},[288,141521,51610],{"class":298},[288,141523,23909],{"class":347},[288,141525,1463],{"class":298},[288,141527,141528],{"class":290,"line":1352},[288,141529,1737],{"class":298},[243,141531,141532],{},[246,141533,141534],{},"sk_hd制作",[1304,141536,141537],{},[246,141538,140756,141539,141542],{},[25,141540,141541],{},"sk_hd"," ，插入图片即可",[19,141544,140022],{},[280,141546,141547],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,141548,141549],{"__ignoreMap":205},[288,141550,141551,141553,141555,141557,141559,141561,141563,141565,141567,141569,141571,141573],{"class":290,"line":291},[288,141552,1207],{"class":298},[288,141554,200],{"class":51473},[288,141556,55412],{"class":2135},[288,141558,344],{"class":298},[288,141560,134169],{"class":403},[288,141562,55420],{"class":2135},[288,141564,344],{"class":298},[288,141566,134176],{"class":403},[288,141568,134179],{"class":2135},[288,141570,344],{"class":298},[288,141572,134184],{"class":403},[288,141574,51480],{"class":298},[243,141576,141577],{"start":206},[246,141578,141579],{},"sk_bd制作",[1304,141581,141582],{},[246,141583,141584,141585,141588,141589,101191,141591,141593],{},"3 号盒子 ",[25,141586,141587],{},"sk_bd"," ，里面包含很多的 ",[25,141590,1304],{},[25,141592,246],{},[1304,141594,141595,141604],{},[246,141596,141597,141598,141600,141601,141603],{},"当鼠标移入到 ",[25,141599,246],{}," 上面的时候显示红色的边框，在这里先给 ",[25,141602,246],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[246,141605,141606,141607,141609,141610,141612,141613,141616,141617,141619],{},"由于给每个 ",[25,141608,246],{}," 都设置了外边距，导致一行的最后一个 ",[25,141611,246],{}," 掉了下来，在这里我们利用 ",[25,141614,141615],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[25,141618,246],{},"，去掉外边距就好了",[19,141621,140022],{},[280,141623,141624],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,141625,141626,141632,141644],{"__ignoreMap":205},[288,141627,141628,141630],{"class":290,"line":291},[288,141629,51784],{"class":51473},[288,141631,15745],{"class":298},[288,141633,141634,141636,141638,141640,141642],{"class":290,"line":206},[288,141635,70643],{"class":347},[288,141637,51610],{"class":298},[288,141639,490],{"class":347},[288,141641,51729],{"class":347},[288,141643,1463],{"class":298},[288,141645,141646],{"class":290,"line":1352},[288,141647,1737],{"class":298},[19,141649,140111],{},[280,141651,141652],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,141653,141654,141660,141672],{"__ignoreMap":205},[288,141655,141656,141658],{"class":290,"line":291},[288,141657,51784],{"class":51473},[288,141659,15745],{"class":298},[288,141661,141662,141664,141666,141668,141670],{"class":290,"line":206},[288,141663,70643],{"class":347},[288,141665,51610],{"class":298},[288,141667,490],{"class":347},[288,141669,51729],{"class":347},[288,141671,1463],{"class":298},[288,141673,141674],{"class":290,"line":1352},[288,141675,1737],{"class":298},[14,141677,141679],{"id":141678},"_163-注册页面制作","16.3 注册页面制作",[200,141681],{"style":202,"src":141682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141684,141685,141687],{},[448,141686,9198],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[200,141689],{"style":202,"src":141690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[260,141692,141694],{"id":141693},"_1631-准备工作","16.3.1 准备工作",[1304,141696,141697,141700],{},[246,141698,141699],{},"创建register.html，引入 base.css，引入favicon图标",[246,141701,141702],{},"创建register.css ，在html页面进行引入",[260,141704,141706,141707,141709],{"id":141705},"_1632-header-头部实现","16.3.2 ",[25,141708,131657],{}," 头部实现",[1304,141711,141712,141715],{},[246,141713,141714],{},"整个内容用 版心 进行包裹",[246,141716,141717],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141719,140022],{},[280,141721,141722],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,141723,141724],{"__ignoreMap":205},[288,141725,141726,141728,141730,141732,141734,141736,141738,141740,141742,141744,141746,141748],{"class":290,"line":291},[288,141727,1207],{"class":298},[288,141729,200],{"class":51473},[288,141731,55412],{"class":2135},[288,141733,344],{"class":298},[288,141735,134169],{"class":403},[288,141737,55420],{"class":2135},[288,141739,344],{"class":298},[288,141741,134176],{"class":403},[288,141743,134179],{"class":2135},[288,141745,344],{"class":298},[288,141747,134184],{"class":403},[288,141749,51480],{"class":298},[19,141751,140111],{},[280,141753,141754],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,141755,141756],{"__ignoreMap":205},[288,141757,141758,141760,141762,141764,141766,141768,141770,141772,141774,141776,141778,141780],{"class":290,"line":291},[288,141759,1207],{"class":298},[288,141761,200],{"class":51473},[288,141763,55412],{"class":2135},[288,141765,344],{"class":298},[288,141767,134169],{"class":403},[288,141769,55420],{"class":2135},[288,141771,344],{"class":298},[288,141773,134176],{"class":403},[288,141775,134179],{"class":2135},[288,141777,344],{"class":298},[288,141779,134184],{"class":403},[288,141781,51480],{"class":298},[260,141783,141785,141786,141789],{"id":141784},"_1633-registerarea-主体模块实现","16.3.3 ",[25,141787,141788],{},"registerarea"," 主体模块实现",[200,141791],{"style":202,"src":141792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141794,141795],{},"整个大盒子 高度为 522px，设置4个边框",[19,141797,140022],{},[280,141799,141800],{"className":126652,"code":130809,"language":126654,"meta":205,"style":205},[25,141801,141802,141808,141824],{"__ignoreMap":205},[288,141803,141804,141806],{"class":290,"line":291},[288,141805,51784],{"class":51473},[288,141807,15745],{"class":298},[288,141809,141810,141812,141814,141816,141818,141820,141822],{"class":290,"line":206},[288,141811,71069],{"class":347},[288,141813,51610],{"class":298},[288,141815,516],{"class":347},[288,141817,51665],{"class":294},[288,141819,51694],{"class":347},[288,141821,130044],{"class":347},[288,141823,1463],{"class":298},[288,141825,141826],{"class":290,"line":1352},[288,141827,1737],{"class":298},[19,141829,140111],{},[280,141831,141832],{"className":126652,"code":130809,"language":126654,"meta":205,"style":205},[25,141833,141834,141840,141856],{"__ignoreMap":205},[288,141835,141836,141838],{"class":290,"line":291},[288,141837,51784],{"class":51473},[288,141839,15745],{"class":298},[288,141841,141842,141844,141846,141848,141850,141852,141854],{"class":290,"line":206},[288,141843,71069],{"class":347},[288,141845,51610],{"class":298},[288,141847,516],{"class":347},[288,141849,51665],{"class":294},[288,141851,51694],{"class":347},[288,141853,130044],{"class":347},[288,141855,1463],{"class":298},[288,141857,141858],{"class":290,"line":1352},[288,141859,1737],{"class":298},[19,141861,141862],{},"1号盒子 是一个 h3 标签，放标题",[1304,141864,141865],{},[246,141866,141867],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141869,140022],{},[280,141871,141872],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,141873,141874,141880,141890],{"__ignoreMap":205},[288,141875,141876,141878],{"class":290,"line":291},[288,141877,130500],{"class":2135},[288,141879,15745],{"class":298},[288,141881,141882,141884,141886,141888],{"class":290,"line":206},[288,141883,131132],{"class":347},[288,141885,51610],{"class":298},[288,141887,23909],{"class":347},[288,141889,1463],{"class":298},[288,141891,141892],{"class":290,"line":1352},[288,141893,1737],{"class":298},[19,141895,140111],{},[280,141897,141898],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,141899,141900,141906,141916],{"__ignoreMap":205},[288,141901,141902,141904],{"class":290,"line":291},[288,141903,130500],{"class":2135},[288,141905,15745],{"class":298},[288,141907,141908,141910,141912,141914],{"class":290,"line":206},[288,141909,131132],{"class":347},[288,141911,51610],{"class":298},[288,141913,23909],{"class":347},[288,141915,1463],{"class":298},[288,141917,141918],{"class":290,"line":1352},[288,141919,1737],{"class":298},[19,141921,141922],{},"2号盒子 里面放注册的内容",[1304,141924,141925,141928,141937,141951,141964,141967,141970,141988,142002],{},[246,141926,141927],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[246,141929,141930,141931,141933,141934,141936],{},"里面的内容利用 ",[25,141932,1304],{}," 包含 ",[25,141935,246],{}," 来实现的（不需要用表格）",[246,141938,139166,141939,141941,141942,141944,141945,141947,141948,141950],{},[25,141940,246],{}," 里面，左侧放 ",[25,141943,33781],{}," 标签， 中间放",[25,141946,53994],{}," 标签， 右侧放 ",[25,141949,288],{}," 提示信息",[246,141952,141953,141954,141956,141957,141959,141960,141963],{},"左侧 ",[25,141955,33781],{},"里面的文字都是右对齐，我们可以给",[25,141958,33781],{},"设置一个宽度（88px），然后利用",[25,141961,141962],{},"text-align"," 来设置右对齐",[246,141965,141966],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[246,141968,141969],{},"右侧 span修饰一下文字颜色",[246,141971,141972,141973],{},"提示信息的样式优化",[1304,141974,141975,141978,141981],{},[246,141976,141977],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[246,141979,141980],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[246,141982,141983,141984,141987],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[25,141985,141986],{},"vertical-algin"," 来设置 图片与文字对齐方式",[246,141989,141990,141991],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1304,141992,141993,141999],{},[246,141994,141995,141996,141998],{},"设置 ",[25,141997,23726],{}," 的 左右 12px 的内边距，设置一下文字颜色",[246,142000,142001],{},"分别设置 背景颜色",[246,142003,142004,142005,142007],{},"同意协议 和 完成注册 都是用 ",[25,142006,246],{}," 进行包裹",[19,142009,140022],{},[280,142011,142012],{"className":126652,"code":140595,"language":126654,"meta":205,"style":205},[25,142013,142014,142020,142030],{"__ignoreMap":205},[288,142015,142016,142018],{"class":290,"line":291},[288,142017,51784],{"class":51473},[288,142019,15745],{"class":298},[288,142021,142022,142024,142026,142028],{"class":290,"line":206},[288,142023,71051],{"class":347},[288,142025,51610],{"class":298},[288,142027,140612],{"class":347},[288,142029,1463],{"class":298},[288,142031,142032],{"class":290,"line":1352},[288,142033,1737],{"class":298},[19,142035,140111],{},[280,142037,142038],{"className":126652,"code":140595,"language":126654,"meta":205,"style":205},[25,142039,142040,142046,142056],{"__ignoreMap":205},[288,142041,142042,142044],{"class":290,"line":291},[288,142043,51784],{"class":51473},[288,142045,15745],{"class":298},[288,142047,142048,142050,142052,142054],{"class":290,"line":206},[288,142049,71051],{"class":347},[288,142051,51610],{"class":298},[288,142053,140612],{"class":347},[288,142055,1463],{"class":298},[288,142057,142058],{"class":290,"line":1352},[288,142059,1737],{"class":298},[260,142061,142063],{"id":142062},"_1634-底部实现","16.3.4 底部实现",[19,142065,140022],{},[280,142067,142068],{"className":126652,"code":140595,"language":126654,"meta":205,"style":205},[25,142069,142070,142076,142086],{"__ignoreMap":205},[288,142071,142072,142074],{"class":290,"line":291},[288,142073,51784],{"class":51473},[288,142075,15745],{"class":298},[288,142077,142078,142080,142082,142084],{"class":290,"line":206},[288,142079,71051],{"class":347},[288,142081,51610],{"class":298},[288,142083,140612],{"class":347},[288,142085,1463],{"class":298},[288,142087,142088],{"class":290,"line":1352},[288,142089,1737],{"class":298},[19,142091,140111],{},[280,142093,142094],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,142095,142096,142100,142114,142118],{"__ignoreMap":205},[288,142097,142098],{"class":290,"line":291},[288,142099,130763],{"class":357},[288,142101,142102,142104,142106,142108,142110,142112],{"class":290,"line":206},[288,142103,1207],{"class":298},[288,142105,51784],{"class":51473},[288,142107,53659],{"class":2135},[288,142109,344],{"class":298},[288,142111,130776],{"class":403},[288,142113,51480],{"class":298},[288,142115,142116],{"class":290,"line":1352},[288,142117,130783],{"class":298},[288,142119,142120,142122,142124],{"class":290,"line":1367},[288,142121,51958],{"class":298},[288,142123,51784],{"class":51473},[288,142125,51480],{"class":298},[14,142127,142129],{"id":142128},"_164-项目总结","16.4 项目总结",[243,142131,142132,142135,142138,142141],{},[246,142133,142134],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[246,142136,142137],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[246,142139,142140],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[246,142142,142143],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[200,142145],{"style":202,"src":142146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[243,142148,142149],{"start":1373},[246,142150,142151],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[200,142153],{"style":202,"src":142154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[243,142156,142157],{"start":1387},[246,142158,142159],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[200,142161],{"style":202,"src":142162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[280,142164,142165],{"className":127399,"code":136809,"language":127401,"meta":205,"style":205},[25,142166,142167],{"__ignoreMap":205},[288,142168,142169,142171,142173,142175,142177,142179,142181,142183,142185,142187,142189,142191],{"class":290,"line":291},[288,142170,1207],{"class":298},[288,142172,53994],{"class":51473},[288,142174,53997],{"class":2135},[288,142176,344],{"class":298},[288,142178,62872],{"class":403},[288,142180,15093],{"class":2135},[288,142182,344],{"class":298},[288,142184,136830],{"class":403},[288,142186,61193],{"class":2135},[288,142188,344],{"class":298},[288,142190,136837],{"class":403},[288,142192,51480],{"class":298},[243,142194,142195,142198],{"start":1393},[246,142196,142197],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[246,142199,142200],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5299,142202,142203],{},"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":205,"searchDepth":206,"depth":206,"links":142205},[142206,142211,142218,142226],{"id":139832,"depth":206,"text":139833,"children":142207},[142208,142209,142210],{"id":139836,"depth":1352,"text":139837},{"id":140567,"depth":1352,"text":140568},{"id":140880,"depth":1352,"text":140881},{"id":141180,"depth":206,"text":141181,"children":142212},[142213,142214,142216],{"id":141184,"depth":1352,"text":141185},{"id":141202,"depth":1352,"text":142215},"16.2.2 列表页 header 和 nav 修改",{"id":141486,"depth":1352,"text":142217},"16.2.3 列表页主体 sk_container",{"id":141678,"depth":206,"text":141679,"children":142219},[142220,142221,142223,142225],{"id":141693,"depth":1352,"text":141694},{"id":141705,"depth":1352,"text":142222},"16.3.2 header 头部实现",{"id":141784,"depth":1352,"text":142224},"16.3.3 registerarea 主体模块实现",{"id":142062,"depth":1352,"text":142063},{"id":142128,"depth":206,"text":142129},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139824,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142233,"title":142234,"body":142235,"description":214,"extension":215,"meta":142343,"navigation":217,"path":142344,"seo":142345,"stem":142346,"__hash__":142347},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142236,"toc":142338},[142237,142240,142244,142247,142250,142259,142268,142272,142277,142284,142302,142305,142308,142311,142314,142317,142320,142323,142326,142329,142332,142335],[10,142238,142234],{"id":142239},"_17-web服务器与网站发布",[14,142241,142243],{"id":142242},"_171-web服务器","17.1 Web服务器",[19,142245,142246],{},"把自己网站上传到服务器上，可以让其他人访问",[200,142248],{"style":202,"src":142249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142251,142252,142255,142256],{},[448,142253,142254],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[448,142257,142258],{},"Web 服务器等",[19,142260,142261,142262,101191,142265,25913],{},"根据服务器在网络中所在的位置不同，又可分为 ",[448,142263,142264],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[448,142266,142267],{},"远程服务器",[260,142269,142271],{"id":142270},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142273,142274],{},[448,142275,142276],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142278,142279,142280],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[104,142281,142282],{"href":142282,"rel":142283},"http:\u002F\u002Ffree.3v.do\u002F",[108],[1304,142285,142286,142289,142292,142299],{},[246,142287,142288],{},"去免费空间网站注册账号。",[246,142290,142291],{},"记录下主机名、用户名、密码、域名。",[246,142293,142294,142295,142298],{},"利用 ",[25,142296,142297],{},"utftp"," 软件 上传网站到远程服务器",[246,142300,142301],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142303,142304],{},"使用软件上传，对上传软件文件进行解压",[200,142306],{"style":202,"src":142307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[200,142309],{"style":202,"src":142310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142312,142313],{},"输入刚刚申请的服务器账号信息：",[200,142315],{"style":202,"src":142316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[200,142318],{"style":202,"src":142319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[200,142321],{"style":202,"src":142322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[200,142324],{"style":202,"src":142325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142327,142328],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[200,142330],{"style":202,"src":142331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142333,142334],{},"浏览器输入域名即可访问",[19,142336,142337],{},"首页一定必须是index",{"title":205,"searchDepth":206,"depth":206,"links":142339},[142340],{"id":142242,"depth":206,"text":142243,"children":142341},[142342],{"id":142270,"depth":1352,"text":142271},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142234,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142349,"title":142350,"body":142351,"description":214,"extension":215,"meta":143278,"navigation":217,"path":143279,"seo":143280,"stem":143281,"__hash__":143282},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142352,"toc":143261},[142353,142356,142360,142363,142366,142377,142380,142384,142388,142393,142396,142399,142402,142405,142409,142435,142439,142443,142446,142449,142453,142486,142490,142493,142496,142560,142564,142568,142571,142574,142577,142581,142626,142630,142633,142663,142667,142671,142674,142677,142681,142684,142753,142756,142864,142866,142872,142876,142879,142882,142978,142981,142985,143009,143013,143016,143020,143023,143027,143030,143033,143036,143039,143043,143046,143049,143053,143057,143060,143063,143066,143069,143073,143076,143080,143083,143086,143131,143135,143139,143142,143145,143148,143180,143184,143187,143221,143225,143228,143258],[10,142354,142350],{"id":142355},"_18-2d动画与3d转换",[14,142357,142359],{"id":142358},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142361,142362],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142364,142365],{},"转换（transform）你可以简单理解为变形",[1304,142367,142368,142371,142374],{},[246,142369,142370],{},"移动：translate",[246,142372,142373],{},"旋转：rotate",[246,142375,142376],{},"缩放：scale",[200,142378],{"style":202,"src":142379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[260,142381,142383],{"id":142382},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22171,142385,142387],{"id":142386},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142389,142390,142391],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[448,142392,133311],{},[200,142394],{"style":202,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142397,142398],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142400,142401],{},"对于行内元素无效",[19,142403,142404],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22171,142406,142408],{"id":142407},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[280,142410,142411],{"className":126652,"code":138841,"language":126654,"meta":205,"style":205},[25,142412,142413,142419,142431],{"__ignoreMap":205},[288,142414,142415,142417],{"class":290,"line":291},[288,142416,51784],{"class":51473},[288,142418,15745],{"class":298},[288,142420,142421,142423,142425,142427,142429],{"class":290,"line":206},[288,142422,70643],{"class":347},[288,142424,51610],{"class":298},[288,142426,490],{"class":347},[288,142428,51729],{"class":347},[288,142430,1463],{"class":298},[288,142432,142433],{"class":290,"line":1352},[288,142434,1737],{"class":298},[260,142436,142438],{"id":142437},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22171,142440,142442],{"id":142441},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142444,142445],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[200,142447],{"style":202,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22171,142450,142452],{"id":142451},"_18122-旋转效果","18.1.2.2 旋转效果",[280,142454,142456],{"className":126652,"code":142455,"language":126654,"meta":205,"style":205},"div {\n  transform: rotate(45deg);\n}\n",[25,142457,142458,142464,142482],{"__ignoreMap":205},[288,142459,142460,142462],{"class":290,"line":291},[288,142461,51784],{"class":51473},[288,142463,15745],{"class":298},[288,142465,142466,142468,142470,142473,142475,142477,142480],{"class":290,"line":206},[288,142467,136636],{"class":347},[288,142469,51610],{"class":298},[288,142471,142472],{"class":347},"rotate",[288,142474,299],{"class":298},[288,142476,826],{"class":347},[288,142478,142479],{"class":294},"deg",[288,142481,2891],{"class":298},[288,142483,142484],{"class":290,"line":1352},[288,142485,1737],{"class":298},[22171,142487,142489],{"id":142488},"_18123-三角做法","18.1.2.3 三角做法",[19,142491,142492],{},"该下标当经过最外层大盒子时会实现向上反转",[200,142494],{"style":202,"src":142495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[280,142497,142498],{"className":126652,"code":135172,"language":126654,"meta":205,"style":205},[25,142499,142500,142504,142510,142520,142530,142546,142556],{"__ignoreMap":205},[288,142501,142502],{"class":290,"line":291},[288,142503,135179],{"class":357},[288,142505,142506,142508],{"class":290,"line":206},[288,142507,135184],{"class":2135},[288,142509,15745],{"class":298},[288,142511,142512,142514,142516,142518],{"class":290,"line":1352},[288,142513,70741],{"class":347},[288,142515,51610],{"class":298},[288,142517,490],{"class":347},[288,142519,1463],{"class":298},[288,142521,142522,142524,142526,142528],{"class":290,"line":1367},[288,142523,70961],{"class":347},[288,142525,51610],{"class":298},[288,142527,490],{"class":347},[288,142529,1463],{"class":298},[288,142531,142532,142534,142536,142538,142540,142542,142544],{"class":290,"line":1373},[288,142533,71069],{"class":347},[288,142535,51610],{"class":298},[288,142537,743],{"class":347},[288,142539,51665],{"class":294},[288,142541,51694],{"class":347},[288,142543,64164],{"class":347},[288,142545,1463],{"class":298},[288,142547,142548,142550,142552,142554],{"class":290,"line":1387},[288,142549,135227],{"class":347},[288,142551,51610],{"class":298},[288,142553,62542],{"class":347},[288,142555,1463],{"class":298},[288,142557,142558],{"class":290,"line":1393},[288,142559,1737],{"class":298},[260,142561,142563],{"id":142562},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22171,142565,142567],{"id":142566},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142569,142570],{},"设置中心点",[200,142572],{"style":202,"src":142573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142575,142576],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22171,142578,142580],{"id":142579},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[280,142582,142584],{"className":126652,"code":142583,"language":126654,"meta":205,"style":205},"\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",[25,142585,142586,142591,142597,142612,142617,142622],{"__ignoreMap":205},[288,142587,142588],{"class":290,"line":291},[288,142589,142590],{"class":357},"\u002F* 转换中心点 *\u002F\n",[288,142592,142593,142595],{"class":290,"line":206},[288,142594,51784],{"class":51473},[288,142596,15745],{"class":298},[288,142598,142599,142602,142604,142606,142608,142610],{"class":290,"line":1352},[288,142600,142601],{"class":347},"  transform-origin",[288,142603,51610],{"class":298},[288,142605,51765],{"class":347},[288,142607,17317],{"class":347},[288,142609,130515],{"class":298},[288,142611,135325],{"class":357},[288,142613,142614],{"class":290,"line":1367},[288,142615,142616],{"class":357},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[288,142618,142619],{"class":290,"line":1373},[288,142620,142621],{"class":357},"  \u002F* transform-origin: left top; *\u002F\n",[288,142623,142624],{"class":290,"line":1387},[288,142625,1737],{"class":298},[22171,142627,142629],{"id":142628},"_18133-旋转案例","18.1.3.3 旋转案例",[200,142631],{"style":202,"src":142632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[280,142634,142635],{"className":126652,"code":142455,"language":126654,"meta":205,"style":205},[25,142636,142637,142643,142659],{"__ignoreMap":205},[288,142638,142639,142641],{"class":290,"line":291},[288,142640,51784],{"class":51473},[288,142642,15745],{"class":298},[288,142644,142645,142647,142649,142651,142653,142655,142657],{"class":290,"line":206},[288,142646,136636],{"class":347},[288,142648,51610],{"class":298},[288,142650,142472],{"class":347},[288,142652,299],{"class":298},[288,142654,826],{"class":347},[288,142656,142479],{"class":294},[288,142658,2891],{"class":298},[288,142660,142661],{"class":290,"line":1352},[288,142662,1737],{"class":298},[260,142664,142666],{"id":142665},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22171,142668,142670],{"id":142669},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142672,142673],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[200,142675],{"style":202,"src":142676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22171,142678,142680],{"id":142679},"_18142-分页按钮","18.1.4.2 分页按钮",[200,142682],{"style":202,"src":142683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[280,142685,142687],{"className":126652,"code":142686,"language":126654,"meta":205,"style":205},"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",[25,142688,142689,142695,142711,142715,142719,142724,142730,142744,142749],{"__ignoreMap":205},[288,142690,142691,142693],{"class":290,"line":291},[288,142692,51784],{"class":51473},[288,142694,15745],{"class":298},[288,142696,142697,142699,142701,142704,142706,142709],{"class":290,"line":206},[288,142698,136636],{"class":347},[288,142700,51610],{"class":298},[288,142702,142703],{"class":347},"scale",[288,142705,299],{"class":298},[288,142707,142708],{"class":347},"1.2",[288,142710,2891],{"class":298},[288,142712,142713],{"class":290,"line":1352},[288,142714,1737],{"class":298},[288,142716,142717],{"class":290,"line":1367},[288,142718,136113],{"class":298},[288,142720,142721],{"class":290,"line":1373},[288,142722,142723],{"class":357},"\u002F* 2D 缩放 *\u002F\n",[288,142725,142726,142728],{"class":290,"line":1387},[288,142727,51784],{"class":51473},[288,142729,15745],{"class":298},[288,142731,142732,142734,142736,142738,142740,142742],{"class":290,"line":1393},[288,142733,136636],{"class":347},[288,142735,51610],{"class":298},[288,142737,142703],{"class":347},[288,142739,299],{"class":298},[288,142741,142708],{"class":347},[288,142743,2891],{"class":298},[288,142745,142746],{"class":290,"line":1484},[288,142747,142748],{"class":357},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[288,142750,142751],{"class":290,"line":1490},[288,142752,1737],{"class":298},[19,142754,142755],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[280,142757,142759],{"className":126652,"code":142758,"language":126654,"meta":205,"style":205},"\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",[25,142760,142761,142766,142776,142797,142818,142822,142827,142833,142860],{"__ignoreMap":205},[288,142762,142763],{"class":290,"line":291},[288,142764,142765],{"class":357},"\u002F* 定义动画 *\u002F\n",[288,142767,142768,142771,142774],{"class":290,"line":206},[288,142769,142770],{"class":294},"@keyframes",[288,142772,142773],{"class":5389}," move",[288,142775,15745],{"class":298},[288,142777,142778,142781,142783,142785,142787,142790,142792,142794],{"class":290,"line":1352},[288,142779,142780],{"class":2135},"  0%",[288,142782,79980],{"class":298},[288,142784,48307],{"class":347},[288,142786,51610],{"class":298},[288,142788,142789],{"class":347},"translateX",[288,142791,299],{"class":298},[288,142793,490],{"class":347},[288,142795,142796],{"class":298},"); }\n",[288,142798,142799,142802,142804,142806,142808,142810,142812,142814,142816],{"class":290,"line":1367},[288,142800,142801],{"class":2135},"  100%",[288,142803,79980],{"class":298},[288,142805,48307],{"class":347},[288,142807,51610],{"class":298},[288,142809,142789],{"class":347},[288,142811,299],{"class":298},[288,142813,608],{"class":347},[288,142815,51665],{"class":294},[288,142817,142796],{"class":298},[288,142819,142820],{"class":290,"line":1373},[288,142821,1737],{"class":298},[288,142823,142824],{"class":290,"line":1387},[288,142825,142826],{"class":357},"\u002F* 调用动画 *\u002F\n",[288,142828,142829,142831],{"class":290,"line":1393},[288,142830,51784],{"class":51473},[288,142832,15745],{"class":298},[288,142834,142835,142838,142840,142842,142844,142846,142848,142850,142852,142855,142858],{"class":290,"line":1484},[288,142836,142837],{"class":347},"  animation",[288,142839,51610],{"class":298},[288,142841,135338],{"class":347},[288,142843,25291],{"class":347},[288,142845,992],{"class":294},[288,142847,78853],{"class":347},[288,142849,4265],{"class":347},[288,142851,992],{"class":294},[288,142853,142854],{"class":347}," infinite",[288,142856,142857],{"class":347}," alternate",[288,142859,1463],{"class":298},[288,142861,142862],{"class":290,"line":1490},[288,142863,1737],{"class":298},[19,142865,142755],{},[280,142867,142870],{"className":142868,"code":142869,"language":5360},[5358],"\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",[25,142871,142869],{"__ignoreMap":205},[22171,142873,142875],{"id":142874},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142877,142878],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[200,142880],{"style":202,"src":142881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[280,142883,142884],{"className":126652,"code":142758,"language":126654,"meta":205,"style":205},[25,142885,142886,142890,142898,142916,142936,142940,142944,142950,142974],{"__ignoreMap":205},[288,142887,142888],{"class":290,"line":291},[288,142889,142765],{"class":357},[288,142891,142892,142894,142896],{"class":290,"line":206},[288,142893,142770],{"class":294},[288,142895,142773],{"class":5389},[288,142897,15745],{"class":298},[288,142899,142900,142902,142904,142906,142908,142910,142912,142914],{"class":290,"line":1352},[288,142901,142780],{"class":2135},[288,142903,79980],{"class":298},[288,142905,48307],{"class":347},[288,142907,51610],{"class":298},[288,142909,142789],{"class":347},[288,142911,299],{"class":298},[288,142913,490],{"class":347},[288,142915,142796],{"class":298},[288,142917,142918,142920,142922,142924,142926,142928,142930,142932,142934],{"class":290,"line":1367},[288,142919,142801],{"class":2135},[288,142921,79980],{"class":298},[288,142923,48307],{"class":347},[288,142925,51610],{"class":298},[288,142927,142789],{"class":347},[288,142929,299],{"class":298},[288,142931,608],{"class":347},[288,142933,51665],{"class":294},[288,142935,142796],{"class":298},[288,142937,142938],{"class":290,"line":1373},[288,142939,1737],{"class":298},[288,142941,142942],{"class":290,"line":1387},[288,142943,142826],{"class":357},[288,142945,142946,142948],{"class":290,"line":1393},[288,142947,51784],{"class":51473},[288,142949,15745],{"class":298},[288,142951,142952,142954,142956,142958,142960,142962,142964,142966,142968,142970,142972],{"class":290,"line":1484},[288,142953,142837],{"class":347},[288,142955,51610],{"class":298},[288,142957,135338],{"class":347},[288,142959,25291],{"class":347},[288,142961,992],{"class":294},[288,142963,78853],{"class":347},[288,142965,4265],{"class":347},[288,142967,992],{"class":294},[288,142969,142854],{"class":347},[288,142971,142857],{"class":347},[288,142973,1463],{"class":298},[288,142975,142976],{"class":290,"line":1490},[288,142977,1737],{"class":298},[19,142979,142980],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[260,142982,142984],{"id":142983},"_1823-知识点回顾","18.2.3 知识点回顾",[280,142986,142987],{"className":126652,"code":128821,"language":126654,"meta":205,"style":205},[25,142988,142989,142995,143005],{"__ignoreMap":205},[288,142990,142991,142993],{"class":290,"line":291},[288,142992,51784],{"class":51473},[288,142994,15745],{"class":298},[288,142996,142997,142999,143001,143003],{"class":290,"line":206},[288,142998,128834],{"class":347},[288,143000,51610],{"class":298},[288,143002,61909],{"class":347},[288,143004,1463],{"class":298},[288,143006,143007],{"class":290,"line":1352},[288,143008,1737],{"class":298},[14,143010,143012],{"id":143011},"_183-3d-转换","18.3 3D 转换",[19,143014,143015],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[260,143017,143019],{"id":143018},"_1831-坐标轴认识","18.3.1 坐标轴认识",[200,143021],{"style":202,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[260,143024,143026],{"id":143025},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[200,143028],{"style":202,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143031,143032],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143034,143035],{},"translate3d的效果需要搭配透视perspective来使用",[200,143037],{"style":202,"src":143038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[260,143040,143042],{"id":143041},"_1833-透视-perspective","18.3.3 透视 perspective",[200,143044],{"style":202,"src":143045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143047,143048],{},"透视写在父盒子上，单位为像素",[260,143050,143052],{"id":143051},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22171,143054,143056],{"id":143055},"_18341-分开解释","18.3.4.1 分开解释",[200,143058],{"style":202,"src":143059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[200,143061],{"style":202,"src":143062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[200,143064],{"style":202,"src":143065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143067,143068],{},"总结来说就是左手原则",[22171,143070,143072],{"id":143071},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[200,143074],{"style":202,"src":143075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[260,143077,143079],{"id":143078},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[200,143081],{"style":202,"src":143082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[200,143084],{"style":202,"src":143085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[280,143087,143089],{"className":126652,"code":143088,"language":126654,"meta":205,"style":205},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[25,143090,143091,143097,143110,143127],{"__ignoreMap":205},[288,143092,143093,143095],{"class":290,"line":291},[288,143094,51784],{"class":51473},[288,143096,15745],{"class":298},[288,143098,143099,143102,143104,143106,143108],{"class":290,"line":206},[288,143100,143101],{"class":347},"  perspective",[288,143103,51610],{"class":298},[288,143105,65247],{"class":347},[288,143107,51665],{"class":294},[288,143109,1463],{"class":298},[288,143111,143112,143114,143116,143119,143121,143123,143125],{"class":290,"line":1352},[288,143113,136636],{"class":347},[288,143115,51610],{"class":298},[288,143117,143118],{"class":347},"rotateX",[288,143120,299],{"class":298},[288,143122,826],{"class":347},[288,143124,142479],{"class":294},[288,143126,2891],{"class":298},[288,143128,143129],{"class":290,"line":1367},[288,143130,1737],{"class":298},[260,143132,143134],{"id":143133},"_1836-案例","18.3.6 案例",[22171,143136,143138],{"id":143137},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[200,143140],{"style":202,"src":143141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[200,143143],{"style":202,"src":143144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[200,143146],{"style":202,"src":143147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[280,143149,143151],{"className":126652,"code":143150,"language":126654,"meta":205,"style":205},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[25,143152,143153,143158,143164,143176],{"__ignoreMap":205},[288,143154,143155],{"class":290,"line":291},[288,143156,143157],{"class":357},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[288,143159,143160,143162],{"class":290,"line":206},[288,143161,133649],{"class":2135},[288,143163,15745],{"class":298},[288,143165,143166,143168,143170,143172,143174],{"class":290,"line":1352},[288,143167,143101],{"class":347},[288,143169,51610],{"class":298},[288,143171,65247],{"class":347},[288,143173,51665],{"class":294},[288,143175,1463],{"class":298},[288,143177,143178],{"class":290,"line":1367},[288,143179,1737],{"class":298},[22171,143181,143183],{"id":143182},"_18362-3d导航栏","18.3.6.2 3D导航栏",[200,143185],{"style":202,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[280,143188,143189],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,143190,143191,143195,143209,143213],{"__ignoreMap":205},[288,143192,143193],{"class":290,"line":291},[288,143194,130763],{"class":357},[288,143196,143197,143199,143201,143203,143205,143207],{"class":290,"line":206},[288,143198,1207],{"class":298},[288,143200,51784],{"class":51473},[288,143202,53659],{"class":2135},[288,143204,344],{"class":298},[288,143206,130776],{"class":403},[288,143208,51480],{"class":298},[288,143210,143211],{"class":290,"line":1352},[288,143212,130783],{"class":298},[288,143214,143215,143217,143219],{"class":290,"line":1367},[288,143216,51958],{"class":298},[288,143218,51784],{"class":51473},[288,143220,51480],{"class":298},[22171,143222,143224],{"id":143223},"_18363-旋转木马","18.3.6.3 旋转木马",[200,143226],{"style":202,"src":143227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[280,143229,143230],{"className":126652,"code":142455,"language":126654,"meta":205,"style":205},[25,143231,143232,143238,143254],{"__ignoreMap":205},[288,143233,143234,143236],{"class":290,"line":291},[288,143235,51784],{"class":51473},[288,143237,15745],{"class":298},[288,143239,143240,143242,143244,143246,143248,143250,143252],{"class":290,"line":206},[288,143241,136636],{"class":347},[288,143243,51610],{"class":298},[288,143245,142472],{"class":347},[288,143247,299],{"class":298},[288,143249,826],{"class":347},[288,143251,142479],{"class":294},[288,143253,2891],{"class":298},[288,143255,143256],{"class":290,"line":1352},[288,143257,1737],{"class":298},[5299,143259,143260],{},"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":205,"searchDepth":206,"depth":206,"links":143262},[143263,143270],{"id":142358,"depth":206,"text":142359,"children":143264},[143265,143266,143267,143268,143269],{"id":142382,"depth":1352,"text":142383},{"id":142437,"depth":1352,"text":142438},{"id":142562,"depth":1352,"text":142563},{"id":142665,"depth":1352,"text":142666},{"id":142983,"depth":1352,"text":142984},{"id":143011,"depth":206,"text":143012,"children":143271},[143272,143273,143274,143275,143276,143277],{"id":143018,"depth":1352,"text":143019},{"id":143025,"depth":1352,"text":143026},{"id":143041,"depth":1352,"text":143042},{"id":143051,"depth":1352,"text":143052},{"id":143078,"depth":1352,"text":143079},{"id":143133,"depth":1352,"text":143134},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142350,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143284,"title":143285,"body":143286,"description":214,"extension":215,"meta":143489,"navigation":217,"path":143490,"seo":143491,"stem":143492,"__hash__":143493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143287,"toc":143478},[143288,143291,143295,143298,143301,143305,143308,143311,143314,143318,143321,143325,143328,143332,143335,143339,143353,143357,143382,143385,143388,143405,143409,143413,143416,143419,143423,143426,143429,143447,143451,143454,143468,143472,143475],[10,143289,143285],{"id":143290},"_19-移动端基础-前缀现状与视口",[14,143292,143294],{"id":143293},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[200,143296],{"style":202,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143299,143300],{},"意思就是加个前缀，增加兼容性",[14,143302,143304],{"id":143303},"_192-移动端现状认识","19.2 移动端现状认识",[200,143306],{"style":202,"src":143307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143309,143310],{},"调试方法：",[200,143312],{"style":202,"src":143313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143315,143317],{"id":143316},"_193-视口","19.3 视口",[19,143319,143320],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[260,143322,143324],{"id":143323},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[200,143326],{"style":202,"src":143327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[260,143329,143331],{"id":143330},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[200,143333],{"style":202,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[260,143336,143338],{"id":143337},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1304,143340,143341,143344,143347,143350],{},[246,143342,143343],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[246,143345,143346],{},"理想视口，对设备来讲，是最理想的视口尺寸",[246,143348,143349],{},"需要手动添写meta视口标签通知浏览器操作",[246,143351,143352],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[260,143354,143356],{"id":143355},"_1934-meta视口标签","19.3.4 meta视口标签",[280,143358,143360],{"className":127399,"code":143359,"language":127401,"meta":205,"style":205},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[25,143361,143362],{"__ignoreMap":205},[288,143363,143364,143366,143368,143370,143372,143374,143376,143378,143380],{"class":290,"line":291},[288,143365,1207],{"class":298},[288,143367,51517],{"class":51473},[288,143369,15093],{"class":2135},[288,143371,344],{"class":298},[288,143373,51564],{"class":403},[288,143375,51544],{"class":2135},[288,143377,344],{"class":298},[288,143379,51571],{"class":403},[288,143381,51480],{"class":298},[200,143383],{"style":202,"src":143384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143386,143387],{},"标准视口设置：",[243,143389,143390,143393,143396,143399,143402],{},[246,143391,143392],{},"视口宽度和设备保持一致",[246,143394,143395],{},"视口的默认缩放比例1.0",[246,143397,143398],{},"不允许用户自行缩放",[246,143400,143401],{},"最大允许的缩放比例1.0",[246,143403,143404],{},"最小允许的缩放比例1.0",[260,143406,143408],{"id":143407},"_1935-二倍图","19.3.5 二倍图",[22171,143410,143412],{"id":143411},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[200,143414],{"style":202,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[200,143417],{"style":202,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22171,143420,143422],{"id":143421},"_19352-多倍图","19.3.5.2 多倍图",[200,143424],{"style":202,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143427,143428],{},"二倍图法，代码如下：",[280,143430,143432],{"className":126652,"code":143431,"language":126654,"meta":205,"style":205},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[25,143433,143434,143439],{"__ignoreMap":205},[288,143435,143436],{"class":290,"line":291},[288,143437,143438],{"class":357},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[288,143440,143441,143444],{"class":290,"line":206},[288,143442,143443],{"class":51473},"background-size",[288,143445,143446],{"class":298},": 50% 50%;\n",[22171,143448,143450],{"id":143449},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[200,143452],{"style":202,"src":143453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[243,143455,143456,143459,143462,143465],{},[246,143457,143458],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[246,143460,143461],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[246,143463,143464],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[246,143466,143467],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22171,143469,143471],{"id":143470},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[200,143473],{"style":202,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5299,143476,143477],{},"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":205,"searchDepth":206,"depth":206,"links":143479},[143480,143481,143482],{"id":143293,"depth":206,"text":143294},{"id":143303,"depth":206,"text":143304},{"id":143316,"depth":206,"text":143317,"children":143483},[143484,143485,143486,143487,143488],{"id":143323,"depth":1352,"text":143324},{"id":143330,"depth":1352,"text":143331},{"id":143337,"depth":1352,"text":143338},{"id":143355,"depth":1352,"text":143356},{"id":143407,"depth":1352,"text":143408},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143285,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143495,"title":143496,"body":143497,"description":214,"extension":215,"meta":144374,"navigation":217,"path":144375,"seo":144376,"stem":144377,"__hash__":144378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143498,"toc":144358},[143499,143502,143506,143513,143516,143523,143526,143531,143534,143538,143542,143549,143552,143555,143559,143562,143565,143568,143571,143574,143578,143581,143585,143587,143590,143593,143596,143599,143601,143604,143606,143636,143638,143668,143672,143675,143679,143682,143699,143702,143705,143781,143783,143786,143789,143792,143795,143797,143800,143803,143807,143829,143832,143835,143839,143842,143848,143851,143855,143858,143861,143865,143868,143871,143874,143878,143881,143884,143887,143890,143894,143897,143901,143908,143911,143914,143917,143920,143930,143933,143936,143943,143946,143950,143953,143956,143960,143963,143966,143969,144014,144017,144020,144023,144025,144154,144156,144194,144197,144200,144202,144320,144322,144356],[10,143500,143496],{"id":143501},"_20-移动端布局实战上篇",[14,143503,143505],{"id":143504},"_201-移动端主流方案","20.1 移动端主流方案",[243,143507,143508],{},[246,143509,143510],{},[448,143511,143512],{},"单独移动端页面（主流）",[200,143514],{"style":202,"src":143515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[243,143517,143518],{"start":206},[246,143519,143520],{},[448,143521,143522],{},"响应式兼容PC移动端",[200,143524],{"style":202,"src":143525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[243,143527,143528],{"start":1352},[246,143529,143530],{},"两种页面选型布局方式",[200,143532],{"style":202,"src":143533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143535,143537],{"id":143536},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[260,143539,143541],{"id":143540},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143543,143544,143545],{},"官网地址： ",[104,143546,143547],{"href":143547,"rel":143548},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[108],[200,143550],{"style":202,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[200,143553],{"style":202,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[260,143556,143558],{"id":143557},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[200,143560],{"style":202,"src":143561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[200,143563],{"style":202,"src":143564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143566,143567],{},"去除高亮：",[19,143569,143570],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143572,143573],{},"-webkit- tap-highlight-color: transparent;",[14,143575,143577],{"id":143576},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[200,143579],{"style":202,"src":143580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143582,143584],{"id":143583},"_204-流式布局案例","20.4 流式布局案例",[19,143586,328],{},[19,143588,143589],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143591,143592],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143594,143595],{},"图片格式：",[200,143597],{"style":202,"src":143598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143600,135695],{},[200,143602],{"style":202,"src":143603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143605,140022],{},[280,143607,143608],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,143609,143610],{"__ignoreMap":205},[288,143611,143612,143614,143616,143618,143620,143622,143624,143626,143628,143630,143632,143634],{"class":290,"line":291},[288,143613,1207],{"class":298},[288,143615,200],{"class":51473},[288,143617,55412],{"class":2135},[288,143619,344],{"class":298},[288,143621,134169],{"class":403},[288,143623,55420],{"class":2135},[288,143625,344],{"class":298},[288,143627,134176],{"class":403},[288,143629,134179],{"class":2135},[288,143631,344],{"class":298},[288,143633,134184],{"class":403},[288,143635,51480],{"class":298},[19,143637,140111],{},[280,143639,143640],{"className":127399,"code":134154,"language":127401,"meta":205,"style":205},[25,143641,143642],{"__ignoreMap":205},[288,143643,143644,143646,143648,143650,143652,143654,143656,143658,143660,143662,143664,143666],{"class":290,"line":291},[288,143645,1207],{"class":298},[288,143647,200],{"class":51473},[288,143649,55412],{"class":2135},[288,143651,344],{"class":298},[288,143653,134169],{"class":403},[288,143655,55420],{"class":2135},[288,143657,344],{"class":298},[288,143659,134176],{"class":403},[288,143661,134179],{"class":2135},[288,143663,344],{"class":298},[288,143665,134184],{"class":403},[288,143667,51480],{"class":298},[14,143669,143671],{"id":143670},"_205-flex布局","20.5 flex布局",[200,143673],{"style":202,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[260,143676,143678],{"id":143677},"_2051-布局原理","20.5.1 布局原理",[19,143680,143681],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1304,143683,143684,143687,143690,143693,143696],{},[246,143685,143686],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[246,143688,143689],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[246,143691,143692],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[246,143694,143695],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[246,143697,143698],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143700,143701],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143703,143704],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[280,143706,143708],{"className":126652,"code":143707,"language":126654,"meta":205,"style":205},"\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",[25,143709,143710,143715,143722,143732,143744,143755,143766,143777],{"__ignoreMap":205},[288,143711,143712],{"class":290,"line":291},[288,143713,143714],{"class":357},"\u002F* Flex 弹性布局 *\u002F\n",[288,143716,143717,143720],{"class":290,"line":206},[288,143718,143719],{"class":2135},".container",[288,143721,15745],{"class":298},[288,143723,143724,143726,143728,143730],{"class":290,"line":1352},[288,143725,128268],{"class":347},[288,143727,51610],{"class":298},[288,143729,51650],{"class":347},[288,143731,1463],{"class":298},[288,143733,143734,143737,143739,143742],{"class":290,"line":1367},[288,143735,143736],{"class":347},"  flex-direction",[288,143738,51610],{"class":298},[288,143740,143741],{"class":347},"row",[288,143743,1463],{"class":298},[288,143745,143746,143749,143751,143753],{"class":290,"line":1373},[288,143747,143748],{"class":347},"  justify-content",[288,143750,51610],{"class":298},[288,143752,51841],{"class":347},[288,143754,1463],{"class":298},[288,143756,143757,143760,143762,143764],{"class":290,"line":1387},[288,143758,143759],{"class":347},"  align-items",[288,143761,51610],{"class":298},[288,143763,51765],{"class":347},[288,143765,1463],{"class":298},[288,143767,143768,143771,143773,143775],{"class":290,"line":1393},[288,143769,143770],{"class":347},"  flex-wrap",[288,143772,51610],{"class":298},[288,143774,78783],{"class":347},[288,143776,1463],{"class":298},[288,143778,143779],{"class":290,"line":1484},[288,143780,1737],{"class":298},[19,143782,70626],{},[19,143784,143785],{},".form-item .male-label {",[19,143787,143788],{},"   margin-right: 20px;",[19,143790,143791],{},"   display: inline-flex;",[19,143793,143794],{},"   align-items: center;",[19,143796,1243],{},[200,143798],{"style":202,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[200,143801],{"style":202,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[260,143804,143806],{"id":143805},"_2052-常见父项属性","20.5.2 常见父项属性",[243,143808,143809,143812,143815,143818,143821,143824,143827],{},[246,143810,143811],{},"flex-direction：设置主轴的方向",[246,143813,143814],{},"justify-content：设置主轴上的子元素排列方式",[246,143816,143817],{},"flex-wrap：设置子元素是否换行",[246,143819,143820],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[246,143822,143823],{},"align-items：设置侧轴上的子元素排列方式（单行）",[246,143825,143826],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[246,143828,143811],{},[200,143830],{"style":202,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[200,143833],{"style":202,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[243,143836,143837],{"start":206},[246,143838,143814],{},[200,143840],{"style":202,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143843,143844,143847],{},[25,143845,143846],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143849,143850],{},"跟着主轴走",[243,143852,143853],{"start":1352},[246,143854,143817],{},[200,143856],{"style":202,"src":143857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143859,143860],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[243,143862,143863],{"start":1367},[246,143864,143820],{},[200,143866],{"style":202,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143869,143870],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143872,143873],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[243,143875,143876],{"start":1373},[246,143877,143823],{},[200,143879],{"style":202,"src":143880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143882,143883],{},"align-items与align-content之间的区别：",[19,143885,143886],{},"单找items，多找content",[200,143888],{"style":202,"src":143889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[243,143891,143892],{"start":1387},[246,143893,143826],{},[200,143895],{"style":202,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[260,143898,143900],{"id":143899},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[243,143902,143903],{},[246,143904,143905],{},[448,143906,143907],{},"flex 属性",[19,143909,143910],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[200,143912],{"style":202,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143915,143916],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143918,143919],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[243,143921,143922],{"start":206},[246,143923,143924,13968,143927],{},[448,143925,143926],{},"align-self",[448,143928,143929],{},"控制子项自己在侧轴上的排列方式",[200,143931],{"style":202,"src":143932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143934,143935],{},"单个子盒子在父盒子侧轴上的排列方式",[243,143937,143938],{"start":1352},[246,143939,143940,143942],{},[448,143941,95470],{}," 属性定义项目的排列顺序",[200,143944],{"style":202,"src":143945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[260,143947,143949],{"id":143948},"_2054-背景线性渐变","20.5.4 背景线性渐变",[200,143951],{"style":202,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143954,143955],{},"必须要添加浏览器的私有前缀",[260,143957,143959],{"id":143958},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143961,143962],{},"学到最重要的知识：",[19,143964,143965],{},"flex处理这样的布局思路",[200,143967],{"style":202,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[280,143970,143972],{"className":126652,"code":143971,"language":126654,"meta":205,"style":205},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[25,143973,143974,143980,143990,144000,144010],{"__ignoreMap":205},[288,143975,143976,143978],{"class":290,"line":291},[288,143977,143719],{"class":2135},[288,143979,15745],{"class":298},[288,143981,143982,143984,143986,143988],{"class":290,"line":206},[288,143983,128268],{"class":347},[288,143985,51610],{"class":298},[288,143987,51650],{"class":347},[288,143989,1463],{"class":298},[288,143991,143992,143994,143996,143998],{"class":290,"line":1352},[288,143993,143748],{"class":347},[288,143995,51610],{"class":298},[288,143997,51765],{"class":347},[288,143999,1463],{"class":298},[288,144001,144002,144004,144006,144008],{"class":290,"line":1367},[288,144003,143759],{"class":347},[288,144005,51610],{"class":298},[288,144007,51765],{"class":347},[288,144009,1463],{"class":298},[288,144011,144012],{"class":290,"line":1373},[288,144013,1737],{"class":298},[19,144015,144016],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144018,144019],{},"使用属性选择器",[200,144021],{"style":202,"src":144022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144024,69062],{},[280,144026,144028],{"className":127399,"code":144027,"language":127401,"meta":205,"style":205},"\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",[25,144029,144030,144035,144049,144054,144074,144079,144098,144103,144122,144127,144146],{"__ignoreMap":205},[288,144031,144032],{"class":290,"line":291},[288,144033,144034],{"class":357},"\u003C!-- 携程网移动端案例结构 -->\n",[288,144036,144037,144039,144041,144043,144045,144047],{"class":290,"line":206},[288,144038,1207],{"class":298},[288,144040,51784],{"class":51473},[288,144042,53659],{"class":2135},[288,144044,344],{"class":298},[288,144046,92496],{"class":403},[288,144048,51480],{"class":298},[288,144050,144051],{"class":290,"line":1352},[288,144052,144053],{"class":357},"  \u003C!-- 搜索栏 -->\n",[288,144055,144056,144058,144060,144062,144064,144067,144070,144072],{"class":290,"line":1367},[288,144057,52317],{"class":298},[288,144059,51784],{"class":51473},[288,144061,53659],{"class":2135},[288,144063,344],{"class":298},[288,144065,144066],{"class":403},"\"search-index\"",[288,144068,144069],{"class":298},">...\u003C\u002F",[288,144071,51784],{"class":51473},[288,144073,51480],{"class":298},[288,144075,144076],{"class":290,"line":1373},[288,144077,144078],{"class":357},"  \u003C!-- 焦点图 -->\n",[288,144080,144081,144083,144085,144087,144089,144092,144094,144096],{"class":290,"line":1387},[288,144082,52317],{"class":298},[288,144084,51784],{"class":51473},[288,144086,53659],{"class":2135},[288,144088,344],{"class":298},[288,144090,144091],{"class":403},"\"focus\"",[288,144093,144069],{"class":298},[288,144095,51784],{"class":51473},[288,144097,51480],{"class":298},[288,144099,144100],{"class":290,"line":1393},[288,144101,144102],{"class":357},"  \u003C!-- 主导航 -->\n",[288,144104,144105,144107,144109,144111,144113,144116,144118,144120],{"class":290,"line":1484},[288,144106,52317],{"class":298},[288,144108,51784],{"class":51473},[288,144110,53659],{"class":2135},[288,144112,344],{"class":298},[288,144114,144115],{"class":403},"\"local-nav\"",[288,144117,144069],{"class":298},[288,144119,51784],{"class":51473},[288,144121,51480],{"class":298},[288,144123,144124],{"class":290,"line":1490},[288,144125,144126],{"class":357},"  \u003C!-- 子导航 -->\n",[288,144128,144129,144131,144133,144135,144137,144140,144142,144144],{"class":290,"line":1502},[288,144130,52317],{"class":298},[288,144132,51784],{"class":51473},[288,144134,53659],{"class":2135},[288,144136,344],{"class":298},[288,144138,144139],{"class":403},"\"nav-common\"",[288,144141,144069],{"class":298},[288,144143,51784],{"class":51473},[288,144145,51480],{"class":298},[288,144147,144148,144150,144152],{"class":290,"line":1784},[288,144149,51958],{"class":298},[288,144151,51784],{"class":51473},[288,144153,51480],{"class":298},[19,144155,70626],{},[280,144157,144158],{"className":126652,"code":137104,"language":126654,"meta":205,"style":205},[25,144159,144160,144174,144190],{"__ignoreMap":205},[288,144161,144162,144164,144166,144168,144170,144172],{"class":290,"line":291},[288,144163,53994],{"class":51473},[288,144165,1187],{"class":298},[288,144167,103280],{"class":2135},[288,144169,344],{"class":294},[288,144171,62872],{"class":403},[288,144173,137121],{"class":298},[288,144175,144176,144178,144180,144182,144184,144186,144188],{"class":290,"line":206},[288,144177,71069],{"class":347},[288,144179,51610],{"class":298},[288,144181,516],{"class":347},[288,144183,51665],{"class":294},[288,144185,51694],{"class":347},[288,144187,130232],{"class":347},[288,144189,1463],{"class":298},[288,144191,144192],{"class":290,"line":1352},[288,144193,1737],{"class":298},[19,144195,144196],{},"总代码和效果展示：",[200,144198],{"style":202,"src":144199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144201,69062],{},[280,144203,144204],{"className":127399,"code":144027,"language":127401,"meta":205,"style":205},[25,144205,144206,144210,144224,144228,144246,144250,144268,144272,144290,144294,144312],{"__ignoreMap":205},[288,144207,144208],{"class":290,"line":291},[288,144209,144034],{"class":357},[288,144211,144212,144214,144216,144218,144220,144222],{"class":290,"line":206},[288,144213,1207],{"class":298},[288,144215,51784],{"class":51473},[288,144217,53659],{"class":2135},[288,144219,344],{"class":298},[288,144221,92496],{"class":403},[288,144223,51480],{"class":298},[288,144225,144226],{"class":290,"line":1352},[288,144227,144053],{"class":357},[288,144229,144230,144232,144234,144236,144238,144240,144242,144244],{"class":290,"line":1367},[288,144231,52317],{"class":298},[288,144233,51784],{"class":51473},[288,144235,53659],{"class":2135},[288,144237,344],{"class":298},[288,144239,144066],{"class":403},[288,144241,144069],{"class":298},[288,144243,51784],{"class":51473},[288,144245,51480],{"class":298},[288,144247,144248],{"class":290,"line":1373},[288,144249,144078],{"class":357},[288,144251,144252,144254,144256,144258,144260,144262,144264,144266],{"class":290,"line":1387},[288,144253,52317],{"class":298},[288,144255,51784],{"class":51473},[288,144257,53659],{"class":2135},[288,144259,344],{"class":298},[288,144261,144091],{"class":403},[288,144263,144069],{"class":298},[288,144265,51784],{"class":51473},[288,144267,51480],{"class":298},[288,144269,144270],{"class":290,"line":1393},[288,144271,144102],{"class":357},[288,144273,144274,144276,144278,144280,144282,144284,144286,144288],{"class":290,"line":1484},[288,144275,52317],{"class":298},[288,144277,51784],{"class":51473},[288,144279,53659],{"class":2135},[288,144281,344],{"class":298},[288,144283,144115],{"class":403},[288,144285,144069],{"class":298},[288,144287,51784],{"class":51473},[288,144289,51480],{"class":298},[288,144291,144292],{"class":290,"line":1490},[288,144293,144126],{"class":357},[288,144295,144296,144298,144300,144302,144304,144306,144308,144310],{"class":290,"line":1502},[288,144297,52317],{"class":298},[288,144299,51784],{"class":51473},[288,144301,53659],{"class":2135},[288,144303,344],{"class":298},[288,144305,144139],{"class":403},[288,144307,144069],{"class":298},[288,144309,51784],{"class":51473},[288,144311,51480],{"class":298},[288,144313,144314,144316,144318],{"class":290,"line":1784},[288,144315,51958],{"class":298},[288,144317,51784],{"class":51473},[288,144319,51480],{"class":298},[19,144321,70626],{},[280,144323,144324],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,144325,144326,144330,144344,144348],{"__ignoreMap":205},[288,144327,144328],{"class":290,"line":291},[288,144329,130763],{"class":357},[288,144331,144332,144334,144336,144338,144340,144342],{"class":290,"line":206},[288,144333,1207],{"class":298},[288,144335,51784],{"class":51473},[288,144337,53659],{"class":2135},[288,144339,344],{"class":298},[288,144341,130776],{"class":403},[288,144343,51480],{"class":298},[288,144345,144346],{"class":290,"line":1352},[288,144347,130783],{"class":298},[288,144349,144350,144352,144354],{"class":290,"line":1367},[288,144351,51958],{"class":298},[288,144353,51784],{"class":51473},[288,144355,51480],{"class":298},[5299,144357,138053],{},{"title":205,"searchDepth":206,"depth":206,"links":144359},[144360,144361,144365,144366,144367],{"id":143504,"depth":206,"text":143505},{"id":143536,"depth":206,"text":143537,"children":144362},[144363,144364],{"id":143540,"depth":1352,"text":143541},{"id":143557,"depth":1352,"text":143558},{"id":143576,"depth":206,"text":143577},{"id":143583,"depth":206,"text":143584},{"id":143670,"depth":206,"text":143671,"children":144368},[144369,144370,144371,144372,144373],{"id":143677,"depth":1352,"text":143678},{"id":143805,"depth":1352,"text":143806},{"id":143899,"depth":1352,"text":143900},{"id":143948,"depth":1352,"text":143949},{"id":143958,"depth":1352,"text":143959},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143496,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144380,"title":144381,"body":144382,"description":214,"extension":215,"meta":145609,"navigation":217,"path":145610,"seo":145611,"stem":145612,"__hash__":145613},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144383,"toc":145587},[144384,144387,144391,144395,144398,144401,144405,144410,144413,144416,144419,144422,144425,144482,144485,144490,144493,144496,144500,144511,144515,144518,144521,144528,144533,144537,144540,144546,144549,144553,144556,144563,144566,144569,144576,144579,144586,144589,144592,144599,144602,144605,144607,144624,144628,144631,144634,144637,144641,144644,144647,144650,144653,144656,144659,144661,144664,144667,144729,144732,144842,144849,144855,144858,144861,144865,144868,144872,144877,144880,144887,144890,144896,144901,144904,144907,144910,144913,144916,144919,144922,144925,144981,144983,145009,145013,145016,145019,145022,145030,145033,145036,145040,145096,145099,145103,145109,145120,145123,145128,145131,145134,145140,145143,145146,145149,145152,145155,145158,145161,145164,145189,145195,145198,145201,145204,145207,145210,145213,145218,145221,145224,145227,145235,145238,145245,145248,145251,145253,145277,145279,145282,145285,145288,145291,145294,145297,145300,145334,145337,145340,145374,145381,145384,145387,145390,145393,145396,145399,145406,145409,145412,145415,145418,145425,145428,145431,145438,145441,145444,145448,145451,145454,145457,145460,145463,145466,145469,145472,145474,145498,145500,145524,145528,145539,145542,145545,145548,145551,145554,145557,145560,145563,145566,145569,145572,145575,145578,145581,145584],[10,144385,144381],{"id":144386},"_21-移动端布局实战下篇",[14,144388,144390],{"id":144389},"_211-rem适配布局","21.1 rem适配布局",[260,144392,144394],{"id":144393},"_2111-rem单位","21.1.1 rem单位",[200,144396],{"style":202,"src":144397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144399,144400],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[260,144402,144404],{"id":144403},"_2112-媒体查询","21.1.2 媒体查询",[243,144406,144407],{},[246,144408,144409],{},"参数介绍",[200,144411],{"style":202,"src":144412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[200,144414],{"style":202,"src":144415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[200,144417],{"style":202,"src":144418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[200,144420],{"style":202,"src":144421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[200,144423],{"style":202,"src":144424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[280,144426,144428],{"className":126652,"code":144427,"language":126654,"meta":205,"style":205},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[25,144429,144430,144435,144454,144461,144474,144478],{"__ignoreMap":205},[288,144431,144432],{"class":290,"line":291},[288,144433,144434],{"class":357},"\u002F* 媒体查询 *\u002F\n",[288,144436,144437,144440,144442,144445,144447,144450,144452],{"class":290,"line":206},[288,144438,144439],{"class":294},"@media",[288,144441,1830],{"class":298},[288,144443,144444],{"class":347},"max-width",[288,144446,51610],{"class":298},[288,144448,144449],{"class":347},"768",[288,144451,51665],{"class":294},[288,144453,12615],{"class":298},[288,144455,144456,144459],{"class":290,"line":1352},[288,144457,144458],{"class":2135},"  .container",[288,144460,15745],{"class":298},[288,144462,144463,144466,144468,144470,144472],{"class":290,"line":1367},[288,144464,144465],{"class":347},"    width",[288,144467,51610],{"class":298},[288,144469,608],{"class":347},[288,144471,625],{"class":294},[288,144473,1463],{"class":298},[288,144475,144476],{"class":290,"line":1373},[288,144477,127448],{"class":298},[288,144479,144480],{"class":290,"line":1387},[288,144481,1737],{"class":298},[19,144483,144484],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[243,144486,144487],{"start":206},[246,144488,144489],{},"引入资源",[200,144491],{"style":202,"src":144492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144494,144495],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[260,144497,144499],{"id":144498},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1304,144501,144502,144505,144508],{},[246,144503,144504],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[246,144506,144507],{},"媒体查询可以根据不同设备宽度来修改样式",[246,144509,144510],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144512,144514],{"id":144513},"_212-less基础","21.2 Less基础",[19,144516,144517],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144519,144520],{},"Less可以解决该问题，它是css的扩展语言",[19,144522,144523,144524],{},"Less中文网址： ",[104,144525,144526],{"href":144526,"rel":144527},"http:\u002F\u002Flesscss.cn\u002F",[108],[19,144529,144530],{},[448,144531,144532],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[260,144534,144536],{"id":144535},"_2121-less安装","21.2.1 less安装",[19,144538,144539],{},"如果使用vscode，则无需进行下方安装步骤",[19,144541,144542],{},[104,144543,144544],{"href":144544,"rel":144545},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[108],[200,144547],{"style":202,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[260,144550,144552],{"id":144551},"_2122-less使用","21.2.2 less使用",[19,144554,144555],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[243,144557,144558],{},[246,144559,144560],{},[448,144561,144562],{},"Less 变量",[200,144564],{"style":202,"src":144565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[200,144567],{"style":202,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[243,144570,144571],{"start":206},[246,144572,144573],{},[448,144574,144575],{},"Less 编译",[200,144577],{"style":202,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[243,144580,144581],{"start":1352},[246,144582,144583],{},[448,144584,144585],{},"Less 嵌套",[200,144587],{"style":202,"src":144588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[200,144590],{"style":202,"src":144591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[243,144593,144594],{"start":1367},[246,144595,144596],{},[448,144597,144598],{},"Less 运算",[200,144600],{"style":202,"src":144601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144603,144604],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144606,328],{},[1304,144608,144609,144612,144615,144618,144621],{},[246,144610,144611],{},"乘号（*）和除号（\u002F）的写法",[246,144613,144614],{},"运算符中间左右有个空格隔开 1px + 5",[246,144616,144617],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[246,144619,144620],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[246,144622,144623],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144625,144627],{"id":144626},"_213-rem-适配方案","21.3 rem 适配方案",[19,144629,144630],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144632,144633],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[200,144635],{"style":202,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[260,144638,144640],{"id":144639},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144642,144643],{},"rem + 媒体查询 + less 技术",[200,144645],{"style":202,"src":144646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144648,144649],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144651,144652],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[200,144654],{"style":202,"src":144655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144657,144658],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144660,14806],{},[200,144662],{"style":202,"src":144663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144665,144666],{},"index.html:",[280,144668,144670],{"className":126652,"code":144669,"language":126654,"meta":205,"style":205},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[25,144671,144672,144677,144683,144699,144703,144709,144725],{"__ignoreMap":205},[288,144673,144674],{"class":290,"line":291},[288,144675,144676],{"class":357},"\u002F* rem 适配方案 *\u002F\n",[288,144678,144679,144681],{"class":290,"line":206},[288,144680,50808],{"class":51473},[288,144682,15745],{"class":298},[288,144684,144685,144687,144689,144692,144694,144696],{"class":290,"line":1352},[288,144686,70799],{"class":347},[288,144688,51610],{"class":298},[288,144690,144691],{"class":347},"62.5",[288,144693,625],{"class":294},[288,144695,130515],{"class":298},[288,144697,144698],{"class":357},"\u002F* 1rem = 10px *\u002F\n",[288,144700,144701],{"class":290,"line":1367},[288,144702,1737],{"class":298},[288,144704,144705,144707],{"class":290,"line":1373},[288,144706,130500],{"class":2135},[288,144708,15745],{"class":298},[288,144710,144711,144713,144715,144717,144720,144722],{"class":290,"line":1387},[288,144712,70741],{"class":347},[288,144714,51610],{"class":298},[288,144716,743],{"class":347},[288,144718,144719],{"class":294},"rem",[288,144721,130515],{"class":298},[288,144723,144724],{"class":357},"\u002F* 100px *\u002F\n",[288,144726,144727],{"class":290,"line":1393},[288,144728,1737],{"class":298},[19,144730,144731],{},"common.less",[280,144733,144735],{"className":126652,"code":144734,"language":126654,"meta":205,"style":205},"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",[25,144736,144737,144743,144758,144762,144768,144782,144786,144790,144794,144800,144814,144818,144824,144838],{"__ignoreMap":205},[288,144738,144739,144741],{"class":290,"line":291},[288,144740,50808],{"class":51473},[288,144742,15745],{"class":298},[288,144744,144745,144747,144749,144751,144753,144755],{"class":290,"line":206},[288,144746,70799],{"class":347},[288,144748,51610],{"class":298},[288,144750,144691],{"class":347},[288,144752,625],{"class":294},[288,144754,26240],{"class":298},[288,144756,144757],{"class":357},"\u002F* 10px *\u002F\n",[288,144759,144760],{"class":290,"line":1352},[288,144761,1737],{"class":298},[288,144763,144764,144766],{"class":290,"line":1367},[288,144765,51784],{"class":51473},[288,144767,15745],{"class":298},[288,144769,144770,144772,144774,144776,144778,144780],{"class":290,"line":1373},[288,144771,70741],{"class":347},[288,144773,51610],{"class":298},[288,144775,743],{"class":347},[288,144777,144719],{"class":294},[288,144779,26240],{"class":298},[288,144781,144724],{"class":357},[288,144783,144784],{"class":290,"line":1387},[288,144785,1737],{"class":298},[288,144787,144788],{"class":290,"line":1393},[288,144789,136113],{"class":298},[288,144791,144792],{"class":290,"line":1484},[288,144793,144676],{"class":357},[288,144795,144796,144798],{"class":290,"line":1490},[288,144797,50808],{"class":51473},[288,144799,15745],{"class":298},[288,144801,144802,144804,144806,144808,144810,144812],{"class":290,"line":1502},[288,144803,70799],{"class":347},[288,144805,51610],{"class":298},[288,144807,144691],{"class":347},[288,144809,625],{"class":294},[288,144811,130515],{"class":298},[288,144813,144698],{"class":357},[288,144815,144816],{"class":290,"line":1784},[288,144817,1737],{"class":298},[288,144819,144820,144822],{"class":290,"line":1789},[288,144821,130500],{"class":2135},[288,144823,15745],{"class":298},[288,144825,144826,144828,144830,144832,144834,144836],{"class":290,"line":1795},[288,144827,70741],{"class":347},[288,144829,51610],{"class":298},[288,144831,743],{"class":347},[288,144833,144719],{"class":294},[288,144835,130515],{"class":298},[288,144837,144724],{"class":357},[288,144839,144840],{"class":290,"line":1800},[288,144841,1737],{"class":298},[19,144843,144844,144845,144848],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23726,144846,144847],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[280,144850,144853],{"className":144851,"code":144852,"language":5360},[5358],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[25,144854,144852],{"__ignoreMap":205},[19,144856,144857],{},"less保存时会自动变成.css文件",[19,144859,144860],{},"好好搞懂上述代码写法",[260,144862,144864],{"id":144863},"_2132-样式导入样式","21.3.2 样式导入样式",[200,144866],{"style":202,"src":144867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[260,144869,144871],{"id":144870},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[243,144873,144874],{},[246,144875,144876],{},"准备工作",[200,144878],{"style":202,"src":144879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144881,144882,144883],{},"github地址：",[104,144884,144885],{"href":144885,"rel":144886},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[108],[19,144888,144889],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144891,144892,144893],{},"js文件引入到index.html中使用的是",[25,144894,144895],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[243,144897,144898],{"start":206},[246,144899,144900],{},"vscode插件",[200,144902],{"style":202,"src":144903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144905,144906],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144908,144909],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[200,144911],{"style":202,"src":144912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144914,144915],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[200,144917],{"style":202,"src":144918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144920,144921],{},"修改成75就可以，alt+z为快捷键",[19,144923,144924],{},"index.css：",[280,144926,144927],{"className":126652,"code":144669,"language":126654,"meta":205,"style":205},[25,144928,144929,144933,144939,144953,144957,144963,144977],{"__ignoreMap":205},[288,144930,144931],{"class":290,"line":291},[288,144932,144676],{"class":357},[288,144934,144935,144937],{"class":290,"line":206},[288,144936,50808],{"class":51473},[288,144938,15745],{"class":298},[288,144940,144941,144943,144945,144947,144949,144951],{"class":290,"line":1352},[288,144942,70799],{"class":347},[288,144944,51610],{"class":298},[288,144946,144691],{"class":347},[288,144948,625],{"class":294},[288,144950,130515],{"class":298},[288,144952,144698],{"class":357},[288,144954,144955],{"class":290,"line":1367},[288,144956,1737],{"class":298},[288,144958,144959,144961],{"class":290,"line":1373},[288,144960,130500],{"class":2135},[288,144962,15745],{"class":298},[288,144964,144965,144967,144969,144971,144973,144975],{"class":290,"line":1387},[288,144966,70741],{"class":347},[288,144968,51610],{"class":298},[288,144970,743],{"class":347},[288,144972,144719],{"class":294},[288,144974,130515],{"class":298},[288,144976,144724],{"class":357},[288,144978,144979],{"class":290,"line":1393},[288,144980,1737],{"class":298},[19,144982,144666],{},[280,144984,144985],{"className":126652,"code":127056,"language":126654,"meta":205,"style":205},[25,144986,144987,144993,145005],{"__ignoreMap":205},[288,144988,144989,144991],{"class":290,"line":291},[288,144990,51973],{"class":51473},[288,144992,15745],{"class":298},[288,144994,144995,144997,144999,145001,145003],{"class":290,"line":206},[288,144996,70799],{"class":347},[288,144998,51610],{"class":298},[288,145000,898],{"class":347},[288,145002,51665],{"class":294},[288,145004,1463],{"class":298},[288,145006,145007],{"class":290,"line":1352},[288,145008,1737],{"class":298},[14,145010,145012],{"id":145011},"_214-响应式开发","21.4 响应式开发",[19,145014,145015],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[200,145017],{"style":202,"src":145018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145020,145021],{},"做法：",[1304,145023,145024,145027],{},[246,145025,145026],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[246,145028,145029],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[200,145031],{"style":202,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145034,145035],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[260,145037,145039],{"id":145038},"_2141-简单代码示范","21.4.1 简单代码示范",[280,145041,145042],{"className":126652,"code":144669,"language":126654,"meta":205,"style":205},[25,145043,145044,145048,145054,145068,145072,145078,145092],{"__ignoreMap":205},[288,145045,145046],{"class":290,"line":291},[288,145047,144676],{"class":357},[288,145049,145050,145052],{"class":290,"line":206},[288,145051,50808],{"class":51473},[288,145053,15745],{"class":298},[288,145055,145056,145058,145060,145062,145064,145066],{"class":290,"line":1352},[288,145057,70799],{"class":347},[288,145059,51610],{"class":298},[288,145061,144691],{"class":347},[288,145063,625],{"class":294},[288,145065,130515],{"class":298},[288,145067,144698],{"class":357},[288,145069,145070],{"class":290,"line":1367},[288,145071,1737],{"class":298},[288,145073,145074,145076],{"class":290,"line":1373},[288,145075,130500],{"class":2135},[288,145077,15745],{"class":298},[288,145079,145080,145082,145084,145086,145088,145090],{"class":290,"line":1387},[288,145081,70741],{"class":347},[288,145083,51610],{"class":298},[288,145085,743],{"class":347},[288,145087,144719],{"class":294},[288,145089,130515],{"class":298},[288,145091,144724],{"class":357},[288,145093,145094],{"class":290,"line":1393},[288,145095,1737],{"class":298},[19,145097,145098],{},"父盒子一般命名为container",[260,145100,145102],{"id":145101},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145104,145105,145106],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[448,145107,145108],{},"使得 Web 开发更加快捷",[1304,145110,145111],{},[246,145112,145113,145114],{},"官网：",[448,145115,145116],{},[104,145117,145118],{"href":145118,"rel":145119},"http:\u002F\u002Fgetbootstrap.com\u002F",[108],[19,145121,145122],{},"可以直接去官网拿现成的东西",[243,145124,145125],{},[246,145126,145127],{},"Bootstrap的使用",[19,145129,145130],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145132,145133],{},"Bootstrap 使用四步曲：",[19,145135,145136,145139],{},[448,145137,145138],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[200,145141],{"style":202,"src":145142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145144,145145],{},"打开Bootstrap官网，然后下载",[200,145147],{"style":202,"src":145148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[200,145150],{"style":202,"src":145151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145153,145154],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145156,145157],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145159,145160],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[200,145162],{"style":202,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[280,145165,145167],{"className":126652,"code":145166,"language":126654,"meta":205,"style":205},".center {\n  color: red;\n}\n",[25,145168,145169,145175,145185],{"__ignoreMap":205},[288,145170,145171,145173],{"class":290,"line":291},[288,145172,126943],{"class":2135},[288,145174,15745],{"class":298},[288,145176,145177,145179,145181,145183],{"class":290,"line":206},[288,145178,71078],{"class":347},[288,145180,51610],{"class":298},[288,145182,57594],{"class":347},[288,145184,1463],{"class":298},[288,145186,145187],{"class":290,"line":1352},[288,145188,1737],{"class":298},[19,145190,145191,145194],{},[25,145192,145193],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[200,145196],{"style":202,"src":145197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[200,145199],{"style":202,"src":145200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[200,145202],{"style":202,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145205,145206],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[200,145208],{"style":202,"src":145209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145211,145212],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[243,145214,145215],{"start":206},[246,145216,145217],{},"布局容器",[200,145219],{"style":202,"src":145220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145222,145223],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145225,145226],{},"container-fluid用于移动式布局比较方便",[243,145228,145229],{"start":1352},[246,145230,145231,145232],{},"bootstrap ",[448,145233,145234],{},"栅格系统原理",[200,145236],{"style":202,"src":145237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[243,145239,145240],{"start":1367},[246,145241,145242],{},[448,145243,145244],{},"栅格选项参数",[200,145246],{"style":202,"src":145247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145249,145250],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145252,14806],{},[280,145254,145255],{"className":126652,"code":145166,"language":126654,"meta":205,"style":205},[25,145256,145257,145263,145273],{"__ignoreMap":205},[288,145258,145259,145261],{"class":290,"line":291},[288,145260,126943],{"class":2135},[288,145262,15745],{"class":298},[288,145264,145265,145267,145269,145271],{"class":290,"line":206},[288,145266,71078],{"class":347},[288,145268,51610],{"class":298},[288,145270,57594],{"class":347},[288,145272,1463],{"class":298},[288,145274,145275],{"class":290,"line":1352},[288,145276,1737],{"class":298},[19,145278,135695],{},[200,145280],{"style":202,"src":145281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145283,145284],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145286,145287],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145289,145290],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145292,145293],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145295,145296],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145298,145299],{},"汇总展示说明：",[280,145301,145302],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,145303,145304,145308,145322,145326],{"__ignoreMap":205},[288,145305,145306],{"class":290,"line":291},[288,145307,130763],{"class":357},[288,145309,145310,145312,145314,145316,145318,145320],{"class":290,"line":206},[288,145311,1207],{"class":298},[288,145313,51784],{"class":51473},[288,145315,53659],{"class":2135},[288,145317,344],{"class":298},[288,145319,130776],{"class":403},[288,145321,51480],{"class":298},[288,145323,145324],{"class":290,"line":1352},[288,145325,130783],{"class":298},[288,145327,145328,145330,145332],{"class":290,"line":1367},[288,145329,51958],{"class":298},[288,145331,51784],{"class":51473},[288,145333,51480],{"class":298},[200,145335],{"style":202,"src":145336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145338,145339],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[280,145341,145342],{"className":127399,"code":130756,"language":127401,"meta":205,"style":205},[25,145343,145344,145348,145362,145366],{"__ignoreMap":205},[288,145345,145346],{"class":290,"line":291},[288,145347,130763],{"class":357},[288,145349,145350,145352,145354,145356,145358,145360],{"class":290,"line":206},[288,145351,1207],{"class":298},[288,145353,51784],{"class":51473},[288,145355,53659],{"class":2135},[288,145357,344],{"class":298},[288,145359,130776],{"class":403},[288,145361,51480],{"class":298},[288,145363,145364],{"class":290,"line":1352},[288,145365,130783],{"class":298},[288,145367,145368,145370,145372],{"class":290,"line":1367},[288,145369,51958],{"class":298},[288,145371,51784],{"class":51473},[288,145373,51480],{"class":298},[243,145375,145376],{"start":1373},[246,145377,145378],{},[448,145379,145380],{},"列嵌套",[200,145382],{"style":202,"src":145383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145385,145386],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145388,145389],{},"没加row内部这样：",[200,145391],{"style":202,"src":145392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145394,145395],{},"加上row之后内部为：",[200,145397],{"style":202,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[243,145400,145401],{"start":1387},[246,145402,145403],{},[448,145404,145405],{},"列偏移",[200,145407],{"style":202,"src":145408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145410,145411],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145413,145414],{},"要加偏移量，即偏移份数",[19,145416,145417],{},"偏移的份数=12-两个盒子的份数",[243,145419,145420],{"start":1393},[246,145421,145422],{},[448,145423,145424],{},"列排序",[200,145426],{"style":202,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145429,145430],{},"pull拉左；push推右",[243,145432,145433],{"start":1484},[246,145434,145435],{},[448,145436,145437],{},"响应式工具",[200,145439],{"style":202,"src":145440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145442,145443],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[260,145445,145447],{"id":145446},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145449,145450],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145452,145453],{},"ul {",[19,145455,145456],{},"list-style: none;",[19,145458,145459],{},"margin:0;",[19,145461,145462],{},"padding:0; }",[200,145464],{"style":202,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[200,145467],{"style":202,"src":145468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145470,145471],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145473,69062],{},[280,145475,145476],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,145477,145478,145484,145494],{"__ignoreMap":205},[288,145479,145480,145482],{"class":290,"line":291},[288,145481,130500],{"class":2135},[288,145483,15745],{"class":298},[288,145485,145486,145488,145490,145492],{"class":290,"line":206},[288,145487,131132],{"class":347},[288,145489,51610],{"class":298},[288,145491,23909],{"class":347},[288,145493,1463],{"class":298},[288,145495,145496],{"class":290,"line":1352},[288,145497,1737],{"class":298},[19,145499,70626],{},[280,145501,145502],{"className":126652,"code":139322,"language":126654,"meta":205,"style":205},[25,145503,145504,145510,145520],{"__ignoreMap":205},[288,145505,145506,145508],{"class":290,"line":291},[288,145507,130500],{"class":2135},[288,145509,15745],{"class":298},[288,145511,145512,145514,145516,145518],{"class":290,"line":206},[288,145513,131132],{"class":347},[288,145515,51610],{"class":298},[288,145517,23909],{"class":347},[288,145519,1463],{"class":298},[288,145521,145522],{"class":290,"line":1352},[288,145523,1737],{"class":298},[14,145525,145527],{"id":145526},"_215-swiper-插件使用","21.5 swiper 插件使用",[1304,145529,145530,145533,145536],{},[246,145531,145532],{},"下载需要的css和js文件html页面中 引入相关文件",[246,145534,145535],{},"官网找到类似案例，复制html结构，css样式 js 语法",[246,145537,145538],{},"根据需求定制修改模块",[200,145540],{"style":202,"src":145541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145543,145544],{},"解压后将这两部分放到项目中",[200,145546],{"style":202,"src":145547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145549,145550],{},"这个插件可以帮助我们实现轮播图效果",[19,145552,145553],{},"用法：",[200,145555],{"style":202,"src":145556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145558,145559],{},"找到自己喜欢的",[200,145561],{"style":202,"src":145562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145564,145565],{},"右键，查看网页源代码",[200,145567],{"style":202,"src":145568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145570,145571],{},"复制人家的结构内容",[19,145573,145574],{},"然后去看API文档：",[200,145576],{"style":202,"src":145577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145579,145580],{},"可以看看如何修改样式",[19,145582,145583],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5299,145585,145586],{},"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":205,"searchDepth":206,"depth":206,"links":145588},[145589,145594,145598,145603,145608],{"id":144389,"depth":206,"text":144390,"children":145590},[145591,145592,145593],{"id":144393,"depth":1352,"text":144394},{"id":144403,"depth":1352,"text":144404},{"id":144498,"depth":1352,"text":144499},{"id":144513,"depth":206,"text":144514,"children":145595},[145596,145597],{"id":144535,"depth":1352,"text":144536},{"id":144551,"depth":1352,"text":144552},{"id":144626,"depth":206,"text":144627,"children":145599},[145600,145601,145602],{"id":144639,"depth":1352,"text":144640},{"id":144863,"depth":1352,"text":144864},{"id":144870,"depth":1352,"text":144871},{"id":145011,"depth":206,"text":145012,"children":145604},[145605,145606,145607],{"id":145038,"depth":1352,"text":145039},{"id":145101,"depth":1352,"text":145102},{"id":145446,"depth":1352,"text":145447},{"id":145526,"depth":206,"text":145527},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144381,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145615,"title":145616,"body":145617,"description":214,"extension":215,"meta":145837,"navigation":217,"path":145838,"seo":145839,"stem":145840,"__hash__":145841},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145618,"toc":145833},[145619,145622,145626,145629,145644,145649,145652,145657,145692,145697,145709,145714,145727,145732,145749,145754,145774,145779,145797,145800,145803,145806,145809,145813,145816,145819,145822,145825,145828,145831],[10,145620,145616],{"id":145621},"_22-代码提交与新型相对单位",[14,145623,145625],{"id":145624},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145627,145628],{},"法1：",[243,145630,145631,145638,145641],{},[246,145632,145633,145634],{},"登录网站注册：",[104,145635,145636],{"href":145636,"rel":145637},"https:\u002F\u002Fgitee.com\u002F",[108],[246,145639,145640],{},"码云创建新的仓库",[246,145642,145643],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1304,145645,145646],{},[246,145647,145648],{},"在网站根目录右键-- Git Bash Here",[200,145650],{"style":202,"src":145651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1304,145653,145654],{},[246,145655,145656],{},"如果是第一次利用git提交，请配置好全局选项",[280,145658,145660],{"className":117469,"code":145659,"language":117471,"meta":205,"style":205},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[25,145661,145662,145678],{"__ignoreMap":205},[288,145663,145664,145667,145669,145672,145675],{"class":290,"line":291},[288,145665,145666],{"class":2135},"git",[288,145668,119892],{"class":403},[288,145670,145671],{"class":347}," --global",[288,145673,145674],{"class":403}," user.name",[288,145676,145677],{"class":403}," \"你的名字\"\n",[288,145679,145680,145682,145684,145686,145689],{"class":290,"line":206},[288,145681,145666],{"class":2135},[288,145683,119892],{"class":403},[288,145685,145671],{"class":347},[288,145687,145688],{"class":403}," user.email",[288,145690,145691],{"class":403}," \"你的邮箱\"\n",[1304,145693,145694],{},[246,145695,145696],{},"初始化仓库",[280,145698,145700],{"className":117469,"code":145699,"language":117471,"meta":205,"style":205},"git init\n",[25,145701,145702],{"__ignoreMap":205},[288,145703,145704,145706],{"class":290,"line":291},[288,145705,145666],{"class":2135},[288,145707,145708],{"class":403}," init\n",[1304,145710,145711],{},[246,145712,145713],{},"把本地文件放到暂存区",[280,145715,145717],{"className":117469,"code":145716,"language":117471,"meta":205,"style":205},"git add .\n",[25,145718,145719],{"__ignoreMap":205},[288,145720,145721,145723,145725],{"class":290,"line":291},[288,145722,145666],{"class":2135},[288,145724,5382],{"class":403},[288,145726,28914],{"class":403},[1304,145728,145729],{},[246,145730,145731],{},"把本地文件放到本地仓库里面",[280,145733,145735],{"className":117469,"code":145734,"language":117471,"meta":205,"style":205},"git commit -m \"first commit\"\n",[25,145736,145737],{"__ignoreMap":205},[288,145738,145739,145741,145744,145746],{"class":290,"line":291},[288,145740,145666],{"class":2135},[288,145742,145743],{"class":403}," commit",[288,145745,101055],{"class":347},[288,145747,145748],{"class":403}," \"first commit\"\n",[1304,145750,145751],{},[246,145752,145753],{},"链接远程仓库",[280,145755,145757],{"className":117469,"code":145756,"language":117471,"meta":205,"style":205},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[25,145758,145759],{"__ignoreMap":205},[288,145760,145761,145763,145766,145768,145771],{"class":290,"line":291},[288,145762,145666],{"class":2135},[288,145764,145765],{"class":403}," remote",[288,145767,5382],{"class":403},[288,145769,145770],{"class":403}," origin",[288,145772,145773],{"class":403}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1304,145775,145776],{},[246,145777,145778],{},"把本地仓库的文件推送到远程仓库 push",[280,145780,145782],{"className":117469,"code":145781,"language":117471,"meta":205,"style":205},"git push -u origin master\n",[25,145783,145784],{"__ignoreMap":205},[288,145785,145786,145788,145790,145792,145794],{"class":290,"line":291},[288,145787,145666],{"class":2135},[288,145789,29189],{"class":403},[288,145791,28463],{"class":347},[288,145793,145770],{"class":403},[288,145795,145796],{"class":403}," master\n",[200,145798],{"style":202,"src":145799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145801,145802],{},"上方方法暂未实现，后边学完git后在整",[19,145804,145805],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[200,145807],{"style":202,"src":145808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145810,145812],{"id":145811},"_222-新型相对单位","22.2 新型相对单位",[200,145814],{"style":202,"src":145815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[200,145817],{"style":202,"src":145818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145820,145821],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145823,145824],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[200,145826],{"style":202,"src":145827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145829,145830],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5299,145832,24130],{},{"title":205,"searchDepth":206,"depth":206,"links":145834},[145835,145836],{"id":145624,"depth":206,"text":145625},{"id":145811,"depth":206,"text":145812},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145616,"description":214},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145843,"title":145844,"body":145845,"description":145849,"extension":215,"meta":145850,"navigation":217,"path":145851,"seo":145852,"stem":145853,"__hash__":145854},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145846,"toc":145847},[],{"title":205,"searchDepth":206,"depth":206,"links":145848},[],"自己正经开始学编程的第一门语言！",{"category":93012},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145844,"description":145849},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145856,"title":145857,"body":145858,"description":214,"extension":215,"meta":147005,"navigation":217,"path":147006,"seo":147007,"stem":147008,"__hash__":147009},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145859,"toc":146981},[145860,145863,145867,145870,145873,145898,145901,145907,145911,145914,145941,145944,145984,145987,145999,146002,146008,146012,146016,146043,146060,146067,146071,146074,146100,146103,146107,146110,146150,146153,146170,146176,146180,146185,146229,146232,146250,146253,146321,146325,146332,146335,146350,146353,146362,146365,146376,146379,146388,146391,146408,146411,146426,146430,146434,146437,146439,146459,146463,146466,146469,146480,146483,146489,146493,146499,146526,146529,146541,146544,146555,146558,146564,146568,146574,146624,146627,146669,146672,146705,146708,146742,146746,146749,146769,146772,146808,146811,146824,146828,146832,146838,146841,146854,146858,146861,146867,146870,146874,146877,146880,146929,146933,146949,146955,146962,146968,146978],[10,145861,145857],{"id":145862},"_1-python环境与第一个程序",[14,145864,145866],{"id":145865},"_11-什么是python","1.1 什么是Python",[19,145868,145869],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145871,145872],{},"理解 Python 时抓住三个关键词：",[243,145874,145875,145878,145881],{},[246,145876,145877],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[246,145879,145880],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[246,145882,145883,145884,511,145887,511,145890,511,145893,511,145895,28558],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[25,145885,145886],{},"os",[25,145888,145889],{},"sys",[25,145891,145892],{},"json",[25,145894,58033],{},[25,145896,145897],{},"datetime",[19,145899,145900],{},"Python 程序的运行链路：",[280,145902,145905],{"className":145903,"code":145904,"language":5360,"meta":205},[5358],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[25,145906,145904],{"__ignoreMap":205},[14,145908,145910],{"id":145909},"_12-python解释器","1.2 Python解释器",[19,145912,145913],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[280,145915,145917],{"className":23995,"code":145916,"language":23997,"meta":205,"style":205},"python --version\npython3 --version\npython\npython3\n",[25,145918,145919,145925,145931,145936],{"__ignoreMap":205},[288,145920,145921,145923],{"class":290,"line":291},[288,145922,30553],{"class":2135},[288,145924,26466],{"class":347},[288,145926,145927,145929],{"class":290,"line":206},[288,145928,101052],{"class":2135},[288,145930,26466],{"class":347},[288,145932,145933],{"class":290,"line":1352},[288,145934,145935],{"class":2135},"python\n",[288,145937,145938],{"class":290,"line":1367},[288,145939,145940],{"class":2135},"python3\n",[19,145942,145943],{},"进入交互模式后，可以直接输入表达式：",[280,145945,145947],{"className":30551,"code":145946,"language":30553,"meta":205,"style":205},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[25,145948,145949,145960,145965,145979],{"__ignoreMap":205},[288,145950,145951,145954,145956,145958],{"class":290,"line":291},[288,145952,145953],{"class":294},">>>",[288,145955,25291],{"class":347},[288,145957,45739],{"class":294},[288,145959,47896],{"class":347},[288,145961,145962],{"class":290,"line":206},[288,145963,145964],{"class":347},"3\n",[288,145966,145967,145969,145972,145974,145977],{"class":290,"line":1352},[288,145968,145953],{"class":294},[288,145970,145971],{"class":347}," print",[288,145973,299],{"class":298},[288,145975,145976],{"class":403},"\"hello python\"",[288,145978,305],{"class":298},[288,145980,145981],{"class":290,"line":1367},[288,145982,145983],{"class":298},"hello python\n",[19,145985,145986],{},"退出交互模式：",[280,145988,145990],{"className":30551,"code":145989,"language":30553,"meta":205,"style":205},"exit()\n",[25,145991,145992],{"__ignoreMap":205},[288,145993,145994,145997],{"class":290,"line":291},[288,145995,145996],{"class":347},"exit",[288,145998,2148],{"class":298},[19,146000,146001],{},"或使用快捷键：",[280,146003,146006],{"className":146004,"code":146005,"language":5360,"meta":205},[5358],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[25,146007,146005],{"__ignoreMap":205},[14,146009,146011],{"id":146010},"_13-安装python","1.3 安装Python",[260,146013,146015],{"id":146014},"_131-windows安装","1.3.1 Windows安装",[243,146017,146018,146025,146028,146034,146040],{},[246,146019,146020,146021],{},"打开 Python 官网：",[104,146022,146023],{"href":146023,"rel":146024},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[108],[246,146026,146027],{},"下载 Windows Installer。",[246,146029,146030,146031,28558],{},"安装时勾选 ",[25,146032,146033],{},"Add Python to PATH",[246,146035,146036,146037,28558],{},"点击 ",[25,146038,146039],{},"Install Now",[246,146041,146042],{},"安装完成后打开命令提示符验证：",[280,146044,146046],{"className":23995,"code":146045,"language":23997,"meta":205,"style":205},"python --version\npip --version\n",[25,146047,146048,146054],{"__ignoreMap":205},[288,146049,146050,146052],{"class":290,"line":291},[288,146051,30553],{"class":2135},[288,146053,26466],{"class":347},[288,146055,146056,146058],{"class":290,"line":206},[288,146057,24004],{"class":2135},[288,146059,26466],{"class":347},[19,146061,146062,146063,146066],{},"如果提示 ",[25,146064,146065],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[260,146068,146070],{"id":146069},"_132-macos安装","1.3.2 macOS安装",[19,146072,146073],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[280,146075,146077],{"className":23995,"code":146076,"language":23997,"meta":205,"style":205},"brew install python\npython3 --version\npip3 --version\n",[25,146078,146079,146088,146094],{"__ignoreMap":205},[288,146080,146081,146084,146086],{"class":290,"line":291},[288,146082,146083],{"class":2135},"brew",[288,146085,24007],{"class":403},[288,146087,124491],{"class":403},[288,146089,146090,146092],{"class":290,"line":206},[288,146091,101052],{"class":2135},[288,146093,26466],{"class":347},[288,146095,146096,146098],{"class":290,"line":1352},[288,146097,119873],{"class":2135},[288,146099,26466],{"class":347},[19,146101,146102],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[260,146104,146106],{"id":146105},"_133-linux安装","1.3.3 Linux安装",[19,146108,146109],{},"Ubuntu\u002FDebian：",[280,146111,146113],{"className":23995,"code":146112,"language":23997,"meta":205,"style":205},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[25,146114,146115,146123,146138,146144],{"__ignoreMap":205},[288,146116,146117,146119,146121],{"class":290,"line":291},[288,146118,24749],{"class":2135},[288,146120,117490],{"class":403},[288,146122,26415],{"class":403},[288,146124,146125,146127,146129,146131,146133,146135],{"class":290,"line":206},[288,146126,24749],{"class":2135},[288,146128,117490],{"class":403},[288,146130,24007],{"class":403},[288,146132,104576],{"class":403},[288,146134,100971],{"class":403},[288,146136,146137],{"class":403}," python3-venv\n",[288,146139,146140,146142],{"class":290,"line":1352},[288,146141,101052],{"class":2135},[288,146143,26466],{"class":347},[288,146145,146146,146148],{"class":290,"line":1367},[288,146147,119873],{"class":2135},[288,146149,26466],{"class":347},[19,146151,146152],{},"Fedora：",[280,146154,146156],{"className":23995,"code":146155,"language":23997,"meta":205,"style":205},"sudo dnf install python3 python3-pip\n",[25,146157,146158],{"__ignoreMap":205},[288,146159,146160,146162,146164,146166,146168],{"class":290,"line":291},[288,146161,24749],{"class":2135},[288,146163,26488],{"class":403},[288,146165,24007],{"class":403},[288,146167,104576],{"class":403},[288,146169,119938],{"class":403},[19,146171,146172,146173,146175],{},"Linux 上通常使用 ",[25,146174,101052],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146177,146179],{"id":146178},"_14-pip包管理器","1.4 pip包管理器",[19,146181,146182,146184],{},[25,146183,24004],{}," 用来安装第三方库。",[280,146186,146188],{"className":23995,"code":146187,"language":23997,"meta":205,"style":205},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[25,146189,146190,146199,146208,146216,146222],{"__ignoreMap":205},[288,146191,146192,146194,146196],{"class":290,"line":291},[288,146193,24004],{"class":2135},[288,146195,24007],{"class":403},[288,146197,146198],{"class":403}," requests\n",[288,146200,146201,146203,146206],{"class":290,"line":206},[288,146202,24004],{"class":2135},[288,146204,146205],{"class":403}," uninstall",[288,146207,146198],{"class":403},[288,146209,146210,146212,146214],{"class":290,"line":1352},[288,146211,24004],{"class":2135},[288,146213,117747],{"class":403},[288,146215,146198],{"class":403},[288,146217,146218,146220],{"class":290,"line":1367},[288,146219,24004],{"class":2135},[288,146221,119128],{"class":403},[288,146223,146224,146226],{"class":290,"line":1373},[288,146225,24004],{"class":2135},[288,146227,146228],{"class":403}," freeze\n",[19,146230,146231],{},"国内网络较慢时可以临时使用镜像：",[280,146233,146235],{"className":23995,"code":146234,"language":23997,"meta":205,"style":205},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,146236,146237],{"__ignoreMap":205},[288,146238,146239,146241,146243,146246,146248],{"class":290,"line":291},[288,146240,24004],{"class":2135},[288,146242,24007],{"class":403},[288,146244,146245],{"class":403}," requests",[288,146247,26603],{"class":347},[288,146249,119901],{"class":403},[19,146251,146252],{},"常见第三方库：",[436,146254,146255,146264],{},[439,146256,146257],{},[442,146258,146259,146262],{},[445,146260,146261],{},"库",[445,146263,102869],{},[483,146265,146266,146274,146281,146289,146297,146305,146313],{},[442,146267,146268,146271],{},[488,146269,146270],{},"requests",[488,146272,146273],{},"网络请求",[442,146275,146276,146278],{},[488,146277,100799],{},[488,146279,146280],{},"数值计算",[442,146282,146283,146286],{},[488,146284,146285],{},"pandas",[488,146287,146288],{},"表格数据处理",[442,146290,146291,146294],{},[488,146292,146293],{},"matplotlib",[488,146295,146296],{},"绘图",[442,146298,146299,146302],{},[488,146300,146301],{},"pyecharts",[488,146303,146304],{},"ECharts 图表",[442,146306,146307,146310],{},[488,146308,146309],{},"flask",[488,146311,146312],{},"Web 后端",[442,146314,146315,146318],{},[488,146316,146317],{},"pytest",[488,146319,146320],{},"自动化测试",[14,146322,146324],{"id":146323},"_15-虚拟环境","1.5 虚拟环境",[19,146326,146327,146328,146331],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[25,146329,146330],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146333,146334],{},"创建虚拟环境：",[280,146336,146338],{"className":23995,"code":146337,"language":23997,"meta":205,"style":205},"python -m venv .venv\n",[25,146339,146340],{"__ignoreMap":205},[288,146341,146342,146344,146346,146348],{"class":290,"line":291},[288,146343,30553],{"class":2135},[288,146345,101055],{"class":347},[288,146347,101058],{"class":403},[288,146349,101061],{"class":403},[19,146351,146352],{},"Windows 激活：",[280,146354,146356],{"className":23995,"code":146355,"language":23997,"meta":205,"style":205},".venv\\Scripts\\activate\n",[25,146357,146358],{"__ignoreMap":205},[288,146359,146360],{"class":290,"line":291},[288,146361,146355],{"class":2135},[19,146363,146364],{},"macOS\u002FLinux 激活：",[280,146366,146368],{"className":23995,"code":146367,"language":23997,"meta":205,"style":205},"source .venv\u002Fbin\u002Factivate\n",[25,146369,146370],{"__ignoreMap":205},[288,146371,146372,146374],{"class":290,"line":291},[288,146373,101066],{"class":347},[288,146375,101069],{"class":403},[19,146377,146378],{},"退出虚拟环境：",[280,146380,146382],{"className":23995,"code":146381,"language":23997,"meta":205,"style":205},"deactivate\n",[25,146383,146384],{"__ignoreMap":205},[288,146385,146386],{"class":290,"line":291},[288,146387,146381],{"class":2135},[19,146389,146390],{},"保存依赖：",[280,146392,146394],{"className":23995,"code":146393,"language":23997,"meta":205,"style":205},"pip freeze > requirements.txt\n",[25,146395,146396],{"__ignoreMap":205},[288,146397,146398,146400,146403,146405],{"class":290,"line":291},[288,146399,24004],{"class":2135},[288,146401,146402],{"class":403}," freeze",[288,146404,26395],{"class":294},[288,146406,146407],{"class":403}," requirements.txt\n",[19,146409,146410],{},"安装依赖：",[280,146412,146414],{"className":23995,"code":146413,"language":23997,"meta":205,"style":205},"pip install -r requirements.txt\n",[25,146415,146416],{"__ignoreMap":205},[288,146417,146418,146420,146422,146424],{"class":290,"line":291},[288,146419,24004],{"class":2135},[288,146421,24007],{"class":403},[288,146423,119812],{"class":347},[288,146425,146407],{"class":403},[14,146427,146429],{"id":146428},"_16-开发工具","1.6 开发工具",[260,146431,146433],{"id":146432},"_161-pycharm","1.6.1 PyCharm",[19,146435,146436],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146438,122235],{},[243,146440,146441,146444,146447,146453,146456],{},[246,146442,146443],{},"New Project：创建项目。",[246,146445,146446],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[246,146448,146449,146450,126156],{},"New Python File：创建 ",[25,146451,146452],{},".py",[246,146454,146455],{},"Run：运行当前文件。",[246,146457,146458],{},"Debug：断点调试。",[260,146460,146462],{"id":146461},"_162-vs-code","1.6.2 VS Code",[19,146464,146465],{},"VS Code 轻量，适合后续多语言开发。",[19,146467,146468],{},"建议安装插件：",[243,146470,146471,146474,146477],{},[246,146472,146473],{},"Python。",[246,146475,146476],{},"Pylance。",[246,146478,146479],{},"Jupyter。",[19,146481,146482],{},"选择解释器：",[280,146484,146487],{"className":146485,"code":146486,"language":5360,"meta":205},[5358],"Ctrl + Shift + P -> Python: Select Interpreter\n",[25,146488,146486],{"__ignoreMap":205},[14,146490,146492],{"id":146491},"_17-第一个python程序","1.7 第一个Python程序",[19,146494,146495,146496,24791],{},"创建文件 ",[25,146497,146498],{},"hello.py",[280,146500,146502],{"className":30551,"code":146501,"language":30553,"meta":205,"style":205},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[25,146503,146504,146515],{"__ignoreMap":205},[288,146505,146506,146508,146510,146513],{"class":290,"line":291},[288,146507,30588],{"class":347},[288,146509,299],{"class":298},[288,146511,146512],{"class":403},"\"Hello World\"",[288,146514,305],{"class":298},[288,146516,146517,146519,146521,146524],{"class":290,"line":206},[288,146518,30588],{"class":347},[288,146520,299],{"class":298},[288,146522,146523],{"class":403},"\"你好，Python\"",[288,146525,305],{"class":298},[19,146527,146528],{},"在终端运行：",[280,146530,146532],{"className":23995,"code":146531,"language":23997,"meta":205,"style":205},"python hello.py\n",[25,146533,146534],{"__ignoreMap":205},[288,146535,146536,146538],{"class":290,"line":291},[288,146537,30553],{"class":2135},[288,146539,146540],{"class":403}," hello.py\n",[19,146542,146543],{},"或：",[280,146545,146547],{"className":23995,"code":146546,"language":23997,"meta":205,"style":205},"python3 hello.py\n",[25,146548,146549],{"__ignoreMap":205},[288,146550,146551,146553],{"class":290,"line":291},[288,146552,101052],{"class":2135},[288,146554,146540],{"class":403},[19,146556,146557],{},"输出：",[280,146559,146562],{"className":146560,"code":146561,"language":5360,"meta":205},[5358],"Hello World\n你好，Python\n",[25,146563,146561],{"__ignoreMap":205},[14,146565,146567],{"id":146566},"_18-print函数","1.8 print函数",[19,146569,146570,146573],{},[25,146571,146572],{},"print()"," 用来输出内容。",[280,146575,146577],{"className":30551,"code":146576,"language":30553,"meta":205,"style":205},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[25,146578,146579,146589,146599,146609],{"__ignoreMap":205},[288,146580,146581,146583,146585,146587],{"class":290,"line":291},[288,146582,30588],{"class":347},[288,146584,299],{"class":298},[288,146586,6017],{"class":403},[288,146588,305],{"class":298},[288,146590,146591,146593,146595,146597],{"class":290,"line":206},[288,146592,30588],{"class":347},[288,146594,299],{"class":298},[288,146596,608],{"class":347},[288,146598,305],{"class":298},[288,146600,146601,146603,146605,146607],{"class":290,"line":1352},[288,146602,30588],{"class":347},[288,146604,299],{"class":298},[288,146606,348],{"class":347},[288,146608,305],{"class":298},[288,146610,146611,146613,146615,146618,146620,146622],{"class":290,"line":1367},[288,146612,30588],{"class":347},[288,146614,299],{"class":298},[288,146616,146617],{"class":403},"\"年龄:\"",[288,146619,12608],{"class":298},[288,146621,947],{"class":347},[288,146623,305],{"class":298},[19,146625,146626],{},"多个内容用逗号隔开，默认中间加空格：",[280,146628,146630],{"className":30551,"code":146629,"language":30553,"meta":205,"style":205},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[25,146631,146632,146642,146652],{"__ignoreMap":205},[288,146633,146634,146637,146639],{"class":290,"line":291},[288,146635,146636],{"class":298},"name ",[288,146638,344],{"class":294},[288,146640,146641],{"class":403}," \"张三\"\n",[288,146643,146644,146647,146649],{"class":290,"line":206},[288,146645,146646],{"class":298},"age ",[288,146648,344],{"class":294},[288,146650,146651],{"class":347}," 18\n",[288,146653,146654,146656,146658,146661,146664,146666],{"class":290,"line":1352},[288,146655,30588],{"class":347},[288,146657,299],{"class":298},[288,146659,146660],{"class":403},"\"姓名:\"",[288,146662,146663],{"class":298},", name, ",[288,146665,146617],{"class":403},[288,146667,146668],{"class":298},", age)\n",[19,146670,146671],{},"修改分隔符：",[280,146673,146675],{"className":30551,"code":146674,"language":30553,"meta":205,"style":205},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[25,146676,146677],{"__ignoreMap":205},[288,146678,146679,146681,146683,146686,146688,146690,146692,146694,146696,146699,146701,146703],{"class":290,"line":291},[288,146680,30588],{"class":347},[288,146682,299],{"class":298},[288,146684,146685],{"class":403},"\"2024\"",[288,146687,12608],{"class":298},[288,146689,54489],{"class":403},[288,146691,12608],{"class":298},[288,146693,54489],{"class":403},[288,146695,12608],{"class":298},[288,146697,146698],{"class":5389},"sep",[288,146700,344],{"class":294},[288,146702,32656],{"class":403},[288,146704,305],{"class":298},[19,146706,146707],{},"修改结尾符：",[280,146709,146711],{"className":30551,"code":146710,"language":30553,"meta":205,"style":205},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[25,146712,146713,146731],{"__ignoreMap":205},[288,146714,146715,146717,146719,146721,146723,146725,146727,146729],{"class":290,"line":291},[288,146716,30588],{"class":347},[288,146718,299],{"class":298},[288,146720,6017],{"class":403},[288,146722,12608],{"class":298},[288,146724,45974],{"class":5389},[288,146726,344],{"class":294},[288,146728,4531],{"class":403},[288,146730,305],{"class":298},[288,146732,146733,146735,146737,146740],{"class":290,"line":206},[288,146734,30588],{"class":347},[288,146736,299],{"class":298},[288,146738,146739],{"class":403},"\"python\"",[288,146741,305],{"class":298},[14,146743,146745],{"id":146744},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146747,146748],{},"交互运行适合临时验证：",[280,146750,146752],{"className":30551,"code":146751,"language":30553,"meta":205,"style":205},">>> 10 * 3\n30\n",[25,146753,146754,146764],{"__ignoreMap":205},[288,146755,146756,146758,146760,146762],{"class":290,"line":291},[288,146757,145953],{"class":294},[288,146759,2210],{"class":347},[288,146761,6691],{"class":294},[288,146763,120209],{"class":347},[288,146765,146766],{"class":290,"line":206},[288,146767,146768],{"class":347},"30\n",[19,146770,146771],{},"脚本运行适合保存程序：",[280,146773,146775],{"className":30551,"code":146774,"language":30553,"meta":205,"style":205},"price = 8\ncount = 5\nprint(price * count)\n",[25,146776,146777,146787,146796],{"__ignoreMap":205},[288,146778,146779,146782,146784],{"class":290,"line":291},[288,146780,146781],{"class":298},"price ",[288,146783,344],{"class":294},[288,146785,146786],{"class":347}," 8\n",[288,146788,146789,146792,146794],{"class":290,"line":206},[288,146790,146791],{"class":298},"count ",[288,146793,344],{"class":294},[288,146795,54600],{"class":347},[288,146797,146798,146800,146803,146805],{"class":290,"line":1352},[288,146799,30588],{"class":347},[288,146801,146802],{"class":298},"(price ",[288,146804,752],{"class":294},[288,146806,146807],{"class":298}," count)\n",[19,146809,146810],{},"实际学习中推荐：",[243,146812,146813,146816,146821],{},[246,146814,146815],{},"临时试一个语法，用交互模式。",[246,146817,146818,146819,126156],{},"写完整练习，用 ",[25,146820,146452],{},[246,146822,146823],{},"写项目，用独立目录和虚拟环境。",[14,146825,146827],{"id":146826},"_110-常见错误","1.10 常见错误",[260,146829,146831],{"id":146830},"_1101-命令找不到","1.10.1 命令找不到",[280,146833,146836],{"className":146834,"code":146835,"language":5360,"meta":205},[5358],"python: command not found\n",[25,146837,146835],{"__ignoreMap":205},[19,146839,146840],{},"原因：",[243,146842,146843,146846,146849],{},[246,146844,146845],{},"没安装 Python。",[246,146847,146848],{},"PATH 没配置。",[246,146850,146851,146852,28558],{},"Linux\u002FmacOS 应该使用 ",[25,146853,101052],{},[260,146855,146857],{"id":146856},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146859,146860],{},"不要把文件命名为：",[280,146862,146865],{"className":146863,"code":146864,"language":5360,"meta":205},[5358],"random.py\njson.py\ntime.py\nrequests.py\n",[25,146866,146864],{"__ignoreMap":205},[19,146868,146869],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[260,146871,146873],{"id":146872},"_1103-中文乱码","1.10.3 中文乱码",[19,146875,146876],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146878,146879],{},"如果读写文件出现乱码，要明确指定编码：",[280,146881,146883],{"className":30551,"code":146882,"language":30553,"meta":205,"style":205},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[25,146884,146885,146919],{"__ignoreMap":205},[288,146886,146887,146889,146892,146894,146897,146899,146902,146904,146907,146909,146912,146914,146916],{"class":290,"line":291},[288,146888,108006],{"class":294},[288,146890,146891],{"class":347}," open",[288,146893,299],{"class":298},[288,146895,146896],{"class":403},"\"data.txt\"",[288,146898,12608],{"class":298},[288,146900,146901],{"class":403},"\"r\"",[288,146903,12608],{"class":298},[288,146905,146906],{"class":5389},"encoding",[288,146908,344],{"class":294},[288,146910,146911],{"class":403},"\"utf-8\"",[288,146913,13887],{"class":298},[288,146915,31556],{"class":294},[288,146917,146918],{"class":298}," f:\n",[288,146920,146921,146924,146926],{"class":290,"line":206},[288,146922,146923],{"class":298},"    content ",[288,146925,344],{"class":294},[288,146927,146928],{"class":298}," f.read()\n",[14,146930,146932],{"id":146931},"_111-本章练习","1.11 本章练习",[243,146934,146935,146938,146944],{},[246,146936,146937],{},"安装 Python，并在终端输出版本号。",[246,146939,146940,146941,146943],{},"新建 ",[25,146942,146498],{},"，输出自己的姓名、年龄、学习目标。",[246,146945,104539,146946,146948],{},[25,146947,146572],{}," 输出下面格式：",[280,146950,146953],{"className":146951,"code":146952,"language":5360,"meta":205},[5358],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[25,146954,146952],{"__ignoreMap":205},[243,146956,146957],{"start":1367},[246,146958,104539,146959,146961],{},[25,146960,146698],{}," 输出日期：",[280,146963,146966],{"className":146964,"code":146965,"language":5360,"meta":205},[5358],"2024-10-10\n",[25,146967,146965],{"__ignoreMap":205},[243,146969,146970],{"start":1373},[246,146971,104539,146972,146974,146975,146977],{},[25,146973,45974],{}," 让两次 ",[25,146976,146572],{}," 输出在同一行。",[5299,146979,146980],{},"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":205,"searchDepth":206,"depth":206,"links":146982},[146983,146984,146985,146990,146991,146992,146996,146997,146998,146999,147004],{"id":145865,"depth":206,"text":145866},{"id":145909,"depth":206,"text":145910},{"id":146010,"depth":206,"text":146011,"children":146986},[146987,146988,146989],{"id":146014,"depth":1352,"text":146015},{"id":146069,"depth":1352,"text":146070},{"id":146105,"depth":1352,"text":146106},{"id":146178,"depth":206,"text":146179},{"id":146323,"depth":206,"text":146324},{"id":146428,"depth":206,"text":146429,"children":146993},[146994,146995],{"id":146432,"depth":1352,"text":146433},{"id":146461,"depth":1352,"text":146462},{"id":146491,"depth":206,"text":146492},{"id":146566,"depth":206,"text":146567},{"id":146744,"depth":206,"text":146745},{"id":146826,"depth":206,"text":146827,"children":147000},[147001,147002,147003],{"id":146830,"depth":1352,"text":146831},{"id":146856,"depth":1352,"text":146857},{"id":146872,"depth":1352,"text":146873},{"id":146931,"depth":206,"text":146932},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145857,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147011,"title":147012,"body":147013,"description":214,"extension":215,"meta":149417,"navigation":217,"path":149418,"seo":149419,"stem":149420,"__hash__":149421},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147014,"toc":149402},[147015,147018,147022,147025,147028,147045,147048,147090,147093,147097,147100,147103,147140,147143,147177,147180,147272,147276,147290,147293,147320,147323,147327,147430,147437,147440,147457,147461,147468,147657,147660,147733,147737,147740,147824,147827,147859,147863,148067,148070,148074,148080,148182,148185,148441,148445,148448,148451,148465,148467,148653,148657,149019,149025,149029,149032,149156,149159,149338,149341,149345,149378,149382,149399],[10,147016,147012],{"id":147017},"_10-json与pyecharts折线图",[14,147019,147021],{"id":147020},"_101-数据可视化","10.1 数据可视化",[19,147023,147024],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147026,147027],{},"常见图表：",[243,147029,147030,147033,147036,147039,147042],{},[246,147031,147032],{},"折线图：看趋势。",[246,147034,147035],{},"柱状图：看分类对比。",[246,147037,147038],{},"饼图：看占比。",[246,147040,147041],{},"地图：看地域分布。",[246,147043,147044],{},"散点图：看两个变量之间的关系。",[19,147046,147047],{},"Python 可视化常用库：",[436,147049,147050,147058],{},[439,147051,147052],{},[442,147053,147054,147056],{},[445,147055,146261],{},[445,147057,23913],{},[483,147059,147060,147067,147075,147082],{},[442,147061,147062,147064],{},[488,147063,146293],{},[488,147065,147066],{},"基础、经典、可定制",[442,147068,147069,147072],{},[488,147070,147071],{},"seaborn",[488,147073,147074],{},"统计图表更美观",[442,147076,147077,147079],{},[488,147078,146301],{},[488,147080,147081],{},"生成交互式网页图表",[442,147083,147084,147087],{},[488,147085,147086],{},"plotly",[488,147088,147089],{},"交互图表能力强",[19,147091,147092],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147094,147096],{"id":147095},"_102-json回顾","10.2 JSON回顾",[19,147098,147099],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147101,147102],{},"Python 字典：",[280,147104,147106],{"className":30551,"code":147105,"language":30553,"meta":205,"style":205},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[25,147107,147108,147116,147127,147136],{"__ignoreMap":205},[288,147109,147110,147112,147114],{"class":290,"line":291},[288,147111,101831],{"class":298},[288,147113,344],{"class":294},[288,147115,15745],{"class":298},[288,147117,147118,147121,147123,147125],{"class":290,"line":206},[288,147119,147120],{"class":403},"    \"name\"",[288,147122,51610],{"class":298},[288,147124,69442],{"class":403},[288,147126,31639],{"class":298},[288,147128,147129,147132,147134],{"class":290,"line":1352},[288,147130,147131],{"class":403},"    \"value\"",[288,147133,51610],{"class":298},[288,147135,97631],{"class":347},[288,147137,147138],{"class":290,"line":1367},[288,147139,1737],{"class":298},[19,147141,147142],{},"JSON 字符串：",[280,147144,147147],{"className":147145,"code":147146,"language":145892,"meta":205,"style":205},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[25,147148,147149,147153,147164,147173],{"__ignoreMap":205},[288,147150,147151],{"class":290,"line":291},[288,147152,1718],{"class":298},[288,147154,147155,147158,147160,147162],{"class":290,"line":206},[288,147156,147157],{"class":347},"  \"name\"",[288,147159,51610],{"class":298},[288,147161,69442],{"class":403},[288,147163,31639],{"class":298},[288,147165,147166,147169,147171],{"class":290,"line":1352},[288,147167,147168],{"class":347},"  \"value\"",[288,147170,51610],{"class":298},[288,147172,97631],{"class":347},[288,147174,147175],{"class":290,"line":1367},[288,147176,1737],{"class":298},[19,147178,147179],{},"Python 与 JSON 的转换：",[280,147181,147183],{"className":30551,"code":147182,"language":30553,"meta":205,"style":205},"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",[25,147184,147185,147192,147196,147221,147225,147244,147251,147255,147265],{"__ignoreMap":205},[288,147186,147187,147189],{"class":290,"line":291},[288,147188,30565],{"class":294},[288,147190,147191],{"class":298}," json\n",[288,147193,147194],{"class":290,"line":206},[288,147195,2572],{"emptyLinePlaceholder":217},[288,147197,147198,147200,147202,147204,147206,147208,147210,147212,147215,147217,147219],{"class":290,"line":1352},[288,147199,101831],{"class":298},[288,147201,344],{"class":294},[288,147203,4620],{"class":298},[288,147205,62852],{"class":403},[288,147207,51610],{"class":298},[288,147209,69442],{"class":403},[288,147211,12608],{"class":298},[288,147213,147214],{"class":403},"\"value\"",[288,147216,51610],{"class":298},[288,147218,608],{"class":347},[288,147220,1737],{"class":298},[288,147222,147223],{"class":290,"line":1367},[288,147224,2572],{"emptyLinePlaceholder":217},[288,147226,147227,147230,147232,147235,147238,147240,147242],{"class":290,"line":1373},[288,147228,147229],{"class":298},"json_text ",[288,147231,344],{"class":294},[288,147233,147234],{"class":298}," json.dumps(data, ",[288,147236,147237],{"class":5389},"ensure_ascii",[288,147239,344],{"class":294},[288,147241,34160],{"class":347},[288,147243,305],{"class":298},[288,147245,147246,147248],{"class":290,"line":1387},[288,147247,30588],{"class":347},[288,147249,147250],{"class":298},"(json_text)\n",[288,147252,147253],{"class":290,"line":1393},[288,147254,2572],{"emptyLinePlaceholder":217},[288,147256,147257,147260,147262],{"class":290,"line":1484},[288,147258,147259],{"class":298},"new_data ",[288,147261,344],{"class":294},[288,147263,147264],{"class":298}," json.loads(json_text)\n",[288,147266,147267,147269],{"class":290,"line":1490},[288,147268,30588],{"class":347},[288,147270,147271],{"class":298},"(new_data)\n",[14,147273,147275],{"id":147274},"_103-安装pyecharts","10.3 安装pyecharts",[280,147277,147279],{"className":23995,"code":147278,"language":23997,"meta":205,"style":205},"pip install pyecharts\n",[25,147280,147281],{"__ignoreMap":205},[288,147282,147283,147285,147287],{"class":290,"line":291},[288,147284,24004],{"class":2135},[288,147286,24007],{"class":403},[288,147288,147289],{"class":403}," pyecharts\n",[19,147291,147292],{},"验证：",[280,147294,147296],{"className":30551,"code":147295,"language":30553,"meta":205,"style":205},"import pyecharts\n\nprint(pyecharts.__version__)\n",[25,147297,147298,147304,147308],{"__ignoreMap":205},[288,147299,147300,147302],{"class":290,"line":291},[288,147301,30565],{"class":294},[288,147303,147289],{"class":298},[288,147305,147306],{"class":290,"line":206},[288,147307,2572],{"emptyLinePlaceholder":217},[288,147309,147310,147312,147315,147318],{"class":290,"line":1352},[288,147311,30588],{"class":347},[288,147313,147314],{"class":298},"(pyecharts.",[288,147316,147317],{"class":347},"__version__",[288,147319,305],{"class":298},[19,147321,147322],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147324,147326],{"id":147325},"_104-第一个折线图","10.4 第一个折线图",[280,147328,147330],{"className":30551,"code":147329,"language":30553,"meta":205,"style":205},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[25,147331,147332,147344,147348,147358,147388,147420],{"__ignoreMap":205},[288,147333,147334,147336,147339,147341],{"class":290,"line":291},[288,147335,30910],{"class":294},[288,147337,147338],{"class":298}," pyecharts.charts ",[288,147340,30565],{"class":294},[288,147342,147343],{"class":298}," Line\n",[288,147345,147346],{"class":290,"line":206},[288,147347,2572],{"emptyLinePlaceholder":217},[288,147349,147350,147353,147355],{"class":290,"line":1352},[288,147351,147352],{"class":298},"line ",[288,147354,344],{"class":294},[288,147356,147357],{"class":298}," Line()\n",[288,147359,147360,147363,147366,147368,147371,147373,147376,147378,147381,147383,147386],{"class":290,"line":1367},[288,147361,147362],{"class":298},"line.add_xaxis([",[288,147364,147365],{"class":403},"\"周一\"",[288,147367,12608],{"class":298},[288,147369,147370],{"class":403},"\"周二\"",[288,147372,12608],{"class":298},[288,147374,147375],{"class":403},"\"周三\"",[288,147377,12608],{"class":298},[288,147379,147380],{"class":403},"\"周四\"",[288,147382,12608],{"class":298},[288,147384,147385],{"class":403},"\"周五\"",[288,147387,4829],{"class":298},[288,147389,147390,147393,147396,147398,147400,147402,147404,147406,147408,147410,147413,147415,147418],{"class":290,"line":1373},[288,147391,147392],{"class":298},"line.add_yaxis(",[288,147394,147395],{"class":403},"\"销售额\"",[288,147397,77691],{"class":298},[288,147399,608],{"class":347},[288,147401,12608],{"class":298},[288,147403,1114],{"class":347},[288,147405,12608],{"class":298},[288,147407,1159],{"class":347},[288,147409,12608],{"class":298},[288,147411,147412],{"class":347},"150",[288,147414,12608],{"class":298},[288,147416,147417],{"class":347},"180",[288,147419,4829],{"class":298},[288,147421,147422,147425,147428],{"class":290,"line":1387},[288,147423,147424],{"class":298},"line.render(",[288,147426,147427],{"class":403},"\"line.html\"",[288,147429,305],{"class":298},[19,147431,147432,147433,147436],{},"运行后会生成 ",[25,147434,147435],{},"line.html","，用浏览器打开即可看到图表。",[19,147438,147439],{},"核心步骤：",[243,147441,147442,147445,147448,147451,147454],{},[246,147443,147444],{},"导入图表类。",[246,147446,147447],{},"创建图表对象。",[246,147449,147450],{},"添加 x 轴数据。",[246,147452,147453],{},"添加 y 轴数据。",[246,147455,147456],{},"渲染为 HTML。",[14,147458,147460],{"id":147459},"_105-全局配置","10.5 全局配置",[19,147462,147463,147464,147467],{},"常用配置在 ",[25,147465,147466],{},"pyecharts.options"," 中。",[280,147469,147471],{"className":30551,"code":147470,"language":30553,"meta":205,"style":205},"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",[25,147472,147473,147490,147500,147504,147512,147536,147564,147569,147588,147607,147625,147645,147649],{"__ignoreMap":205},[288,147474,147475,147477,147480,147482,147485,147487],{"class":290,"line":291},[288,147476,30910],{"class":294},[288,147478,147479],{"class":298}," pyecharts ",[288,147481,30565],{"class":294},[288,147483,147484],{"class":298}," options ",[288,147486,31556],{"class":294},[288,147488,147489],{"class":298}," opts\n",[288,147491,147492,147494,147496,147498],{"class":290,"line":206},[288,147493,30910],{"class":294},[288,147495,147338],{"class":298},[288,147497,30565],{"class":294},[288,147499,147343],{"class":298},[288,147501,147502],{"class":290,"line":1352},[288,147503,2572],{"emptyLinePlaceholder":217},[288,147505,147506,147508,147510],{"class":290,"line":1367},[288,147507,147352],{"class":298},[288,147509,344],{"class":294},[288,147511,147357],{"class":298},[288,147513,147514,147516,147518,147520,147522,147524,147526,147528,147530,147532,147534],{"class":290,"line":1373},[288,147515,147362],{"class":298},[288,147517,147365],{"class":403},[288,147519,12608],{"class":298},[288,147521,147370],{"class":403},[288,147523,12608],{"class":298},[288,147525,147375],{"class":403},[288,147527,12608],{"class":298},[288,147529,147380],{"class":403},[288,147531,12608],{"class":298},[288,147533,147385],{"class":403},[288,147535,4829],{"class":298},[288,147537,147538,147540,147542,147544,147546,147548,147550,147552,147554,147556,147558,147560,147562],{"class":290,"line":1387},[288,147539,147392],{"class":298},[288,147541,147395],{"class":403},[288,147543,77691],{"class":298},[288,147545,608],{"class":347},[288,147547,12608],{"class":298},[288,147549,1114],{"class":347},[288,147551,12608],{"class":298},[288,147553,1159],{"class":347},[288,147555,12608],{"class":298},[288,147557,147412],{"class":347},[288,147559,12608],{"class":298},[288,147561,147417],{"class":347},[288,147563,4829],{"class":298},[288,147565,147566],{"class":290,"line":1393},[288,147567,147568],{"class":298},"line.set_global_opts(\n",[288,147570,147571,147574,147576,147579,147581,147583,147586],{"class":290,"line":1484},[288,147572,147573],{"class":5389},"    title_opts",[288,147575,344],{"class":294},[288,147577,147578],{"class":298},"opts.TitleOpts(",[288,147580,51580],{"class":5389},[288,147582,344],{"class":294},[288,147584,147585],{"class":403},"\"一周销售额\"",[288,147587,38220],{"class":298},[288,147589,147590,147593,147595,147598,147600,147602,147605],{"class":290,"line":1490},[288,147591,147592],{"class":5389},"    xaxis_opts",[288,147594,344],{"class":294},[288,147596,147597],{"class":298},"opts.AxisOpts(",[288,147599,79983],{"class":5389},[288,147601,344],{"class":294},[288,147603,147604],{"class":403},"\"日期\"",[288,147606,38220],{"class":298},[288,147608,147609,147612,147614,147616,147618,147620,147623],{"class":290,"line":1502},[288,147610,147611],{"class":5389},"    yaxis_opts",[288,147613,344],{"class":294},[288,147615,147597],{"class":298},[288,147617,79983],{"class":5389},[288,147619,344],{"class":294},[288,147621,147622],{"class":403},"\"金额\"",[288,147624,38220],{"class":298},[288,147626,147627,147630,147632,147635,147638,147640,147643],{"class":290,"line":1784},[288,147628,147629],{"class":5389},"    tooltip_opts",[288,147631,344],{"class":294},[288,147633,147634],{"class":298},"opts.TooltipOpts(",[288,147636,147637],{"class":5389},"trigger",[288,147639,344],{"class":294},[288,147641,147642],{"class":403},"\"axis\"",[288,147644,38220],{"class":298},[288,147646,147647],{"class":290,"line":1789},[288,147648,305],{"class":298},[288,147650,147651,147653,147655],{"class":290,"line":1795},[288,147652,147424],{"class":298},[288,147654,147427],{"class":403},[288,147656,305],{"class":298},[19,147658,147659],{},"常见全局配置：",[436,147661,147662,147671],{},[439,147663,147664],{},[442,147665,147666,147669],{},[445,147667,147668],{},"配置",[445,147670,102869],{},[483,147672,147673,147683,147693,147703,147713,147723],{},[442,147674,147675,147680],{},[488,147676,147677],{},[25,147678,147679],{},"TitleOpts",[488,147681,147682],{},"标题",[442,147684,147685,147690],{},[488,147686,147687],{},[25,147688,147689],{},"LegendOpts",[488,147691,147692],{},"图例",[442,147694,147695,147700],{},[488,147696,147697],{},[25,147698,147699],{},"TooltipOpts",[488,147701,147702],{},"提示框",[442,147704,147705,147710],{},[488,147706,147707],{},[25,147708,147709],{},"AxisOpts",[488,147711,147712],{},"坐标轴",[442,147714,147715,147720],{},[488,147716,147717],{},[25,147718,147719],{},"VisualMapOpts",[488,147721,147722],{},"视觉映射",[442,147724,147725,147730],{},[488,147726,147727],{},[25,147728,147729],{},"DataZoomOpts",[488,147731,147732],{},"区域缩放",[14,147734,147736],{"id":147735},"_106-系列配置","10.6 系列配置",[19,147738,147739],{},"系列配置作用于某一组数据。",[280,147741,147743],{"className":30551,"code":147742,"language":30553,"meta":205,"style":205},"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",[25,147744,147745,147750,147761,147790,147801,147820],{"__ignoreMap":205},[288,147746,147747],{"class":290,"line":291},[288,147748,147749],{"class":298},"line.add_yaxis(\n",[288,147751,147752,147755,147757,147759],{"class":290,"line":206},[288,147753,147754],{"class":5389},"    series_name",[288,147756,344],{"class":294},[288,147758,147395],{"class":403},[288,147760,31639],{"class":298},[288,147762,147763,147766,147768,147770,147772,147774,147776,147778,147780,147782,147784,147786,147788],{"class":290,"line":1352},[288,147764,147765],{"class":5389},"    y_axis",[288,147767,344],{"class":294},[288,147769,1187],{"class":298},[288,147771,608],{"class":347},[288,147773,12608],{"class":298},[288,147775,1114],{"class":347},[288,147777,12608],{"class":298},[288,147779,1159],{"class":347},[288,147781,12608],{"class":298},[288,147783,147412],{"class":347},[288,147785,12608],{"class":298},[288,147787,147417],{"class":347},[288,147789,88009],{"class":298},[288,147791,147792,147795,147797,147799],{"class":290,"line":1367},[288,147793,147794],{"class":5389},"    is_smooth",[288,147796,344],{"class":294},[288,147798,31649],{"class":347},[288,147800,31639],{"class":298},[288,147802,147803,147806,147808,147811,147814,147816,147818],{"class":290,"line":1373},[288,147804,147805],{"class":5389},"    label_opts",[288,147807,344],{"class":294},[288,147809,147810],{"class":298},"opts.LabelOpts(",[288,147812,147813],{"class":5389},"is_show",[288,147815,344],{"class":294},[288,147817,31649],{"class":347},[288,147819,38220],{"class":298},[288,147821,147822],{"class":290,"line":1387},[288,147823,305],{"class":298},[19,147825,147826],{},"常用参数：",[243,147828,147829,147835,147841,147847,147853],{},[246,147830,147831,147834],{},[25,147832,147833],{},"series_name","：系列名称。",[246,147836,147837,147840],{},[25,147838,147839],{},"y_axis","：y 轴数据。",[246,147842,147843,147846],{},[25,147844,147845],{},"is_smooth","：是否平滑曲线。",[246,147848,147849,147852],{},[25,147850,147851],{},"label_opts","：标签配置。",[246,147854,147855,147858],{},[25,147856,147857],{},"symbol_size","：标记点大小。",[14,147860,147862],{"id":147861},"_107-多条折线","10.7 多条折线",[280,147864,147866],{"className":30551,"code":147865,"language":30553,"meta":205,"style":205},"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",[25,147867,147868,147882,147892,147896,147925,147929,147937,147942,147980,148017,148021,148038,148054,148058],{"__ignoreMap":205},[288,147869,147870,147872,147874,147876,147878,147880],{"class":290,"line":291},[288,147871,30910],{"class":294},[288,147873,147479],{"class":298},[288,147875,30565],{"class":294},[288,147877,147484],{"class":298},[288,147879,31556],{"class":294},[288,147881,147489],{"class":298},[288,147883,147884,147886,147888,147890],{"class":290,"line":206},[288,147885,30910],{"class":294},[288,147887,147338],{"class":298},[288,147889,30565],{"class":294},[288,147891,147343],{"class":298},[288,147893,147894],{"class":290,"line":1352},[288,147895,2572],{"emptyLinePlaceholder":217},[288,147897,147898,147901,147903,147905,147907,147909,147911,147913,147915,147917,147919,147921,147923],{"class":290,"line":1367},[288,147899,147900],{"class":298},"dates ",[288,147902,344],{"class":294},[288,147904,52399],{"class":298},[288,147906,147365],{"class":403},[288,147908,12608],{"class":298},[288,147910,147370],{"class":403},[288,147912,12608],{"class":298},[288,147914,147375],{"class":403},[288,147916,12608],{"class":298},[288,147918,147380],{"class":403},[288,147920,12608],{"class":298},[288,147922,147385],{"class":403},[288,147924,33419],{"class":298},[288,147926,147927],{"class":290,"line":1373},[288,147928,2572],{"emptyLinePlaceholder":217},[288,147930,147931,147933,147935],{"class":290,"line":1387},[288,147932,147352],{"class":298},[288,147934,344],{"class":294},[288,147936,147357],{"class":298},[288,147938,147939],{"class":290,"line":1393},[288,147940,147941],{"class":298},"line.add_xaxis(dates)\n",[288,147943,147944,147946,147949,147951,147953,147955,147958,147960,147962,147964,147966,147968,147970,147972,147974,147976,147978],{"class":290,"line":1484},[288,147945,147392],{"class":298},[288,147947,147948],{"class":403},"\"线上销售\"",[288,147950,77691],{"class":298},[288,147952,608],{"class":347},[288,147954,12608],{"class":298},[288,147956,147957],{"class":347},"130",[288,147959,12608],{"class":298},[288,147961,1114],{"class":347},[288,147963,12608],{"class":298},[288,147965,21221],{"class":347},[288,147967,12608],{"class":298},[288,147969,1894],{"class":347},[288,147971,112375],{"class":298},[288,147973,147845],{"class":5389},[288,147975,344],{"class":294},[288,147977,31649],{"class":347},[288,147979,305],{"class":298},[288,147981,147982,147984,147987,147989,147991,147993,147995,147997,147999,148001,148003,148005,148007,148009,148011,148013,148015],{"class":290,"line":1490},[288,147983,147392],{"class":298},[288,147985,147986],{"class":403},"\"线下销售\"",[288,147988,77691],{"class":298},[288,147990,909],{"class":347},[288,147992,12608],{"class":298},[288,147994,1159],{"class":347},[288,147996,12608],{"class":298},[288,147998,608],{"class":347},[288,148000,12608],{"class":298},[288,148002,1114],{"class":347},[288,148004,12608],{"class":298},[288,148006,147412],{"class":347},[288,148008,112375],{"class":298},[288,148010,147845],{"class":5389},[288,148012,344],{"class":294},[288,148014,31649],{"class":347},[288,148016,305],{"class":298},[288,148018,148019],{"class":290,"line":1502},[288,148020,147568],{"class":298},[288,148022,148023,148025,148027,148029,148031,148033,148036],{"class":290,"line":1784},[288,148024,147573],{"class":5389},[288,148026,344],{"class":294},[288,148028,147578],{"class":298},[288,148030,51580],{"class":5389},[288,148032,344],{"class":294},[288,148034,148035],{"class":403},"\"线上线下销售趋势\"",[288,148037,38220],{"class":298},[288,148039,148040,148042,148044,148046,148048,148050,148052],{"class":290,"line":1789},[288,148041,147629],{"class":5389},[288,148043,344],{"class":294},[288,148045,147634],{"class":298},[288,148047,147637],{"class":5389},[288,148049,344],{"class":294},[288,148051,147642],{"class":403},[288,148053,38220],{"class":298},[288,148055,148056],{"class":290,"line":1795},[288,148057,305],{"class":298},[288,148059,148060,148062,148065],{"class":290,"line":1800},[288,148061,147424],{"class":298},[288,148063,148064],{"class":403},"\"sales.html\"",[288,148066,305],{"class":298},[19,148068,148069],{},"多条折线适合比较不同指标或不同地区。",[14,148071,148073],{"id":148072},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148075,148076,148077,24791],{},"假设 ",[25,148078,148079],{},"sales.json",[280,148081,148083],{"className":147145,"code":148082,"language":145892,"meta":205,"style":205},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[25,148084,148085,148090,148122,148150,148178],{"__ignoreMap":205},[288,148086,148087],{"class":290,"line":291},[288,148088,148089],{"class":298},"[\n",[288,148091,148092,148095,148098,148100,148102,148104,148107,148109,148111,148113,148116,148118,148120],{"class":290,"line":206},[288,148093,148094],{"class":298},"  {",[288,148096,148097],{"class":347},"\"date\"",[288,148099,51610],{"class":298},[288,148101,147365],{"class":403},[288,148103,12608],{"class":298},[288,148105,148106],{"class":347},"\"online\"",[288,148108,51610],{"class":298},[288,148110,608],{"class":347},[288,148112,12608],{"class":298},[288,148114,148115],{"class":347},"\"offline\"",[288,148117,51610],{"class":298},[288,148119,909],{"class":347},[288,148121,5102],{"class":298},[288,148123,148124,148126,148128,148130,148132,148134,148136,148138,148140,148142,148144,148146,148148],{"class":290,"line":1352},[288,148125,148094],{"class":298},[288,148127,148097],{"class":347},[288,148129,51610],{"class":298},[288,148131,147370],{"class":403},[288,148133,12608],{"class":298},[288,148135,148106],{"class":347},[288,148137,51610],{"class":298},[288,148139,147957],{"class":347},[288,148141,12608],{"class":298},[288,148143,148115],{"class":347},[288,148145,51610],{"class":298},[288,148147,1159],{"class":347},[288,148149,5102],{"class":298},[288,148151,148152,148154,148156,148158,148160,148162,148164,148166,148168,148170,148172,148174,148176],{"class":290,"line":1367},[288,148153,148094],{"class":298},[288,148155,148097],{"class":347},[288,148157,51610],{"class":298},[288,148159,147375],{"class":403},[288,148161,12608],{"class":298},[288,148163,148106],{"class":347},[288,148165,51610],{"class":298},[288,148167,1114],{"class":347},[288,148169,12608],{"class":298},[288,148171,148115],{"class":347},[288,148173,51610],{"class":298},[288,148175,608],{"class":347},[288,148177,1737],{"class":298},[288,148179,148180],{"class":290,"line":1373},[288,148181,33419],{"class":298},[19,148183,148184],{},"读取并绘图：",[280,148186,148188],{"className":30551,"code":148187,"language":30553,"meta":205,"style":205},"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",[25,148189,148190,148196,148210,148220,148224,148256,148269,148273,148281,148290,148299,148303,148315,148324,148333,148342,148346,148354,148358,148375,148392,148396,148413,148429,148433],{"__ignoreMap":205},[288,148191,148192,148194],{"class":290,"line":291},[288,148193,30565],{"class":294},[288,148195,147191],{"class":298},[288,148197,148198,148200,148202,148204,148206,148208],{"class":290,"line":206},[288,148199,30910],{"class":294},[288,148201,147479],{"class":298},[288,148203,30565],{"class":294},[288,148205,147484],{"class":298},[288,148207,31556],{"class":294},[288,148209,147489],{"class":298},[288,148211,148212,148214,148216,148218],{"class":290,"line":1352},[288,148213,30910],{"class":294},[288,148215,147338],{"class":298},[288,148217,30565],{"class":294},[288,148219,147343],{"class":298},[288,148221,148222],{"class":290,"line":1367},[288,148223,2572],{"emptyLinePlaceholder":217},[288,148225,148226,148228,148230,148232,148235,148237,148239,148241,148243,148245,148247,148249,148251,148254],{"class":290,"line":1373},[288,148227,108006],{"class":294},[288,148229,146891],{"class":347},[288,148231,299],{"class":298},[288,148233,148234],{"class":403},"\"sales.json\"",[288,148236,12608],{"class":298},[288,148238,146901],{"class":403},[288,148240,12608],{"class":298},[288,148242,146906],{"class":5389},[288,148244,344],{"class":294},[288,148246,146911],{"class":403},[288,148248,13887],{"class":298},[288,148250,31556],{"class":294},[288,148252,148253],{"class":5389}," file",[288,148255,3911],{"class":298},[288,148257,148258,148260,148262,148265,148267],{"class":290,"line":1387},[288,148259,101594],{"class":298},[288,148261,344],{"class":294},[288,148263,148264],{"class":298}," json.load(",[288,148266,45527],{"class":5389},[288,148268,305],{"class":298},[288,148270,148271],{"class":290,"line":1393},[288,148272,2572],{"emptyLinePlaceholder":217},[288,148274,148275,148277,148279],{"class":290,"line":1484},[288,148276,147900],{"class":298},[288,148278,344],{"class":294},[288,148280,52011],{"class":298},[288,148282,148283,148286,148288],{"class":290,"line":1490},[288,148284,148285],{"class":298},"online_sales ",[288,148287,344],{"class":294},[288,148289,52011],{"class":298},[288,148291,148292,148295,148297],{"class":290,"line":1502},[288,148293,148294],{"class":298},"offline_sales ",[288,148296,344],{"class":294},[288,148298,52011],{"class":298},[288,148300,148301],{"class":290,"line":1784},[288,148302,2572],{"emptyLinePlaceholder":217},[288,148304,148305,148307,148310,148312],{"class":290,"line":1789},[288,148306,3197],{"class":294},[288,148308,148309],{"class":298}," item ",[288,148311,26216],{"class":294},[288,148313,148314],{"class":298}," data:\n",[288,148316,148317,148320,148322],{"class":290,"line":1795},[288,148318,148319],{"class":298},"    dates.append(item[",[288,148321,148097],{"class":403},[288,148323,4829],{"class":298},[288,148325,148326,148329,148331],{"class":290,"line":1800},[288,148327,148328],{"class":298},"    online_sales.append(item[",[288,148330,148106],{"class":403},[288,148332,4829],{"class":298},[288,148334,148335,148338,148340],{"class":290,"line":1814},[288,148336,148337],{"class":298},"    offline_sales.append(item[",[288,148339,148115],{"class":403},[288,148341,4829],{"class":298},[288,148343,148344],{"class":290,"line":1819},[288,148345,2572],{"emptyLinePlaceholder":217},[288,148347,148348,148350,148352],{"class":290,"line":1825},[288,148349,147352],{"class":298},[288,148351,344],{"class":294},[288,148353,147357],{"class":298},[288,148355,148356],{"class":290,"line":1846},[288,148357,147941],{"class":298},[288,148359,148360,148362,148364,148367,148369,148371,148373],{"class":290,"line":1851},[288,148361,147392],{"class":298},[288,148363,147948],{"class":403},[288,148365,148366],{"class":298},", online_sales, ",[288,148368,147845],{"class":5389},[288,148370,344],{"class":294},[288,148372,31649],{"class":347},[288,148374,305],{"class":298},[288,148376,148377,148379,148381,148384,148386,148388,148390],{"class":290,"line":1865},[288,148378,147392],{"class":298},[288,148380,147986],{"class":403},[288,148382,148383],{"class":298},", offline_sales, ",[288,148385,147845],{"class":5389},[288,148387,344],{"class":294},[288,148389,31649],{"class":347},[288,148391,305],{"class":298},[288,148393,148394],{"class":290,"line":1870},[288,148395,147568],{"class":298},[288,148397,148398,148400,148402,148404,148406,148408,148411],{"class":290,"line":1899},[288,148399,147573],{"class":5389},[288,148401,344],{"class":294},[288,148403,147578],{"class":298},[288,148405,51580],{"class":5389},[288,148407,344],{"class":294},[288,148409,148410],{"class":403},"\"销售趋势\"",[288,148412,38220],{"class":298},[288,148414,148415,148417,148419,148421,148423,148425,148427],{"class":290,"line":1904},[288,148416,147629],{"class":5389},[288,148418,344],{"class":294},[288,148420,147634],{"class":298},[288,148422,147637],{"class":5389},[288,148424,344],{"class":294},[288,148426,147642],{"class":403},[288,148428,38220],{"class":298},[288,148430,148431],{"class":290,"line":1921},[288,148432,305],{"class":298},[288,148434,148435,148437,148439],{"class":290,"line":1926},[288,148436,147424],{"class":298},[288,148438,148064],{"class":403},[288,148440,305],{"class":298},[14,148442,148444],{"id":148443},"_109-数据清洗","10.9 数据清洗",[19,148446,148447],{},"真实数据经常不整齐，需要清洗。",[19,148449,148450],{},"常见问题：",[243,148452,148453,148456,148459,148462],{},[246,148454,148455],{},"数字是字符串。",[246,148457,148458],{},"字段缺失。",[246,148460,148461],{},"空值。",[246,148463,148464],{},"日期格式不统一。",[19,148466,15308],{},[280,148468,148470],{"className":30551,"code":148469,"language":30553,"meta":205,"style":205},"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",[25,148471,148472,148481,148504,148524,148545,148549,148553,148561,148570,148574,148585,148599,148608,148613,148617,148625,148635,148639,148646],{"__ignoreMap":205},[288,148473,148474,148477,148479],{"class":290,"line":291},[288,148475,148476],{"class":298},"raw_data ",[288,148478,344],{"class":294},[288,148480,55620],{"class":298},[288,148482,148483,148486,148488,148490,148492,148494,148497,148499,148502],{"class":290,"line":206},[288,148484,148485],{"class":298},"    {",[288,148487,148097],{"class":403},[288,148489,51610],{"class":298},[288,148491,147365],{"class":403},[288,148493,12608],{"class":298},[288,148495,148496],{"class":403},"\"sales\"",[288,148498,51610],{"class":298},[288,148500,148501],{"class":403},"\"100\"",[288,148503,5102],{"class":298},[288,148505,148506,148508,148510,148512,148514,148516,148518,148520,148522],{"class":290,"line":1352},[288,148507,148485],{"class":298},[288,148509,148097],{"class":403},[288,148511,51610],{"class":298},[288,148513,147370],{"class":403},[288,148515,12608],{"class":298},[288,148517,148496],{"class":403},[288,148519,51610],{"class":298},[288,148521,7825],{"class":403},[288,148523,5102],{"class":298},[288,148525,148526,148528,148530,148532,148534,148536,148538,148540,148543],{"class":290,"line":1367},[288,148527,148485],{"class":298},[288,148529,148097],{"class":403},[288,148531,51610],{"class":298},[288,148533,147375],{"class":403},[288,148535,12608],{"class":298},[288,148537,148496],{"class":403},[288,148539,51610],{"class":298},[288,148541,148542],{"class":403},"\"120\"",[288,148544,5102],{"class":298},[288,148546,148547],{"class":290,"line":1373},[288,148548,33419],{"class":298},[288,148550,148551],{"class":290,"line":1387},[288,148552,2572],{"emptyLinePlaceholder":217},[288,148554,148555,148557,148559],{"class":290,"line":1393},[288,148556,147900],{"class":298},[288,148558,344],{"class":294},[288,148560,52011],{"class":298},[288,148562,148563,148566,148568],{"class":290,"line":1484},[288,148564,148565],{"class":298},"sales ",[288,148567,344],{"class":294},[288,148569,52011],{"class":298},[288,148571,148572],{"class":290,"line":1490},[288,148573,2572],{"emptyLinePlaceholder":217},[288,148575,148576,148578,148580,148582],{"class":290,"line":1502},[288,148577,3197],{"class":294},[288,148579,148309],{"class":298},[288,148581,26216],{"class":294},[288,148583,148584],{"class":298}," raw_data:\n",[288,148586,148587,148590,148592,148595,148597],{"class":290,"line":1784},[288,148588,148589],{"class":298},"    value ",[288,148591,344],{"class":294},[288,148593,148594],{"class":298}," item.get(",[288,148596,148496],{"class":403},[288,148598,305],{"class":298},[288,148600,148601,148603,148605],{"class":290,"line":1789},[288,148602,3273],{"class":294},[288,148604,39103],{"class":294},[288,148606,148607],{"class":298}," value:\n",[288,148609,148610],{"class":290,"line":1795},[288,148611,148612],{"class":294},"        continue\n",[288,148614,148615],{"class":290,"line":1800},[288,148616,2572],{"emptyLinePlaceholder":217},[288,148618,148619,148621,148623],{"class":290,"line":1814},[288,148620,148319],{"class":298},[288,148622,148097],{"class":403},[288,148624,4829],{"class":298},[288,148626,148627,148630,148632],{"class":290,"line":1819},[288,148628,148629],{"class":298},"    sales.append(",[288,148631,302],{"class":347},[288,148633,148634],{"class":298},"(value))\n",[288,148636,148637],{"class":290,"line":1825},[288,148638,2572],{"emptyLinePlaceholder":217},[288,148640,148641,148643],{"class":290,"line":1846},[288,148642,30588],{"class":347},[288,148644,148645],{"class":298},"(dates)\n",[288,148647,148648,148650],{"class":290,"line":1851},[288,148649,30588],{"class":347},[288,148651,148652],{"class":298},"(sales)\n",[14,148654,148656],{"id":148655},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[280,148658,148660],{"className":30551,"code":148659,"language":30553,"meta":205,"style":205},"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",[25,148661,148662,148676,148686,148690,148698,148719,148741,148763,148785,148807,148811,148815,148837,148858,148862,148870,148874,148878,148888,148897,148907,148923,148927,148931,148948,148964,148980,148996,149006,149010],{"__ignoreMap":205},[288,148663,148664,148666,148668,148670,148672,148674],{"class":290,"line":291},[288,148665,30910],{"class":294},[288,148667,147479],{"class":298},[288,148669,30565],{"class":294},[288,148671,147484],{"class":298},[288,148673,31556],{"class":294},[288,148675,147489],{"class":298},[288,148677,148678,148680,148682,148684],{"class":290,"line":206},[288,148679,30910],{"class":294},[288,148681,147338],{"class":298},[288,148683,30565],{"class":294},[288,148685,147343],{"class":298},[288,148687,148688],{"class":290,"line":1352},[288,148689,2572],{"emptyLinePlaceholder":217},[288,148691,148692,148694,148696],{"class":290,"line":1367},[288,148693,148565],{"class":298},[288,148695,344],{"class":294},[288,148697,55620],{"class":298},[288,148699,148700,148702,148704,148706,148709,148711,148713,148715,148717],{"class":290,"line":1373},[288,148701,148485],{"class":298},[288,148703,148097],{"class":403},[288,148705,51610],{"class":298},[288,148707,148708],{"class":403},"\"2024-10-01\"",[288,148710,12608],{"class":298},[288,148712,84257],{"class":403},[288,148714,51610],{"class":298},[288,148716,92196],{"class":347},[288,148718,5102],{"class":298},[288,148720,148721,148723,148725,148727,148730,148732,148734,148736,148739],{"class":290,"line":1387},[288,148722,148485],{"class":298},[288,148724,148097],{"class":403},[288,148726,51610],{"class":298},[288,148728,148729],{"class":403},"\"2024-10-02\"",[288,148731,12608],{"class":298},[288,148733,84257],{"class":403},[288,148735,51610],{"class":298},[288,148737,148738],{"class":347},"1800",[288,148740,5102],{"class":298},[288,148742,148743,148745,148747,148749,148752,148754,148756,148758,148761],{"class":290,"line":1393},[288,148744,148485],{"class":298},[288,148746,148097],{"class":403},[288,148748,51610],{"class":298},[288,148750,148751],{"class":403},"\"2024-10-03\"",[288,148753,12608],{"class":298},[288,148755,84257],{"class":403},[288,148757,51610],{"class":298},[288,148759,148760],{"class":347},"1500",[288,148762,5102],{"class":298},[288,148764,148765,148767,148769,148771,148774,148776,148778,148780,148783],{"class":290,"line":1484},[288,148766,148485],{"class":298},[288,148768,148097],{"class":403},[288,148770,51610],{"class":298},[288,148772,148773],{"class":403},"\"2024-10-04\"",[288,148775,12608],{"class":298},[288,148777,84257],{"class":403},[288,148779,51610],{"class":298},[288,148781,148782],{"class":347},"2100",[288,148784,5102],{"class":298},[288,148786,148787,148789,148791,148793,148796,148798,148800,148802,148805],{"class":290,"line":1490},[288,148788,148485],{"class":298},[288,148790,148097],{"class":403},[288,148792,51610],{"class":298},[288,148794,148795],{"class":403},"\"2024-10-05\"",[288,148797,12608],{"class":298},[288,148799,84257],{"class":403},[288,148801,51610],{"class":298},[288,148803,148804],{"class":347},"2600",[288,148806,5102],{"class":298},[288,148808,148809],{"class":290,"line":1502},[288,148810,33419],{"class":298},[288,148812,148813],{"class":290,"line":1784},[288,148814,2572],{"emptyLinePlaceholder":217},[288,148816,148817,148819,148821,148824,148826,148828,148830,148832,148834],{"class":290,"line":1789},[288,148818,147900],{"class":298},[288,148820,344],{"class":294},[288,148822,148823],{"class":298}," [item[",[288,148825,148097],{"class":403},[288,148827,4615],{"class":298},[288,148829,3197],{"class":294},[288,148831,148309],{"class":298},[288,148833,26216],{"class":294},[288,148835,148836],{"class":298}," sales]\n",[288,148838,148839,148842,148844,148846,148848,148850,148852,148854,148856],{"class":290,"line":1795},[288,148840,148841],{"class":298},"amounts ",[288,148843,344],{"class":294},[288,148845,148823],{"class":298},[288,148847,84257],{"class":403},[288,148849,4615],{"class":298},[288,148851,3197],{"class":294},[288,148853,148309],{"class":298},[288,148855,26216],{"class":294},[288,148857,148836],{"class":298},[288,148859,148860],{"class":290,"line":1800},[288,148861,2572],{"emptyLinePlaceholder":217},[288,148863,148864,148866,148868],{"class":290,"line":1814},[288,148865,147352],{"class":298},[288,148867,344],{"class":294},[288,148869,147357],{"class":298},[288,148871,148872],{"class":290,"line":1819},[288,148873,147941],{"class":298},[288,148875,148876],{"class":290,"line":1825},[288,148877,147749],{"class":298},[288,148879,148880,148882,148884,148886],{"class":290,"line":1846},[288,148881,147754],{"class":5389},[288,148883,344],{"class":294},[288,148885,147395],{"class":403},[288,148887,31639],{"class":298},[288,148889,148890,148892,148894],{"class":290,"line":1851},[288,148891,147765],{"class":5389},[288,148893,344],{"class":294},[288,148895,148896],{"class":298},"amounts,\n",[288,148898,148899,148901,148903,148905],{"class":290,"line":1865},[288,148900,147794],{"class":5389},[288,148902,344],{"class":294},[288,148904,31649],{"class":347},[288,148906,31639],{"class":298},[288,148908,148909,148911,148913,148915,148917,148919,148921],{"class":290,"line":1870},[288,148910,147805],{"class":5389},[288,148912,344],{"class":294},[288,148914,147810],{"class":298},[288,148916,147813],{"class":5389},[288,148918,344],{"class":294},[288,148920,31649],{"class":347},[288,148922,38220],{"class":298},[288,148924,148925],{"class":290,"line":1899},[288,148926,305],{"class":298},[288,148928,148929],{"class":290,"line":1904},[288,148930,147568],{"class":298},[288,148932,148933,148935,148937,148939,148941,148943,148946],{"class":290,"line":1921},[288,148934,147573],{"class":5389},[288,148936,344],{"class":294},[288,148938,147578],{"class":298},[288,148940,51580],{"class":5389},[288,148942,344],{"class":294},[288,148944,148945],{"class":403},"\"每日销售额\"",[288,148947,38220],{"class":298},[288,148949,148950,148952,148954,148956,148958,148960,148962],{"class":290,"line":1926},[288,148951,147592],{"class":5389},[288,148953,344],{"class":294},[288,148955,147597],{"class":298},[288,148957,79983],{"class":5389},[288,148959,344],{"class":294},[288,148961,147604],{"class":403},[288,148963,38220],{"class":298},[288,148965,148966,148968,148970,148972,148974,148976,148978],{"class":290,"line":1931},[288,148967,147611],{"class":5389},[288,148969,344],{"class":294},[288,148971,147597],{"class":298},[288,148973,79983],{"class":5389},[288,148975,344],{"class":294},[288,148977,147622],{"class":403},[288,148979,38220],{"class":298},[288,148981,148982,148984,148986,148988,148990,148992,148994],{"class":290,"line":1936},[288,148983,147629],{"class":5389},[288,148985,344],{"class":294},[288,148987,147634],{"class":298},[288,148989,147637],{"class":5389},[288,148991,344],{"class":294},[288,148993,147642],{"class":403},[288,148995,38220],{"class":298},[288,148997,148998,149001,149003],{"class":290,"line":1950},[288,148999,149000],{"class":5389},"    datazoom_opts",[288,149002,344],{"class":294},[288,149004,149005],{"class":298},"[opts.DataZoomOpts()],\n",[288,149007,149008],{"class":290,"line":1955},[288,149009,305],{"class":298},[288,149011,149012,149014,149017],{"class":290,"line":2749},[288,149013,147424],{"class":298},[288,149015,149016],{"class":403},"\"daily_sales.html\"",[288,149018,305],{"class":298},[19,149020,149021,149024],{},[25,149022,149023],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149026,149028],{"id":149027},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149030,149031],{},"如果数据结构如下：",[280,149033,149035],{"className":30551,"code":149034,"language":30553,"meta":205,"style":205},"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",[25,149036,149037,149045,149053,149075,149096,149101,149108,149128,149148,149152],{"__ignoreMap":205},[288,149038,149039,149041,149043],{"class":290,"line":291},[288,149040,101831],{"class":298},[288,149042,344],{"class":294},[288,149044,15745],{"class":298},[288,149046,149047,149050],{"class":290,"line":206},[288,149048,149049],{"class":403},"    \"北京\"",[288,149051,149052],{"class":298},": [\n",[288,149054,149055,149057,149059,149061,149064,149066,149069,149071,149073],{"class":290,"line":1352},[288,149056,5089],{"class":298},[288,149058,148097],{"class":403},[288,149060,51610],{"class":298},[288,149062,149063],{"class":403},"\"2024-01-01\"",[288,149065,12608],{"class":298},[288,149067,149068],{"class":403},"\"confirm\"",[288,149070,51610],{"class":298},[288,149072,743],{"class":347},[288,149074,5102],{"class":298},[288,149076,149077,149079,149081,149083,149086,149088,149090,149092,149094],{"class":290,"line":1367},[288,149078,5089],{"class":298},[288,149080,148097],{"class":403},[288,149082,51610],{"class":298},[288,149084,149085],{"class":403},"\"2024-01-02\"",[288,149087,12608],{"class":298},[288,149089,149068],{"class":403},[288,149091,51610],{"class":298},[288,149093,795],{"class":347},[288,149095,5102],{"class":298},[288,149097,149098],{"class":290,"line":1373},[288,149099,149100],{"class":298},"    ],\n",[288,149102,149103,149106],{"class":290,"line":1387},[288,149104,149105],{"class":403},"    \"上海\"",[288,149107,149052],{"class":298},[288,149109,149110,149112,149114,149116,149118,149120,149122,149124,149126],{"class":290,"line":1393},[288,149111,5089],{"class":298},[288,149113,148097],{"class":403},[288,149115,51610],{"class":298},[288,149117,149063],{"class":403},[288,149119,12608],{"class":298},[288,149121,149068],{"class":403},[288,149123,51610],{"class":298},[288,149125,692],{"class":347},[288,149127,5102],{"class":298},[288,149129,149130,149132,149134,149136,149138,149140,149142,149144,149146],{"class":290,"line":1484},[288,149131,5089],{"class":298},[288,149133,148097],{"class":403},[288,149135,51610],{"class":298},[288,149137,149085],{"class":403},[288,149139,12608],{"class":298},[288,149141,149068],{"class":403},[288,149143,51610],{"class":298},[288,149145,820],{"class":347},[288,149147,5102],{"class":298},[288,149149,149150],{"class":290,"line":1490},[288,149151,149100],{"class":298},[288,149153,149154],{"class":290,"line":1502},[288,149155,1737],{"class":298},[19,149157,149158],{},"绘制多地区趋势：",[280,149160,149162],{"className":30551,"code":149161,"language":30553,"meta":205,"style":205},"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",[25,149163,149164,149178,149188,149192,149217,149221,149229,149233,149237,149249,149271,149284,149288,149292,149309,149325,149329],{"__ignoreMap":205},[288,149165,149166,149168,149170,149172,149174,149176],{"class":290,"line":291},[288,149167,30910],{"class":294},[288,149169,147479],{"class":298},[288,149171,30565],{"class":294},[288,149173,147484],{"class":298},[288,149175,31556],{"class":294},[288,149177,147489],{"class":298},[288,149179,149180,149182,149184,149186],{"class":290,"line":206},[288,149181,30910],{"class":294},[288,149183,147338],{"class":298},[288,149185,30565],{"class":294},[288,149187,147343],{"class":298},[288,149189,149190],{"class":290,"line":1352},[288,149191,2572],{"emptyLinePlaceholder":217},[288,149193,149194,149196,149198,149200,149202,149204,149206,149208,149210,149213,149215],{"class":290,"line":1367},[288,149195,147900],{"class":298},[288,149197,344],{"class":294},[288,149199,148823],{"class":298},[288,149201,148097],{"class":403},[288,149203,4615],{"class":298},[288,149205,3197],{"class":294},[288,149207,148309],{"class":298},[288,149209,26216],{"class":294},[288,149211,149212],{"class":298}," data[",[288,149214,69442],{"class":403},[288,149216,77700],{"class":298},[288,149218,149219],{"class":290,"line":1373},[288,149220,2572],{"emptyLinePlaceholder":217},[288,149222,149223,149225,149227],{"class":290,"line":1387},[288,149224,147352],{"class":298},[288,149226,344],{"class":294},[288,149228,147357],{"class":298},[288,149230,149231],{"class":290,"line":1393},[288,149232,147941],{"class":298},[288,149234,149235],{"class":290,"line":1484},[288,149236,2572],{"emptyLinePlaceholder":217},[288,149238,149239,149241,149244,149246],{"class":290,"line":1490},[288,149240,3197],{"class":294},[288,149242,149243],{"class":298}," city, records ",[288,149245,26216],{"class":294},[288,149247,149248],{"class":298}," data.items():\n",[288,149250,149251,149254,149256,149258,149260,149262,149264,149266,149268],{"class":290,"line":1502},[288,149252,149253],{"class":298},"    values ",[288,149255,344],{"class":294},[288,149257,148823],{"class":298},[288,149259,149068],{"class":403},[288,149261,4615],{"class":298},[288,149263,3197],{"class":294},[288,149265,148309],{"class":298},[288,149267,26216],{"class":294},[288,149269,149270],{"class":298}," records]\n",[288,149272,149273,149276,149278,149280,149282],{"class":290,"line":1784},[288,149274,149275],{"class":298},"    line.add_yaxis(city, values, ",[288,149277,147845],{"class":5389},[288,149279,344],{"class":294},[288,149281,31649],{"class":347},[288,149283,305],{"class":298},[288,149285,149286],{"class":290,"line":1789},[288,149287,2572],{"emptyLinePlaceholder":217},[288,149289,149290],{"class":290,"line":1795},[288,149291,147568],{"class":298},[288,149293,149294,149296,149298,149300,149302,149304,149307],{"class":290,"line":1800},[288,149295,147573],{"class":5389},[288,149297,344],{"class":294},[288,149299,147578],{"class":298},[288,149301,51580],{"class":5389},[288,149303,344],{"class":294},[288,149305,149306],{"class":403},"\"多地区趋势图\"",[288,149308,38220],{"class":298},[288,149310,149311,149313,149315,149317,149319,149321,149323],{"class":290,"line":1814},[288,149312,147629],{"class":5389},[288,149314,344],{"class":294},[288,149316,147634],{"class":298},[288,149318,147637],{"class":5389},[288,149320,344],{"class":294},[288,149322,147642],{"class":403},[288,149324,38220],{"class":298},[288,149326,149327],{"class":290,"line":1819},[288,149328,305],{"class":298},[288,149330,149331,149333,149336],{"class":290,"line":1825},[288,149332,147424],{"class":298},[288,149334,149335],{"class":403},"\"trend.html\"",[288,149337,305],{"class":298},[19,149339,149340],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149342,149344],{"id":149343},"_1012-易错点","10.12 易错点",[243,149346,149347,149353,149359,149369,149375],{},[246,149348,149349,149352],{},[25,149350,149351],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[246,149354,149355,149358],{},[25,149356,149357],{},"render()"," 生成的是 HTML，不是图片。",[246,149360,149361,149362,149365,149366,28558],{},"JSON 字符串用 ",[25,149363,149364],{},"json.loads()","，JSON 文件用 ",[25,149367,149368],{},"json.load()",[246,149370,149371,149372,28558],{},"中文 JSON 保存时加 ",[25,149373,149374],{},"ensure_ascii=False",[246,149376,149377],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149379,149381],{"id":149380},"_1013-本章练习","10.13 本章练习",[243,149383,149384,149387,149390,149393,149396],{},[246,149385,149386],{},"安装 pyecharts 并生成第一个折线图。",[246,149388,149389],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[246,149391,149392],{},"绘制两条折线，对比线上和线下销售额。",[246,149394,149395],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[246,149397,149398],{},"对含有空值的销售数据进行清洗后再绘图。",[5299,149400,149401],{},"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":205,"searchDepth":206,"depth":206,"links":149403},[149404,149405,149406,149407,149408,149409,149410,149411,149412,149413,149414,149415,149416],{"id":147020,"depth":206,"text":147021},{"id":147095,"depth":206,"text":147096},{"id":147274,"depth":206,"text":147275},{"id":147325,"depth":206,"text":147326},{"id":147459,"depth":206,"text":147460},{"id":147735,"depth":206,"text":147736},{"id":147861,"depth":206,"text":147862},{"id":148072,"depth":206,"text":148073},{"id":148443,"depth":206,"text":148444},{"id":148655,"depth":206,"text":148656},{"id":149027,"depth":206,"text":149028},{"id":149343,"depth":206,"text":149344},{"id":149380,"depth":206,"text":149381},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147012,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149423,"title":149424,"body":149425,"description":214,"extension":215,"meta":151785,"navigation":217,"path":151786,"seo":151787,"stem":151788,"__hash__":151789},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149426,"toc":151762},[149427,149430,149434,149437,149440,149516,149519,149610,149613,149617,149620,149664,149677,149681,149684,149751,149754,149758,149761,149845,149853,149857,149862,150003,150006,150017,150023,150029,150143,150147,150150,150153,150406,150409,150413,150416,150520,150523,150527,150678,150682,150689,150802,150806,150809,150915,150918,150922,150925,150956,150959,151064,151067,151071,151075,151085,151153,151157,151164,151228,151231,151235,151241,151337,151346,151350,151674,151683,151687,151715,151719,151759],[10,149428,149424],{"id":149429},"_11-面向对象基础",[14,149431,149433],{"id":149432},"_111-什么是面向对象","11.1 什么是面向对象",[19,149435,149436],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149438,149439],{},"面向过程：",[280,149441,149443],{"className":30551,"code":149442,"language":30553,"meta":205,"style":205},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[25,149444,149445,149454,149462,149466,149476,149507,149511],{"__ignoreMap":205},[288,149446,149447,149449,149451],{"class":290,"line":291},[288,149448,146636],{"class":298},[288,149450,344],{"class":294},[288,149452,149453],{"class":403}," \"小明\"\n",[288,149455,149456,149458,149460],{"class":290,"line":206},[288,149457,146646],{"class":298},[288,149459,344],{"class":294},[288,149461,146651],{"class":347},[288,149463,149464],{"class":290,"line":1352},[288,149465,2572],{"emptyLinePlaceholder":217},[288,149467,149468,149470,149473],{"class":290,"line":1367},[288,149469,32120],{"class":294},[288,149471,149472],{"class":2135}," introduce",[288,149474,149475],{"class":298},"(name, age):\n",[288,149477,149478,149480,149482,149484,149487,149489,149491,149493,149496,149498,149500,149502,149505],{"class":290,"line":1373},[288,149479,31472],{"class":347},[288,149481,299],{"class":298},[288,149483,351],{"class":294},[288,149485,149486],{"class":403},"\"我叫",[288,149488,1193],{"class":347},[288,149490,79983],{"class":298},[288,149492,1243],{"class":347},[288,149494,149495],{"class":403},"，今年",[288,149497,1193],{"class":347},[288,149499,70394],{"class":298},[288,149501,1243],{"class":347},[288,149503,149504],{"class":403},"岁\"",[288,149506,305],{"class":298},[288,149508,149509],{"class":290,"line":1387},[288,149510,2572],{"emptyLinePlaceholder":217},[288,149512,149513],{"class":290,"line":1393},[288,149514,149515],{"class":298},"introduce(name, age)\n",[19,149517,149518],{},"面向对象：",[280,149520,149522],{"className":30551,"code":149521,"language":30553,"meta":205,"style":205},"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",[25,149523,149524,149532,149540,149569,149573,149577,149587,149596,149605],{"__ignoreMap":205},[288,149525,149526,149528,149530],{"class":290,"line":291},[288,149527,14867],{"class":294},[288,149529,8071],{"class":2135},[288,149531,3911],{"class":298},[288,149533,149534,149536,149538],{"class":290,"line":206},[288,149535,30974],{"class":294},[288,149537,149472],{"class":2135},[288,149539,30980],{"class":298},[288,149541,149542,149544,149546,149548,149550,149553,149555,149557,149559,149561,149563,149565,149567],{"class":290,"line":1352},[288,149543,32624],{"class":347},[288,149545,299],{"class":298},[288,149547,351],{"class":294},[288,149549,149486],{"class":403},[288,149551,149552],{"class":347},"{self",[288,149554,80474],{"class":298},[288,149556,1243],{"class":347},[288,149558,149495],{"class":403},[288,149560,149552],{"class":347},[288,149562,80486],{"class":298},[288,149564,1243],{"class":347},[288,149566,149504],{"class":403},[288,149568,305],{"class":298},[288,149570,149571],{"class":290,"line":1367},[288,149572,2572],{"emptyLinePlaceholder":217},[288,149574,149575],{"class":290,"line":1373},[288,149576,2572],{"emptyLinePlaceholder":217},[288,149578,149579,149582,149584],{"class":290,"line":1387},[288,149580,149581],{"class":298},"student ",[288,149583,344],{"class":294},[288,149585,149586],{"class":298}," Student()\n",[288,149588,149589,149592,149594],{"class":290,"line":1393},[288,149590,149591],{"class":298},"student.name ",[288,149593,344],{"class":294},[288,149595,149453],{"class":403},[288,149597,149598,149601,149603],{"class":290,"line":1484},[288,149599,149600],{"class":298},"student.age ",[288,149602,344],{"class":294},[288,149604,146651],{"class":347},[288,149606,149607],{"class":290,"line":1490},[288,149608,149609],{"class":298},"student.introduce()\n",[19,149611,149612],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149614,149616],{"id":149615},"_112-类和对象","11.2 类和对象",[19,149618,149619],{},"类是模板，对象是根据模板创建出来的具体实例。",[280,149621,149623],{"className":30551,"code":149622,"language":30553,"meta":205,"style":205},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[25,149624,149625,149633,149638,149642,149646,149655],{"__ignoreMap":205},[288,149626,149627,149629,149631],{"class":290,"line":291},[288,149628,14867],{"class":294},[288,149630,8071],{"class":2135},[288,149632,3911],{"class":298},[288,149634,149635],{"class":290,"line":206},[288,149636,149637],{"class":294},"    pass\n",[288,149639,149640],{"class":290,"line":1352},[288,149641,2572],{"emptyLinePlaceholder":217},[288,149643,149644],{"class":290,"line":1367},[288,149645,2572],{"emptyLinePlaceholder":217},[288,149647,149648,149651,149653],{"class":290,"line":1373},[288,149649,149650],{"class":298},"student1 ",[288,149652,344],{"class":294},[288,149654,149586],{"class":298},[288,149656,149657,149660,149662],{"class":290,"line":1387},[288,149658,149659],{"class":298},"student2 ",[288,149661,344],{"class":294},[288,149663,149586],{"class":298},[19,149665,149666,149669,149670,101191,149673,149676],{},[25,149667,149668],{},"Student"," 是类，",[25,149671,149672],{},"student1",[25,149674,149675],{},"student2"," 是对象。",[14,149678,149680],{"id":149679},"_113-属性","11.3 属性",[19,149682,149683],{},"属性是对象保存的数据。",[280,149685,149687],{"className":30551,"code":149686,"language":30553,"meta":205,"style":205},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[25,149688,149689,149697,149701,149705,149709,149717,149725,149733,149737,149744],{"__ignoreMap":205},[288,149690,149691,149693,149695],{"class":290,"line":291},[288,149692,14867],{"class":294},[288,149694,8071],{"class":2135},[288,149696,3911],{"class":298},[288,149698,149699],{"class":290,"line":206},[288,149700,149637],{"class":294},[288,149702,149703],{"class":290,"line":1352},[288,149704,2572],{"emptyLinePlaceholder":217},[288,149706,149707],{"class":290,"line":1367},[288,149708,2572],{"emptyLinePlaceholder":217},[288,149710,149711,149713,149715],{"class":290,"line":1373},[288,149712,149581],{"class":298},[288,149714,344],{"class":294},[288,149716,149586],{"class":298},[288,149718,149719,149721,149723],{"class":290,"line":1387},[288,149720,149591],{"class":298},[288,149722,344],{"class":294},[288,149724,149453],{"class":403},[288,149726,149727,149729,149731],{"class":290,"line":1393},[288,149728,149600],{"class":298},[288,149730,344],{"class":294},[288,149732,146651],{"class":347},[288,149734,149735],{"class":290,"line":1484},[288,149736,2572],{"emptyLinePlaceholder":217},[288,149738,149739,149741],{"class":290,"line":1490},[288,149740,30588],{"class":347},[288,149742,149743],{"class":298},"(student.name)\n",[288,149745,149746,149748],{"class":290,"line":1502},[288,149747,30588],{"class":347},[288,149749,149750],{"class":298},"(student.age)\n",[19,149752,149753],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149755,149757],{"id":149756},"_114-方法","11.4 方法",[19,149759,149760],{},"类中的函数叫方法。",[280,149762,149763],{"className":30551,"code":149521,"language":30553,"meta":205,"style":205},[25,149764,149765,149773,149781,149809,149813,149817,149825,149833,149841],{"__ignoreMap":205},[288,149766,149767,149769,149771],{"class":290,"line":291},[288,149768,14867],{"class":294},[288,149770,8071],{"class":2135},[288,149772,3911],{"class":298},[288,149774,149775,149777,149779],{"class":290,"line":206},[288,149776,30974],{"class":294},[288,149778,149472],{"class":2135},[288,149780,30980],{"class":298},[288,149782,149783,149785,149787,149789,149791,149793,149795,149797,149799,149801,149803,149805,149807],{"class":290,"line":1352},[288,149784,32624],{"class":347},[288,149786,299],{"class":298},[288,149788,351],{"class":294},[288,149790,149486],{"class":403},[288,149792,149552],{"class":347},[288,149794,80474],{"class":298},[288,149796,1243],{"class":347},[288,149798,149495],{"class":403},[288,149800,149552],{"class":347},[288,149802,80486],{"class":298},[288,149804,1243],{"class":347},[288,149806,149504],{"class":403},[288,149808,305],{"class":298},[288,149810,149811],{"class":290,"line":1367},[288,149812,2572],{"emptyLinePlaceholder":217},[288,149814,149815],{"class":290,"line":1373},[288,149816,2572],{"emptyLinePlaceholder":217},[288,149818,149819,149821,149823],{"class":290,"line":1387},[288,149820,149581],{"class":298},[288,149822,344],{"class":294},[288,149824,149586],{"class":298},[288,149826,149827,149829,149831],{"class":290,"line":1393},[288,149828,149591],{"class":298},[288,149830,344],{"class":294},[288,149832,149453],{"class":403},[288,149834,149835,149837,149839],{"class":290,"line":1484},[288,149836,149600],{"class":298},[288,149838,344],{"class":294},[288,149840,146651],{"class":347},[288,149842,149843],{"class":290,"line":1490},[288,149844,149609],{"class":298},[19,149846,149847,149849,149850,149852],{},[25,149848,30996],{}," 表示当前对象。调用方法时不需要手动传入 ",[25,149851,30996],{},"，Python 会自动传。",[14,149854,149856],{"id":149855},"_115-构造方法__init__","11.5 构造方法__init__",[19,149858,149859,149861],{},[25,149860,31002],{}," 在对象创建时自动执行，用于初始化属性。",[280,149863,149865],{"className":30551,"code":149864,"language":30553,"meta":205,"style":205},"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",[25,149866,149867,149875,149884,149896,149908,149919,149923,149931,149969,149973,149977,149999],{"__ignoreMap":205},[288,149868,149869,149871,149873],{"class":290,"line":291},[288,149870,14867],{"class":294},[288,149872,8071],{"class":2135},[288,149874,3911],{"class":298},[288,149876,149877,149879,149881],{"class":290,"line":206},[288,149878,30974],{"class":294},[288,149880,30977],{"class":347},[288,149882,149883],{"class":298},"(self, name, age, score):\n",[288,149885,149886,149888,149891,149893],{"class":290,"line":1352},[288,149887,31018],{"class":347},[288,149889,149890],{"class":298},".name ",[288,149892,344],{"class":294},[288,149894,149895],{"class":298}," name\n",[288,149897,149898,149900,149903,149905],{"class":290,"line":1367},[288,149899,31018],{"class":347},[288,149901,149902],{"class":298},".age ",[288,149904,344],{"class":294},[288,149906,149907],{"class":298}," age\n",[288,149909,149910,149912,149915,149917],{"class":290,"line":1373},[288,149911,31018],{"class":347},[288,149913,149914],{"class":298},".score ",[288,149916,344],{"class":294},[288,149918,1751],{"class":298},[288,149920,149921],{"class":290,"line":1387},[288,149922,2572],{"emptyLinePlaceholder":217},[288,149924,149925,149927,149929],{"class":290,"line":1393},[288,149926,30974],{"class":294},[288,149928,149472],{"class":2135},[288,149930,30980],{"class":298},[288,149932,149933,149935,149937,149939,149941,149943,149945,149947,149949,149951,149953,149955,149958,149960,149963,149965,149967],{"class":290,"line":1484},[288,149934,32624],{"class":347},[288,149936,299],{"class":298},[288,149938,351],{"class":294},[288,149940,149486],{"class":403},[288,149942,149552],{"class":347},[288,149944,80474],{"class":298},[288,149946,1243],{"class":347},[288,149948,149495],{"class":403},[288,149950,149552],{"class":347},[288,149952,80486],{"class":298},[288,149954,1243],{"class":347},[288,149956,149957],{"class":403},"岁，成绩",[288,149959,149552],{"class":347},[288,149961,149962],{"class":298},".score",[288,149964,1243],{"class":347},[288,149966,109],{"class":403},[288,149968,305],{"class":298},[288,149970,149971],{"class":290,"line":1490},[288,149972,2572],{"emptyLinePlaceholder":217},[288,149974,149975],{"class":290,"line":1502},[288,149976,2572],{"emptyLinePlaceholder":217},[288,149978,149979,149981,149983,149986,149989,149991,149993,149995,149997],{"class":290,"line":1784},[288,149980,149581],{"class":298},[288,149982,344],{"class":294},[288,149984,149985],{"class":298}," Student(",[288,149987,149988],{"class":403},"\"小明\"",[288,149990,12608],{"class":298},[288,149992,947],{"class":347},[288,149994,12608],{"class":298},[288,149996,1286],{"class":347},[288,149998,305],{"class":298},[288,150000,150001],{"class":290,"line":1789},[288,150002,149609],{"class":298},[19,150004,150005],{},"构造方法的好处：",[243,150007,150008,150011,150014],{},[246,150009,150010],{},"创建对象时必须提供必要数据。",[246,150012,150013],{},"属性初始化集中，不容易漏。",[246,150015,150016],{},"对象状态更完整。",[14,150018,150020,150021],{"id":150019},"_116-str","11.6 ",[448,150022,1472],{},[19,150024,150025,150026,28558],{},"直接打印对象时，默认输出不直观。可以定义 ",[25,150027,150028],{},"__str__",[280,150030,150032],{"className":30551,"code":150031,"language":30553,"meta":205,"style":205},"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",[25,150033,150034,150042,150051,150061,150071,150075,150084,150112,150116,150120,150136],{"__ignoreMap":205},[288,150035,150036,150038,150040],{"class":290,"line":291},[288,150037,14867],{"class":294},[288,150039,8071],{"class":2135},[288,150041,3911],{"class":298},[288,150043,150044,150046,150048],{"class":290,"line":206},[288,150045,30974],{"class":294},[288,150047,30977],{"class":347},[288,150049,150050],{"class":298},"(self, name, age):\n",[288,150052,150053,150055,150057,150059],{"class":290,"line":1352},[288,150054,31018],{"class":347},[288,150056,149890],{"class":298},[288,150058,344],{"class":294},[288,150060,149895],{"class":298},[288,150062,150063,150065,150067,150069],{"class":290,"line":1367},[288,150064,31018],{"class":347},[288,150066,149902],{"class":298},[288,150068,344],{"class":294},[288,150070,149907],{"class":298},[288,150072,150073],{"class":290,"line":1373},[288,150074,2572],{"emptyLinePlaceholder":217},[288,150076,150077,150079,150082],{"class":290,"line":1387},[288,150078,30974],{"class":294},[288,150080,150081],{"class":347}," __str__",[288,150083,30980],{"class":298},[288,150085,150086,150088,150091,150094,150096,150098,150100,150103,150105,150107,150109],{"class":290,"line":1393},[288,150087,14925],{"class":294},[288,150089,150090],{"class":294}," f",[288,150092,150093],{"class":403},"\"Student(name=",[288,150095,149552],{"class":347},[288,150097,80474],{"class":298},[288,150099,1243],{"class":347},[288,150101,150102],{"class":403},", age=",[288,150104,149552],{"class":347},[288,150106,80486],{"class":298},[288,150108,1243],{"class":347},[288,150110,150111],{"class":403},")\"\n",[288,150113,150114],{"class":290,"line":1484},[288,150115,2572],{"emptyLinePlaceholder":217},[288,150117,150118],{"class":290,"line":1490},[288,150119,2572],{"emptyLinePlaceholder":217},[288,150121,150122,150124,150126,150128,150130,150132,150134],{"class":290,"line":1502},[288,150123,149581],{"class":298},[288,150125,344],{"class":294},[288,150127,149985],{"class":298},[288,150129,149988],{"class":403},[288,150131,12608],{"class":298},[288,150133,947],{"class":347},[288,150135,305],{"class":298},[288,150137,150138,150140],{"class":290,"line":1784},[288,150139,30588],{"class":347},[288,150141,150142],{"class":298},"(student)\n",[14,150144,150146],{"id":150145},"_117-封装","11.7 封装",[19,150148,150149],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150151,150152],{},"Python 中以双下划线开头的属性通常视为私有属性。",[280,150154,150156],{"className":30551,"code":150155,"language":30553,"meta":205,"style":205},"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",[25,150157,150158,150167,150176,150188,150200,150204,150213,150222,150226,150236,150249,150260,150265,150276,150280,150289,150301,150312,150316,150329,150340,150344,150355,150359,150363,150381,150390,150399],{"__ignoreMap":205},[288,150159,150160,150162,150165],{"class":290,"line":291},[288,150161,14867],{"class":294},[288,150163,150164],{"class":2135}," Account",[288,150166,3911],{"class":298},[288,150168,150169,150171,150173],{"class":290,"line":206},[288,150170,30974],{"class":294},[288,150172,30977],{"class":347},[288,150174,150175],{"class":298},"(self, owner, balance):\n",[288,150177,150178,150180,150183,150185],{"class":290,"line":1352},[288,150179,31018],{"class":347},[288,150181,150182],{"class":298},".owner ",[288,150184,344],{"class":294},[288,150186,150187],{"class":298}," owner\n",[288,150189,150190,150192,150195,150197],{"class":290,"line":1367},[288,150191,31018],{"class":347},[288,150193,150194],{"class":298},".__balance ",[288,150196,344],{"class":294},[288,150198,150199],{"class":298}," balance\n",[288,150201,150202],{"class":290,"line":1373},[288,150203,2572],{"emptyLinePlaceholder":217},[288,150205,150206,150208,150211],{"class":290,"line":1387},[288,150207,30974],{"class":294},[288,150209,150210],{"class":2135}," get_balance",[288,150212,30980],{"class":298},[288,150214,150215,150217,150219],{"class":290,"line":1393},[288,150216,14925],{"class":294},[288,150218,39046],{"class":347},[288,150220,150221],{"class":298},".__balance\n",[288,150223,150224],{"class":290,"line":1484},[288,150225,2572],{"emptyLinePlaceholder":217},[288,150227,150228,150230,150233],{"class":290,"line":1490},[288,150229,30974],{"class":294},[288,150231,150232],{"class":2135}," deposit",[288,150234,150235],{"class":298},"(self, money):\n",[288,150237,150238,150240,150243,150245,150247],{"class":290,"line":1502},[288,150239,2669],{"class":294},[288,150241,150242],{"class":298}," money ",[288,150244,1760],{"class":294},[288,150246,4265],{"class":347},[288,150248,3911],{"class":298},[288,150250,150251,150253,150255,150258],{"class":290,"line":1784},[288,150252,34823],{"class":347},[288,150254,299],{"class":298},[288,150256,150257],{"class":403},"\"存款金额必须大于0\"",[288,150259,305],{"class":298},[288,150261,150262],{"class":290,"line":1789},[288,150263,150264],{"class":294},"            return\n",[288,150266,150267,150269,150271,150273],{"class":290,"line":1795},[288,150268,31018],{"class":347},[288,150270,150194],{"class":298},[288,150272,9650],{"class":294},[288,150274,150275],{"class":298}," money\n",[288,150277,150278],{"class":290,"line":1800},[288,150279,2572],{"emptyLinePlaceholder":217},[288,150281,150282,150284,150287],{"class":290,"line":1814},[288,150283,30974],{"class":294},[288,150285,150286],{"class":2135}," withdraw",[288,150288,150235],{"class":298},[288,150290,150291,150293,150295,150297,150299],{"class":290,"line":1819},[288,150292,2669],{"class":294},[288,150294,150242],{"class":298},[288,150296,1760],{"class":294},[288,150298,4265],{"class":347},[288,150300,3911],{"class":298},[288,150302,150303,150305,150307,150310],{"class":290,"line":1825},[288,150304,34823],{"class":347},[288,150306,299],{"class":298},[288,150308,150309],{"class":403},"\"取款金额必须大于0\"",[288,150311,305],{"class":298},[288,150313,150314],{"class":290,"line":1846},[288,150315,150264],{"class":294},[288,150317,150318,150320,150322,150324,150326],{"class":290,"line":1851},[288,150319,2669],{"class":294},[288,150321,150242],{"class":298},[288,150323,1257],{"class":294},[288,150325,39046],{"class":347},[288,150327,150328],{"class":298},".__balance:\n",[288,150330,150331,150333,150335,150338],{"class":290,"line":1865},[288,150332,34823],{"class":347},[288,150334,299],{"class":298},[288,150336,150337],{"class":403},"\"余额不足\"",[288,150339,305],{"class":298},[288,150341,150342],{"class":290,"line":1870},[288,150343,150264],{"class":294},[288,150345,150346,150348,150350,150353],{"class":290,"line":1899},[288,150347,31018],{"class":347},[288,150349,150194],{"class":298},[288,150351,150352],{"class":294},"-=",[288,150354,150275],{"class":298},[288,150356,150357],{"class":290,"line":1904},[288,150358,2572],{"emptyLinePlaceholder":217},[288,150360,150361],{"class":290,"line":1921},[288,150362,2572],{"emptyLinePlaceholder":217},[288,150364,150365,150368,150370,150373,150375,150377,150379],{"class":290,"line":1926},[288,150366,150367],{"class":298},"account ",[288,150369,344],{"class":294},[288,150371,150372],{"class":298}," Account(",[288,150374,149988],{"class":403},[288,150376,12608],{"class":298},[288,150378,6583],{"class":347},[288,150380,305],{"class":298},[288,150382,150383,150386,150388],{"class":290,"line":1931},[288,150384,150385],{"class":298},"account.deposit(",[288,150387,1894],{"class":347},[288,150389,305],{"class":298},[288,150391,150392,150395,150397],{"class":290,"line":1936},[288,150393,150394],{"class":298},"account.withdraw(",[288,150396,608],{"class":347},[288,150398,305],{"class":298},[288,150400,150401,150403],{"class":290,"line":1950},[288,150402,30588],{"class":347},[288,150404,150405],{"class":298},"(account.get_balance())\n",[19,150407,150408],{},"封装的意义是避免外部随意修改内部状态。",[14,150410,150412],{"id":150411},"_118-继承","11.8 继承",[19,150414,150415],{},"继承可以让子类复用父类的属性和方法。",[280,150417,150419],{"className":30551,"code":150418,"language":30553,"meta":205,"style":205},"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",[25,150420,150421,150430,150439,150450,150454,150458,150472,150481,150492,150496,150500,150510,150515],{"__ignoreMap":205},[288,150422,150423,150425,150428],{"class":290,"line":291},[288,150424,14867],{"class":294},[288,150426,150427],{"class":2135}," Animal",[288,150429,3911],{"class":298},[288,150431,150432,150434,150437],{"class":290,"line":206},[288,150433,30974],{"class":294},[288,150435,150436],{"class":2135}," eat",[288,150438,30980],{"class":298},[288,150440,150441,150443,150445,150448],{"class":290,"line":1352},[288,150442,32624],{"class":347},[288,150444,299],{"class":298},[288,150446,150447],{"class":403},"\"吃东西\"",[288,150449,305],{"class":298},[288,150451,150452],{"class":290,"line":1367},[288,150453,2572],{"emptyLinePlaceholder":217},[288,150455,150456],{"class":290,"line":1373},[288,150457,2572],{"emptyLinePlaceholder":217},[288,150459,150460,150462,150465,150467,150470],{"class":290,"line":1387},[288,150461,14867],{"class":294},[288,150463,150464],{"class":2135}," Dog",[288,150466,299],{"class":298},[288,150468,150469],{"class":2135},"Animal",[288,150471,30959],{"class":298},[288,150473,150474,150476,150479],{"class":290,"line":1393},[288,150475,30974],{"class":294},[288,150477,150478],{"class":2135}," bark",[288,150480,30980],{"class":298},[288,150482,150483,150485,150487,150490],{"class":290,"line":1484},[288,150484,32624],{"class":347},[288,150486,299],{"class":298},[288,150488,150489],{"class":403},"\"汪汪\"",[288,150491,305],{"class":298},[288,150493,150494],{"class":290,"line":1490},[288,150495,2572],{"emptyLinePlaceholder":217},[288,150497,150498],{"class":290,"line":1502},[288,150499,2572],{"emptyLinePlaceholder":217},[288,150501,150502,150505,150507],{"class":290,"line":1784},[288,150503,150504],{"class":298},"dog ",[288,150506,344],{"class":294},[288,150508,150509],{"class":298}," Dog()\n",[288,150511,150512],{"class":290,"line":1789},[288,150513,150514],{"class":298},"dog.eat()\n",[288,150516,150517],{"class":290,"line":1795},[288,150518,150519],{"class":298},"dog.bark()\n",[19,150521,150522],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150524,150526],{"id":150525},"_119-方法重写","11.9 方法重写",[280,150528,150530],{"className":30551,"code":150529,"language":30553,"meta":205,"style":205},"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",[25,150531,150532,150540,150549,150560,150564,150568,150580,150588,150598,150602,150606,150619,150627,150638,150642,150646,150654,150664,150668,150673],{"__ignoreMap":205},[288,150533,150534,150536,150538],{"class":290,"line":291},[288,150535,14867],{"class":294},[288,150537,150427],{"class":2135},[288,150539,3911],{"class":298},[288,150541,150542,150544,150547],{"class":290,"line":206},[288,150543,30974],{"class":294},[288,150545,150546],{"class":2135}," speak",[288,150548,30980],{"class":298},[288,150550,150551,150553,150555,150558],{"class":290,"line":1352},[288,150552,32624],{"class":347},[288,150554,299],{"class":298},[288,150556,150557],{"class":403},"\"动物叫\"",[288,150559,305],{"class":298},[288,150561,150562],{"class":290,"line":1367},[288,150563,2572],{"emptyLinePlaceholder":217},[288,150565,150566],{"class":290,"line":1373},[288,150567,2572],{"emptyLinePlaceholder":217},[288,150569,150570,150572,150574,150576,150578],{"class":290,"line":1387},[288,150571,14867],{"class":294},[288,150573,150464],{"class":2135},[288,150575,299],{"class":298},[288,150577,150469],{"class":2135},[288,150579,30959],{"class":298},[288,150581,150582,150584,150586],{"class":290,"line":1393},[288,150583,30974],{"class":294},[288,150585,150546],{"class":2135},[288,150587,30980],{"class":298},[288,150589,150590,150592,150594,150596],{"class":290,"line":1484},[288,150591,32624],{"class":347},[288,150593,299],{"class":298},[288,150595,150489],{"class":403},[288,150597,305],{"class":298},[288,150599,150600],{"class":290,"line":1490},[288,150601,2572],{"emptyLinePlaceholder":217},[288,150603,150604],{"class":290,"line":1502},[288,150605,2572],{"emptyLinePlaceholder":217},[288,150607,150608,150610,150613,150615,150617],{"class":290,"line":1784},[288,150609,14867],{"class":294},[288,150611,150612],{"class":2135}," Cat",[288,150614,299],{"class":298},[288,150616,150469],{"class":2135},[288,150618,30959],{"class":298},[288,150620,150621,150623,150625],{"class":290,"line":1789},[288,150622,30974],{"class":294},[288,150624,150546],{"class":2135},[288,150626,30980],{"class":298},[288,150628,150629,150631,150633,150636],{"class":290,"line":1795},[288,150630,32624],{"class":347},[288,150632,299],{"class":298},[288,150634,150635],{"class":403},"\"喵喵\"",[288,150637,305],{"class":298},[288,150639,150640],{"class":290,"line":1800},[288,150641,2572],{"emptyLinePlaceholder":217},[288,150643,150644],{"class":290,"line":1814},[288,150645,2572],{"emptyLinePlaceholder":217},[288,150647,150648,150650,150652],{"class":290,"line":1819},[288,150649,150504],{"class":298},[288,150651,344],{"class":294},[288,150653,150509],{"class":298},[288,150655,150656,150659,150661],{"class":290,"line":1825},[288,150657,150658],{"class":298},"cat ",[288,150660,344],{"class":294},[288,150662,150663],{"class":298}," Cat()\n",[288,150665,150666],{"class":290,"line":1846},[288,150667,2572],{"emptyLinePlaceholder":217},[288,150669,150670],{"class":290,"line":1851},[288,150671,150672],{"class":298},"dog.speak()\n",[288,150674,150675],{"class":290,"line":1865},[288,150676,150677],{"class":298},"cat.speak()\n",[14,150679,150681],{"id":150680},"_1110-super","11.10 super",[19,150683,150684,150685,150688],{},"子类可以通过 ",[25,150686,150687],{},"super()"," 调用父类方法。",[280,150690,150692],{"className":30551,"code":150691,"language":30553,"meta":205,"style":205},"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",[25,150693,150694,150702,150711,150721,150725,150729,150741,150750,150761,150771,150775,150779,150795],{"__ignoreMap":205},[288,150695,150696,150698,150700],{"class":290,"line":291},[288,150697,14867],{"class":294},[288,150699,15742],{"class":2135},[288,150701,3911],{"class":298},[288,150703,150704,150706,150708],{"class":290,"line":206},[288,150705,30974],{"class":294},[288,150707,30977],{"class":347},[288,150709,150710],{"class":298},"(self, name):\n",[288,150712,150713,150715,150717,150719],{"class":290,"line":1352},[288,150714,31018],{"class":347},[288,150716,149890],{"class":298},[288,150718,344],{"class":294},[288,150720,149895],{"class":298},[288,150722,150723],{"class":290,"line":1367},[288,150724,2572],{"emptyLinePlaceholder":217},[288,150726,150727],{"class":290,"line":1373},[288,150728,2572],{"emptyLinePlaceholder":217},[288,150730,150731,150733,150735,150737,150739],{"class":290,"line":1387},[288,150732,14867],{"class":294},[288,150734,8071],{"class":2135},[288,150736,299],{"class":298},[288,150738,19219],{"class":2135},[288,150740,30959],{"class":298},[288,150742,150743,150745,150747],{"class":290,"line":1393},[288,150744,30974],{"class":294},[288,150746,30977],{"class":347},[288,150748,150749],{"class":298},"(self, name, score):\n",[288,150751,150752,150754,150756,150758],{"class":290,"line":1484},[288,150753,30990],{"class":347},[288,150755,17434],{"class":298},[288,150757,31002],{"class":347},[288,150759,150760],{"class":298},"(name)\n",[288,150762,150763,150765,150767,150769],{"class":290,"line":1490},[288,150764,31018],{"class":347},[288,150766,149914],{"class":298},[288,150768,344],{"class":294},[288,150770,1751],{"class":298},[288,150772,150773],{"class":290,"line":1502},[288,150774,2572],{"emptyLinePlaceholder":217},[288,150776,150777],{"class":290,"line":1784},[288,150778,2572],{"emptyLinePlaceholder":217},[288,150780,150781,150783,150785,150787,150789,150791,150793],{"class":290,"line":1789},[288,150782,149581],{"class":298},[288,150784,344],{"class":294},[288,150786,149985],{"class":298},[288,150788,149988],{"class":403},[288,150790,12608],{"class":298},[288,150792,1286],{"class":347},[288,150794,305],{"class":298},[288,150796,150797,150799],{"class":290,"line":1795},[288,150798,30588],{"class":347},[288,150800,150801],{"class":298},"(student.name, student.score)\n",[14,150803,150805],{"id":150804},"_1111-多态","11.11 多态",[19,150807,150808],{},"多态指不同对象响应同一个方法，表现出不同结果。",[280,150810,150812],{"className":30551,"code":150811,"language":30553,"meta":205,"style":205},"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",[25,150813,150814,150822,150830,150840,150844,150848,150856,150864,150874,150878,150882,150892,150897,150901,150905,150910],{"__ignoreMap":205},[288,150815,150816,150818,150820],{"class":290,"line":291},[288,150817,14867],{"class":294},[288,150819,150464],{"class":2135},[288,150821,3911],{"class":298},[288,150823,150824,150826,150828],{"class":290,"line":206},[288,150825,30974],{"class":294},[288,150827,150546],{"class":2135},[288,150829,30980],{"class":298},[288,150831,150832,150834,150836,150838],{"class":290,"line":1352},[288,150833,32624],{"class":347},[288,150835,299],{"class":298},[288,150837,150489],{"class":403},[288,150839,305],{"class":298},[288,150841,150842],{"class":290,"line":1367},[288,150843,2572],{"emptyLinePlaceholder":217},[288,150845,150846],{"class":290,"line":1373},[288,150847,2572],{"emptyLinePlaceholder":217},[288,150849,150850,150852,150854],{"class":290,"line":1387},[288,150851,14867],{"class":294},[288,150853,150612],{"class":2135},[288,150855,3911],{"class":298},[288,150857,150858,150860,150862],{"class":290,"line":1393},[288,150859,30974],{"class":294},[288,150861,150546],{"class":2135},[288,150863,30980],{"class":298},[288,150865,150866,150868,150870,150872],{"class":290,"line":1484},[288,150867,32624],{"class":347},[288,150869,299],{"class":298},[288,150871,150635],{"class":403},[288,150873,305],{"class":298},[288,150875,150876],{"class":290,"line":1490},[288,150877,2572],{"emptyLinePlaceholder":217},[288,150879,150880],{"class":290,"line":1502},[288,150881,2572],{"emptyLinePlaceholder":217},[288,150883,150884,150886,150889],{"class":290,"line":1784},[288,150885,32120],{"class":294},[288,150887,150888],{"class":2135}," make_sound",[288,150890,150891],{"class":298},"(animal):\n",[288,150893,150894],{"class":290,"line":1789},[288,150895,150896],{"class":298},"    animal.speak()\n",[288,150898,150899],{"class":290,"line":1795},[288,150900,2572],{"emptyLinePlaceholder":217},[288,150902,150903],{"class":290,"line":1800},[288,150904,2572],{"emptyLinePlaceholder":217},[288,150906,150907],{"class":290,"line":1814},[288,150908,150909],{"class":298},"make_sound(Dog())\n",[288,150911,150912],{"class":290,"line":1819},[288,150913,150914],{"class":298},"make_sound(Cat())\n",[19,150916,150917],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150919,150921],{"id":150920},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150923,150924],{},"实例属性属于对象：",[280,150926,150928],{"className":30551,"code":150927,"language":30553,"meta":205,"style":205},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[25,150929,150930,150938,150946],{"__ignoreMap":205},[288,150931,150932,150934,150936],{"class":290,"line":291},[288,150933,14867],{"class":294},[288,150935,8071],{"class":2135},[288,150937,3911],{"class":298},[288,150939,150940,150942,150944],{"class":290,"line":206},[288,150941,30974],{"class":294},[288,150943,30977],{"class":347},[288,150945,150710],{"class":298},[288,150947,150948,150950,150952,150954],{"class":290,"line":1352},[288,150949,31018],{"class":347},[288,150951,149890],{"class":298},[288,150953,344],{"class":294},[288,150955,149895],{"class":298},[19,150957,150958],{},"类属性属于类，所有对象共享：",[280,150960,150962],{"className":30551,"code":150961,"language":30553,"meta":205,"style":205},"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",[25,150963,150964,150972,150982,150986,150994,151004,151008,151012,151025,151039,151043,151050,151057],{"__ignoreMap":205},[288,150965,150966,150968,150970],{"class":290,"line":291},[288,150967,14867],{"class":294},[288,150969,8071],{"class":2135},[288,150971,3911],{"class":298},[288,150973,150974,150977,150979],{"class":290,"line":206},[288,150975,150976],{"class":298},"    school ",[288,150978,344],{"class":294},[288,150980,150981],{"class":403}," \"黑马学校\"\n",[288,150983,150984],{"class":290,"line":1352},[288,150985,2572],{"emptyLinePlaceholder":217},[288,150987,150988,150990,150992],{"class":290,"line":1367},[288,150989,30974],{"class":294},[288,150991,30977],{"class":347},[288,150993,150710],{"class":298},[288,150995,150996,150998,151000,151002],{"class":290,"line":1373},[288,150997,31018],{"class":347},[288,150999,149890],{"class":298},[288,151001,344],{"class":294},[288,151003,149895],{"class":298},[288,151005,151006],{"class":290,"line":1387},[288,151007,2572],{"emptyLinePlaceholder":217},[288,151009,151010],{"class":290,"line":1393},[288,151011,2572],{"emptyLinePlaceholder":217},[288,151013,151014,151017,151019,151021,151023],{"class":290,"line":1484},[288,151015,151016],{"class":298},"s1 ",[288,151018,344],{"class":294},[288,151020,149985],{"class":298},[288,151022,149988],{"class":403},[288,151024,305],{"class":298},[288,151026,151027,151030,151032,151034,151037],{"class":290,"line":1490},[288,151028,151029],{"class":298},"s2 ",[288,151031,344],{"class":294},[288,151033,149985],{"class":298},[288,151035,151036],{"class":403},"\"小红\"",[288,151038,305],{"class":298},[288,151040,151041],{"class":290,"line":1502},[288,151042,2572],{"emptyLinePlaceholder":217},[288,151044,151045,151047],{"class":290,"line":1784},[288,151046,30588],{"class":347},[288,151048,151049],{"class":298},"(s1.school)\n",[288,151051,151052,151054],{"class":290,"line":1789},[288,151053,30588],{"class":347},[288,151055,151056],{"class":298},"(s2.school)\n",[288,151058,151059,151061],{"class":290,"line":1795},[288,151060,30588],{"class":347},[288,151062,151063],{"class":298},"(Student.school)\n",[19,151065,151066],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151068,151070],{"id":151069},"_1113-类方法和静态方法","11.13 类方法和静态方法",[260,151072,151074],{"id":151073},"_11131-类方法","11.13.1 类方法",[19,151076,151077,151078,151081,151082,28558],{},"类方法使用 ",[25,151079,151080],{},"@classmethod","，第一个参数通常是 ",[25,151083,151084],{},"cls",[280,151086,151088],{"className":30551,"code":151087,"language":30553,"meta":205,"style":205},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[25,151089,151090,151098,151106,151110,151118,151128,151138,151142,151146],{"__ignoreMap":205},[288,151091,151092,151094,151096],{"class":290,"line":291},[288,151093,14867],{"class":294},[288,151095,8071],{"class":2135},[288,151097,3911],{"class":298},[288,151099,151100,151102,151104],{"class":290,"line":206},[288,151101,150976],{"class":298},[288,151103,344],{"class":294},[288,151105,150981],{"class":403},[288,151107,151108],{"class":290,"line":1352},[288,151109,2572],{"emptyLinePlaceholder":217},[288,151111,151112,151115],{"class":290,"line":1367},[288,151113,151114],{"class":2135},"    @",[288,151116,151117],{"class":347},"classmethod\n",[288,151119,151120,151122,151125],{"class":290,"line":1373},[288,151121,30974],{"class":294},[288,151123,151124],{"class":2135}," get_school",[288,151126,151127],{"class":298},"(cls):\n",[288,151129,151130,151132,151135],{"class":290,"line":1387},[288,151131,14925],{"class":294},[288,151133,151134],{"class":347}," cls",[288,151136,151137],{"class":298},".school\n",[288,151139,151140],{"class":290,"line":1393},[288,151141,2572],{"emptyLinePlaceholder":217},[288,151143,151144],{"class":290,"line":1484},[288,151145,2572],{"emptyLinePlaceholder":217},[288,151147,151148,151150],{"class":290,"line":1490},[288,151149,30588],{"class":347},[288,151151,151152],{"class":298},"(Student.get_school())\n",[260,151154,151156],{"id":151155},"_11132-静态方法","11.13.2 静态方法",[19,151158,151159,151160,151163],{},"静态方法使用 ",[25,151161,151162],{},"@staticmethod","，不需要访问实例和类。",[280,151165,151167],{"className":30551,"code":151166,"language":30553,"meta":205,"style":205},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[25,151168,151169,151178,151185,151194,151205,151209,151213],{"__ignoreMap":205},[288,151170,151171,151173,151176],{"class":290,"line":291},[288,151172,14867],{"class":294},[288,151174,151175],{"class":2135}," MathUtils",[288,151177,3911],{"class":298},[288,151179,151180,151182],{"class":290,"line":206},[288,151181,151114],{"class":2135},[288,151183,151184],{"class":347},"staticmethod\n",[288,151186,151187,151189,151191],{"class":290,"line":1352},[288,151188,30974],{"class":294},[288,151190,5382],{"class":2135},[288,151192,151193],{"class":298},"(a, b):\n",[288,151195,151196,151198,151200,151202],{"class":290,"line":1367},[288,151197,14925],{"class":294},[288,151199,11042],{"class":298},[288,151201,778],{"class":294},[288,151203,151204],{"class":298}," b\n",[288,151206,151207],{"class":290,"line":1373},[288,151208,2572],{"emptyLinePlaceholder":217},[288,151210,151211],{"class":290,"line":1387},[288,151212,2572],{"emptyLinePlaceholder":217},[288,151214,151215,151217,151220,151222,151224,151226],{"class":290,"line":1393},[288,151216,30588],{"class":347},[288,151218,151219],{"class":298},"(MathUtils.add(",[288,151221,516],{"class":347},[288,151223,12608],{"class":298},[288,151225,376],{"class":347},[288,151227,30670],{"class":298},[19,151229,151230],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151232,151234],{"id":151233},"_1114-dataclass","11.14 dataclass",[19,151236,151237,151240],{},[25,151238,151239],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[280,151242,151244],{"className":30551,"code":151243,"language":30553,"meta":205,"style":205},"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",[25,151245,151246,151258,151262,151266,151271,151279,151287,151295,151303,151307,151311,151331],{"__ignoreMap":205},[288,151247,151248,151250,151253,151255],{"class":290,"line":291},[288,151249,30910],{"class":294},[288,151251,151252],{"class":298}," dataclasses ",[288,151254,30565],{"class":294},[288,151256,151257],{"class":298}," dataclass\n",[288,151259,151260],{"class":290,"line":206},[288,151261,2572],{"emptyLinePlaceholder":217},[288,151263,151264],{"class":290,"line":1352},[288,151265,2572],{"emptyLinePlaceholder":217},[288,151267,151268],{"class":290,"line":1367},[288,151269,151270],{"class":2135},"@dataclass\n",[288,151272,151273,151275,151277],{"class":290,"line":1373},[288,151274,14867],{"class":294},[288,151276,8071],{"class":2135},[288,151278,3911],{"class":298},[288,151280,151281,151284],{"class":290,"line":1387},[288,151282,151283],{"class":298},"    name: ",[288,151285,151286],{"class":347},"str\n",[288,151288,151289,151292],{"class":290,"line":1393},[288,151290,151291],{"class":298},"    age: ",[288,151293,151294],{"class":347},"int\n",[288,151296,151297,151300],{"class":290,"line":1484},[288,151298,151299],{"class":298},"    score: ",[288,151301,151302],{"class":347},"float\n",[288,151304,151305],{"class":290,"line":1490},[288,151306,2572],{"emptyLinePlaceholder":217},[288,151308,151309],{"class":290,"line":1502},[288,151310,2572],{"emptyLinePlaceholder":217},[288,151312,151313,151315,151317,151319,151321,151323,151325,151327,151329],{"class":290,"line":1784},[288,151314,149581],{"class":298},[288,151316,344],{"class":294},[288,151318,149985],{"class":298},[288,151320,149988],{"class":403},[288,151322,12608],{"class":298},[288,151324,947],{"class":347},[288,151326,12608],{"class":298},[288,151328,1286],{"class":347},[288,151330,305],{"class":298},[288,151332,151333,151335],{"class":290,"line":1789},[288,151334,30588],{"class":347},[288,151336,150142],{"class":298},[19,151338,151339,151340,511,151342,151345],{},"它会自动生成 ",[25,151341,31002],{},[25,151343,151344],{},"__repr__"," 等方法。适合数据模型类。",[14,151347,151349],{"id":151348},"_1115-小案例学生类","11.15 小案例：学生类",[280,151351,151353],{"className":30551,"code":151352,"language":30553,"meta":205,"style":205},"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",[25,151354,151355,151363,151372,151384,151394,151404,151414,151418,151427,151440,151444,151453,151459,151471,151483,151495,151507,151511,151515,151521,151531,151540,151550,151558,151566,151575,151579,151583,151591,151627,151631,151635,151660,151667],{"__ignoreMap":205},[288,151356,151357,151359,151361],{"class":290,"line":291},[288,151358,14867],{"class":294},[288,151360,8071],{"class":2135},[288,151362,3911],{"class":298},[288,151364,151365,151367,151369],{"class":290,"line":206},[288,151366,30974],{"class":294},[288,151368,30977],{"class":347},[288,151370,151371],{"class":298},"(self, student_id, name, age, score):\n",[288,151373,151374,151376,151379,151381],{"class":290,"line":1352},[288,151375,31018],{"class":347},[288,151377,151378],{"class":298},".student_id ",[288,151380,344],{"class":294},[288,151382,151383],{"class":298}," student_id\n",[288,151385,151386,151388,151390,151392],{"class":290,"line":1367},[288,151387,31018],{"class":347},[288,151389,149890],{"class":298},[288,151391,344],{"class":294},[288,151393,149895],{"class":298},[288,151395,151396,151398,151400,151402],{"class":290,"line":1373},[288,151397,31018],{"class":347},[288,151399,149902],{"class":298},[288,151401,344],{"class":294},[288,151403,149907],{"class":298},[288,151405,151406,151408,151410,151412],{"class":290,"line":1387},[288,151407,31018],{"class":347},[288,151409,149914],{"class":298},[288,151411,344],{"class":294},[288,151413,1751],{"class":298},[288,151415,151416],{"class":290,"line":1393},[288,151417,2572],{"emptyLinePlaceholder":217},[288,151419,151420,151422,151425],{"class":290,"line":1484},[288,151421,30974],{"class":294},[288,151423,151424],{"class":2135}," is_passed",[288,151426,30980],{"class":298},[288,151428,151429,151431,151433,151435,151437],{"class":290,"line":1490},[288,151430,14925],{"class":294},[288,151432,39046],{"class":347},[288,151434,149914],{"class":298},[288,151436,1882],{"class":294},[288,151438,151439],{"class":347}," 60\n",[288,151441,151442],{"class":290,"line":1502},[288,151443,2572],{"emptyLinePlaceholder":217},[288,151445,151446,151448,151451],{"class":290,"line":1784},[288,151447,30974],{"class":294},[288,151449,151450],{"class":2135}," to_dict",[288,151452,30980],{"class":298},[288,151454,151455,151457],{"class":290,"line":1789},[288,151456,14925],{"class":294},[288,151458,15745],{"class":298},[288,151460,151461,151464,151466,151468],{"class":290,"line":1795},[288,151462,151463],{"class":403},"            \"student_id\"",[288,151465,51610],{"class":298},[288,151467,30996],{"class":347},[288,151469,151470],{"class":298},".student_id,\n",[288,151472,151473,151476,151478,151480],{"class":290,"line":1800},[288,151474,151475],{"class":403},"            \"name\"",[288,151477,51610],{"class":298},[288,151479,30996],{"class":347},[288,151481,151482],{"class":298},".name,\n",[288,151484,151485,151488,151490,151492],{"class":290,"line":1814},[288,151486,151487],{"class":403},"            \"age\"",[288,151489,51610],{"class":298},[288,151491,30996],{"class":347},[288,151493,151494],{"class":298},".age,\n",[288,151496,151497,151500,151502,151504],{"class":290,"line":1819},[288,151498,151499],{"class":403},"            \"score\"",[288,151501,51610],{"class":298},[288,151503,30996],{"class":347},[288,151505,151506],{"class":298},".score,\n",[288,151508,151509],{"class":290,"line":1825},[288,151510,2701],{"class":298},[288,151512,151513],{"class":290,"line":1846},[288,151514,2572],{"emptyLinePlaceholder":217},[288,151516,151517,151519],{"class":290,"line":1851},[288,151518,151114],{"class":2135},[288,151520,151117],{"class":347},[288,151522,151523,151525,151528],{"class":290,"line":1865},[288,151524,30974],{"class":294},[288,151526,151527],{"class":2135}," from_dict",[288,151529,151530],{"class":298},"(cls, data):\n",[288,151532,151533,151535,151537],{"class":290,"line":1870},[288,151534,14925],{"class":294},[288,151536,151134],{"class":347},[288,151538,151539],{"class":298},"(\n",[288,151541,151542,151545,151548],{"class":290,"line":1899},[288,151543,151544],{"class":298},"            data[",[288,151546,151547],{"class":403},"\"student_id\"",[288,151549,88009],{"class":298},[288,151551,151552,151554,151556],{"class":290,"line":1904},[288,151553,151544],{"class":298},[288,151555,62852],{"class":403},[288,151557,88009],{"class":298},[288,151559,151560,151562,151564],{"class":290,"line":1921},[288,151561,151544],{"class":298},[288,151563,69297],{"class":403},[288,151565,88009],{"class":298},[288,151567,151568,151570,151573],{"class":290,"line":1926},[288,151569,151544],{"class":298},[288,151571,151572],{"class":403},"\"score\"",[288,151574,88009],{"class":298},[288,151576,151577],{"class":290,"line":1931},[288,151578,38299],{"class":298},[288,151580,151581],{"class":290,"line":1936},[288,151582,2572],{"emptyLinePlaceholder":217},[288,151584,151585,151587,151589],{"class":290,"line":1950},[288,151586,30974],{"class":294},[288,151588,150081],{"class":347},[288,151590,30980],{"class":298},[288,151592,151593,151595,151597,151599,151601,151604,151606,151609,151611,151613,151615,151617,151619,151621,151623,151625],{"class":290,"line":1955},[288,151594,14925],{"class":294},[288,151596,150090],{"class":294},[288,151598,109],{"class":403},[288,151600,149552],{"class":347},[288,151602,151603],{"class":298},".student_id",[288,151605,1243],{"class":347},[288,151607,151608],{"class":347}," {self",[288,151610,80474],{"class":298},[288,151612,1243],{"class":347},[288,151614,151608],{"class":347},[288,151616,80486],{"class":298},[288,151618,1243],{"class":347},[288,151620,151608],{"class":347},[288,151622,149962],{"class":298},[288,151624,1243],{"class":347},[288,151626,25306],{"class":403},[288,151628,151629],{"class":290,"line":2749},[288,151630,2572],{"emptyLinePlaceholder":217},[288,151632,151633],{"class":290,"line":2763},[288,151634,2572],{"emptyLinePlaceholder":217},[288,151636,151637,151639,151641,151643,151646,151648,151650,151652,151654,151656,151658],{"class":290,"line":2771},[288,151638,149581],{"class":298},[288,151640,344],{"class":294},[288,151642,149985],{"class":298},[288,151644,151645],{"class":403},"\"001\"",[288,151647,12608],{"class":298},[288,151649,149988],{"class":403},[288,151651,12608],{"class":298},[288,151653,947],{"class":347},[288,151655,12608],{"class":298},[288,151657,1286],{"class":347},[288,151659,305],{"class":298},[288,151661,151662,151664],{"class":290,"line":2776},[288,151663,30588],{"class":347},[288,151665,151666],{"class":298},"(student.is_passed())\n",[288,151668,151669,151671],{"class":290,"line":2782},[288,151670,30588],{"class":347},[288,151672,151673],{"class":298},"(student.to_dict())\n",[19,151675,151676,101191,151679,151682],{},[25,151677,151678],{},"to_dict()",[25,151680,151681],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151684,151686],{"id":151685},"_1116-易错点","11.16 易错点",[243,151688,151689,151695,151701,151706,151709,151712],{},[246,151690,151691,151692,28558],{},"类名推荐使用大驼峰，如 ",[25,151693,151694],{},"StudentManager",[246,151696,151697,151698,151700],{},"方法第一个参数必须写 ",[25,151699,30996],{},"，调用时不用传。",[246,151702,151703,151705],{},[25,151704,31002],{}," 不是普通方法，它在创建对象时自动执行。",[246,151707,151708],{},"私有属性不是绝对安全，只是约定和名称改写。",[246,151710,151711],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[246,151713,151714],{},"类中方法太多时，说明职责可能过重。",[14,151716,151718],{"id":151717},"_1117-本章练习","11.17 本章练习",[243,151720,151721,151727,151733,151738,151751],{},[246,151722,151723,151724,151726],{},"定义 ",[25,151725,149668],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[246,151728,151723,151729,151732],{},[25,151730,151731],{},"Account"," 类，实现存款、取款、查询余额。",[246,151734,151723,151735,151737],{},[25,151736,17399],{}," 类，计算圆的周长和面积。",[246,151739,151723,151740,511,151743,151746,151747,151750],{},[25,151741,151742],{},"Dog",[25,151744,151745],{},"Cat"," 类，并用同一个函数调用它们的 ",[25,151748,151749],{},"speak()"," 方法。",[246,151752,104539,151753,151755,151756,28558],{},[25,151754,151239],{}," 定义一个商品类 ",[25,151757,151758],{},"Product",[5299,151760,151761],{},"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":205,"searchDepth":206,"depth":206,"links":151763},[151764,151765,151766,151767,151768,151769,151771,151772,151773,151774,151775,151776,151777,151781,151782,151783,151784],{"id":149432,"depth":206,"text":149433},{"id":149615,"depth":206,"text":149616},{"id":149679,"depth":206,"text":149680},{"id":149756,"depth":206,"text":149757},{"id":149855,"depth":206,"text":149856},{"id":150019,"depth":206,"text":151770},"11.6 str",{"id":150145,"depth":206,"text":150146},{"id":150411,"depth":206,"text":150412},{"id":150525,"depth":206,"text":150526},{"id":150680,"depth":206,"text":150681},{"id":150804,"depth":206,"text":150805},{"id":150920,"depth":206,"text":150921},{"id":151069,"depth":206,"text":151070,"children":151778},[151779,151780],{"id":151073,"depth":1352,"text":151074},{"id":151155,"depth":1352,"text":151156},{"id":151233,"depth":206,"text":151234},{"id":151348,"depth":206,"text":151349},{"id":151685,"depth":206,"text":151686},{"id":151717,"depth":206,"text":151718},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149424,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151791,"title":151792,"body":151793,"description":214,"extension":215,"meta":155106,"navigation":217,"path":155107,"seo":155108,"stem":155109,"__hash__":155110},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151794,"toc":155082},[151795,151798,151802,151805,151808,151837,151840,151848,151852,151856,151859,151882,151885,151891,151895,153341,153344,153365,153369,153372,153384,153387,153571,153574,153700,153703,153707,153711,153847,153851,153937,153941,154023,154027,154064,154068,154257,154261,154264,154494,154498,154501,154682,154685,154689,154692,154698,154701,154727,154731,154734,154748,154751,154776,154779,154793,154796,154813,154816,154833,154836,154853,154857,154883,154887,154910,154914,154917,154919,154925,154927,154948,154951,154957,154963,154967,154970,155046,155049,155053,155079],[10,151796,151792],{"id":151797},"_12-综合案例与复习路线",[14,151799,151801],{"id":151800},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151803,151804],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151806,151807],{},"一个合格的入门综合项目最好覆盖：",[243,151809,151810,151813,151816,151819,151822,151825,151828,151831,151834],{},[246,151811,151812],{},"输入输出。",[246,151814,151815],{},"判断和循环。",[246,151817,151818],{},"函数拆分。",[246,151820,151821],{},"列表、字典等容器。",[246,151823,151824],{},"文件持久化。",[246,151826,151827],{},"异常处理。",[246,151829,151830],{},"模块拆分。",[246,151832,151833],{},"可选：面向对象。",[246,151835,151836],{},"可选：数据可视化。",[19,151838,151839],{},"本章整理两个方向：",[243,151841,151842,151845],{},[246,151843,151844],{},"学生管理系统。",[246,151846,151847],{},"销售数据统计和可视化。",[14,151849,151851],{"id":151850},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[260,151853,151855],{"id":151854},"_1221-需求","12.2.1 需求",[19,151857,151858],{},"实现一个命令行学生管理系统：",[243,151860,151861,151864,151867,151870,151873,151876,151879],{},[246,151862,151863],{},"添加学生。",[246,151865,151866],{},"删除学生。",[246,151868,151869],{},"修改学生。",[246,151871,151872],{},"查询学生。",[246,151874,151875],{},"显示所有学生。",[246,151877,151878],{},"保存到 JSON 文件。",[246,151880,151881],{},"程序启动时自动读取 JSON 文件。",[19,151883,151884],{},"学生字段：",[280,151886,151889],{"className":151887,"code":151888,"language":5360,"meta":205},[5358],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[25,151890,151888],{"__ignoreMap":205},[14,151892,151894],{"id":151893},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[280,151896,151898],{"className":30551,"code":151897,"language":30553,"meta":205,"style":205},"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",[25,151899,151900,151906,151916,151920,151934,151938,151942,151951,151963,151969,151973,151979,152010,152020,152027,152038,152044,152048,152052,152062,152093,152119,152123,152127,152136,152147,152158,152169,152180,152191,152202,152213,152217,152221,152231,152243,152259,152266,152273,152277,152281,152291,152299,152306,152319,152329,152340,152344,152348,152357,152365,152371,152383,152391,152402,152406,152410,152419,152435,152439,152446,152457,152462,152466,152482,152497,152512,152516,152521,152529,152537,152545,152553,152557,152562,152573,152577,152581,152590,152605,152615,152619,152631,152642,152646,152650,152655,152659,152670,152674,152678,152687,152702,152710,152714,152726,152736,152740,152744,152759,152772,152785,152789,152802,152814,152826,152830,152834,152845,152849,152853,152862,152877,152885,152889,152901,152911,152915,152919,152924,152928,152932,152942,152948,152970,152989,153008,153027,153032,153036,153040,153049,153057,153068,153072,153076,153102,153112,153117,153121,153125,153133,153143,153147,153155,153160,153176,153180,153194,153199,153213,153218,153231,153236,153249,153254,153267,153272,153285,153296,153300,153306,153317,153321,153325,153337],{"__ignoreMap":205},[288,151901,151902,151904],{"class":290,"line":291},[288,151903,30565],{"class":294},[288,151905,147191],{"class":298},[288,151907,151908,151910,151912,151914],{"class":290,"line":206},[288,151909,30910],{"class":294},[288,151911,108484],{"class":298},[288,151913,30565],{"class":294},[288,151915,108489],{"class":298},[288,151917,151918],{"class":290,"line":1352},[288,151919,2572],{"emptyLinePlaceholder":217},[288,151921,151922,151925,151927,151929,151932],{"class":290,"line":1367},[288,151923,151924],{"class":347},"DATA_FILE",[288,151926,13737],{"class":294},[288,151928,108718],{"class":298},[288,151930,151931],{"class":403},"\"students.json\"",[288,151933,305],{"class":298},[288,151935,151936],{"class":290,"line":1373},[288,151937,2572],{"emptyLinePlaceholder":217},[288,151939,151940],{"class":290,"line":1387},[288,151941,2572],{"emptyLinePlaceholder":217},[288,151943,151944,151946,151949],{"class":290,"line":1393},[288,151945,32120],{"class":294},[288,151947,151948],{"class":2135}," load_students",[288,151950,32126],{"class":298},[288,151952,151953,151955,151957,151960],{"class":290,"line":1484},[288,151954,3273],{"class":294},[288,151956,39103],{"class":294},[288,151958,151959],{"class":347}," DATA_FILE",[288,151961,151962],{"class":298},".exists():\n",[288,151964,151965,151967],{"class":290,"line":1490},[288,151966,14925],{"class":294},[288,151968,52011],{"class":298},[288,151970,151971],{"class":290,"line":1502},[288,151972,2572],{"emptyLinePlaceholder":217},[288,151974,151975,151977],{"class":290,"line":1784},[288,151976,125957],{"class":294},[288,151978,3911],{"class":298},[288,151980,151981,151984,151986,151988,151990,151992,151994,151996,151998,152000,152002,152004,152006,152008],{"class":290,"line":1789},[288,151982,151983],{"class":294},"        with",[288,151985,146891],{"class":347},[288,151987,299],{"class":298},[288,151989,151924],{"class":347},[288,151991,12608],{"class":298},[288,151993,146901],{"class":403},[288,151995,12608],{"class":298},[288,151997,146906],{"class":5389},[288,151999,344],{"class":294},[288,152001,146911],{"class":403},[288,152003,13887],{"class":298},[288,152005,31556],{"class":294},[288,152007,148253],{"class":5389},[288,152009,3911],{"class":298},[288,152011,152012,152014,152016,152018],{"class":290,"line":1795},[288,152013,15905],{"class":294},[288,152015,148264],{"class":298},[288,152017,45527],{"class":5389},[288,152019,305],{"class":298},[288,152021,152022,152024],{"class":290,"line":1800},[288,152023,125985],{"class":294},[288,152025,152026],{"class":298}," json.JSONDecodeError:\n",[288,152028,152029,152031,152033,152036],{"class":290,"line":1814},[288,152030,32624],{"class":347},[288,152032,299],{"class":298},[288,152034,152035],{"class":403},"\"数据文件格式错误，已使用空数据启动\"",[288,152037,305],{"class":298},[288,152039,152040,152042],{"class":290,"line":1819},[288,152041,14925],{"class":294},[288,152043,52011],{"class":298},[288,152045,152046],{"class":290,"line":1825},[288,152047,2572],{"emptyLinePlaceholder":217},[288,152049,152050],{"class":290,"line":1846},[288,152051,2572],{"emptyLinePlaceholder":217},[288,152053,152054,152056,152059],{"class":290,"line":1851},[288,152055,32120],{"class":294},[288,152057,152058],{"class":2135}," save_students",[288,152060,152061],{"class":298},"(students):\n",[288,152063,152064,152066,152068,152070,152072,152074,152077,152079,152081,152083,152085,152087,152089,152091],{"class":290,"line":1865},[288,152065,34351],{"class":294},[288,152067,146891],{"class":347},[288,152069,299],{"class":298},[288,152071,151924],{"class":347},[288,152073,12608],{"class":298},[288,152075,152076],{"class":403},"\"w\"",[288,152078,12608],{"class":298},[288,152080,146906],{"class":5389},[288,152082,344],{"class":294},[288,152084,146911],{"class":403},[288,152086,13887],{"class":298},[288,152088,31556],{"class":294},[288,152090,148253],{"class":5389},[288,152092,3911],{"class":298},[288,152094,152095,152098,152100,152102,152104,152106,152108,152110,152113,152115,152117],{"class":290,"line":1870},[288,152096,152097],{"class":298},"        json.dump(students, ",[288,152099,45527],{"class":5389},[288,152101,12608],{"class":298},[288,152103,147237],{"class":5389},[288,152105,344],{"class":294},[288,152107,34160],{"class":347},[288,152109,12608],{"class":298},[288,152111,152112],{"class":5389},"indent",[288,152114,344],{"class":294},[288,152116,376],{"class":347},[288,152118,305],{"class":298},[288,152120,152121],{"class":290,"line":1899},[288,152122,2572],{"emptyLinePlaceholder":217},[288,152124,152125],{"class":290,"line":1904},[288,152126,2572],{"emptyLinePlaceholder":217},[288,152128,152129,152131,152134],{"class":290,"line":1921},[288,152130,32120],{"class":294},[288,152132,152133],{"class":2135}," show_menu",[288,152135,32126],{"class":298},[288,152137,152138,152140,152142,152145],{"class":290,"line":1926},[288,152139,31472],{"class":347},[288,152141,299],{"class":298},[288,152143,152144],{"class":403},"\"====== 学生管理系统 ======\"",[288,152146,305],{"class":298},[288,152148,152149,152151,152153,152156],{"class":290,"line":1931},[288,152150,31472],{"class":347},[288,152152,299],{"class":298},[288,152154,152155],{"class":403},"\"1. 添加学生\"",[288,152157,305],{"class":298},[288,152159,152160,152162,152164,152167],{"class":290,"line":1936},[288,152161,31472],{"class":347},[288,152163,299],{"class":298},[288,152165,152166],{"class":403},"\"2. 删除学生\"",[288,152168,305],{"class":298},[288,152170,152171,152173,152175,152178],{"class":290,"line":1950},[288,152172,31472],{"class":347},[288,152174,299],{"class":298},[288,152176,152177],{"class":403},"\"3. 修改学生\"",[288,152179,305],{"class":298},[288,152181,152182,152184,152186,152189],{"class":290,"line":1955},[288,152183,31472],{"class":347},[288,152185,299],{"class":298},[288,152187,152188],{"class":403},"\"4. 查询学生\"",[288,152190,305],{"class":298},[288,152192,152193,152195,152197,152200],{"class":290,"line":2749},[288,152194,31472],{"class":347},[288,152196,299],{"class":298},[288,152198,152199],{"class":403},"\"5. 显示所有学生\"",[288,152201,305],{"class":298},[288,152203,152204,152206,152208,152211],{"class":290,"line":2763},[288,152205,31472],{"class":347},[288,152207,299],{"class":298},[288,152209,152210],{"class":403},"\"0. 退出系统\"",[288,152212,305],{"class":298},[288,152214,152215],{"class":290,"line":2771},[288,152216,2572],{"emptyLinePlaceholder":217},[288,152218,152219],{"class":290,"line":2776},[288,152220,2572],{"emptyLinePlaceholder":217},[288,152222,152223,152225,152228],{"class":290,"line":2782},[288,152224,32120],{"class":294},[288,152226,152227],{"class":2135}," find_student",[288,152229,152230],{"class":298},"(students, student_id):\n",[288,152232,152233,152235,152238,152240],{"class":290,"line":2788},[288,152234,3373],{"class":294},[288,152236,152237],{"class":298}," student ",[288,152239,26216],{"class":294},[288,152241,152242],{"class":298}," students:\n",[288,152244,152245,152247,152250,152252,152254,152256],{"class":290,"line":2793},[288,152246,2669],{"class":294},[288,152248,152249],{"class":298}," student[",[288,152251,151547],{"class":403},[288,152253,4615],{"class":298},[288,152255,3121],{"class":294},[288,152257,152258],{"class":298}," student_id:\n",[288,152260,152261,152263],{"class":290,"line":8121},[288,152262,15905],{"class":294},[288,152264,152265],{"class":298}," student\n",[288,152267,152268,152270],{"class":290,"line":8145},[288,152269,4262],{"class":294},[288,152271,152272],{"class":347}," None\n",[288,152274,152275],{"class":290,"line":8150},[288,152276,2572],{"emptyLinePlaceholder":217},[288,152278,152279],{"class":290,"line":8156},[288,152280,2572],{"emptyLinePlaceholder":217},[288,152282,152283,152285,152288],{"class":290,"line":8183},[288,152284,32120],{"class":294},[288,152286,152287],{"class":2135}," input_int",[288,152289,152290],{"class":298},"(prompt):\n",[288,152292,152293,152295,152297],{"class":290,"line":8188},[288,152294,2423],{"class":294},[288,152296,95465],{"class":347},[288,152298,3911],{"class":298},[288,152300,152301,152304],{"class":290,"line":8194},[288,152302,152303],{"class":294},"        try",[288,152305,3911],{"class":298},[288,152307,152308,152310,152312,152314,152316],{"class":290,"line":8206},[288,152309,15905],{"class":294},[288,152311,2554],{"class":347},[288,152313,299],{"class":298},[288,152315,53994],{"class":347},[288,152317,152318],{"class":298},"(prompt))\n",[288,152320,152321,152324,152327],{"class":290,"line":8218},[288,152322,152323],{"class":294},"        except",[288,152325,152326],{"class":347}," ValueError",[288,152328,3911],{"class":298},[288,152330,152331,152333,152335,152338],{"class":290,"line":8230},[288,152332,34823],{"class":347},[288,152334,299],{"class":298},[288,152336,152337],{"class":403},"\"请输入整数\"",[288,152339,305],{"class":298},[288,152341,152342],{"class":290,"line":9889},[288,152343,2572],{"emptyLinePlaceholder":217},[288,152345,152346],{"class":290,"line":9914},[288,152347,2572],{"emptyLinePlaceholder":217},[288,152349,152350,152352,152355],{"class":290,"line":9937},[288,152351,32120],{"class":294},[288,152353,152354],{"class":2135}," input_float",[288,152356,152290],{"class":298},[288,152358,152359,152361,152363],{"class":290,"line":9961},[288,152360,2423],{"class":294},[288,152362,95465],{"class":347},[288,152364,3911],{"class":298},[288,152366,152367,152369],{"class":290,"line":9966},[288,152368,152303],{"class":294},[288,152370,3911],{"class":298},[288,152372,152373,152375,152377,152379,152381],{"class":290,"line":9971},[288,152374,15905],{"class":294},[288,152376,109970],{"class":347},[288,152378,299],{"class":298},[288,152380,53994],{"class":347},[288,152382,152318],{"class":298},[288,152384,152385,152387,152389],{"class":290,"line":9976},[288,152386,152323],{"class":294},[288,152388,152326],{"class":347},[288,152390,3911],{"class":298},[288,152392,152393,152395,152397,152400],{"class":290,"line":9985},[288,152394,34823],{"class":347},[288,152396,299],{"class":298},[288,152398,152399],{"class":403},"\"请输入数字\"",[288,152401,305],{"class":298},[288,152403,152404],{"class":290,"line":9990},[288,152405,2572],{"emptyLinePlaceholder":217},[288,152407,152408],{"class":290,"line":9996},[288,152409,2572],{"emptyLinePlaceholder":217},[288,152411,152412,152414,152417],{"class":290,"line":10017},[288,152413,32120],{"class":294},[288,152415,152416],{"class":2135}," add_student",[288,152418,152061],{"class":298},[288,152420,152421,152424,152426,152428,152430,152433],{"class":290,"line":10023},[288,152422,152423],{"class":298},"    student_id ",[288,152425,344],{"class":294},[288,152427,60778],{"class":347},[288,152429,299],{"class":298},[288,152431,152432],{"class":403},"\"请输入学号:\"",[288,152434,305],{"class":298},[288,152436,152437],{"class":290,"line":10037},[288,152438,2572],{"emptyLinePlaceholder":217},[288,152440,152441,152443],{"class":290,"line":10043},[288,152442,3273],{"class":294},[288,152444,152445],{"class":298}," find_student(students, student_id):\n",[288,152447,152448,152450,152452,152455],{"class":290,"line":10070},[288,152449,32624],{"class":347},[288,152451,299],{"class":298},[288,152453,152454],{"class":403},"\"学号已存在\"",[288,152456,305],{"class":298},[288,152458,152459],{"class":290,"line":10079},[288,152460,152461],{"class":294},"        return\n",[288,152463,152464],{"class":290,"line":10085},[288,152465,2572],{"emptyLinePlaceholder":217},[288,152467,152468,152471,152473,152475,152477,152480],{"class":290,"line":10093},[288,152469,152470],{"class":298},"    name ",[288,152472,344],{"class":294},[288,152474,60778],{"class":347},[288,152476,299],{"class":298},[288,152478,152479],{"class":403},"\"请输入姓名:\"",[288,152481,305],{"class":298},[288,152483,152484,152487,152489,152492,152495],{"class":290,"line":10098},[288,152485,152486],{"class":298},"    age ",[288,152488,344],{"class":294},[288,152490,152491],{"class":298}," input_int(",[288,152493,152494],{"class":403},"\"请输入年龄:\"",[288,152496,305],{"class":298},[288,152498,152499,152502,152504,152507,152510],{"class":290,"line":16777},[288,152500,152501],{"class":298},"    score ",[288,152503,344],{"class":294},[288,152505,152506],{"class":298}," input_float(",[288,152508,152509],{"class":403},"\"请输入成绩:\"",[288,152511,305],{"class":298},[288,152513,152514],{"class":290,"line":16783},[288,152515,2572],{"emptyLinePlaceholder":217},[288,152517,152518],{"class":290,"line":16806},[288,152519,152520],{"class":298},"    students.append({\n",[288,152522,152523,152526],{"class":290,"line":16812},[288,152524,152525],{"class":403},"        \"student_id\"",[288,152527,152528],{"class":298},": student_id,\n",[288,152530,152531,152534],{"class":290,"line":16835},[288,152532,152533],{"class":403},"        \"name\"",[288,152535,152536],{"class":298},": name,\n",[288,152538,152539,152542],{"class":290,"line":16849},[288,152540,152541],{"class":403},"        \"age\"",[288,152543,152544],{"class":298},": age,\n",[288,152546,152547,152550],{"class":290,"line":16869},[288,152548,152549],{"class":403},"        \"score\"",[288,152551,152552],{"class":298},": score,\n",[288,152554,152555],{"class":290,"line":16875},[288,152556,33634],{"class":298},[288,152558,152559],{"class":290,"line":16886},[288,152560,152561],{"class":298},"    save_students(students)\n",[288,152563,152564,152566,152568,152571],{"class":290,"line":16909},[288,152565,31472],{"class":347},[288,152567,299],{"class":298},[288,152569,152570],{"class":403},"\"添加成功\"",[288,152572,305],{"class":298},[288,152574,152575],{"class":290,"line":16931},[288,152576,2572],{"emptyLinePlaceholder":217},[288,152578,152579],{"class":290,"line":16936},[288,152580,2572],{"emptyLinePlaceholder":217},[288,152582,152583,152585,152588],{"class":290,"line":16942},[288,152584,32120],{"class":294},[288,152586,152587],{"class":2135}," delete_student",[288,152589,152061],{"class":298},[288,152591,152592,152594,152596,152598,152600,152603],{"class":290,"line":16956},[288,152593,152423],{"class":298},[288,152595,344],{"class":294},[288,152597,60778],{"class":347},[288,152599,299],{"class":298},[288,152601,152602],{"class":403},"\"请输入要删除的学号:\"",[288,152604,305],{"class":298},[288,152606,152607,152610,152612],{"class":290,"line":16969},[288,152608,152609],{"class":298},"    student ",[288,152611,344],{"class":294},[288,152613,152614],{"class":298}," find_student(students, student_id)\n",[288,152616,152617],{"class":290,"line":16974},[288,152618,2572],{"emptyLinePlaceholder":217},[288,152620,152621,152623,152625,152627,152629],{"class":290,"line":16988},[288,152622,3273],{"class":294},[288,152624,152237],{"class":298},[288,152626,39100],{"class":294},[288,152628,39106],{"class":347},[288,152630,3911],{"class":298},[288,152632,152633,152635,152637,152640],{"class":290,"line":16993},[288,152634,32624],{"class":347},[288,152636,299],{"class":298},[288,152638,152639],{"class":403},"\"学生不存在\"",[288,152641,305],{"class":298},[288,152643,152644],{"class":290,"line":16999},[288,152645,152461],{"class":294},[288,152647,152648],{"class":290,"line":17004},[288,152649,2572],{"emptyLinePlaceholder":217},[288,152651,152652],{"class":290,"line":17018},[288,152653,152654],{"class":298},"    students.remove(student)\n",[288,152656,152657],{"class":290,"line":17023},[288,152658,152561],{"class":298},[288,152660,152661,152663,152665,152668],{"class":290,"line":17028},[288,152662,31472],{"class":347},[288,152664,299],{"class":298},[288,152666,152667],{"class":403},"\"删除成功\"",[288,152669,305],{"class":298},[288,152671,152672],{"class":290,"line":17042},[288,152673,2572],{"emptyLinePlaceholder":217},[288,152675,152676],{"class":290,"line":17054},[288,152677,2572],{"emptyLinePlaceholder":217},[288,152679,152680,152682,152685],{"class":290,"line":17059},[288,152681,32120],{"class":294},[288,152683,152684],{"class":2135}," update_student",[288,152686,152061],{"class":298},[288,152688,152689,152691,152693,152695,152697,152700],{"class":290,"line":17072},[288,152690,152423],{"class":298},[288,152692,344],{"class":294},[288,152694,60778],{"class":347},[288,152696,299],{"class":298},[288,152698,152699],{"class":403},"\"请输入要修改的学号:\"",[288,152701,305],{"class":298},[288,152703,152704,152706,152708],{"class":290,"line":17077},[288,152705,152609],{"class":298},[288,152707,344],{"class":294},[288,152709,152614],{"class":298},[288,152711,152712],{"class":290,"line":17082},[288,152713,2572],{"emptyLinePlaceholder":217},[288,152715,152716,152718,152720,152722,152724],{"class":290,"line":17087},[288,152717,3273],{"class":294},[288,152719,152237],{"class":298},[288,152721,39100],{"class":294},[288,152723,39106],{"class":347},[288,152725,3911],{"class":298},[288,152727,152728,152730,152732,152734],{"class":290,"line":17100},[288,152729,32624],{"class":347},[288,152731,299],{"class":298},[288,152733,152639],{"class":403},[288,152735,305],{"class":298},[288,152737,152738],{"class":290,"line":17105},[288,152739,152461],{"class":294},[288,152741,152742],{"class":290,"line":32806},[288,152743,2572],{"emptyLinePlaceholder":217},[288,152745,152746,152748,152750,152752,152754,152757],{"class":290,"line":32812},[288,152747,152470],{"class":298},[288,152749,344],{"class":294},[288,152751,60778],{"class":347},[288,152753,299],{"class":298},[288,152755,152756],{"class":403},"\"请输入新姓名:\"",[288,152758,305],{"class":298},[288,152760,152761,152763,152765,152767,152770],{"class":290,"line":32818},[288,152762,152486],{"class":298},[288,152764,344],{"class":294},[288,152766,152491],{"class":298},[288,152768,152769],{"class":403},"\"请输入新年龄:\"",[288,152771,305],{"class":298},[288,152773,152774,152776,152778,152780,152783],{"class":290,"line":32824},[288,152775,152501],{"class":298},[288,152777,344],{"class":294},[288,152779,152506],{"class":298},[288,152781,152782],{"class":403},"\"请输入新成绩:\"",[288,152784,305],{"class":298},[288,152786,152787],{"class":290,"line":32830},[288,152788,2572],{"emptyLinePlaceholder":217},[288,152790,152791,152794,152796,152798,152800],{"class":290,"line":32841},[288,152792,152793],{"class":298},"    student[",[288,152795,62852],{"class":403},[288,152797,4615],{"class":298},[288,152799,344],{"class":294},[288,152801,149895],{"class":298},[288,152803,152804,152806,152808,152810,152812],{"class":290,"line":32847},[288,152805,152793],{"class":298},[288,152807,69297],{"class":403},[288,152809,4615],{"class":298},[288,152811,344],{"class":294},[288,152813,149907],{"class":298},[288,152815,152816,152818,152820,152822,152824],{"class":290,"line":32867},[288,152817,152793],{"class":298},[288,152819,151572],{"class":403},[288,152821,4615],{"class":298},[288,152823,344],{"class":294},[288,152825,1751],{"class":298},[288,152827,152828],{"class":290,"line":32873},[288,152829,2572],{"emptyLinePlaceholder":217},[288,152831,152832],{"class":290,"line":32884},[288,152833,152561],{"class":298},[288,152835,152836,152838,152840,152843],{"class":290,"line":32890},[288,152837,31472],{"class":347},[288,152839,299],{"class":298},[288,152841,152842],{"class":403},"\"修改成功\"",[288,152844,305],{"class":298},[288,152846,152847],{"class":290,"line":32896},[288,152848,2572],{"emptyLinePlaceholder":217},[288,152850,152851],{"class":290,"line":32902},[288,152852,2572],{"emptyLinePlaceholder":217},[288,152854,152855,152857,152860],{"class":290,"line":32908},[288,152856,32120],{"class":294},[288,152858,152859],{"class":2135}," query_student",[288,152861,152061],{"class":298},[288,152863,152864,152866,152868,152870,152872,152875],{"class":290,"line":32914},[288,152865,152423],{"class":298},[288,152867,344],{"class":294},[288,152869,60778],{"class":347},[288,152871,299],{"class":298},[288,152873,152874],{"class":403},"\"请输入要查询的学号:\"",[288,152876,305],{"class":298},[288,152878,152879,152881,152883],{"class":290,"line":32920},[288,152880,152609],{"class":298},[288,152882,344],{"class":294},[288,152884,152614],{"class":298},[288,152886,152887],{"class":290,"line":32926},[288,152888,2572],{"emptyLinePlaceholder":217},[288,152890,152891,152893,152895,152897,152899],{"class":290,"line":32946},[288,152892,3273],{"class":294},[288,152894,152237],{"class":298},[288,152896,39100],{"class":294},[288,152898,39106],{"class":347},[288,152900,3911],{"class":298},[288,152902,152903,152905,152907,152909],{"class":290,"line":32952},[288,152904,32624],{"class":347},[288,152906,299],{"class":298},[288,152908,152639],{"class":403},[288,152910,305],{"class":298},[288,152912,152913],{"class":290,"line":32968},[288,152914,152461],{"class":294},[288,152916,152917],{"class":290,"line":32974},[288,152918,2572],{"emptyLinePlaceholder":217},[288,152920,152921],{"class":290,"line":32988},[288,152922,152923],{"class":298},"    print_student(student)\n",[288,152925,152926],{"class":290,"line":32994},[288,152927,2572],{"emptyLinePlaceholder":217},[288,152929,152930],{"class":290,"line":33009},[288,152931,2572],{"emptyLinePlaceholder":217},[288,152933,152934,152936,152939],{"class":290,"line":33015},[288,152935,32120],{"class":294},[288,152937,152938],{"class":2135}," print_student",[288,152940,152941],{"class":298},"(student):\n",[288,152943,152944,152946],{"class":290,"line":33024},[288,152945,31472],{"class":347},[288,152947,151539],{"class":298},[288,152949,152950,152953,152955,152957,152960,152963,152965,152968],{"class":290,"line":33030},[288,152951,152952],{"class":294},"        f",[288,152954,109],{"class":403},[288,152956,1193],{"class":347},[288,152958,152959],{"class":298},"student[",[288,152961,152962],{"class":403},"'student_id'",[288,152964,1237],{"class":298},[288,152966,152967],{"class":347},"}\\t",[288,152969,25306],{"class":403},[288,152971,152972,152974,152976,152978,152980,152983,152985,152987],{"class":290,"line":33039},[288,152973,152952],{"class":294},[288,152975,109],{"class":403},[288,152977,1193],{"class":347},[288,152979,152959],{"class":298},[288,152981,152982],{"class":403},"'name'",[288,152984,1237],{"class":298},[288,152986,152967],{"class":347},[288,152988,25306],{"class":403},[288,152990,152991,152993,152995,152997,152999,153002,153004,153006],{"class":290,"line":33045},[288,152992,152952],{"class":294},[288,152994,109],{"class":403},[288,152996,1193],{"class":347},[288,152998,152959],{"class":298},[288,153000,153001],{"class":403},"'age'",[288,153003,1237],{"class":298},[288,153005,152967],{"class":347},[288,153007,25306],{"class":403},[288,153009,153010,153012,153014,153016,153018,153021,153023,153025],{"class":290,"line":33051},[288,153011,152952],{"class":294},[288,153013,109],{"class":403},[288,153015,1193],{"class":347},[288,153017,152959],{"class":298},[288,153019,153020],{"class":403},"'score'",[288,153022,1237],{"class":298},[288,153024,1243],{"class":347},[288,153026,25306],{"class":403},[288,153028,153029],{"class":290,"line":33060},[288,153030,153031],{"class":298},"    )\n",[288,153033,153034],{"class":290,"line":33066},[288,153035,2572],{"emptyLinePlaceholder":217},[288,153037,153038],{"class":290,"line":33077},[288,153039,2572],{"emptyLinePlaceholder":217},[288,153041,153042,153044,153047],{"class":290,"line":33083},[288,153043,32120],{"class":294},[288,153045,153046],{"class":2135}," show_all_students",[288,153048,152061],{"class":298},[288,153050,153051,153053,153055],{"class":290,"line":33102},[288,153052,3273],{"class":294},[288,153054,39103],{"class":294},[288,153056,152242],{"class":298},[288,153058,153059,153061,153063,153066],{"class":290,"line":33108},[288,153060,32624],{"class":347},[288,153062,299],{"class":298},[288,153064,153065],{"class":403},"\"暂无学生\"",[288,153067,305],{"class":298},[288,153069,153070],{"class":290,"line":33119},[288,153071,152461],{"class":294},[288,153073,153074],{"class":290,"line":33125},[288,153075,2572],{"emptyLinePlaceholder":217},[288,153077,153078,153080,153082,153085,153087,153090,153092,153095,153097,153100],{"class":290,"line":33145},[288,153079,31472],{"class":347},[288,153081,299],{"class":298},[288,153083,153084],{"class":403},"\"学号",[288,153086,1403],{"class":347},[288,153088,153089],{"class":403},"姓名",[288,153091,1403],{"class":347},[288,153093,153094],{"class":403},"年龄",[288,153096,1403],{"class":347},[288,153098,153099],{"class":403},"成绩\"",[288,153101,305],{"class":298},[288,153103,153104,153106,153108,153110],{"class":290,"line":33161},[288,153105,3373],{"class":294},[288,153107,152237],{"class":298},[288,153109,26216],{"class":294},[288,153111,152242],{"class":298},[288,153113,153114],{"class":290,"line":33167},[288,153115,153116],{"class":298},"        print_student(student)\n",[288,153118,153119],{"class":290,"line":33181},[288,153120,2572],{"emptyLinePlaceholder":217},[288,153122,153123],{"class":290,"line":33187},[288,153124,2572],{"emptyLinePlaceholder":217},[288,153126,153127,153129,153131],{"class":290,"line":33193},[288,153128,32120],{"class":294},[288,153130,2145],{"class":2135},[288,153132,32126],{"class":298},[288,153134,153135,153138,153140],{"class":290,"line":33204},[288,153136,153137],{"class":298},"    students ",[288,153139,344],{"class":294},[288,153141,153142],{"class":298}," load_students()\n",[288,153144,153145],{"class":290,"line":33210},[288,153146,2572],{"emptyLinePlaceholder":217},[288,153148,153149,153151,153153],{"class":290,"line":33216},[288,153150,2423],{"class":294},[288,153152,95465],{"class":347},[288,153154,3911],{"class":298},[288,153156,153157],{"class":290,"line":33226},[288,153158,153159],{"class":298},"        show_menu()\n",[288,153161,153162,153165,153167,153169,153171,153174],{"class":290,"line":33232},[288,153163,153164],{"class":298},"        choice ",[288,153166,344],{"class":294},[288,153168,60778],{"class":347},[288,153170,299],{"class":298},[288,153172,153173],{"class":403},"\"请输入操作:\"",[288,153175,305],{"class":298},[288,153177,153178],{"class":290,"line":33243},[288,153179,2572],{"emptyLinePlaceholder":217},[288,153181,153182,153184,153187,153189,153192],{"class":290,"line":33249},[288,153183,2669],{"class":294},[288,153185,153186],{"class":298}," choice ",[288,153188,3121],{"class":294},[288,153190,153191],{"class":403}," \"1\"",[288,153193,3911],{"class":298},[288,153195,153196],{"class":290,"line":33259},[288,153197,153198],{"class":298},"            add_student(students)\n",[288,153200,153201,153204,153206,153208,153211],{"class":290,"line":33264},[288,153202,153203],{"class":294},"        elif",[288,153205,153186],{"class":298},[288,153207,3121],{"class":294},[288,153209,153210],{"class":403}," \"2\"",[288,153212,3911],{"class":298},[288,153214,153215],{"class":290,"line":33270},[288,153216,153217],{"class":298},"            delete_student(students)\n",[288,153219,153220,153222,153224,153226,153229],{"class":290,"line":33319},[288,153221,153203],{"class":294},[288,153223,153186],{"class":298},[288,153225,3121],{"class":294},[288,153227,153228],{"class":403}," \"3\"",[288,153230,3911],{"class":298},[288,153232,153233],{"class":290,"line":33366},[288,153234,153235],{"class":298},"            update_student(students)\n",[288,153237,153238,153240,153242,153244,153247],{"class":290,"line":33371},[288,153239,153203],{"class":294},[288,153241,153186],{"class":298},[288,153243,3121],{"class":294},[288,153245,153246],{"class":403}," \"4\"",[288,153248,3911],{"class":298},[288,153250,153251],{"class":290,"line":33377},[288,153252,153253],{"class":298},"            query_student(students)\n",[288,153255,153256,153258,153260,153262,153265],{"class":290,"line":33396},[288,153257,153203],{"class":294},[288,153259,153186],{"class":298},[288,153261,3121],{"class":294},[288,153263,153264],{"class":403}," \"5\"",[288,153266,3911],{"class":298},[288,153268,153269],{"class":290,"line":33402},[288,153270,153271],{"class":298},"            show_all_students(students)\n",[288,153273,153274,153276,153278,153280,153283],{"class":290,"line":33422},[288,153275,153203],{"class":294},[288,153277,153186],{"class":298},[288,153279,3121],{"class":294},[288,153281,153282],{"class":403}," \"0\"",[288,153284,3911],{"class":298},[288,153286,153287,153289,153291,153294],{"class":290,"line":33428},[288,153288,34823],{"class":347},[288,153290,299],{"class":298},[288,153292,153293],{"class":403},"\"退出系统\"",[288,153295,305],{"class":298},[288,153297,153298],{"class":290,"line":33434},[288,153299,115271],{"class":294},[288,153301,153302,153304],{"class":290,"line":33444},[288,153303,2706],{"class":294},[288,153305,3911],{"class":298},[288,153307,153308,153310,153312,153315],{"class":290,"line":33449},[288,153309,34823],{"class":347},[288,153311,299],{"class":298},[288,153313,153314],{"class":403},"\"输入错误\"",[288,153316,305],{"class":298},[288,153318,153319],{"class":290,"line":33455},[288,153320,2572],{"emptyLinePlaceholder":217},[288,153322,153323],{"class":290,"line":33471},[288,153324,2572],{"emptyLinePlaceholder":217},[288,153326,153327,153329,153331,153333,153335],{"class":290,"line":33516},[288,153328,1703],{"class":294},[288,153330,31393],{"class":347},[288,153332,101732],{"class":294},[288,153334,101735],{"class":403},[288,153336,3911],{"class":298},[288,153338,153339],{"class":290,"line":33522},[288,153340,101742],{"class":298},[19,153342,153343],{},"这个项目串联了：",[243,153345,153346,153349,153352,153355,153358,153360],{},[246,153347,153348],{},"菜单循环。",[246,153350,153351],{},"函数封装。",[246,153353,153354],{},"列表字典。",[246,153356,153357],{},"JSON 读写。",[246,153359,151827],{},[246,153361,153362,28558],{},[25,153363,153364],{},"if __name__ == \"__main__\"",[14,153366,153368],{"id":153367},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153370,153371],{},"可以进一步拆成两个类：",[243,153373,153374,153379],{},[246,153375,153376,153378],{},[25,153377,149668],{},"：表示单个学生。",[246,153380,153381,153383],{},[25,153382,151694],{},"：负责学生增删改查和文件保存。",[19,153385,153386],{},"示意代码：",[280,153388,153390],{"className":30551,"code":153389,"language":30553,"meta":205,"style":205},"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",[25,153391,153392,153402,153406,153410,153414,153422,153429,153435,153441,153447,153451,153459,153465,153475,153485,153495,153505,153509,153513,153519,153527,153535,153543,153551,153559,153567],{"__ignoreMap":205},[288,153393,153394,153396,153398,153400],{"class":290,"line":291},[288,153395,30910],{"class":294},[288,153397,151252],{"class":298},[288,153399,30565],{"class":294},[288,153401,151257],{"class":298},[288,153403,153404],{"class":290,"line":206},[288,153405,2572],{"emptyLinePlaceholder":217},[288,153407,153408],{"class":290,"line":1352},[288,153409,2572],{"emptyLinePlaceholder":217},[288,153411,153412],{"class":290,"line":1367},[288,153413,151270],{"class":2135},[288,153415,153416,153418,153420],{"class":290,"line":1373},[288,153417,14867],{"class":294},[288,153419,8071],{"class":2135},[288,153421,3911],{"class":298},[288,153423,153424,153427],{"class":290,"line":1387},[288,153425,153426],{"class":298},"    student_id: ",[288,153428,151286],{"class":347},[288,153430,153431,153433],{"class":290,"line":1393},[288,153432,151283],{"class":298},[288,153434,151286],{"class":347},[288,153436,153437,153439],{"class":290,"line":1484},[288,153438,151291],{"class":298},[288,153440,151294],{"class":347},[288,153442,153443,153445],{"class":290,"line":1490},[288,153444,151299],{"class":298},[288,153446,151302],{"class":347},[288,153448,153449],{"class":290,"line":1502},[288,153450,2572],{"emptyLinePlaceholder":217},[288,153452,153453,153455,153457],{"class":290,"line":1784},[288,153454,30974],{"class":294},[288,153456,151450],{"class":2135},[288,153458,30980],{"class":298},[288,153460,153461,153463],{"class":290,"line":1789},[288,153462,14925],{"class":294},[288,153464,15745],{"class":298},[288,153466,153467,153469,153471,153473],{"class":290,"line":1795},[288,153468,151463],{"class":403},[288,153470,51610],{"class":298},[288,153472,30996],{"class":347},[288,153474,151470],{"class":298},[288,153476,153477,153479,153481,153483],{"class":290,"line":1800},[288,153478,151475],{"class":403},[288,153480,51610],{"class":298},[288,153482,30996],{"class":347},[288,153484,151482],{"class":298},[288,153486,153487,153489,153491,153493],{"class":290,"line":1814},[288,153488,151487],{"class":403},[288,153490,51610],{"class":298},[288,153492,30996],{"class":347},[288,153494,151494],{"class":298},[288,153496,153497,153499,153501,153503],{"class":290,"line":1819},[288,153498,151499],{"class":403},[288,153500,51610],{"class":298},[288,153502,30996],{"class":347},[288,153504,151506],{"class":298},[288,153506,153507],{"class":290,"line":1825},[288,153508,2701],{"class":298},[288,153510,153511],{"class":290,"line":1846},[288,153512,2572],{"emptyLinePlaceholder":217},[288,153514,153515,153517],{"class":290,"line":1851},[288,153516,151114],{"class":2135},[288,153518,151117],{"class":347},[288,153520,153521,153523,153525],{"class":290,"line":1865},[288,153522,30974],{"class":294},[288,153524,151527],{"class":2135},[288,153526,151530],{"class":298},[288,153528,153529,153531,153533],{"class":290,"line":1870},[288,153530,14925],{"class":294},[288,153532,151134],{"class":347},[288,153534,151539],{"class":298},[288,153536,153537,153539,153541],{"class":290,"line":1899},[288,153538,151544],{"class":298},[288,153540,151547],{"class":403},[288,153542,88009],{"class":298},[288,153544,153545,153547,153549],{"class":290,"line":1904},[288,153546,151544],{"class":298},[288,153548,62852],{"class":403},[288,153550,88009],{"class":298},[288,153552,153553,153555,153557],{"class":290,"line":1921},[288,153554,151544],{"class":298},[288,153556,69297],{"class":403},[288,153558,88009],{"class":298},[288,153560,153561,153563,153565],{"class":290,"line":1926},[288,153562,151544],{"class":298},[288,153564,151572],{"class":403},[288,153566,88009],{"class":298},[288,153568,153569],{"class":290,"line":1931},[288,153570,38299],{"class":298},[19,153572,153573],{},"管理器示意：",[280,153575,153577],{"className":30551,"code":153576,"language":30553,"meta":205,"style":205},"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",[25,153578,153579,153588,153596,153607,153611,153621,153634,153645,153652,153658,153662,153671,153680,153686,153693],{"__ignoreMap":205},[288,153580,153581,153583,153586],{"class":290,"line":291},[288,153582,14867],{"class":294},[288,153584,153585],{"class":2135}," StudentManager",[288,153587,3911],{"class":298},[288,153589,153590,153592,153594],{"class":290,"line":206},[288,153591,30974],{"class":294},[288,153593,30977],{"class":347},[288,153595,30980],{"class":298},[288,153597,153598,153600,153603,153605],{"class":290,"line":1352},[288,153599,31018],{"class":347},[288,153601,153602],{"class":298},".students ",[288,153604,344],{"class":294},[288,153606,52011],{"class":298},[288,153608,153609],{"class":290,"line":1367},[288,153610,2572],{"emptyLinePlaceholder":217},[288,153612,153613,153615,153618],{"class":290,"line":1373},[288,153614,30974],{"class":294},[288,153616,153617],{"class":2135}," find_by_id",[288,153619,153620],{"class":298},"(self, student_id):\n",[288,153622,153623,153625,153627,153629,153631],{"class":290,"line":1387},[288,153624,3575],{"class":294},[288,153626,152237],{"class":298},[288,153628,26216],{"class":294},[288,153630,39046],{"class":347},[288,153632,153633],{"class":298},".students:\n",[288,153635,153636,153638,153641,153643],{"class":290,"line":1393},[288,153637,4814],{"class":294},[288,153639,153640],{"class":298}," student.student_id ",[288,153642,3121],{"class":294},[288,153644,152258],{"class":298},[288,153646,153647,153650],{"class":290,"line":1484},[288,153648,153649],{"class":294},"                return",[288,153651,152265],{"class":298},[288,153653,153654,153656],{"class":290,"line":1490},[288,153655,14925],{"class":294},[288,153657,152272],{"class":347},[288,153659,153660],{"class":290,"line":1502},[288,153661,2572],{"emptyLinePlaceholder":217},[288,153663,153664,153666,153668],{"class":290,"line":1784},[288,153665,30974],{"class":294},[288,153667,5382],{"class":2135},[288,153669,153670],{"class":298},"(self, student):\n",[288,153672,153673,153675,153677],{"class":290,"line":1789},[288,153674,2669],{"class":294},[288,153676,39046],{"class":347},[288,153678,153679],{"class":298},".find_by_id(student.student_id):\n",[288,153681,153682,153684],{"class":290,"line":1795},[288,153683,15905],{"class":294},[288,153685,125980],{"class":347},[288,153687,153688,153690],{"class":290,"line":1800},[288,153689,31018],{"class":347},[288,153691,153692],{"class":298},".students.append(student)\n",[288,153694,153695,153697],{"class":290,"line":1814},[288,153696,14925],{"class":294},[288,153698,153699],{"class":347}," True\n",[19,153701,153702],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153704,153706],{"id":153705},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[260,153708,153710],{"id":153709},"_1251-数据结构","12.5.1 数据结构",[280,153712,153714],{"className":30551,"code":153713,"language":30553,"meta":205,"style":205},"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",[25,153715,153716,153724,153755,153785,153814,153843],{"__ignoreMap":205},[288,153717,153718,153720,153722],{"class":290,"line":291},[288,153719,148565],{"class":298},[288,153721,344],{"class":294},[288,153723,55620],{"class":298},[288,153725,153726,153728,153730,153732,153734,153736,153739,153741,153744,153746,153748,153750,153753],{"class":290,"line":206},[288,153727,148485],{"class":298},[288,153729,148097],{"class":403},[288,153731,51610],{"class":298},[288,153733,148708],{"class":403},[288,153735,12608],{"class":298},[288,153737,153738],{"class":403},"\"category\"",[288,153740,51610],{"class":298},[288,153742,153743],{"class":403},"\"手机\"",[288,153745,12608],{"class":298},[288,153747,84257],{"class":403},[288,153749,51610],{"class":298},[288,153751,153752],{"class":347},"12000",[288,153754,5102],{"class":298},[288,153756,153757,153759,153761,153763,153765,153767,153769,153771,153774,153776,153778,153780,153783],{"class":290,"line":1352},[288,153758,148485],{"class":298},[288,153760,148097],{"class":403},[288,153762,51610],{"class":298},[288,153764,148708],{"class":403},[288,153766,12608],{"class":298},[288,153768,153738],{"class":403},[288,153770,51610],{"class":298},[288,153772,153773],{"class":403},"\"电脑\"",[288,153775,12608],{"class":298},[288,153777,84257],{"class":403},[288,153779,51610],{"class":298},[288,153781,153782],{"class":347},"18000",[288,153784,5102],{"class":298},[288,153786,153787,153789,153791,153793,153795,153797,153799,153801,153803,153805,153807,153809,153812],{"class":290,"line":1367},[288,153788,148485],{"class":298},[288,153790,148097],{"class":403},[288,153792,51610],{"class":298},[288,153794,148729],{"class":403},[288,153796,12608],{"class":298},[288,153798,153738],{"class":403},[288,153800,51610],{"class":298},[288,153802,153743],{"class":403},[288,153804,12608],{"class":298},[288,153806,84257],{"class":403},[288,153808,51610],{"class":298},[288,153810,153811],{"class":347},"15000",[288,153813,5102],{"class":298},[288,153815,153816,153818,153820,153822,153824,153826,153828,153830,153832,153834,153836,153838,153841],{"class":290,"line":1373},[288,153817,148485],{"class":298},[288,153819,148097],{"class":403},[288,153821,51610],{"class":298},[288,153823,148729],{"class":403},[288,153825,12608],{"class":298},[288,153827,153738],{"class":403},[288,153829,51610],{"class":298},[288,153831,153773],{"class":403},[288,153833,12608],{"class":298},[288,153835,84257],{"class":403},[288,153837,51610],{"class":298},[288,153839,153840],{"class":347},"16000",[288,153842,5102],{"class":298},[288,153844,153845],{"class":290,"line":1387},[288,153846,33419],{"class":298},[260,153848,153850],{"id":153849},"_1252-按日期统计","12.5.2 按日期统计",[280,153852,153854],{"className":30551,"code":153853,"language":30553,"meta":205,"style":205},"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",[25,153855,153856,153865,153869,153880,153894,153907,153926,153930],{"__ignoreMap":205},[288,153857,153858,153861,153863],{"class":290,"line":291},[288,153859,153860],{"class":298},"daily_total ",[288,153862,344],{"class":294},[288,153864,88041],{"class":298},[288,153866,153867],{"class":290,"line":206},[288,153868,2572],{"emptyLinePlaceholder":217},[288,153870,153871,153873,153875,153877],{"class":290,"line":1352},[288,153872,3197],{"class":294},[288,153874,148309],{"class":298},[288,153876,26216],{"class":294},[288,153878,153879],{"class":298}," sales:\n",[288,153881,153882,153885,153887,153890,153892],{"class":290,"line":1367},[288,153883,153884],{"class":298},"    date ",[288,153886,344],{"class":294},[288,153888,153889],{"class":298}," item[",[288,153891,148097],{"class":403},[288,153893,33419],{"class":298},[288,153895,153896,153899,153901,153903,153905],{"class":290,"line":1373},[288,153897,153898],{"class":298},"    amount ",[288,153900,344],{"class":294},[288,153902,153889],{"class":298},[288,153904,84257],{"class":403},[288,153906,33419],{"class":298},[288,153908,153909,153912,153914,153917,153919,153921,153923],{"class":290,"line":1387},[288,153910,153911],{"class":298},"    daily_total[date] ",[288,153913,344],{"class":294},[288,153915,153916],{"class":298}," daily_total.get(date, ",[288,153918,490],{"class":347},[288,153920,13887],{"class":298},[288,153922,778],{"class":294},[288,153924,153925],{"class":298}," amount\n",[288,153927,153928],{"class":290,"line":1393},[288,153929,2572],{"emptyLinePlaceholder":217},[288,153931,153932,153934],{"class":290,"line":1484},[288,153933,30588],{"class":347},[288,153935,153936],{"class":298},"(daily_total)\n",[260,153938,153940],{"id":153939},"_1253-按类别统计","12.5.3 按类别统计",[280,153942,153944],{"className":30551,"code":153943,"language":30553,"meta":205,"style":205},"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",[25,153945,153946,153955,153959,153969,153982,153994,154012,154016],{"__ignoreMap":205},[288,153947,153948,153951,153953],{"class":290,"line":291},[288,153949,153950],{"class":298},"category_total ",[288,153952,344],{"class":294},[288,153954,88041],{"class":298},[288,153956,153957],{"class":290,"line":206},[288,153958,2572],{"emptyLinePlaceholder":217},[288,153960,153961,153963,153965,153967],{"class":290,"line":1352},[288,153962,3197],{"class":294},[288,153964,148309],{"class":298},[288,153966,26216],{"class":294},[288,153968,153879],{"class":298},[288,153970,153971,153974,153976,153978,153980],{"class":290,"line":1367},[288,153972,153973],{"class":298},"    category ",[288,153975,344],{"class":294},[288,153977,153889],{"class":298},[288,153979,153738],{"class":403},[288,153981,33419],{"class":298},[288,153983,153984,153986,153988,153990,153992],{"class":290,"line":1373},[288,153985,153898],{"class":298},[288,153987,344],{"class":294},[288,153989,153889],{"class":298},[288,153991,84257],{"class":403},[288,153993,33419],{"class":298},[288,153995,153996,153999,154001,154004,154006,154008,154010],{"class":290,"line":1387},[288,153997,153998],{"class":298},"    category_total[category] ",[288,154000,344],{"class":294},[288,154002,154003],{"class":298}," category_total.get(category, ",[288,154005,490],{"class":347},[288,154007,13887],{"class":298},[288,154009,778],{"class":294},[288,154011,153925],{"class":298},[288,154013,154014],{"class":290,"line":1393},[288,154015,2572],{"emptyLinePlaceholder":217},[288,154017,154018,154020],{"class":290,"line":1484},[288,154019,30588],{"class":347},[288,154021,154022],{"class":298},"(category_total)\n",[260,154024,154026],{"id":154025},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[280,154028,154030],{"className":30551,"code":154029,"language":30553,"meta":205,"style":205},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[25,154031,154032,154057],{"__ignoreMap":205},[288,154033,154034,154037,154039,154041,154044,154047,154050,154053,154055],{"class":290,"line":291},[288,154035,154036],{"class":298},"top_date, top_amount ",[288,154038,344],{"class":294},[288,154040,6124],{"class":347},[288,154042,154043],{"class":298},"(daily_total.items(), ",[288,154045,154046],{"class":5389},"key",[288,154048,154049],{"class":294},"=lambda",[288,154051,154052],{"class":298}," item: item[",[288,154054,516],{"class":347},[288,154056,4829],{"class":298},[288,154058,154059,154061],{"class":290,"line":206},[288,154060,30588],{"class":347},[288,154062,154063],{"class":298},"(top_date, top_amount)\n",[14,154065,154067],{"id":154066},"_126-绘制柱状图","12.6 绘制柱状图",[280,154069,154071],{"className":30551,"code":154070,"language":30553,"meta":205,"style":205},"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",[25,154072,154073,154087,154098,154102,154110,154122,154134,154145,154149,154153,154163,154174,154188,154193,154210,154227,154243,154247],{"__ignoreMap":205},[288,154074,154075,154077,154079,154081,154083,154085],{"class":290,"line":291},[288,154076,30910],{"class":294},[288,154078,147479],{"class":298},[288,154080,30565],{"class":294},[288,154082,147484],{"class":298},[288,154084,31556],{"class":294},[288,154086,147489],{"class":298},[288,154088,154089,154091,154093,154095],{"class":290,"line":206},[288,154090,30910],{"class":294},[288,154092,147338],{"class":298},[288,154094,30565],{"class":294},[288,154096,154097],{"class":298}," Bar\n",[288,154099,154100],{"class":290,"line":1352},[288,154101,2572],{"emptyLinePlaceholder":217},[288,154103,154104,154106,154108],{"class":290,"line":1367},[288,154105,153950],{"class":298},[288,154107,344],{"class":294},[288,154109,15745],{"class":298},[288,154111,154112,154115,154117,154120],{"class":290,"line":1373},[288,154113,154114],{"class":403},"    \"手机\"",[288,154116,51610],{"class":298},[288,154118,154119],{"class":347},"27000",[288,154121,31639],{"class":298},[288,154123,154124,154127,154129,154132],{"class":290,"line":1387},[288,154125,154126],{"class":403},"    \"电脑\"",[288,154128,51610],{"class":298},[288,154130,154131],{"class":347},"34000",[288,154133,31639],{"class":298},[288,154135,154136,154139,154141,154143],{"class":290,"line":1393},[288,154137,154138],{"class":403},"    \"耳机\"",[288,154140,51610],{"class":298},[288,154142,124572],{"class":347},[288,154144,31639],{"class":298},[288,154146,154147],{"class":290,"line":1484},[288,154148,1737],{"class":298},[288,154150,154151],{"class":290,"line":1490},[288,154152,2572],{"emptyLinePlaceholder":217},[288,154154,154155,154158,154160],{"class":290,"line":1502},[288,154156,154157],{"class":298},"bar ",[288,154159,344],{"class":294},[288,154161,154162],{"class":298}," Bar()\n",[288,154164,154165,154168,154171],{"class":290,"line":1784},[288,154166,154167],{"class":298},"bar.add_xaxis(",[288,154169,154170],{"class":347},"list",[288,154172,154173],{"class":298},"(category_total.keys()))\n",[288,154175,154176,154179,154181,154183,154185],{"class":290,"line":1789},[288,154177,154178],{"class":298},"bar.add_yaxis(",[288,154180,147395],{"class":403},[288,154182,12608],{"class":298},[288,154184,154170],{"class":347},[288,154186,154187],{"class":298},"(category_total.values()))\n",[288,154189,154190],{"class":290,"line":1795},[288,154191,154192],{"class":298},"bar.set_global_opts(\n",[288,154194,154195,154197,154199,154201,154203,154205,154208],{"class":290,"line":1800},[288,154196,147573],{"class":5389},[288,154198,344],{"class":294},[288,154200,147578],{"class":298},[288,154202,51580],{"class":5389},[288,154204,344],{"class":294},[288,154206,154207],{"class":403},"\"品类销售额\"",[288,154209,38220],{"class":298},[288,154211,154212,154214,154216,154218,154220,154222,154225],{"class":290,"line":1814},[288,154213,147592],{"class":5389},[288,154215,344],{"class":294},[288,154217,147597],{"class":298},[288,154219,79983],{"class":5389},[288,154221,344],{"class":294},[288,154223,154224],{"class":403},"\"品类\"",[288,154226,38220],{"class":298},[288,154228,154229,154231,154233,154235,154237,154239,154241],{"class":290,"line":1819},[288,154230,147611],{"class":5389},[288,154232,344],{"class":294},[288,154234,147597],{"class":298},[288,154236,79983],{"class":5389},[288,154238,344],{"class":294},[288,154240,147395],{"class":403},[288,154242,38220],{"class":298},[288,154244,154245],{"class":290,"line":1825},[288,154246,305],{"class":298},[288,154248,154249,154252,154255],{"class":290,"line":1846},[288,154250,154251],{"class":298},"bar.render(",[288,154253,154254],{"class":403},"\"category_sales.html\"",[288,154256,305],{"class":298},[14,154258,154260],{"id":154259},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154262,154263],{},"时间线适合展示不同日期、月份、年份的数据变化。",[280,154265,154267],{"className":30551,"code":154266,"language":30553,"meta":205,"style":205},"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",[25,154268,154269,154283,154294,154298,154306,154330,154353,154378,154382,154386,154396,154400,154411,154420,154430,154444,154475,154480,154484],{"__ignoreMap":205},[288,154270,154271,154273,154275,154277,154279,154281],{"class":290,"line":291},[288,154272,30910],{"class":294},[288,154274,147479],{"class":298},[288,154276,30565],{"class":294},[288,154278,147484],{"class":298},[288,154280,31556],{"class":294},[288,154282,147489],{"class":298},[288,154284,154285,154287,154289,154291],{"class":290,"line":206},[288,154286,30910],{"class":294},[288,154288,147338],{"class":298},[288,154290,30565],{"class":294},[288,154292,154293],{"class":298}," Bar, Timeline\n",[288,154295,154296],{"class":290,"line":1352},[288,154297,2572],{"emptyLinePlaceholder":217},[288,154299,154300,154302,154304],{"class":290,"line":1367},[288,154301,101831],{"class":298},[288,154303,344],{"class":294},[288,154305,15745],{"class":298},[288,154307,154308,154311,154314,154316,154318,154320,154322,154324,154326,154328],{"class":290,"line":1373},[288,154309,154310],{"class":403},"    \"2024-10-01\"",[288,154312,154313],{"class":298},": {",[288,154315,153743],{"class":403},[288,154317,51610],{"class":298},[288,154319,153752],{"class":347},[288,154321,12608],{"class":298},[288,154323,153773],{"class":403},[288,154325,51610],{"class":298},[288,154327,153782],{"class":347},[288,154329,5102],{"class":298},[288,154331,154332,154335,154337,154339,154341,154343,154345,154347,154349,154351],{"class":290,"line":1387},[288,154333,154334],{"class":403},"    \"2024-10-02\"",[288,154336,154313],{"class":298},[288,154338,153743],{"class":403},[288,154340,51610],{"class":298},[288,154342,153811],{"class":347},[288,154344,12608],{"class":298},[288,154346,153773],{"class":403},[288,154348,51610],{"class":298},[288,154350,153840],{"class":347},[288,154352,5102],{"class":298},[288,154354,154355,154358,154360,154362,154364,154367,154369,154371,154373,154376],{"class":290,"line":1393},[288,154356,154357],{"class":403},"    \"2024-10-03\"",[288,154359,154313],{"class":298},[288,154361,153743],{"class":403},[288,154363,51610],{"class":298},[288,154365,154366],{"class":347},"17000",[288,154368,12608],{"class":298},[288,154370,153773],{"class":403},[288,154372,51610],{"class":298},[288,154374,154375],{"class":347},"19000",[288,154377,5102],{"class":298},[288,154379,154380],{"class":290,"line":1484},[288,154381,1737],{"class":298},[288,154383,154384],{"class":290,"line":1490},[288,154385,2572],{"emptyLinePlaceholder":217},[288,154387,154388,154391,154393],{"class":290,"line":1502},[288,154389,154390],{"class":298},"timeline ",[288,154392,344],{"class":294},[288,154394,154395],{"class":298}," Timeline()\n",[288,154397,154398],{"class":290,"line":1784},[288,154399,2572],{"emptyLinePlaceholder":217},[288,154401,154402,154404,154407,154409],{"class":290,"line":1789},[288,154403,3197],{"class":294},[288,154405,154406],{"class":298}," date, category_data ",[288,154408,26216],{"class":294},[288,154410,149248],{"class":298},[288,154412,154413,154416,154418],{"class":290,"line":1795},[288,154414,154415],{"class":298},"    bar ",[288,154417,344],{"class":294},[288,154419,154162],{"class":298},[288,154421,154422,154425,154427],{"class":290,"line":1800},[288,154423,154424],{"class":298},"    bar.add_xaxis(",[288,154426,154170],{"class":347},[288,154428,154429],{"class":298},"(category_data.keys()))\n",[288,154431,154432,154435,154437,154439,154441],{"class":290,"line":1814},[288,154433,154434],{"class":298},"    bar.add_yaxis(",[288,154436,147395],{"class":403},[288,154438,12608],{"class":298},[288,154440,154170],{"class":347},[288,154442,154443],{"class":298},"(category_data.values()))\n",[288,154445,154446,154449,154452,154454,154456,154458,154460,154462,154464,154466,154468,154470,154473],{"class":290,"line":1819},[288,154447,154448],{"class":298},"    bar.set_global_opts(",[288,154450,154451],{"class":5389},"title_opts",[288,154453,344],{"class":294},[288,154455,147578],{"class":298},[288,154457,51580],{"class":5389},[288,154459,344],{"class":294},[288,154461,351],{"class":294},[288,154463,109],{"class":403},[288,154465,1193],{"class":347},[288,154467,74099],{"class":298},[288,154469,1243],{"class":347},[288,154471,154472],{"class":403},"销售额\"",[288,154474,30670],{"class":298},[288,154476,154477],{"class":290,"line":1825},[288,154478,154479],{"class":298},"    timeline.add(bar, date)\n",[288,154481,154482],{"class":290,"line":1846},[288,154483,2572],{"emptyLinePlaceholder":217},[288,154485,154486,154489,154492],{"class":290,"line":1851},[288,154487,154488],{"class":298},"timeline.render(",[288,154490,154491],{"class":403},"\"timeline_sales.html\"",[288,154493,305],{"class":298},[14,154495,154497],{"id":154496},"_128-绘制地图","12.8 绘制地图",[19,154499,154500],{},"地图适合展示地区数据。",[280,154502,154504],{"className":30551,"code":154503,"language":30553,"meta":205,"style":205},"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",[25,154505,154506,154520,154531,154535,154543,154556,154568,154581,154594,154598,154602,154612,154627,154632,154649,154668,154672],{"__ignoreMap":205},[288,154507,154508,154510,154512,154514,154516,154518],{"class":290,"line":291},[288,154509,30910],{"class":294},[288,154511,147479],{"class":298},[288,154513,30565],{"class":294},[288,154515,147484],{"class":298},[288,154517,31556],{"class":294},[288,154519,147489],{"class":298},[288,154521,154522,154524,154526,154528],{"class":290,"line":206},[288,154523,30910],{"class":294},[288,154525,147338],{"class":298},[288,154527,30565],{"class":294},[288,154529,154530],{"class":298}," Map\n",[288,154532,154533],{"class":290,"line":1352},[288,154534,2572],{"emptyLinePlaceholder":217},[288,154536,154537,154539,154541],{"class":290,"line":1367},[288,154538,101831],{"class":298},[288,154540,344],{"class":294},[288,154542,55620],{"class":298},[288,154544,154545,154548,154550,154552,154554],{"class":290,"line":1373},[288,154546,154547],{"class":298},"    (",[288,154549,69442],{"class":403},[288,154551,12608],{"class":298},[288,154553,1114],{"class":347},[288,154555,38220],{"class":298},[288,154557,154558,154560,154562,154564,154566],{"class":290,"line":1387},[288,154559,154547],{"class":298},[288,154561,69462],{"class":403},[288,154563,12608],{"class":298},[288,154565,147412],{"class":347},[288,154567,38220],{"class":298},[288,154569,154570,154572,154575,154577,154579],{"class":290,"line":1393},[288,154571,154547],{"class":298},[288,154573,154574],{"class":403},"\"广东\"",[288,154576,12608],{"class":298},[288,154578,1894],{"class":347},[288,154580,38220],{"class":298},[288,154582,154583,154585,154588,154590,154592],{"class":290,"line":1484},[288,154584,154547],{"class":298},[288,154586,154587],{"class":403},"\"浙江\"",[288,154589,12608],{"class":298},[288,154591,147417],{"class":347},[288,154593,38220],{"class":298},[288,154595,154596],{"class":290,"line":1490},[288,154597,33419],{"class":298},[288,154599,154600],{"class":290,"line":1502},[288,154601,2572],{"emptyLinePlaceholder":217},[288,154603,154604,154607,154609],{"class":290,"line":1784},[288,154605,154606],{"class":298},"map_chart ",[288,154608,344],{"class":294},[288,154610,154611],{"class":298}," Map()\n",[288,154613,154614,154617,154619,154622,154625],{"class":290,"line":1789},[288,154615,154616],{"class":298},"map_chart.add(",[288,154618,147395],{"class":403},[288,154620,154621],{"class":298},", data, ",[288,154623,154624],{"class":403},"\"china\"",[288,154626,305],{"class":298},[288,154628,154629],{"class":290,"line":1795},[288,154630,154631],{"class":298},"map_chart.set_global_opts(\n",[288,154633,154634,154636,154638,154640,154642,154644,154647],{"class":290,"line":1800},[288,154635,147573],{"class":5389},[288,154637,344],{"class":294},[288,154639,147578],{"class":298},[288,154641,51580],{"class":5389},[288,154643,344],{"class":294},[288,154645,154646],{"class":403},"\"地区销售额\"",[288,154648,38220],{"class":298},[288,154650,154651,154654,154656,154659,154662,154664,154666],{"class":290,"line":1814},[288,154652,154653],{"class":5389},"    visualmap_opts",[288,154655,344],{"class":294},[288,154657,154658],{"class":298},"opts.VisualMapOpts(",[288,154660,154661],{"class":5389},"max_",[288,154663,344],{"class":294},[288,154665,1894],{"class":347},[288,154667,38220],{"class":298},[288,154669,154670],{"class":290,"line":1819},[288,154671,305],{"class":298},[288,154673,154674,154677,154680],{"class":290,"line":1825},[288,154675,154676],{"class":298},"map_chart.render(",[288,154678,154679],{"class":403},"\"map_sales.html\"",[288,154681,305],{"class":298},[19,154683,154684],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154686,154688],{"id":154687},"_129-项目拆分建议","12.9 项目拆分建议",[19,154690,154691],{},"当代码超过一个文件时，可以这样组织：",[280,154693,154696],{"className":154694,"code":154695,"language":5360,"meta":205},[5358],"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",[25,154697,154695],{"__ignoreMap":205},[19,154699,154700],{},"职责：",[243,154702,154703,154709,154715,154721],{},[246,154704,154705,154708],{},[25,154706,154707],{},"main.py","：程序入口。",[246,154710,154711,154714],{},[25,154712,154713],{},"file_utils.py","：读写 JSON。",[246,154716,154717,154720],{},[25,154718,154719],{},"sales_service.py","：统计销售数据。",[246,154722,154723,154726],{},[25,154724,154725],{},"chart_builder.py","：生成图表。",[14,154728,154730],{"id":154729},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154732,154733],{},"语法基础：",[243,154735,154736,154739,154742,154745],{},[246,154737,154738],{},"会写变量、注释、输入输出。",[246,154740,154741],{},"会使用 int、float、str、bool。",[246,154743,154744],{},"会做类型转换。",[246,154746,154747],{},"会使用 f-string 格式化输出。",[19,154749,154750],{},"流程控制：",[243,154752,154753,154759,154765,154773],{},[246,154754,154755,154756,28558],{},"会写 ",[25,154757,154758],{},"if elif else",[246,154760,154755,154761,101191,154763,28558],{},[25,154762,108836],{},[25,154764,3197],{},[246,154766,154767,154768,101191,154770,28558],{},"理解 ",[25,154769,2225],{},[25,154771,154772],{},"continue",[246,154774,154775],{},"能写嵌套循环。",[19,154777,154778],{},"函数：",[243,154780,154781,154784,154787,154790],{},[246,154782,154783],{},"会定义和调用函数。",[246,154785,154786],{},"理解参数和返回值。",[246,154788,154789],{},"知道局部变量和全局变量。",[246,154791,154792],{},"会使用默认参数、关键字参数、不定长参数。",[19,154794,154795],{},"容器：",[243,154797,154798,154801,154804,154807,154810],{},[246,154799,154800],{},"会使用列表增删改查。",[246,154802,154803],{},"会遍历列表、字典。",[246,154805,154806],{},"会使用切片。",[246,154808,154809],{},"会用集合去重。",[246,154811,154812],{},"会处理列表嵌套字典。",[19,154814,154815],{},"文件和模块：",[243,154817,154818,154821,154824,154827,154830],{},[246,154819,154820],{},"会读写文本文件。",[246,154822,154823],{},"会读写 JSON。",[246,154825,154826],{},"会捕获常见异常。",[246,154828,154829],{},"会导入模块和第三方包。",[246,154831,154832],{},"会创建简单包结构。",[19,154834,154835],{},"项目能力：",[243,154837,154838,154841,154844,154847,154850],{},[246,154839,154840],{},"能把代码拆成函数。",[246,154842,154843],{},"能把数据保存到文件。",[246,154845,154846],{},"能处理用户输入错误。",[246,154848,154849],{},"能写一个完整菜单程序。",[246,154851,154852],{},"能用 pyecharts 生成图表。",[14,154854,154856],{"id":154855},"_1211-推荐练习顺序","12.11 推荐练习顺序",[243,154858,154859,154862,154865,154868,154871,154874,154877,154880],{},[246,154860,154861],{},"猜数字游戏。",[246,154863,154864],{},"ATM 菜单程序。",[246,154866,154867],{},"学生成绩统计。",[246,154869,154870],{},"学生管理系统函数版。",[246,154872,154873],{},"学生管理系统文件持久化版。",[246,154875,154876],{},"学生管理系统面向对象版。",[246,154878,154879],{},"销售数据统计。",[246,154881,154882],{},"销售数据可视化。",[14,154884,154886],{"id":154885},"_1212-常见学习误区","12.12 常见学习误区",[243,154888,154889,154892,154895,154898,154901,154904,154907],{},[246,154890,154891],{},"只看视频不敲代码。",[246,154893,154894],{},"一报错就复制错误去搜，不先读报错位置。",[246,154896,154897],{},"变量名随便写，后续自己看不懂。",[246,154899,154900],{},"所有代码都写在一个文件一个函数里。",[246,154902,154903],{},"不保存练习代码，复习时没有材料。",[246,154905,154906],{},"还没掌握列表字典就急着学框架。",[246,154908,154909],{},"不会读官方文档，只依赖教程。",[14,154911,154913],{"id":154912},"_1213-如何读报错","12.13 如何读报错",[19,154915,154916],{},"报错通常从下往上看最后几行。",[19,154918,15308],{},[280,154920,154923],{"className":154921,"code":154922,"language":5360,"meta":205},[5358],"ValueError: invalid literal for int() with base 10: 'abc'\n",[25,154924,154922],{"__ignoreMap":205},[19,154926,24772],{},[243,154928,154929,154935,154945],{},[246,154930,154931,154932,28558],{},"异常类型是 ",[25,154933,154934],{},"ValueError",[246,154936,107518,154937,154940,154941,154944],{},[25,154938,154939],{},"int()"," 无法把 ",[25,154942,154943],{},"'abc'"," 转成整数。",[246,154946,154947],{},"应该检查输入内容或增加异常处理。",[19,154949,154950],{},"再看文件名和行号：",[280,154952,154955],{"className":154953,"code":154954,"language":5360,"meta":205},[5358],"File \"main.py\", line 10, in \u003Cmodule>\n",[25,154956,154954],{"__ignoreMap":205},[19,154958,154959,154960,154962],{},"表示错误发生在 ",[25,154961,154707],{}," 第 10 行。",[14,154964,154966],{"id":154965},"_1214-后续学习方向","12.14 后续学习方向",[19,154968,154969],{},"Python 基础完成后，可以按兴趣选择方向：",[243,154971,154972,154984,154993,155005,155016,155025,155035],{},[246,154973,154974,154975,511,154978,511,154981,28558],{},"自动化办公：",[25,154976,154977],{},"openpyxl",[25,154979,154980],{},"python-docx",[25,154982,154983],{},"pdfplumber",[246,154985,154986,154987,511,154989,511,154991,28558],{},"数据分析：",[25,154988,100799],{},[25,154990,146285],{},[25,154992,146293],{},[246,154994,154995,154996,511,154999,511,155002,28558],{},"Web 后端：",[25,154997,154998],{},"Flask",[25,155000,155001],{},"FastAPI",[25,155003,155004],{},"Django",[246,155006,155007,155008,511,155010,511,155013,28558],{},"爬虫：",[25,155009,146270],{},[25,155011,155012],{},"BeautifulSoup",[25,155014,155015],{},"Scrapy",[246,155017,155018,155019,511,155021,155024],{},"测试开发：",[25,155020,146317],{},[25,155022,155023],{},"selenium","、接口测试。",[246,155026,155027,155028,511,155030,511,155032,28558],{},"人工智能：",[25,155029,100799],{},[25,155031,146285],{},[25,155033,155034],{},"pytorch",[246,155036,155037,155038,511,155040,511,155043,28558],{},"运维脚本：",[25,155039,145886],{},[25,155041,155042],{},"subprocess",[25,155044,155045],{},"paramiko",[19,155047,155048],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155050,155052],{"id":155051},"_1215-结课练习","12.15 结课练习",[243,155054,155055,155058,155061,155064,155067,155070,155073,155076],{},[246,155056,155057],{},"完成函数版学生管理系统。",[246,155059,155060],{},"给学生管理系统增加 JSON 持久化。",[246,155062,155063],{},"给学生管理系统增加异常处理。",[246,155065,155066],{},"把学生管理系统改成面向对象版。",[246,155068,155069],{},"使用 pyecharts 绘制学生成绩柱状图。",[246,155071,155072],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[246,155074,155075],{},"按品类统计销售额并绘制柱状图。",[246,155077,155078],{},"写一份自己的 Python 学习路线图。",[5299,155080,155081],{},"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":205,"searchDepth":206,"depth":206,"links":155083},[155084,155085,155088,155089,155090,155096,155097,155098,155099,155100,155101,155102,155103,155104,155105],{"id":151800,"depth":206,"text":151801},{"id":151850,"depth":206,"text":151851,"children":155086},[155087],{"id":151854,"depth":1352,"text":151855},{"id":151893,"depth":206,"text":151894},{"id":153367,"depth":206,"text":153368},{"id":153705,"depth":206,"text":153706,"children":155091},[155092,155093,155094,155095],{"id":153709,"depth":1352,"text":153710},{"id":153849,"depth":1352,"text":153850},{"id":153939,"depth":1352,"text":153940},{"id":154025,"depth":1352,"text":154026},{"id":154066,"depth":206,"text":154067},{"id":154259,"depth":206,"text":154260},{"id":154496,"depth":206,"text":154497},{"id":154687,"depth":206,"text":154688},{"id":154729,"depth":206,"text":154730},{"id":154855,"depth":206,"text":154856},{"id":154885,"depth":206,"text":154886},{"id":154912,"depth":206,"text":154913},{"id":154965,"depth":206,"text":154966},{"id":155051,"depth":206,"text":155052},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151792,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155112,"title":155113,"body":155114,"description":214,"extension":215,"meta":157583,"navigation":217,"path":157584,"seo":157585,"stem":157586,"__hash__":157587},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155115,"toc":157558},[155116,155119,155123,155126,155129,155149,155152,155175,155178,155181,155203,155206,155228,155232,155235,155275,155278,155399,155403,155406,155446,155449,155473,155476,155480,155483,155497,155530,155533,155568,155571,155594,155597,155630,155633,155635,155641,155716,155719,155725,155742,155782,155786,155789,155835,155837,155875,155878,155913,155916,155951,155954,155986,155989,156008,156012,156016,156129,156131,156206,156210,156256,156259,156285,156294,156298,156301,156364,156372,156400,156404,156444,156509,156513,156516,156555,156558,156603,156606,156667,156671,156698,156701,156729,156732,156736,156740,156805,156808,156846,156849,156881,156885,156984,156988,156991,157064,157067,157115,157119,157125,157165,157168,157215,157218,157267,157271,157273,157287,157289,157470,157474,157501,157521,157528,157532,157549,157555],[10,155117,155113],{"id":155118},"_2-基础语法变量与字符串",[14,155120,155122],{"id":155121},"_21-注释","2.1 注释",[19,155124,155125],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155127,155128],{},"单行注释：",[280,155130,155132],{"className":30551,"code":155131,"language":30553,"meta":205,"style":205},"# 这是单行注释\nprint(\"hello\")\n",[25,155133,155134,155139],{"__ignoreMap":205},[288,155135,155136],{"class":290,"line":291},[288,155137,155138],{"class":357},"# 这是单行注释\n",[288,155140,155141,155143,155145,155147],{"class":290,"line":206},[288,155142,30588],{"class":347},[288,155144,299],{"class":298},[288,155146,6017],{"class":403},[288,155148,305],{"class":298},[19,155150,155151],{},"多行说明常用三引号：",[280,155153,155155],{"className":30551,"code":155154,"language":30553,"meta":205,"style":205},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[25,155156,155157,155161,155166,155171],{"__ignoreMap":205},[288,155158,155159],{"class":290,"line":291},[288,155160,95871],{"class":403},[288,155162,155163],{"class":290,"line":206},[288,155164,155165],{"class":403},"这是多行说明。\n",[288,155167,155168],{"class":290,"line":1352},[288,155169,155170],{"class":403},"常用于文件顶部说明、函数说明等。\n",[288,155172,155173],{"class":290,"line":1367},[288,155174,95871],{"class":403},[19,155176,155177],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155179,155180],{},"不好：",[280,155182,155184],{"className":30551,"code":155183,"language":30553,"meta":205,"style":205},"# age 加 1\nage = age + 1\n",[25,155185,155186,155191],{"__ignoreMap":205},[288,155187,155188],{"class":290,"line":291},[288,155189,155190],{"class":357},"# age 加 1\n",[288,155192,155193,155195,155197,155199,155201],{"class":290,"line":206},[288,155194,146646],{"class":298},[288,155196,344],{"class":294},[288,155198,15880],{"class":298},[288,155200,778],{"class":294},[288,155202,55872],{"class":347},[19,155204,155205],{},"较好：",[280,155207,155209],{"className":30551,"code":155208,"language":30553,"meta":205,"style":205},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[25,155210,155211,155216],{"__ignoreMap":205},[288,155212,155213],{"class":290,"line":291},[288,155214,155215],{"class":357},"# 用户过完生日后，年龄增加一岁\n",[288,155217,155218,155220,155222,155224,155226],{"class":290,"line":206},[288,155219,146646],{"class":298},[288,155221,344],{"class":294},[288,155223,15880],{"class":298},[288,155225,778],{"class":294},[288,155227,55872],{"class":347},[14,155229,155231],{"id":155230},"_22-字面量","2.2 字面量",[19,155233,155234],{},"字面量就是代码中直接写出来的数据。",[280,155236,155238],{"className":30551,"code":155237,"language":30553,"meta":205,"style":205},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[25,155239,155240,155247,155254,155261,155268],{"__ignoreMap":205},[288,155241,155242,155244],{"class":290,"line":291},[288,155243,608],{"class":347},[288,155245,155246],{"class":357},"          # 整数\n",[288,155248,155249,155251],{"class":290,"line":206},[288,155250,348],{"class":347},[288,155252,155253],{"class":357},"         # 小数\n",[288,155255,155256,155258],{"class":290,"line":1352},[288,155257,6017],{"class":403},[288,155259,155260],{"class":357},"      # 字符串\n",[288,155262,155263,155265],{"class":290,"line":1367},[288,155264,31649],{"class":347},[288,155266,155267],{"class":357},"         # 布尔值\n",[288,155269,155270,155272],{"class":290,"line":1373},[288,155271,95859],{"class":347},[288,155273,155274],{"class":357},"         # 空值\n",[19,155276,155277],{},"常见字面量类型：",[436,155279,155280,155290],{},[439,155281,155282],{},[442,155283,155284,155286,155288],{},[445,155285,23910],{},[445,155287,27665],{},[445,155289,26042],{},[483,155291,155292,155303,155314,155325,155337,155349,155361,155374,155386],{},[442,155293,155294,155296,155300],{},[488,155295,302],{},[488,155297,155298],{},[25,155299,608],{},[488,155301,155302],{},"整数",[442,155304,155305,155307,155311],{},[488,155306,338],{},[488,155308,155309],{},[25,155310,348],{},[488,155312,155313],{},"浮点数",[442,155315,155316,155318,155322],{},[488,155317,1472],{},[488,155319,155320],{},[25,155321,6017],{},[488,155323,155324],{},"字符串",[442,155326,155327,155329,155335],{},[488,155328,1527],{},[488,155330,155331,511,155333],{},[25,155332,31649],{},[25,155334,34160],{},[488,155336,66188],{},[442,155338,155339,155342,155346],{},[488,155340,155341],{},"NoneType",[488,155343,155344],{},[25,155345,95859],{},[488,155347,155348],{},"空值",[442,155350,155351,155353,155358],{},[488,155352,154170],{},[488,155354,155355],{},[25,155356,155357],{},"[1, 2, 3]",[488,155359,155360],{},"列表",[442,155362,155363,155366,155371],{},[488,155364,155365],{},"tuple",[488,155367,155368],{},[25,155369,155370],{},"(1, 2, 3)",[488,155372,155373],{},"元组",[442,155375,155376,155378,155383],{},[488,155377,114719],{},[488,155379,155380],{},[25,155381,155382],{},"{\"name\": \"张三\"}",[488,155384,155385],{},"字典",[442,155387,155388,155391,155396],{},[488,155389,155390],{},"set",[488,155392,155393],{},[25,155394,155395],{},"{1, 2, 3}",[488,155397,155398],{},"集合",[14,155400,155402],{"id":155401},"_23-变量","2.3 变量",[19,155404,155405],{},"变量是保存数据的名字。",[280,155407,155409],{"className":30551,"code":155408,"language":30553,"meta":205,"style":205},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[25,155410,155411,155419,155427,155437],{"__ignoreMap":205},[288,155412,155413,155415,155417],{"class":290,"line":291},[288,155414,146636],{"class":298},[288,155416,344],{"class":294},[288,155418,149453],{"class":403},[288,155420,155421,155423,155425],{"class":290,"line":206},[288,155422,146646],{"class":298},[288,155424,344],{"class":294},[288,155426,146651],{"class":347},[288,155428,155429,155432,155434],{"class":290,"line":1352},[288,155430,155431],{"class":298},"height ",[288,155433,344],{"class":294},[288,155435,155436],{"class":347}," 1.75\n",[288,155438,155439,155442,155444],{"class":290,"line":1367},[288,155440,155441],{"class":298},"is_student ",[288,155443,344],{"class":294},[288,155445,153699],{"class":347},[19,155447,155448],{},"Python 的变量不需要提前声明类型：",[280,155450,155452],{"className":30551,"code":155451,"language":30553,"meta":205,"style":205},"score = 100\nscore = \"满分\"\n",[25,155453,155454,155464],{"__ignoreMap":205},[288,155455,155456,155459,155461],{"class":290,"line":291},[288,155457,155458],{"class":298},"score ",[288,155460,344],{"class":294},[288,155462,155463],{"class":347}," 100\n",[288,155465,155466,155468,155470],{"class":290,"line":206},[288,155467,155458],{"class":298},[288,155469,344],{"class":294},[288,155471,155472],{"class":403}," \"满分\"\n",[19,155474,155475],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155477,155479],{"id":155478},"_24-变量命名规则","2.4 变量命名规则",[19,155481,155482],{},"硬性规则：",[243,155484,155485,155488,155491,155494],{},[246,155486,155487],{},"只能由字母、数字、下划线组成。",[246,155489,155490],{},"不能以数字开头。",[246,155492,155493],{},"不能使用 Python 关键字。",[246,155495,155496],{},"区分大小写。",[280,155498,155500],{"className":30551,"code":155499,"language":30553,"meta":205,"style":205},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[25,155501,155502,155511,155520],{"__ignoreMap":205},[288,155503,155504,155507,155509],{"class":290,"line":291},[288,155505,155506],{"class":298},"user_name ",[288,155508,344],{"class":294},[288,155510,146641],{"class":403},[288,155512,155513,155516,155518],{"class":290,"line":206},[288,155514,155515],{"class":298},"age2 ",[288,155517,344],{"class":294},[288,155519,146651],{"class":347},[288,155521,155522,155525,155527],{"class":290,"line":1352},[288,155523,155524],{"class":298},"_token ",[288,155526,344],{"class":294},[288,155528,155529],{"class":403}," \"abc\"\n",[19,155531,155532],{},"错误写法：",[280,155534,155536],{"className":30551,"code":155535,"language":30553,"meta":205,"style":205},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[25,155537,155538,155547,155559],{"__ignoreMap":205},[288,155539,155540,155543,155545],{"class":290,"line":291},[288,155541,155542],{"class":77576},"2age",[288,155544,13737],{"class":294},[288,155546,146651],{"class":347},[288,155548,155549,155551,155553,155555,155557],{"class":290,"line":206},[288,155550,131684],{"class":298},[288,155552,829],{"class":294},[288,155554,146636],{"class":298},[288,155556,344],{"class":294},[288,155558,146641],{"class":403},[288,155560,155561,155563,155565],{"class":290,"line":1352},[288,155562,14867],{"class":294},[288,155564,13737],{"class":294},[288,155566,155567],{"class":403}," \"一班\"\n",[19,155569,155570],{},"查看关键字：",[280,155572,155574],{"className":30551,"code":155573,"language":30553,"meta":205,"style":205},"import keyword\n\nprint(keyword.kwlist)\n",[25,155575,155576,155583,155587],{"__ignoreMap":205},[288,155577,155578,155580],{"class":290,"line":291},[288,155579,30565],{"class":294},[288,155581,155582],{"class":298}," keyword\n",[288,155584,155585],{"class":290,"line":206},[288,155586,2572],{"emptyLinePlaceholder":217},[288,155588,155589,155591],{"class":290,"line":1352},[288,155590,30588],{"class":347},[288,155592,155593],{"class":298},"(keyword.kwlist)\n",[19,155595,155596],{},"推荐命名风格：",[280,155598,155600],{"className":30551,"code":155599,"language":30553,"meta":205,"style":205},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[25,155601,155602,155611,155621],{"__ignoreMap":205},[288,155603,155604,155607,155609],{"class":290,"line":291},[288,155605,155606],{"class":298},"student_name ",[288,155608,344],{"class":294},[288,155610,149453],{"class":403},[288,155612,155613,155616,155618],{"class":290,"line":206},[288,155614,155615],{"class":298},"total_price ",[288,155617,344],{"class":294},[288,155619,155620],{"class":347}," 99.8\n",[288,155622,155623,155626,155628],{"class":290,"line":1352},[288,155624,155625],{"class":298},"is_finished ",[288,155627,344],{"class":294},[288,155629,125980],{"class":347},[19,155631,155632],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155634,50905],{"id":50904},[19,155636,104539,155637,155640],{},[25,155638,155639],{},"type()"," 查看数据类型：",[280,155642,155644],{"className":30551,"code":155643,"language":30553,"meta":205,"style":205},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[25,155645,155646,155660,155674,155688,155702],{"__ignoreMap":205},[288,155647,155648,155650,155652,155654,155656,155658],{"class":290,"line":291},[288,155649,30588],{"class":347},[288,155651,299],{"class":298},[288,155653,103280],{"class":347},[288,155655,299],{"class":298},[288,155657,608],{"class":347},[288,155659,30670],{"class":298},[288,155661,155662,155664,155666,155668,155670,155672],{"class":290,"line":206},[288,155663,30588],{"class":347},[288,155665,299],{"class":298},[288,155667,103280],{"class":347},[288,155669,299],{"class":298},[288,155671,348],{"class":347},[288,155673,30670],{"class":298},[288,155675,155676,155678,155680,155682,155684,155686],{"class":290,"line":1352},[288,155677,30588],{"class":347},[288,155679,299],{"class":298},[288,155681,103280],{"class":347},[288,155683,299],{"class":298},[288,155685,6017],{"class":403},[288,155687,30670],{"class":298},[288,155689,155690,155692,155694,155696,155698,155700],{"class":290,"line":1367},[288,155691,30588],{"class":347},[288,155693,299],{"class":298},[288,155695,103280],{"class":347},[288,155697,299],{"class":298},[288,155699,31649],{"class":347},[288,155701,30670],{"class":298},[288,155703,155704,155706,155708,155710,155712,155714],{"class":290,"line":1373},[288,155705,30588],{"class":347},[288,155707,299],{"class":298},[288,155709,103280],{"class":347},[288,155711,299],{"class":298},[288,155713,95859],{"class":347},[288,155715,30670],{"class":298},[19,155717,155718],{},"输出类似：",[280,155720,155723],{"className":155721,"code":155722,"language":5360,"meta":205},[5358],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[25,155724,155722],{"__ignoreMap":205},[19,155726,9198,155727,107456,155729,155731,155732,155734,155735,21673,155737,155734,155739,155741],{},[25,155728,1527],{},[25,155730,302],{}," 的子类，",[25,155733,31649],{}," 可以当作 ",[25,155736,516],{},[25,155738,34160],{},[25,155740,490],{},"，但业务代码中不要滥用。",[280,155743,155745],{"className":30551,"code":155744,"language":30553,"meta":205,"style":205},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[25,155746,155747,155765],{"__ignoreMap":205},[288,155748,155749,155751,155753,155755,155757,155759,155762],{"class":290,"line":291},[288,155750,30588],{"class":347},[288,155752,299],{"class":298},[288,155754,31649],{"class":347},[288,155756,45739],{"class":294},[288,155758,25291],{"class":347},[288,155760,155761],{"class":298},")   ",[288,155763,155764],{"class":357},"# 2\n",[288,155766,155767,155769,155771,155773,155775,155777,155779],{"class":290,"line":206},[288,155768,30588],{"class":347},[288,155770,299],{"class":298},[288,155772,34160],{"class":347},[288,155774,45739],{"class":294},[288,155776,25291],{"class":347},[288,155778,45981],{"class":298},[288,155780,155781],{"class":357},"# 1\n",[14,155783,155785],{"id":155784},"_26-类型转换","2.6 类型转换",[19,155787,155788],{},"常用转换函数：",[280,155790,155792],{"className":30551,"code":155791,"language":30553,"meta":205,"style":205},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[25,155793,155794,155804,155815,155825],{"__ignoreMap":205},[288,155795,155796,155798,155800,155802],{"class":290,"line":291},[288,155797,302],{"class":347},[288,155799,299],{"class":298},[288,155801,54489],{"class":403},[288,155803,305],{"class":298},[288,155805,155806,155808,155810,155813],{"class":290,"line":206},[288,155807,338],{"class":347},[288,155809,299],{"class":298},[288,155811,155812],{"class":403},"\"3.14\"",[288,155814,305],{"class":298},[288,155816,155817,155819,155821,155823],{"class":290,"line":1352},[288,155818,1472],{"class":347},[288,155820,299],{"class":298},[288,155822,608],{"class":347},[288,155824,305],{"class":298},[288,155826,155827,155829,155831,155833],{"class":290,"line":1367},[288,155828,1527],{"class":347},[288,155830,299],{"class":298},[288,155832,516],{"class":347},[288,155834,305],{"class":298},[19,155836,15308],{},[280,155838,155840],{"className":30551,"code":155839,"language":30553,"meta":205,"style":205},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[25,155841,155842,155851,155862],{"__ignoreMap":205},[288,155843,155844,155846,155848],{"class":290,"line":291},[288,155845,146646],{"class":298},[288,155847,344],{"class":294},[288,155849,155850],{"class":403}," \"18\"\n",[288,155852,155853,155855,155857,155859],{"class":290,"line":206},[288,155854,146646],{"class":298},[288,155856,344],{"class":294},[288,155858,2554],{"class":347},[288,155860,155861],{"class":298},"(age)\n",[288,155863,155864,155866,155869,155871,155873],{"class":290,"line":1352},[288,155865,30588],{"class":347},[288,155867,155868],{"class":298},"(age ",[288,155870,778],{"class":294},[288,155872,25291],{"class":347},[288,155874,305],{"class":298},[19,155876,155877],{},"输入得到的内容永远是字符串：",[280,155879,155881],{"className":30551,"code":155880,"language":30553,"meta":205,"style":205},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[25,155882,155883,155899],{"__ignoreMap":205},[288,155884,155885,155888,155890,155892,155894,155897],{"class":290,"line":291},[288,155886,155887],{"class":298},"num ",[288,155889,344],{"class":294},[288,155891,60778],{"class":347},[288,155893,299],{"class":298},[288,155895,155896],{"class":403},"\"请输入数字:\"",[288,155898,305],{"class":298},[288,155900,155901,155903,155905,155907,155910],{"class":290,"line":206},[288,155902,30588],{"class":347},[288,155904,299],{"class":298},[288,155906,103280],{"class":347},[288,155908,155909],{"class":298},"(num))  ",[288,155911,155912],{"class":357},"# str\n",[19,155914,155915],{},"如果要做数学运算，必须转换：",[280,155917,155919],{"className":30551,"code":155918,"language":30553,"meta":205,"style":205},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[25,155920,155921,155939],{"__ignoreMap":205},[288,155922,155923,155925,155927,155929,155931,155933,155935,155937],{"class":290,"line":291},[288,155924,155887],{"class":298},[288,155926,344],{"class":294},[288,155928,2554],{"class":347},[288,155930,299],{"class":298},[288,155932,53994],{"class":347},[288,155934,299],{"class":298},[288,155936,155896],{"class":403},[288,155938,30670],{"class":298},[288,155940,155941,155943,155945,155947,155949],{"class":290,"line":206},[288,155942,30588],{"class":347},[288,155944,45792],{"class":298},[288,155946,778],{"class":294},[288,155948,2210],{"class":347},[288,155950,305],{"class":298},[19,155952,155953],{},"常见错误：",[280,155955,155957],{"className":30551,"code":155956,"language":30553,"meta":205,"style":205},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[25,155958,155959,155972],{"__ignoreMap":205},[288,155960,155961,155963,155965,155967,155969],{"class":290,"line":291},[288,155962,302],{"class":347},[288,155964,299],{"class":298},[288,155966,155812],{"class":403},[288,155968,155761],{"class":298},[288,155970,155971],{"class":357},"# 错误\n",[288,155973,155974,155976,155978,155981,155984],{"class":290,"line":206},[288,155975,302],{"class":347},[288,155977,299],{"class":298},[288,155979,155980],{"class":403},"\"abc\"",[288,155982,155983],{"class":298},")    ",[288,155985,155971],{"class":357},[19,155987,155988],{},"正确写法：",[280,155990,155992],{"className":30551,"code":155991,"language":30553,"meta":205,"style":205},"num = float(\"3.14\")\n",[25,155993,155994],{"__ignoreMap":205},[288,155995,155996,155998,156000,156002,156004,156006],{"class":290,"line":291},[288,155997,155887],{"class":298},[288,155999,344],{"class":294},[288,156001,109970],{"class":347},[288,156003,299],{"class":298},[288,156005,155812],{"class":403},[288,156007,305],{"class":298},[14,156009,156011],{"id":156010},"_27-运算符","2.7 运算符",[260,156013,156015],{"id":156014},"_271-算术运算符","2.7.1 算术运算符",[436,156017,156018,156029],{},[439,156019,156020],{},[442,156021,156022,156025,156027],{},[445,156023,156024],{},"运算符",[445,156026,26042],{},[445,156028,27665],{},[483,156030,156031,156045,156059,156073,156087,156101,156115],{},[442,156032,156033,156037,156040],{},[488,156034,156035],{},[25,156036,778],{},[488,156038,156039],{},"加法",[488,156041,156042],{},[25,156043,156044],{},"1 + 2",[442,156046,156047,156051,156054],{},[488,156048,156049],{},[25,156050,829],{},[488,156052,156053],{},"减法",[488,156055,156056],{},[25,156057,156058],{},"5 - 3",[442,156060,156061,156065,156068],{},[488,156062,156063],{},[25,156064,752],{},[488,156066,156067],{},"乘法",[488,156069,156070],{},[25,156071,156072],{},"2 * 3",[442,156074,156075,156079,156082],{},[488,156076,156077],{},[25,156078,881],{},[488,156080,156081],{},"除法，结果是浮点数",[488,156083,156084],{},[25,156085,156086],{},"5 \u002F 2",[442,156088,156089,156093,156096],{},[488,156090,156091],{},[25,156092,33502],{},[488,156094,156095],{},"整除",[488,156097,156098],{},[25,156099,156100],{},"5 \u002F\u002F 2",[442,156102,156103,156107,156110],{},[488,156104,156105],{},[25,156106,625],{},[488,156108,156109],{},"取余",[488,156111,156112],{},[25,156113,156114],{},"5 % 2",[442,156116,156117,156121,156124],{},[488,156118,156119],{},[25,156120,10834],{},[488,156122,156123],{},"幂运算",[488,156125,156126],{},[25,156127,156128],{},"2 ** 3",[19,156130,15308],{},[280,156132,156134],{"className":30551,"code":156133,"language":30553,"meta":205,"style":205},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[25,156135,156136,156154,156171,156188],{"__ignoreMap":205},[288,156137,156138,156140,156142,156144,156147,156149,156151],{"class":290,"line":291},[288,156139,30588],{"class":347},[288,156141,299],{"class":298},[288,156143,616],{"class":347},[288,156145,156146],{"class":294}," \u002F",[288,156148,14928],{"class":347},[288,156150,155761],{"class":298},[288,156152,156153],{"class":357},"# 2.5\n",[288,156155,156156,156158,156160,156162,156165,156167,156169],{"class":290,"line":206},[288,156157,30588],{"class":347},[288,156159,299],{"class":298},[288,156161,616],{"class":347},[288,156163,156164],{"class":294}," \u002F\u002F",[288,156166,14928],{"class":347},[288,156168,45981],{"class":298},[288,156170,155764],{"class":357},[288,156172,156173,156175,156177,156179,156182,156184,156186],{"class":290,"line":1352},[288,156174,30588],{"class":347},[288,156176,299],{"class":298},[288,156178,616],{"class":347},[288,156180,156181],{"class":294}," %",[288,156183,14928],{"class":347},[288,156185,155761],{"class":298},[288,156187,155781],{"class":357},[288,156189,156190,156192,156194,156196,156199,156201,156203],{"class":290,"line":1367},[288,156191,30588],{"class":347},[288,156193,299],{"class":298},[288,156195,376],{"class":347},[288,156197,156198],{"class":294}," **",[288,156200,78243],{"class":347},[288,156202,45981],{"class":298},[288,156204,156205],{"class":357},"# 8\n",[260,156207,156209],{"id":156208},"_272-赋值运算符","2.7.2 赋值运算符",[280,156211,156213],{"className":30551,"code":156212,"language":30553,"meta":205,"style":205},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[25,156214,156215,156223,156231,156239,156247],{"__ignoreMap":205},[288,156216,156217,156219,156221],{"class":290,"line":291},[288,156218,155887],{"class":298},[288,156220,344],{"class":294},[288,156222,58601],{"class":347},[288,156224,156225,156227,156229],{"class":290,"line":206},[288,156226,155887],{"class":298},[288,156228,9650],{"class":294},[288,156230,54600],{"class":347},[288,156232,156233,156235,156237],{"class":290,"line":1352},[288,156234,155887],{"class":298},[288,156236,150352],{"class":294},[288,156238,47896],{"class":347},[288,156240,156241,156243,156245],{"class":290,"line":1367},[288,156242,155887],{"class":298},[288,156244,137248],{"class":294},[288,156246,120209],{"class":347},[288,156248,156249,156251,156254],{"class":290,"line":1373},[288,156250,155887],{"class":298},[288,156252,156253],{"class":294},"\u002F=",[288,156255,47896],{"class":347},[19,156257,156258],{},"等价关系：",[280,156260,156262],{"className":30551,"code":156261,"language":30553,"meta":205,"style":205},"num += 1\nnum = num + 1\n",[25,156263,156264,156272],{"__ignoreMap":205},[288,156265,156266,156268,156270],{"class":290,"line":291},[288,156267,155887],{"class":298},[288,156269,9650],{"class":294},[288,156271,55872],{"class":347},[288,156273,156274,156276,156278,156281,156283],{"class":290,"line":206},[288,156275,155887],{"class":298},[288,156277,344],{"class":294},[288,156279,156280],{"class":298}," num ",[288,156282,778],{"class":294},[288,156284,55872],{"class":347},[19,156286,156287,156288,101191,156291,28558],{},"Python 没有 ",[25,156289,156290],{},"num++",[25,156292,156293],{},"num--",[260,156295,156297],{"id":156296},"_273-比较运算符","2.7.3 比较运算符",[19,156299,156300],{},"比较运算结果是布尔值。",[280,156302,156304],{"className":30551,"code":156303,"language":30553,"meta":205,"style":205},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[25,156305,156306,156320,156335,156349],{"__ignoreMap":205},[288,156307,156308,156310,156312,156314,156316,156318],{"class":290,"line":291},[288,156309,30588],{"class":347},[288,156311,299],{"class":298},[288,156313,743],{"class":347},[288,156315,26395],{"class":294},[288,156317,2320],{"class":347},[288,156319,305],{"class":298},[288,156321,156322,156324,156326,156328,156331,156333],{"class":290,"line":206},[288,156323,30588],{"class":347},[288,156325,299],{"class":298},[288,156327,743],{"class":347},[288,156329,156330],{"class":294}," >=",[288,156332,2210],{"class":347},[288,156334,305],{"class":298},[288,156336,156337,156339,156341,156343,156345,156347],{"class":290,"line":1352},[288,156338,30588],{"class":347},[288,156340,299],{"class":298},[288,156342,743],{"class":347},[288,156344,101732],{"class":294},[288,156346,2255],{"class":347},[288,156348,305],{"class":298},[288,156350,156351,156353,156355,156357,156360,156362],{"class":290,"line":1367},[288,156352,30588],{"class":347},[288,156354,299],{"class":298},[288,156356,743],{"class":347},[288,156358,156359],{"class":294}," !=",[288,156361,2255],{"class":347},[288,156363,305],{"class":298},[19,156365,156366,156367,156369,156370,28558],{},"注意：判断相等用 ",[25,156368,3121],{},"，赋值用 ",[25,156371,344],{},[280,156373,156375],{"className":30551,"code":156374,"language":30553,"meta":205,"style":205},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[25,156376,156377,156389],{"__ignoreMap":205},[288,156378,156379,156381,156383,156386],{"class":290,"line":291},[288,156380,146646],{"class":298},[288,156382,344],{"class":294},[288,156384,156385],{"class":347}," 18",[288,156387,156388],{"class":357},"       # 赋值\n",[288,156390,156391,156393,156395,156397],{"class":290,"line":206},[288,156392,146646],{"class":298},[288,156394,3121],{"class":294},[288,156396,156385],{"class":347},[288,156398,156399],{"class":357},"      # 判断是否相等\n",[260,156401,156403],{"id":156402},"_274-逻辑运算符","2.7.4 逻辑运算符",[436,156405,156406,156414],{},[439,156407,156408],{},[442,156409,156410,156412],{},[445,156411,156024],{},[445,156413,26042],{},[483,156415,156416,156425,156434],{},[442,156417,156418,156422],{},[488,156419,156420],{},[25,156421,30635],{},[488,156423,156424],{},"并且",[442,156426,156427,156431],{},[488,156428,156429],{},[25,156430,115263],{},[488,156432,156433],{},"或者",[442,156435,156436,156441],{},[488,156437,156438],{},[25,156439,156440],{},"not",[488,156442,156443],{},"取反",[280,156445,156447],{"className":30551,"code":156446,"language":30553,"meta":205,"style":205},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[25,156448,156449,156457,156466,156470,156485,156499],{"__ignoreMap":205},[288,156450,156451,156453,156455],{"class":290,"line":291},[288,156452,146646],{"class":298},[288,156454,344],{"class":294},[288,156456,88238],{"class":347},[288,156458,156459,156462,156464],{"class":290,"line":206},[288,156460,156461],{"class":298},"has_ticket ",[288,156463,344],{"class":294},[288,156465,153699],{"class":347},[288,156467,156468],{"class":290,"line":1352},[288,156469,2572],{"emptyLinePlaceholder":217},[288,156471,156472,156474,156476,156478,156480,156482],{"class":290,"line":1367},[288,156473,30588],{"class":347},[288,156475,155868],{"class":298},[288,156477,1882],{"class":294},[288,156479,156385],{"class":347},[288,156481,120602],{"class":294},[288,156483,156484],{"class":298}," has_ticket)\n",[288,156486,156487,156489,156491,156493,156495,156497],{"class":290,"line":1373},[288,156488,30588],{"class":347},[288,156490,155868],{"class":298},[288,156492,1207],{"class":294},[288,156494,156385],{"class":347},[288,156496,114374],{"class":294},[288,156498,156484],{"class":298},[288,156500,156501,156503,156505,156507],{"class":290,"line":1387},[288,156502,30588],{"class":347},[288,156504,299],{"class":298},[288,156506,156440],{"class":294},[288,156508,156484],{"class":298},[14,156510,156512],{"id":156511},"_28-字符串定义","2.8 字符串定义",[19,156514,156515],{},"三种常见写法：",[280,156517,156519],{"className":30551,"code":156518,"language":30553,"meta":205,"style":205},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[25,156520,156521,156531,156540,156550],{"__ignoreMap":205},[288,156522,156523,156526,156528],{"class":290,"line":291},[288,156524,156525],{"class":298},"name1 ",[288,156527,344],{"class":294},[288,156529,156530],{"class":403}," '小明'\n",[288,156532,156533,156536,156538],{"class":290,"line":206},[288,156534,156535],{"class":298},"name2 ",[288,156537,344],{"class":294},[288,156539,149453],{"class":403},[288,156541,156542,156545,156547],{"class":290,"line":1352},[288,156543,156544],{"class":298},"text ",[288,156546,344],{"class":294},[288,156548,156549],{"class":403}," \"\"\"这是多行字符串\n",[288,156551,156552],{"class":290,"line":1367},[288,156553,156554],{"class":403},"可以换行\"\"\"\n",[19,156556,156557],{},"字符串中包含引号：",[280,156559,156561],{"className":30551,"code":156560,"language":30553,"meta":205,"style":205},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[25,156562,156563,156573,156583],{"__ignoreMap":205},[288,156564,156565,156568,156570],{"class":290,"line":291},[288,156566,156567],{"class":298},"msg ",[288,156569,344],{"class":294},[288,156571,156572],{"class":403}," \"他说:'你好'\"\n",[288,156574,156575,156578,156580],{"class":290,"line":206},[288,156576,156577],{"class":298},"msg2 ",[288,156579,344],{"class":294},[288,156581,156582],{"class":403}," '他说:\"你好\"'\n",[288,156584,156585,156588,156590,156593,156596,156599,156601],{"class":290,"line":1352},[288,156586,156587],{"class":298},"msg3 ",[288,156589,344],{"class":294},[288,156591,156592],{"class":403}," \"他说:",[288,156594,156595],{"class":347},"\\\"",[288,156597,156598],{"class":403},"你好",[288,156600,156595],{"class":347},[288,156602,25306],{"class":403},[19,156604,156605],{},"常见转义字符：",[436,156607,156608,156617],{},[439,156609,156610],{},[442,156611,156612,156615],{},[445,156613,156614],{},"写法",[445,156616,100873],{},[483,156618,156619,156629,156638,156648,156657],{},[442,156620,156621,156626],{},[488,156622,156623],{},[25,156624,156625],{},"\\n",[488,156627,156628],{},"换行",[442,156630,156631,156635],{},[488,156632,156633],{},[25,156634,1403],{},[488,156636,156637],{},"制表符",[442,156639,156640,156645],{},[488,156641,156642],{},[25,156643,156644],{},"\\\\",[488,156646,156647],{},"反斜杠",[442,156649,156650,156654],{},[488,156651,156652],{},[25,156653,156595],{},[488,156655,156656],{},"双引号",[442,156658,156659,156664],{},[488,156660,156661],{},[25,156662,156663],{},"\\'",[488,156665,156666],{},"单引号",[14,156668,156670],{"id":156669},"_29-字符串拼接","2.9 字符串拼接",[280,156672,156674],{"className":30551,"code":156673,"language":30553,"meta":205,"style":205},"name = \"小明\"\nprint(\"你好，\" + name)\n",[25,156675,156676,156684],{"__ignoreMap":205},[288,156677,156678,156680,156682],{"class":290,"line":291},[288,156679,146636],{"class":298},[288,156681,344],{"class":294},[288,156683,149453],{"class":403},[288,156685,156686,156688,156690,156693,156695],{"class":290,"line":206},[288,156687,30588],{"class":347},[288,156689,299],{"class":298},[288,156691,156692],{"class":403},"\"你好，\"",[288,156694,45739],{"class":294},[288,156696,156697],{"class":298}," name)\n",[19,156699,156700],{},"字符串只能和字符串拼接：",[280,156702,156704],{"className":30551,"code":156703,"language":30553,"meta":205,"style":205},"age = 18\nprint(\"年龄:\" + str(age))\n",[25,156705,156706,156714],{"__ignoreMap":205},[288,156707,156708,156710,156712],{"class":290,"line":291},[288,156709,146646],{"class":298},[288,156711,344],{"class":294},[288,156713,146651],{"class":347},[288,156715,156716,156718,156720,156722,156724,156726],{"class":290,"line":206},[288,156717,30588],{"class":347},[288,156719,299],{"class":298},[288,156721,146617],{"class":403},[288,156723,45739],{"class":294},[288,156725,74092],{"class":347},[288,156727,156728],{"class":298},"(age))\n",[19,156730,156731],{},"更推荐使用格式化字符串。",[14,156733,156735],{"id":156734},"_210-字符串格式化","2.10 字符串格式化",[260,156737,156739],{"id":156738},"_2101-百分号格式化","2.10.1 百分号格式化",[280,156741,156743],{"className":30551,"code":156742,"language":30553,"meta":205,"style":205},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[25,156744,156745,156753,156761,156770,156774],{"__ignoreMap":205},[288,156746,156747,156749,156751],{"class":290,"line":291},[288,156748,146636],{"class":298},[288,156750,344],{"class":294},[288,156752,149453],{"class":403},[288,156754,156755,156757,156759],{"class":290,"line":206},[288,156756,146646],{"class":298},[288,156758,344],{"class":294},[288,156760,146651],{"class":347},[288,156762,156763,156765,156767],{"class":290,"line":1352},[288,156764,155458],{"class":298},[288,156766,344],{"class":294},[288,156768,156769],{"class":347}," 95.5\n",[288,156771,156772],{"class":290,"line":1367},[288,156773,2572],{"emptyLinePlaceholder":217},[288,156775,156776,156778,156780,156783,156786,156789,156792,156795,156798,156800,156802],{"class":290,"line":1373},[288,156777,30588],{"class":347},[288,156779,299],{"class":298},[288,156781,156782],{"class":403},"\"姓名:",[288,156784,156785],{"class":347},"%s",[288,156787,156788],{"class":403}," 年龄:",[288,156790,156791],{"class":347},"%d",[288,156793,156794],{"class":403}," 分数:",[288,156796,156797],{"class":347},"%.1f",[288,156799,109],{"class":403},[288,156801,156181],{"class":294},[288,156803,156804],{"class":298}," (name, age, score))\n",[19,156806,156807],{},"常用占位符：",[436,156809,156810,156819],{},[439,156811,156812],{},[442,156813,156814,156817],{},[445,156815,156816],{},"占位符",[445,156818,26042],{},[483,156820,156821,156829,156837],{},[442,156822,156823,156827],{},[488,156824,156825],{},[25,156826,156785],{},[488,156828,155324],{},[442,156830,156831,156835],{},[488,156832,156833],{},[25,156834,156791],{},[488,156836,155302],{},[442,156838,156839,156844],{},[488,156840,156841],{},[25,156842,156843],{},"%f",[488,156845,155313],{},[19,156847,156848],{},"精度控制：",[280,156850,156852],{"className":30551,"code":156851,"language":30553,"meta":205,"style":205},"price = 12.3456\nprint(\"%.2f\" % price)\n",[25,156853,156854,156863],{"__ignoreMap":205},[288,156855,156856,156858,156860],{"class":290,"line":291},[288,156857,146781],{"class":298},[288,156859,344],{"class":294},[288,156861,156862],{"class":347}," 12.3456\n",[288,156864,156865,156867,156869,156871,156874,156876,156878],{"class":290,"line":206},[288,156866,30588],{"class":347},[288,156868,299],{"class":298},[288,156870,109],{"class":403},[288,156872,156873],{"class":347},"%.2f",[288,156875,109],{"class":403},[288,156877,156181],{"class":294},[288,156879,156880],{"class":298}," price)\n",[260,156882,156884],{"id":156883},"_2102-format方法","2.10.2 format方法",[280,156886,156888],{"className":30551,"code":156887,"language":30553,"meta":205,"style":205},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[25,156889,156890,156898,156906,156910,156929,156949],{"__ignoreMap":205},[288,156891,156892,156894,156896],{"class":290,"line":291},[288,156893,146636],{"class":298},[288,156895,344],{"class":294},[288,156897,149453],{"class":403},[288,156899,156900,156902,156904],{"class":290,"line":206},[288,156901,146646],{"class":298},[288,156903,344],{"class":294},[288,156905,146651],{"class":347},[288,156907,156908],{"class":290,"line":1352},[288,156909,2572],{"emptyLinePlaceholder":217},[288,156911,156912,156914,156916,156918,156920,156922,156924,156926],{"class":290,"line":1367},[288,156913,30588],{"class":347},[288,156915,299],{"class":298},[288,156917,156782],{"class":403},[288,156919,32632],{"class":347},[288,156921,156788],{"class":403},[288,156923,32632],{"class":347},[288,156925,109],{"class":403},[288,156927,156928],{"class":298},".format(name, age))\n",[288,156930,156931,156933,156935,156937,156940,156942,156945,156947],{"class":290,"line":1373},[288,156932,30588],{"class":347},[288,156934,299],{"class":298},[288,156936,156782],{"class":403},[288,156938,156939],{"class":347},"{0}",[288,156941,156788],{"class":403},[288,156943,156944],{"class":347},"{1}",[288,156946,109],{"class":403},[288,156948,156928],{"class":298},[288,156950,156951,156953,156955,156957,156960,156962,156965,156967,156970,156972,156974,156977,156979,156981],{"class":290,"line":1387},[288,156952,30588],{"class":347},[288,156954,299],{"class":298},[288,156956,156782],{"class":403},[288,156958,156959],{"class":347},"{name}",[288,156961,156788],{"class":403},[288,156963,156964],{"class":347},"{age}",[288,156966,109],{"class":403},[288,156968,156969],{"class":298},".format(",[288,156971,79983],{"class":5389},[288,156973,344],{"class":294},[288,156975,156976],{"class":298},"name, ",[288,156978,70394],{"class":5389},[288,156980,344],{"class":294},[288,156982,156983],{"class":298},"age))\n",[260,156985,156987],{"id":156986},"_2103-f-string","2.10.3 f-string",[19,156989,156990],{},"推荐写法：",[280,156992,156994],{"className":30551,"code":156993,"language":30553,"meta":205,"style":205},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[25,156995,156996,157004,157012,157020,157024],{"__ignoreMap":205},[288,156997,156998,157000,157002],{"class":290,"line":291},[288,156999,146636],{"class":298},[288,157001,344],{"class":294},[288,157003,149453],{"class":403},[288,157005,157006,157008,157010],{"class":290,"line":206},[288,157007,146646],{"class":298},[288,157009,344],{"class":294},[288,157011,146651],{"class":347},[288,157013,157014,157016,157018],{"class":290,"line":1352},[288,157015,155458],{"class":298},[288,157017,344],{"class":294},[288,157019,156769],{"class":347},[288,157021,157022],{"class":290,"line":1367},[288,157023,2572],{"emptyLinePlaceholder":217},[288,157025,157026,157028,157030,157032,157034,157036,157038,157040,157042,157044,157046,157048,157050,157052,157055,157058,157060,157062],{"class":290,"line":1373},[288,157027,30588],{"class":347},[288,157029,299],{"class":298},[288,157031,351],{"class":294},[288,157033,156782],{"class":403},[288,157035,1193],{"class":347},[288,157037,79983],{"class":298},[288,157039,1243],{"class":347},[288,157041,156788],{"class":403},[288,157043,1193],{"class":347},[288,157045,70394],{"class":298},[288,157047,1243],{"class":347},[288,157049,156794],{"class":403},[288,157051,1193],{"class":347},[288,157053,157054],{"class":298},"score",[288,157056,157057],{"class":294},":.1f",[288,157059,1243],{"class":347},[288,157061,109],{"class":403},[288,157063,305],{"class":298},[19,157065,157066],{},"表达式也可以放进去：",[280,157068,157070],{"className":30551,"code":157069,"language":30553,"meta":205,"style":205},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[25,157071,157072,157080,157088],{"__ignoreMap":205},[288,157073,157074,157076,157078],{"class":290,"line":291},[288,157075,146781],{"class":298},[288,157077,344],{"class":294},[288,157079,146786],{"class":347},[288,157081,157082,157084,157086],{"class":290,"line":206},[288,157083,146791],{"class":298},[288,157085,344],{"class":294},[288,157087,54600],{"class":347},[288,157089,157090,157092,157094,157096,157099,157101,157103,157105,157108,157110,157113],{"class":290,"line":1352},[288,157091,30588],{"class":347},[288,157093,299],{"class":298},[288,157095,351],{"class":294},[288,157097,157098],{"class":403},"\"总价:",[288,157100,1193],{"class":347},[288,157102,146781],{"class":298},[288,157104,752],{"class":294},[288,157106,157107],{"class":298}," count",[288,157109,1243],{"class":347},[288,157111,157112],{"class":403},"元\"",[288,157114,305],{"class":298},[14,157116,157118],{"id":157117},"_211-input输入","2.11 input输入",[19,157120,157121,157124],{},[25,157122,157123],{},"input()"," 会暂停程序，等待用户输入。",[280,157126,157128],{"className":30551,"code":157127,"language":30553,"meta":205,"style":205},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[25,157129,157130,157144],{"__ignoreMap":205},[288,157131,157132,157134,157136,157138,157140,157142],{"class":290,"line":291},[288,157133,146636],{"class":298},[288,157135,344],{"class":294},[288,157137,60778],{"class":347},[288,157139,299],{"class":298},[288,157141,152479],{"class":403},[288,157143,305],{"class":298},[288,157145,157146,157148,157150,157152,157155,157157,157159,157161,157163],{"class":290,"line":206},[288,157147,30588],{"class":347},[288,157149,299],{"class":298},[288,157151,351],{"class":294},[288,157153,157154],{"class":403},"\"你好，",[288,157156,1193],{"class":347},[288,157158,79983],{"class":298},[288,157160,1243],{"class":347},[288,157162,109],{"class":403},[288,157164,305],{"class":298},[19,157166,157167],{},"输入整数：",[280,157169,157171],{"className":30551,"code":157170,"language":30553,"meta":205,"style":205},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[25,157172,157173,157191],{"__ignoreMap":205},[288,157174,157175,157177,157179,157181,157183,157185,157187,157189],{"class":290,"line":291},[288,157176,146646],{"class":298},[288,157178,344],{"class":294},[288,157180,2554],{"class":347},[288,157182,299],{"class":298},[288,157184,53994],{"class":347},[288,157186,299],{"class":298},[288,157188,152494],{"class":403},[288,157190,30670],{"class":298},[288,157192,157193,157195,157197,157199,157202,157204,157206,157208,157211,157213],{"class":290,"line":206},[288,157194,30588],{"class":347},[288,157196,299],{"class":298},[288,157198,351],{"class":294},[288,157200,157201],{"class":403},"\"明年你",[288,157203,1193],{"class":347},[288,157205,146646],{"class":298},[288,157207,778],{"class":294},[288,157209,157210],{"class":347}," 1}",[288,157212,149504],{"class":403},[288,157214,305],{"class":298},[19,157216,157217],{},"输入小数：",[280,157219,157221],{"className":30551,"code":157220,"language":30553,"meta":205,"style":205},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[25,157222,157223,157242],{"__ignoreMap":205},[288,157224,157225,157227,157229,157231,157233,157235,157237,157240],{"class":290,"line":291},[288,157226,155431],{"class":298},[288,157228,344],{"class":294},[288,157230,109970],{"class":347},[288,157232,299],{"class":298},[288,157234,53994],{"class":347},[288,157236,299],{"class":298},[288,157238,157239],{"class":403},"\"请输入身高:\"",[288,157241,30670],{"class":298},[288,157243,157244,157246,157248,157250,157253,157255,157257,157260,157262,157265],{"class":290,"line":206},[288,157245,30588],{"class":347},[288,157247,299],{"class":298},[288,157249,351],{"class":294},[288,157251,157252],{"class":403},"\"身高:",[288,157254,1193],{"class":347},[288,157256,25154],{"class":298},[288,157258,157259],{"class":294},":.2f",[288,157261,1243],{"class":347},[288,157263,157264],{"class":403},"米\"",[288,157266,305],{"class":298},[14,157268,157270],{"id":157269},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157272,123465],{},[243,157274,157275,157278,157281,157284],{},[246,157276,157277],{},"输入商品单价。",[246,157279,157280],{},"输入购买数量。",[246,157282,157283],{},"输入折扣，例如 0.8 表示八折。",[246,157285,157286],{},"输出最终金额，保留两位小数。",[19,157288,10208],{},[280,157290,157292],{"className":30551,"code":157291,"language":30553,"meta":205,"style":205},"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",[25,157293,157294,157313,157332,157352,157356,157376,157380,157403,157424,157446],{"__ignoreMap":205},[288,157295,157296,157298,157300,157302,157304,157306,157308,157311],{"class":290,"line":291},[288,157297,146781],{"class":298},[288,157299,344],{"class":294},[288,157301,109970],{"class":347},[288,157303,299],{"class":298},[288,157305,53994],{"class":347},[288,157307,299],{"class":298},[288,157309,157310],{"class":403},"\"请输入商品单价:\"",[288,157312,30670],{"class":298},[288,157314,157315,157317,157319,157321,157323,157325,157327,157330],{"class":290,"line":206},[288,157316,146791],{"class":298},[288,157318,344],{"class":294},[288,157320,2554],{"class":347},[288,157322,299],{"class":298},[288,157324,53994],{"class":347},[288,157326,299],{"class":298},[288,157328,157329],{"class":403},"\"请输入购买数量:\"",[288,157331,30670],{"class":298},[288,157333,157334,157337,157339,157341,157343,157345,157347,157350],{"class":290,"line":1352},[288,157335,157336],{"class":298},"discount ",[288,157338,344],{"class":294},[288,157340,109970],{"class":347},[288,157342,299],{"class":298},[288,157344,53994],{"class":347},[288,157346,299],{"class":298},[288,157348,157349],{"class":403},"\"请输入折扣:\"",[288,157351,30670],{"class":298},[288,157353,157354],{"class":290,"line":1367},[288,157355,2572],{"emptyLinePlaceholder":217},[288,157357,157358,157361,157363,157366,157368,157371,157373],{"class":290,"line":1373},[288,157359,157360],{"class":298},"total ",[288,157362,344],{"class":294},[288,157364,157365],{"class":298}," price ",[288,157367,752],{"class":294},[288,157369,157370],{"class":298}," count ",[288,157372,752],{"class":294},[288,157374,157375],{"class":298}," discount\n",[288,157377,157378],{"class":290,"line":1387},[288,157379,2572],{"emptyLinePlaceholder":217},[288,157381,157382,157384,157386,157388,157391,157393,157395,157397,157399,157401],{"class":290,"line":1393},[288,157383,30588],{"class":347},[288,157385,299],{"class":298},[288,157387,351],{"class":294},[288,157389,157390],{"class":403},"\"商品单价:",[288,157392,1193],{"class":347},[288,157394,79988],{"class":298},[288,157396,157259],{"class":294},[288,157398,1243],{"class":347},[288,157400,109],{"class":403},[288,157402,305],{"class":298},[288,157404,157405,157407,157409,157411,157414,157416,157418,157420,157422],{"class":290,"line":1484},[288,157406,30588],{"class":347},[288,157408,299],{"class":298},[288,157410,351],{"class":294},[288,157412,157413],{"class":403},"\"购买数量:",[288,157415,1193],{"class":347},[288,157417,84607],{"class":298},[288,157419,1243],{"class":347},[288,157421,109],{"class":403},[288,157423,305],{"class":298},[288,157425,157426,157428,157430,157432,157435,157437,157440,157442,157444],{"class":290,"line":1490},[288,157427,30588],{"class":347},[288,157429,299],{"class":298},[288,157431,351],{"class":294},[288,157433,157434],{"class":403},"\"折扣:",[288,157436,1193],{"class":347},[288,157438,157439],{"class":298},"discount",[288,157441,1243],{"class":347},[288,157443,109],{"class":403},[288,157445,305],{"class":298},[288,157447,157448,157450,157452,157454,157457,157459,157462,157464,157466,157468],{"class":290,"line":1502},[288,157449,30588],{"class":347},[288,157451,299],{"class":298},[288,157453,351],{"class":294},[288,157455,157456],{"class":403},"\"应付金额:",[288,157458,1193],{"class":347},[288,157460,157461],{"class":298},"total",[288,157463,157259],{"class":294},[288,157465,1243],{"class":347},[288,157467,157112],{"class":403},[288,157469,305],{"class":298},[14,157471,157473],{"id":157472},"_213-易错点","2.13 易错点",[243,157475,157476,157481,157487,157495,157498],{},[246,157477,157478,157480],{},[25,157479,157123],{}," 的结果是字符串，做运算前要转换。",[246,157482,157483,157484,28558],{},"字符串拼接时，数字要先 ",[25,157485,157486],{},"str()",[246,157488,157489,157491,157492,157494],{},[25,157490,344],{}," 是赋值，",[25,157493,3121],{}," 是比较。",[246,157496,157497],{},"Python 没有自增自减运算符。",[246,157499,157500],{},"浮点数计算可能有精度误差：",[280,157502,157504],{"className":30551,"code":157503,"language":30553,"meta":205,"style":205},"print(0.1 + 0.2)\n",[25,157505,157506],{"__ignoreMap":205},[288,157507,157508,157510,157512,157514,157516,157519],{"class":290,"line":291},[288,157509,30588],{"class":347},[288,157511,299],{"class":298},[288,157513,86383],{"class":347},[288,157515,45739],{"class":294},[288,157517,157518],{"class":347}," 0.2",[288,157520,305],{"class":298},[19,157522,157523,157524,157527],{},"金额计算如果要求严格，可以后续学习 ",[25,157525,157526],{},"decimal"," 模块。",[14,157529,157531],{"id":157530},"_214-本章练习","2.14 本章练习",[243,157533,157534,157537,157540,157543,157546],{},[246,157535,157536],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[246,157538,157539],{},"输入圆的半径，计算面积，保留两位小数。",[246,157541,157542],{},"输入工资和奖金，计算总收入。",[246,157544,157545],{},"输入摄氏温度，转换为华氏温度。",[246,157547,157548],{},"写一个 BMI 计算程序：",[280,157550,157553],{"className":157551,"code":157552,"language":5360,"meta":205},[5358],"BMI = 体重kg \u002F 身高m ** 2\n",[25,157554,157552],{"__ignoreMap":205},[5299,157556,157557],{},"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":205,"searchDepth":206,"depth":206,"links":157559},[157560,157561,157562,157563,157564,157565,157566,157572,157573,157574,157579,157580,157581,157582],{"id":155121,"depth":206,"text":155122},{"id":155230,"depth":206,"text":155231},{"id":155401,"depth":206,"text":155402},{"id":155478,"depth":206,"text":155479},{"id":50904,"depth":206,"text":50905},{"id":155784,"depth":206,"text":155785},{"id":156010,"depth":206,"text":156011,"children":157567},[157568,157569,157570,157571],{"id":156014,"depth":1352,"text":156015},{"id":156208,"depth":1352,"text":156209},{"id":156296,"depth":1352,"text":156297},{"id":156402,"depth":1352,"text":156403},{"id":156511,"depth":206,"text":156512},{"id":156669,"depth":206,"text":156670},{"id":156734,"depth":206,"text":156735,"children":157575},[157576,157577,157578],{"id":156738,"depth":1352,"text":156739},{"id":156883,"depth":1352,"text":156884},{"id":156986,"depth":1352,"text":156987},{"id":157117,"depth":206,"text":157118},{"id":157269,"depth":206,"text":157270},{"id":157472,"depth":206,"text":157473},{"id":157530,"depth":206,"text":157531},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155113,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157589,"title":157590,"body":157591,"description":214,"extension":215,"meta":159227,"navigation":217,"path":159228,"seo":159229,"stem":159230,"__hash__":159231},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157592,"toc":159208},[157593,157596,157600,157603,157618,157621,157649,157653,157703,157705,157721,157724,157750,157753,157757,157824,157827,157843,157847,157850,157968,157971,157978,158027,158033,158037,158040,158153,158156,158160,158164,158167,158217,158221,158224,158274,158278,158281,158319,158323,158326,158372,158375,158410,158414,158419,158422,158468,158470,158537,158541,158547,158658,158667,158671,158673,158684,158686,158852,158856,158858,158872,158874,159088,159092,159111,159128,159131,159177,159181,159205],[10,157594,157590],{"id":157595},"_3-判断语句",[14,157597,157599],{"id":157598},"_31-布尔值","3.1 布尔值",[19,157601,157602],{},"判断语句依赖布尔值：",[280,157604,157606],{"className":30551,"code":157605,"language":30553,"meta":205,"style":205},"True\nFalse\n",[25,157607,157608,157613],{"__ignoreMap":205},[288,157609,157610],{"class":290,"line":291},[288,157611,157612],{"class":347},"True\n",[288,157614,157615],{"class":290,"line":206},[288,157616,157617],{"class":347},"False\n",[19,157619,157620],{},"比较表达式会产生布尔值：",[280,157622,157624],{"className":30551,"code":157623,"language":30553,"meta":205,"style":205},"age = 18\nprint(age >= 18)  # True\n",[25,157625,157626,157634],{"__ignoreMap":205},[288,157627,157628,157630,157632],{"class":290,"line":291},[288,157629,146646],{"class":298},[288,157631,344],{"class":294},[288,157633,146651],{"class":347},[288,157635,157636,157638,157640,157642,157644,157646],{"class":290,"line":206},[288,157637,30588],{"class":347},[288,157639,155868],{"class":298},[288,157641,1882],{"class":294},[288,157643,156385],{"class":347},[288,157645,45981],{"class":298},[288,157647,157648],{"class":357},"# True\n",[14,157650,157652],{"id":157651},"_32-if基础语法","3.2 if基础语法",[280,157654,157656],{"className":30551,"code":157655,"language":30553,"meta":205,"style":205},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[25,157657,157658,157676,157680,157692],{"__ignoreMap":205},[288,157659,157660,157662,157664,157666,157668,157670,157672,157674],{"class":290,"line":291},[288,157661,146646],{"class":298},[288,157663,344],{"class":294},[288,157665,2554],{"class":347},[288,157667,299],{"class":298},[288,157669,53994],{"class":347},[288,157671,299],{"class":298},[288,157673,152494],{"class":403},[288,157675,30670],{"class":298},[288,157677,157678],{"class":290,"line":206},[288,157679,2572],{"emptyLinePlaceholder":217},[288,157681,157682,157684,157686,157688,157690],{"class":290,"line":1352},[288,157683,1703],{"class":294},[288,157685,15880],{"class":298},[288,157687,1882],{"class":294},[288,157689,156385],{"class":347},[288,157691,3911],{"class":298},[288,157693,157694,157696,157698,157701],{"class":290,"line":1367},[288,157695,31472],{"class":347},[288,157697,299],{"class":298},[288,157699,157700],{"class":403},"\"可以进入网吧\"",[288,157702,305],{"class":298},[19,157704,9198],{},[243,157706,157707,157712,157715,157718],{},[246,157708,157709,157711],{},[25,157710,1703],{}," 后面是条件表达式。",[246,157713,157714],{},"条件后面必须写冒号。",[246,157716,157717],{},"条件成立时执行缩进代码块。",[246,157719,157720],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157722,157723],{},"错误示例：",[280,157725,157727],{"className":30551,"code":157726,"language":30553,"meta":205,"style":205},"if age >= 18\n    print(\"可以进入\")\n",[25,157728,157729,157739],{"__ignoreMap":205},[288,157730,157731,157733,157735,157737],{"class":290,"line":291},[288,157732,1703],{"class":294},[288,157734,15880],{"class":298},[288,157736,1882],{"class":294},[288,157738,146651],{"class":347},[288,157740,157741,157743,157745,157748],{"class":290,"line":206},[288,157742,31472],{"class":347},[288,157744,299],{"class":298},[288,157746,157747],{"class":403},"\"可以进入\"",[288,157749,305],{"class":298},[19,157751,157752],{},"缺少冒号。",[14,157754,157756],{"id":157755},"_33-if-else","3.3 if else",[280,157758,157760],{"className":30551,"code":157759,"language":30553,"meta":205,"style":205},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[25,157761,157762,157780,157784,157796,157807,157813],{"__ignoreMap":205},[288,157763,157764,157766,157768,157770,157772,157774,157776,157778],{"class":290,"line":291},[288,157765,146646],{"class":298},[288,157767,344],{"class":294},[288,157769,2554],{"class":347},[288,157771,299],{"class":298},[288,157773,53994],{"class":347},[288,157775,299],{"class":298},[288,157777,152494],{"class":403},[288,157779,30670],{"class":298},[288,157781,157782],{"class":290,"line":206},[288,157783,2572],{"emptyLinePlaceholder":217},[288,157785,157786,157788,157790,157792,157794],{"class":290,"line":1352},[288,157787,1703],{"class":294},[288,157789,15880],{"class":298},[288,157791,1882],{"class":294},[288,157793,156385],{"class":347},[288,157795,3911],{"class":298},[288,157797,157798,157800,157802,157805],{"class":290,"line":1367},[288,157799,31472],{"class":347},[288,157801,299],{"class":298},[288,157803,157804],{"class":403},"\"成年人\"",[288,157806,305],{"class":298},[288,157808,157809,157811],{"class":290,"line":1373},[288,157810,1873],{"class":294},[288,157812,3911],{"class":298},[288,157814,157815,157817,157819,157822],{"class":290,"line":1387},[288,157816,31472],{"class":347},[288,157818,299],{"class":298},[288,157820,157821],{"class":403},"\"未成年人\"",[288,157823,305],{"class":298},[19,157825,157826],{},"执行逻辑：",[243,157828,157829,157835,157840],{},[246,157830,157831,157832,157834],{},"条件成立，执行 ",[25,157833,1703],{}," 代码块。",[246,157836,157837,157838,157834],{},"条件不成立，执行 ",[25,157839,1873],{},[246,157841,157842],{},"两个代码块只会执行其中一个。",[14,157844,157846],{"id":157845},"_34-if-elif-else","3.4 if elif else",[19,157848,157849],{},"多条件判断：",[280,157851,157853],{"className":30551,"code":157852,"language":30553,"meta":205,"style":205},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[25,157854,157855,157873,157877,157891,157902,157916,157927,157940,157951,157957],{"__ignoreMap":205},[288,157856,157857,157859,157861,157863,157865,157867,157869,157871],{"class":290,"line":291},[288,157858,155458],{"class":298},[288,157860,344],{"class":294},[288,157862,2554],{"class":347},[288,157864,299],{"class":298},[288,157866,53994],{"class":347},[288,157868,299],{"class":298},[288,157870,152509],{"class":403},[288,157872,30670],{"class":298},[288,157874,157875],{"class":290,"line":206},[288,157876,2572],{"emptyLinePlaceholder":217},[288,157878,157879,157881,157884,157886,157889],{"class":290,"line":1352},[288,157880,1703],{"class":294},[288,157882,157883],{"class":298}," score ",[288,157885,1882],{"class":294},[288,157887,157888],{"class":347}," 90",[288,157890,3911],{"class":298},[288,157892,157893,157895,157897,157900],{"class":290,"line":1367},[288,157894,31472],{"class":347},[288,157896,299],{"class":298},[288,157898,157899],{"class":403},"\"优秀\"",[288,157901,305],{"class":298},[288,157903,157904,157907,157909,157911,157914],{"class":290,"line":1373},[288,157905,157906],{"class":294},"elif",[288,157908,157883],{"class":298},[288,157910,1882],{"class":294},[288,157912,157913],{"class":347}," 80",[288,157915,3911],{"class":298},[288,157917,157918,157920,157922,157925],{"class":290,"line":1387},[288,157919,31472],{"class":347},[288,157921,299],{"class":298},[288,157923,157924],{"class":403},"\"良好\"",[288,157926,305],{"class":298},[288,157928,157929,157931,157933,157935,157938],{"class":290,"line":1393},[288,157930,157906],{"class":294},[288,157932,157883],{"class":298},[288,157934,1882],{"class":294},[288,157936,157937],{"class":347}," 60",[288,157939,3911],{"class":298},[288,157941,157942,157944,157946,157949],{"class":290,"line":1484},[288,157943,31472],{"class":347},[288,157945,299],{"class":298},[288,157947,157948],{"class":403},"\"及格\"",[288,157950,305],{"class":298},[288,157952,157953,157955],{"class":290,"line":1490},[288,157954,1873],{"class":294},[288,157956,3911],{"class":298},[288,157958,157959,157961,157963,157966],{"class":290,"line":1502},[288,157960,31472],{"class":347},[288,157962,299],{"class":298},[288,157964,157965],{"class":403},"\"不及格\"",[288,157967,305],{"class":298},[19,157969,157970],{},"注意判断顺序很重要。",[19,157972,157973,157974,157977],{},"如果把 ",[25,157975,157976],{},"score >= 60"," 放在最前面：",[280,157979,157981],{"className":30551,"code":157980,"language":30553,"meta":205,"style":205},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[25,157982,157983,157995,158005,158017],{"__ignoreMap":205},[288,157984,157985,157987,157989,157991,157993],{"class":290,"line":291},[288,157986,1703],{"class":294},[288,157988,157883],{"class":298},[288,157990,1882],{"class":294},[288,157992,157937],{"class":347},[288,157994,3911],{"class":298},[288,157996,157997,157999,158001,158003],{"class":290,"line":206},[288,157998,31472],{"class":347},[288,158000,299],{"class":298},[288,158002,157948],{"class":403},[288,158004,305],{"class":298},[288,158006,158007,158009,158011,158013,158015],{"class":290,"line":1352},[288,158008,157906],{"class":294},[288,158010,157883],{"class":298},[288,158012,1882],{"class":294},[288,158014,157888],{"class":347},[288,158016,3911],{"class":298},[288,158018,158019,158021,158023,158025],{"class":290,"line":1367},[288,158020,31472],{"class":347},[288,158022,299],{"class":298},[288,158024,157899],{"class":403},[288,158026,305],{"class":298},[19,158028,158029,158030,158032],{},"成绩 95 会先满足 ",[25,158031,157976],{},"，后面的优秀分支就不会执行。",[14,158034,158036],{"id":158035},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158038,158039],{},"嵌套判断就是在一个判断内部再写判断。",[280,158041,158043],{"className":30551,"code":158042,"language":30553,"meta":205,"style":205},"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",[25,158044,158045,158063,158078,158082,158094,158108,158118,158125,158136,158142],{"__ignoreMap":205},[288,158046,158047,158049,158051,158053,158055,158057,158059,158061],{"class":290,"line":291},[288,158048,146646],{"class":298},[288,158050,344],{"class":294},[288,158052,2554],{"class":347},[288,158054,299],{"class":298},[288,158056,53994],{"class":347},[288,158058,299],{"class":298},[288,158060,152494],{"class":403},[288,158062,30670],{"class":298},[288,158064,158065,158067,158069,158071,158073,158076],{"class":290,"line":206},[288,158066,156461],{"class":298},[288,158068,344],{"class":294},[288,158070,60778],{"class":347},[288,158072,299],{"class":298},[288,158074,158075],{"class":403},"\"是否有票(y\u002Fn):\"",[288,158077,305],{"class":298},[288,158079,158080],{"class":290,"line":1352},[288,158081,2572],{"emptyLinePlaceholder":217},[288,158083,158084,158086,158088,158090,158092],{"class":290,"line":1367},[288,158085,1703],{"class":294},[288,158087,15880],{"class":298},[288,158089,1882],{"class":294},[288,158091,156385],{"class":347},[288,158093,3911],{"class":298},[288,158095,158096,158098,158101,158103,158106],{"class":290,"line":1373},[288,158097,3273],{"class":294},[288,158099,158100],{"class":298}," has_ticket ",[288,158102,3121],{"class":294},[288,158104,158105],{"class":403}," \"y\"",[288,158107,3911],{"class":298},[288,158109,158110,158112,158114,158116],{"class":290,"line":1387},[288,158111,32624],{"class":347},[288,158113,299],{"class":298},[288,158115,157747],{"class":403},[288,158117,305],{"class":298},[288,158119,158120,158123],{"class":290,"line":1393},[288,158121,158122],{"class":294},"    else",[288,158124,3911],{"class":298},[288,158126,158127,158129,158131,158134],{"class":290,"line":1484},[288,158128,32624],{"class":347},[288,158130,299],{"class":298},[288,158132,158133],{"class":403},"\"请先买票\"",[288,158135,305],{"class":298},[288,158137,158138,158140],{"class":290,"line":1490},[288,158139,1873],{"class":294},[288,158141,3911],{"class":298},[288,158143,158144,158146,158148,158151],{"class":290,"line":1502},[288,158145,31472],{"class":347},[288,158147,299],{"class":298},[288,158149,158150],{"class":403},"\"未成年人禁止进入\"",[288,158152,305],{"class":298},[19,158154,158155],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158157,158159],{"id":158158},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[260,158161,158163],{"id":158162},"_361-and","3.6.1 and",[19,158165,158166],{},"两个条件都成立才成立。",[280,158168,158170],{"className":30551,"code":158169,"language":30553,"meta":205,"style":205},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[25,158171,158172,158180,158188,158192,158207],{"__ignoreMap":205},[288,158173,158174,158176,158178],{"class":290,"line":291},[288,158175,146646],{"class":298},[288,158177,344],{"class":294},[288,158179,88238],{"class":347},[288,158181,158182,158184,158186],{"class":290,"line":206},[288,158183,156461],{"class":298},[288,158185,344],{"class":294},[288,158187,153699],{"class":347},[288,158189,158190],{"class":290,"line":1352},[288,158191,2572],{"emptyLinePlaceholder":217},[288,158193,158194,158196,158198,158200,158202,158204],{"class":290,"line":1367},[288,158195,1703],{"class":294},[288,158197,15880],{"class":298},[288,158199,1882],{"class":294},[288,158201,156385],{"class":347},[288,158203,120602],{"class":294},[288,158205,158206],{"class":298}," has_ticket:\n",[288,158208,158209,158211,158213,158215],{"class":290,"line":1373},[288,158210,31472],{"class":347},[288,158212,299],{"class":298},[288,158214,157747],{"class":403},[288,158216,305],{"class":298},[260,158218,158220],{"id":158219},"_362-or","3.6.2 or",[19,158222,158223],{},"只要一个条件成立就成立。",[280,158225,158227],{"className":30551,"code":158226,"language":30553,"meta":205,"style":205},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[25,158228,158229,158238,158247,158251,158263],{"__ignoreMap":205},[288,158230,158231,158234,158236],{"class":290,"line":291},[288,158232,158233],{"class":298},"is_vip ",[288,158235,344],{"class":294},[288,158237,125980],{"class":347},[288,158239,158240,158243,158245],{"class":290,"line":206},[288,158241,158242],{"class":298},"coupon ",[288,158244,344],{"class":294},[288,158246,153699],{"class":347},[288,158248,158249],{"class":290,"line":1352},[288,158250,2572],{"emptyLinePlaceholder":217},[288,158252,158253,158255,158258,158260],{"class":290,"line":1367},[288,158254,1703],{"class":294},[288,158256,158257],{"class":298}," is_vip ",[288,158259,115263],{"class":294},[288,158261,158262],{"class":298}," coupon:\n",[288,158264,158265,158267,158269,158272],{"class":290,"line":1373},[288,158266,31472],{"class":347},[288,158268,299],{"class":298},[288,158270,158271],{"class":403},"\"可以享受优惠\"",[288,158273,305],{"class":298},[260,158275,158277],{"id":158276},"_363-not","3.6.3 not",[19,158279,158280],{},"取反。",[280,158282,158284],{"className":30551,"code":158283,"language":30553,"meta":205,"style":205},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[25,158285,158286,158295,158299,158308],{"__ignoreMap":205},[288,158287,158288,158291,158293],{"class":290,"line":291},[288,158289,158290],{"class":298},"is_closed ",[288,158292,344],{"class":294},[288,158294,125980],{"class":347},[288,158296,158297],{"class":290,"line":206},[288,158298,2572],{"emptyLinePlaceholder":217},[288,158300,158301,158303,158305],{"class":290,"line":1352},[288,158302,1703],{"class":294},[288,158304,39103],{"class":294},[288,158306,158307],{"class":298}," is_closed:\n",[288,158309,158310,158312,158314,158317],{"class":290,"line":1367},[288,158311,31472],{"class":347},[288,158313,299],{"class":298},[288,158315,158316],{"class":403},"\"店铺营业中\"",[288,158318,305],{"class":298},[14,158320,158322],{"id":158321},"_37-链式比较","3.7 链式比较",[19,158324,158325],{},"Python 支持链式比较：",[280,158327,158329],{"className":30551,"code":158328,"language":30553,"meta":205,"style":205},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158330,158331,158340,158344,158361],{"__ignoreMap":205},[288,158332,158333,158335,158337],{"class":290,"line":291},[288,158334,155458],{"class":298},[288,158336,344],{"class":294},[288,158338,158339],{"class":347}," 85\n",[288,158341,158342],{"class":290,"line":206},[288,158343,2572],{"emptyLinePlaceholder":217},[288,158345,158346,158348,158350,158353,158355,158357,158359],{"class":290,"line":1352},[288,158347,1703],{"class":294},[288,158349,4265],{"class":347},[288,158351,158352],{"class":294}," \u003C=",[288,158354,157883],{"class":298},[288,158356,1760],{"class":294},[288,158358,5927],{"class":347},[288,158360,3911],{"class":298},[288,158362,158363,158365,158367,158370],{"class":290,"line":1367},[288,158364,31472],{"class":347},[288,158366,299],{"class":298},[288,158368,158369],{"class":403},"\"成绩合法\"",[288,158371,305],{"class":298},[19,158373,158374],{},"等价于：",[280,158376,158378],{"className":30551,"code":158377,"language":30553,"meta":205,"style":205},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158379,158380,158400],{"__ignoreMap":205},[288,158381,158382,158384,158386,158388,158390,158392,158394,158396,158398],{"class":290,"line":291},[288,158383,1703],{"class":294},[288,158385,157883],{"class":298},[288,158387,1882],{"class":294},[288,158389,4265],{"class":347},[288,158391,120602],{"class":294},[288,158393,157883],{"class":298},[288,158395,1760],{"class":294},[288,158397,5927],{"class":347},[288,158399,3911],{"class":298},[288,158401,158402,158404,158406,158408],{"class":290,"line":206},[288,158403,31472],{"class":347},[288,158405,299],{"class":298},[288,158407,158369],{"class":403},[288,158409,305],{"class":298},[14,158411,158413],{"id":158412},"_38-真值和假值","3.8 真值和假值",[19,158415,116640,158416,158418],{},[25,158417,1703],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158420,158421],{},"假值：",[280,158423,158425],{"className":30551,"code":158424,"language":30553,"meta":205,"style":205},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[25,158426,158427,158431,158436,158440,158444,158449,158453,158457,158462],{"__ignoreMap":205},[288,158428,158429],{"class":290,"line":291},[288,158430,157617],{"class":347},[288,158432,158433],{"class":290,"line":206},[288,158434,158435],{"class":347},"None\n",[288,158437,158438],{"class":290,"line":1352},[288,158439,3257],{"class":347},[288,158441,158442],{"class":290,"line":1367},[288,158443,32515],{"class":347},[288,158445,158446],{"class":290,"line":1373},[288,158447,158448],{"class":403},"\"\"\n",[288,158450,158451],{"class":290,"line":1387},[288,158452,32530],{"class":298},[288,158454,158455],{"class":290,"line":1393},[288,158456,2148],{"class":298},[288,158458,158459],{"class":290,"line":1484},[288,158460,158461],{"class":298},"{}\n",[288,158463,158464,158466],{"class":290,"line":1490},[288,158465,155390],{"class":347},[288,158467,2148],{"class":298},[19,158469,15308],{},[280,158471,158473],{"className":30551,"code":158472,"language":30553,"meta":205,"style":205},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[25,158474,158475,158489,158493,158500,158520,158526],{"__ignoreMap":205},[288,158476,158477,158479,158481,158483,158485,158487],{"class":290,"line":291},[288,158478,146636],{"class":298},[288,158480,344],{"class":294},[288,158482,60778],{"class":347},[288,158484,299],{"class":298},[288,158486,152479],{"class":403},[288,158488,305],{"class":298},[288,158490,158491],{"class":290,"line":206},[288,158492,2572],{"emptyLinePlaceholder":217},[288,158494,158495,158497],{"class":290,"line":1352},[288,158496,1703],{"class":294},[288,158498,158499],{"class":298}," name:\n",[288,158501,158502,158504,158506,158508,158510,158512,158514,158516,158518],{"class":290,"line":1367},[288,158503,31472],{"class":347},[288,158505,299],{"class":298},[288,158507,351],{"class":294},[288,158509,157154],{"class":403},[288,158511,1193],{"class":347},[288,158513,79983],{"class":298},[288,158515,1243],{"class":347},[288,158517,109],{"class":403},[288,158519,305],{"class":298},[288,158521,158522,158524],{"class":290,"line":1373},[288,158523,1873],{"class":294},[288,158525,3911],{"class":298},[288,158527,158528,158530,158532,158535],{"class":290,"line":1387},[288,158529,31472],{"class":347},[288,158531,299],{"class":298},[288,158533,158534],{"class":403},"\"姓名不能为空\"",[288,158536,305],{"class":298},[14,158538,158540],{"id":158539},"_39-match语句","3.9 match语句",[19,158542,158543,158544,158546],{},"Python 3.10 开始支持 ",[25,158545,71438],{},"。它适合处理固定选项。",[280,158548,158550],{"className":30551,"code":158549,"language":30553,"meta":205,"style":205},"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",[25,158551,158552,158568,158572,158579,158589,158600,158609,158620,158629,158640,158647],{"__ignoreMap":205},[288,158553,158554,158557,158559,158561,158563,158566],{"class":290,"line":291},[288,158555,158556],{"class":298},"command ",[288,158558,344],{"class":294},[288,158560,60778],{"class":347},[288,158562,299],{"class":298},[288,158564,158565],{"class":403},"\"请输入命令:\"",[288,158567,305],{"class":298},[288,158569,158570],{"class":290,"line":206},[288,158571,2572],{"emptyLinePlaceholder":217},[288,158573,158574,158576],{"class":290,"line":1352},[288,158575,71438],{"class":294},[288,158577,158578],{"class":298}," command:\n",[288,158580,158581,158584,158587],{"class":290,"line":1367},[288,158582,158583],{"class":294},"    case",[288,158585,158586],{"class":403}," \"start\"",[288,158588,3911],{"class":298},[288,158590,158591,158593,158595,158598],{"class":290,"line":1373},[288,158592,32624],{"class":347},[288,158594,299],{"class":298},[288,158596,158597],{"class":403},"\"启动\"",[288,158599,305],{"class":298},[288,158601,158602,158604,158607],{"class":290,"line":1387},[288,158603,158583],{"class":294},[288,158605,158606],{"class":403}," \"stop\"",[288,158608,3911],{"class":298},[288,158610,158611,158613,158615,158618],{"class":290,"line":1393},[288,158612,32624],{"class":347},[288,158614,299],{"class":298},[288,158616,158617],{"class":403},"\"停止\"",[288,158619,305],{"class":298},[288,158621,158622,158624,158627],{"class":290,"line":1484},[288,158623,158583],{"class":294},[288,158625,158626],{"class":403}," \"restart\"",[288,158628,3911],{"class":298},[288,158630,158631,158633,158635,158638],{"class":290,"line":1490},[288,158632,32624],{"class":347},[288,158634,299],{"class":298},[288,158636,158637],{"class":403},"\"重启\"",[288,158639,305],{"class":298},[288,158641,158642,158644],{"class":290,"line":1502},[288,158643,158583],{"class":294},[288,158645,158646],{"class":298}," _:\n",[288,158648,158649,158651,158653,158656],{"class":290,"line":1784},[288,158650,32624],{"class":347},[288,158652,299],{"class":298},[288,158654,158655],{"class":403},"\"未知命令\"",[288,158657,305],{"class":298},[19,158659,158660,158661,158663,158664,158666],{},"入门阶段掌握 ",[25,158662,154758],{}," 更重要，",[25,158665,71438],{}," 可以作为补充。",[14,158668,158670],{"id":158669},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158672,123465],{},[243,158674,158675,158678,158681],{},[246,158676,158677],{},"输入成绩。",[246,158679,158680],{},"判断成绩是否合法。",[246,158682,158683],{},"输出等级。",[19,158685,10208],{},[280,158687,158689],{"className":30551,"code":158688,"language":30553,"meta":205,"style":205},"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",[25,158690,158691,158709,158713,158731,158742,158754,158765,158777,158788,158801,158812,158824,158835,158841],{"__ignoreMap":205},[288,158692,158693,158695,158697,158699,158701,158703,158705,158707],{"class":290,"line":291},[288,158694,155458],{"class":298},[288,158696,344],{"class":294},[288,158698,109970],{"class":347},[288,158700,299],{"class":298},[288,158702,53994],{"class":347},[288,158704,299],{"class":298},[288,158706,152509],{"class":403},[288,158708,30670],{"class":298},[288,158710,158711],{"class":290,"line":206},[288,158712,2572],{"emptyLinePlaceholder":217},[288,158714,158715,158717,158719,158721,158723,158725,158727,158729],{"class":290,"line":1352},[288,158716,1703],{"class":294},[288,158718,39103],{"class":294},[288,158720,4265],{"class":347},[288,158722,158352],{"class":294},[288,158724,157883],{"class":298},[288,158726,1760],{"class":294},[288,158728,5927],{"class":347},[288,158730,3911],{"class":298},[288,158732,158733,158735,158737,158740],{"class":290,"line":1367},[288,158734,31472],{"class":347},[288,158736,299],{"class":298},[288,158738,158739],{"class":403},"\"成绩不合法\"",[288,158741,305],{"class":298},[288,158743,158744,158746,158748,158750,158752],{"class":290,"line":1373},[288,158745,157906],{"class":294},[288,158747,157883],{"class":298},[288,158749,1882],{"class":294},[288,158751,157888],{"class":347},[288,158753,3911],{"class":298},[288,158755,158756,158758,158760,158763],{"class":290,"line":1387},[288,158757,31472],{"class":347},[288,158759,299],{"class":298},[288,158761,158762],{"class":403},"\"等级:A\"",[288,158764,305],{"class":298},[288,158766,158767,158769,158771,158773,158775],{"class":290,"line":1393},[288,158768,157906],{"class":294},[288,158770,157883],{"class":298},[288,158772,1882],{"class":294},[288,158774,157913],{"class":347},[288,158776,3911],{"class":298},[288,158778,158779,158781,158783,158786],{"class":290,"line":1484},[288,158780,31472],{"class":347},[288,158782,299],{"class":298},[288,158784,158785],{"class":403},"\"等级:B\"",[288,158787,305],{"class":298},[288,158789,158790,158792,158794,158796,158799],{"class":290,"line":1490},[288,158791,157906],{"class":294},[288,158793,157883],{"class":298},[288,158795,1882],{"class":294},[288,158797,158798],{"class":347}," 70",[288,158800,3911],{"class":298},[288,158802,158803,158805,158807,158810],{"class":290,"line":1502},[288,158804,31472],{"class":347},[288,158806,299],{"class":298},[288,158808,158809],{"class":403},"\"等级:C\"",[288,158811,305],{"class":298},[288,158813,158814,158816,158818,158820,158822],{"class":290,"line":1784},[288,158815,157906],{"class":294},[288,158817,157883],{"class":298},[288,158819,1882],{"class":294},[288,158821,157937],{"class":347},[288,158823,3911],{"class":298},[288,158825,158826,158828,158830,158833],{"class":290,"line":1789},[288,158827,31472],{"class":347},[288,158829,299],{"class":298},[288,158831,158832],{"class":403},"\"等级:D\"",[288,158834,305],{"class":298},[288,158836,158837,158839],{"class":290,"line":1795},[288,158838,1873],{"class":294},[288,158840,3911],{"class":298},[288,158842,158843,158845,158847,158850],{"class":290,"line":1800},[288,158844,31472],{"class":347},[288,158846,299],{"class":298},[288,158848,158849],{"class":403},"\"等级:E\"",[288,158851,305],{"class":298},[14,158853,158855],{"id":158854},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158857,123465],{},[243,158859,158860,158863,158866,158869],{},[246,158861,158862],{},"输入消费金额。",[246,158864,158865],{},"输入会员等级，普通、银卡、金卡。",[246,158867,158868],{},"普通不打折，银卡 9 折，金卡 8 折。",[246,158870,158871],{},"满 500 再减 50。",[19,158873,10208],{},[280,158875,158877],{"className":30551,"code":158876,"language":30553,"meta":205,"style":205},"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",[25,158878,158879,158899,158915,158919,158927,158931,158945,158955,158968,158977,158990,158998,159004,159015,159019,159033,159037,159051,159061,159065],{"__ignoreMap":205},[288,158880,158881,158884,158886,158888,158890,158892,158894,158897],{"class":290,"line":291},[288,158882,158883],{"class":298},"amount ",[288,158885,344],{"class":294},[288,158887,109970],{"class":347},[288,158889,299],{"class":298},[288,158891,53994],{"class":347},[288,158893,299],{"class":298},[288,158895,158896],{"class":403},"\"请输入消费金额:\"",[288,158898,30670],{"class":298},[288,158900,158901,158904,158906,158908,158910,158913],{"class":290,"line":206},[288,158902,158903],{"class":298},"level ",[288,158905,344],{"class":294},[288,158907,60778],{"class":347},[288,158909,299],{"class":298},[288,158911,158912],{"class":403},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[288,158914,305],{"class":298},[288,158916,158917],{"class":290,"line":1352},[288,158918,2572],{"emptyLinePlaceholder":217},[288,158920,158921,158923,158925],{"class":290,"line":1367},[288,158922,157336],{"class":298},[288,158924,344],{"class":294},[288,158926,55872],{"class":347},[288,158928,158929],{"class":290,"line":1373},[288,158930,2572],{"emptyLinePlaceholder":217},[288,158932,158933,158935,158938,158940,158943],{"class":290,"line":1387},[288,158934,1703],{"class":294},[288,158936,158937],{"class":298}," level ",[288,158939,3121],{"class":294},[288,158941,158942],{"class":403}," \"银卡\"",[288,158944,3911],{"class":298},[288,158946,158947,158950,158952],{"class":290,"line":1393},[288,158948,158949],{"class":298},"    discount ",[288,158951,344],{"class":294},[288,158953,158954],{"class":347}," 0.9\n",[288,158956,158957,158959,158961,158963,158966],{"class":290,"line":1484},[288,158958,157906],{"class":294},[288,158960,158937],{"class":298},[288,158962,3121],{"class":294},[288,158964,158965],{"class":403}," \"金卡\"",[288,158967,3911],{"class":298},[288,158969,158970,158972,158974],{"class":290,"line":1490},[288,158971,158949],{"class":298},[288,158973,344],{"class":294},[288,158975,158976],{"class":347}," 0.8\n",[288,158978,158979,158981,158983,158985,158988],{"class":290,"line":1502},[288,158980,157906],{"class":294},[288,158982,158937],{"class":298},[288,158984,3121],{"class":294},[288,158986,158987],{"class":403}," \"普通\"",[288,158989,3911],{"class":298},[288,158991,158992,158994,158996],{"class":290,"line":1784},[288,158993,158949],{"class":298},[288,158995,344],{"class":294},[288,158997,55872],{"class":347},[288,158999,159000,159002],{"class":290,"line":1789},[288,159001,1873],{"class":294},[288,159003,3911],{"class":298},[288,159005,159006,159008,159010,159013],{"class":290,"line":1795},[288,159007,31472],{"class":347},[288,159009,299],{"class":298},[288,159011,159012],{"class":403},"\"会员等级输入错误，按普通会员计算\"",[288,159014,305],{"class":298},[288,159016,159017],{"class":290,"line":1800},[288,159018,2572],{"emptyLinePlaceholder":217},[288,159020,159021,159024,159026,159029,159031],{"class":290,"line":1814},[288,159022,159023],{"class":298},"pay ",[288,159025,344],{"class":294},[288,159027,159028],{"class":298}," amount ",[288,159030,752],{"class":294},[288,159032,157375],{"class":298},[288,159034,159035],{"class":290,"line":1819},[288,159036,2572],{"emptyLinePlaceholder":217},[288,159038,159039,159041,159044,159046,159049],{"class":290,"line":1825},[288,159040,1703],{"class":294},[288,159042,159043],{"class":298}," pay ",[288,159045,1882],{"class":294},[288,159047,159048],{"class":347}," 500",[288,159050,3911],{"class":298},[288,159052,159053,159056,159058],{"class":290,"line":1846},[288,159054,159055],{"class":298},"    pay ",[288,159057,150352],{"class":294},[288,159059,159060],{"class":347}," 50\n",[288,159062,159063],{"class":290,"line":1851},[288,159064,2572],{"emptyLinePlaceholder":217},[288,159066,159067,159069,159071,159073,159075,159077,159080,159082,159084,159086],{"class":290,"line":1865},[288,159068,30588],{"class":347},[288,159070,299],{"class":298},[288,159072,351],{"class":294},[288,159074,157456],{"class":403},[288,159076,1193],{"class":347},[288,159078,159079],{"class":298},"pay",[288,159081,157259],{"class":294},[288,159083,1243],{"class":347},[288,159085,157112],{"class":403},[288,159087,305],{"class":298},[14,159089,159091],{"id":159090},"_312-易错点","3.12 易错点",[243,159093,159094,159097,159100,159103,159108],{},[246,159095,159096],{},"冒号不能漏。",[246,159098,159099],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[246,159101,159102],{},"多分支判断要注意顺序。",[246,159104,159105,159106,28558],{},"判断相等用 ",[25,159107,3121],{},[246,159109,159110],{},"字符串比较区分大小写：",[280,159112,159114],{"className":30551,"code":159113,"language":30553,"meta":205,"style":205},"\"Y\" == \"y\"  # False\n",[25,159115,159116],{"__ignoreMap":205},[288,159117,159118,159121,159123,159125],{"class":290,"line":291},[288,159119,159120],{"class":403},"\"Y\"",[288,159122,101732],{"class":294},[288,159124,158105],{"class":403},[288,159126,159127],{"class":357},"  # False\n",[19,159129,159130],{},"可转换后再判断：",[280,159132,159134],{"className":30551,"code":159133,"language":30553,"meta":205,"style":205},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[25,159135,159136,159153,159166],{"__ignoreMap":205},[288,159137,159138,159141,159143,159145,159147,159150],{"class":290,"line":291},[288,159139,159140],{"class":298},"answer ",[288,159142,344],{"class":294},[288,159144,60778],{"class":347},[288,159146,299],{"class":298},[288,159148,159149],{"class":403},"\"是否继续(y\u002Fn):\"",[288,159151,159152],{"class":298},").lower()\n",[288,159154,159155,159157,159160,159162,159164],{"class":290,"line":206},[288,159156,1703],{"class":294},[288,159158,159159],{"class":298}," answer ",[288,159161,3121],{"class":294},[288,159163,158105],{"class":403},[288,159165,3911],{"class":298},[288,159167,159168,159170,159172,159175],{"class":290,"line":1352},[288,159169,31472],{"class":347},[288,159171,299],{"class":298},[288,159173,159174],{"class":403},"\"继续\"",[288,159176,305],{"class":298},[14,159178,159180],{"id":159179},"_313-本章练习","3.13 本章练习",[243,159182,159183,159186,159189,159192,159202],{},[246,159184,159185],{},"输入年龄，判断是否成年。",[246,159187,159188],{},"输入年份，判断是否为闰年。",[246,159190,159191],{},"输入三个数字，输出最大值。",[246,159193,159194,159195,159198,159199,159201],{},"写登录判断：用户名是 ",[25,159196,159197],{},"admin"," 且密码是 ",[25,159200,15257],{}," 才登录成功。",[246,159203,159204],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5299,159206,159207],{},"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":205,"searchDepth":206,"depth":206,"links":159209},[159210,159211,159212,159213,159214,159215,159220,159221,159222,159223,159224,159225,159226],{"id":157598,"depth":206,"text":157599},{"id":157651,"depth":206,"text":157652},{"id":157755,"depth":206,"text":157756},{"id":157845,"depth":206,"text":157846},{"id":158035,"depth":206,"text":158036},{"id":158158,"depth":206,"text":158159,"children":159216},[159217,159218,159219],{"id":158162,"depth":1352,"text":158163},{"id":158219,"depth":1352,"text":158220},{"id":158276,"depth":1352,"text":158277},{"id":158321,"depth":206,"text":158322},{"id":158412,"depth":206,"text":158413},{"id":158539,"depth":206,"text":158540},{"id":158669,"depth":206,"text":158670},{"id":158854,"depth":206,"text":158855},{"id":159090,"depth":206,"text":159091},{"id":159179,"depth":206,"text":159180},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157590,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159233,"title":159234,"body":159235,"description":214,"extension":215,"meta":161004,"navigation":217,"path":161005,"seo":161006,"stem":161007,"__hash__":161008},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159236,"toc":160984},[159237,159240,159244,159250,159253,159270,159274,159276,159293,159295,159340,159342,159359,159363,159366,159432,159435,159453,159457,159618,159627,159631,159635,159640,159687,159689,159695,159699,159704,159751,159753,159759,159763,159768,159804,159807,159854,159858,159864,159922,159927,159958,159963,159967,160022,160025,160097,160100,160159,160163,160166,160241,160244,160248,160354,160357,160383,160387,160399,160468,160471,160563,160567,160569,160580,160582,160712,160716,160918,160926,160930,160960,160964,160981],[10,159238,159234],{"id":159239},"_4-循环语句",[14,159241,159243],{"id":159242},"_41-为什么需要循环","4.1 为什么需要循环",[19,159245,159246,159247,159249],{},"如果要输出 1 到 100，不应该写 100 行 ",[25,159248,146572],{},"，而应该用循环。",[19,159251,159252],{},"循环适合处理重复任务：",[243,159254,159255,159258,159261,159264,159267],{},[246,159256,159257],{},"重复输出。",[246,159259,159260],{},"重复输入。",[246,159262,159263],{},"遍历数据。",[246,159265,159266],{},"持续执行菜单。",[246,159268,159269],{},"批量处理文件或数据。",[14,159271,159273],{"id":159272},"_42-while循环","4.2 while循环",[19,159275,5354],{},[280,159277,159279],{"className":30551,"code":159278,"language":30553,"meta":205,"style":205},"while 条件:\n    循环体\n",[25,159280,159281,159288],{"__ignoreMap":205},[288,159282,159283,159285],{"class":290,"line":291},[288,159284,108836],{"class":294},[288,159286,159287],{"class":298}," 条件:\n",[288,159289,159290],{"class":290,"line":206},[288,159291,159292],{"class":298},"    循环体\n",[19,159294,15308],{},[280,159296,159298],{"className":30551,"code":159297,"language":30553,"meta":205,"style":205},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[25,159299,159300,159308,159312,159324,159331],{"__ignoreMap":205},[288,159301,159302,159304,159306],{"class":290,"line":291},[288,159303,100321],{"class":298},[288,159305,344],{"class":294},[288,159307,55872],{"class":347},[288,159309,159310],{"class":290,"line":206},[288,159311,2572],{"emptyLinePlaceholder":217},[288,159313,159314,159316,159318,159320,159322],{"class":290,"line":1352},[288,159315,108836],{"class":294},[288,159317,9611],{"class":298},[288,159319,1760],{"class":294},[288,159321,2320],{"class":347},[288,159323,3911],{"class":298},[288,159325,159326,159328],{"class":290,"line":1367},[288,159327,31472],{"class":347},[288,159329,159330],{"class":298},"(i)\n",[288,159332,159333,159336,159338],{"class":290,"line":1373},[288,159334,159335],{"class":298},"    i ",[288,159337,9650],{"class":294},[288,159339,55872],{"class":347},[19,159341,81102],{},[243,159343,159344,159350,159353,159356],{},[246,159345,159346,159347,28558],{},"判断条件 ",[25,159348,159349],{},"i \u003C= 5",[246,159351,159352],{},"条件成立，执行循环体。",[246,159354,159355],{},"执行完后回到条件判断。",[246,159357,159358],{},"条件不成立，退出循环。",[14,159360,159362],{"id":159361},"_43-while累加","4.3 while累加",[19,159364,159365],{},"计算 1 到 100 的和：",[280,159367,159369],{"className":30551,"code":159368,"language":30553,"meta":205,"style":205},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[25,159370,159371,159379,159387,159391,159403,159413,159421,159425],{"__ignoreMap":205},[288,159372,159373,159375,159377],{"class":290,"line":291},[288,159374,100321],{"class":298},[288,159376,344],{"class":294},[288,159378,55872],{"class":347},[288,159380,159381,159383,159385],{"class":290,"line":206},[288,159382,157360],{"class":298},[288,159384,344],{"class":294},[288,159386,47506],{"class":347},[288,159388,159389],{"class":290,"line":1352},[288,159390,2572],{"emptyLinePlaceholder":217},[288,159392,159393,159395,159397,159399,159401],{"class":290,"line":1367},[288,159394,108836],{"class":294},[288,159396,9611],{"class":298},[288,159398,1760],{"class":294},[288,159400,5927],{"class":347},[288,159402,3911],{"class":298},[288,159404,159405,159408,159410],{"class":290,"line":1373},[288,159406,159407],{"class":298},"    total ",[288,159409,9650],{"class":294},[288,159411,159412],{"class":298}," i\n",[288,159414,159415,159417,159419],{"class":290,"line":1387},[288,159416,159335],{"class":298},[288,159418,9650],{"class":294},[288,159420,55872],{"class":347},[288,159422,159423],{"class":290,"line":1393},[288,159424,2572],{"emptyLinePlaceholder":217},[288,159426,159427,159429],{"class":290,"line":1484},[288,159428,30588],{"class":347},[288,159430,159431],{"class":298},"(total)\n",[19,159433,159434],{},"核心思想：",[243,159436,159437,159442,159447],{},[246,159438,159439,159441],{},[25,159440,738],{}," 控制循环次数。",[246,159443,159444,159446],{},[25,159445,157461],{}," 保存累加结果。",[246,159448,159449,159450,159452],{},"每轮循环都要更新 ",[25,159451,738],{},"，否则可能死循环。",[14,159454,159456],{"id":159455},"_44-while猜数字","4.4 while猜数字",[280,159458,159460],{"className":30551,"code":159459,"language":30553,"meta":205,"style":205},"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",[25,159461,159462,159468,159472,159489,159497,159501,159509,159529,159538,159542,159554,159565,159575,159586,159592,159614],{"__ignoreMap":205},[288,159463,159464,159466],{"class":290,"line":291},[288,159465,30565],{"class":294},[288,159467,45501],{"class":298},[288,159469,159470],{"class":290,"line":206},[288,159471,2572],{"emptyLinePlaceholder":217},[288,159473,159474,159476,159478,159481,159483,159485,159487],{"class":290,"line":1352},[288,159475,159140],{"class":298},[288,159477,344],{"class":294},[288,159479,159480],{"class":298}," random.randint(",[288,159482,516],{"class":347},[288,159484,12608],{"class":298},[288,159486,608],{"class":347},[288,159488,305],{"class":298},[288,159490,159491,159493,159495],{"class":290,"line":1367},[288,159492,146791],{"class":298},[288,159494,344],{"class":294},[288,159496,47506],{"class":347},[288,159498,159499],{"class":290,"line":1373},[288,159500,2572],{"emptyLinePlaceholder":217},[288,159502,159503,159505,159507],{"class":290,"line":1387},[288,159504,108836],{"class":294},[288,159506,95465],{"class":347},[288,159508,3911],{"class":298},[288,159510,159511,159514,159516,159518,159520,159522,159524,159527],{"class":290,"line":1393},[288,159512,159513],{"class":298},"    guess ",[288,159515,344],{"class":294},[288,159517,2554],{"class":347},[288,159519,299],{"class":298},[288,159521,53994],{"class":347},[288,159523,299],{"class":298},[288,159525,159526],{"class":403},"\"请输入1到100之间的数字:\"",[288,159528,30670],{"class":298},[288,159530,159531,159534,159536],{"class":290,"line":1484},[288,159532,159533],{"class":298},"    count ",[288,159535,9650],{"class":294},[288,159537,55872],{"class":347},[288,159539,159540],{"class":290,"line":1490},[288,159541,2572],{"emptyLinePlaceholder":217},[288,159543,159544,159546,159549,159551],{"class":290,"line":1502},[288,159545,3273],{"class":294},[288,159547,159548],{"class":298}," guess ",[288,159550,1257],{"class":294},[288,159552,159553],{"class":298}," answer:\n",[288,159555,159556,159558,159560,159563],{"class":290,"line":1784},[288,159557,32624],{"class":347},[288,159559,299],{"class":298},[288,159561,159562],{"class":403},"\"猜大了\"",[288,159564,305],{"class":298},[288,159566,159567,159569,159571,159573],{"class":290,"line":1789},[288,159568,39466],{"class":294},[288,159570,159548],{"class":298},[288,159572,1207],{"class":294},[288,159574,159553],{"class":298},[288,159576,159577,159579,159581,159584],{"class":290,"line":1795},[288,159578,32624],{"class":347},[288,159580,299],{"class":298},[288,159582,159583],{"class":403},"\"猜小了\"",[288,159585,305],{"class":298},[288,159587,159588,159590],{"class":290,"line":1800},[288,159589,158122],{"class":294},[288,159591,3911],{"class":298},[288,159593,159594,159596,159598,159600,159603,159605,159607,159609,159612],{"class":290,"line":1814},[288,159595,32624],{"class":347},[288,159597,299],{"class":298},[288,159599,351],{"class":294},[288,159601,159602],{"class":403},"\"猜对了，一共猜了",[288,159604,1193],{"class":347},[288,159606,84607],{"class":298},[288,159608,1243],{"class":347},[288,159610,159611],{"class":403},"次\"",[288,159613,305],{"class":298},[288,159615,159616],{"class":290,"line":1819},[288,159617,31800],{"class":294},[19,159619,159620,159623,159624,159626],{},[25,159621,159622],{},"while True"," 表示无限循环，通常配合 ",[25,159625,2225],{}," 使用。",[14,159628,159630],{"id":159629},"_45-break和continue","4.5 break和continue",[260,159632,159634],{"id":159633},"_451-break","4.5.1 break",[19,159636,159637,159639],{},[25,159638,2225],{}," 直接结束整个循环。",[280,159641,159643],{"className":30551,"code":159642,"language":30553,"meta":205,"style":205},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[25,159644,159645,159665,159677,159681],{"__ignoreMap":205},[288,159646,159647,159649,159651,159653,159655,159657,159659,159661,159663],{"class":290,"line":291},[288,159648,3197],{"class":294},[288,159650,9611],{"class":298},[288,159652,26216],{"class":294},[288,159654,32616],{"class":347},[288,159656,299],{"class":298},[288,159658,516],{"class":347},[288,159660,12608],{"class":298},[288,159662,641],{"class":347},[288,159664,30959],{"class":298},[288,159666,159667,159669,159671,159673,159675],{"class":290,"line":206},[288,159668,3273],{"class":294},[288,159670,9611],{"class":298},[288,159672,3121],{"class":294},[288,159674,78243],{"class":347},[288,159676,3911],{"class":298},[288,159678,159679],{"class":290,"line":1352},[288,159680,31800],{"class":294},[288,159682,159683,159685],{"class":290,"line":1367},[288,159684,31472],{"class":347},[288,159686,159330],{"class":298},[19,159688,146557],{},[280,159690,159693],{"className":159691,"code":159692,"language":5360,"meta":205},[5358],"1\n2\n",[25,159694,159692],{"__ignoreMap":205},[260,159696,159698],{"id":159697},"_452-continue","4.5.2 continue",[19,159700,159701,159703],{},[25,159702,154772],{}," 跳过本轮剩余代码，进入下一轮循环。",[280,159705,159707],{"className":30551,"code":159706,"language":30553,"meta":205,"style":205},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[25,159708,159709,159729,159741,159745],{"__ignoreMap":205},[288,159710,159711,159713,159715,159717,159719,159721,159723,159725,159727],{"class":290,"line":291},[288,159712,3197],{"class":294},[288,159714,9611],{"class":298},[288,159716,26216],{"class":294},[288,159718,32616],{"class":347},[288,159720,299],{"class":298},[288,159722,516],{"class":347},[288,159724,12608],{"class":298},[288,159726,641],{"class":347},[288,159728,30959],{"class":298},[288,159730,159731,159733,159735,159737,159739],{"class":290,"line":206},[288,159732,3273],{"class":294},[288,159734,9611],{"class":298},[288,159736,3121],{"class":294},[288,159738,78243],{"class":347},[288,159740,3911],{"class":298},[288,159742,159743],{"class":290,"line":1352},[288,159744,148612],{"class":294},[288,159746,159747,159749],{"class":290,"line":1367},[288,159748,31472],{"class":347},[288,159750,159330],{"class":298},[19,159752,146557],{},[280,159754,159757],{"className":159755,"code":159756,"language":5360,"meta":205},[5358],"1\n2\n4\n5\n",[25,159758,159756],{"__ignoreMap":205},[14,159760,159762],{"id":159761},"_46-for循环","4.6 for循环",[19,159764,159765,159767],{},[25,159766,3197],{}," 常用于遍历序列。",[280,159769,159771],{"className":30551,"code":159770,"language":30553,"meta":205,"style":205},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[25,159772,159773,159782,159786,159797],{"__ignoreMap":205},[288,159774,159775,159777,159779],{"class":290,"line":291},[288,159776,146636],{"class":298},[288,159778,344],{"class":294},[288,159780,159781],{"class":403}," \"python\"\n",[288,159783,159784],{"class":290,"line":206},[288,159785,2572],{"emptyLinePlaceholder":217},[288,159787,159788,159790,159793,159795],{"class":290,"line":1352},[288,159789,3197],{"class":294},[288,159791,159792],{"class":298}," ch ",[288,159794,26216],{"class":294},[288,159796,158499],{"class":298},[288,159798,159799,159801],{"class":290,"line":1367},[288,159800,31472],{"class":347},[288,159802,159803],{"class":298},"(ch)\n",[19,159805,159806],{},"遍历列表：",[280,159808,159810],{"className":30551,"code":159809,"language":30553,"meta":205,"style":205},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[25,159811,159812,159834,159838,159848],{"__ignoreMap":205},[288,159813,159814,159817,159819,159821,159823,159825,159827,159829,159832],{"class":290,"line":291},[288,159815,159816],{"class":298},"students ",[288,159818,344],{"class":294},[288,159820,52399],{"class":298},[288,159822,149988],{"class":403},[288,159824,12608],{"class":298},[288,159826,151036],{"class":403},[288,159828,12608],{"class":298},[288,159830,159831],{"class":403},"\"小刚\"",[288,159833,33419],{"class":298},[288,159835,159836],{"class":290,"line":206},[288,159837,2572],{"emptyLinePlaceholder":217},[288,159839,159840,159842,159844,159846],{"class":290,"line":1352},[288,159841,3197],{"class":294},[288,159843,152237],{"class":298},[288,159845,26216],{"class":294},[288,159847,152242],{"class":298},[288,159849,159850,159852],{"class":290,"line":1367},[288,159851,31472],{"class":347},[288,159853,150142],{"class":298},[14,159855,159857],{"id":159856},"_47-range函数","4.7 range函数",[19,159859,159860,159863],{},[25,159861,159862],{},"range()"," 用于生成整数序列。",[280,159865,159867],{"className":30551,"code":159866,"language":30553,"meta":205,"style":205},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[25,159868,159869,159883,159901],{"__ignoreMap":205},[288,159870,159871,159873,159875,159877,159880],{"class":290,"line":291},[288,159872,33589],{"class":347},[288,159874,299],{"class":298},[288,159876,616],{"class":347},[288,159878,159879],{"class":298},")          ",[288,159881,159882],{"class":357},"# 0,1,2,3,4\n",[288,159884,159885,159887,159889,159891,159893,159895,159898],{"class":290,"line":206},[288,159886,33589],{"class":347},[288,159888,299],{"class":298},[288,159890,516],{"class":347},[288,159892,12608],{"class":298},[288,159894,616],{"class":347},[288,159896,159897],{"class":298},")       ",[288,159899,159900],{"class":357},"# 1,2,3,4\n",[288,159902,159903,159905,159907,159909,159911,159913,159915,159917,159919],{"class":290,"line":1352},[288,159904,33589],{"class":347},[288,159906,299],{"class":298},[288,159908,516],{"class":347},[288,159910,12608],{"class":298},[288,159912,743],{"class":347},[288,159914,12608],{"class":298},[288,159916,376],{"class":347},[288,159918,155761],{"class":298},[288,159920,159921],{"class":357},"# 1,3,5,7,9\n",[19,159923,159924,159925,24791],{},"配合 ",[25,159926,3197],{},[280,159928,159930],{"className":30551,"code":159929,"language":30553,"meta":205,"style":205},"for i in range(1, 6):\n    print(i)\n",[25,159931,159932,159952],{"__ignoreMap":205},[288,159933,159934,159936,159938,159940,159942,159944,159946,159948,159950],{"class":290,"line":291},[288,159935,3197],{"class":294},[288,159937,9611],{"class":298},[288,159939,26216],{"class":294},[288,159941,32616],{"class":347},[288,159943,299],{"class":298},[288,159945,516],{"class":347},[288,159947,12608],{"class":298},[288,159949,641],{"class":347},[288,159951,30959],{"class":298},[288,159953,159954,159956],{"class":290,"line":206},[288,159955,31472],{"class":347},[288,159957,159330],{"class":298},[19,159959,9198,159960,159962],{},[25,159961,33589],{}," 的结束值不包含在内。",[14,159964,159966],{"id":159965},"_48-for循环求和","4.8 for循环求和",[280,159968,159970],{"className":30551,"code":159969,"language":30553,"meta":205,"style":205},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[25,159971,159972,159980,159984,160004,160012,160016],{"__ignoreMap":205},[288,159973,159974,159976,159978],{"class":290,"line":291},[288,159975,157360],{"class":298},[288,159977,344],{"class":294},[288,159979,47506],{"class":347},[288,159981,159982],{"class":290,"line":206},[288,159983,2572],{"emptyLinePlaceholder":217},[288,159985,159986,159988,159990,159992,159994,159996,159998,160000,160002],{"class":290,"line":1352},[288,159987,3197],{"class":294},[288,159989,9611],{"class":298},[288,159991,26216],{"class":294},[288,159993,32616],{"class":347},[288,159995,299],{"class":298},[288,159997,516],{"class":347},[288,159999,12608],{"class":298},[288,160001,634],{"class":347},[288,160003,30959],{"class":298},[288,160005,160006,160008,160010],{"class":290,"line":1367},[288,160007,159407],{"class":298},[288,160009,9650],{"class":294},[288,160011,159412],{"class":298},[288,160013,160014],{"class":290,"line":1373},[288,160015,2572],{"emptyLinePlaceholder":217},[288,160017,160018,160020],{"class":290,"line":1387},[288,160019,30588],{"class":347},[288,160021,159431],{"class":298},[19,160023,160024],{},"求偶数和：",[280,160026,160028],{"className":30551,"code":160027,"language":30553,"meta":205,"style":205},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[25,160029,160030,160038,160042,160062,160078,160087,160091],{"__ignoreMap":205},[288,160031,160032,160034,160036],{"class":290,"line":291},[288,160033,157360],{"class":298},[288,160035,344],{"class":294},[288,160037,47506],{"class":347},[288,160039,160040],{"class":290,"line":206},[288,160041,2572],{"emptyLinePlaceholder":217},[288,160043,160044,160046,160048,160050,160052,160054,160056,160058,160060],{"class":290,"line":1352},[288,160045,3197],{"class":294},[288,160047,9611],{"class":298},[288,160049,26216],{"class":294},[288,160051,32616],{"class":347},[288,160053,299],{"class":298},[288,160055,516],{"class":347},[288,160057,12608],{"class":298},[288,160059,634],{"class":347},[288,160061,30959],{"class":298},[288,160063,160064,160066,160068,160070,160072,160074,160076],{"class":290,"line":1367},[288,160065,3273],{"class":294},[288,160067,9611],{"class":298},[288,160069,625],{"class":294},[288,160071,14928],{"class":347},[288,160073,101732],{"class":294},[288,160075,4265],{"class":347},[288,160077,3911],{"class":298},[288,160079,160080,160083,160085],{"class":290,"line":1373},[288,160081,160082],{"class":298},"        total ",[288,160084,9650],{"class":294},[288,160086,159412],{"class":298},[288,160088,160089],{"class":290,"line":1387},[288,160090,2572],{"emptyLinePlaceholder":217},[288,160092,160093,160095],{"class":290,"line":1393},[288,160094,30588],{"class":347},[288,160096,159431],{"class":298},[19,160098,160099],{},"也可以：",[280,160101,160103],{"className":30551,"code":160102,"language":30553,"meta":205,"style":205},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[25,160104,160105,160113,160117,160141,160149,160153],{"__ignoreMap":205},[288,160106,160107,160109,160111],{"class":290,"line":291},[288,160108,157360],{"class":298},[288,160110,344],{"class":294},[288,160112,47506],{"class":347},[288,160114,160115],{"class":290,"line":206},[288,160116,2572],{"emptyLinePlaceholder":217},[288,160118,160119,160121,160123,160125,160127,160129,160131,160133,160135,160137,160139],{"class":290,"line":1352},[288,160120,3197],{"class":294},[288,160122,9611],{"class":298},[288,160124,26216],{"class":294},[288,160126,32616],{"class":347},[288,160128,299],{"class":298},[288,160130,376],{"class":347},[288,160132,12608],{"class":298},[288,160134,634],{"class":347},[288,160136,12608],{"class":298},[288,160138,376],{"class":347},[288,160140,30959],{"class":298},[288,160142,160143,160145,160147],{"class":290,"line":1367},[288,160144,159407],{"class":298},[288,160146,9650],{"class":294},[288,160148,159412],{"class":298},[288,160150,160151],{"class":290,"line":1373},[288,160152,2572],{"emptyLinePlaceholder":217},[288,160154,160155,160157],{"class":290,"line":1387},[288,160156,30588],{"class":347},[288,160158,159431],{"class":298},[14,160160,160162],{"id":160161},"_49-循环嵌套","4.9 循环嵌套",[19,160164,160165],{},"嵌套循环就是循环里面再写循环。",[280,160167,160169],{"className":30551,"code":160168,"language":30553,"meta":205,"style":205},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[25,160170,160171,160191,160211],{"__ignoreMap":205},[288,160172,160173,160175,160177,160179,160181,160183,160185,160187,160189],{"class":290,"line":291},[288,160174,3197],{"class":294},[288,160176,9611],{"class":298},[288,160178,26216],{"class":294},[288,160180,32616],{"class":347},[288,160182,299],{"class":298},[288,160184,516],{"class":347},[288,160186,12608],{"class":298},[288,160188,590],{"class":347},[288,160190,30959],{"class":298},[288,160192,160193,160195,160197,160199,160201,160203,160205,160207,160209],{"class":290,"line":206},[288,160194,3373],{"class":294},[288,160196,9673],{"class":298},[288,160198,26216],{"class":294},[288,160200,32616],{"class":347},[288,160202,299],{"class":298},[288,160204,516],{"class":347},[288,160206,12608],{"class":298},[288,160208,590],{"class":347},[288,160210,30959],{"class":298},[288,160212,160213,160215,160217,160219,160222,160224,160226,160228,160231,160233,160235,160237,160239],{"class":290,"line":1352},[288,160214,32624],{"class":347},[288,160216,299],{"class":298},[288,160218,351],{"class":294},[288,160220,160221],{"class":403},"\"i=",[288,160223,1193],{"class":347},[288,160225,738],{"class":298},[288,160227,1243],{"class":347},[288,160229,160230],{"class":403},", j=",[288,160232,1193],{"class":347},[288,160234,764],{"class":298},[288,160236,1243],{"class":347},[288,160238,109],{"class":403},[288,160240,305],{"class":298},[19,160242,160243],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160245,160247],{"id":160246},"_410-九九乘法表","4.10 九九乘法表",[280,160249,160251],{"className":30551,"code":160250,"language":30553,"meta":205,"style":205},"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",[25,160252,160253,160273,160296,160348],{"__ignoreMap":205},[288,160254,160255,160257,160259,160261,160263,160265,160267,160269,160271],{"class":290,"line":291},[288,160256,3197],{"class":294},[288,160258,9611],{"class":298},[288,160260,26216],{"class":294},[288,160262,32616],{"class":347},[288,160264,299],{"class":298},[288,160266,516],{"class":347},[288,160268,12608],{"class":298},[288,160270,743],{"class":347},[288,160272,30959],{"class":298},[288,160274,160275,160277,160279,160281,160283,160285,160287,160290,160292,160294],{"class":290,"line":206},[288,160276,3373],{"class":294},[288,160278,9673],{"class":298},[288,160280,26216],{"class":294},[288,160282,32616],{"class":347},[288,160284,299],{"class":298},[288,160286,516],{"class":347},[288,160288,160289],{"class":298},", i ",[288,160291,778],{"class":294},[288,160293,25291],{"class":347},[288,160295,30959],{"class":298},[288,160297,160298,160300,160302,160304,160306,160308,160310,160312,160314,160316,160318,160320,160322,160324,160326,160328,160330,160332,160334,160336,160338,160340,160342,160344,160346],{"class":290,"line":1352},[288,160299,32624],{"class":347},[288,160301,299],{"class":298},[288,160303,351],{"class":294},[288,160305,109],{"class":403},[288,160307,1193],{"class":347},[288,160309,764],{"class":298},[288,160311,1243],{"class":347},[288,160313,752],{"class":403},[288,160315,1193],{"class":347},[288,160317,738],{"class":298},[288,160319,1243],{"class":347},[288,160321,344],{"class":403},[288,160323,1193],{"class":347},[288,160325,100321],{"class":298},[288,160327,752],{"class":294},[288,160329,3582],{"class":298},[288,160331,1243],{"class":347},[288,160333,109],{"class":403},[288,160335,12608],{"class":298},[288,160337,45974],{"class":5389},[288,160339,344],{"class":294},[288,160341,109],{"class":403},[288,160343,1403],{"class":347},[288,160345,109],{"class":403},[288,160347,305],{"class":298},[288,160349,160350,160352],{"class":290,"line":1367},[288,160351,31472],{"class":347},[288,160353,2148],{"class":298},[19,160355,160356],{},"关键点：",[243,160358,160359,160365,160371,160377],{},[246,160360,160361,160362,160364],{},"外层 ",[25,160363,738],{}," 控制行。",[246,160366,160367,160368,160370],{},"内层 ",[25,160369,764],{}," 控制列。",[246,160372,160373,160374,160376],{},"每行结束后用 ",[25,160375,146572],{}," 换行。",[246,160378,160379,160382],{},[25,160380,160381],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160384,160386],{"id":160385},"_411-循环else","4.11 循环else",[19,160388,160389,160390,160392,160393,160395,160396,160398],{},"Python 的循环可以带 ",[25,160391,1873],{},"。当循环正常结束时执行 ",[25,160394,1873],{},"，如果被 ",[25,160397,2225],{}," 打断，则不执行。",[280,160400,160402],{"className":30551,"code":160401,"language":30553,"meta":205,"style":205},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160403,160404,160424,160436,160447,160451,160457],{"__ignoreMap":205},[288,160405,160406,160408,160410,160412,160414,160416,160418,160420,160422],{"class":290,"line":291},[288,160407,3197],{"class":294},[288,160409,9611],{"class":298},[288,160411,26216],{"class":294},[288,160413,32616],{"class":347},[288,160415,299],{"class":298},[288,160417,516],{"class":347},[288,160419,12608],{"class":298},[288,160421,641],{"class":347},[288,160423,30959],{"class":298},[288,160425,160426,160428,160430,160432,160434],{"class":290,"line":206},[288,160427,3273],{"class":294},[288,160429,9611],{"class":298},[288,160431,3121],{"class":294},[288,160433,2210],{"class":347},[288,160435,3911],{"class":298},[288,160437,160438,160440,160442,160445],{"class":290,"line":1352},[288,160439,32624],{"class":347},[288,160441,299],{"class":298},[288,160443,160444],{"class":403},"\"找到了\"",[288,160446,305],{"class":298},[288,160448,160449],{"class":290,"line":1367},[288,160450,31800],{"class":294},[288,160452,160453,160455],{"class":290,"line":1373},[288,160454,1873],{"class":294},[288,160456,3911],{"class":298},[288,160458,160459,160461,160463,160466],{"class":290,"line":1387},[288,160460,31472],{"class":347},[288,160462,299],{"class":298},[288,160464,160465],{"class":403},"\"没找到\"",[288,160467,305],{"class":298},[19,160469,160470],{},"常用于搜索。",[280,160472,160474],{"className":30551,"code":160473,"language":30553,"meta":205,"style":205},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160475,160476,160497,160506,160510,160522,160533,160543,160547,160553],{"__ignoreMap":205},[288,160477,160478,160481,160483,160485,160487,160489,160491,160493,160495],{"class":290,"line":291},[288,160479,160480],{"class":298},"names ",[288,160482,344],{"class":294},[288,160484,52399],{"class":298},[288,160486,149988],{"class":403},[288,160488,12608],{"class":298},[288,160490,151036],{"class":403},[288,160492,12608],{"class":298},[288,160494,159831],{"class":403},[288,160496,33419],{"class":298},[288,160498,160499,160501,160503],{"class":290,"line":206},[288,160500,111751],{"class":298},[288,160502,344],{"class":294},[288,160504,160505],{"class":403}," \"小李\"\n",[288,160507,160508],{"class":290,"line":1352},[288,160509,2572],{"emptyLinePlaceholder":217},[288,160511,160512,160514,160517,160519],{"class":290,"line":1367},[288,160513,3197],{"class":294},[288,160515,160516],{"class":298}," name ",[288,160518,26216],{"class":294},[288,160520,160521],{"class":298}," names:\n",[288,160523,160524,160526,160528,160530],{"class":290,"line":1373},[288,160525,3273],{"class":294},[288,160527,160516],{"class":298},[288,160529,3121],{"class":294},[288,160531,160532],{"class":298}," target:\n",[288,160534,160535,160537,160539,160541],{"class":290,"line":1387},[288,160536,32624],{"class":347},[288,160538,299],{"class":298},[288,160540,160444],{"class":403},[288,160542,305],{"class":298},[288,160544,160545],{"class":290,"line":1393},[288,160546,31800],{"class":294},[288,160548,160549,160551],{"class":290,"line":1484},[288,160550,1873],{"class":294},[288,160552,3911],{"class":298},[288,160554,160555,160557,160559,160561],{"class":290,"line":1490},[288,160556,31472],{"class":347},[288,160558,299],{"class":298},[288,160560,160465],{"class":403},[288,160562,305],{"class":298},[14,160564,160566],{"id":160565},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160568,123465],{},[243,160570,160571,160574,160577],{},[246,160572,160573],{},"用户最多输入 3 次密码。",[246,160575,160576],{},"密码正确则登录成功。",[246,160578,160579],{},"3 次都错误则锁定账号。",[19,160581,10208],{},[280,160583,160585],{"className":30551,"code":160584,"language":30553,"meta":205,"style":205},"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",[25,160586,160587,160597,160601,160617,160633,160637,160649,160660,160664,160670,160695,160701],{"__ignoreMap":205},[288,160588,160589,160592,160594],{"class":290,"line":291},[288,160590,160591],{"class":298},"password ",[288,160593,344],{"class":294},[288,160595,160596],{"class":403}," \"123456\"\n",[288,160598,160599],{"class":290,"line":206},[288,160600,2572],{"emptyLinePlaceholder":217},[288,160602,160603,160605,160607,160609,160611,160613,160615],{"class":290,"line":1352},[288,160604,3197],{"class":294},[288,160606,9611],{"class":298},[288,160608,26216],{"class":294},[288,160610,32616],{"class":347},[288,160612,299],{"class":298},[288,160614,370],{"class":347},[288,160616,30959],{"class":298},[288,160618,160619,160622,160624,160626,160628,160631],{"class":290,"line":1367},[288,160620,160621],{"class":298},"    user_password ",[288,160623,344],{"class":294},[288,160625,60778],{"class":347},[288,160627,299],{"class":298},[288,160629,160630],{"class":403},"\"请输入密码:\"",[288,160632,305],{"class":298},[288,160634,160635],{"class":290,"line":1373},[288,160636,2572],{"emptyLinePlaceholder":217},[288,160638,160639,160641,160644,160646],{"class":290,"line":1387},[288,160640,3273],{"class":294},[288,160642,160643],{"class":298}," user_password ",[288,160645,3121],{"class":294},[288,160647,160648],{"class":298}," password:\n",[288,160650,160651,160653,160655,160658],{"class":290,"line":1393},[288,160652,32624],{"class":347},[288,160654,299],{"class":298},[288,160656,160657],{"class":403},"\"登录成功\"",[288,160659,305],{"class":298},[288,160661,160662],{"class":290,"line":1484},[288,160663,31800],{"class":294},[288,160665,160666,160668],{"class":290,"line":1490},[288,160667,158122],{"class":294},[288,160669,3911],{"class":298},[288,160671,160672,160674,160676,160678,160681,160684,160686,160688,160690,160693],{"class":290,"line":1502},[288,160673,32624],{"class":347},[288,160675,299],{"class":298},[288,160677,351],{"class":294},[288,160679,160680],{"class":403},"\"密码错误，还剩",[288,160682,160683],{"class":347},"{2",[288,160685,52444],{"class":294},[288,160687,3204],{"class":298},[288,160689,1243],{"class":347},[288,160691,160692],{"class":403},"次机会\"",[288,160694,305],{"class":298},[288,160696,160697,160699],{"class":290,"line":1784},[288,160698,1873],{"class":294},[288,160700,3911],{"class":298},[288,160702,160703,160705,160707,160710],{"class":290,"line":1789},[288,160704,31472],{"class":347},[288,160706,299],{"class":298},[288,160708,160709],{"class":403},"\"账号已锁定\"",[288,160711,305],{"class":298},[14,160713,160715],{"id":160714},"_413-小案例菜单程序","4.13 小案例：菜单程序",[280,160717,160719],{"className":30551,"code":160718,"language":30553,"meta":205,"style":205},"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",[25,160720,160721,160729,160740,160751,160762,160773,160784,160788,160803,160807,160819,160830,160842,160853,160865,160876,160888,160898,160902,160908],{"__ignoreMap":205},[288,160722,160723,160725,160727],{"class":290,"line":291},[288,160724,108836],{"class":294},[288,160726,95465],{"class":347},[288,160728,3911],{"class":298},[288,160730,160731,160733,160735,160738],{"class":290,"line":206},[288,160732,31472],{"class":347},[288,160734,299],{"class":298},[288,160736,160737],{"class":403},"\"====== 菜单 ======\"",[288,160739,305],{"class":298},[288,160741,160742,160744,160746,160749],{"class":290,"line":1352},[288,160743,31472],{"class":347},[288,160745,299],{"class":298},[288,160747,160748],{"class":403},"\"1. 查询余额\"",[288,160750,305],{"class":298},[288,160752,160753,160755,160757,160760],{"class":290,"line":1367},[288,160754,31472],{"class":347},[288,160756,299],{"class":298},[288,160758,160759],{"class":403},"\"2. 存款\"",[288,160761,305],{"class":298},[288,160763,160764,160766,160768,160771],{"class":290,"line":1373},[288,160765,31472],{"class":347},[288,160767,299],{"class":298},[288,160769,160770],{"class":403},"\"3. 取款\"",[288,160772,305],{"class":298},[288,160774,160775,160777,160779,160782],{"class":290,"line":1387},[288,160776,31472],{"class":347},[288,160778,299],{"class":298},[288,160780,160781],{"class":403},"\"0. 退出\"",[288,160783,305],{"class":298},[288,160785,160786],{"class":290,"line":1393},[288,160787,2572],{"emptyLinePlaceholder":217},[288,160789,160790,160793,160795,160797,160799,160801],{"class":290,"line":1484},[288,160791,160792],{"class":298},"    choice ",[288,160794,344],{"class":294},[288,160796,60778],{"class":347},[288,160798,299],{"class":298},[288,160800,153173],{"class":403},[288,160802,305],{"class":298},[288,160804,160805],{"class":290,"line":1490},[288,160806,2572],{"emptyLinePlaceholder":217},[288,160808,160809,160811,160813,160815,160817],{"class":290,"line":1502},[288,160810,3273],{"class":294},[288,160812,153186],{"class":298},[288,160814,3121],{"class":294},[288,160816,153191],{"class":403},[288,160818,3911],{"class":298},[288,160820,160821,160823,160825,160828],{"class":290,"line":1784},[288,160822,32624],{"class":347},[288,160824,299],{"class":298},[288,160826,160827],{"class":403},"\"余额为1000元\"",[288,160829,305],{"class":298},[288,160831,160832,160834,160836,160838,160840],{"class":290,"line":1789},[288,160833,39466],{"class":294},[288,160835,153186],{"class":298},[288,160837,3121],{"class":294},[288,160839,153210],{"class":403},[288,160841,3911],{"class":298},[288,160843,160844,160846,160848,160851],{"class":290,"line":1795},[288,160845,32624],{"class":347},[288,160847,299],{"class":298},[288,160849,160850],{"class":403},"\"存款功能\"",[288,160852,305],{"class":298},[288,160854,160855,160857,160859,160861,160863],{"class":290,"line":1800},[288,160856,39466],{"class":294},[288,160858,153186],{"class":298},[288,160860,3121],{"class":294},[288,160862,153228],{"class":403},[288,160864,3911],{"class":298},[288,160866,160867,160869,160871,160874],{"class":290,"line":1814},[288,160868,32624],{"class":347},[288,160870,299],{"class":298},[288,160872,160873],{"class":403},"\"取款功能\"",[288,160875,305],{"class":298},[288,160877,160878,160880,160882,160884,160886],{"class":290,"line":1819},[288,160879,39466],{"class":294},[288,160881,153186],{"class":298},[288,160883,3121],{"class":294},[288,160885,153282],{"class":403},[288,160887,3911],{"class":298},[288,160889,160890,160892,160894,160896],{"class":290,"line":1825},[288,160891,32624],{"class":347},[288,160893,299],{"class":298},[288,160895,153293],{"class":403},[288,160897,305],{"class":298},[288,160899,160900],{"class":290,"line":1846},[288,160901,31800],{"class":294},[288,160903,160904,160906],{"class":290,"line":1851},[288,160905,158122],{"class":294},[288,160907,3911],{"class":298},[288,160909,160910,160912,160914,160916],{"class":290,"line":1865},[288,160911,32624],{"class":347},[288,160913,299],{"class":298},[288,160915,153314],{"class":403},[288,160917,305],{"class":298},[19,160919,160920,160921,160923,160924,28558],{},"菜单类程序通常使用 ",[25,160922,159622],{},"，用户选择退出时 ",[25,160925,2225],{},[14,160927,160929],{"id":160928},"_414-易错点","4.14 易错点",[243,160931,160932,160937,160943,160951,160957],{},[246,160933,160934,160936],{},[25,160935,108836],{}," 循环必须更新控制变量。",[246,160938,160939,160942],{},[25,160940,160941],{},"range(1, 10)"," 不包含 10。",[246,160944,160945,160947,160948,160950],{},[25,160946,2225],{}," 结束整个循环，",[25,160949,154772],{}," 只跳过本轮。",[246,160952,160953,160954,160956],{},"嵌套循环中，",[25,160955,2225],{}," 只跳出当前所在的一层循环。",[246,160958,160959],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160961,160963],{"id":160962},"_415-本章练习","4.15 本章练习",[243,160965,160966,160969,160972,160975,160978],{},[246,160967,160968],{},"输出 1 到 100。",[246,160970,160971],{},"计算 1 到 100 的偶数和。",[246,160973,160974],{},"输出 100 以内能被 3 和 5 同时整除的数。",[246,160976,160977],{},"编写猜数字游戏，限制最多猜 7 次。",[246,160979,160980],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5299,160982,160983],{},"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":205,"searchDepth":206,"depth":206,"links":160985},[160986,160987,160988,160989,160990,160994,160995,160996,160997,160998,160999,161000,161001,161002,161003],{"id":159242,"depth":206,"text":159243},{"id":159272,"depth":206,"text":159273},{"id":159361,"depth":206,"text":159362},{"id":159455,"depth":206,"text":159456},{"id":159629,"depth":206,"text":159630,"children":160991},[160992,160993],{"id":159633,"depth":1352,"text":159634},{"id":159697,"depth":1352,"text":159698},{"id":159761,"depth":206,"text":159762},{"id":159856,"depth":206,"text":159857},{"id":159965,"depth":206,"text":159966},{"id":160161,"depth":206,"text":160162},{"id":160246,"depth":206,"text":160247},{"id":160385,"depth":206,"text":160386},{"id":160565,"depth":206,"text":160566},{"id":160714,"depth":206,"text":160715},{"id":160928,"depth":206,"text":160929},{"id":160962,"depth":206,"text":160963},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159234,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161010,"title":161011,"body":161012,"description":214,"extension":215,"meta":163017,"navigation":217,"path":163018,"seo":163019,"stem":163020,"__hash__":163021},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161013,"toc":162997},[161014,161017,161021,161024,161027,161041,161044,161058,161062,161064,161083,161085,161132,161134,161148,161152,161226,161229,161233,161236,161295,161303,161306,161359,161362,161366,161371,161426,161434,161484,161488,161493,161501,161600,161606,161610,161615,161618,161629,161670,161683,161687,161690,161726,161729,161742,161745,161805,161809,161813,161816,161867,161871,161874,161921,161927,161993,161996,162000,162003,162119,162122,162126,162129,162235,162239,162242,162280,162283,162325,162328,162388,162391,162395,162859,162862,162866,162893,162899,162960,162964,162994],[10,161015,161011],{"id":161016},"_5-函数基础",[14,161018,161020],{"id":161019},"_51-为什么需要函数","5.1 为什么需要函数",[19,161022,161023],{},"函数用于封装一段可以重复使用的代码。",[19,161025,161026],{},"不使用函数的问题：",[243,161028,161029,161032,161035,161038],{},[246,161030,161031],{},"重复代码多。",[246,161033,161034],{},"修改逻辑时容易漏改。",[246,161036,161037],{},"主流程不清晰。",[246,161039,161040],{},"程序越写越长，难以维护。",[19,161042,161043],{},"使用函数后的好处：",[243,161045,161046,161049,161052,161055],{},[246,161047,161048],{},"提高复用性。",[246,161050,161051],{},"提高可读性。",[246,161053,161054],{},"便于调试。",[246,161056,161057],{},"便于分工。",[14,161059,161061],{"id":161060},"_52-函数定义","5.2 函数定义",[19,161063,5354],{},[280,161065,161067],{"className":30551,"code":161066,"language":30553,"meta":205,"style":205},"def 函数名():\n    函数体\n",[25,161068,161069,161078],{"__ignoreMap":205},[288,161070,161071,161073,161076],{"class":290,"line":291},[288,161072,32120],{"class":294},[288,161074,161075],{"class":2135}," 函数名",[288,161077,32126],{"class":298},[288,161079,161080],{"class":290,"line":206},[288,161081,161082],{"class":298},"    函数体\n",[19,161084,15308],{},[280,161086,161088],{"className":30551,"code":161087,"language":30553,"meta":205,"style":205},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[25,161089,161090,161099,161109,161119,161123,161127],{"__ignoreMap":205},[288,161091,161092,161094,161097],{"class":290,"line":291},[288,161093,32120],{"class":294},[288,161095,161096],{"class":2135}," say_hello",[288,161098,32126],{"class":298},[288,161100,161101,161103,161105,161107],{"class":290,"line":206},[288,161102,31472],{"class":347},[288,161104,299],{"class":298},[288,161106,6017],{"class":403},[288,161108,305],{"class":298},[288,161110,161111,161113,161115,161117],{"class":290,"line":1352},[288,161112,31472],{"class":347},[288,161114,299],{"class":298},[288,161116,146739],{"class":403},[288,161118,305],{"class":298},[288,161120,161121],{"class":290,"line":1367},[288,161122,2572],{"emptyLinePlaceholder":217},[288,161124,161125],{"class":290,"line":1373},[288,161126,2572],{"emptyLinePlaceholder":217},[288,161128,161129],{"class":290,"line":1387},[288,161130,161131],{"class":298},"say_hello()\n",[19,161133,9198],{},[243,161135,161136,161139,161142,161145],{},[246,161137,161138],{},"函数必须先定义，再调用。",[246,161140,161141],{},"函数名遵循变量命名规则。",[246,161143,161144],{},"函数体需要缩进。",[246,161146,161147],{},"函数不调用就不会执行。",[14,161149,161151],{"id":161150},"_53-函数调用","5.3 函数调用",[280,161153,161155],{"className":30551,"code":161154,"language":30553,"meta":205,"style":205},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[25,161156,161157,161166,161177,161188,161199,161209,161213,161217,161222],{"__ignoreMap":205},[288,161158,161159,161161,161164],{"class":290,"line":291},[288,161160,32120],{"class":294},[288,161162,161163],{"class":2135}," print_menu",[288,161165,32126],{"class":298},[288,161167,161168,161170,161172,161175],{"class":290,"line":206},[288,161169,31472],{"class":347},[288,161171,299],{"class":298},[288,161173,161174],{"class":403},"\"1. 查询\"",[288,161176,305],{"class":298},[288,161178,161179,161181,161183,161186],{"class":290,"line":1352},[288,161180,31472],{"class":347},[288,161182,299],{"class":298},[288,161184,161185],{"class":403},"\"2. 添加\"",[288,161187,305],{"class":298},[288,161189,161190,161192,161194,161197],{"class":290,"line":1367},[288,161191,31472],{"class":347},[288,161193,299],{"class":298},[288,161195,161196],{"class":403},"\"3. 删除\"",[288,161198,305],{"class":298},[288,161200,161201,161203,161205,161207],{"class":290,"line":1373},[288,161202,31472],{"class":347},[288,161204,299],{"class":298},[288,161206,160781],{"class":403},[288,161208,305],{"class":298},[288,161210,161211],{"class":290,"line":1387},[288,161212,2572],{"emptyLinePlaceholder":217},[288,161214,161215],{"class":290,"line":1393},[288,161216,2572],{"emptyLinePlaceholder":217},[288,161218,161219],{"class":290,"line":1484},[288,161220,161221],{"class":298},"print_menu()\n",[288,161223,161224],{"class":290,"line":1490},[288,161225,161221],{"class":298},[19,161227,161228],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161230,161232],{"id":161231},"_54-参数","5.4 参数",[19,161234,161235],{},"参数用于向函数传递数据。",[280,161237,161239],{"className":30551,"code":161238,"language":30553,"meta":205,"style":205},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[25,161240,161241,161250,161270,161274,161278,161287],{"__ignoreMap":205},[288,161242,161243,161245,161247],{"class":290,"line":291},[288,161244,32120],{"class":294},[288,161246,161096],{"class":2135},[288,161248,161249],{"class":298},"(name):\n",[288,161251,161252,161254,161256,161258,161260,161262,161264,161266,161268],{"class":290,"line":206},[288,161253,31472],{"class":347},[288,161255,299],{"class":298},[288,161257,351],{"class":294},[288,161259,157154],{"class":403},[288,161261,1193],{"class":347},[288,161263,79983],{"class":298},[288,161265,1243],{"class":347},[288,161267,109],{"class":403},[288,161269,305],{"class":298},[288,161271,161272],{"class":290,"line":1352},[288,161273,2572],{"emptyLinePlaceholder":217},[288,161275,161276],{"class":290,"line":1367},[288,161277,2572],{"emptyLinePlaceholder":217},[288,161279,161280,161283,161285],{"class":290,"line":1373},[288,161281,161282],{"class":298},"say_hello(",[288,161284,149988],{"class":403},[288,161286,305],{"class":298},[288,161288,161289,161291,161293],{"class":290,"line":1387},[288,161290,161282],{"class":298},[288,161292,151036],{"class":403},[288,161294,305],{"class":298},[19,161296,161297,161299,161300,161302],{},[25,161298,79983],{}," 是形参，",[25,161301,149988],{}," 是实参。",[19,161304,161305],{},"多个参数：",[280,161307,161309],{"className":30551,"code":161308,"language":30553,"meta":205,"style":205},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[25,161310,161311,161319,161332,161338,161342,161346],{"__ignoreMap":205},[288,161312,161313,161315,161317],{"class":290,"line":291},[288,161314,32120],{"class":294},[288,161316,5382],{"class":2135},[288,161318,151193],{"class":298},[288,161320,161321,161324,161326,161328,161330],{"class":290,"line":206},[288,161322,161323],{"class":298},"    result ",[288,161325,344],{"class":294},[288,161327,11042],{"class":298},[288,161329,778],{"class":294},[288,161331,151204],{"class":298},[288,161333,161334,161336],{"class":290,"line":1352},[288,161335,31472],{"class":347},[288,161337,76758],{"class":298},[288,161339,161340],{"class":290,"line":1367},[288,161341,2572],{"emptyLinePlaceholder":217},[288,161343,161344],{"class":290,"line":1373},[288,161345,2572],{"emptyLinePlaceholder":217},[288,161347,161348,161351,161353,161355,161357],{"class":290,"line":1387},[288,161349,161350],{"class":298},"add(",[288,161352,743],{"class":347},[288,161354,12608],{"class":298},[288,161356,997],{"class":347},[288,161358,305],{"class":298},[19,161360,161361],{},"调用时参数数量必须匹配。",[14,161363,161365],{"id":161364},"_55-返回值","5.5 返回值",[19,161367,161368,161370],{},[25,161369,17219],{}," 用于把函数内部的结果返回给调用者。",[280,161372,161374],{"className":30551,"code":161373,"language":30553,"meta":205,"style":205},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[25,161375,161376,161384,161394,161398,161402,161420],{"__ignoreMap":205},[288,161377,161378,161380,161382],{"class":290,"line":291},[288,161379,32120],{"class":294},[288,161381,5382],{"class":2135},[288,161383,151193],{"class":298},[288,161385,161386,161388,161390,161392],{"class":290,"line":206},[288,161387,4262],{"class":294},[288,161389,11042],{"class":298},[288,161391,778],{"class":294},[288,161393,151204],{"class":298},[288,161395,161396],{"class":290,"line":1352},[288,161397,2572],{"emptyLinePlaceholder":217},[288,161399,161400],{"class":290,"line":1367},[288,161401,2572],{"emptyLinePlaceholder":217},[288,161403,161404,161407,161409,161412,161414,161416,161418],{"class":290,"line":1373},[288,161405,161406],{"class":298},"result ",[288,161408,344],{"class":294},[288,161410,161411],{"class":298}," add(",[288,161413,743],{"class":347},[288,161415,12608],{"class":298},[288,161417,997],{"class":347},[288,161419,305],{"class":298},[288,161421,161422,161424],{"class":290,"line":1387},[288,161423,30588],{"class":347},[288,161425,76758],{"class":298},[19,161427,161428,161429,161431,161432,28558],{},"如果函数没有写 ",[25,161430,17219],{},"，默认返回 ",[25,161433,95859],{},[280,161435,161437],{"className":30551,"code":161436,"language":30553,"meta":205,"style":205},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[25,161438,161439,161447,161457,161461,161465,161474],{"__ignoreMap":205},[288,161440,161441,161443,161445],{"class":290,"line":291},[288,161442,32120],{"class":294},[288,161444,161096],{"class":2135},[288,161446,32126],{"class":298},[288,161448,161449,161451,161453,161455],{"class":290,"line":206},[288,161450,31472],{"class":347},[288,161452,299],{"class":298},[288,161454,6017],{"class":403},[288,161456,305],{"class":298},[288,161458,161459],{"class":290,"line":1352},[288,161460,2572],{"emptyLinePlaceholder":217},[288,161462,161463],{"class":290,"line":1367},[288,161464,2572],{"emptyLinePlaceholder":217},[288,161466,161467,161469,161471],{"class":290,"line":1373},[288,161468,161406],{"class":298},[288,161470,344],{"class":294},[288,161472,161473],{"class":298}," say_hello()\n",[288,161475,161476,161478,161481],{"class":290,"line":1387},[288,161477,30588],{"class":347},[288,161479,161480],{"class":298},"(result)  ",[288,161482,161483],{"class":357},"# None\n",[14,161485,161487],{"id":161486},"_56-return的作用","5.6 return的作用",[19,161489,161490,161492],{},[25,161491,17219],{}," 有两个作用：",[243,161494,161495,161498],{},[246,161496,161497],{},"返回结果。",[246,161499,161500],{},"结束函数。",[280,161502,161504],{"className":30551,"code":161503,"language":30553,"meta":205,"style":205},"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",[25,161505,161506,161516,161528,161535,161539,161551,161558,161562,161569,161573,161577,161588],{"__ignoreMap":205},[288,161507,161508,161510,161513],{"class":290,"line":291},[288,161509,32120],{"class":294},[288,161511,161512],{"class":2135}," check_age",[288,161514,161515],{"class":298},"(age):\n",[288,161517,161518,161520,161522,161524,161526],{"class":290,"line":206},[288,161519,3273],{"class":294},[288,161521,15880],{"class":298},[288,161523,1207],{"class":294},[288,161525,4265],{"class":347},[288,161527,3911],{"class":298},[288,161529,161530,161532],{"class":290,"line":1352},[288,161531,14925],{"class":294},[288,161533,161534],{"class":403}," \"年龄不合法\"\n",[288,161536,161537],{"class":290,"line":1367},[288,161538,2572],{"emptyLinePlaceholder":217},[288,161540,161541,161543,161545,161547,161549],{"class":290,"line":1373},[288,161542,3273],{"class":294},[288,161544,15880],{"class":298},[288,161546,1882],{"class":294},[288,161548,156385],{"class":347},[288,161550,3911],{"class":298},[288,161552,161553,161555],{"class":290,"line":1387},[288,161554,14925],{"class":294},[288,161556,161557],{"class":403}," \"成年人\"\n",[288,161559,161560],{"class":290,"line":1393},[288,161561,2572],{"emptyLinePlaceholder":217},[288,161563,161564,161566],{"class":290,"line":1484},[288,161565,4262],{"class":294},[288,161567,161568],{"class":403}," \"未成年人\"\n",[288,161570,161571],{"class":290,"line":1490},[288,161572,2572],{"emptyLinePlaceholder":217},[288,161574,161575],{"class":290,"line":1502},[288,161576,2572],{"emptyLinePlaceholder":217},[288,161578,161579,161581,161584,161586],{"class":290,"line":1784},[288,161580,30588],{"class":347},[288,161582,161583],{"class":298},"(check_age(",[288,161585,997],{"class":347},[288,161587,30670],{"class":298},[288,161589,161590,161592,161594,161596,161598],{"class":290,"line":1789},[288,161591,30588],{"class":347},[288,161593,161583],{"class":298},[288,161595,829],{"class":294},[288,161597,516],{"class":347},[288,161599,30670],{"class":298},[19,161601,161602,161603,161605],{},"函数执行到 ",[25,161604,17219],{}," 后，后面的代码不会继续执行。",[14,161607,161609],{"id":161608},"_57-none","5.7 None",[19,161611,161612,161614],{},[25,161613,95859],{}," 表示空值或没有结果。",[19,161616,161617],{},"常见使用场景：",[243,161619,161620,161623,161626],{},[246,161621,161622],{},"函数没有返回值。",[246,161624,161625],{},"变量暂时没有具体值。",[246,161627,161628],{},"表示查询不到结果。",[280,161630,161632],{"className":30551,"code":161631,"language":30553,"meta":205,"style":205},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[25,161633,161634,161642,161646,161659],{"__ignoreMap":205},[288,161635,161636,161638,161640],{"class":290,"line":291},[288,161637,161406],{"class":298},[288,161639,344],{"class":294},[288,161641,152272],{"class":347},[288,161643,161644],{"class":290,"line":206},[288,161645,2572],{"emptyLinePlaceholder":217},[288,161647,161648,161650,161653,161655,161657],{"class":290,"line":1352},[288,161649,1703],{"class":294},[288,161651,161652],{"class":298}," result ",[288,161654,39100],{"class":294},[288,161656,39106],{"class":347},[288,161658,3911],{"class":298},[288,161660,161661,161663,161665,161668],{"class":290,"line":1367},[288,161662,31472],{"class":347},[288,161664,299],{"class":298},[288,161666,161667],{"class":403},"\"没有数据\"",[288,161669,305],{"class":298},[19,161671,161672,161673,161675,161676,161679,161680,28558],{},"判断 ",[25,161674,95859],{}," 推荐使用 ",[25,161677,161678],{},"is None","，不要写成 ",[25,161681,161682],{},"== None",[14,161684,161686],{"id":161685},"_58-函数文档字符串","5.8 函数文档字符串",[19,161688,161689],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[280,161691,161693],{"className":30551,"code":161692,"language":30553,"meta":205,"style":205},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[25,161694,161695,161705,161710],{"__ignoreMap":205},[288,161696,161697,161699,161702],{"class":290,"line":291},[288,161698,32120],{"class":294},[288,161700,161701],{"class":2135}," calculate_bmi",[288,161703,161704],{"class":298},"(weight, height):\n",[288,161706,161707],{"class":290,"line":206},[288,161708,161709],{"class":403},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[288,161711,161712,161714,161717,161719,161722,161724],{"class":290,"line":1352},[288,161713,4262],{"class":294},[288,161715,161716],{"class":298}," weight ",[288,161718,881],{"class":294},[288,161720,161721],{"class":298}," height ",[288,161723,10834],{"class":294},[288,161725,47896],{"class":347},[19,161727,161728],{},"查看说明：",[280,161730,161732],{"className":30551,"code":161731,"language":30553,"meta":205,"style":205},"help(calculate_bmi)\n",[25,161733,161734],{"__ignoreMap":205},[288,161735,161736,161739],{"class":290,"line":291},[288,161737,161738],{"class":347},"help",[288,161740,161741],{"class":298},"(calculate_bmi)\n",[19,161743,161744],{},"较完整的写法：",[280,161746,161748],{"className":30551,"code":161747,"language":30553,"meta":205,"style":205},"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",[25,161749,161750,161758,161763,161768,161772,161777,161782,161787,161791],{"__ignoreMap":205},[288,161751,161752,161754,161756],{"class":290,"line":291},[288,161753,32120],{"class":294},[288,161755,161701],{"class":2135},[288,161757,161704],{"class":298},[288,161759,161760],{"class":290,"line":206},[288,161761,161762],{"class":403},"    \"\"\"\n",[288,161764,161765],{"class":290,"line":1352},[288,161766,161767],{"class":403},"    计算BMI。\n",[288,161769,161770],{"class":290,"line":1367},[288,161771,2572],{"emptyLinePlaceholder":217},[288,161773,161774],{"class":290,"line":1373},[288,161775,161776],{"class":403},"    :param weight: 体重，单位kg\n",[288,161778,161779],{"class":290,"line":1387},[288,161780,161781],{"class":403},"    :param height: 身高，单位m\n",[288,161783,161784],{"class":290,"line":1393},[288,161785,161786],{"class":403},"    :return: BMI数值\n",[288,161788,161789],{"class":290,"line":1484},[288,161790,161762],{"class":403},[288,161792,161793,161795,161797,161799,161801,161803],{"class":290,"line":1490},[288,161794,4262],{"class":294},[288,161796,161716],{"class":298},[288,161798,881],{"class":294},[288,161800,161721],{"class":298},[288,161802,10834],{"class":294},[288,161804,47896],{"class":347},[14,161806,161808],{"id":161807},"_59-变量作用域","5.9 变量作用域",[260,161810,161812],{"id":161811},"_591-局部变量","5.9.1 局部变量",[19,161814,161815],{},"在函数内部定义的变量，只能在函数内部使用。",[280,161817,161819],{"className":30551,"code":161818,"language":30553,"meta":205,"style":205},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[25,161820,161821,161830,161838,161844,161848,161852,161857],{"__ignoreMap":205},[288,161822,161823,161825,161828],{"class":290,"line":291},[288,161824,32120],{"class":294},[288,161826,161827],{"class":2135}," test",[288,161829,32126],{"class":298},[288,161831,161832,161834,161836],{"class":290,"line":206},[288,161833,45766],{"class":298},[288,161835,344],{"class":294},[288,161837,58601],{"class":347},[288,161839,161840,161842],{"class":290,"line":1352},[288,161841,31472],{"class":347},[288,161843,312],{"class":298},[288,161845,161846],{"class":290,"line":1367},[288,161847,2572],{"emptyLinePlaceholder":217},[288,161849,161850],{"class":290,"line":1373},[288,161851,2572],{"emptyLinePlaceholder":217},[288,161853,161854],{"class":290,"line":1387},[288,161855,161856],{"class":298},"test()\n",[288,161858,161859,161861,161864],{"class":290,"line":1393},[288,161860,30588],{"class":347},[288,161862,161863],{"class":298},"(num)  ",[288,161865,161866],{"class":357},"# 报错\n",[260,161868,161870],{"id":161869},"_592-全局变量","5.9.2 全局变量",[19,161872,161873],{},"在函数外部定义的变量，可以在函数内部读取。",[280,161875,161877],{"className":30551,"code":161876,"language":30553,"meta":205,"style":205},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[25,161878,161879,161887,161891,161895,161903,161909,161913,161917],{"__ignoreMap":205},[288,161880,161881,161883,161885],{"class":290,"line":291},[288,161882,146636],{"class":298},[288,161884,344],{"class":294},[288,161886,149453],{"class":403},[288,161888,161889],{"class":290,"line":206},[288,161890,2572],{"emptyLinePlaceholder":217},[288,161892,161893],{"class":290,"line":1352},[288,161894,2572],{"emptyLinePlaceholder":217},[288,161896,161897,161899,161901],{"class":290,"line":1367},[288,161898,32120],{"class":294},[288,161900,161096],{"class":2135},[288,161902,32126],{"class":298},[288,161904,161905,161907],{"class":290,"line":1373},[288,161906,31472],{"class":347},[288,161908,150760],{"class":298},[288,161910,161911],{"class":290,"line":1387},[288,161912,2572],{"emptyLinePlaceholder":217},[288,161914,161915],{"class":290,"line":1393},[288,161916,2572],{"emptyLinePlaceholder":217},[288,161918,161919],{"class":290,"line":1484},[288,161920,161131],{"class":298},[19,161922,161923,161924,28558],{},"如果要在函数内部修改全局变量，需要 ",[25,161925,161926],{},"global",[280,161928,161930],{"className":30551,"code":161929,"language":30553,"meta":205,"style":205},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[25,161931,161932,161940,161944,161948,161957,161965,161973,161977,161981,161986],{"__ignoreMap":205},[288,161933,161934,161936,161938],{"class":290,"line":291},[288,161935,146791],{"class":298},[288,161937,344],{"class":294},[288,161939,47506],{"class":347},[288,161941,161942],{"class":290,"line":206},[288,161943,2572],{"emptyLinePlaceholder":217},[288,161945,161946],{"class":290,"line":1352},[288,161947,2572],{"emptyLinePlaceholder":217},[288,161949,161950,161952,161955],{"class":290,"line":1367},[288,161951,32120],{"class":294},[288,161953,161954],{"class":2135}," add_count",[288,161956,32126],{"class":298},[288,161958,161959,161962],{"class":290,"line":1373},[288,161960,161961],{"class":294},"    global",[288,161963,161964],{"class":298}," count\n",[288,161966,161967,161969,161971],{"class":290,"line":1387},[288,161968,159533],{"class":298},[288,161970,9650],{"class":294},[288,161972,55872],{"class":347},[288,161974,161975],{"class":290,"line":1393},[288,161976,2572],{"emptyLinePlaceholder":217},[288,161978,161979],{"class":290,"line":1484},[288,161980,2572],{"emptyLinePlaceholder":217},[288,161982,161983],{"class":290,"line":1490},[288,161984,161985],{"class":298},"add_count()\n",[288,161987,161988,161990],{"class":290,"line":1502},[288,161989,30588],{"class":347},[288,161991,161992],{"class":298},"(count)\n",[19,161994,161995],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161997,161999],{"id":161998},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162001,162002],{},"一个函数中可以调用另一个函数。",[280,162004,162006],{"className":30551,"code":162005,"language":30553,"meta":205,"style":205},"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",[25,162007,162008,162017,162031,162035,162039,162048,162053,162073,162094,162098,162102,162106],{"__ignoreMap":205},[288,162009,162010,162012,162015],{"class":290,"line":291},[288,162011,32120],{"class":294},[288,162013,162014],{"class":2135}," print_line",[288,162016,32126],{"class":298},[288,162018,162019,162021,162023,162025,162027,162029],{"class":290,"line":206},[288,162020,31472],{"class":347},[288,162022,299],{"class":298},[288,162024,32656],{"class":403},[288,162026,6691],{"class":294},[288,162028,78838],{"class":347},[288,162030,305],{"class":298},[288,162032,162033],{"class":290,"line":1352},[288,162034,2572],{"emptyLinePlaceholder":217},[288,162036,162037],{"class":290,"line":1367},[288,162038,2572],{"emptyLinePlaceholder":217},[288,162040,162041,162043,162046],{"class":290,"line":1373},[288,162042,32120],{"class":294},[288,162044,162045],{"class":2135}," print_info",[288,162047,149475],{"class":298},[288,162049,162050],{"class":290,"line":1387},[288,162051,162052],{"class":298},"    print_line()\n",[288,162054,162055,162057,162059,162061,162063,162065,162067,162069,162071],{"class":290,"line":1393},[288,162056,31472],{"class":347},[288,162058,299],{"class":298},[288,162060,351],{"class":294},[288,162062,156782],{"class":403},[288,162064,1193],{"class":347},[288,162066,79983],{"class":298},[288,162068,1243],{"class":347},[288,162070,109],{"class":403},[288,162072,305],{"class":298},[288,162074,162075,162077,162079,162081,162084,162086,162088,162090,162092],{"class":290,"line":1484},[288,162076,31472],{"class":347},[288,162078,299],{"class":298},[288,162080,351],{"class":294},[288,162082,162083],{"class":403},"\"年龄:",[288,162085,1193],{"class":347},[288,162087,70394],{"class":298},[288,162089,1243],{"class":347},[288,162091,109],{"class":403},[288,162093,305],{"class":298},[288,162095,162096],{"class":290,"line":1490},[288,162097,162052],{"class":298},[288,162099,162100],{"class":290,"line":1502},[288,162101,2572],{"emptyLinePlaceholder":217},[288,162103,162104],{"class":290,"line":1784},[288,162105,2572],{"emptyLinePlaceholder":217},[288,162107,162108,162111,162113,162115,162117],{"class":290,"line":1789},[288,162109,162110],{"class":298},"print_info(",[288,162112,149988],{"class":403},[288,162114,12608],{"class":298},[288,162116,947],{"class":347},[288,162118,305],{"class":298},[19,162120,162121],{},"这种方式可以把小功能组合成大功能。",[14,162123,162125],{"id":162124},"_511-参数检查","5.11 参数检查",[19,162127,162128],{},"函数内部可以检查参数是否合法。",[280,162130,162132],{"className":30551,"code":162131,"language":30553,"meta":205,"style":205},"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",[25,162133,162134,162143,162155,162161,162171,162175,162179,162196,162200,162212,162223,162229],{"__ignoreMap":205},[288,162135,162136,162138,162141],{"class":290,"line":291},[288,162137,32120],{"class":294},[288,162139,162140],{"class":2135}," divide",[288,162142,151193],{"class":298},[288,162144,162145,162147,162149,162151,162153],{"class":290,"line":206},[288,162146,3273],{"class":294},[288,162148,11055],{"class":298},[288,162150,3121],{"class":294},[288,162152,4265],{"class":347},[288,162154,3911],{"class":298},[288,162156,162157,162159],{"class":290,"line":1352},[288,162158,14925],{"class":294},[288,162160,152272],{"class":347},[288,162162,162163,162165,162167,162169],{"class":290,"line":1367},[288,162164,4262],{"class":294},[288,162166,11042],{"class":298},[288,162168,881],{"class":294},[288,162170,151204],{"class":298},[288,162172,162173],{"class":290,"line":1373},[288,162174,2572],{"emptyLinePlaceholder":217},[288,162176,162177],{"class":290,"line":1387},[288,162178,2572],{"emptyLinePlaceholder":217},[288,162180,162181,162183,162185,162188,162190,162192,162194],{"class":290,"line":1393},[288,162182,161406],{"class":298},[288,162184,344],{"class":294},[288,162186,162187],{"class":298}," divide(",[288,162189,743],{"class":347},[288,162191,12608],{"class":298},[288,162193,490],{"class":347},[288,162195,305],{"class":298},[288,162197,162198],{"class":290,"line":1484},[288,162199,2572],{"emptyLinePlaceholder":217},[288,162201,162202,162204,162206,162208,162210],{"class":290,"line":1490},[288,162203,1703],{"class":294},[288,162205,161652],{"class":298},[288,162207,39100],{"class":294},[288,162209,39106],{"class":347},[288,162211,3911],{"class":298},[288,162213,162214,162216,162218,162221],{"class":290,"line":1502},[288,162215,31472],{"class":347},[288,162217,299],{"class":298},[288,162219,162220],{"class":403},"\"除数不能为0\"",[288,162222,305],{"class":298},[288,162224,162225,162227],{"class":290,"line":1784},[288,162226,1873],{"class":294},[288,162228,3911],{"class":298},[288,162230,162231,162233],{"class":290,"line":1789},[288,162232,31472],{"class":347},[288,162234,76758],{"class":298},[14,162236,162238],{"id":162237},"_512-类型提示","5.12 类型提示",[19,162240,162241],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[280,162243,162245],{"className":30551,"code":162244,"language":30553,"meta":205,"style":205},"def add(a: int, b: int) -> int:\n    return a + b\n",[25,162246,162247,162270],{"__ignoreMap":205},[288,162248,162249,162251,162253,162256,162258,162261,162263,162266,162268],{"class":290,"line":291},[288,162250,32120],{"class":294},[288,162252,5382],{"class":2135},[288,162254,162255],{"class":298},"(a: ",[288,162257,302],{"class":347},[288,162259,162260],{"class":298},", b: ",[288,162262,302],{"class":347},[288,162264,162265],{"class":298},") -> ",[288,162267,302],{"class":347},[288,162269,3911],{"class":298},[288,162271,162272,162274,162276,162278],{"class":290,"line":206},[288,162273,4262],{"class":294},[288,162275,11042],{"class":298},[288,162277,778],{"class":294},[288,162279,151204],{"class":298},[19,162281,162282],{},"字符串参数：",[280,162284,162286],{"className":30551,"code":162285,"language":30553,"meta":205,"style":205},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[25,162287,162288,162305],{"__ignoreMap":205},[288,162289,162290,162292,162294,162297,162299,162301,162303],{"class":290,"line":291},[288,162291,32120],{"class":294},[288,162293,161096],{"class":2135},[288,162295,162296],{"class":298},"(name: ",[288,162298,1472],{"class":347},[288,162300,162265],{"class":298},[288,162302,95859],{"class":347},[288,162304,3911],{"class":298},[288,162306,162307,162309,162311,162313,162315,162317,162319,162321,162323],{"class":290,"line":206},[288,162308,31472],{"class":347},[288,162310,299],{"class":298},[288,162312,351],{"class":294},[288,162314,157154],{"class":403},[288,162316,1193],{"class":347},[288,162318,79983],{"class":298},[288,162320,1243],{"class":347},[288,162322,109],{"class":403},[288,162324,305],{"class":298},[19,162326,162327],{},"列表参数：",[280,162329,162331],{"className":30551,"code":162330,"language":30553,"meta":205,"style":205},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[25,162332,162333,162352,162360,162372,162381],{"__ignoreMap":205},[288,162334,162335,162337,162340,162343,162345,162348,162350],{"class":290,"line":291},[288,162336,32120],{"class":294},[288,162338,162339],{"class":2135}," get_total",[288,162341,162342],{"class":298},"(numbers: list[",[288,162344,302],{"class":347},[288,162346,162347],{"class":298},"]) -> ",[288,162349,302],{"class":347},[288,162351,3911],{"class":298},[288,162353,162354,162356,162358],{"class":290,"line":206},[288,162355,159407],{"class":298},[288,162357,344],{"class":294},[288,162359,47506],{"class":347},[288,162361,162362,162364,162367,162369],{"class":290,"line":1352},[288,162363,3373],{"class":294},[288,162365,162366],{"class":298}," number ",[288,162368,26216],{"class":294},[288,162370,162371],{"class":298}," numbers:\n",[288,162373,162374,162376,162378],{"class":290,"line":1367},[288,162375,160082],{"class":298},[288,162377,9650],{"class":294},[288,162379,162380],{"class":298}," number\n",[288,162382,162383,162385],{"class":290,"line":1373},[288,162384,4262],{"class":294},[288,162386,162387],{"class":298}," total\n",[19,162389,162390],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162392,162394],{"id":162393},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[280,162396,162398],{"className":30551,"code":162397,"language":30553,"meta":205,"style":205},"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",[25,162399,162400,162410,162414,162418,162426,162437,162447,162457,162467,162477,162481,162485,162494,162516,162520,162524,162533,162539,162559,162571,162582,162586,162595,162606,162611,162615,162619,162628,162634,162653,162665,162675,162679,162690,162700,162704,162712,162723,162727,162731,162735,162743,162748,162762,162766,162778,162783,162795,162800,162812,162817,162829,162839,162843,162849],{"__ignoreMap":205},[288,162401,162402,162405,162407],{"class":290,"line":291},[288,162403,162404],{"class":298},"balance ",[288,162406,344],{"class":294},[288,162408,162409],{"class":347}," 1000\n",[288,162411,162412],{"class":290,"line":206},[288,162413,2572],{"emptyLinePlaceholder":217},[288,162415,162416],{"class":290,"line":1352},[288,162417,2572],{"emptyLinePlaceholder":217},[288,162419,162420,162422,162424],{"class":290,"line":1367},[288,162421,32120],{"class":294},[288,162423,152133],{"class":2135},[288,162425,32126],{"class":298},[288,162427,162428,162430,162432,162435],{"class":290,"line":1373},[288,162429,31472],{"class":347},[288,162431,299],{"class":298},[288,162433,162434],{"class":403},"\"====== ATM ======\"",[288,162436,305],{"class":298},[288,162438,162439,162441,162443,162445],{"class":290,"line":1387},[288,162440,31472],{"class":347},[288,162442,299],{"class":298},[288,162444,160748],{"class":403},[288,162446,305],{"class":298},[288,162448,162449,162451,162453,162455],{"class":290,"line":1393},[288,162450,31472],{"class":347},[288,162452,299],{"class":298},[288,162454,160759],{"class":403},[288,162456,305],{"class":298},[288,162458,162459,162461,162463,162465],{"class":290,"line":1484},[288,162460,31472],{"class":347},[288,162462,299],{"class":298},[288,162464,160770],{"class":403},[288,162466,305],{"class":298},[288,162468,162469,162471,162473,162475],{"class":290,"line":1490},[288,162470,31472],{"class":347},[288,162472,299],{"class":298},[288,162474,160781],{"class":403},[288,162476,305],{"class":298},[288,162478,162479],{"class":290,"line":1502},[288,162480,2572],{"emptyLinePlaceholder":217},[288,162482,162483],{"class":290,"line":1784},[288,162484,2572],{"emptyLinePlaceholder":217},[288,162486,162487,162489,162492],{"class":290,"line":1789},[288,162488,32120],{"class":294},[288,162490,162491],{"class":2135}," show_balance",[288,162493,32126],{"class":298},[288,162495,162496,162498,162500,162502,162505,162507,162510,162512,162514],{"class":290,"line":1795},[288,162497,31472],{"class":347},[288,162499,299],{"class":298},[288,162501,351],{"class":294},[288,162503,162504],{"class":403},"\"当前余额:",[288,162506,1193],{"class":347},[288,162508,162509],{"class":298},"balance",[288,162511,1243],{"class":347},[288,162513,157112],{"class":403},[288,162515,305],{"class":298},[288,162517,162518],{"class":290,"line":1800},[288,162519,2572],{"emptyLinePlaceholder":217},[288,162521,162522],{"class":290,"line":1814},[288,162523,2572],{"emptyLinePlaceholder":217},[288,162525,162526,162528,162531],{"class":290,"line":1819},[288,162527,32120],{"class":294},[288,162529,162530],{"class":2135}," save_money",[288,162532,32126],{"class":298},[288,162534,162535,162537],{"class":290,"line":1825},[288,162536,161961],{"class":294},[288,162538,150199],{"class":298},[288,162540,162541,162544,162546,162548,162550,162552,162554,162557],{"class":290,"line":1846},[288,162542,162543],{"class":298},"    money ",[288,162545,344],{"class":294},[288,162547,109970],{"class":347},[288,162549,299],{"class":298},[288,162551,53994],{"class":347},[288,162553,299],{"class":298},[288,162555,162556],{"class":403},"\"请输入存款金额:\"",[288,162558,30670],{"class":298},[288,162560,162561,162563,162565,162567,162569],{"class":290,"line":1851},[288,162562,3273],{"class":294},[288,162564,150242],{"class":298},[288,162566,1760],{"class":294},[288,162568,4265],{"class":347},[288,162570,3911],{"class":298},[288,162572,162573,162575,162577,162580],{"class":290,"line":1865},[288,162574,32624],{"class":347},[288,162576,299],{"class":298},[288,162578,162579],{"class":403},"\"金额必须大于0\"",[288,162581,305],{"class":298},[288,162583,162584],{"class":290,"line":1870},[288,162585,152461],{"class":294},[288,162587,162588,162591,162593],{"class":290,"line":1899},[288,162589,162590],{"class":298},"    balance ",[288,162592,9650],{"class":294},[288,162594,150275],{"class":298},[288,162596,162597,162599,162601,162604],{"class":290,"line":1904},[288,162598,31472],{"class":347},[288,162600,299],{"class":298},[288,162602,162603],{"class":403},"\"存款成功\"",[288,162605,305],{"class":298},[288,162607,162608],{"class":290,"line":1921},[288,162609,162610],{"class":298},"    show_balance()\n",[288,162612,162613],{"class":290,"line":1926},[288,162614,2572],{"emptyLinePlaceholder":217},[288,162616,162617],{"class":290,"line":1931},[288,162618,2572],{"emptyLinePlaceholder":217},[288,162620,162621,162623,162626],{"class":290,"line":1936},[288,162622,32120],{"class":294},[288,162624,162625],{"class":2135}," withdraw_money",[288,162627,32126],{"class":298},[288,162629,162630,162632],{"class":290,"line":1950},[288,162631,161961],{"class":294},[288,162633,150199],{"class":298},[288,162635,162636,162638,162640,162642,162644,162646,162648,162651],{"class":290,"line":1955},[288,162637,162543],{"class":298},[288,162639,344],{"class":294},[288,162641,109970],{"class":347},[288,162643,299],{"class":298},[288,162645,53994],{"class":347},[288,162647,299],{"class":298},[288,162649,162650],{"class":403},"\"请输入取款金额:\"",[288,162652,30670],{"class":298},[288,162654,162655,162657,162659,162661,162663],{"class":290,"line":2749},[288,162656,3273],{"class":294},[288,162658,150242],{"class":298},[288,162660,1760],{"class":294},[288,162662,4265],{"class":347},[288,162664,3911],{"class":298},[288,162666,162667,162669,162671,162673],{"class":290,"line":2763},[288,162668,32624],{"class":347},[288,162670,299],{"class":298},[288,162672,162579],{"class":403},[288,162674,305],{"class":298},[288,162676,162677],{"class":290,"line":2771},[288,162678,152461],{"class":294},[288,162680,162681,162683,162685,162687],{"class":290,"line":2776},[288,162682,3273],{"class":294},[288,162684,150242],{"class":298},[288,162686,1257],{"class":294},[288,162688,162689],{"class":298}," balance:\n",[288,162691,162692,162694,162696,162698],{"class":290,"line":2782},[288,162693,32624],{"class":347},[288,162695,299],{"class":298},[288,162697,150337],{"class":403},[288,162699,305],{"class":298},[288,162701,162702],{"class":290,"line":2788},[288,162703,152461],{"class":294},[288,162705,162706,162708,162710],{"class":290,"line":2793},[288,162707,162590],{"class":298},[288,162709,150352],{"class":294},[288,162711,150275],{"class":298},[288,162713,162714,162716,162718,162721],{"class":290,"line":8121},[288,162715,31472],{"class":347},[288,162717,299],{"class":298},[288,162719,162720],{"class":403},"\"取款成功\"",[288,162722,305],{"class":298},[288,162724,162725],{"class":290,"line":8145},[288,162726,162610],{"class":298},[288,162728,162729],{"class":290,"line":8150},[288,162730,2572],{"emptyLinePlaceholder":217},[288,162732,162733],{"class":290,"line":8156},[288,162734,2572],{"emptyLinePlaceholder":217},[288,162736,162737,162739,162741],{"class":290,"line":8183},[288,162738,108836],{"class":294},[288,162740,95465],{"class":347},[288,162742,3911],{"class":298},[288,162744,162745],{"class":290,"line":8188},[288,162746,162747],{"class":298},"    show_menu()\n",[288,162749,162750,162752,162754,162756,162758,162760],{"class":290,"line":8194},[288,162751,160792],{"class":298},[288,162753,344],{"class":294},[288,162755,60778],{"class":347},[288,162757,299],{"class":298},[288,162759,153173],{"class":403},[288,162761,305],{"class":298},[288,162763,162764],{"class":290,"line":8206},[288,162765,2572],{"emptyLinePlaceholder":217},[288,162767,162768,162770,162772,162774,162776],{"class":290,"line":8218},[288,162769,3273],{"class":294},[288,162771,153186],{"class":298},[288,162773,3121],{"class":294},[288,162775,153191],{"class":403},[288,162777,3911],{"class":298},[288,162779,162780],{"class":290,"line":8230},[288,162781,162782],{"class":298},"        show_balance()\n",[288,162784,162785,162787,162789,162791,162793],{"class":290,"line":9889},[288,162786,39466],{"class":294},[288,162788,153186],{"class":298},[288,162790,3121],{"class":294},[288,162792,153210],{"class":403},[288,162794,3911],{"class":298},[288,162796,162797],{"class":290,"line":9914},[288,162798,162799],{"class":298},"        save_money()\n",[288,162801,162802,162804,162806,162808,162810],{"class":290,"line":9937},[288,162803,39466],{"class":294},[288,162805,153186],{"class":298},[288,162807,3121],{"class":294},[288,162809,153228],{"class":403},[288,162811,3911],{"class":298},[288,162813,162814],{"class":290,"line":9961},[288,162815,162816],{"class":298},"        withdraw_money()\n",[288,162818,162819,162821,162823,162825,162827],{"class":290,"line":9966},[288,162820,39466],{"class":294},[288,162822,153186],{"class":298},[288,162824,3121],{"class":294},[288,162826,153282],{"class":403},[288,162828,3911],{"class":298},[288,162830,162831,162833,162835,162837],{"class":290,"line":9971},[288,162832,32624],{"class":347},[288,162834,299],{"class":298},[288,162836,153293],{"class":403},[288,162838,305],{"class":298},[288,162840,162841],{"class":290,"line":9976},[288,162842,31800],{"class":294},[288,162844,162845,162847],{"class":290,"line":9985},[288,162846,158122],{"class":294},[288,162848,3911],{"class":298},[288,162850,162851,162853,162855,162857],{"class":290,"line":9990},[288,162852,32624],{"class":347},[288,162854,299],{"class":298},[288,162856,153314],{"class":403},[288,162858,305],{"class":298},[19,162860,162861],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162863,162865],{"id":162864},"_514-易错点","5.14 易错点",[243,162867,162868,162871,162874,162879,162884,162887],{},[246,162869,162870],{},"函数定义后必须调用才会执行。",[246,162872,162873],{},"函数名后面有括号才是调用。",[246,162875,162876,162878],{},[25,162877,17219],{}," 后面的代码不会执行。",[246,162880,162881,162882,28558],{},"没有返回值的函数默认返回 ",[25,162883,95859],{},[246,162885,162886],{},"局部变量不能在函数外部访问。",[246,162888,162889,162890,162892],{},"不要滥用 ",[25,162891,161926],{},"，更好的方式是让函数返回新值。",[19,162894,162895,162896,162898],{},"例如不用 ",[25,162897,161926],{}," 改写存款：",[280,162900,162902],{"className":30551,"code":162901,"language":30553,"meta":205,"style":205},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[25,162903,162904,162913,162924,162928,162932,162940,162953],{"__ignoreMap":205},[288,162905,162906,162908,162910],{"class":290,"line":291},[288,162907,32120],{"class":294},[288,162909,162530],{"class":2135},[288,162911,162912],{"class":298},"(balance, money):\n",[288,162914,162915,162917,162920,162922],{"class":290,"line":206},[288,162916,4262],{"class":294},[288,162918,162919],{"class":298}," balance ",[288,162921,778],{"class":294},[288,162923,150275],{"class":298},[288,162925,162926],{"class":290,"line":1352},[288,162927,2572],{"emptyLinePlaceholder":217},[288,162929,162930],{"class":290,"line":1367},[288,162931,2572],{"emptyLinePlaceholder":217},[288,162933,162934,162936,162938],{"class":290,"line":1373},[288,162935,162404],{"class":298},[288,162937,344],{"class":294},[288,162939,162409],{"class":347},[288,162941,162942,162944,162946,162949,162951],{"class":290,"line":1387},[288,162943,162404],{"class":298},[288,162945,344],{"class":294},[288,162947,162948],{"class":298}," save_money(balance, ",[288,162950,1894],{"class":347},[288,162952,305],{"class":298},[288,162954,162955,162957],{"class":290,"line":1393},[288,162956,30588],{"class":347},[288,162958,162959],{"class":298},"(balance)\n",[14,162961,162963],{"id":162962},"_515-本章练习","5.15 本章练习",[243,162965,162966,162973,162979,162985,162991],{},[246,162967,162968,162969,162972],{},"定义函数 ",[25,162970,162971],{},"print_student(name, age)","，输出学生信息。",[246,162974,162968,162975,162978],{},[25,162976,162977],{},"get_max(a, b, c)","，返回三个数中的最大值。",[246,162980,162968,162981,162984],{},[25,162982,162983],{},"is_even(num)","，判断一个数是否为偶数。",[246,162986,162968,162987,162990],{},[25,162988,162989],{},"calculate_bmi(weight, height)","，返回 BMI。",[246,162992,162993],{},"把第 4 章的菜单程序拆分成多个函数。",[5299,162995,162996],{},"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":205,"searchDepth":206,"depth":206,"links":162998},[162999,163000,163001,163002,163003,163004,163005,163006,163007,163011,163012,163013,163014,163015,163016],{"id":161019,"depth":206,"text":161020},{"id":161060,"depth":206,"text":161061},{"id":161150,"depth":206,"text":161151},{"id":161231,"depth":206,"text":161232},{"id":161364,"depth":206,"text":161365},{"id":161486,"depth":206,"text":161487},{"id":161608,"depth":206,"text":161609},{"id":161685,"depth":206,"text":161686},{"id":161807,"depth":206,"text":161808,"children":163008},[163009,163010],{"id":161811,"depth":1352,"text":161812},{"id":161869,"depth":1352,"text":161870},{"id":161998,"depth":206,"text":161999},{"id":162124,"depth":206,"text":162125},{"id":162237,"depth":206,"text":162238},{"id":162393,"depth":206,"text":162394},{"id":162864,"depth":206,"text":162865},{"id":162962,"depth":206,"text":162963},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161011,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163023,"title":163024,"body":163025,"description":214,"extension":215,"meta":166069,"navigation":217,"path":166070,"seo":166071,"stem":166072,"__hash__":166073},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163026,"toc":166050},[163027,163030,163034,163037,163040,163144,163147,163151,163154,163234,163237,163241,163244,163304,163307,163343,163346,163361,163365,163438,163441,163496,163499,163569,163572,163656,163666,163724,163728,163773,163776,163802,163805,163911,163915,163918,163960,163963,164027,164030,164034,164037,164098,164101,164131,164134,164172,164176,164179,164188,164191,164315,164318,164359,164363,164366,164377,164417,164420,164435,164440,164443,164510,164513,164603,164607,164610,164658,164661,164688,164690,164720,164723,164743,164746,164777,164780,164813,164817,164820,164844,164847,164871,164874,164898,164902,164905,165035,165038,165118,165121,165196,165200,165203,165253,165256,165298,165301,165325,165327,165351,165354,165409,165412,165478,165482,165485,165488,165526,165529,165582,165585,165631,165634,165667,165670,165674,165993,165997,166026,166030,166047],[10,163028,163024],{"id":163029},"_6-数据容器",[14,163031,163033],{"id":163032},"_61-什么是数据容器","6.1 什么是数据容器",[19,163035,163036],{},"数据容器用于一次保存多个数据。",[19,163038,163039],{},"常见容器：",[436,163041,163042,163059],{},[439,163043,163044],{},[442,163045,163046,163048,163051,163054,163057],{},[445,163047,25944],{},[445,163049,163050],{},"是否有序",[445,163052,163053],{},"是否可变",[445,163055,163056],{},"是否允许重复",[445,163058,27665],{},[483,163060,163061,163079,163095,163110,163127],{},[442,163062,163063,163066,163069,163072,163075],{},[488,163064,163065],{},"list列表",[488,163067,163068],{},"有序",[488,163070,163071],{},"可变",[488,163073,163074],{},"允许",[488,163076,163077],{},[25,163078,155357],{},[442,163080,163081,163084,163086,163089,163091],{},[488,163082,163083],{},"tuple元组",[488,163085,163068],{},[488,163087,163088],{},"不可变",[488,163090,163074],{},[488,163092,163093],{},[25,163094,155370],{},[442,163096,163097,163100,163102,163104,163106],{},[488,163098,163099],{},"str字符串",[488,163101,163068],{},[488,163103,163088],{},[488,163105,163074],{},[488,163107,163108],{},[25,163109,155980],{},[442,163111,163112,163115,163118,163120,163123],{},[488,163113,163114],{},"set集合",[488,163116,163117],{},"无序",[488,163119,163071],{},[488,163121,163122],{},"不允许",[488,163124,163125],{},[25,163126,155395],{},[442,163128,163129,163132,163134,163136,163139],{},[488,163130,163131],{},"dict字典",[488,163133,163068],{},[488,163135,163071],{},[488,163137,163138],{},"key不允许重复",[488,163140,163141],{},[25,163142,163143],{},"{\"name\": \"小明\"}",[19,163145,163146],{},"Python 3.7 之后，字典保持插入顺序。",[14,163148,163150],{"id":163149},"_62-列表list","6.2 列表list",[19,163152,163153],{},"列表用于保存一组有顺序的数据。",[280,163155,163157],{"className":30551,"code":163156,"language":30553,"meta":205,"style":205},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[25,163158,163159,163179,163204,163225],{"__ignoreMap":205},[288,163160,163161,163163,163165,163167,163169,163171,163173,163175,163177],{"class":290,"line":291},[288,163162,160480],{"class":298},[288,163164,344],{"class":294},[288,163166,52399],{"class":298},[288,163168,149988],{"class":403},[288,163170,12608],{"class":298},[288,163172,151036],{"class":403},[288,163174,12608],{"class":298},[288,163176,159831],{"class":403},[288,163178,33419],{"class":298},[288,163180,163181,163184,163186,163188,163190,163192,163194,163196,163198,163200,163202],{"class":290,"line":206},[288,163182,163183],{"class":298},"numbers ",[288,163185,344],{"class":294},[288,163187,52399],{"class":298},[288,163189,516],{"class":347},[288,163191,12608],{"class":298},[288,163193,376],{"class":347},[288,163195,12608],{"class":298},[288,163197,370],{"class":347},[288,163199,12608],{"class":298},[288,163201,590],{"class":347},[288,163203,33419],{"class":298},[288,163205,163206,163209,163211,163213,163215,163217,163219,163221,163223],{"class":290,"line":1352},[288,163207,163208],{"class":298},"mixed ",[288,163210,344],{"class":294},[288,163212,52399],{"class":298},[288,163214,149988],{"class":403},[288,163216,12608],{"class":298},[288,163218,947],{"class":347},[288,163220,12608],{"class":298},[288,163222,31649],{"class":347},[288,163224,33419],{"class":298},[288,163226,163227,163230,163232],{"class":290,"line":1367},[288,163228,163229],{"class":298},"empty ",[288,163231,344],{"class":294},[288,163233,52011],{"class":298},[19,163235,163236],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163238,163240],{"id":163239},"_63-列表索引","6.3 列表索引",[19,163242,163243],{},"正向索引从 0 开始：",[280,163245,163247],{"className":30551,"code":163246,"language":30553,"meta":205,"style":205},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[25,163248,163249,163269,163273,163284,163294],{"__ignoreMap":205},[288,163250,163251,163253,163255,163257,163259,163261,163263,163265,163267],{"class":290,"line":291},[288,163252,160480],{"class":298},[288,163254,344],{"class":294},[288,163256,52399],{"class":298},[288,163258,149988],{"class":403},[288,163260,12608],{"class":298},[288,163262,151036],{"class":403},[288,163264,12608],{"class":298},[288,163266,159831],{"class":403},[288,163268,33419],{"class":298},[288,163270,163271],{"class":290,"line":206},[288,163272,2572],{"emptyLinePlaceholder":217},[288,163274,163275,163277,163280,163282],{"class":290,"line":1352},[288,163276,30588],{"class":347},[288,163278,163279],{"class":298},"(names[",[288,163281,490],{"class":347},[288,163283,4829],{"class":298},[288,163285,163286,163288,163290,163292],{"class":290,"line":1367},[288,163287,30588],{"class":347},[288,163289,163279],{"class":298},[288,163291,516],{"class":347},[288,163293,4829],{"class":298},[288,163295,163296,163298,163300,163302],{"class":290,"line":1373},[288,163297,30588],{"class":347},[288,163299,163279],{"class":298},[288,163301,376],{"class":347},[288,163303,4829],{"class":298},[19,163305,163306],{},"反向索引从 -1 开始：",[280,163308,163310],{"className":30551,"code":163309,"language":30553,"meta":205,"style":205},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[25,163311,163312,163328],{"__ignoreMap":205},[288,163313,163314,163316,163318,163320,163322,163325],{"class":290,"line":291},[288,163315,30588],{"class":347},[288,163317,163279],{"class":298},[288,163319,829],{"class":294},[288,163321,516],{"class":347},[288,163323,163324],{"class":298},"])  ",[288,163326,163327],{"class":357},"# 小刚\n",[288,163329,163330,163332,163334,163336,163338,163340],{"class":290,"line":206},[288,163331,30588],{"class":347},[288,163333,163279],{"class":298},[288,163335,829],{"class":294},[288,163337,376],{"class":347},[288,163339,163324],{"class":298},[288,163341,163342],{"class":357},"# 小红\n",[19,163344,163345],{},"索引越界会报错：",[280,163347,163349],{"className":30551,"code":163348,"language":30553,"meta":205,"style":205},"print(names[3])\n",[25,163350,163351],{"__ignoreMap":205},[288,163352,163353,163355,163357,163359],{"class":290,"line":291},[288,163354,30588],{"class":347},[288,163356,163279],{"class":298},[288,163358,370],{"class":347},[288,163360,4829],{"class":298},[14,163362,163364],{"id":163363},"_64-列表常用方法","6.4 列表常用方法",[280,163366,163368],{"className":30551,"code":163367,"language":30553,"meta":205,"style":205},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[25,163369,163370,163386,163390,163399,163413,163427,163431],{"__ignoreMap":205},[288,163371,163372,163374,163376,163378,163380,163382,163384],{"class":290,"line":291},[288,163373,160480],{"class":298},[288,163375,344],{"class":294},[288,163377,52399],{"class":298},[288,163379,149988],{"class":403},[288,163381,12608],{"class":298},[288,163383,151036],{"class":403},[288,163385,33419],{"class":298},[288,163387,163388],{"class":290,"line":206},[288,163389,2572],{"emptyLinePlaceholder":217},[288,163391,163392,163395,163397],{"class":290,"line":1352},[288,163393,163394],{"class":298},"names.append(",[288,163396,159831],{"class":403},[288,163398,305],{"class":298},[288,163400,163401,163404,163406,163408,163411],{"class":290,"line":1367},[288,163402,163403],{"class":298},"names.insert(",[288,163405,516],{"class":347},[288,163407,12608],{"class":298},[288,163409,163410],{"class":403},"\"小李\"",[288,163412,305],{"class":298},[288,163414,163415,163418,163420,163422,163425],{"class":290,"line":1373},[288,163416,163417],{"class":298},"names.extend([",[288,163419,8856],{"class":403},[288,163421,12608],{"class":298},[288,163423,163424],{"class":403},"\"小赵\"",[288,163426,4829],{"class":298},[288,163428,163429],{"class":290,"line":1387},[288,163430,2572],{"emptyLinePlaceholder":217},[288,163432,163433,163435],{"class":290,"line":1393},[288,163434,30588],{"class":347},[288,163436,163437],{"class":298},"(names)\n",[19,163439,163440],{},"删除元素：",[280,163442,163444],{"className":30551,"code":163443,"language":30553,"meta":205,"style":205},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[25,163445,163446,163455,163465,163479,163491],{"__ignoreMap":205},[288,163447,163448,163451,163453],{"class":290,"line":291},[288,163449,163450],{"class":298},"names.remove(",[288,163452,151036],{"class":403},[288,163454,305],{"class":298},[288,163456,163457,163460,163462],{"class":290,"line":206},[288,163458,163459],{"class":298},"last ",[288,163461,344],{"class":294},[288,163463,163464],{"class":298}," names.pop()\n",[288,163466,163467,163470,163472,163475,163477],{"class":290,"line":1352},[288,163468,163469],{"class":298},"first ",[288,163471,344],{"class":294},[288,163473,163474],{"class":298}," names.pop(",[288,163476,490],{"class":347},[288,163478,305],{"class":298},[288,163480,163481,163484,163487,163489],{"class":290,"line":1367},[288,163482,163483],{"class":294},"del",[288,163485,163486],{"class":298}," names[",[288,163488,490],{"class":347},[288,163490,33419],{"class":298},[288,163492,163493],{"class":290,"line":1373},[288,163494,163495],{"class":298},"names.clear()\n",[19,163497,163498],{},"查询和统计：",[280,163500,163502],{"className":30551,"code":163501,"language":30553,"meta":205,"style":205},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[25,163503,163504,163532,163536,163547,163558],{"__ignoreMap":205},[288,163505,163506,163508,163510,163512,163514,163516,163518,163520,163522,163524,163526,163528,163530],{"class":290,"line":291},[288,163507,163183],{"class":298},[288,163509,344],{"class":294},[288,163511,52399],{"class":298},[288,163513,516],{"class":347},[288,163515,12608],{"class":298},[288,163517,376],{"class":347},[288,163519,12608],{"class":298},[288,163521,370],{"class":347},[288,163523,12608],{"class":298},[288,163525,376],{"class":347},[288,163527,12608],{"class":298},[288,163529,590],{"class":347},[288,163531,33419],{"class":298},[288,163533,163534],{"class":290,"line":206},[288,163535,2572],{"emptyLinePlaceholder":217},[288,163537,163538,163540,163543,163545],{"class":290,"line":1352},[288,163539,30588],{"class":347},[288,163541,163542],{"class":298},"(numbers.index(",[288,163544,370],{"class":347},[288,163546,30670],{"class":298},[288,163548,163549,163551,163554,163556],{"class":290,"line":1367},[288,163550,30588],{"class":347},[288,163552,163553],{"class":298},"(numbers.count(",[288,163555,376],{"class":347},[288,163557,30670],{"class":298},[288,163559,163560,163562,163564,163566],{"class":290,"line":1373},[288,163561,30588],{"class":347},[288,163563,299],{"class":298},[288,163565,7531],{"class":347},[288,163567,163568],{"class":298},"(numbers))\n",[19,163570,163571],{},"排序：",[280,163573,163575],{"className":30551,"code":163574,"language":30553,"meta":205,"style":205},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[25,163576,163577,163601,163605,163610,163617,163621,163635,163641,163645,163650],{"__ignoreMap":205},[288,163578,163579,163581,163583,163585,163587,163589,163591,163593,163595,163597,163599],{"class":290,"line":291},[288,163580,163183],{"class":298},[288,163582,344],{"class":294},[288,163584,52399],{"class":298},[288,163586,370],{"class":347},[288,163588,12608],{"class":298},[288,163590,516],{"class":347},[288,163592,12608],{"class":298},[288,163594,616],{"class":347},[288,163596,12608],{"class":298},[288,163598,376],{"class":347},[288,163600,33419],{"class":298},[288,163602,163603],{"class":290,"line":206},[288,163604,2572],{"emptyLinePlaceholder":217},[288,163606,163607],{"class":290,"line":1352},[288,163608,163609],{"class":298},"numbers.sort()\n",[288,163611,163612,163614],{"class":290,"line":1367},[288,163613,30588],{"class":347},[288,163615,163616],{"class":298},"(numbers)\n",[288,163618,163619],{"class":290,"line":1373},[288,163620,2572],{"emptyLinePlaceholder":217},[288,163622,163623,163626,163629,163631,163633],{"class":290,"line":1387},[288,163624,163625],{"class":298},"numbers.sort(",[288,163627,163628],{"class":5389},"reverse",[288,163630,344],{"class":294},[288,163632,31649],{"class":347},[288,163634,305],{"class":298},[288,163636,163637,163639],{"class":290,"line":1393},[288,163638,30588],{"class":347},[288,163640,163616],{"class":298},[288,163642,163643],{"class":290,"line":1484},[288,163644,2572],{"emptyLinePlaceholder":217},[288,163646,163647],{"class":290,"line":1490},[288,163648,163649],{"class":298},"numbers.reverse()\n",[288,163651,163652,163654],{"class":290,"line":1502},[288,163653,30588],{"class":347},[288,163655,163616],{"class":298},[19,163657,163658,163661,163662,163665],{},[25,163659,163660],{},"sort()"," 会修改原列表，",[25,163663,163664],{},"sorted()"," 返回新列表。",[280,163667,163669],{"className":30551,"code":163668,"language":30553,"meta":205,"style":205},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[25,163670,163671,163695,163707,163711,163717],{"__ignoreMap":205},[288,163672,163673,163675,163677,163679,163681,163683,163685,163687,163689,163691,163693],{"class":290,"line":291},[288,163674,163183],{"class":298},[288,163676,344],{"class":294},[288,163678,52399],{"class":298},[288,163680,370],{"class":347},[288,163682,12608],{"class":298},[288,163684,516],{"class":347},[288,163686,12608],{"class":298},[288,163688,616],{"class":347},[288,163690,12608],{"class":298},[288,163692,376],{"class":347},[288,163694,33419],{"class":298},[288,163696,163697,163700,163702,163705],{"class":290,"line":206},[288,163698,163699],{"class":298},"new_numbers ",[288,163701,344],{"class":294},[288,163703,163704],{"class":347}," sorted",[288,163706,163616],{"class":298},[288,163708,163709],{"class":290,"line":1352},[288,163710,2572],{"emptyLinePlaceholder":217},[288,163712,163713,163715],{"class":290,"line":1367},[288,163714,30588],{"class":347},[288,163716,163616],{"class":298},[288,163718,163719,163721],{"class":290,"line":1373},[288,163720,30588],{"class":347},[288,163722,163723],{"class":298},"(new_numbers)\n",[14,163725,163727],{"id":163726},"_65-列表遍历","6.5 列表遍历",[280,163729,163731],{"className":30551,"code":163730,"language":30553,"meta":205,"style":205},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[25,163732,163733,163753,163757,163767],{"__ignoreMap":205},[288,163734,163735,163737,163739,163741,163743,163745,163747,163749,163751],{"class":290,"line":291},[288,163736,160480],{"class":298},[288,163738,344],{"class":294},[288,163740,52399],{"class":298},[288,163742,149988],{"class":403},[288,163744,12608],{"class":298},[288,163746,151036],{"class":403},[288,163748,12608],{"class":298},[288,163750,159831],{"class":403},[288,163752,33419],{"class":298},[288,163754,163755],{"class":290,"line":206},[288,163756,2572],{"emptyLinePlaceholder":217},[288,163758,163759,163761,163763,163765],{"class":290,"line":1352},[288,163760,3197],{"class":294},[288,163762,160516],{"class":298},[288,163764,26216],{"class":294},[288,163766,160521],{"class":298},[288,163768,163769,163771],{"class":290,"line":1367},[288,163770,31472],{"class":347},[288,163772,150760],{"class":298},[19,163774,163775],{},"需要索引时：",[280,163777,163779],{"className":30551,"code":163778,"language":30553,"meta":205,"style":205},"for index, name in enumerate(names):\n    print(index, name)\n",[25,163780,163781,163795],{"__ignoreMap":205},[288,163782,163783,163785,163788,163790,163792],{"class":290,"line":291},[288,163784,3197],{"class":294},[288,163786,163787],{"class":298}," index, name ",[288,163789,26216],{"class":294},[288,163791,31779],{"class":347},[288,163793,163794],{"class":298},"(names):\n",[288,163796,163797,163799],{"class":290,"line":206},[288,163798,31472],{"class":347},[288,163800,163801],{"class":298},"(index, name)\n",[19,163803,163804],{},"统计总分：",[280,163806,163808],{"className":30551,"code":163807,"language":30553,"meta":205,"style":205},"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",[25,163809,163810,163835,163843,163847,163858,163866,163870,163887],{"__ignoreMap":205},[288,163811,163812,163815,163817,163819,163821,163823,163825,163827,163829,163831,163833],{"class":290,"line":291},[288,163813,163814],{"class":298},"scores ",[288,163816,344],{"class":294},[288,163818,52399],{"class":298},[288,163820,1159],{"class":347},[288,163822,12608],{"class":298},[288,163824,1033],{"class":347},[288,163826,12608],{"class":298},[288,163828,551],{"class":347},[288,163830,12608],{"class":298},[288,163832,858],{"class":347},[288,163834,33419],{"class":298},[288,163836,163837,163839,163841],{"class":290,"line":206},[288,163838,157360],{"class":298},[288,163840,344],{"class":294},[288,163842,47506],{"class":347},[288,163844,163845],{"class":290,"line":1352},[288,163846,2572],{"emptyLinePlaceholder":217},[288,163848,163849,163851,163853,163855],{"class":290,"line":1367},[288,163850,3197],{"class":294},[288,163852,157883],{"class":298},[288,163854,26216],{"class":294},[288,163856,163857],{"class":298}," scores:\n",[288,163859,163860,163862,163864],{"class":290,"line":1373},[288,163861,159407],{"class":298},[288,163863,9650],{"class":294},[288,163865,1751],{"class":298},[288,163867,163868],{"class":290,"line":1387},[288,163869,2572],{"emptyLinePlaceholder":217},[288,163871,163872,163875,163877,163880,163882,163884],{"class":290,"line":1393},[288,163873,163874],{"class":298},"avg ",[288,163876,344],{"class":294},[288,163878,163879],{"class":298}," total ",[288,163881,881],{"class":294},[288,163883,7504],{"class":347},[288,163885,163886],{"class":298},"(scores)\n",[288,163888,163889,163891,163893,163895,163898,163900,163903,163905,163907,163909],{"class":290,"line":1484},[288,163890,30588],{"class":347},[288,163892,299],{"class":298},[288,163894,351],{"class":294},[288,163896,163897],{"class":403},"\"平均分:",[288,163899,1193],{"class":347},[288,163901,163902],{"class":298},"avg",[288,163904,157259],{"class":294},[288,163906,1243],{"class":347},[288,163908,109],{"class":403},[288,163910,305],{"class":298},[14,163912,163914],{"id":163913},"_66-元组tuple","6.6 元组tuple",[19,163916,163917],{},"元组和列表类似，但不可修改。",[280,163919,163921],{"className":30551,"code":163920,"language":30553,"meta":205,"style":205},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[25,163922,163923,163940],{"__ignoreMap":205},[288,163924,163925,163928,163930,163932,163934,163936,163938],{"class":290,"line":291},[288,163926,163927],{"class":298},"point ",[288,163929,344],{"class":294},[288,163931,1830],{"class":298},[288,163933,743],{"class":347},[288,163935,12608],{"class":298},[288,163937,997],{"class":347},[288,163939,305],{"class":298},[288,163941,163942,163944,163946,163948,163950,163952,163954,163956,163958],{"class":290,"line":206},[288,163943,116487],{"class":298},[288,163945,344],{"class":294},[288,163947,1830],{"class":298},[288,163949,149988],{"class":403},[288,163951,12608],{"class":298},[288,163953,947],{"class":347},[288,163955,12608],{"class":298},[288,163957,69442],{"class":403},[288,163959,305],{"class":298},[19,163961,163962],{},"单元素元组必须加逗号：",[280,163964,163966],{"className":30551,"code":163965,"language":30553,"meta":205,"style":205},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[25,163967,163968,163982,163995,163999,164013],{"__ignoreMap":205},[288,163969,163970,163973,163975,163977,163979],{"class":290,"line":291},[288,163971,163972],{"class":298},"t1 ",[288,163974,344],{"class":294},[288,163976,1830],{"class":298},[288,163978,743],{"class":347},[288,163980,163981],{"class":298},",)\n",[288,163983,163984,163987,163989,163991,163993],{"class":290,"line":206},[288,163985,163986],{"class":298},"t2 ",[288,163988,344],{"class":294},[288,163990,1830],{"class":298},[288,163992,743],{"class":347},[288,163994,305],{"class":298},[288,163996,163997],{"class":290,"line":1352},[288,163998,2572],{"emptyLinePlaceholder":217},[288,164000,164001,164003,164005,164007,164010],{"class":290,"line":1367},[288,164002,30588],{"class":347},[288,164004,299],{"class":298},[288,164006,103280],{"class":347},[288,164008,164009],{"class":298},"(t1))  ",[288,164011,164012],{"class":357},"# tuple\n",[288,164014,164015,164017,164019,164021,164024],{"class":290,"line":1373},[288,164016,30588],{"class":347},[288,164018,299],{"class":298},[288,164020,103280],{"class":347},[288,164022,164023],{"class":298},"(t2))  ",[288,164025,164026],{"class":357},"# int\n",[19,164028,164029],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164031,164033],{"id":164032},"_67-字符串str","6.7 字符串str",[19,164035,164036],{},"字符串也是序列，可以索引、切片和遍历。",[280,164038,164040],{"className":30551,"code":164039,"language":30553,"meta":205,"style":205},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[25,164041,164042,164050,164054,164065,164077,164081,164092],{"__ignoreMap":205},[288,164043,164044,164046,164048],{"class":290,"line":291},[288,164045,156544],{"class":298},[288,164047,344],{"class":294},[288,164049,159781],{"class":403},[288,164051,164052],{"class":290,"line":206},[288,164053,2572],{"emptyLinePlaceholder":217},[288,164055,164056,164058,164061,164063],{"class":290,"line":1352},[288,164057,30588],{"class":347},[288,164059,164060],{"class":298},"(text[",[288,164062,490],{"class":347},[288,164064,4829],{"class":298},[288,164066,164067,164069,164071,164073,164075],{"class":290,"line":1367},[288,164068,30588],{"class":347},[288,164070,164060],{"class":298},[288,164072,829],{"class":294},[288,164074,516],{"class":347},[288,164076,4829],{"class":298},[288,164078,164079],{"class":290,"line":1373},[288,164080,2572],{"emptyLinePlaceholder":217},[288,164082,164083,164085,164087,164089],{"class":290,"line":1387},[288,164084,3197],{"class":294},[288,164086,159792],{"class":298},[288,164088,26216],{"class":294},[288,164090,164091],{"class":298}," text:\n",[288,164093,164094,164096],{"class":290,"line":1393},[288,164095,31472],{"class":347},[288,164097,159803],{"class":298},[19,164099,164100],{},"字符串不可变：",[280,164102,164104],{"className":30551,"code":164103,"language":30553,"meta":205,"style":205},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[25,164105,164106,164114],{"__ignoreMap":205},[288,164107,164108,164110,164112],{"class":290,"line":291},[288,164109,156544],{"class":298},[288,164111,344],{"class":294},[288,164113,159781],{"class":403},[288,164115,164116,164119,164121,164123,164125,164128],{"class":290,"line":206},[288,164117,164118],{"class":298},"text[",[288,164120,490],{"class":347},[288,164122,4615],{"class":298},[288,164124,344],{"class":294},[288,164126,164127],{"class":403}," \"P\"",[288,164129,164130],{"class":357},"  # 报错\n",[19,164132,164133],{},"如果要得到新字符串：",[280,164135,164137],{"className":30551,"code":164136,"language":30553,"meta":205,"style":205},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[25,164138,164139,164147,164165],{"__ignoreMap":205},[288,164140,164141,164143,164145],{"class":290,"line":291},[288,164142,156544],{"class":298},[288,164144,344],{"class":294},[288,164146,159781],{"class":403},[288,164148,164149,164151,164153,164155,164157,164160,164162],{"class":290,"line":206},[288,164150,156544],{"class":298},[288,164152,344],{"class":294},[288,164154,164127],{"class":403},[288,164156,45739],{"class":294},[288,164158,164159],{"class":298}," text[",[288,164161,516],{"class":347},[288,164163,164164],{"class":298},":]\n",[288,164166,164167,164169],{"class":290,"line":1352},[288,164168,30588],{"class":347},[288,164170,164171],{"class":298},"(text)\n",[14,164173,164175],{"id":164174},"_68-切片","6.8 切片",[19,164177,164178],{},"切片用于从序列中取一部分。",[280,164180,164182],{"className":30551,"code":164181,"language":30553,"meta":205,"style":205},"序列[开始:结束:步长]\n",[25,164183,164184],{"__ignoreMap":205},[288,164185,164186],{"class":290,"line":291},[288,164187,164181],{"class":298},[19,164189,164190],{},"结束位置不包含。",[280,164192,164194],{"className":30551,"code":164193,"language":30553,"meta":205,"style":205},"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",[25,164195,164196,164233,164237,164256,164271,164285,164299],{"__ignoreMap":205},[288,164197,164198,164201,164203,164205,164207,164209,164211,164213,164215,164217,164219,164221,164223,164225,164227,164229,164231],{"class":290,"line":291},[288,164199,164200],{"class":298},"nums ",[288,164202,344],{"class":294},[288,164204,52399],{"class":298},[288,164206,490],{"class":347},[288,164208,12608],{"class":298},[288,164210,516],{"class":347},[288,164212,12608],{"class":298},[288,164214,376],{"class":347},[288,164216,12608],{"class":298},[288,164218,370],{"class":347},[288,164220,12608],{"class":298},[288,164222,590],{"class":347},[288,164224,12608],{"class":298},[288,164226,616],{"class":347},[288,164228,12608],{"class":298},[288,164230,641],{"class":347},[288,164232,33419],{"class":298},[288,164234,164235],{"class":290,"line":206},[288,164236,2572],{"emptyLinePlaceholder":217},[288,164238,164239,164241,164244,164246,164248,164250,164253],{"class":290,"line":1352},[288,164240,30588],{"class":347},[288,164242,164243],{"class":298},"(nums[",[288,164245,516],{"class":347},[288,164247,1156],{"class":298},[288,164249,590],{"class":347},[288,164251,164252],{"class":298},"])    ",[288,164254,164255],{"class":357},"# [1, 2, 3]\n",[288,164257,164258,164260,164263,164265,164268],{"class":290,"line":1367},[288,164259,30588],{"class":347},[288,164261,164262],{"class":298},"(nums[:",[288,164264,370],{"class":347},[288,164266,164267],{"class":298},"])     ",[288,164269,164270],{"class":357},"# [0, 1, 2]\n",[288,164272,164273,164275,164277,164279,164282],{"class":290,"line":1373},[288,164274,30588],{"class":347},[288,164276,164243],{"class":298},[288,164278,370],{"class":347},[288,164280,164281],{"class":298},":])     ",[288,164283,164284],{"class":357},"# [3, 4, 5, 6]\n",[288,164286,164287,164289,164292,164294,164296],{"class":290,"line":1387},[288,164288,30588],{"class":347},[288,164290,164291],{"class":298},"(nums[::",[288,164293,376],{"class":347},[288,164295,164252],{"class":298},[288,164297,164298],{"class":357},"# [0, 2, 4, 6]\n",[288,164300,164301,164303,164305,164307,164309,164312],{"class":290,"line":1393},[288,164302,30588],{"class":347},[288,164304,164291],{"class":298},[288,164306,829],{"class":294},[288,164308,516],{"class":347},[288,164310,164311],{"class":298},"])   ",[288,164313,164314],{"class":357},"# 反转\n",[19,164316,164317],{},"字符串切片：",[280,164319,164321],{"className":30551,"code":164320,"language":30553,"meta":205,"style":205},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[25,164322,164323,164332,164346],{"__ignoreMap":205},[288,164324,164325,164327,164329],{"class":290,"line":291},[288,164326,156544],{"class":298},[288,164328,344],{"class":294},[288,164330,164331],{"class":403}," \"abcdef\"\n",[288,164333,164334,164336,164338,164340,164342,164344],{"class":290,"line":206},[288,164335,30588],{"class":347},[288,164337,164060],{"class":298},[288,164339,516],{"class":347},[288,164341,1156],{"class":298},[288,164343,590],{"class":347},[288,164345,4829],{"class":298},[288,164347,164348,164350,164353,164355,164357],{"class":290,"line":1352},[288,164349,30588],{"class":347},[288,164351,164352],{"class":298},"(text[::",[288,164354,829],{"class":294},[288,164356,516],{"class":347},[288,164358,4829],{"class":298},[14,164360,164362],{"id":164361},"_69-集合set","6.9 集合set",[19,164364,164365],{},"集合特点：",[243,164367,164368,164371,164374],{},[246,164369,164370],{},"无序。",[246,164372,164373],{},"元素不重复。",[246,164375,164376],{},"可以做交集、并集、差集。",[280,164378,164380],{"className":30551,"code":164379,"language":30553,"meta":205,"style":205},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[25,164381,164382,164410],{"__ignoreMap":205},[288,164383,164384,164386,164388,164390,164392,164394,164396,164398,164400,164402,164404,164406,164408],{"class":290,"line":291},[288,164385,164200],{"class":298},[288,164387,344],{"class":294},[288,164389,4620],{"class":298},[288,164391,516],{"class":347},[288,164393,12608],{"class":298},[288,164395,376],{"class":347},[288,164397,12608],{"class":298},[288,164399,370],{"class":347},[288,164401,12608],{"class":298},[288,164403,370],{"class":347},[288,164405,12608],{"class":298},[288,164407,590],{"class":347},[288,164409,1737],{"class":298},[288,164411,164412,164414],{"class":290,"line":206},[288,164413,30588],{"class":347},[288,164415,164416],{"class":298},"(nums)\n",[19,164418,164419],{},"创建空集合：",[280,164421,164423],{"className":30551,"code":164422,"language":30553,"meta":205,"style":205},"s = set()\n",[25,164424,164425],{"__ignoreMap":205},[288,164426,164427,164429,164431,164433],{"class":290,"line":291},[288,164428,10752],{"class":298},[288,164430,344],{"class":294},[288,164432,119895],{"class":347},[288,164434,2148],{"class":298},[19,164436,9198,164437,164439],{},[25,164438,32632],{}," 是空字典，不是空集合。",[19,164441,164442],{},"集合常用操作：",[280,164444,164446],{"className":30551,"code":164445,"language":30553,"meta":205,"style":205},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[25,164447,164448,164468,164472,164481,164490,164499],{"__ignoreMap":205},[288,164449,164450,164452,164454,164456,164458,164460,164462,164464,164466],{"class":290,"line":291},[288,164451,10752],{"class":298},[288,164453,344],{"class":294},[288,164455,4620],{"class":298},[288,164457,516],{"class":347},[288,164459,12608],{"class":298},[288,164461,376],{"class":347},[288,164463,12608],{"class":298},[288,164465,370],{"class":347},[288,164467,1737],{"class":298},[288,164469,164470],{"class":290,"line":206},[288,164471,2572],{"emptyLinePlaceholder":217},[288,164473,164474,164477,164479],{"class":290,"line":1352},[288,164475,164476],{"class":298},"s.add(",[288,164478,590],{"class":347},[288,164480,305],{"class":298},[288,164482,164483,164486,164488],{"class":290,"line":1367},[288,164484,164485],{"class":298},"s.remove(",[288,164487,376],{"class":347},[288,164489,305],{"class":298},[288,164491,164492,164495,164497],{"class":290,"line":1373},[288,164493,164494],{"class":298},"s.discard(",[288,164496,743],{"class":347},[288,164498,305],{"class":298},[288,164500,164501,164503,164505,164507],{"class":290,"line":1387},[288,164502,30588],{"class":347},[288,164504,299],{"class":298},[288,164506,7531],{"class":347},[288,164508,164509],{"class":298},"(s))\n",[19,164511,164512],{},"交并差：",[280,164514,164516],{"className":30551,"code":164515,"language":30553,"meta":205,"style":205},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[25,164517,164518,164538,164558,164562,164577,164590],{"__ignoreMap":205},[288,164519,164520,164522,164524,164526,164528,164530,164532,164534,164536],{"class":290,"line":291},[288,164521,11092],{"class":298},[288,164523,344],{"class":294},[288,164525,4620],{"class":298},[288,164527,516],{"class":347},[288,164529,12608],{"class":298},[288,164531,376],{"class":347},[288,164533,12608],{"class":298},[288,164535,370],{"class":347},[288,164537,1737],{"class":298},[288,164539,164540,164542,164544,164546,164548,164550,164552,164554,164556],{"class":290,"line":206},[288,164541,11118],{"class":298},[288,164543,344],{"class":294},[288,164545,4620],{"class":298},[288,164547,370],{"class":347},[288,164549,12608],{"class":298},[288,164551,590],{"class":347},[288,164553,12608],{"class":298},[288,164555,616],{"class":347},[288,164557,1737],{"class":298},[288,164559,164560],{"class":290,"line":1352},[288,164561,2572],{"emptyLinePlaceholder":217},[288,164563,164564,164566,164569,164571,164574],{"class":290,"line":1367},[288,164565,30588],{"class":347},[288,164567,164568],{"class":298},"(a ",[288,164570,650],{"class":294},[288,164572,164573],{"class":298}," b)  ",[288,164575,164576],{"class":357},"# 交集\n",[288,164578,164579,164581,164583,164585,164587],{"class":290,"line":1373},[288,164580,30588],{"class":347},[288,164582,164568],{"class":298},[288,164584,1218],{"class":294},[288,164586,164573],{"class":298},[288,164588,164589],{"class":357},"# 并集\n",[288,164591,164592,164594,164596,164598,164600],{"class":290,"line":1387},[288,164593,30588],{"class":347},[288,164595,164568],{"class":298},[288,164597,829],{"class":294},[288,164599,164573],{"class":298},[288,164601,164602],{"class":357},"# 差集\n",[14,164604,164606],{"id":164605},"_610-字典dict","6.10 字典dict",[19,164608,164609],{},"字典通过 key-value 保存数据。",[280,164611,164613],{"className":30551,"code":164612,"language":30553,"meta":205,"style":205},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[25,164614,164615,164623,164633,164644,164654],{"__ignoreMap":205},[288,164616,164617,164619,164621],{"class":290,"line":291},[288,164618,149581],{"class":298},[288,164620,344],{"class":294},[288,164622,15745],{"class":298},[288,164624,164625,164627,164629,164631],{"class":290,"line":206},[288,164626,147120],{"class":403},[288,164628,51610],{"class":298},[288,164630,149988],{"class":403},[288,164632,31639],{"class":298},[288,164634,164635,164638,164640,164642],{"class":290,"line":1352},[288,164636,164637],{"class":403},"    \"age\"",[288,164639,51610],{"class":298},[288,164641,947],{"class":347},[288,164643,31639],{"class":298},[288,164645,164646,164649,164651],{"class":290,"line":1367},[288,164647,164648],{"class":403},"    \"score\"",[288,164650,51610],{"class":298},[288,164652,164653],{"class":347},"95\n",[288,164655,164656],{"class":290,"line":1373},[288,164657,1737],{"class":298},[19,164659,164660],{},"获取值：",[280,164662,164664],{"className":30551,"code":164663,"language":30553,"meta":205,"style":205},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[25,164665,164666,164677],{"__ignoreMap":205},[288,164667,164668,164670,164673,164675],{"class":290,"line":291},[288,164669,30588],{"class":347},[288,164671,164672],{"class":298},"(student[",[288,164674,62852],{"class":403},[288,164676,4829],{"class":298},[288,164678,164679,164681,164684,164686],{"class":290,"line":206},[288,164680,30588],{"class":347},[288,164682,164683],{"class":298},"(student.get(",[288,164685,62852],{"class":403},[288,164687,30670],{"class":298},[19,164689,15561],{},[280,164691,164693],{"className":30551,"code":164692,"language":30553,"meta":205,"style":205},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[25,164694,164695,164708],{"__ignoreMap":205},[288,164696,164697,164699,164702,164705],{"class":290,"line":291},[288,164698,152959],{"class":298},[288,164700,164701],{"class":403},"\"address\"",[288,164703,164704],{"class":298},"]     ",[288,164706,164707],{"class":357},"# key不存在会报错\n",[288,164709,164710,164713,164715,164717],{"class":290,"line":206},[288,164711,164712],{"class":298},"student.get(",[288,164714,164701],{"class":403},[288,164716,13887],{"class":298},[288,164718,164719],{"class":357},"# key不存在返回None\n",[19,164721,164722],{},"设置默认值：",[280,164724,164726],{"className":30551,"code":164725,"language":30553,"meta":205,"style":205},"print(student.get(\"address\", \"未知\"))\n",[25,164727,164728],{"__ignoreMap":205},[288,164729,164730,164732,164734,164736,164738,164741],{"class":290,"line":291},[288,164731,30588],{"class":347},[288,164733,164683],{"class":298},[288,164735,164701],{"class":403},[288,164737,12608],{"class":298},[288,164739,164740],{"class":403},"\"未知\"",[288,164742,30670],{"class":298},[19,164744,164745],{},"新增和修改：",[280,164747,164749],{"className":30551,"code":164748,"language":30553,"meta":205,"style":205},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[25,164750,164751,164764],{"__ignoreMap":205},[288,164752,164753,164755,164757,164759,164761],{"class":290,"line":291},[288,164754,152959],{"class":298},[288,164756,69297],{"class":403},[288,164758,4615],{"class":298},[288,164760,344],{"class":294},[288,164762,164763],{"class":347}," 19\n",[288,164765,164766,164768,164770,164772,164774],{"class":290,"line":206},[288,164767,152959],{"class":298},[288,164769,164701],{"class":403},[288,164771,4615],{"class":298},[288,164773,344],{"class":294},[288,164775,164776],{"class":403}," \"北京\"\n",[19,164778,164779],{},"删除：",[280,164781,164783],{"className":30551,"code":164782,"language":30553,"meta":205,"style":205},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[25,164784,164785,164798,164808],{"__ignoreMap":205},[288,164786,164787,164789,164791,164794,164796],{"class":290,"line":291},[288,164788,155458],{"class":298},[288,164790,344],{"class":294},[288,164792,164793],{"class":298}," student.pop(",[288,164795,151572],{"class":403},[288,164797,305],{"class":298},[288,164799,164800,164802,164804,164806],{"class":290,"line":206},[288,164801,163483],{"class":294},[288,164803,152249],{"class":298},[288,164805,69297],{"class":403},[288,164807,33419],{"class":298},[288,164809,164810],{"class":290,"line":1352},[288,164811,164812],{"class":298},"student.clear()\n",[14,164814,164816],{"id":164815},"_611-字典遍历","6.11 字典遍历",[19,164818,164819],{},"遍历 key：",[280,164821,164823],{"className":30551,"code":164822,"language":30553,"meta":205,"style":205},"for key in student:\n    print(key, student[key])\n",[25,164824,164825,164837],{"__ignoreMap":205},[288,164826,164827,164829,164832,164834],{"class":290,"line":291},[288,164828,3197],{"class":294},[288,164830,164831],{"class":298}," key ",[288,164833,26216],{"class":294},[288,164835,164836],{"class":298}," student:\n",[288,164838,164839,164841],{"class":290,"line":206},[288,164840,31472],{"class":347},[288,164842,164843],{"class":298},"(key, student[key])\n",[19,164845,164846],{},"遍历 value：",[280,164848,164850],{"className":30551,"code":164849,"language":30553,"meta":205,"style":205},"for value in student.values():\n    print(value)\n",[25,164851,164852,164864],{"__ignoreMap":205},[288,164853,164854,164856,164859,164861],{"class":290,"line":291},[288,164855,3197],{"class":294},[288,164857,164858],{"class":298}," value ",[288,164860,26216],{"class":294},[288,164862,164863],{"class":298}," student.values():\n",[288,164865,164866,164868],{"class":290,"line":206},[288,164867,31472],{"class":347},[288,164869,164870],{"class":298},"(value)\n",[19,164872,164873],{},"遍历 key 和 value：",[280,164875,164877],{"className":30551,"code":164876,"language":30553,"meta":205,"style":205},"for key, value in student.items():\n    print(key, value)\n",[25,164878,164879,164891],{"__ignoreMap":205},[288,164880,164881,164883,164886,164888],{"class":290,"line":291},[288,164882,3197],{"class":294},[288,164884,164885],{"class":298}," key, value ",[288,164887,26216],{"class":294},[288,164889,164890],{"class":298}," student.items():\n",[288,164892,164893,164895],{"class":290,"line":206},[288,164894,31472],{"class":347},[288,164896,164897],{"class":298},"(key, value)\n",[14,164899,164901],{"id":164900},"_612-嵌套容器","6.12 嵌套容器",[19,164903,164904],{},"列表中保存字典，是项目中最常见的结构之一。",[280,164906,164908],{"className":30551,"code":164907,"language":30553,"meta":205,"style":205},"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",[25,164909,164910,164918,164946,164974,165002,165006,165010,165020],{"__ignoreMap":205},[288,164911,164912,164914,164916],{"class":290,"line":291},[288,164913,159816],{"class":298},[288,164915,344],{"class":294},[288,164917,55620],{"class":298},[288,164919,164920,164922,164924,164926,164928,164930,164932,164934,164936,164938,164940,164942,164944],{"class":290,"line":206},[288,164921,148485],{"class":298},[288,164923,62852],{"class":403},[288,164925,51610],{"class":298},[288,164927,149988],{"class":403},[288,164929,12608],{"class":298},[288,164931,69297],{"class":403},[288,164933,51610],{"class":298},[288,164935,947],{"class":347},[288,164937,12608],{"class":298},[288,164939,151572],{"class":403},[288,164941,51610],{"class":298},[288,164943,1286],{"class":347},[288,164945,5102],{"class":298},[288,164947,164948,164950,164952,164954,164956,164958,164960,164962,164964,164966,164968,164970,164972],{"class":290,"line":1352},[288,164949,148485],{"class":298},[288,164951,62852],{"class":403},[288,164953,51610],{"class":298},[288,164955,151036],{"class":403},[288,164957,12608],{"class":298},[288,164959,69297],{"class":403},[288,164961,51610],{"class":298},[288,164963,922],{"class":347},[288,164965,12608],{"class":298},[288,164967,151572],{"class":403},[288,164969,51610],{"class":298},[288,164971,1108],{"class":347},[288,164973,5102],{"class":298},[288,164975,164976,164978,164980,164982,164984,164986,164988,164990,164992,164994,164996,164998,165000],{"class":290,"line":1367},[288,164977,148485],{"class":298},[288,164979,62852],{"class":403},[288,164981,51610],{"class":298},[288,164983,159831],{"class":403},[288,164985,12608],{"class":298},[288,164987,69297],{"class":403},[288,164989,51610],{"class":298},[288,164991,972],{"class":347},[288,164993,12608],{"class":298},[288,164995,151572],{"class":403},[288,164997,51610],{"class":298},[288,164999,703],{"class":347},[288,165001,5102],{"class":298},[288,165003,165004],{"class":290,"line":1373},[288,165005,33419],{"class":298},[288,165007,165008],{"class":290,"line":1387},[288,165009,2572],{"emptyLinePlaceholder":217},[288,165011,165012,165014,165016,165018],{"class":290,"line":1393},[288,165013,3197],{"class":294},[288,165015,152237],{"class":298},[288,165017,26216],{"class":294},[288,165019,152242],{"class":298},[288,165021,165022,165024,165026,165028,165031,165033],{"class":290,"line":1484},[288,165023,31472],{"class":347},[288,165025,164672],{"class":298},[288,165027,62852],{"class":403},[288,165029,165030],{"class":298},"], student[",[288,165032,151572],{"class":403},[288,165034,4829],{"class":298},[19,165036,165037],{},"统计平均分：",[280,165039,165041],{"className":30551,"code":165040,"language":30553,"meta":205,"style":205},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[25,165042,165043,165051,165055,165065,165077,165081,165096],{"__ignoreMap":205},[288,165044,165045,165047,165049],{"class":290,"line":291},[288,165046,157360],{"class":298},[288,165048,344],{"class":294},[288,165050,47506],{"class":347},[288,165052,165053],{"class":290,"line":206},[288,165054,2572],{"emptyLinePlaceholder":217},[288,165056,165057,165059,165061,165063],{"class":290,"line":1352},[288,165058,3197],{"class":294},[288,165060,152237],{"class":298},[288,165062,26216],{"class":294},[288,165064,152242],{"class":298},[288,165066,165067,165069,165071,165073,165075],{"class":290,"line":1367},[288,165068,159407],{"class":298},[288,165070,9650],{"class":294},[288,165072,152249],{"class":298},[288,165074,151572],{"class":403},[288,165076,33419],{"class":298},[288,165078,165079],{"class":290,"line":1373},[288,165080,2572],{"emptyLinePlaceholder":217},[288,165082,165083,165085,165087,165089,165091,165093],{"class":290,"line":1387},[288,165084,163874],{"class":298},[288,165086,344],{"class":294},[288,165088,163879],{"class":298},[288,165090,881],{"class":294},[288,165092,7504],{"class":347},[288,165094,165095],{"class":298},"(students)\n",[288,165097,165098,165100,165102,165104,165106,165108,165110,165112,165114,165116],{"class":290,"line":1393},[288,165099,30588],{"class":347},[288,165101,299],{"class":298},[288,165103,351],{"class":294},[288,165105,163897],{"class":403},[288,165107,1193],{"class":347},[288,165109,163902],{"class":298},[288,165111,157259],{"class":294},[288,165113,1243],{"class":347},[288,165115,109],{"class":403},[288,165117,305],{"class":298},[19,165119,165120],{},"查找学生：",[280,165122,165124],{"className":30551,"code":165123,"language":30553,"meta":205,"style":205},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[25,165125,165126,165141,165145,165155,165169,165175,165179,165185],{"__ignoreMap":205},[288,165127,165128,165130,165132,165134,165136,165139],{"class":290,"line":291},[288,165129,111751],{"class":298},[288,165131,344],{"class":294},[288,165133,60778],{"class":347},[288,165135,299],{"class":298},[288,165137,165138],{"class":403},"\"请输入学生姓名:\"",[288,165140,305],{"class":298},[288,165142,165143],{"class":290,"line":206},[288,165144,2572],{"emptyLinePlaceholder":217},[288,165146,165147,165149,165151,165153],{"class":290,"line":1352},[288,165148,3197],{"class":294},[288,165150,152237],{"class":298},[288,165152,26216],{"class":294},[288,165154,152242],{"class":298},[288,165156,165157,165159,165161,165163,165165,165167],{"class":290,"line":1367},[288,165158,3273],{"class":294},[288,165160,152249],{"class":298},[288,165162,62852],{"class":403},[288,165164,4615],{"class":298},[288,165166,3121],{"class":294},[288,165168,160532],{"class":298},[288,165170,165171,165173],{"class":290,"line":1373},[288,165172,32624],{"class":347},[288,165174,150142],{"class":298},[288,165176,165177],{"class":290,"line":1387},[288,165178,31800],{"class":294},[288,165180,165181,165183],{"class":290,"line":1393},[288,165182,1873],{"class":294},[288,165184,3911],{"class":298},[288,165186,165187,165189,165191,165194],{"class":290,"line":1484},[288,165188,31472],{"class":347},[288,165190,299],{"class":298},[288,165192,165193],{"class":403},"\"没有找到\"",[288,165195,305],{"class":298},[14,165197,165199],{"id":165198},"_613-容器通用操作","6.13 容器通用操作",[19,165201,165202],{},"长度：",[280,165204,165206],{"className":30551,"code":165205,"language":30553,"meta":205,"style":205},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[25,165207,165208,165227,165237],{"__ignoreMap":205},[288,165209,165210,165212,165215,165217,165219,165221,165223,165225],{"class":290,"line":291},[288,165211,7531],{"class":347},[288,165213,165214],{"class":298},"([",[288,165216,516],{"class":347},[288,165218,12608],{"class":298},[288,165220,376],{"class":347},[288,165222,12608],{"class":298},[288,165224,370],{"class":347},[288,165226,4829],{"class":298},[288,165228,165229,165231,165233,165235],{"class":290,"line":206},[288,165230,7531],{"class":347},[288,165232,299],{"class":298},[288,165234,155980],{"class":403},[288,165236,305],{"class":298},[288,165238,165239,165241,165244,165246,165248,165250],{"class":290,"line":1352},[288,165240,7531],{"class":347},[288,165242,165243],{"class":298},"({",[288,165245,62852],{"class":403},[288,165247,51610],{"class":298},[288,165249,149988],{"class":403},[288,165251,165252],{"class":298},"})\n",[19,165254,165255],{},"最大最小：",[280,165257,165259],{"className":30551,"code":165258,"language":30553,"meta":205,"style":205},"max([1, 2, 3])\nmin([1, 2, 3])\n",[25,165260,165261,165279],{"__ignoreMap":205},[288,165262,165263,165265,165267,165269,165271,165273,165275,165277],{"class":290,"line":291},[288,165264,6188],{"class":347},[288,165266,165214],{"class":298},[288,165268,516],{"class":347},[288,165270,12608],{"class":298},[288,165272,376],{"class":347},[288,165274,12608],{"class":298},[288,165276,370],{"class":347},[288,165278,4829],{"class":298},[288,165280,165281,165284,165286,165288,165290,165292,165294,165296],{"class":290,"line":206},[288,165282,165283],{"class":347},"min",[288,165285,165214],{"class":298},[288,165287,516],{"class":347},[288,165289,12608],{"class":298},[288,165291,376],{"class":347},[288,165293,12608],{"class":298},[288,165295,370],{"class":347},[288,165297,4829],{"class":298},[19,165299,165300],{},"求和：",[280,165302,165304],{"className":30551,"code":165303,"language":30553,"meta":205,"style":205},"sum([1, 2, 3])\n",[25,165305,165306],{"__ignoreMap":205},[288,165307,165308,165311,165313,165315,165317,165319,165321,165323],{"class":290,"line":291},[288,165309,165310],{"class":347},"sum",[288,165312,165214],{"class":298},[288,165314,516],{"class":347},[288,165316,12608],{"class":298},[288,165318,376],{"class":347},[288,165320,12608],{"class":298},[288,165322,370],{"class":347},[288,165324,4829],{"class":298},[19,165326,163571],{},[280,165328,165330],{"className":30551,"code":165329,"language":30553,"meta":205,"style":205},"sorted([3, 1, 2])\n",[25,165331,165332],{"__ignoreMap":205},[288,165333,165334,165337,165339,165341,165343,165345,165347,165349],{"class":290,"line":291},[288,165335,165336],{"class":347},"sorted",[288,165338,165214],{"class":298},[288,165340,370],{"class":347},[288,165342,12608],{"class":298},[288,165344,516],{"class":347},[288,165346,12608],{"class":298},[288,165348,376],{"class":347},[288,165350,4829],{"class":298},[19,165352,165353],{},"类型转换：",[280,165355,165357],{"className":30551,"code":165356,"language":30553,"meta":205,"style":205},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[25,165358,165359,165369,165387],{"__ignoreMap":205},[288,165360,165361,165363,165365,165367],{"class":290,"line":291},[288,165362,154170],{"class":347},[288,165364,299],{"class":298},[288,165366,155980],{"class":403},[288,165368,305],{"class":298},[288,165370,165371,165373,165375,165377,165379,165381,165383,165385],{"class":290,"line":206},[288,165372,155365],{"class":347},[288,165374,165214],{"class":298},[288,165376,516],{"class":347},[288,165378,12608],{"class":298},[288,165380,376],{"class":347},[288,165382,12608],{"class":298},[288,165384,370],{"class":347},[288,165386,4829],{"class":298},[288,165388,165389,165391,165393,165395,165397,165399,165401,165403,165405,165407],{"class":290,"line":1352},[288,165390,155390],{"class":347},[288,165392,165214],{"class":298},[288,165394,516],{"class":347},[288,165396,12608],{"class":298},[288,165398,516],{"class":347},[288,165400,12608],{"class":298},[288,165402,376],{"class":347},[288,165404,12608],{"class":298},[288,165406,370],{"class":347},[288,165408,4829],{"class":298},[19,165410,165411],{},"成员判断：",[280,165413,165415],{"className":30551,"code":165414,"language":30553,"meta":205,"style":205},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[25,165416,165417,165434,165458],{"__ignoreMap":205},[288,165418,165419,165421,165423,165426,165429,165432],{"class":290,"line":291},[288,165420,30588],{"class":347},[288,165422,299],{"class":298},[288,165424,165425],{"class":403},"\"a\"",[288,165427,165428],{"class":294}," in",[288,165430,165431],{"class":403}," \"abc\"",[288,165433,305],{"class":298},[288,165435,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456],{"class":290,"line":206},[288,165437,30588],{"class":347},[288,165439,299],{"class":298},[288,165441,516],{"class":347},[288,165443,165428],{"class":294},[288,165445,52399],{"class":298},[288,165447,516],{"class":347},[288,165449,12608],{"class":298},[288,165451,376],{"class":347},[288,165453,12608],{"class":298},[288,165455,370],{"class":347},[288,165457,4829],{"class":298},[288,165459,165460,165462,165464,165466,165468,165470,165472,165474,165476],{"class":290,"line":1352},[288,165461,30588],{"class":347},[288,165463,299],{"class":298},[288,165465,62852],{"class":403},[288,165467,165428],{"class":294},[288,165469,4620],{"class":298},[288,165471,62852],{"class":403},[288,165473,51610],{"class":298},[288,165475,149988],{"class":403},[288,165477,165252],{"class":298},[14,165479,165481],{"id":165480},"_614-推导式","6.14 推导式",[19,165483,165484],{},"推导式用于快速生成容器。",[19,165486,165487],{},"列表推导式：",[280,165489,165491],{"className":30551,"code":165490,"language":30553,"meta":205,"style":205},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[25,165492,165493,165520],{"__ignoreMap":205},[288,165494,165495,165497,165499,165502,165504,165506,165508,165510,165512,165514,165516,165518],{"class":290,"line":291},[288,165496,164200],{"class":298},[288,165498,344],{"class":294},[288,165500,165501],{"class":298}," [i ",[288,165503,3197],{"class":294},[288,165505,9611],{"class":298},[288,165507,26216],{"class":294},[288,165509,32616],{"class":347},[288,165511,299],{"class":298},[288,165513,516],{"class":347},[288,165515,12608],{"class":298},[288,165517,641],{"class":347},[288,165519,97473],{"class":298},[288,165521,165522,165524],{"class":290,"line":206},[288,165523,30588],{"class":347},[288,165525,164416],{"class":298},[19,165527,165528],{},"带条件：",[280,165530,165532],{"className":30551,"code":165531,"language":30553,"meta":205,"style":205},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[25,165533,165534,165575],{"__ignoreMap":205},[288,165535,165536,165539,165541,165543,165545,165547,165549,165551,165553,165555,165557,165559,165561,165563,165565,165567,165569,165571,165573],{"class":290,"line":291},[288,165537,165538],{"class":298},"even_nums ",[288,165540,344],{"class":294},[288,165542,165501],{"class":298},[288,165544,3197],{"class":294},[288,165546,9611],{"class":298},[288,165548,26216],{"class":294},[288,165550,32616],{"class":347},[288,165552,299],{"class":298},[288,165554,516],{"class":347},[288,165556,12608],{"class":298},[288,165558,634],{"class":347},[288,165560,13887],{"class":298},[288,165562,1703],{"class":294},[288,165564,9611],{"class":298},[288,165566,625],{"class":294},[288,165568,14928],{"class":347},[288,165570,101732],{"class":294},[288,165572,4265],{"class":347},[288,165574,33419],{"class":298},[288,165576,165577,165579],{"class":290,"line":206},[288,165578,30588],{"class":347},[288,165580,165581],{"class":298},"(even_nums)\n",[19,165583,165584],{},"字典推导式：",[280,165586,165588],{"className":30551,"code":165587,"language":30553,"meta":205,"style":205},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[25,165589,165590,165624],{"__ignoreMap":205},[288,165591,165592,165595,165597,165600,165602,165604,165607,165609,165611,165613,165615,165617,165619,165621],{"class":290,"line":291},[288,165593,165594],{"class":298},"squares ",[288,165596,344],{"class":294},[288,165598,165599],{"class":298}," {i: i ",[288,165601,10834],{"class":294},[288,165603,14928],{"class":347},[288,165605,165606],{"class":294}," for",[288,165608,9611],{"class":298},[288,165610,26216],{"class":294},[288,165612,32616],{"class":347},[288,165614,299],{"class":298},[288,165616,516],{"class":347},[288,165618,12608],{"class":298},[288,165620,641],{"class":347},[288,165622,165623],{"class":298},")}\n",[288,165625,165626,165628],{"class":290,"line":206},[288,165627,30588],{"class":347},[288,165629,165630],{"class":298},"(squares)\n",[19,165632,165633],{},"集合推导式：",[280,165635,165637],{"className":30551,"code":165636,"language":30553,"meta":205,"style":205},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[25,165638,165639,165660],{"__ignoreMap":205},[288,165640,165641,165644,165646,165649,165651,165653,165655,165658],{"class":290,"line":291},[288,165642,165643],{"class":298},"chars ",[288,165645,344],{"class":294},[288,165647,165648],{"class":298}," {ch ",[288,165650,3197],{"class":294},[288,165652,159792],{"class":298},[288,165654,26216],{"class":294},[288,165656,165657],{"class":403}," \"hello\"",[288,165659,1737],{"class":298},[288,165661,165662,165664],{"class":290,"line":206},[288,165663,30588],{"class":347},[288,165665,165666],{"class":298},"(chars)\n",[19,165668,165669],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165671,165673],{"id":165672},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[280,165675,165677],{"className":30551,"code":165676,"language":30553,"meta":205,"style":205},"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",[25,165678,165679,165687,165707,165727,165747,165767,165771,165775,165783,165797,165806,165810,165820,165832,165836,165856,165865,165869,165885,165890,165894,165908,165912,165934,165970],{"__ignoreMap":205},[288,165680,165681,165683,165685],{"class":290,"line":291},[288,165682,159816],{"class":298},[288,165684,344],{"class":294},[288,165686,55620],{"class":298},[288,165688,165689,165691,165693,165695,165697,165699,165701,165703,165705],{"class":290,"line":206},[288,165690,148485],{"class":298},[288,165692,62852],{"class":403},[288,165694,51610],{"class":298},[288,165696,149988],{"class":403},[288,165698,12608],{"class":298},[288,165700,151572],{"class":403},[288,165702,51610],{"class":298},[288,165704,1286],{"class":347},[288,165706,5102],{"class":298},[288,165708,165709,165711,165713,165715,165717,165719,165721,165723,165725],{"class":290,"line":1352},[288,165710,148485],{"class":298},[288,165712,62852],{"class":403},[288,165714,51610],{"class":298},[288,165716,151036],{"class":403},[288,165718,12608],{"class":298},[288,165720,151572],{"class":403},[288,165722,51610],{"class":298},[288,165724,1108],{"class":347},[288,165726,5102],{"class":298},[288,165728,165729,165731,165733,165735,165737,165739,165741,165743,165745],{"class":290,"line":1367},[288,165730,148485],{"class":298},[288,165732,62852],{"class":403},[288,165734,51610],{"class":298},[288,165736,159831],{"class":403},[288,165738,12608],{"class":298},[288,165740,151572],{"class":403},[288,165742,51610],{"class":298},[288,165744,703],{"class":347},[288,165746,5102],{"class":298},[288,165748,165749,165751,165753,165755,165757,165759,165761,165763,165765],{"class":290,"line":1373},[288,165750,148485],{"class":298},[288,165752,62852],{"class":403},[288,165754,51610],{"class":298},[288,165756,163410],{"class":403},[288,165758,12608],{"class":298},[288,165760,151572],{"class":403},[288,165762,51610],{"class":298},[288,165764,1179],{"class":347},[288,165766,5102],{"class":298},[288,165768,165769],{"class":290,"line":1387},[288,165770,33419],{"class":298},[288,165772,165773],{"class":290,"line":1393},[288,165774,2572],{"emptyLinePlaceholder":217},[288,165776,165777,165779,165781],{"class":290,"line":1484},[288,165778,157360],{"class":298},[288,165780,344],{"class":294},[288,165782,47506],{"class":347},[288,165784,165785,165788,165790,165793,165795],{"class":290,"line":1490},[288,165786,165787],{"class":298},"max_student ",[288,165789,344],{"class":294},[288,165791,165792],{"class":298}," students[",[288,165794,490],{"class":347},[288,165796,33419],{"class":298},[288,165798,165799,165802,165804],{"class":290,"line":1502},[288,165800,165801],{"class":298},"passed ",[288,165803,344],{"class":294},[288,165805,52011],{"class":298},[288,165807,165808],{"class":290,"line":1784},[288,165809,2572],{"emptyLinePlaceholder":217},[288,165811,165812,165814,165816,165818],{"class":290,"line":1789},[288,165813,3197],{"class":294},[288,165815,152237],{"class":298},[288,165817,26216],{"class":294},[288,165819,152242],{"class":298},[288,165821,165822,165824,165826,165828,165830],{"class":290,"line":1795},[288,165823,159407],{"class":298},[288,165825,9650],{"class":294},[288,165827,152249],{"class":298},[288,165829,151572],{"class":403},[288,165831,33419],{"class":298},[288,165833,165834],{"class":290,"line":1800},[288,165835,2572],{"emptyLinePlaceholder":217},[288,165837,165838,165840,165842,165844,165846,165848,165851,165853],{"class":290,"line":1814},[288,165839,3273],{"class":294},[288,165841,152249],{"class":298},[288,165843,151572],{"class":403},[288,165845,4615],{"class":298},[288,165847,1257],{"class":294},[288,165849,165850],{"class":298}," max_student[",[288,165852,151572],{"class":403},[288,165854,165855],{"class":298},"]:\n",[288,165857,165858,165861,165863],{"class":290,"line":1819},[288,165859,165860],{"class":298},"        max_student ",[288,165862,344],{"class":294},[288,165864,152265],{"class":298},[288,165866,165867],{"class":290,"line":1825},[288,165868,2572],{"emptyLinePlaceholder":217},[288,165870,165871,165873,165875,165877,165879,165881,165883],{"class":290,"line":1846},[288,165872,3273],{"class":294},[288,165874,152249],{"class":298},[288,165876,151572],{"class":403},[288,165878,4615],{"class":298},[288,165880,1882],{"class":294},[288,165882,157937],{"class":347},[288,165884,3911],{"class":298},[288,165886,165887],{"class":290,"line":1851},[288,165888,165889],{"class":298},"        passed.append(student)\n",[288,165891,165892],{"class":290,"line":1865},[288,165893,2572],{"emptyLinePlaceholder":217},[288,165895,165896,165898,165900,165902,165904,165906],{"class":290,"line":1870},[288,165897,163874],{"class":298},[288,165899,344],{"class":294},[288,165901,163879],{"class":298},[288,165903,881],{"class":294},[288,165905,7504],{"class":347},[288,165907,165095],{"class":298},[288,165909,165910],{"class":290,"line":1899},[288,165911,2572],{"emptyLinePlaceholder":217},[288,165913,165914,165916,165918,165920,165922,165924,165926,165928,165930,165932],{"class":290,"line":1904},[288,165915,30588],{"class":347},[288,165917,299],{"class":298},[288,165919,351],{"class":294},[288,165921,163897],{"class":403},[288,165923,1193],{"class":347},[288,165925,163902],{"class":298},[288,165927,157259],{"class":294},[288,165929,1243],{"class":347},[288,165931,109],{"class":403},[288,165933,305],{"class":298},[288,165935,165936,165938,165940,165942,165945,165947,165950,165952,165954,165956,165958,165960,165962,165964,165966,165968],{"class":290,"line":1921},[288,165937,30588],{"class":347},[288,165939,299],{"class":298},[288,165941,351],{"class":294},[288,165943,165944],{"class":403},"\"最高分学生:",[288,165946,1193],{"class":347},[288,165948,165949],{"class":298},"max_student[",[288,165951,152982],{"class":403},[288,165953,1237],{"class":298},[288,165955,1243],{"class":347},[288,165957,4620],{"class":347},[288,165959,165949],{"class":298},[288,165961,153020],{"class":403},[288,165963,1237],{"class":298},[288,165965,1243],{"class":347},[288,165967,109],{"class":403},[288,165969,305],{"class":298},[288,165971,165972,165974,165976,165978,165981,165984,165987,165989,165991],{"class":290,"line":1926},[288,165973,30588],{"class":347},[288,165975,299],{"class":298},[288,165977,351],{"class":294},[288,165979,165980],{"class":403},"\"及格人数:",[288,165982,165983],{"class":347},"{len",[288,165985,165986],{"class":298},"(passed)",[288,165988,1243],{"class":347},[288,165990,109],{"class":403},[288,165992,305],{"class":298},[14,165994,165996],{"id":165995},"_616-易错点","6.16 易错点",[243,165998,165999,166002,166005,166008,166014,166023],{},[246,166000,166001],{},"列表可变，元组和字符串不可变。",[246,166003,166004],{},"切片结束位置不包含。",[246,166006,166007],{},"字典通过 key 取值，不是通过索引。",[246,166009,166010,166011,28558],{},"空集合要用 ",[25,166012,166013],{},"set()",[246,166015,104539,166016,166019,166020,28558],{},[25,166017,166018],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[25,166021,166022],{},"get()",[246,166024,166025],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166027,166029],{"id":166028},"_617-本章练习","6.17 本章练习",[243,166031,166032,166035,166038,166041,166044],{},[246,166033,166034],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[246,166036,166037],{},"输入一句话，统计每个字符出现次数。",[246,166039,166040],{},"使用集合去除列表中的重复元素。",[246,166042,166043],{},"使用字典保存一个学生的信息，并实现修改成绩。",[246,166045,166046],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5299,166048,166049],{},"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":205,"searchDepth":206,"depth":206,"links":166051},[166052,166053,166054,166055,166056,166057,166058,166059,166060,166061,166062,166063,166064,166065,166066,166067,166068],{"id":163032,"depth":206,"text":163033},{"id":163149,"depth":206,"text":163150},{"id":163239,"depth":206,"text":163240},{"id":163363,"depth":206,"text":163364},{"id":163726,"depth":206,"text":163727},{"id":163913,"depth":206,"text":163914},{"id":164032,"depth":206,"text":164033},{"id":164174,"depth":206,"text":164175},{"id":164361,"depth":206,"text":164362},{"id":164605,"depth":206,"text":164606},{"id":164815,"depth":206,"text":164816},{"id":164900,"depth":206,"text":164901},{"id":165198,"depth":206,"text":165199},{"id":165480,"depth":206,"text":165481},{"id":165672,"depth":206,"text":165673},{"id":165995,"depth":206,"text":165996},{"id":166028,"depth":206,"text":166029},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163024,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166075,"title":166076,"body":166077,"description":214,"extension":215,"meta":168249,"navigation":217,"path":168250,"seo":168251,"stem":168252,"__hash__":168253},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166078,"toc":168224},[166079,166082,166086,166089,166169,166172,166193,166196,166200,166203,166265,166268,166285,166289,166292,166337,166339,166347,166351,166354,166436,166439,166442,166467,166470,166493,166497,166500,166502,166564,166567,166569,166620,166624,166628,166634,166739,166743,166749,166820,166824,166827,166895,166898,166978,166982,166988,167024,167027,167030,167140,167146,167150,167153,167225,167228,167232,167236,167241,167303,167307,167312,167380,167384,167389,167505,167509,167512,167592,167595,167599,167602,167706,167708,167723,167726,167730,167868,167876,167880,167882,167893,167895,168153,168157,168189,168193,168221],[10,166080,166076],{"id":166081},"_7-函数进阶",[14,166083,166085],{"id":166084},"_71-多返回值","7.1 多返回值",[19,166087,166088],{},"Python 函数可以返回多个值，本质上返回的是元组。",[280,166090,166092],{"className":30551,"code":166091,"language":30553,"meta":205,"style":205},"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",[25,166093,166094,166103,166111,166119,166128,166135,166139,166143,166152,166158],{"__ignoreMap":205},[288,166095,166096,166098,166101],{"class":290,"line":291},[288,166097,32120],{"class":294},[288,166099,166100],{"class":2135}," get_info",[288,166102,32126],{"class":298},[288,166104,166105,166107,166109],{"class":290,"line":206},[288,166106,152470],{"class":298},[288,166108,344],{"class":294},[288,166110,149453],{"class":403},[288,166112,166113,166115,166117],{"class":290,"line":1352},[288,166114,152486],{"class":298},[288,166116,344],{"class":294},[288,166118,146651],{"class":347},[288,166120,166121,166123,166125],{"class":290,"line":1367},[288,166122,152501],{"class":298},[288,166124,344],{"class":294},[288,166126,166127],{"class":347}," 95\n",[288,166129,166130,166132],{"class":290,"line":1373},[288,166131,4262],{"class":294},[288,166133,166134],{"class":298}," name, age, score\n",[288,166136,166137],{"class":290,"line":1387},[288,166138,2572],{"emptyLinePlaceholder":217},[288,166140,166141],{"class":290,"line":1393},[288,166142,2572],{"emptyLinePlaceholder":217},[288,166144,166145,166147,166149],{"class":290,"line":1484},[288,166146,161406],{"class":298},[288,166148,344],{"class":294},[288,166150,166151],{"class":298}," get_info()\n",[288,166153,166154,166156],{"class":290,"line":1490},[288,166155,30588],{"class":347},[288,166157,76758],{"class":298},[288,166159,166160,166162,166164,166166],{"class":290,"line":1502},[288,166161,30588],{"class":347},[288,166163,299],{"class":298},[288,166165,103280],{"class":347},[288,166167,166168],{"class":298},"(result))\n",[19,166170,166171],{},"可以直接解包：",[280,166173,166175],{"className":30551,"code":166174,"language":30553,"meta":205,"style":205},"name, age, score = get_info()\nprint(name, age, score)\n",[25,166176,166177,166186],{"__ignoreMap":205},[288,166178,166179,166182,166184],{"class":290,"line":291},[288,166180,166181],{"class":298},"name, age, score ",[288,166183,344],{"class":294},[288,166185,166151],{"class":298},[288,166187,166188,166190],{"class":290,"line":206},[288,166189,30588],{"class":347},[288,166191,166192],{"class":298},"(name, age, score)\n",[19,166194,166195],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166197,166199],{"id":166198},"_72-位置参数","7.2 位置参数",[19,166201,166202],{},"位置参数按顺序传递。",[280,166204,166206],{"className":30551,"code":166205,"language":30553,"meta":205,"style":205},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[25,166207,166208,166216,166244,166248,166252],{"__ignoreMap":205},[288,166209,166210,166212,166214],{"class":290,"line":291},[288,166211,32120],{"class":294},[288,166213,149472],{"class":2135},[288,166215,149475],{"class":298},[288,166217,166218,166220,166222,166224,166226,166228,166230,166232,166234,166236,166238,166240,166242],{"class":290,"line":206},[288,166219,31472],{"class":347},[288,166221,299],{"class":298},[288,166223,351],{"class":294},[288,166225,149486],{"class":403},[288,166227,1193],{"class":347},[288,166229,79983],{"class":298},[288,166231,1243],{"class":347},[288,166233,149495],{"class":403},[288,166235,1193],{"class":347},[288,166237,70394],{"class":298},[288,166239,1243],{"class":347},[288,166241,149504],{"class":403},[288,166243,305],{"class":298},[288,166245,166246],{"class":290,"line":1352},[288,166247,2572],{"emptyLinePlaceholder":217},[288,166249,166250],{"class":290,"line":1367},[288,166251,2572],{"emptyLinePlaceholder":217},[288,166253,166254,166257,166259,166261,166263],{"class":290,"line":1373},[288,166255,166256],{"class":298},"introduce(",[288,166258,149988],{"class":403},[288,166260,12608],{"class":298},[288,166262,947],{"class":347},[288,166264,305],{"class":298},[19,166266,166267],{},"顺序错了就会得到错误含义：",[280,166269,166271],{"className":30551,"code":166270,"language":30553,"meta":205,"style":205},"introduce(18, \"小明\")\n",[25,166272,166273],{"__ignoreMap":205},[288,166274,166275,166277,166279,166281,166283],{"class":290,"line":291},[288,166276,166256],{"class":298},[288,166278,947],{"class":347},[288,166280,12608],{"class":298},[288,166282,149988],{"class":403},[288,166284,305],{"class":298},[14,166286,166288],{"id":166287},"_73-关键字参数","7.3 关键字参数",[19,166290,166291],{},"关键字参数按参数名传递。",[280,166293,166295],{"className":30551,"code":166294,"language":30553,"meta":205,"style":205},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[25,166296,166297,166317],{"__ignoreMap":205},[288,166298,166299,166301,166303,166305,166307,166309,166311,166313,166315],{"class":290,"line":291},[288,166300,166256],{"class":298},[288,166302,79983],{"class":5389},[288,166304,344],{"class":294},[288,166306,149988],{"class":403},[288,166308,12608],{"class":298},[288,166310,70394],{"class":5389},[288,166312,344],{"class":294},[288,166314,947],{"class":347},[288,166316,305],{"class":298},[288,166318,166319,166321,166323,166325,166327,166329,166331,166333,166335],{"class":290,"line":206},[288,166320,166256],{"class":298},[288,166322,70394],{"class":5389},[288,166324,344],{"class":294},[288,166326,947],{"class":347},[288,166328,12608],{"class":298},[288,166330,79983],{"class":5389},[288,166332,344],{"class":294},[288,166334,149988],{"class":403},[288,166336,305],{"class":298},[19,166338,118107],{},[243,166340,166341,166344],{},[246,166342,166343],{},"顺序不容易错。",[246,166345,166346],{},"调用时可读性更强。",[14,166348,166350],{"id":166349},"_74-默认参数","7.4 默认参数",[19,166352,166353],{},"默认参数给参数设置默认值。",[280,166355,166357],{"className":30551,"code":166356,"language":30553,"meta":205,"style":205},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[25,166358,166359,166375,166405,166409,166413,166423],{"__ignoreMap":205},[288,166360,166361,166363,166365,166368,166370,166373],{"class":290,"line":291},[288,166362,32120],{"class":294},[288,166364,122266],{"class":2135},[288,166366,166367],{"class":298},"(host, port",[288,166369,344],{"class":294},[288,166371,166372],{"class":347},"3306",[288,166374,30959],{"class":298},[288,166376,166377,166379,166381,166383,166386,166388,166390,166392,166394,166396,166399,166401,166403],{"class":290,"line":206},[288,166378,31472],{"class":347},[288,166380,299],{"class":298},[288,166382,351],{"class":294},[288,166384,166385],{"class":403},"\"连接",[288,166387,1193],{"class":347},[288,166389,27568],{"class":298},[288,166391,1243],{"class":347},[288,166393,1156],{"class":403},[288,166395,1193],{"class":347},[288,166397,166398],{"class":298},"port",[288,166400,1243],{"class":347},[288,166402,109],{"class":403},[288,166404,305],{"class":298},[288,166406,166407],{"class":290,"line":1352},[288,166408,2572],{"emptyLinePlaceholder":217},[288,166410,166411],{"class":290,"line":1367},[288,166412,2572],{"emptyLinePlaceholder":217},[288,166414,166415,166418,166421],{"class":290,"line":1373},[288,166416,166417],{"class":298},"connect(",[288,166419,166420],{"class":403},"\"localhost\"",[288,166422,305],{"class":298},[288,166424,166425,166427,166429,166431,166434],{"class":290,"line":1387},[288,166426,166417],{"class":298},[288,166428,166420],{"class":403},[288,166430,12608],{"class":298},[288,166432,166433],{"class":347},"6379",[288,166435,305],{"class":298},[19,166437,166438],{},"注意：默认参数必须放在非默认参数后面。",[19,166440,166441],{},"错误：",[280,166443,166445],{"className":30551,"code":166444,"language":30553,"meta":205,"style":205},"def connect(port=3306, host):\n    pass\n",[25,166446,166447,166463],{"__ignoreMap":205},[288,166448,166449,166451,166453,166456,166458,166460],{"class":290,"line":291},[288,166450,32120],{"class":294},[288,166452,122266],{"class":2135},[288,166454,166455],{"class":298},"(port",[288,166457,344],{"class":294},[288,166459,166372],{"class":347},[288,166461,166462],{"class":298},", host):\n",[288,166464,166465],{"class":290,"line":206},[288,166466,149637],{"class":294},[19,166468,166469],{},"正确：",[280,166471,166473],{"className":30551,"code":166472,"language":30553,"meta":205,"style":205},"def connect(host, port=3306):\n    pass\n",[25,166474,166475,166489],{"__ignoreMap":205},[288,166476,166477,166479,166481,166483,166485,166487],{"class":290,"line":291},[288,166478,32120],{"class":294},[288,166480,122266],{"class":2135},[288,166482,166367],{"class":298},[288,166484,344],{"class":294},[288,166486,166372],{"class":347},[288,166488,30959],{"class":298},[288,166490,166491],{"class":290,"line":206},[288,166492,149637],{"class":294},[14,166494,166496],{"id":166495},"_75-默认参数的坑","7.5 默认参数的坑",[19,166498,166499],{},"不要使用可变对象作为默认参数。",[19,166501,157723],{},[280,166503,166505],{"className":30551,"code":166504,"language":30553,"meta":205,"style":205},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[25,166506,166507,166522,166527,166534,166538,166542,166553],{"__ignoreMap":205},[288,166508,166509,166511,166514,166517,166519],{"class":290,"line":291},[288,166510,32120],{"class":294},[288,166512,166513],{"class":2135}," add_item",[288,166515,166516],{"class":298},"(item, items",[288,166518,344],{"class":294},[288,166520,166521],{"class":298},"[]):\n",[288,166523,166524],{"class":290,"line":206},[288,166525,166526],{"class":298},"    items.append(item)\n",[288,166528,166529,166531],{"class":290,"line":1352},[288,166530,4262],{"class":294},[288,166532,166533],{"class":298}," items\n",[288,166535,166536],{"class":290,"line":1367},[288,166537,2572],{"emptyLinePlaceholder":217},[288,166539,166540],{"class":290,"line":1373},[288,166541,2572],{"emptyLinePlaceholder":217},[288,166543,166544,166546,166549,166551],{"class":290,"line":1387},[288,166545,30588],{"class":347},[288,166547,166548],{"class":298},"(add_item(",[288,166550,165425],{"class":403},[288,166552,30670],{"class":298},[288,166554,166555,166557,166559,166562],{"class":290,"line":1393},[288,166556,30588],{"class":347},[288,166558,166548],{"class":298},[288,166560,166561],{"class":403},"\"b\"",[288,166563,30670],{"class":298},[19,166565,166566],{},"第二次调用会复用第一次的列表。",[19,166568,155988],{},[280,166570,166572],{"className":30551,"code":166571,"language":30553,"meta":205,"style":205},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[25,166573,166574,166588,166601,166610,166614],{"__ignoreMap":205},[288,166575,166576,166578,166580,166582,166584,166586],{"class":290,"line":291},[288,166577,32120],{"class":294},[288,166579,166513],{"class":2135},[288,166581,166516],{"class":298},[288,166583,344],{"class":294},[288,166585,95859],{"class":347},[288,166587,30959],{"class":298},[288,166589,166590,166592,166595,166597,166599],{"class":290,"line":206},[288,166591,3273],{"class":294},[288,166593,166594],{"class":298}," items ",[288,166596,39100],{"class":294},[288,166598,39106],{"class":347},[288,166600,3911],{"class":298},[288,166602,166603,166606,166608],{"class":290,"line":1352},[288,166604,166605],{"class":298},"        items ",[288,166607,344],{"class":294},[288,166609,52011],{"class":298},[288,166611,166612],{"class":290,"line":1367},[288,166613,166526],{"class":298},[288,166615,166616,166618],{"class":290,"line":1373},[288,166617,4262],{"class":294},[288,166619,166533],{"class":298},[14,166621,166623],{"id":166622},"_76-不定长参数","7.6 不定长参数",[260,166625,166627],{"id":166626},"_761-args","7.6.1 *args",[19,166629,166630,166633],{},[25,166631,166632],{},"*args"," 接收任意数量的位置参数，得到元组。",[280,166635,166637],{"className":30551,"code":166636,"language":30553,"meta":205,"style":205},"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",[25,166638,166639,166652,166660,166671,166680,166686,166690,166694,166713],{"__ignoreMap":205},[288,166640,166641,166643,166645,166647,166649],{"class":290,"line":291},[288,166642,32120],{"class":294},[288,166644,5382],{"class":2135},[288,166646,299],{"class":298},[288,166648,752],{"class":294},[288,166650,166651],{"class":298},"args):\n",[288,166653,166654,166656,166658],{"class":290,"line":206},[288,166655,159407],{"class":298},[288,166657,344],{"class":294},[288,166659,47506],{"class":347},[288,166661,166662,166664,166666,166668],{"class":290,"line":1352},[288,166663,3373],{"class":294},[288,166665,156280],{"class":298},[288,166667,26216],{"class":294},[288,166669,166670],{"class":298}," args:\n",[288,166672,166673,166675,166677],{"class":290,"line":1367},[288,166674,160082],{"class":298},[288,166676,9650],{"class":294},[288,166678,166679],{"class":298}," num\n",[288,166681,166682,166684],{"class":290,"line":1373},[288,166683,4262],{"class":294},[288,166685,162387],{"class":298},[288,166687,166688],{"class":290,"line":1387},[288,166689,2572],{"emptyLinePlaceholder":217},[288,166691,166692],{"class":290,"line":1393},[288,166693,2572],{"emptyLinePlaceholder":217},[288,166695,166696,166698,166701,166703,166705,166707,166709,166711],{"class":290,"line":1484},[288,166697,30588],{"class":347},[288,166699,166700],{"class":298},"(add(",[288,166702,516],{"class":347},[288,166704,12608],{"class":298},[288,166706,376],{"class":347},[288,166708,12608],{"class":298},[288,166710,370],{"class":347},[288,166712,30670],{"class":298},[288,166714,166715,166717,166719,166721,166723,166725,166727,166729,166731,166733,166735,166737],{"class":290,"line":1490},[288,166716,30588],{"class":347},[288,166718,166700],{"class":298},[288,166720,516],{"class":347},[288,166722,12608],{"class":298},[288,166724,376],{"class":347},[288,166726,12608],{"class":298},[288,166728,370],{"class":347},[288,166730,12608],{"class":298},[288,166732,590],{"class":347},[288,166734,12608],{"class":298},[288,166736,616],{"class":347},[288,166738,30670],{"class":298},[260,166740,166742],{"id":166741},"_762-kwargs","7.6.2 **kwargs",[19,166744,166745,166748],{},[25,166746,166747],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[280,166750,166752],{"className":30551,"code":166751,"language":30553,"meta":205,"style":205},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[25,166753,166754,166767,166778,166784,166788,166792],{"__ignoreMap":205},[288,166755,166756,166758,166760,166762,166764],{"class":290,"line":291},[288,166757,32120],{"class":294},[288,166759,162045],{"class":2135},[288,166761,299],{"class":298},[288,166763,10834],{"class":294},[288,166765,166766],{"class":298},"kwargs):\n",[288,166768,166769,166771,166773,166775],{"class":290,"line":206},[288,166770,3373],{"class":294},[288,166772,164885],{"class":298},[288,166774,26216],{"class":294},[288,166776,166777],{"class":298}," kwargs.items():\n",[288,166779,166780,166782],{"class":290,"line":1352},[288,166781,32624],{"class":347},[288,166783,164897],{"class":298},[288,166785,166786],{"class":290,"line":1367},[288,166787,2572],{"emptyLinePlaceholder":217},[288,166789,166790],{"class":290,"line":1373},[288,166791,2572],{"emptyLinePlaceholder":217},[288,166793,166794,166796,166798,166800,166802,166804,166806,166808,166810,166812,166814,166816,166818],{"class":290,"line":1387},[288,166795,162110],{"class":298},[288,166797,79983],{"class":5389},[288,166799,344],{"class":294},[288,166801,149988],{"class":403},[288,166803,12608],{"class":298},[288,166805,70394],{"class":5389},[288,166807,344],{"class":294},[288,166809,947],{"class":347},[288,166811,12608],{"class":298},[288,166813,70445],{"class":5389},[288,166815,344],{"class":294},[288,166817,69442],{"class":403},[288,166819,305],{"class":298},[14,166821,166823],{"id":166822},"_77-参数解包","7.7 参数解包",[19,166825,166826],{},"列表或元组解包为位置参数：",[280,166828,166830],{"className":30551,"code":166829,"language":30553,"meta":205,"style":205},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[25,166831,166832,166841,166856,166860,166864,166884],{"__ignoreMap":205},[288,166833,166834,166836,166838],{"class":290,"line":291},[288,166835,32120],{"class":294},[288,166837,5382],{"class":2135},[288,166839,166840],{"class":298},"(a, b, c):\n",[288,166842,166843,166845,166847,166849,166851,166853],{"class":290,"line":206},[288,166844,4262],{"class":294},[288,166846,11042],{"class":298},[288,166848,778],{"class":294},[288,166850,11055],{"class":298},[288,166852,778],{"class":294},[288,166854,166855],{"class":298}," c\n",[288,166857,166858],{"class":290,"line":1352},[288,166859,2572],{"emptyLinePlaceholder":217},[288,166861,166862],{"class":290,"line":1367},[288,166863,2572],{"emptyLinePlaceholder":217},[288,166865,166866,166868,166870,166872,166874,166876,166878,166880,166882],{"class":290,"line":1373},[288,166867,164200],{"class":298},[288,166869,344],{"class":294},[288,166871,52399],{"class":298},[288,166873,516],{"class":347},[288,166875,12608],{"class":298},[288,166877,376],{"class":347},[288,166879,12608],{"class":298},[288,166881,370],{"class":347},[288,166883,33419],{"class":298},[288,166885,166886,166888,166890,166892],{"class":290,"line":1387},[288,166887,30588],{"class":347},[288,166889,166700],{"class":298},[288,166891,752],{"class":294},[288,166893,166894],{"class":298},"nums))\n",[19,166896,166897],{},"字典解包为关键字参数：",[280,166899,166901],{"className":30551,"code":166900,"language":30553,"meta":205,"style":205},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[25,166902,166903,166911,166937,166941,166945,166969],{"__ignoreMap":205},[288,166904,166905,166907,166909],{"class":290,"line":291},[288,166906,32120],{"class":294},[288,166908,149472],{"class":2135},[288,166910,149475],{"class":298},[288,166912,166913,166915,166917,166919,166921,166923,166925,166927,166929,166931,166933,166935],{"class":290,"line":206},[288,166914,31472],{"class":347},[288,166916,299],{"class":298},[288,166918,351],{"class":294},[288,166920,109],{"class":403},[288,166922,1193],{"class":347},[288,166924,79983],{"class":298},[288,166926,1243],{"class":347},[288,166928,4620],{"class":347},[288,166930,70394],{"class":298},[288,166932,1243],{"class":347},[288,166934,109],{"class":403},[288,166936,305],{"class":298},[288,166938,166939],{"class":290,"line":1352},[288,166940,2572],{"emptyLinePlaceholder":217},[288,166942,166943],{"class":290,"line":1367},[288,166944,2572],{"emptyLinePlaceholder":217},[288,166946,166947,166949,166951,166953,166955,166957,166959,166961,166963,166965,166967],{"class":290,"line":1373},[288,166948,116487],{"class":298},[288,166950,344],{"class":294},[288,166952,4620],{"class":298},[288,166954,62852],{"class":403},[288,166956,51610],{"class":298},[288,166958,149988],{"class":403},[288,166960,12608],{"class":298},[288,166962,69297],{"class":403},[288,166964,51610],{"class":298},[288,166966,947],{"class":347},[288,166968,1737],{"class":298},[288,166970,166971,166973,166975],{"class":290,"line":1387},[288,166972,166256],{"class":298},[288,166974,10834],{"class":294},[288,166976,166977],{"class":298},"info)\n",[14,166979,166981],{"id":166980},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166983,166984,166987],{},[25,166985,166986],{},"lambda"," 用于定义简单匿名函数。",[280,166989,166991],{"className":30551,"code":166990,"language":30553,"meta":205,"style":205},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[25,166992,166993,167010],{"__ignoreMap":205},[288,166994,166995,166998,167000,167003,167006,167008],{"class":290,"line":291},[288,166996,166997],{"class":298},"add ",[288,166999,344],{"class":294},[288,167001,167002],{"class":294}," lambda",[288,167004,167005],{"class":298}," a, b: a ",[288,167007,778],{"class":294},[288,167009,151204],{"class":298},[288,167011,167012,167014,167016,167018,167020,167022],{"class":290,"line":206},[288,167013,30588],{"class":347},[288,167015,166700],{"class":298},[288,167017,516],{"class":347},[288,167019,12608],{"class":298},[288,167021,376],{"class":347},[288,167023,30670],{"class":298},[19,167025,167026],{},"常和排序、过滤等函数一起使用。",[19,167028,167029],{},"按分数排序：",[280,167031,167033],{"className":30551,"code":167032,"language":30553,"meta":205,"style":205},"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",[25,167034,167035,167043,167063,167083,167103,167107,167111,167134],{"__ignoreMap":205},[288,167036,167037,167039,167041],{"class":290,"line":291},[288,167038,159816],{"class":298},[288,167040,344],{"class":294},[288,167042,55620],{"class":298},[288,167044,167045,167047,167049,167051,167053,167055,167057,167059,167061],{"class":290,"line":206},[288,167046,148485],{"class":298},[288,167048,62852],{"class":403},[288,167050,51610],{"class":298},[288,167052,149988],{"class":403},[288,167054,12608],{"class":298},[288,167056,151572],{"class":403},[288,167058,51610],{"class":298},[288,167060,1286],{"class":347},[288,167062,5102],{"class":298},[288,167064,167065,167067,167069,167071,167073,167075,167077,167079,167081],{"class":290,"line":1352},[288,167066,148485],{"class":298},[288,167068,62852],{"class":403},[288,167070,51610],{"class":298},[288,167072,151036],{"class":403},[288,167074,12608],{"class":298},[288,167076,151572],{"class":403},[288,167078,51610],{"class":298},[288,167080,1108],{"class":347},[288,167082,5102],{"class":298},[288,167084,167085,167087,167089,167091,167093,167095,167097,167099,167101],{"class":290,"line":1367},[288,167086,148485],{"class":298},[288,167088,62852],{"class":403},[288,167090,51610],{"class":298},[288,167092,159831],{"class":403},[288,167094,12608],{"class":298},[288,167096,151572],{"class":403},[288,167098,51610],{"class":298},[288,167100,703],{"class":347},[288,167102,5102],{"class":298},[288,167104,167105],{"class":290,"line":1373},[288,167106,33419],{"class":298},[288,167108,167109],{"class":290,"line":1387},[288,167110,2572],{"emptyLinePlaceholder":217},[288,167112,167113,167116,167118,167120,167122,167124,167126,167128,167130,167132],{"class":290,"line":1393},[288,167114,167115],{"class":298},"students.sort(",[288,167117,154046],{"class":5389},[288,167119,154049],{"class":294},[288,167121,154052],{"class":298},[288,167123,151572],{"class":403},[288,167125,112375],{"class":298},[288,167127,163628],{"class":5389},[288,167129,344],{"class":294},[288,167131,31649],{"class":347},[288,167133,305],{"class":298},[288,167135,167136,167138],{"class":290,"line":1484},[288,167137,30588],{"class":347},[288,167139,165095],{"class":298},[19,167141,167142,167143,167145],{},"如果逻辑复杂，不要硬写 ",[25,167144,166986],{},"，定义普通函数更清晰。",[14,167147,167149],{"id":167148},"_79-函数作为参数","7.9 函数作为参数",[19,167151,167152],{},"函数可以作为参数传给另一个函数。",[280,167154,167156],{"className":30551,"code":167155,"language":30553,"meta":205,"style":205},"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",[25,167157,167158,167166,167176,167180,167184,167194,167201,167205,167209],{"__ignoreMap":205},[288,167159,167160,167162,167164],{"class":290,"line":291},[288,167161,32120],{"class":294},[288,167163,5382],{"class":2135},[288,167165,151193],{"class":298},[288,167167,167168,167170,167172,167174],{"class":290,"line":206},[288,167169,4262],{"class":294},[288,167171,11042],{"class":298},[288,167173,778],{"class":294},[288,167175,151204],{"class":298},[288,167177,167178],{"class":290,"line":1352},[288,167179,2572],{"emptyLinePlaceholder":217},[288,167181,167182],{"class":290,"line":1367},[288,167183,2572],{"emptyLinePlaceholder":217},[288,167185,167186,167188,167191],{"class":290,"line":1373},[288,167187,32120],{"class":294},[288,167189,167190],{"class":2135}," calculate",[288,167192,167193],{"class":298},"(a, b, func):\n",[288,167195,167196,167198],{"class":290,"line":1387},[288,167197,4262],{"class":294},[288,167199,167200],{"class":298}," func(a, b)\n",[288,167202,167203],{"class":290,"line":1393},[288,167204,2572],{"emptyLinePlaceholder":217},[288,167206,167207],{"class":290,"line":1484},[288,167208,2572],{"emptyLinePlaceholder":217},[288,167210,167211,167213,167216,167218,167220,167222],{"class":290,"line":1490},[288,167212,30588],{"class":347},[288,167214,167215],{"class":298},"(calculate(",[288,167217,743],{"class":347},[288,167219,12608],{"class":298},[288,167221,997],{"class":347},[288,167223,167224],{"class":298},", add))\n",[19,167226,167227],{},"这种思想在排序、回调、框架中经常出现。",[14,167229,167231],{"id":167230},"_710-mapfiltersorted","7.10 map、filter、sorted",[260,167233,167235],{"id":167234},"_7101-map","7.10.1 map",[19,167237,167238,167240],{},[25,167239,74217],{}," 对每个元素执行函数。",[280,167242,167244],{"className":30551,"code":167243,"language":30553,"meta":205,"style":205},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[25,167245,167246,167270,167293],{"__ignoreMap":205},[288,167247,167248,167250,167252,167254,167256,167258,167260,167262,167264,167266,167268],{"class":290,"line":291},[288,167249,164200],{"class":298},[288,167251,344],{"class":294},[288,167253,52399],{"class":298},[288,167255,516],{"class":347},[288,167257,12608],{"class":298},[288,167259,376],{"class":347},[288,167261,12608],{"class":298},[288,167263,370],{"class":347},[288,167265,12608],{"class":298},[288,167267,590],{"class":347},[288,167269,33419],{"class":298},[288,167271,167272,167274,167276,167279,167281,167283,167286,167288,167290],{"class":290,"line":206},[288,167273,161406],{"class":298},[288,167275,344],{"class":294},[288,167277,167278],{"class":347}," map",[288,167280,299],{"class":298},[288,167282,166986],{"class":294},[288,167284,167285],{"class":298}," x: x ",[288,167287,752],{"class":294},[288,167289,14928],{"class":347},[288,167291,167292],{"class":298},", nums)\n",[288,167294,167295,167297,167299,167301],{"class":290,"line":1352},[288,167296,30588],{"class":347},[288,167298,299],{"class":298},[288,167300,154170],{"class":347},[288,167302,166168],{"class":298},[260,167304,167306],{"id":167305},"_7102-filter","7.10.2 filter",[19,167308,167309,167311],{},[25,167310,80224],{}," 保留满足条件的元素。",[280,167313,167315],{"className":30551,"code":167314,"language":30553,"meta":205,"style":205},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[25,167316,167317,167345,167370],{"__ignoreMap":205},[288,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335,167337,167339,167341,167343],{"class":290,"line":291},[288,167320,164200],{"class":298},[288,167322,344],{"class":294},[288,167324,52399],{"class":298},[288,167326,516],{"class":347},[288,167328,12608],{"class":298},[288,167330,376],{"class":347},[288,167332,12608],{"class":298},[288,167334,370],{"class":347},[288,167336,12608],{"class":298},[288,167338,590],{"class":347},[288,167340,12608],{"class":298},[288,167342,616],{"class":347},[288,167344,33419],{"class":298},[288,167346,167347,167349,167351,167354,167356,167358,167360,167362,167364,167366,167368],{"class":290,"line":206},[288,167348,161406],{"class":298},[288,167350,344],{"class":294},[288,167352,167353],{"class":347}," filter",[288,167355,299],{"class":298},[288,167357,166986],{"class":294},[288,167359,167285],{"class":298},[288,167361,625],{"class":294},[288,167363,14928],{"class":347},[288,167365,101732],{"class":294},[288,167367,4265],{"class":347},[288,167369,167292],{"class":298},[288,167371,167372,167374,167376,167378],{"class":290,"line":1352},[288,167373,30588],{"class":347},[288,167375,299],{"class":298},[288,167377,154170],{"class":347},[288,167379,166168],{"class":298},[260,167381,167383],{"id":167382},"_7103-sorted","7.10.3 sorted",[19,167385,167386,167388],{},[25,167387,165336],{}," 返回排序后的新列表。",[280,167390,167392],{"className":30551,"code":167391,"language":30553,"meta":205,"style":205},"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",[25,167393,167394,167402,167422,167442,167462,167466,167470,167499],{"__ignoreMap":205},[288,167395,167396,167398,167400],{"class":290,"line":291},[288,167397,159816],{"class":298},[288,167399,344],{"class":294},[288,167401,55620],{"class":298},[288,167403,167404,167406,167408,167410,167412,167414,167416,167418,167420],{"class":290,"line":206},[288,167405,148485],{"class":298},[288,167407,62852],{"class":403},[288,167409,51610],{"class":298},[288,167411,149988],{"class":403},[288,167413,12608],{"class":298},[288,167415,151572],{"class":403},[288,167417,51610],{"class":298},[288,167419,1286],{"class":347},[288,167421,5102],{"class":298},[288,167423,167424,167426,167428,167430,167432,167434,167436,167438,167440],{"class":290,"line":1352},[288,167425,148485],{"class":298},[288,167427,62852],{"class":403},[288,167429,51610],{"class":298},[288,167431,151036],{"class":403},[288,167433,12608],{"class":298},[288,167435,151572],{"class":403},[288,167437,51610],{"class":298},[288,167439,1108],{"class":347},[288,167441,5102],{"class":298},[288,167443,167444,167446,167448,167450,167452,167454,167456,167458,167460],{"class":290,"line":1367},[288,167445,148485],{"class":298},[288,167447,62852],{"class":403},[288,167449,51610],{"class":298},[288,167451,159831],{"class":403},[288,167453,12608],{"class":298},[288,167455,151572],{"class":403},[288,167457,51610],{"class":298},[288,167459,703],{"class":347},[288,167461,5102],{"class":298},[288,167463,167464],{"class":290,"line":1373},[288,167465,33419],{"class":298},[288,167467,167468],{"class":290,"line":1387},[288,167469,2572],{"emptyLinePlaceholder":217},[288,167471,167472,167474,167476,167478,167481,167483,167485,167487,167489,167491,167493,167495,167497],{"class":290,"line":1393},[288,167473,161406],{"class":298},[288,167475,344],{"class":294},[288,167477,163704],{"class":347},[288,167479,167480],{"class":298},"(students, ",[288,167482,154046],{"class":5389},[288,167484,154049],{"class":294},[288,167486,154052],{"class":298},[288,167488,151572],{"class":403},[288,167490,112375],{"class":298},[288,167492,163628],{"class":5389},[288,167494,344],{"class":294},[288,167496,31649],{"class":347},[288,167498,305],{"class":298},[288,167500,167501,167503],{"class":290,"line":1484},[288,167502,30588],{"class":347},[288,167504,76758],{"class":298},[14,167506,167508],{"id":167507},"_711-闭包入门","7.11 闭包入门",[19,167510,167511],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[280,167513,167515],{"className":30551,"code":167514,"language":30553,"meta":205,"style":205},"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",[25,167516,167517,167527,167537,167548,167552,167559,167563,167567,167581],{"__ignoreMap":205},[288,167518,167519,167521,167524],{"class":290,"line":291},[288,167520,32120],{"class":294},[288,167522,167523],{"class":2135}," outer",[288,167525,167526],{"class":298},"(base):\n",[288,167528,167529,167531,167534],{"class":290,"line":206},[288,167530,30974],{"class":294},[288,167532,167533],{"class":2135}," inner",[288,167535,167536],{"class":298},"(num):\n",[288,167538,167539,167541,167544,167546],{"class":290,"line":1352},[288,167540,14925],{"class":294},[288,167542,167543],{"class":298}," base ",[288,167545,778],{"class":294},[288,167547,166679],{"class":298},[288,167549,167550],{"class":290,"line":1367},[288,167551,2572],{"emptyLinePlaceholder":217},[288,167553,167554,167556],{"class":290,"line":1373},[288,167555,4262],{"class":294},[288,167557,167558],{"class":298}," inner\n",[288,167560,167561],{"class":290,"line":1387},[288,167562,2572],{"emptyLinePlaceholder":217},[288,167564,167565],{"class":290,"line":1393},[288,167566,2572],{"emptyLinePlaceholder":217},[288,167568,167569,167572,167574,167577,167579],{"class":290,"line":1484},[288,167570,167571],{"class":298},"add_10 ",[288,167573,344],{"class":294},[288,167575,167576],{"class":298}," outer(",[288,167578,743],{"class":347},[288,167580,305],{"class":298},[288,167582,167583,167585,167588,167590],{"class":290,"line":1490},[288,167584,30588],{"class":347},[288,167586,167587],{"class":298},"(add_10(",[288,167589,616],{"class":347},[288,167591,30670],{"class":298},[19,167593,167594],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167596,167598],{"id":167597},"_712-装饰器入门","7.12 装饰器入门",[19,167600,167601],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[280,167603,167605],{"className":30551,"code":167604,"language":30553,"meta":205,"style":205},"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",[25,167606,167607,167616,167625,167636,167641,167652,167656,167663,167667,167671,167676,167684,167694,167698,167702],{"__ignoreMap":205},[288,167608,167609,167611,167613],{"class":290,"line":291},[288,167610,32120],{"class":294},[288,167612,87364],{"class":2135},[288,167614,167615],{"class":298},"(func):\n",[288,167617,167618,167620,167623],{"class":290,"line":206},[288,167619,30974],{"class":294},[288,167621,167622],{"class":2135}," wrapper",[288,167624,32126],{"class":298},[288,167626,167627,167629,167631,167634],{"class":290,"line":1352},[288,167628,32624],{"class":347},[288,167630,299],{"class":298},[288,167632,167633],{"class":403},"\"函数开始执行\"",[288,167635,305],{"class":298},[288,167637,167638],{"class":290,"line":1367},[288,167639,167640],{"class":298},"        func()\n",[288,167642,167643,167645,167647,167650],{"class":290,"line":1373},[288,167644,32624],{"class":347},[288,167646,299],{"class":298},[288,167648,167649],{"class":403},"\"函数执行结束\"",[288,167651,305],{"class":298},[288,167653,167654],{"class":290,"line":1387},[288,167655,2572],{"emptyLinePlaceholder":217},[288,167657,167658,167660],{"class":290,"line":1393},[288,167659,4262],{"class":294},[288,167661,167662],{"class":298}," wrapper\n",[288,167664,167665],{"class":290,"line":1484},[288,167666,2572],{"emptyLinePlaceholder":217},[288,167668,167669],{"class":290,"line":1490},[288,167670,2572],{"emptyLinePlaceholder":217},[288,167672,167673],{"class":290,"line":1502},[288,167674,167675],{"class":2135},"@log\n",[288,167677,167678,167680,167682],{"class":290,"line":1784},[288,167679,32120],{"class":294},[288,167681,161096],{"class":2135},[288,167683,32126],{"class":298},[288,167685,167686,167688,167690,167692],{"class":290,"line":1789},[288,167687,31472],{"class":347},[288,167689,299],{"class":298},[288,167691,6017],{"class":403},[288,167693,305],{"class":298},[288,167695,167696],{"class":290,"line":1795},[288,167697,2572],{"emptyLinePlaceholder":217},[288,167699,167700],{"class":290,"line":1800},[288,167701,2572],{"emptyLinePlaceholder":217},[288,167703,167704],{"class":290,"line":1814},[288,167705,161131],{"class":298},[19,167707,158374],{},[280,167709,167711],{"className":30551,"code":167710,"language":30553,"meta":205,"style":205},"say_hello = log(say_hello)\n",[25,167712,167713],{"__ignoreMap":205},[288,167714,167715,167718,167720],{"class":290,"line":291},[288,167716,167717],{"class":298},"say_hello ",[288,167719,344],{"class":294},[288,167721,167722],{"class":298}," log(say_hello)\n",[19,167724,167725],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167727,167729],{"id":167728},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[280,167731,167733],{"className":30551,"code":167732,"language":30553,"meta":205,"style":205},"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",[25,167734,167735,167743,167760,167770,167789,167799,167806,167810,167816,167820,167824,167828,167836,167846,167850,167854],{"__ignoreMap":205},[288,167736,167737,167739,167741],{"class":290,"line":291},[288,167738,32120],{"class":294},[288,167740,87364],{"class":2135},[288,167742,167615],{"class":298},[288,167744,167745,167747,167749,167751,167753,167756,167758],{"class":290,"line":206},[288,167746,30974],{"class":294},[288,167748,167622],{"class":2135},[288,167750,299],{"class":298},[288,167752,752],{"class":294},[288,167754,167755],{"class":298},"args, ",[288,167757,10834],{"class":294},[288,167759,166766],{"class":298},[288,167761,167762,167764,167766,167768],{"class":290,"line":1352},[288,167763,32624],{"class":347},[288,167765,299],{"class":298},[288,167767,167633],{"class":403},[288,167769,305],{"class":298},[288,167771,167772,167775,167777,167780,167782,167784,167786],{"class":290,"line":1367},[288,167773,167774],{"class":298},"        result ",[288,167776,344],{"class":294},[288,167778,167779],{"class":298}," func(",[288,167781,752],{"class":294},[288,167783,167755],{"class":298},[288,167785,10834],{"class":294},[288,167787,167788],{"class":298},"kwargs)\n",[288,167790,167791,167793,167795,167797],{"class":290,"line":1373},[288,167792,32624],{"class":347},[288,167794,299],{"class":298},[288,167796,167649],{"class":403},[288,167798,305],{"class":298},[288,167800,167801,167803],{"class":290,"line":1387},[288,167802,14925],{"class":294},[288,167804,167805],{"class":298}," result\n",[288,167807,167808],{"class":290,"line":1393},[288,167809,2572],{"emptyLinePlaceholder":217},[288,167811,167812,167814],{"class":290,"line":1484},[288,167813,4262],{"class":294},[288,167815,167662],{"class":298},[288,167817,167818],{"class":290,"line":1490},[288,167819,2572],{"emptyLinePlaceholder":217},[288,167821,167822],{"class":290,"line":1502},[288,167823,2572],{"emptyLinePlaceholder":217},[288,167825,167826],{"class":290,"line":1784},[288,167827,167675],{"class":2135},[288,167829,167830,167832,167834],{"class":290,"line":1789},[288,167831,32120],{"class":294},[288,167833,5382],{"class":2135},[288,167835,151193],{"class":298},[288,167837,167838,167840,167842,167844],{"class":290,"line":1795},[288,167839,4262],{"class":294},[288,167841,11042],{"class":298},[288,167843,778],{"class":294},[288,167845,151204],{"class":298},[288,167847,167848],{"class":290,"line":1800},[288,167849,2572],{"emptyLinePlaceholder":217},[288,167851,167852],{"class":290,"line":1814},[288,167853,2572],{"emptyLinePlaceholder":217},[288,167855,167856,167858,167860,167862,167864,167866],{"class":290,"line":1819},[288,167857,30588],{"class":347},[288,167859,166700],{"class":298},[288,167861,743],{"class":347},[288,167863,12608],{"class":298},[288,167865,997],{"class":347},[288,167867,30670],{"class":298},[19,167869,167870,167871,101191,167873,167875],{},"这个写法使用 ",[25,167872,166632],{},[25,167874,166747],{}," 接收原函数的所有参数。",[14,167877,167879],{"id":167878},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167881,123465],{},[243,167883,167884,167887,167890],{},[246,167885,167886],{},"给定一组学生数据。",[246,167888,167889],{},"封装函数，根据传入规则筛选学生。",[246,167891,167892],{},"筛选及格、优秀、未成年学生。",[19,167894,10208],{},[280,167896,167898],{"className":30551,"code":167897,"language":30553,"meta":205,"style":205},"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",[25,167899,167900,167908,167936,167964,167992,167996,168000,168004,168014,168022,168032,168039,168044,168050,168054,168058,168082,168105,168128,168132,168139,168146],{"__ignoreMap":205},[288,167901,167902,167904,167906],{"class":290,"line":291},[288,167903,159816],{"class":298},[288,167905,344],{"class":294},[288,167907,55620],{"class":298},[288,167909,167910,167912,167914,167916,167918,167920,167922,167924,167926,167928,167930,167932,167934],{"class":290,"line":206},[288,167911,148485],{"class":298},[288,167913,62852],{"class":403},[288,167915,51610],{"class":298},[288,167917,149988],{"class":403},[288,167919,12608],{"class":298},[288,167921,69297],{"class":403},[288,167923,51610],{"class":298},[288,167925,947],{"class":347},[288,167927,12608],{"class":298},[288,167929,151572],{"class":403},[288,167931,51610],{"class":298},[288,167933,1286],{"class":347},[288,167935,5102],{"class":298},[288,167937,167938,167940,167942,167944,167946,167948,167950,167952,167954,167956,167958,167960,167962],{"class":290,"line":1352},[288,167939,148485],{"class":298},[288,167941,62852],{"class":403},[288,167943,51610],{"class":298},[288,167945,151036],{"class":403},[288,167947,12608],{"class":298},[288,167949,69297],{"class":403},[288,167951,51610],{"class":298},[288,167953,922],{"class":347},[288,167955,12608],{"class":298},[288,167957,151572],{"class":403},[288,167959,51610],{"class":298},[288,167961,1108],{"class":347},[288,167963,5102],{"class":298},[288,167965,167966,167968,167970,167972,167974,167976,167978,167980,167982,167984,167986,167988,167990],{"class":290,"line":1367},[288,167967,148485],{"class":298},[288,167969,62852],{"class":403},[288,167971,51610],{"class":298},[288,167973,159831],{"class":403},[288,167975,12608],{"class":298},[288,167977,69297],{"class":403},[288,167979,51610],{"class":298},[288,167981,972],{"class":347},[288,167983,12608],{"class":298},[288,167985,151572],{"class":403},[288,167987,51610],{"class":298},[288,167989,1179],{"class":347},[288,167991,5102],{"class":298},[288,167993,167994],{"class":290,"line":1373},[288,167995,33419],{"class":298},[288,167997,167998],{"class":290,"line":1387},[288,167999,2572],{"emptyLinePlaceholder":217},[288,168001,168002],{"class":290,"line":1393},[288,168003,2572],{"emptyLinePlaceholder":217},[288,168005,168006,168008,168011],{"class":290,"line":1484},[288,168007,32120],{"class":294},[288,168009,168010],{"class":2135}," filter_students",[288,168012,168013],{"class":298},"(students, condition):\n",[288,168015,168016,168018,168020],{"class":290,"line":1490},[288,168017,161323],{"class":298},[288,168019,344],{"class":294},[288,168021,52011],{"class":298},[288,168023,168024,168026,168028,168030],{"class":290,"line":1502},[288,168025,3373],{"class":294},[288,168027,152237],{"class":298},[288,168029,26216],{"class":294},[288,168031,152242],{"class":298},[288,168033,168034,168036],{"class":290,"line":1784},[288,168035,2669],{"class":294},[288,168037,168038],{"class":298}," condition(student):\n",[288,168040,168041],{"class":290,"line":1789},[288,168042,168043],{"class":298},"            result.append(student)\n",[288,168045,168046,168048],{"class":290,"line":1795},[288,168047,4262],{"class":294},[288,168049,167805],{"class":298},[288,168051,168052],{"class":290,"line":1800},[288,168053,2572],{"emptyLinePlaceholder":217},[288,168055,168056],{"class":290,"line":1814},[288,168057,2572],{"emptyLinePlaceholder":217},[288,168059,168060,168062,168064,168067,168069,168072,168074,168076,168078,168080],{"class":290,"line":1819},[288,168061,165801],{"class":298},[288,168063,344],{"class":294},[288,168065,168066],{"class":298}," filter_students(students, ",[288,168068,166986],{"class":294},[288,168070,168071],{"class":298}," s: s[",[288,168073,151572],{"class":403},[288,168075,4615],{"class":298},[288,168077,1882],{"class":294},[288,168079,157937],{"class":347},[288,168081,305],{"class":298},[288,168083,168084,168087,168089,168091,168093,168095,168097,168099,168101,168103],{"class":290,"line":1825},[288,168085,168086],{"class":298},"excellent ",[288,168088,344],{"class":294},[288,168090,168066],{"class":298},[288,168092,166986],{"class":294},[288,168094,168071],{"class":298},[288,168096,151572],{"class":403},[288,168098,4615],{"class":298},[288,168100,1882],{"class":294},[288,168102,157888],{"class":347},[288,168104,305],{"class":298},[288,168106,168107,168110,168112,168114,168116,168118,168120,168122,168124,168126],{"class":290,"line":1846},[288,168108,168109],{"class":298},"under_age ",[288,168111,344],{"class":294},[288,168113,168066],{"class":298},[288,168115,166986],{"class":294},[288,168117,168071],{"class":298},[288,168119,69297],{"class":403},[288,168121,4615],{"class":298},[288,168123,1207],{"class":294},[288,168125,156385],{"class":347},[288,168127,305],{"class":298},[288,168129,168130],{"class":290,"line":1851},[288,168131,2572],{"emptyLinePlaceholder":217},[288,168133,168134,168136],{"class":290,"line":1865},[288,168135,30588],{"class":347},[288,168137,168138],{"class":298},"(passed)\n",[288,168140,168141,168143],{"class":290,"line":1870},[288,168142,30588],{"class":347},[288,168144,168145],{"class":298},"(excellent)\n",[288,168147,168148,168150],{"class":290,"line":1899},[288,168149,30588],{"class":347},[288,168151,168152],{"class":298},"(under_age)\n",[14,168154,168156],{"id":168155},"_715-易错点","7.15 易错点",[243,168158,168159,168162,168170,168175,168186],{},[246,168160,168161],{},"默认参数不要写可变对象。",[246,168163,168164,168166,168167,168169],{},[25,168165,166632],{}," 是元组，",[25,168168,166747],{}," 是字典。",[246,168171,168172,168174],{},[25,168173,166986],{}," 只适合简单表达式。",[246,168176,168177,101191,168179,168181,168182,168185],{},[25,168178,74217],{},[25,168180,80224],{}," 的结果是迭代器，常用 ",[25,168183,168184],{},"list()"," 转换查看。",[246,168187,168188],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168190,168192],{"id":168191},"_716-本章练习","7.16 本章练习",[243,168194,168195,168202,168208,168213,168218],{},[246,168196,168197,168198,168201],{},"写函数 ",[25,168199,168200],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[246,168203,168197,168204,168207],{},[25,168205,168206],{},"print_user(**kwargs)","，输出用户所有字段。",[246,168209,104539,168210,168212],{},[25,168211,166986],{}," 对学生列表按年龄排序。",[246,168214,104539,168215,168217],{},[25,168216,80224],{}," 找出成绩不及格的学生。",[246,168219,168220],{},"写一个装饰器，统计函数执行前后的提示信息。",[5299,168222,168223],{},"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":205,"searchDepth":206,"depth":206,"links":168225},[168226,168227,168228,168229,168230,168231,168235,168236,168237,168238,168243,168244,168245,168246,168247,168248],{"id":166084,"depth":206,"text":166085},{"id":166198,"depth":206,"text":166199},{"id":166287,"depth":206,"text":166288},{"id":166349,"depth":206,"text":166350},{"id":166495,"depth":206,"text":166496},{"id":166622,"depth":206,"text":166623,"children":168232},[168233,168234],{"id":166626,"depth":1352,"text":166627},{"id":166741,"depth":1352,"text":166742},{"id":166822,"depth":206,"text":166823},{"id":166980,"depth":206,"text":166981},{"id":167148,"depth":206,"text":167149},{"id":167230,"depth":206,"text":167231,"children":168239},[168240,168241,168242],{"id":167234,"depth":1352,"text":167235},{"id":167305,"depth":1352,"text":167306},{"id":167382,"depth":1352,"text":167383},{"id":167507,"depth":206,"text":167508},{"id":167597,"depth":206,"text":167598},{"id":167728,"depth":206,"text":167729},{"id":167878,"depth":206,"text":167879},{"id":168155,"depth":206,"text":168156},{"id":168191,"depth":206,"text":168192},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166076,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168255,"title":168256,"body":168257,"description":214,"extension":215,"meta":170776,"navigation":217,"path":170777,"seo":170778,"stem":170779,"__hash__":170780},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168258,"toc":170751},[168259,168262,168266,168269,168272,168303,168307,168311,168314,168341,168345,168348,168399,168402,168417,168420,168455,168459,168461,168485,168488,168548,168552,168556,168559,168616,168619,168639,168643,168646,168709,168713,168716,168772,168779,168803,168807,168810,168873,168877,168882,168933,168936,168940,168945,169012,169015,169097,169101,169106,169157,169160,169164,169167,169170,169178,169181,169227,169230,169276,169280,169286,169330,169333,169379,169382,169422,169425,169486,169490,169493,169583,169586,169728,169731,169798,169802,169805,169808,169949,169952,170030,170033,170209,170213,170215,170226,170228,170427,170431,170675,170679,170713,170717,170748],[10,168260,168256],{"id":168261},"_8-文件操作",[14,168263,168265],{"id":168264},"_81-文件操作的意义","8.1 文件操作的意义",[19,168267,168268],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168270,168271],{},"常见文件类型：",[243,168273,168274,168280,168286,168292,168298],{},[246,168275,168276,168279],{},[25,168277,168278],{},".txt","：普通文本。",[246,168281,168282,168285],{},[25,168283,168284],{},".csv","：表格文本。",[246,168287,168288,168291],{},[25,168289,168290],{},".json","：结构化数据。",[246,168293,168294,168297],{},[25,168295,168296],{},".log","：日志文件。",[246,168299,168300,168302],{},[25,168301,146452],{},"：Python 源代码。",[14,168304,168306],{"id":168305},"_82-路径","8.2 路径",[260,168308,168310],{"id":168309},"_821-相对路径","8.2.1 相对路径",[19,168312,168313],{},"相对当前运行目录：",[280,168315,168317],{"className":30551,"code":168316,"language":30553,"meta":205,"style":205},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[25,168318,168319],{"__ignoreMap":205},[288,168320,168321,168323,168325,168327,168329,168331,168333,168335,168337,168339],{"class":290,"line":291},[288,168322,87088],{"class":347},[288,168324,299],{"class":298},[288,168326,146896],{"class":403},[288,168328,12608],{"class":298},[288,168330,146901],{"class":403},[288,168332,12608],{"class":298},[288,168334,146906],{"class":5389},[288,168336,344],{"class":294},[288,168338,146911],{"class":403},[288,168340,305],{"class":298},[260,168342,168344],{"id":168343},"_822-绝对路径","8.2.2 绝对路径",[19,168346,168347],{},"从根目录或盘符开始：",[280,168349,168351],{"className":30551,"code":168350,"language":30553,"meta":205,"style":205},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[25,168352,168353,168376],{"__ignoreMap":205},[288,168354,168355,168357,168359,168362,168364,168366,168368,168370,168372,168374],{"class":290,"line":291},[288,168356,87088],{"class":347},[288,168358,299],{"class":298},[288,168360,168361],{"class":403},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[288,168363,12608],{"class":298},[288,168365,146901],{"class":403},[288,168367,12608],{"class":298},[288,168369,146906],{"class":5389},[288,168371,344],{"class":294},[288,168373,146911],{"class":403},[288,168375,305],{"class":298},[288,168377,168378,168380,168382,168385,168387,168389,168391,168393,168395,168397],{"class":290,"line":206},[288,168379,87088],{"class":347},[288,168381,299],{"class":298},[288,168383,168384],{"class":403},"\"D:\u002Fdata\u002Fdata.txt\"",[288,168386,12608],{"class":298},[288,168388,146901],{"class":403},[288,168390,12608],{"class":298},[288,168392,146906],{"class":5389},[288,168394,344],{"class":294},[288,168396,146911],{"class":403},[288,168398,305],{"class":298},[19,168400,168401],{},"Windows 路径建议写成：",[280,168403,168405],{"className":30551,"code":168404,"language":30553,"meta":205,"style":205},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[25,168406,168407],{"__ignoreMap":205},[288,168408,168409,168412,168414],{"class":290,"line":291},[288,168410,168411],{"class":298},"path ",[288,168413,344],{"class":294},[288,168415,168416],{"class":403}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168418,168419],{},"或原始字符串：",[280,168421,168423],{"className":30551,"code":168422,"language":30553,"meta":205,"style":205},"path = r\"D:\\data\\data.txt\"\n",[25,168424,168425],{"__ignoreMap":205},[288,168426,168427,168429,168431,168433,168435,168438,168441,168444,168446,168448,168450,168453],{"class":290,"line":291},[288,168428,168411],{"class":298},[288,168430,344],{"class":294},[288,168432,17294],{"class":294},[288,168434,109],{"class":403},[288,168436,168437],{"class":48150},"D:",[288,168439,168440],{"class":347},"\\d",[288,168442,168443],{"class":48150},"ata",[288,168445,168440],{"class":347},[288,168447,168443],{"class":48150},[288,168449,855],{"class":347},[288,168451,168452],{"class":48150},"txt",[288,168454,25306],{"class":403},[14,168456,168458],{"id":168457},"_83-open函数","8.3 open函数",[19,168460,5354],{},[280,168462,168464],{"className":30551,"code":168463,"language":30553,"meta":205,"style":205},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[25,168465,168466],{"__ignoreMap":205},[288,168467,168468,168470,168472,168474,168477,168479,168481,168483],{"class":290,"line":291},[288,168469,45527],{"class":5389},[288,168471,13737],{"class":294},[288,168473,146891],{"class":347},[288,168475,168476],{"class":298},"(文件路径, 打开模式, ",[288,168478,146906],{"class":5389},[288,168480,344],{"class":294},[288,168482,146911],{"class":403},[288,168484,305],{"class":298},[19,168486,168487],{},"常见模式：",[436,168489,168490,168499],{},[439,168491,168492],{},[442,168493,168494,168497],{},[445,168495,168496],{},"模式",[445,168498,26042],{},[483,168500,168501,168510,168519,168528,168538],{},[442,168502,168503,168507],{},[488,168504,168505],{},[25,168506,967],{},[488,168508,168509],{},"只读，文件不存在会报错",[442,168511,168512,168516],{},[488,168513,168514],{},[25,168515,1092],{},[488,168517,168518],{},"只写，文件不存在会创建，存在会清空",[442,168520,168521,168525],{},[488,168522,168523],{},[25,168524,104],{},[488,168526,168527],{},"追加，文件不存在会创建",[442,168529,168530,168535],{},[488,168531,168532],{},[25,168533,168534],{},"rb",[488,168536,168537],{},"二进制只读",[442,168539,168540,168545],{},[488,168541,168542],{},[25,168543,168544],{},"wb",[488,168546,168547],{},"二进制只写",[14,168549,168551],{"id":168550},"_84-读取文件","8.4 读取文件",[260,168553,168555],{"id":168554},"_841-read","8.4.1 read",[19,168557,168558],{},"一次读取全部内容：",[280,168560,168562],{"className":30551,"code":168561,"language":30553,"meta":205,"style":205},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[25,168563,168564,168590,168602,168609],{"__ignoreMap":205},[288,168565,168566,168568,168570,168572,168574,168576,168578,168580,168582,168584,168586,168588],{"class":290,"line":291},[288,168567,45527],{"class":5389},[288,168569,13737],{"class":294},[288,168571,146891],{"class":347},[288,168573,299],{"class":298},[288,168575,146896],{"class":403},[288,168577,12608],{"class":298},[288,168579,146901],{"class":403},[288,168581,12608],{"class":298},[288,168583,146906],{"class":5389},[288,168585,344],{"class":294},[288,168587,146911],{"class":403},[288,168589,305],{"class":298},[288,168591,168592,168595,168597,168599],{"class":290,"line":206},[288,168593,168594],{"class":298},"content ",[288,168596,344],{"class":294},[288,168598,148253],{"class":5389},[288,168600,168601],{"class":298},".read()\n",[288,168603,168604,168606],{"class":290,"line":1352},[288,168605,30588],{"class":347},[288,168607,168608],{"class":298},"(content)\n",[288,168610,168611,168613],{"class":290,"line":1367},[288,168612,45527],{"class":5389},[288,168614,168615],{"class":298},".close()\n",[19,168617,168618],{},"可以指定读取字符数：",[280,168620,168622],{"className":30551,"code":168621,"language":30553,"meta":205,"style":205},"content = file.read(10)\n",[25,168623,168624],{"__ignoreMap":205},[288,168625,168626,168628,168630,168632,168635,168637],{"class":290,"line":291},[288,168627,168594],{"class":298},[288,168629,344],{"class":294},[288,168631,148253],{"class":5389},[288,168633,168634],{"class":298},".read(",[288,168636,743],{"class":347},[288,168638,305],{"class":298},[260,168640,168642],{"id":168641},"_842-readline","8.4.2 readline",[19,168644,168645],{},"一次读取一行：",[280,168647,168649],{"className":30551,"code":168648,"language":30553,"meta":205,"style":205},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[25,168650,168651,168677,168681,168692,168699,168703],{"__ignoreMap":205},[288,168652,168653,168655,168657,168659,168661,168663,168665,168667,168669,168671,168673,168675],{"class":290,"line":291},[288,168654,45527],{"class":5389},[288,168656,13737],{"class":294},[288,168658,146891],{"class":347},[288,168660,299],{"class":298},[288,168662,146896],{"class":403},[288,168664,12608],{"class":298},[288,168666,146901],{"class":403},[288,168668,12608],{"class":298},[288,168670,146906],{"class":5389},[288,168672,344],{"class":294},[288,168674,146911],{"class":403},[288,168676,305],{"class":298},[288,168678,168679],{"class":290,"line":206},[288,168680,2572],{"emptyLinePlaceholder":217},[288,168682,168683,168685,168687,168689],{"class":290,"line":1352},[288,168684,147352],{"class":298},[288,168686,344],{"class":294},[288,168688,148253],{"class":5389},[288,168690,168691],{"class":298},".readline()\n",[288,168693,168694,168696],{"class":290,"line":1367},[288,168695,30588],{"class":347},[288,168697,168698],{"class":298},"(line)\n",[288,168700,168701],{"class":290,"line":1373},[288,168702,2572],{"emptyLinePlaceholder":217},[288,168704,168705,168707],{"class":290,"line":1387},[288,168706,45527],{"class":5389},[288,168708,168615],{"class":298},[260,168710,168712],{"id":168711},"_843-readlines","8.4.3 readlines",[19,168714,168715],{},"读取所有行，返回列表：",[280,168717,168719],{"className":30551,"code":168718,"language":30553,"meta":205,"style":205},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[25,168720,168721,168747,168759,168766],{"__ignoreMap":205},[288,168722,168723,168725,168727,168729,168731,168733,168735,168737,168739,168741,168743,168745],{"class":290,"line":291},[288,168724,45527],{"class":5389},[288,168726,13737],{"class":294},[288,168728,146891],{"class":347},[288,168730,299],{"class":298},[288,168732,146896],{"class":403},[288,168734,12608],{"class":298},[288,168736,146901],{"class":403},[288,168738,12608],{"class":298},[288,168740,146906],{"class":5389},[288,168742,344],{"class":294},[288,168744,146911],{"class":403},[288,168746,305],{"class":298},[288,168748,168749,168752,168754,168756],{"class":290,"line":206},[288,168750,168751],{"class":298},"lines ",[288,168753,344],{"class":294},[288,168755,148253],{"class":5389},[288,168757,168758],{"class":298},".readlines()\n",[288,168760,168761,168763],{"class":290,"line":1352},[288,168762,30588],{"class":347},[288,168764,168765],{"class":298},"(lines)\n",[288,168767,168768,168770],{"class":290,"line":1367},[288,168769,45527],{"class":5389},[288,168771,168615],{"class":298},[19,168773,168774,168775,168778],{},"每一行通常带有换行符，可以用 ",[25,168776,168777],{},"strip()"," 去掉：",[280,168780,168782],{"className":30551,"code":168781,"language":30553,"meta":205,"style":205},"for line in lines:\n    print(line.strip())\n",[25,168783,168784,168796],{"__ignoreMap":205},[288,168785,168786,168788,168791,168793],{"class":290,"line":291},[288,168787,3197],{"class":294},[288,168789,168790],{"class":298}," line ",[288,168792,26216],{"class":294},[288,168794,168795],{"class":298}," lines:\n",[288,168797,168798,168800],{"class":290,"line":206},[288,168799,31472],{"class":347},[288,168801,168802],{"class":298},"(line.strip())\n",[260,168804,168806],{"id":168805},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168808,168809],{},"推荐读取大文件时使用：",[280,168811,168813],{"className":30551,"code":168812,"language":30553,"meta":205,"style":205},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[25,168814,168815,168841,168845,168857,168863,168867],{"__ignoreMap":205},[288,168816,168817,168819,168821,168823,168825,168827,168829,168831,168833,168835,168837,168839],{"class":290,"line":291},[288,168818,45527],{"class":5389},[288,168820,13737],{"class":294},[288,168822,146891],{"class":347},[288,168824,299],{"class":298},[288,168826,146896],{"class":403},[288,168828,12608],{"class":298},[288,168830,146901],{"class":403},[288,168832,12608],{"class":298},[288,168834,146906],{"class":5389},[288,168836,344],{"class":294},[288,168838,146911],{"class":403},[288,168840,305],{"class":298},[288,168842,168843],{"class":290,"line":206},[288,168844,2572],{"emptyLinePlaceholder":217},[288,168846,168847,168849,168851,168853,168855],{"class":290,"line":1352},[288,168848,3197],{"class":294},[288,168850,168790],{"class":298},[288,168852,26216],{"class":294},[288,168854,148253],{"class":5389},[288,168856,3911],{"class":298},[288,168858,168859,168861],{"class":290,"line":1367},[288,168860,31472],{"class":347},[288,168862,168802],{"class":298},[288,168864,168865],{"class":290,"line":1373},[288,168866,2572],{"emptyLinePlaceholder":217},[288,168868,168869,168871],{"class":290,"line":1387},[288,168870,45527],{"class":5389},[288,168872,168615],{"class":298},[14,168874,168876],{"id":168875},"_85-with语句","8.5 with语句",[19,168878,168879,168881],{},[25,168880,108006],{}," 会自动关闭文件，推荐使用。",[280,168883,168885],{"className":30551,"code":168884,"language":30553,"meta":205,"style":205},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[25,168886,168887,168917,168927],{"__ignoreMap":205},[288,168888,168889,168891,168893,168895,168897,168899,168901,168903,168905,168907,168909,168911,168913,168915],{"class":290,"line":291},[288,168890,108006],{"class":294},[288,168892,146891],{"class":347},[288,168894,299],{"class":298},[288,168896,146896],{"class":403},[288,168898,12608],{"class":298},[288,168900,146901],{"class":403},[288,168902,12608],{"class":298},[288,168904,146906],{"class":5389},[288,168906,344],{"class":294},[288,168908,146911],{"class":403},[288,168910,13887],{"class":298},[288,168912,31556],{"class":294},[288,168914,148253],{"class":5389},[288,168916,3911],{"class":298},[288,168918,168919,168921,168923,168925],{"class":290,"line":206},[288,168920,146923],{"class":298},[288,168922,344],{"class":294},[288,168924,148253],{"class":5389},[288,168926,168601],{"class":298},[288,168928,168929,168931],{"class":290,"line":1352},[288,168930,31472],{"class":347},[288,168932,168608],{"class":298},[19,168934,168935],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168937,168939],{"id":168938},"_86-写入文件","8.6 写入文件",[19,168941,168942,168944],{},[25,168943,1092],{}," 模式会清空原文件。",[280,168946,168948],{"className":30551,"code":168947,"language":30553,"meta":205,"style":205},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[25,168949,168950,168980,168997],{"__ignoreMap":205},[288,168951,168952,168954,168956,168958,168960,168962,168964,168966,168968,168970,168972,168974,168976,168978],{"class":290,"line":291},[288,168953,108006],{"class":294},[288,168955,146891],{"class":347},[288,168957,299],{"class":298},[288,168959,146896],{"class":403},[288,168961,12608],{"class":298},[288,168963,152076],{"class":403},[288,168965,12608],{"class":298},[288,168967,146906],{"class":5389},[288,168969,344],{"class":294},[288,168971,146911],{"class":403},[288,168973,13887],{"class":298},[288,168975,31556],{"class":294},[288,168977,148253],{"class":5389},[288,168979,3911],{"class":298},[288,168981,168982,168985,168988,168991,168993,168995],{"class":290,"line":206},[288,168983,168984],{"class":5389},"    file",[288,168986,168987],{"class":298},".write(",[288,168989,168990],{"class":403},"\"hello",[288,168992,156625],{"class":347},[288,168994,109],{"class":403},[288,168996,305],{"class":298},[288,168998,168999,169001,169003,169006,169008,169010],{"class":290,"line":1352},[288,169000,168984],{"class":5389},[288,169002,168987],{"class":298},[288,169004,169005],{"class":403},"\"python",[288,169007,156625],{"class":347},[288,169009,109],{"class":403},[288,169011,305],{"class":298},[19,169013,169014],{},"写入多行：",[280,169016,169018],{"className":30551,"code":169017,"language":30553,"meta":205,"style":205},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[25,169019,169020,169055,169059,169090],{"__ignoreMap":205},[288,169021,169022,169024,169026,169028,169031,169033,169035,169037,169040,169042,169044,169046,169049,169051,169053],{"class":290,"line":291},[288,169023,168751],{"class":298},[288,169025,344],{"class":294},[288,169027,52399],{"class":298},[288,169029,169030],{"class":403},"\"小明,18",[288,169032,156625],{"class":347},[288,169034,109],{"class":403},[288,169036,12608],{"class":298},[288,169038,169039],{"class":403},"\"小红,17",[288,169041,156625],{"class":347},[288,169043,109],{"class":403},[288,169045,12608],{"class":298},[288,169047,169048],{"class":403},"\"小刚,19",[288,169050,156625],{"class":347},[288,169052,109],{"class":403},[288,169054,33419],{"class":298},[288,169056,169057],{"class":290,"line":206},[288,169058,2572],{"emptyLinePlaceholder":217},[288,169060,169061,169063,169065,169067,169070,169072,169074,169076,169078,169080,169082,169084,169086,169088],{"class":290,"line":1352},[288,169062,108006],{"class":294},[288,169064,146891],{"class":347},[288,169066,299],{"class":298},[288,169068,169069],{"class":403},"\"students.txt\"",[288,169071,12608],{"class":298},[288,169073,152076],{"class":403},[288,169075,12608],{"class":298},[288,169077,146906],{"class":5389},[288,169079,344],{"class":294},[288,169081,146911],{"class":403},[288,169083,13887],{"class":298},[288,169085,31556],{"class":294},[288,169087,148253],{"class":5389},[288,169089,3911],{"class":298},[288,169091,169092,169094],{"class":290,"line":1367},[288,169093,168984],{"class":5389},[288,169095,169096],{"class":298},".writelines(lines)\n",[14,169098,169100],{"id":169099},"_87-追加文件","8.7 追加文件",[19,169102,169103,169105],{},[25,169104,104],{}," 模式不会清空原内容，而是在末尾追加。",[280,169107,169109],{"className":30551,"code":169108,"language":30553,"meta":205,"style":205},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[25,169110,169111,169142],{"__ignoreMap":205},[288,169112,169113,169115,169117,169119,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140],{"class":290,"line":291},[288,169114,108006],{"class":294},[288,169116,146891],{"class":347},[288,169118,299],{"class":298},[288,169120,169121],{"class":403},"\"log.txt\"",[288,169123,12608],{"class":298},[288,169125,165425],{"class":403},[288,169127,12608],{"class":298},[288,169129,146906],{"class":5389},[288,169131,344],{"class":294},[288,169133,146911],{"class":403},[288,169135,13887],{"class":298},[288,169137,31556],{"class":294},[288,169139,148253],{"class":5389},[288,169141,3911],{"class":298},[288,169143,169144,169146,169148,169151,169153,169155],{"class":290,"line":206},[288,169145,168984],{"class":5389},[288,169147,168987],{"class":298},[288,169149,169150],{"class":403},"\"程序启动",[288,169152,156625],{"class":347},[288,169154,109],{"class":403},[288,169156,305],{"class":298},[19,169158,169159],{},"日志类文件常用追加模式。",[14,169161,169163],{"id":169162},"_88-文件编码","8.8 文件编码",[19,169165,169166],{},"编码决定文字如何保存为字节。",[19,169168,169169],{},"常见编码：",[243,169171,169172,169175],{},[246,169173,169174],{},"UTF-8：推荐。",[246,169176,169177],{},"GBK：部分 Windows 中文文件常见。",[19,169179,169180],{},"读取文件乱码时，可以尝试：",[280,169182,169184],{"className":30551,"code":169183,"language":30553,"meta":205,"style":205},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[25,169185,169186,169217],{"__ignoreMap":205},[288,169187,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169209,169211,169213,169215],{"class":290,"line":291},[288,169189,108006],{"class":294},[288,169191,146891],{"class":347},[288,169193,299],{"class":298},[288,169195,146896],{"class":403},[288,169197,12608],{"class":298},[288,169199,146901],{"class":403},[288,169201,12608],{"class":298},[288,169203,146906],{"class":5389},[288,169205,344],{"class":294},[288,169207,169208],{"class":403},"\"gbk\"",[288,169210,13887],{"class":298},[288,169212,31556],{"class":294},[288,169214,148253],{"class":5389},[288,169216,3911],{"class":298},[288,169218,169219,169221,169223,169225],{"class":290,"line":206},[288,169220,146923],{"class":298},[288,169222,344],{"class":294},[288,169224,148253],{"class":5389},[288,169226,168601],{"class":298},[19,169228,169229],{},"写文件时建议统一 UTF-8：",[280,169231,169233],{"className":30551,"code":169232,"language":30553,"meta":205,"style":205},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[25,169234,169235,169265],{"__ignoreMap":205},[288,169236,169237,169239,169241,169243,169245,169247,169249,169251,169253,169255,169257,169259,169261,169263],{"class":290,"line":291},[288,169238,108006],{"class":294},[288,169240,146891],{"class":347},[288,169242,299],{"class":298},[288,169244,146896],{"class":403},[288,169246,12608],{"class":298},[288,169248,152076],{"class":403},[288,169250,12608],{"class":298},[288,169252,146906],{"class":5389},[288,169254,344],{"class":294},[288,169256,146911],{"class":403},[288,169258,13887],{"class":298},[288,169260,31556],{"class":294},[288,169262,148253],{"class":5389},[288,169264,3911],{"class":298},[288,169266,169267,169269,169271,169274],{"class":290,"line":206},[288,169268,168984],{"class":5389},[288,169270,168987],{"class":298},[288,169272,169273],{"class":403},"\"中文内容\"",[288,169275,305],{"class":298},[14,169277,169279],{"id":169278},"_89-pathlib","8.9 pathlib",[19,169281,169282,169285],{},[25,169283,169284],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[280,169287,169289],{"className":30551,"code":169288,"language":30553,"meta":205,"style":205},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[25,169290,169291,169301,169305,169323],{"__ignoreMap":205},[288,169292,169293,169295,169297,169299],{"class":290,"line":291},[288,169294,30910],{"class":294},[288,169296,108484],{"class":298},[288,169298,30565],{"class":294},[288,169300,108489],{"class":298},[288,169302,169303],{"class":290,"line":206},[288,169304,2572],{"emptyLinePlaceholder":217},[288,169306,169307,169309,169311,169313,169316,169318,169320],{"class":290,"line":1352},[288,169308,168411],{"class":298},[288,169310,344],{"class":294},[288,169312,108718],{"class":298},[288,169314,169315],{"class":403},"\"data\"",[288,169317,13887],{"class":298},[288,169319,881],{"class":294},[288,169321,169322],{"class":403}," \"students.txt\"\n",[288,169324,169325,169327],{"class":290,"line":1367},[288,169326,30588],{"class":347},[288,169328,169329],{"class":298},"(path)\n",[19,169331,169332],{},"创建目录：",[280,169334,169336],{"className":30551,"code":169335,"language":30553,"meta":205,"style":205},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[25,169337,169338,169348,169352,169365],{"__ignoreMap":205},[288,169339,169340,169342,169344,169346],{"class":290,"line":291},[288,169341,30910],{"class":294},[288,169343,108484],{"class":298},[288,169345,30565],{"class":294},[288,169347,108489],{"class":298},[288,169349,169350],{"class":290,"line":206},[288,169351,2572],{"emptyLinePlaceholder":217},[288,169353,169354,169357,169359,169361,169363],{"class":290,"line":1352},[288,169355,169356],{"class":298},"data_dir ",[288,169358,344],{"class":294},[288,169360,108718],{"class":298},[288,169362,169315],{"class":403},[288,169364,305],{"class":298},[288,169366,169367,169370,169373,169375,169377],{"class":290,"line":1367},[288,169368,169369],{"class":298},"data_dir.mkdir(",[288,169371,169372],{"class":5389},"exist_ok",[288,169374,344],{"class":294},[288,169376,31649],{"class":347},[288,169378,305],{"class":298},[19,169380,169381],{},"判断文件是否存在：",[280,169383,169385],{"className":30551,"code":169384,"language":30553,"meta":205,"style":205},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[25,169386,169387,169400,169404,169411],{"__ignoreMap":205},[288,169388,169389,169391,169393,169395,169398],{"class":290,"line":291},[288,169390,168411],{"class":298},[288,169392,344],{"class":294},[288,169394,108718],{"class":298},[288,169396,169397],{"class":403},"\"data\u002Fstudents.txt\"",[288,169399,305],{"class":298},[288,169401,169402],{"class":290,"line":206},[288,169403,2572],{"emptyLinePlaceholder":217},[288,169405,169406,169408],{"class":290,"line":1352},[288,169407,1703],{"class":294},[288,169409,169410],{"class":298}," path.exists():\n",[288,169412,169413,169415,169417,169420],{"class":290,"line":1367},[288,169414,31472],{"class":347},[288,169416,299],{"class":298},[288,169418,169419],{"class":403},"\"文件存在\"",[288,169421,305],{"class":298},[19,169423,169424],{},"读写文本：",[280,169426,169428],{"className":30551,"code":169427,"language":30553,"meta":205,"style":205},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[25,169429,169430,169442,169446,169463,169480],{"__ignoreMap":205},[288,169431,169432,169434,169436,169438,169440],{"class":290,"line":291},[288,169433,168411],{"class":298},[288,169435,344],{"class":294},[288,169437,108718],{"class":298},[288,169439,146896],{"class":403},[288,169441,305],{"class":298},[288,169443,169444],{"class":290,"line":206},[288,169445,2572],{"emptyLinePlaceholder":217},[288,169447,169448,169451,169453,169455,169457,169459,169461],{"class":290,"line":1352},[288,169449,169450],{"class":298},"path.write_text(",[288,169452,145976],{"class":403},[288,169454,12608],{"class":298},[288,169456,146906],{"class":5389},[288,169458,344],{"class":294},[288,169460,146911],{"class":403},[288,169462,305],{"class":298},[288,169464,169465,169467,169469,169472,169474,169476,169478],{"class":290,"line":1367},[288,169466,168594],{"class":298},[288,169468,344],{"class":294},[288,169470,169471],{"class":298}," path.read_text(",[288,169473,146906],{"class":5389},[288,169475,344],{"class":294},[288,169477,146911],{"class":403},[288,169479,305],{"class":298},[288,169481,169482,169484],{"class":290,"line":1373},[288,169483,30588],{"class":347},[288,169485,168608],{"class":298},[14,169487,169489],{"id":169488},"_810-json文件","8.10 JSON文件",[19,169491,169492],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[280,169494,169496],{"className":30551,"code":169495,"language":30553,"meta":205,"style":205},"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",[25,169497,169498,169504,169508,169516,169526,169536,169544,169548,169552,169577],{"__ignoreMap":205},[288,169499,169500,169502],{"class":290,"line":291},[288,169501,30565],{"class":294},[288,169503,147191],{"class":298},[288,169505,169506],{"class":290,"line":206},[288,169507,2572],{"emptyLinePlaceholder":217},[288,169509,169510,169512,169514],{"class":290,"line":1352},[288,169511,149581],{"class":298},[288,169513,344],{"class":294},[288,169515,15745],{"class":298},[288,169517,169518,169520,169522,169524],{"class":290,"line":1367},[288,169519,147120],{"class":403},[288,169521,51610],{"class":298},[288,169523,149988],{"class":403},[288,169525,31639],{"class":298},[288,169527,169528,169530,169532,169534],{"class":290,"line":1373},[288,169529,164637],{"class":403},[288,169531,51610],{"class":298},[288,169533,947],{"class":347},[288,169535,31639],{"class":298},[288,169537,169538,169540,169542],{"class":290,"line":1387},[288,169539,164648],{"class":403},[288,169541,51610],{"class":298},[288,169543,164653],{"class":347},[288,169545,169546],{"class":290,"line":1393},[288,169547,1737],{"class":298},[288,169549,169550],{"class":290,"line":1484},[288,169551,2572],{"emptyLinePlaceholder":217},[288,169553,169554,169556,169558,169561,169563,169565,169567,169569,169571,169573,169575],{"class":290,"line":1490},[288,169555,156544],{"class":298},[288,169557,344],{"class":294},[288,169559,169560],{"class":298}," json.dumps(student, ",[288,169562,147237],{"class":5389},[288,169564,344],{"class":294},[288,169566,34160],{"class":347},[288,169568,12608],{"class":298},[288,169570,152112],{"class":5389},[288,169572,344],{"class":294},[288,169574,376],{"class":347},[288,169576,305],{"class":298},[288,169578,169579,169581],{"class":290,"line":1502},[288,169580,30588],{"class":347},[288,169582,164171],{"class":298},[19,169584,169585],{},"写入 JSON 文件：",[280,169587,169589],{"className":30551,"code":169588,"language":30553,"meta":205,"style":205},"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",[25,169590,169591,169597,169601,169609,169637,169665,169669,169673,169703],{"__ignoreMap":205},[288,169592,169593,169595],{"class":290,"line":291},[288,169594,30565],{"class":294},[288,169596,147191],{"class":298},[288,169598,169599],{"class":290,"line":206},[288,169600,2572],{"emptyLinePlaceholder":217},[288,169602,169603,169605,169607],{"class":290,"line":1352},[288,169604,159816],{"class":298},[288,169606,344],{"class":294},[288,169608,55620],{"class":298},[288,169610,169611,169613,169615,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635],{"class":290,"line":1367},[288,169612,148485],{"class":298},[288,169614,62852],{"class":403},[288,169616,51610],{"class":298},[288,169618,149988],{"class":403},[288,169620,12608],{"class":298},[288,169622,69297],{"class":403},[288,169624,51610],{"class":298},[288,169626,947],{"class":347},[288,169628,12608],{"class":298},[288,169630,151572],{"class":403},[288,169632,51610],{"class":298},[288,169634,1286],{"class":347},[288,169636,5102],{"class":298},[288,169638,169639,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659,169661,169663],{"class":290,"line":1373},[288,169640,148485],{"class":298},[288,169642,62852],{"class":403},[288,169644,51610],{"class":298},[288,169646,151036],{"class":403},[288,169648,12608],{"class":298},[288,169650,69297],{"class":403},[288,169652,51610],{"class":298},[288,169654,922],{"class":347},[288,169656,12608],{"class":298},[288,169658,151572],{"class":403},[288,169660,51610],{"class":298},[288,169662,1108],{"class":347},[288,169664,5102],{"class":298},[288,169666,169667],{"class":290,"line":1387},[288,169668,33419],{"class":298},[288,169670,169671],{"class":290,"line":1393},[288,169672,2572],{"emptyLinePlaceholder":217},[288,169674,169675,169677,169679,169681,169683,169685,169687,169689,169691,169693,169695,169697,169699,169701],{"class":290,"line":1484},[288,169676,108006],{"class":294},[288,169678,146891],{"class":347},[288,169680,299],{"class":298},[288,169682,151931],{"class":403},[288,169684,12608],{"class":298},[288,169686,152076],{"class":403},[288,169688,12608],{"class":298},[288,169690,146906],{"class":5389},[288,169692,344],{"class":294},[288,169694,146911],{"class":403},[288,169696,13887],{"class":298},[288,169698,31556],{"class":294},[288,169700,148253],{"class":5389},[288,169702,3911],{"class":298},[288,169704,169705,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726],{"class":290,"line":1490},[288,169706,169707],{"class":298},"    json.dump(students, ",[288,169709,45527],{"class":5389},[288,169711,12608],{"class":298},[288,169713,147237],{"class":5389},[288,169715,344],{"class":294},[288,169717,34160],{"class":347},[288,169719,12608],{"class":298},[288,169721,152112],{"class":5389},[288,169723,344],{"class":294},[288,169725,376],{"class":347},[288,169727,305],{"class":298},[19,169729,169730],{},"读取 JSON 文件：",[280,169732,169734],{"className":30551,"code":169733,"language":30553,"meta":205,"style":205},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[25,169735,169736,169742,169746,169776,169788,169792],{"__ignoreMap":205},[288,169737,169738,169740],{"class":290,"line":291},[288,169739,30565],{"class":294},[288,169741,147191],{"class":298},[288,169743,169744],{"class":290,"line":206},[288,169745,2572],{"emptyLinePlaceholder":217},[288,169747,169748,169750,169752,169754,169756,169758,169760,169762,169764,169766,169768,169770,169772,169774],{"class":290,"line":1352},[288,169749,108006],{"class":294},[288,169751,146891],{"class":347},[288,169753,299],{"class":298},[288,169755,151931],{"class":403},[288,169757,12608],{"class":298},[288,169759,146901],{"class":403},[288,169761,12608],{"class":298},[288,169763,146906],{"class":5389},[288,169765,344],{"class":294},[288,169767,146911],{"class":403},[288,169769,13887],{"class":298},[288,169771,31556],{"class":294},[288,169773,148253],{"class":5389},[288,169775,3911],{"class":298},[288,169777,169778,169780,169782,169784,169786],{"class":290,"line":1367},[288,169779,153137],{"class":298},[288,169781,344],{"class":294},[288,169783,148264],{"class":298},[288,169785,45527],{"class":5389},[288,169787,305],{"class":298},[288,169789,169790],{"class":290,"line":1373},[288,169791,2572],{"emptyLinePlaceholder":217},[288,169793,169794,169796],{"class":290,"line":1387},[288,169795,30588],{"class":347},[288,169797,165095],{"class":298},[14,169799,169801],{"id":169800},"_811-csv文件","8.11 CSV文件",[19,169803,169804],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169806,169807],{},"写入 CSV：",[280,169809,169811],{"className":30551,"code":169810,"language":30553,"meta":205,"style":205},"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",[25,169812,169813,169820,169824,169832,169850,169866,169882,169886,169890,169930,169944],{"__ignoreMap":205},[288,169814,169815,169817],{"class":290,"line":291},[288,169816,30565],{"class":294},[288,169818,169819],{"class":298}," csv\n",[288,169821,169822],{"class":290,"line":206},[288,169823,2572],{"emptyLinePlaceholder":217},[288,169825,169826,169828,169830],{"class":290,"line":1352},[288,169827,159816],{"class":298},[288,169829,344],{"class":294},[288,169831,55620],{"class":298},[288,169833,169834,169837,169839,169841,169843,169845,169848],{"class":290,"line":1367},[288,169835,169836],{"class":298},"    [",[288,169838,73272],{"class":403},[288,169840,12608],{"class":298},[288,169842,73305],{"class":403},[288,169844,12608],{"class":298},[288,169846,169847],{"class":403},"\"成绩\"",[288,169849,88009],{"class":298},[288,169851,169852,169854,169856,169858,169860,169862,169864],{"class":290,"line":1373},[288,169853,169836],{"class":298},[288,169855,149988],{"class":403},[288,169857,12608],{"class":298},[288,169859,947],{"class":347},[288,169861,12608],{"class":298},[288,169863,1286],{"class":347},[288,169865,88009],{"class":298},[288,169867,169868,169870,169872,169874,169876,169878,169880],{"class":290,"line":1387},[288,169869,169836],{"class":298},[288,169871,151036],{"class":403},[288,169873,12608],{"class":298},[288,169875,922],{"class":347},[288,169877,12608],{"class":298},[288,169879,1108],{"class":347},[288,169881,88009],{"class":298},[288,169883,169884],{"class":290,"line":1393},[288,169885,33419],{"class":298},[288,169887,169888],{"class":290,"line":1484},[288,169889,2572],{"emptyLinePlaceholder":217},[288,169891,169892,169894,169896,169898,169901,169903,169905,169907,169909,169911,169913,169915,169918,169920,169922,169924,169926,169928],{"class":290,"line":1490},[288,169893,108006],{"class":294},[288,169895,146891],{"class":347},[288,169897,299],{"class":298},[288,169899,169900],{"class":403},"\"students.csv\"",[288,169902,12608],{"class":298},[288,169904,152076],{"class":403},[288,169906,12608],{"class":298},[288,169908,146906],{"class":5389},[288,169910,344],{"class":294},[288,169912,146911],{"class":403},[288,169914,12608],{"class":298},[288,169916,169917],{"class":5389},"newline",[288,169919,344],{"class":294},[288,169921,7825],{"class":403},[288,169923,13887],{"class":298},[288,169925,31556],{"class":294},[288,169927,148253],{"class":5389},[288,169929,3911],{"class":298},[288,169931,169932,169935,169937,169940,169942],{"class":290,"line":1502},[288,169933,169934],{"class":298},"    writer ",[288,169936,344],{"class":294},[288,169938,169939],{"class":298}," csv.writer(",[288,169941,45527],{"class":5389},[288,169943,305],{"class":298},[288,169945,169946],{"class":290,"line":1784},[288,169947,169948],{"class":298},"    writer.writerows(students)\n",[19,169950,169951],{},"读取 CSV：",[280,169953,169955],{"className":30551,"code":169954,"language":30553,"meta":205,"style":205},"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",[25,169956,169957,169963,169967,169997,170011,170023],{"__ignoreMap":205},[288,169958,169959,169961],{"class":290,"line":291},[288,169960,30565],{"class":294},[288,169962,169819],{"class":298},[288,169964,169965],{"class":290,"line":206},[288,169966,2572],{"emptyLinePlaceholder":217},[288,169968,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":290,"line":1352},[288,169970,108006],{"class":294},[288,169972,146891],{"class":347},[288,169974,299],{"class":298},[288,169976,169900],{"class":403},[288,169978,12608],{"class":298},[288,169980,146901],{"class":403},[288,169982,12608],{"class":298},[288,169984,146906],{"class":5389},[288,169986,344],{"class":294},[288,169988,146911],{"class":403},[288,169990,13887],{"class":298},[288,169992,31556],{"class":294},[288,169994,148253],{"class":5389},[288,169996,3911],{"class":298},[288,169998,169999,170002,170004,170007,170009],{"class":290,"line":1367},[288,170000,170001],{"class":298},"    reader ",[288,170003,344],{"class":294},[288,170005,170006],{"class":298}," csv.reader(",[288,170008,45527],{"class":5389},[288,170010,305],{"class":298},[288,170012,170013,170015,170018,170020],{"class":290,"line":1373},[288,170014,3373],{"class":294},[288,170016,170017],{"class":298}," row ",[288,170019,26216],{"class":294},[288,170021,170022],{"class":298}," reader:\n",[288,170024,170025,170027],{"class":290,"line":1387},[288,170026,32624],{"class":347},[288,170028,170029],{"class":298},"(row)\n",[19,170031,170032],{},"使用字典写入：",[280,170034,170036],{"className":30551,"code":170035,"language":30553,"meta":205,"style":205},"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",[25,170037,170038,170044,170048,170056,170084,170112,170116,170120,170158,170179,170200,170205],{"__ignoreMap":205},[288,170039,170040,170042],{"class":290,"line":291},[288,170041,30565],{"class":294},[288,170043,169819],{"class":298},[288,170045,170046],{"class":290,"line":206},[288,170047,2572],{"emptyLinePlaceholder":217},[288,170049,170050,170052,170054],{"class":290,"line":1352},[288,170051,159816],{"class":298},[288,170053,344],{"class":294},[288,170055,55620],{"class":298},[288,170057,170058,170060,170062,170064,170066,170068,170070,170072,170074,170076,170078,170080,170082],{"class":290,"line":1367},[288,170059,148485],{"class":298},[288,170061,62852],{"class":403},[288,170063,51610],{"class":298},[288,170065,149988],{"class":403},[288,170067,12608],{"class":298},[288,170069,69297],{"class":403},[288,170071,51610],{"class":298},[288,170073,947],{"class":347},[288,170075,12608],{"class":298},[288,170077,151572],{"class":403},[288,170079,51610],{"class":298},[288,170081,1286],{"class":347},[288,170083,5102],{"class":298},[288,170085,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104,170106,170108,170110],{"class":290,"line":1373},[288,170087,148485],{"class":298},[288,170089,62852],{"class":403},[288,170091,51610],{"class":298},[288,170093,151036],{"class":403},[288,170095,12608],{"class":298},[288,170097,69297],{"class":403},[288,170099,51610],{"class":298},[288,170101,922],{"class":347},[288,170103,12608],{"class":298},[288,170105,151572],{"class":403},[288,170107,51610],{"class":298},[288,170109,1108],{"class":347},[288,170111,5102],{"class":298},[288,170113,170114],{"class":290,"line":1387},[288,170115,33419],{"class":298},[288,170117,170118],{"class":290,"line":1393},[288,170119,2572],{"emptyLinePlaceholder":217},[288,170121,170122,170124,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146,170148,170150,170152,170154,170156],{"class":290,"line":1484},[288,170123,108006],{"class":294},[288,170125,146891],{"class":347},[288,170127,299],{"class":298},[288,170129,169900],{"class":403},[288,170131,12608],{"class":298},[288,170133,152076],{"class":403},[288,170135,12608],{"class":298},[288,170137,146906],{"class":5389},[288,170139,344],{"class":294},[288,170141,146911],{"class":403},[288,170143,12608],{"class":298},[288,170145,169917],{"class":5389},[288,170147,344],{"class":294},[288,170149,7825],{"class":403},[288,170151,13887],{"class":298},[288,170153,31556],{"class":294},[288,170155,148253],{"class":5389},[288,170157,3911],{"class":298},[288,170159,170160,170163,170165,170167,170169,170171,170173,170175,170177],{"class":290,"line":1490},[288,170161,170162],{"class":298},"    fieldnames ",[288,170164,344],{"class":294},[288,170166,52399],{"class":298},[288,170168,62852],{"class":403},[288,170170,12608],{"class":298},[288,170172,69297],{"class":403},[288,170174,12608],{"class":298},[288,170176,151572],{"class":403},[288,170178,33419],{"class":298},[288,170180,170181,170183,170185,170188,170190,170192,170195,170197],{"class":290,"line":1502},[288,170182,169934],{"class":298},[288,170184,344],{"class":294},[288,170186,170187],{"class":298}," csv.DictWriter(",[288,170189,45527],{"class":5389},[288,170191,12608],{"class":298},[288,170193,170194],{"class":5389},"fieldnames",[288,170196,344],{"class":294},[288,170198,170199],{"class":298},"fieldnames)\n",[288,170201,170202],{"class":290,"line":1784},[288,170203,170204],{"class":298},"    writer.writeheader()\n",[288,170206,170207],{"class":290,"line":1789},[288,170208,169948],{"class":298},[14,170210,170212],{"id":170211},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170214,123465],{},[243,170216,170217,170220,170223],{},[246,170218,170219],{},"读取文本文件。",[246,170221,170222],{},"统计每个单词出现次数。",[246,170224,170225],{},"输出出现次数最多的前 10 个单词。",[19,170227,10208],{},[280,170229,170231],{"className":30551,"code":170230,"language":30553,"meta":205,"style":205},"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",[25,170232,170233,170243,170247,170260,170276,170280,170290,170299,170303,170315,170335,170344,170348,170366,170370,170400,170404,170420],{"__ignoreMap":205},[288,170234,170235,170237,170239,170241],{"class":290,"line":291},[288,170236,30910],{"class":294},[288,170238,108484],{"class":298},[288,170240,30565],{"class":294},[288,170242,108489],{"class":298},[288,170244,170245],{"class":290,"line":206},[288,170246,2572],{"emptyLinePlaceholder":217},[288,170248,170249,170251,170253,170255,170258],{"class":290,"line":1352},[288,170250,168411],{"class":298},[288,170252,344],{"class":294},[288,170254,108718],{"class":298},[288,170256,170257],{"class":403},"\"article.txt\"",[288,170259,305],{"class":298},[288,170261,170262,170264,170266,170268,170270,170272,170274],{"class":290,"line":1367},[288,170263,168594],{"class":298},[288,170265,344],{"class":294},[288,170267,169471],{"class":298},[288,170269,146906],{"class":5389},[288,170271,344],{"class":294},[288,170273,146911],{"class":403},[288,170275,305],{"class":298},[288,170277,170278],{"class":290,"line":1373},[288,170279,2572],{"emptyLinePlaceholder":217},[288,170281,170282,170285,170287],{"class":290,"line":1387},[288,170283,170284],{"class":298},"words ",[288,170286,344],{"class":294},[288,170288,170289],{"class":298}," content.lower().split()\n",[288,170291,170292,170295,170297],{"class":290,"line":1393},[288,170293,170294],{"class":298},"counter ",[288,170296,344],{"class":294},[288,170298,88041],{"class":298},[288,170300,170301],{"class":290,"line":1484},[288,170302,2572],{"emptyLinePlaceholder":217},[288,170304,170305,170307,170310,170312],{"class":290,"line":1490},[288,170306,3197],{"class":294},[288,170308,170309],{"class":298}," word ",[288,170311,26216],{"class":294},[288,170313,170314],{"class":298}," words:\n",[288,170316,170317,170320,170322,170325,170328,170330,170333],{"class":290,"line":1502},[288,170318,170319],{"class":298},"    word ",[288,170321,344],{"class":294},[288,170323,170324],{"class":298}," word.strip(",[288,170326,170327],{"class":403},"\".,!?;:",[288,170329,156595],{"class":347},[288,170331,170332],{"class":403},"'()[]\"",[288,170334,305],{"class":298},[288,170336,170337,170339,170341],{"class":290,"line":1784},[288,170338,3273],{"class":294},[288,170340,39103],{"class":294},[288,170342,170343],{"class":298}," word:\n",[288,170345,170346],{"class":290,"line":1789},[288,170347,148612],{"class":294},[288,170349,170350,170353,170355,170358,170360,170362,170364],{"class":290,"line":1795},[288,170351,170352],{"class":298},"    counter[word] ",[288,170354,344],{"class":294},[288,170356,170357],{"class":298}," counter.get(word, ",[288,170359,490],{"class":347},[288,170361,13887],{"class":298},[288,170363,778],{"class":294},[288,170365,55872],{"class":347},[288,170367,170368],{"class":290,"line":1800},[288,170369,2572],{"emptyLinePlaceholder":217},[288,170371,170372,170375,170377,170379,170382,170384,170386,170388,170390,170392,170394,170396,170398],{"class":290,"line":1814},[288,170373,170374],{"class":298},"items ",[288,170376,344],{"class":294},[288,170378,163704],{"class":347},[288,170380,170381],{"class":298},"(counter.items(), ",[288,170383,154046],{"class":5389},[288,170385,154049],{"class":294},[288,170387,154052],{"class":298},[288,170389,516],{"class":347},[288,170391,112375],{"class":298},[288,170393,163628],{"class":5389},[288,170395,344],{"class":294},[288,170397,31649],{"class":347},[288,170399,305],{"class":298},[288,170401,170402],{"class":290,"line":1819},[288,170403,2572],{"emptyLinePlaceholder":217},[288,170405,170406,170408,170411,170413,170416,170418],{"class":290,"line":1825},[288,170407,3197],{"class":294},[288,170409,170410],{"class":298}," word, count ",[288,170412,26216],{"class":294},[288,170414,170415],{"class":298}," items[:",[288,170417,743],{"class":347},[288,170419,165855],{"class":298},[288,170421,170422,170424],{"class":290,"line":1846},[288,170423,31472],{"class":347},[288,170425,170426],{"class":298},"(word, count)\n",[14,170428,170430],{"id":170429},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[280,170432,170434],{"className":30551,"code":170433,"language":30553,"meta":205,"style":205},"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",[25,170435,170436,170442,170452,170456,170468,170472,170476,170484,170494,170500,170504,170534,170544,170548,170552,170560,170590,170614,170618,170622,170630,170659,170664],{"__ignoreMap":205},[288,170437,170438,170440],{"class":290,"line":291},[288,170439,30565],{"class":294},[288,170441,147191],{"class":298},[288,170443,170444,170446,170448,170450],{"class":290,"line":206},[288,170445,30910],{"class":294},[288,170447,108484],{"class":298},[288,170449,30565],{"class":294},[288,170451,108489],{"class":298},[288,170453,170454],{"class":290,"line":1352},[288,170455,2572],{"emptyLinePlaceholder":217},[288,170457,170458,170460,170462,170464,170466],{"class":290,"line":1367},[288,170459,151924],{"class":347},[288,170461,13737],{"class":294},[288,170463,108718],{"class":298},[288,170465,151931],{"class":403},[288,170467,305],{"class":298},[288,170469,170470],{"class":290,"line":1373},[288,170471,2572],{"emptyLinePlaceholder":217},[288,170473,170474],{"class":290,"line":1387},[288,170475,2572],{"emptyLinePlaceholder":217},[288,170477,170478,170480,170482],{"class":290,"line":1393},[288,170479,32120],{"class":294},[288,170481,151948],{"class":2135},[288,170483,32126],{"class":298},[288,170485,170486,170488,170490,170492],{"class":290,"line":1484},[288,170487,3273],{"class":294},[288,170489,39103],{"class":294},[288,170491,151959],{"class":347},[288,170493,151962],{"class":298},[288,170495,170496,170498],{"class":290,"line":1490},[288,170497,14925],{"class":294},[288,170499,52011],{"class":298},[288,170501,170502],{"class":290,"line":1502},[288,170503,2572],{"emptyLinePlaceholder":217},[288,170505,170506,170508,170510,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532],{"class":290,"line":1784},[288,170507,34351],{"class":294},[288,170509,146891],{"class":347},[288,170511,299],{"class":298},[288,170513,151924],{"class":347},[288,170515,12608],{"class":298},[288,170517,146901],{"class":403},[288,170519,12608],{"class":298},[288,170521,146906],{"class":5389},[288,170523,344],{"class":294},[288,170525,146911],{"class":403},[288,170527,13887],{"class":298},[288,170529,31556],{"class":294},[288,170531,148253],{"class":5389},[288,170533,3911],{"class":298},[288,170535,170536,170538,170540,170542],{"class":290,"line":1789},[288,170537,14925],{"class":294},[288,170539,148264],{"class":298},[288,170541,45527],{"class":5389},[288,170543,305],{"class":298},[288,170545,170546],{"class":290,"line":1795},[288,170547,2572],{"emptyLinePlaceholder":217},[288,170549,170550],{"class":290,"line":1800},[288,170551,2572],{"emptyLinePlaceholder":217},[288,170553,170554,170556,170558],{"class":290,"line":1814},[288,170555,32120],{"class":294},[288,170557,152058],{"class":2135},[288,170559,152061],{"class":298},[288,170561,170562,170564,170566,170568,170570,170572,170574,170576,170578,170580,170582,170584,170586,170588],{"class":290,"line":1819},[288,170563,34351],{"class":294},[288,170565,146891],{"class":347},[288,170567,299],{"class":298},[288,170569,151924],{"class":347},[288,170571,12608],{"class":298},[288,170573,152076],{"class":403},[288,170575,12608],{"class":298},[288,170577,146906],{"class":5389},[288,170579,344],{"class":294},[288,170581,146911],{"class":403},[288,170583,13887],{"class":298},[288,170585,31556],{"class":294},[288,170587,148253],{"class":5389},[288,170589,3911],{"class":298},[288,170591,170592,170594,170596,170598,170600,170602,170604,170606,170608,170610,170612],{"class":290,"line":1825},[288,170593,152097],{"class":298},[288,170595,45527],{"class":5389},[288,170597,12608],{"class":298},[288,170599,147237],{"class":5389},[288,170601,344],{"class":294},[288,170603,34160],{"class":347},[288,170605,12608],{"class":298},[288,170607,152112],{"class":5389},[288,170609,344],{"class":294},[288,170611,376],{"class":347},[288,170613,305],{"class":298},[288,170615,170616],{"class":290,"line":1846},[288,170617,2572],{"emptyLinePlaceholder":217},[288,170619,170620],{"class":290,"line":1851},[288,170621,2572],{"emptyLinePlaceholder":217},[288,170623,170624,170626,170628],{"class":290,"line":1865},[288,170625,159816],{"class":298},[288,170627,344],{"class":294},[288,170629,153142],{"class":298},[288,170631,170632,170635,170637,170639,170641,170643,170645,170647,170649,170651,170653,170655,170657],{"class":290,"line":1870},[288,170633,170634],{"class":298},"students.append({",[288,170636,62852],{"class":403},[288,170638,51610],{"class":298},[288,170640,149988],{"class":403},[288,170642,12608],{"class":298},[288,170644,69297],{"class":403},[288,170646,51610],{"class":298},[288,170648,947],{"class":347},[288,170650,12608],{"class":298},[288,170652,151572],{"class":403},[288,170654,51610],{"class":298},[288,170656,1286],{"class":347},[288,170658,165252],{"class":298},[288,170660,170661],{"class":290,"line":1899},[288,170662,170663],{"class":298},"save_students(students)\n",[288,170665,170666,170668,170670,170673],{"class":290,"line":1904},[288,170667,30588],{"class":347},[288,170669,299],{"class":298},[288,170671,170672],{"class":403},"\"保存成功\"",[288,170674,305],{"class":298},[14,170676,170678],{"id":170677},"_814-易错点","8.14 易错点",[243,170680,170681,170685,170691,170696,170703,170710],{},[246,170682,170683,168944],{},[25,170684,1092],{},[246,170686,170687,170688,28558],{},"读写中文要指定 ",[25,170689,170690],{},"encoding=\"utf-8\"",[246,170692,170693,170694,28558],{},"打开文件后要关闭，推荐使用 ",[25,170695,108006],{},[246,170697,170698,170699,170702],{},"读取大文件不要直接 ",[25,170700,170701],{},"read()"," 全部内容。",[246,170704,170705,170706,170709],{},"Windows 写 CSV 时建议加 ",[25,170707,170708],{},"newline=\"\"","，避免空行。",[246,170711,170712],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170714,170716],{"id":170715},"_815-本章练习","8.15 本章练习",[243,170718,170719,170726,170731,170734,170737],{},[246,170720,170721,170722,170725],{},"写入一个 ",[25,170723,170724],{},"students.txt","，每行保存一个学生姓名。",[246,170727,104528,170728,170730],{},[25,170729,170724],{}," 并输出所有学生。",[246,170732,170733],{},"把学生列表保存为 JSON 文件。",[246,170735,170736],{},"从 JSON 文件读取学生数据，计算平均分。",[246,170738,170739,170740,170743,170744,170747],{},"写一个日志函数 ",[25,170741,170742],{},"write_log(message)","，每次调用向 ",[25,170745,170746],{},"app.log"," 追加一行。",[5299,170749,170750],{},"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":205,"searchDepth":206,"depth":206,"links":170752},[170753,170754,170758,170759,170765,170766,170767,170768,170769,170770,170771,170772,170773,170774,170775],{"id":168264,"depth":206,"text":168265},{"id":168305,"depth":206,"text":168306,"children":170755},[170756,170757],{"id":168309,"depth":1352,"text":168310},{"id":168343,"depth":1352,"text":168344},{"id":168457,"depth":206,"text":168458},{"id":168550,"depth":206,"text":168551,"children":170760},[170761,170762,170763,170764],{"id":168554,"depth":1352,"text":168555},{"id":168641,"depth":1352,"text":168642},{"id":168711,"depth":1352,"text":168712},{"id":168805,"depth":1352,"text":168806},{"id":168875,"depth":206,"text":168876},{"id":168938,"depth":206,"text":168939},{"id":169099,"depth":206,"text":169100},{"id":169162,"depth":206,"text":169163},{"id":169278,"depth":206,"text":169279},{"id":169488,"depth":206,"text":169489},{"id":169800,"depth":206,"text":169801},{"id":170211,"depth":206,"text":170212},{"id":170429,"depth":206,"text":170430},{"id":170677,"depth":206,"text":170678},{"id":170715,"depth":206,"text":170716},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168256,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170782,"title":170783,"body":170784,"description":214,"extension":215,"meta":172970,"navigation":217,"path":172971,"seo":172972,"stem":172973,"__hash__":172974},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170785,"toc":172937},[170786,170789,170793,170796,170799,170891,170893,170912,170917,170921,170924,170927,170956,170963,170966,170970,170973,171002,171004,171056,171062,171115,171119,171217,171220,171287,171291,171348,171350,171356,171360,171365,171371,171462,171467,171471,171474,171552,171555,171593,171597,171715,171718,171722,171725,171770,171773,171777,171782,171788,171838,171841,171872,171876,171880,171910,171914,171949,171953,171988,172028,172032,172048,172051,172055,172059,172138,172142,172183,172187,172242,172246,172280,172284,172314,172323,172330,172336,172393,172396,172404,172407,172411,172418,172421,172427,172430,172447,172452,172456,172462,172475,172478,172515,172518,172529,172532,172546,172549,172563,172567,172574,172607,172610,172612,172618,172621,172625,172627,172633,172638,172811,172815,172878,172882,172906,172910,172934],[10,170787,170783],{"id":170788},"_9-异常模块与包",[14,170790,170792],{"id":170791},"_91-什么是异常","9.1 什么是异常",[19,170794,170795],{},"异常是程序运行过程中出现的错误。",[19,170797,170798],{},"常见异常：",[436,170800,170801,170810],{},[439,170802,170803],{},[442,170804,170805,170808],{},[445,170806,170807],{},"异常",[445,170809,26042],{},[483,170811,170812,170822,170832,170841,170851,170861,170871,170881],{},[442,170813,170814,170819],{},[488,170815,170816],{},[25,170817,170818],{},"NameError",[488,170820,170821],{},"使用了未定义变量",[442,170823,170824,170829],{},[488,170825,170826],{},[25,170827,170828],{},"TypeError",[488,170830,170831],{},"类型不匹配",[442,170833,170834,170838],{},[488,170835,170836],{},[25,170837,154934],{},[488,170839,170840],{},"值不合法",[442,170842,170843,170848],{},[488,170844,170845],{},[25,170846,170847],{},"IndexError",[488,170849,170850],{},"列表索引越界",[442,170852,170853,170858],{},[488,170854,170855],{},[25,170856,170857],{},"KeyError",[488,170859,170860],{},"字典 key 不存在",[442,170862,170863,170868],{},[488,170864,170865],{},[25,170866,170867],{},"FileNotFoundError",[488,170869,170870],{},"文件不存在",[442,170872,170873,170878],{},[488,170874,170875],{},[25,170876,170877],{},"ZeroDivisionError",[488,170879,170880],{},"除数为 0",[442,170882,170883,170888],{},[488,170884,170885],{},[25,170886,170887],{},"ImportError",[488,170889,170890],{},"导入失败",[19,170892,15308],{},[280,170894,170896],{"className":30551,"code":170895,"language":30553,"meta":205,"style":205},"num = int(\"abc\")\n",[25,170897,170898],{"__ignoreMap":205},[288,170899,170900,170902,170904,170906,170908,170910],{"class":290,"line":291},[288,170901,155887],{"class":298},[288,170903,344],{"class":294},[288,170905,2554],{"class":347},[288,170907,299],{"class":298},[288,170909,155980],{"class":403},[288,170911,305],{"class":298},[19,170913,170914,170915,28558],{},"会触发 ",[25,170916,154934],{},[14,170918,170920],{"id":170919},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170922,170923],{},"如果不处理异常，程序会直接终止。",[19,170925,170926],{},"例如用户输入年龄：",[280,170928,170930],{"className":30551,"code":170929,"language":30553,"meta":205,"style":205},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[25,170931,170932,170950],{"__ignoreMap":205},[288,170933,170934,170936,170938,170940,170942,170944,170946,170948],{"class":290,"line":291},[288,170935,146646],{"class":298},[288,170937,344],{"class":294},[288,170939,2554],{"class":347},[288,170941,299],{"class":298},[288,170943,53994],{"class":347},[288,170945,299],{"class":298},[288,170947,152494],{"class":403},[288,170949,30670],{"class":298},[288,170951,170952,170954],{"class":290,"line":206},[288,170953,30588],{"class":347},[288,170955,155861],{"class":298},[19,170957,170958,170959,170962],{},"用户输入 ",[25,170960,170961],{},"abc","，程序就会报错退出。",[19,170964,170965],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170967,170969],{"id":170968},"_93-try-except","9.3 try except",[19,170971,170972],{},"基础语法：",[280,170974,170976],{"className":30551,"code":170975,"language":30553,"meta":205,"style":205},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[25,170977,170978,170985,170990,170997],{"__ignoreMap":205},[288,170979,170980,170983],{"class":290,"line":291},[288,170981,170982],{"class":294},"try",[288,170984,3911],{"class":298},[288,170986,170987],{"class":290,"line":206},[288,170988,170989],{"class":298},"    可能出错的代码\n",[288,170991,170992,170995],{"class":290,"line":1352},[288,170993,170994],{"class":294},"except",[288,170996,3911],{"class":298},[288,170998,170999],{"class":290,"line":1367},[288,171000,171001],{"class":298},"    出错后的处理代码\n",[19,171003,15308],{},[280,171005,171007],{"className":30551,"code":171006,"language":30553,"meta":205,"style":205},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[25,171008,171009,171015,171033,171039,171045],{"__ignoreMap":205},[288,171010,171011,171013],{"class":290,"line":291},[288,171012,170982],{"class":294},[288,171014,3911],{"class":298},[288,171016,171017,171019,171021,171023,171025,171027,171029,171031],{"class":290,"line":206},[288,171018,152486],{"class":298},[288,171020,344],{"class":294},[288,171022,2554],{"class":347},[288,171024,299],{"class":298},[288,171026,53994],{"class":347},[288,171028,299],{"class":298},[288,171030,152494],{"class":403},[288,171032,30670],{"class":298},[288,171034,171035,171037],{"class":290,"line":1352},[288,171036,31472],{"class":347},[288,171038,155861],{"class":298},[288,171040,171041,171043],{"class":290,"line":1367},[288,171042,170994],{"class":294},[288,171044,3911],{"class":298},[288,171046,171047,171049,171051,171054],{"class":290,"line":1373},[288,171048,31472],{"class":347},[288,171050,299],{"class":298},[288,171052,171053],{"class":403},"\"年龄必须是数字\"",[288,171055,305],{"class":298},[19,171057,171058,171059,171061],{},"不建议裸写 ",[25,171060,170994],{},"，最好指定异常类型。",[280,171063,171065],{"className":30551,"code":171064,"language":30553,"meta":205,"style":205},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[25,171066,171067,171073,171091,171097,171105],{"__ignoreMap":205},[288,171068,171069,171071],{"class":290,"line":291},[288,171070,170982],{"class":294},[288,171072,3911],{"class":298},[288,171074,171075,171077,171079,171081,171083,171085,171087,171089],{"class":290,"line":206},[288,171076,152486],{"class":298},[288,171078,344],{"class":294},[288,171080,2554],{"class":347},[288,171082,299],{"class":298},[288,171084,53994],{"class":347},[288,171086,299],{"class":298},[288,171088,152494],{"class":403},[288,171090,30670],{"class":298},[288,171092,171093,171095],{"class":290,"line":1352},[288,171094,31472],{"class":347},[288,171096,155861],{"class":298},[288,171098,171099,171101,171103],{"class":290,"line":1367},[288,171100,170994],{"class":294},[288,171102,152326],{"class":347},[288,171104,3911],{"class":298},[288,171106,171107,171109,171111,171113],{"class":290,"line":1373},[288,171108,31472],{"class":347},[288,171110,299],{"class":298},[288,171112,171053],{"class":403},[288,171114,305],{"class":298},[14,171116,171118],{"id":171117},"_94-捕获多个异常","9.4 捕获多个异常",[280,171120,171122],{"className":30551,"code":171121,"language":30553,"meta":205,"style":205},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[25,171123,171124,171130,171151,171171,171178,171186,171197,171206],{"__ignoreMap":205},[288,171125,171126,171128],{"class":290,"line":291},[288,171127,170982],{"class":294},[288,171129,3911],{"class":298},[288,171131,171132,171135,171137,171139,171141,171143,171145,171147,171149],{"class":290,"line":206},[288,171133,171134],{"class":298},"    nums ",[288,171136,344],{"class":294},[288,171138,52399],{"class":298},[288,171140,516],{"class":347},[288,171142,12608],{"class":298},[288,171144,376],{"class":347},[288,171146,12608],{"class":298},[288,171148,370],{"class":347},[288,171150,33419],{"class":298},[288,171152,171153,171156,171158,171160,171162,171164,171166,171169],{"class":290,"line":1352},[288,171154,171155],{"class":298},"    index ",[288,171157,344],{"class":294},[288,171159,2554],{"class":347},[288,171161,299],{"class":298},[288,171163,53994],{"class":347},[288,171165,299],{"class":298},[288,171167,171168],{"class":403},"\"请输入索引:\"",[288,171170,30670],{"class":298},[288,171172,171173,171175],{"class":290,"line":1367},[288,171174,31472],{"class":347},[288,171176,171177],{"class":298},"(nums[index])\n",[288,171179,171180,171182,171184],{"class":290,"line":1373},[288,171181,170994],{"class":294},[288,171183,152326],{"class":347},[288,171185,3911],{"class":298},[288,171187,171188,171190,171192,171195],{"class":290,"line":1387},[288,171189,31472],{"class":347},[288,171191,299],{"class":298},[288,171193,171194],{"class":403},"\"索引必须是整数\"",[288,171196,305],{"class":298},[288,171198,171199,171201,171204],{"class":290,"line":1393},[288,171200,170994],{"class":294},[288,171202,171203],{"class":347}," IndexError",[288,171205,3911],{"class":298},[288,171207,171208,171210,171212,171215],{"class":290,"line":1484},[288,171209,31472],{"class":347},[288,171211,299],{"class":298},[288,171213,171214],{"class":403},"\"索引越界\"",[288,171216,305],{"class":298},[19,171218,171219],{},"多个异常使用相同处理逻辑：",[280,171221,171223],{"className":30551,"code":171222,"language":30553,"meta":205,"style":205},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[25,171224,171225,171231,171249,171262,171276],{"__ignoreMap":205},[288,171226,171227,171229],{"class":290,"line":291},[288,171228,170982],{"class":294},[288,171230,3911],{"class":298},[288,171232,171233,171235,171237,171239,171241,171243,171245,171247],{"class":290,"line":206},[288,171234,45766],{"class":298},[288,171236,344],{"class":294},[288,171238,2554],{"class":347},[288,171240,299],{"class":298},[288,171242,53994],{"class":347},[288,171244,299],{"class":298},[288,171246,155896],{"class":403},[288,171248,30670],{"class":298},[288,171250,171251,171253,171255,171257,171259],{"class":290,"line":1352},[288,171252,31472],{"class":347},[288,171254,299],{"class":298},[288,171256,743],{"class":347},[288,171258,156146],{"class":294},[288,171260,171261],{"class":298}," num)\n",[288,171263,171264,171266,171268,171270,171272,171274],{"class":290,"line":1367},[288,171265,170994],{"class":294},[288,171267,1830],{"class":298},[288,171269,154934],{"class":347},[288,171271,12608],{"class":298},[288,171273,170877],{"class":347},[288,171275,30959],{"class":298},[288,171277,171278,171280,171282,171285],{"class":290,"line":1373},[288,171279,31472],{"class":347},[288,171281,299],{"class":298},[288,171283,171284],{"class":403},"\"输入不合法\"",[288,171286,305],{"class":298},[14,171288,171290],{"id":171289},"_95-获取异常信息","9.5 获取异常信息",[280,171292,171294],{"className":30551,"code":171293,"language":30553,"meta":205,"style":205},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[25,171295,171296,171302,171316,171327],{"__ignoreMap":205},[288,171297,171298,171300],{"class":290,"line":291},[288,171299,170982],{"class":294},[288,171301,3911],{"class":298},[288,171303,171304,171306,171308,171310,171312,171314],{"class":290,"line":206},[288,171305,45766],{"class":298},[288,171307,344],{"class":294},[288,171309,2554],{"class":347},[288,171311,299],{"class":298},[288,171313,155980],{"class":403},[288,171315,305],{"class":298},[288,171317,171318,171320,171322,171324],{"class":290,"line":1352},[288,171319,170994],{"class":294},[288,171321,152326],{"class":347},[288,171323,64777],{"class":294},[288,171325,171326],{"class":298}," e:\n",[288,171328,171329,171331,171333,171335,171338,171340,171342,171344,171346],{"class":290,"line":1367},[288,171330,31472],{"class":347},[288,171332,299],{"class":298},[288,171334,351],{"class":294},[288,171336,171337],{"class":403},"\"出错了:",[288,171339,1193],{"class":347},[288,171341,373],{"class":298},[288,171343,1243],{"class":347},[288,171345,109],{"class":403},[288,171347,305],{"class":298},[19,171349,146557],{},[280,171351,171354],{"className":171352,"code":171353,"language":5360,"meta":205},[5358],"出错了:invalid literal for int() with base 10: 'abc'\n",[25,171355,171353],{"__ignoreMap":205},[14,171357,171359],{"id":171358},"_96-else和finally","9.6 else和finally",[19,171361,171362,171364],{},[25,171363,1873],{},"：没有异常时执行。",[19,171366,171367,171370],{},[25,171368,171369],{},"finally","：无论是否异常都会执行。",[280,171372,171374],{"className":30551,"code":171373,"language":30553,"meta":205,"style":205},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[25,171375,171376,171382,171400,171408,171418,171424,171445,171451],{"__ignoreMap":205},[288,171377,171378,171380],{"class":290,"line":291},[288,171379,170982],{"class":294},[288,171381,3911],{"class":298},[288,171383,171384,171386,171388,171390,171392,171394,171396,171398],{"class":290,"line":206},[288,171385,45766],{"class":298},[288,171387,344],{"class":294},[288,171389,2554],{"class":347},[288,171391,299],{"class":298},[288,171393,53994],{"class":347},[288,171395,299],{"class":298},[288,171397,155896],{"class":403},[288,171399,30670],{"class":298},[288,171401,171402,171404,171406],{"class":290,"line":1352},[288,171403,170994],{"class":294},[288,171405,152326],{"class":347},[288,171407,3911],{"class":298},[288,171409,171410,171412,171414,171416],{"class":290,"line":1367},[288,171411,31472],{"class":347},[288,171413,299],{"class":298},[288,171415,153314],{"class":403},[288,171417,305],{"class":298},[288,171419,171420,171422],{"class":290,"line":1373},[288,171421,1873],{"class":294},[288,171423,3911],{"class":298},[288,171425,171426,171428,171430,171432,171435,171437,171439,171441,171443],{"class":290,"line":1387},[288,171427,31472],{"class":347},[288,171429,299],{"class":298},[288,171431,351],{"class":294},[288,171433,171434],{"class":403},"\"输入正确:",[288,171436,1193],{"class":347},[288,171438,1837],{"class":298},[288,171440,1243],{"class":347},[288,171442,109],{"class":403},[288,171444,305],{"class":298},[288,171446,171447,171449],{"class":290,"line":1393},[288,171448,171369],{"class":294},[288,171450,3911],{"class":298},[288,171452,171453,171455,171457,171460],{"class":290,"line":1484},[288,171454,31472],{"class":347},[288,171456,299],{"class":298},[288,171458,171459],{"class":403},"\"程序结束\"",[288,171461,305],{"class":298},[19,171463,171464,171466],{},[25,171465,171369],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171468,171470],{"id":171469},"_97-抛出异常","9.7 抛出异常",[19,171472,171473],{},"程序可以主动抛出异常。",[280,171475,171477],{"className":30551,"code":171476,"language":30553,"meta":205,"style":205},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[25,171478,171479,171488,171500,171513,171533,171537,171541],{"__ignoreMap":205},[288,171480,171481,171483,171486],{"class":290,"line":291},[288,171482,32120],{"class":294},[288,171484,171485],{"class":2135}," set_age",[288,171487,161515],{"class":298},[288,171489,171490,171492,171494,171496,171498],{"class":290,"line":206},[288,171491,3273],{"class":294},[288,171493,15880],{"class":298},[288,171495,1207],{"class":294},[288,171497,4265],{"class":347},[288,171499,3911],{"class":298},[288,171501,171502,171504,171506,171508,171511],{"class":290,"line":1352},[288,171503,103605],{"class":294},[288,171505,152326],{"class":347},[288,171507,299],{"class":298},[288,171509,171510],{"class":403},"\"年龄不能为负数\"",[288,171512,305],{"class":298},[288,171514,171515,171517,171519,171521,171523,171525,171527,171529,171531],{"class":290,"line":1367},[288,171516,31472],{"class":347},[288,171518,299],{"class":298},[288,171520,351],{"class":294},[288,171522,162083],{"class":403},[288,171524,1193],{"class":347},[288,171526,70394],{"class":298},[288,171528,1243],{"class":347},[288,171530,109],{"class":403},[288,171532,305],{"class":298},[288,171534,171535],{"class":290,"line":1373},[288,171536,2572],{"emptyLinePlaceholder":217},[288,171538,171539],{"class":290,"line":1387},[288,171540,2572],{"emptyLinePlaceholder":217},[288,171542,171543,171546,171548,171550],{"class":290,"line":1393},[288,171544,171545],{"class":298},"set_age(",[288,171547,829],{"class":294},[288,171549,516],{"class":347},[288,171551,305],{"class":298},[19,171553,171554],{},"调用者可以捕获：",[280,171556,171558],{"className":30551,"code":171557,"language":30553,"meta":205,"style":205},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[25,171559,171560,171566,171577,171587],{"__ignoreMap":205},[288,171561,171562,171564],{"class":290,"line":291},[288,171563,170982],{"class":294},[288,171565,3911],{"class":298},[288,171567,171568,171571,171573,171575],{"class":290,"line":206},[288,171569,171570],{"class":298},"    set_age(",[288,171572,829],{"class":294},[288,171574,516],{"class":347},[288,171576,305],{"class":298},[288,171578,171579,171581,171583,171585],{"class":290,"line":1352},[288,171580,170994],{"class":294},[288,171582,152326],{"class":347},[288,171584,64777],{"class":294},[288,171586,171326],{"class":298},[288,171588,171589,171591],{"class":290,"line":1367},[288,171590,31472],{"class":347},[288,171592,67172],{"class":298},[14,171594,171596],{"id":171595},"_98-自定义异常","9.8 自定义异常",[280,171598,171600],{"className":30551,"code":171599,"language":30553,"meta":205,"style":205},"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",[25,171601,171602,171616,171620,171624,171628,171636,171646,171657,171667,171671,171675,171681,171698,171709],{"__ignoreMap":205},[288,171603,171604,171606,171609,171611,171614],{"class":290,"line":291},[288,171605,14867],{"class":294},[288,171607,171608],{"class":2135}," BalanceNotEnoughError",[288,171610,299],{"class":298},[288,171612,171613],{"class":347},"Exception",[288,171615,30959],{"class":298},[288,171617,171618],{"class":290,"line":206},[288,171619,149637],{"class":294},[288,171621,171622],{"class":290,"line":1352},[288,171623,2572],{"emptyLinePlaceholder":217},[288,171625,171626],{"class":290,"line":1367},[288,171627,2572],{"emptyLinePlaceholder":217},[288,171629,171630,171632,171634],{"class":290,"line":1373},[288,171631,32120],{"class":294},[288,171633,150286],{"class":2135},[288,171635,162912],{"class":298},[288,171637,171638,171640,171642,171644],{"class":290,"line":1387},[288,171639,3273],{"class":294},[288,171641,150242],{"class":298},[288,171643,1257],{"class":294},[288,171645,162689],{"class":298},[288,171647,171648,171650,171653,171655],{"class":290,"line":1393},[288,171649,103605],{"class":294},[288,171651,171652],{"class":298}," BalanceNotEnoughError(",[288,171654,150337],{"class":403},[288,171656,305],{"class":298},[288,171658,171659,171661,171663,171665],{"class":290,"line":1484},[288,171660,4262],{"class":294},[288,171662,162919],{"class":298},[288,171664,829],{"class":294},[288,171666,150275],{"class":298},[288,171668,171669],{"class":290,"line":1490},[288,171670,2572],{"emptyLinePlaceholder":217},[288,171672,171673],{"class":290,"line":1502},[288,171674,2572],{"emptyLinePlaceholder":217},[288,171676,171677,171679],{"class":290,"line":1784},[288,171678,170982],{"class":294},[288,171680,3911],{"class":298},[288,171682,171683,171685,171687,171690,171692,171694,171696],{"class":290,"line":1789},[288,171684,162590],{"class":298},[288,171686,344],{"class":294},[288,171688,171689],{"class":298}," withdraw(",[288,171691,608],{"class":347},[288,171693,12608],{"class":298},[288,171695,1894],{"class":347},[288,171697,305],{"class":298},[288,171699,171700,171702,171705,171707],{"class":290,"line":1795},[288,171701,170994],{"class":294},[288,171703,171704],{"class":298}," BalanceNotEnoughError ",[288,171706,31556],{"class":294},[288,171708,171326],{"class":298},[288,171710,171711,171713],{"class":290,"line":1800},[288,171712,31472],{"class":347},[288,171714,67172],{"class":298},[19,171716,171717],{},"入门阶段大多数情况使用内置异常即可。",[14,171719,171721],{"id":171720},"_99-traceback","9.9 traceback",[19,171723,171724],{},"调试时可以输出完整异常堆栈。",[280,171726,171728],{"className":30551,"code":171727,"language":30553,"meta":205,"style":205},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[25,171729,171730,171737,171741,171747,171757,171765],{"__ignoreMap":205},[288,171731,171732,171734],{"class":290,"line":291},[288,171733,30565],{"class":294},[288,171735,171736],{"class":298}," traceback\n",[288,171738,171739],{"class":290,"line":206},[288,171740,2572],{"emptyLinePlaceholder":217},[288,171742,171743,171745],{"class":290,"line":1352},[288,171744,170982],{"class":294},[288,171746,3911],{"class":298},[288,171748,171749,171751,171753,171755],{"class":290,"line":1367},[288,171750,2157],{"class":347},[288,171752,299],{"class":298},[288,171754,155980],{"class":403},[288,171756,305],{"class":298},[288,171758,171759,171761,171763],{"class":290,"line":1373},[288,171760,170994],{"class":294},[288,171762,152326],{"class":347},[288,171764,3911],{"class":298},[288,171766,171767],{"class":290,"line":1387},[288,171768,171769],{"class":298},"    traceback.print_exc()\n",[19,171771,171772],{},"日志系统中常把异常堆栈记录到文件。",[14,171774,171776],{"id":171775},"_910-什么是模块","9.10 什么是模块",[19,171778,171779,171780,126156],{},"模块就是一个 ",[25,171781,146452],{},[19,171783,171784,171785,24791],{},"例如创建 ",[25,171786,171787],{},"my_math.py",[280,171789,171791],{"className":30551,"code":171790,"language":30553,"meta":205,"style":205},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[25,171792,171793,171801,171811,171815,171819,171828],{"__ignoreMap":205},[288,171794,171795,171797,171799],{"class":290,"line":291},[288,171796,32120],{"class":294},[288,171798,5382],{"class":2135},[288,171800,151193],{"class":298},[288,171802,171803,171805,171807,171809],{"class":290,"line":206},[288,171804,4262],{"class":294},[288,171806,11042],{"class":298},[288,171808,778],{"class":294},[288,171810,151204],{"class":298},[288,171812,171813],{"class":290,"line":1352},[288,171814,2572],{"emptyLinePlaceholder":217},[288,171816,171817],{"class":290,"line":1367},[288,171818,2572],{"emptyLinePlaceholder":217},[288,171820,171821,171823,171826],{"class":290,"line":1373},[288,171822,32120],{"class":294},[288,171824,171825],{"class":2135}," sub",[288,171827,151193],{"class":298},[288,171829,171830,171832,171834,171836],{"class":290,"line":1387},[288,171831,4262],{"class":294},[288,171833,11042],{"class":298},[288,171835,829],{"class":294},[288,171837,151204],{"class":298},[19,171839,171840],{},"在另一个文件中导入：",[280,171842,171844],{"className":30551,"code":171843,"language":30553,"meta":205,"style":205},"import my_math\n\nprint(my_math.add(1, 2))\n",[25,171845,171846,171853,171857],{"__ignoreMap":205},[288,171847,171848,171850],{"class":290,"line":291},[288,171849,30565],{"class":294},[288,171851,171852],{"class":298}," my_math\n",[288,171854,171855],{"class":290,"line":206},[288,171856,2572],{"emptyLinePlaceholder":217},[288,171858,171859,171861,171864,171866,171868,171870],{"class":290,"line":1352},[288,171860,30588],{"class":347},[288,171862,171863],{"class":298},"(my_math.add(",[288,171865,516],{"class":347},[288,171867,12608],{"class":298},[288,171869,376],{"class":347},[288,171871,30670],{"class":298},[14,171873,171875],{"id":171874},"_911-import导入","9.11 import导入",[260,171877,171879],{"id":171878},"_9111-导入模块","9.11.1 导入模块",[280,171881,171883],{"className":30551,"code":171882,"language":30553,"meta":205,"style":205},"import random\n\nprint(random.randint(1, 10))\n",[25,171884,171885,171891,171895],{"__ignoreMap":205},[288,171886,171887,171889],{"class":290,"line":291},[288,171888,30565],{"class":294},[288,171890,45501],{"class":298},[288,171892,171893],{"class":290,"line":206},[288,171894,2572],{"emptyLinePlaceholder":217},[288,171896,171897,171899,171902,171904,171906,171908],{"class":290,"line":1352},[288,171898,30588],{"class":347},[288,171900,171901],{"class":298},"(random.randint(",[288,171903,516],{"class":347},[288,171905,12608],{"class":298},[288,171907,743],{"class":347},[288,171909,30670],{"class":298},[260,171911,171913],{"id":171912},"_9112-导入指定内容","9.11.2 导入指定内容",[280,171915,171917],{"className":30551,"code":171916,"language":30553,"meta":205,"style":205},"from random import randint\n\nprint(randint(1, 10))\n",[25,171918,171919,171930,171934],{"__ignoreMap":205},[288,171920,171921,171923,171925,171927],{"class":290,"line":291},[288,171922,30910],{"class":294},[288,171924,57969],{"class":298},[288,171926,30565],{"class":294},[288,171928,171929],{"class":298}," randint\n",[288,171931,171932],{"class":290,"line":206},[288,171933,2572],{"emptyLinePlaceholder":217},[288,171935,171936,171938,171941,171943,171945,171947],{"class":290,"line":1352},[288,171937,30588],{"class":347},[288,171939,171940],{"class":298},"(randint(",[288,171942,516],{"class":347},[288,171944,12608],{"class":298},[288,171946,743],{"class":347},[288,171948,30670],{"class":298},[260,171950,171952],{"id":171951},"_9113-起别名","9.11.3 起别名",[280,171954,171956],{"className":30551,"code":171955,"language":30553,"meta":205,"style":205},"import random as rd\n\nprint(rd.randint(1, 10))\n",[25,171957,171958,171969,171973],{"__ignoreMap":205},[288,171959,171960,171962,171964,171966],{"class":290,"line":291},[288,171961,30565],{"class":294},[288,171963,57969],{"class":298},[288,171965,31556],{"class":294},[288,171967,171968],{"class":298}," rd\n",[288,171970,171971],{"class":290,"line":206},[288,171972,2572],{"emptyLinePlaceholder":217},[288,171974,171975,171977,171980,171982,171984,171986],{"class":290,"line":1352},[288,171976,30588],{"class":347},[288,171978,171979],{"class":298},"(rd.randint(",[288,171981,516],{"class":347},[288,171983,12608],{"class":298},[288,171985,743],{"class":347},[288,171987,30670],{"class":298},[280,171989,171991],{"className":30551,"code":171990,"language":30553,"meta":205,"style":205},"from random import randint as rint\n\nprint(rint(1, 10))\n",[25,171992,171993,172009,172013],{"__ignoreMap":205},[288,171994,171995,171997,171999,172001,172004,172006],{"class":290,"line":291},[288,171996,30910],{"class":294},[288,171998,57969],{"class":298},[288,172000,30565],{"class":294},[288,172002,172003],{"class":298}," randint ",[288,172005,31556],{"class":294},[288,172007,172008],{"class":298}," rint\n",[288,172010,172011],{"class":290,"line":206},[288,172012,2572],{"emptyLinePlaceholder":217},[288,172014,172015,172017,172020,172022,172024,172026],{"class":290,"line":1352},[288,172016,30588],{"class":347},[288,172018,172019],{"class":298},"(rint(",[288,172021,516],{"class":347},[288,172023,12608],{"class":298},[288,172025,743],{"class":347},[288,172027,30670],{"class":298},[260,172029,172031],{"id":172030},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[280,172033,172035],{"className":30551,"code":172034,"language":30553,"meta":205,"style":205},"from random import *\n",[25,172036,172037],{"__ignoreMap":205},[288,172038,172039,172041,172043,172045],{"class":290,"line":291},[288,172040,30910],{"class":294},[288,172042,57969],{"class":298},[288,172044,30565],{"class":294},[288,172046,172047],{"class":294}," *\n",[19,172049,172050],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172052,172054],{"id":172053},"_912-常用内置模块","9.12 常用内置模块",[260,172056,172058],{"id":172057},"_9121-random","9.12.1 random",[280,172060,172062],{"className":30551,"code":172061,"language":30553,"meta":205,"style":205},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[25,172063,172064,172070,172074,172088,172107],{"__ignoreMap":205},[288,172065,172066,172068],{"class":290,"line":291},[288,172067,30565],{"class":294},[288,172069,45501],{"class":298},[288,172071,172072],{"class":290,"line":206},[288,172073,2572],{"emptyLinePlaceholder":217},[288,172075,172076,172078,172080,172082,172084,172086],{"class":290,"line":1352},[288,172077,30588],{"class":347},[288,172079,171901],{"class":298},[288,172081,516],{"class":347},[288,172083,12608],{"class":298},[288,172085,743],{"class":347},[288,172087,30670],{"class":298},[288,172089,172090,172092,172095,172097,172099,172101,172103,172105],{"class":290,"line":1367},[288,172091,30588],{"class":347},[288,172093,172094],{"class":298},"(random.choice([",[288,172096,149988],{"class":403},[288,172098,12608],{"class":298},[288,172100,151036],{"class":403},[288,172102,12608],{"class":298},[288,172104,159831],{"class":403},[288,172106,33316],{"class":298},[288,172108,172109,172111,172114,172116,172118,172120,172122,172124,172126,172128,172130,172132,172134,172136],{"class":290,"line":1373},[288,172110,30588],{"class":347},[288,172112,172113],{"class":298},"(random.sample([",[288,172115,516],{"class":347},[288,172117,12608],{"class":298},[288,172119,376],{"class":347},[288,172121,12608],{"class":298},[288,172123,370],{"class":347},[288,172125,12608],{"class":298},[288,172127,590],{"class":347},[288,172129,12608],{"class":298},[288,172131,616],{"class":347},[288,172133,112375],{"class":298},[288,172135,376],{"class":347},[288,172137,30670],{"class":298},[260,172139,172141],{"id":172140},"_9122-time","9.12.2 time",[280,172143,172145],{"className":30551,"code":172144,"language":30553,"meta":205,"style":205},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[25,172146,172147,172153,172157,172164,172172],{"__ignoreMap":205},[288,172148,172149,172151],{"class":290,"line":291},[288,172150,30565],{"class":294},[288,172152,32002],{"class":298},[288,172154,172155],{"class":290,"line":206},[288,172156,2572],{"emptyLinePlaceholder":217},[288,172158,172159,172161],{"class":290,"line":1352},[288,172160,30588],{"class":347},[288,172162,172163],{"class":298},"(time.time())\n",[288,172165,172166,172168,172170],{"class":290,"line":1367},[288,172167,95244],{"class":298},[288,172169,516],{"class":347},[288,172171,305],{"class":298},[288,172173,172174,172176,172178,172181],{"class":290,"line":1373},[288,172175,30588],{"class":347},[288,172177,299],{"class":298},[288,172179,172180],{"class":403},"\"1秒后执行\"",[288,172182,305],{"class":298},[260,172184,172186],{"id":172185},"_9123-datetime","9.12.3 datetime",[280,172188,172190],{"className":30551,"code":172189,"language":30553,"meta":205,"style":205},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[25,172191,172192,172204,172208,172218,172225],{"__ignoreMap":205},[288,172193,172194,172196,172199,172201],{"class":290,"line":291},[288,172195,30910],{"class":294},[288,172197,172198],{"class":298}," datetime ",[288,172200,30565],{"class":294},[288,172202,172203],{"class":298}," datetime\n",[288,172205,172206],{"class":290,"line":206},[288,172207,2572],{"emptyLinePlaceholder":217},[288,172209,172210,172213,172215],{"class":290,"line":1352},[288,172211,172212],{"class":298},"now ",[288,172214,344],{"class":294},[288,172216,172217],{"class":298}," datetime.now()\n",[288,172219,172220,172222],{"class":290,"line":1367},[288,172221,30588],{"class":347},[288,172223,172224],{"class":298},"(now)\n",[288,172226,172227,172229,172232,172235,172237,172240],{"class":290,"line":1373},[288,172228,30588],{"class":347},[288,172230,172231],{"class":298},"(now.strftime(",[288,172233,172234],{"class":403},"\"%Y-%m-",[288,172236,156791],{"class":347},[288,172238,172239],{"class":403}," %H:%M:%S\"",[288,172241,30670],{"class":298},[260,172243,172245],{"id":172244},"_9124-os","9.12.4 os",[280,172247,172249],{"className":30551,"code":172248,"language":30553,"meta":205,"style":205},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[25,172250,172251,172257,172261,172268],{"__ignoreMap":205},[288,172252,172253,172255],{"class":290,"line":291},[288,172254,30565],{"class":294},[288,172256,45478],{"class":298},[288,172258,172259],{"class":290,"line":206},[288,172260,2572],{"emptyLinePlaceholder":217},[288,172262,172263,172265],{"class":290,"line":1352},[288,172264,30588],{"class":347},[288,172266,172267],{"class":298},"(os.getcwd())\n",[288,172269,172270,172272,172275,172278],{"class":290,"line":1367},[288,172271,30588],{"class":347},[288,172273,172274],{"class":298},"(os.listdir(",[288,172276,172277],{"class":403},"\".\"",[288,172279,30670],{"class":298},[260,172281,172283],{"id":172282},"_9125-sys","9.12.5 sys",[280,172285,172287],{"className":30551,"code":172286,"language":30553,"meta":205,"style":205},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[25,172288,172289,172296,172300,172307],{"__ignoreMap":205},[288,172290,172291,172293],{"class":290,"line":291},[288,172292,30565],{"class":294},[288,172294,172295],{"class":298}," sys\n",[288,172297,172298],{"class":290,"line":206},[288,172299,2572],{"emptyLinePlaceholder":217},[288,172301,172302,172304],{"class":290,"line":1352},[288,172303,30588],{"class":347},[288,172305,172306],{"class":298},"(sys.version)\n",[288,172308,172309,172311],{"class":290,"line":1367},[288,172310,30588],{"class":347},[288,172312,172313],{"class":298},"(sys.path)\n",[14,172315,172317,172318,172320,172321,109],{"id":172316},"_913-if-name-main","9.13 if ",[448,172319,79983],{}," == \"",[448,172322,102231],{},[19,172324,172325,172326,172329],{},"模块被直接运行和被导入时，",[25,172327,172328],{},"__name__"," 的值不同。",[19,172331,172332,172333,24791],{},"创建 ",[25,172334,172335],{},"my_module.py",[280,172337,172339],{"className":30551,"code":172338,"language":30553,"meta":205,"style":205},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[25,172340,172341,172349,172359,172363,172367,172379],{"__ignoreMap":205},[288,172342,172343,172345,172347],{"class":290,"line":291},[288,172344,32120],{"class":294},[288,172346,5382],{"class":2135},[288,172348,151193],{"class":298},[288,172350,172351,172353,172355,172357],{"class":290,"line":206},[288,172352,4262],{"class":294},[288,172354,11042],{"class":298},[288,172356,778],{"class":294},[288,172358,151204],{"class":298},[288,172360,172361],{"class":290,"line":1352},[288,172362,2572],{"emptyLinePlaceholder":217},[288,172364,172365],{"class":290,"line":1367},[288,172366,2572],{"emptyLinePlaceholder":217},[288,172368,172369,172371,172373,172375,172377],{"class":290,"line":1373},[288,172370,1703],{"class":294},[288,172372,31393],{"class":347},[288,172374,101732],{"class":294},[288,172376,101735],{"class":403},[288,172378,3911],{"class":298},[288,172380,172381,172383,172385,172387,172389,172391],{"class":290,"line":1387},[288,172382,31472],{"class":347},[288,172384,166700],{"class":298},[288,172386,516],{"class":347},[288,172388,12608],{"class":298},[288,172390,376],{"class":347},[288,172392,30670],{"class":298},[19,172394,172395],{},"作用：",[243,172397,172398,172401],{},[246,172399,172400],{},"直接运行该文件时，执行测试代码。",[246,172402,172403],{},"被其他文件导入时，不执行测试代码。",[19,172405,172406],{},"这是写模块时很常用的习惯。",[14,172408,172410],{"id":172409},"_914-包","9.14 包",[19,172412,172413,172414,172417],{},"包是包含 ",[25,172415,172416],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172419,172420],{},"目录结构：",[280,172422,172425],{"className":172423,"code":172424,"language":5360,"meta":205},[5358],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[25,172426,172424],{"__ignoreMap":205},[19,172428,172429],{},"导入：",[280,172431,172433],{"className":30551,"code":172432,"language":30553,"meta":205,"style":205},"from utils.file_utils import read_file\n",[25,172434,172435],{"__ignoreMap":205},[288,172436,172437,172439,172442,172444],{"class":290,"line":291},[288,172438,30910],{"class":294},[288,172440,172441],{"class":298}," utils.file_utils ",[288,172443,30565],{"class":294},[288,172445,172446],{"class":298}," read_file\n",[19,172448,172449,172451],{},[25,172450,172416],{}," 可以为空，也可以写包初始化逻辑。",[14,172453,172455],{"id":172454},"_915-第三方包","9.15 第三方包",[19,172457,172458,172459,172461],{},"第三方包通过 ",[25,172460,24004],{}," 安装。",[280,172463,172465],{"className":23995,"code":172464,"language":23997,"meta":205,"style":205},"pip install requests\n",[25,172466,172467],{"__ignoreMap":205},[288,172468,172469,172471,172473],{"class":290,"line":291},[288,172470,24004],{"class":2135},[288,172472,24007],{"class":403},[288,172474,146198],{"class":403},[19,172476,172477],{},"使用：",[280,172479,172481],{"className":30551,"code":172480,"language":30553,"meta":205,"style":205},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[25,172482,172483,172489,172493,172508],{"__ignoreMap":205},[288,172484,172485,172487],{"class":290,"line":291},[288,172486,30565],{"class":294},[288,172488,146198],{"class":298},[288,172490,172491],{"class":290,"line":206},[288,172492,2572],{"emptyLinePlaceholder":217},[288,172494,172495,172498,172500,172503,172506],{"class":290,"line":1352},[288,172496,172497],{"class":298},"response ",[288,172499,344],{"class":294},[288,172501,172502],{"class":298}," requests.get(",[288,172504,172505],{"class":403},"\"https:\u002F\u002Fwww.example.com\"",[288,172507,305],{"class":298},[288,172509,172510,172512],{"class":290,"line":1367},[288,172511,30588],{"class":347},[288,172513,172514],{"class":298},"(response.status_code)\n",[19,172516,172517],{},"查看已安装包：",[280,172519,172521],{"className":23995,"code":172520,"language":23997,"meta":205,"style":205},"pip list\n",[25,172522,172523],{"__ignoreMap":205},[288,172524,172525,172527],{"class":290,"line":291},[288,172526,24004],{"class":2135},[288,172528,119128],{"class":403},[19,172530,172531],{},"导出项目依赖：",[280,172533,172534],{"className":23995,"code":146393,"language":23997,"meta":205,"style":205},[25,172535,172536],{"__ignoreMap":205},[288,172537,172538,172540,172542,172544],{"class":290,"line":291},[288,172539,24004],{"class":2135},[288,172541,146402],{"class":403},[288,172543,26395],{"class":294},[288,172545,146407],{"class":403},[19,172547,172548],{},"安装项目依赖：",[280,172550,172551],{"className":23995,"code":146413,"language":23997,"meta":205,"style":205},[25,172552,172553],{"__ignoreMap":205},[288,172554,172555,172557,172559,172561],{"class":290,"line":291},[288,172556,24004],{"class":2135},[288,172558,24007],{"class":403},[288,172560,119812],{"class":347},[288,172562,146407],{"class":403},[14,172564,172566],{"id":172565},"_916-模块搜索路径","9.16 模块搜索路径",[19,172568,172569,172570,172573],{},"Python 导入模块时会在 ",[25,172571,172572],{},"sys.path"," 中查找。",[280,172575,172577],{"className":30551,"code":172576,"language":30553,"meta":205,"style":205},"import sys\n\nfor path in sys.path:\n    print(path)\n",[25,172578,172579,172585,172589,172601],{"__ignoreMap":205},[288,172580,172581,172583],{"class":290,"line":291},[288,172582,30565],{"class":294},[288,172584,172295],{"class":298},[288,172586,172587],{"class":290,"line":206},[288,172588,2572],{"emptyLinePlaceholder":217},[288,172590,172591,172593,172596,172598],{"class":290,"line":1352},[288,172592,3197],{"class":294},[288,172594,172595],{"class":298}," path ",[288,172597,26216],{"class":294},[288,172599,172600],{"class":298}," sys.path:\n",[288,172602,172603,172605],{"class":290,"line":1367},[288,172604,31472],{"class":347},[288,172606,169329],{"class":298},[19,172608,172609],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172611,157723],{},[280,172613,172616],{"className":172614,"code":172615,"language":5360,"meta":205},[5358],"random.py\njson.py\ntime.py\n",[25,172617,172615],{"__ignoreMap":205},[19,172619,172620],{},"这些文件名可能导致导入异常。",[14,172622,172624],{"id":172623},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172626,172420],{},[280,172628,172631],{"className":172629,"code":172630,"language":5360,"meta":205},[5358],"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",[25,172632,172630],{"__ignoreMap":205},[19,172634,172635,24791],{},[25,172636,172637],{},"utils\u002Ffile_utils.py",[280,172639,172641],{"className":30551,"code":172640,"language":30553,"meta":205,"style":205},"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",[25,172642,172643,172649,172659,172663,172667,172677,172687,172695,172701,172705,172732,172742,172746,172750,172760,172786],{"__ignoreMap":205},[288,172644,172645,172647],{"class":290,"line":291},[288,172646,30565],{"class":294},[288,172648,147191],{"class":298},[288,172650,172651,172653,172655,172657],{"class":290,"line":206},[288,172652,30910],{"class":294},[288,172654,108484],{"class":298},[288,172656,30565],{"class":294},[288,172658,108489],{"class":298},[288,172660,172661],{"class":290,"line":1352},[288,172662,2572],{"emptyLinePlaceholder":217},[288,172664,172665],{"class":290,"line":1367},[288,172666,2572],{"emptyLinePlaceholder":217},[288,172668,172669,172671,172674],{"class":290,"line":1373},[288,172670,32120],{"class":294},[288,172672,172673],{"class":2135}," read_json",[288,172675,172676],{"class":298},"(path):\n",[288,172678,172679,172682,172684],{"class":290,"line":1387},[288,172680,172681],{"class":298},"    path ",[288,172683,344],{"class":294},[288,172685,172686],{"class":298}," Path(path)\n",[288,172688,172689,172691,172693],{"class":290,"line":1393},[288,172690,3273],{"class":294},[288,172692,39103],{"class":294},[288,172694,169410],{"class":298},[288,172696,172697,172699],{"class":290,"line":1484},[288,172698,14925],{"class":294},[288,172700,52011],{"class":298},[288,172702,172703],{"class":290,"line":1490},[288,172704,2572],{"emptyLinePlaceholder":217},[288,172706,172707,172709,172711,172714,172716,172718,172720,172722,172724,172726,172728,172730],{"class":290,"line":1502},[288,172708,34351],{"class":294},[288,172710,146891],{"class":347},[288,172712,172713],{"class":298},"(path, ",[288,172715,146901],{"class":403},[288,172717,12608],{"class":298},[288,172719,146906],{"class":5389},[288,172721,344],{"class":294},[288,172723,146911],{"class":403},[288,172725,13887],{"class":298},[288,172727,31556],{"class":294},[288,172729,148253],{"class":5389},[288,172731,3911],{"class":298},[288,172733,172734,172736,172738,172740],{"class":290,"line":1784},[288,172735,14925],{"class":294},[288,172737,148264],{"class":298},[288,172739,45527],{"class":5389},[288,172741,305],{"class":298},[288,172743,172744],{"class":290,"line":1789},[288,172745,2572],{"emptyLinePlaceholder":217},[288,172747,172748],{"class":290,"line":1795},[288,172749,2572],{"emptyLinePlaceholder":217},[288,172751,172752,172754,172757],{"class":290,"line":1800},[288,172753,32120],{"class":294},[288,172755,172756],{"class":2135}," write_json",[288,172758,172759],{"class":298},"(path, data):\n",[288,172761,172762,172764,172766,172768,172770,172772,172774,172776,172778,172780,172782,172784],{"class":290,"line":1814},[288,172763,34351],{"class":294},[288,172765,146891],{"class":347},[288,172767,172713],{"class":298},[288,172769,152076],{"class":403},[288,172771,12608],{"class":298},[288,172773,146906],{"class":5389},[288,172775,344],{"class":294},[288,172777,146911],{"class":403},[288,172779,13887],{"class":298},[288,172781,31556],{"class":294},[288,172783,148253],{"class":5389},[288,172785,3911],{"class":298},[288,172787,172788,172791,172793,172795,172797,172799,172801,172803,172805,172807,172809],{"class":290,"line":1819},[288,172789,172790],{"class":298},"        json.dump(data, ",[288,172792,45527],{"class":5389},[288,172794,12608],{"class":298},[288,172796,147237],{"class":5389},[288,172798,344],{"class":294},[288,172800,34160],{"class":347},[288,172802,12608],{"class":298},[288,172804,152112],{"class":5389},[288,172806,344],{"class":294},[288,172808,376],{"class":347},[288,172810,305],{"class":298},[19,172812,172813,24791],{},[25,172814,154707],{},[280,172816,172818],{"className":30551,"code":172817,"language":30553,"meta":205,"style":205},"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",[25,172819,172820,172831,172835,172848,172868],{"__ignoreMap":205},[288,172821,172822,172824,172826,172828],{"class":290,"line":291},[288,172823,30910],{"class":294},[288,172825,172441],{"class":298},[288,172827,30565],{"class":294},[288,172829,172830],{"class":298}," read_json, write_json\n",[288,172832,172833],{"class":290,"line":206},[288,172834,2572],{"emptyLinePlaceholder":217},[288,172836,172837,172839,172841,172844,172846],{"class":290,"line":1352},[288,172838,159816],{"class":298},[288,172840,344],{"class":294},[288,172842,172843],{"class":298}," read_json(",[288,172845,151931],{"class":403},[288,172847,305],{"class":298},[288,172849,172850,172852,172854,172856,172858,172860,172862,172864,172866],{"class":290,"line":1367},[288,172851,170634],{"class":298},[288,172853,62852],{"class":403},[288,172855,51610],{"class":298},[288,172857,149988],{"class":403},[288,172859,12608],{"class":298},[288,172861,151572],{"class":403},[288,172863,51610],{"class":298},[288,172865,1286],{"class":347},[288,172867,165252],{"class":298},[288,172869,172870,172873,172875],{"class":290,"line":1373},[288,172871,172872],{"class":298},"write_json(",[288,172874,151931],{"class":403},[288,172876,172877],{"class":298},", students)\n",[14,172879,172881],{"id":172880},"_918-易错点","9.18 易错点",[243,172883,172884,172887,172892,172897,172900,172903],{},[246,172885,172886],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[246,172888,172889,172890,28558],{},"能指定异常类型就不要裸写 ",[25,172891,170994],{},[246,172893,172894,172896],{},[25,172895,171369],{}," 无论是否出错都会执行。",[246,172898,172899],{},"模块文件名不要和标准库重名。",[246,172901,172902],{},"导入自己写的模块时，要注意运行目录。",[246,172904,172905],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172907,172909],{"id":172908},"_919-本章练习","9.19 本章练习",[243,172911,172912,172915,172918,172924,172931],{},[246,172913,172914],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[246,172916,172917],{},"写函数读取文件，如果文件不存在则返回空字符串。",[246,172919,172332,172920,172923],{},[25,172921,172922],{},"math_utils.py","，实现加减乘除函数并导入使用。",[246,172925,172926,172927,172930],{},"创建一个 ",[25,172928,172929],{},"utils"," 包，把 JSON 读写函数放进去。",[246,172932,172933],{},"写一个程序，捕获除零异常和输入格式异常。",[5299,172935,172936],{},"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":205,"searchDepth":206,"depth":206,"links":172938},[172939,172940,172941,172942,172943,172944,172945,172946,172947,172948,172949,172955,172962,172964,172965,172966,172967,172968,172969],{"id":170791,"depth":206,"text":170792},{"id":170919,"depth":206,"text":170920},{"id":170968,"depth":206,"text":170969},{"id":171117,"depth":206,"text":171118},{"id":171289,"depth":206,"text":171290},{"id":171358,"depth":206,"text":171359},{"id":171469,"depth":206,"text":171470},{"id":171595,"depth":206,"text":171596},{"id":171720,"depth":206,"text":171721},{"id":171775,"depth":206,"text":171776},{"id":171874,"depth":206,"text":171875,"children":172950},[172951,172952,172953,172954],{"id":171878,"depth":1352,"text":171879},{"id":171912,"depth":1352,"text":171913},{"id":171951,"depth":1352,"text":171952},{"id":172030,"depth":1352,"text":172031},{"id":172053,"depth":206,"text":172054,"children":172956},[172957,172958,172959,172960,172961],{"id":172057,"depth":1352,"text":172058},{"id":172140,"depth":1352,"text":172141},{"id":172185,"depth":1352,"text":172186},{"id":172244,"depth":1352,"text":172245},{"id":172282,"depth":1352,"text":172283},{"id":172316,"depth":206,"text":172963},"9.13 if name == \"main\"",{"id":172409,"depth":206,"text":172410},{"id":172454,"depth":206,"text":172455},{"id":172565,"depth":206,"text":172566},{"id":172623,"depth":206,"text":172624},{"id":172880,"depth":206,"text":172881},{"id":172908,"depth":206,"text":172909},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170783,"description":214},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172976,"title":172977,"body":172978,"description":173141,"extension":215,"meta":173142,"navigation":217,"path":173143,"seo":173144,"stem":173145,"__hash__":173146},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172979,"toc":173136},[172980,172983,172986,172989,173000,173002,173076,173079,173082,173085,173088,173091,173094,173097,173100,173103,173106],[10,172981,172977],{"id":172982},"python教程",[19,172984,172985],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172987,172988],{},"建议学习环境：",[243,172990,172991,172994,172997],{},[246,172992,172993],{},"Python 版本：Python 3.10 及以上。",[246,172995,172996],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[246,172998,172999],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173001,117251],{"id":117251},[243,173003,173004,173010,173016,173022,173028,173034,173040,173046,173052,173058,173064,173070],{},[246,173005,173006],{},[104,173007,173009],{"href":173008},".\u002Fch1-Python","Python环境与第一个程序",[246,173011,173012],{},[104,173013,173015],{"href":173014},".\u002Fch2","基础语法、变量与字符串",[246,173017,173018],{},[104,173019,173021],{"href":173020},".\u002Fch3","判断语句",[246,173023,173024],{},[104,173025,173027],{"href":173026},".\u002Fch4","循环语句",[246,173029,173030],{},[104,173031,173033],{"href":173032},".\u002Fch5","函数基础",[246,173035,173036],{},[104,173037,173039],{"href":173038},".\u002Fch6","数据容器",[246,173041,173042],{},[104,173043,173045],{"href":173044},".\u002Fch7","函数进阶",[246,173047,173048],{},[104,173049,173051],{"href":173050},".\u002Fch8","文件操作",[246,173053,173054],{},[104,173055,173057],{"href":173056},".\u002Fch9","异常、模块与包",[246,173059,173060],{},[104,173061,173063],{"href":173062},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[246,173065,173066],{},[104,173067,173069],{"href":173068},".\u002Fch11","面向对象基础",[246,173071,173072],{},[104,173073,173075],{"href":173074},".\u002Fch12","综合案例与复习路线",[14,173077,173078],{"id":173078},"学习路线",[19,173080,173081],{},"第一阶段：能运行程序。",[19,173083,173084],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173086,173087],{},"第二阶段：能组织数据。",[19,173089,173090],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173092,173093],{},"第三阶段：能封装逻辑。",[19,173095,173096],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173098,173099],{},"第四阶段：能做小项目。",[19,173101,173102],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173104,173105],{"id":173105},"参考资料",[243,173107,173108,173115,173122,173129],{},[246,173109,173110,173111],{},"黑马程序员 Python 入门教程推荐：",[104,173112,173113],{"href":173113,"rel":173114},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[108],[246,173116,173117,173118],{},"Python 官方中文教程：",[104,173119,173120],{"href":173120,"rel":173121},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[108],[246,173123,173124,173125],{},"Python 标准库文档：",[104,173126,173127],{"href":173127,"rel":173128},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[108],[246,173130,173131,173132],{},"pyecharts 文档：",[104,173133,173134],{"href":173134,"rel":173135},"https:\u002F\u002Fpyecharts.org\u002F",[108],{"title":205,"searchDepth":206,"depth":206,"links":173137},[173138,173139,173140],{"id":117251,"depth":206,"text":117251},{"id":173078,"depth":206,"text":173078},{"id":173105,"depth":206,"text":173105},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23551},"\u002Fwiki\u002F2024-10-10-python",{"title":172977,"description":173141},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426808]