[{"data":1,"prerenderedAt":175161},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch10-json-yu-pyecharts-zhe-xian-tu":3,"wiki-doc-nav":2551},{"id":4,"title":5,"body":6,"description":2544,"extension":2545,"meta":2546,"navigation":231,"path":2547,"seo":2548,"stem":2549,"__hash__":2550},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":8,"toc":2529},"minimark",[9,13,18,22,25,44,47,99,102,106,109,112,172,175,211,214,322,326,345,348,375,378,382,490,497,500,517,521,528,725,728,802,806,809,896,899,931,935,1146,1149,1153,1160,1263,1266,1546,1550,1553,1556,1570,1573,1764,1768,2138,2144,2148,2151,2280,2283,2463,2466,2470,2504,2508,2525],[10,11,5],"h1",{"id":12},"_10-json与pyecharts折线图",[14,15,17],"h2",{"id":16},"_101-数据可视化","10.1 数据可视化",[19,20,21],"p",{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,23,24],{},"常见图表：",[26,27,28,32,35,38,41],"ol",{},[29,30,31],"li",{},"折线图：看趋势。",[29,33,34],{},"柱状图：看分类对比。",[29,36,37],{},"饼图：看占比。",[29,39,40],{},"地图：看地域分布。",[29,42,43],{},"散点图：看两个变量之间的关系。",[19,45,46],{},"Python 可视化常用库：",[48,49,50,63],"table",{},[51,52,53],"thead",{},[54,55,56,60],"tr",{},[57,58,59],"th",{},"库",[57,61,62],{},"特点",[64,65,66,75,83,91],"tbody",{},[54,67,68,72],{},[69,70,71],"td",{},"matplotlib",[69,73,74],{},"基础、经典、可定制",[54,76,77,80],{},[69,78,79],{},"seaborn",[69,81,82],{},"统计图表更美观",[54,84,85,88],{},[69,86,87],{},"pyecharts",[69,89,90],{},"生成交互式网页图表",[54,92,93,96],{},[69,94,95],{},"plotly",[69,97,98],{},"交互图表能力强",[19,100,101],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,103,105],{"id":104},"_102-json回顾","10.2 JSON回顾",[19,107,108],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,110,111],{},"Python 字典：",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-python shiki shiki-themes github-light github-dark","data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n","python","",[120,121,122,138,154,166],"code",{"__ignoreMap":118},[123,124,127,131,135],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"sVt8B","data ",[123,132,134],{"class":133},"szBVR","=",[123,136,137],{"class":129}," {\n",[123,139,141,145,148,151],{"class":125,"line":140},2,[123,142,144],{"class":143},"sZZnC","    \"name\"",[123,146,147],{"class":129},": ",[123,149,150],{"class":143},"\"北京\"",[123,152,153],{"class":129},",\n",[123,155,157,160,162],{"class":125,"line":156},3,[123,158,159],{"class":143},"    \"value\"",[123,161,147],{"class":129},[123,163,165],{"class":164},"sj4cs","100\n",[123,167,169],{"class":125,"line":168},4,[123,170,171],{"class":129},"}\n",[19,173,174],{},"JSON 字符串：",[113,176,180],{"className":177,"code":178,"language":179,"meta":118,"style":118},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n","json",[120,181,182,187,198,207],{"__ignoreMap":118},[123,183,184],{"class":125,"line":126},[123,185,186],{"class":129},"{\n",[123,188,189,192,194,196],{"class":125,"line":140},[123,190,191],{"class":164},"  \"name\"",[123,193,147],{"class":129},[123,195,150],{"class":143},[123,197,153],{"class":129},[123,199,200,203,205],{"class":125,"line":156},[123,201,202],{"class":164},"  \"value\"",[123,204,147],{"class":129},[123,206,165],{"class":164},[123,208,209],{"class":125,"line":168},[123,210,171],{"class":129},[19,212,213],{},"Python 与 JSON 的转换：",[113,215,217],{"className":115,"code":216,"language":117,"meta":118,"style":118},"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",[120,218,219,227,233,262,266,289,298,303,314],{"__ignoreMap":118},[123,220,221,224],{"class":125,"line":126},[123,222,223],{"class":133},"import",[123,225,226],{"class":129}," json\n",[123,228,229],{"class":125,"line":140},[123,230,232],{"emptyLinePlaceholder":231},true,"\n",[123,234,235,237,239,242,245,247,249,252,255,257,260],{"class":125,"line":156},[123,236,130],{"class":129},[123,238,134],{"class":133},[123,240,241],{"class":129}," {",[123,243,244],{"class":143},"\"name\"",[123,246,147],{"class":129},[123,248,150],{"class":143},[123,250,251],{"class":129},", ",[123,253,254],{"class":143},"\"value\"",[123,256,147],{"class":129},[123,258,259],{"class":164},"100",[123,261,171],{"class":129},[123,263,264],{"class":125,"line":168},[123,265,232],{"emptyLinePlaceholder":231},[123,267,269,272,274,277,281,283,286],{"class":125,"line":268},5,[123,270,271],{"class":129},"json_text ",[123,273,134],{"class":133},[123,275,276],{"class":129}," json.dumps(data, ",[123,278,280],{"class":279},"s4XuR","ensure_ascii",[123,282,134],{"class":133},[123,284,285],{"class":164},"False",[123,287,288],{"class":129},")\n",[123,290,292,295],{"class":125,"line":291},6,[123,293,294],{"class":164},"print",[123,296,297],{"class":129},"(json_text)\n",[123,299,301],{"class":125,"line":300},7,[123,302,232],{"emptyLinePlaceholder":231},[123,304,306,309,311],{"class":125,"line":305},8,[123,307,308],{"class":129},"new_data ",[123,310,134],{"class":133},[123,312,313],{"class":129}," json.loads(json_text)\n",[123,315,317,319],{"class":125,"line":316},9,[123,318,294],{"class":164},[123,320,321],{"class":129},"(new_data)\n",[14,323,325],{"id":324},"_103-安装pyecharts","10.3 安装pyecharts",[113,327,331],{"className":328,"code":329,"language":330,"meta":118,"style":118},"language-bash shiki shiki-themes github-light github-dark","pip install pyecharts\n","bash",[120,332,333],{"__ignoreMap":118},[123,334,335,339,342],{"class":125,"line":126},[123,336,338],{"class":337},"sScJk","pip",[123,340,341],{"class":143}," install",[123,343,344],{"class":143}," pyecharts\n",[19,346,347],{},"验证：",[113,349,351],{"className":115,"code":350,"language":117,"meta":118,"style":118},"import pyecharts\n\nprint(pyecharts.__version__)\n",[120,352,353,359,363],{"__ignoreMap":118},[123,354,355,357],{"class":125,"line":126},[123,356,223],{"class":133},[123,358,344],{"class":129},[123,360,361],{"class":125,"line":140},[123,362,232],{"emptyLinePlaceholder":231},[123,364,365,367,370,373],{"class":125,"line":156},[123,366,294],{"class":164},[123,368,369],{"class":129},"(pyecharts.",[123,371,372],{"class":164},"__version__",[123,374,288],{"class":129},[19,376,377],{},"如果使用虚拟环境，要先激活环境再安装。",[14,379,381],{"id":380},"_104-第一个折线图","10.4 第一个折线图",[113,383,385],{"className":115,"code":384,"language":117,"meta":118,"style":118},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[120,386,387,400,404,414,445,480],{"__ignoreMap":118},[123,388,389,392,395,397],{"class":125,"line":126},[123,390,391],{"class":133},"from",[123,393,394],{"class":129}," pyecharts.charts ",[123,396,223],{"class":133},[123,398,399],{"class":129}," Line\n",[123,401,402],{"class":125,"line":140},[123,403,232],{"emptyLinePlaceholder":231},[123,405,406,409,411],{"class":125,"line":156},[123,407,408],{"class":129},"line ",[123,410,134],{"class":133},[123,412,413],{"class":129}," Line()\n",[123,415,416,419,422,424,427,429,432,434,437,439,442],{"class":125,"line":168},[123,417,418],{"class":129},"line.add_xaxis([",[123,420,421],{"class":143},"\"周一\"",[123,423,251],{"class":129},[123,425,426],{"class":143},"\"周二\"",[123,428,251],{"class":129},[123,430,431],{"class":143},"\"周三\"",[123,433,251],{"class":129},[123,435,436],{"class":143},"\"周四\"",[123,438,251],{"class":129},[123,440,441],{"class":143},"\"周五\"",[123,443,444],{"class":129},"])\n",[123,446,447,450,453,456,458,460,463,465,468,470,473,475,478],{"class":125,"line":268},[123,448,449],{"class":129},"line.add_yaxis(",[123,451,452],{"class":143},"\"销售额\"",[123,454,455],{"class":129},", [",[123,457,259],{"class":164},[123,459,251],{"class":129},[123,461,462],{"class":164},"120",[123,464,251],{"class":129},[123,466,467],{"class":164},"90",[123,469,251],{"class":129},[123,471,472],{"class":164},"150",[123,474,251],{"class":129},[123,476,477],{"class":164},"180",[123,479,444],{"class":129},[123,481,482,485,488],{"class":125,"line":291},[123,483,484],{"class":129},"line.render(",[123,486,487],{"class":143},"\"line.html\"",[123,489,288],{"class":129},[19,491,492,493,496],{},"运行后会生成 ",[120,494,495],{},"line.html","，用浏览器打开即可看到图表。",[19,498,499],{},"核心步骤：",[26,501,502,505,508,511,514],{},[29,503,504],{},"导入图表类。",[29,506,507],{},"创建图表对象。",[29,509,510],{},"添加 x 轴数据。",[29,512,513],{},"添加 y 轴数据。",[29,515,516],{},"渲染为 HTML。",[14,518,520],{"id":519},"_105-全局配置","10.5 全局配置",[19,522,523,524,527],{},"常用配置在 ",[120,525,526],{},"pyecharts.options"," 中。",[113,529,531],{"className":115,"code":530,"language":117,"meta":118,"style":118},"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",[120,532,533,551,561,565,573,597,625,630,651,671,690,711,716],{"__ignoreMap":118},[123,534,535,537,540,542,545,548],{"class":125,"line":126},[123,536,391],{"class":133},[123,538,539],{"class":129}," pyecharts ",[123,541,223],{"class":133},[123,543,544],{"class":129}," options ",[123,546,547],{"class":133},"as",[123,549,550],{"class":129}," opts\n",[123,552,553,555,557,559],{"class":125,"line":140},[123,554,391],{"class":133},[123,556,394],{"class":129},[123,558,223],{"class":133},[123,560,399],{"class":129},[123,562,563],{"class":125,"line":156},[123,564,232],{"emptyLinePlaceholder":231},[123,566,567,569,571],{"class":125,"line":168},[123,568,408],{"class":129},[123,570,134],{"class":133},[123,572,413],{"class":129},[123,574,575,577,579,581,583,585,587,589,591,593,595],{"class":125,"line":268},[123,576,418],{"class":129},[123,578,421],{"class":143},[123,580,251],{"class":129},[123,582,426],{"class":143},[123,584,251],{"class":129},[123,586,431],{"class":143},[123,588,251],{"class":129},[123,590,436],{"class":143},[123,592,251],{"class":129},[123,594,441],{"class":143},[123,596,444],{"class":129},[123,598,599,601,603,605,607,609,611,613,615,617,619,621,623],{"class":125,"line":291},[123,600,449],{"class":129},[123,602,452],{"class":143},[123,604,455],{"class":129},[123,606,259],{"class":164},[123,608,251],{"class":129},[123,610,462],{"class":164},[123,612,251],{"class":129},[123,614,467],{"class":164},[123,616,251],{"class":129},[123,618,472],{"class":164},[123,620,251],{"class":129},[123,622,477],{"class":164},[123,624,444],{"class":129},[123,626,627],{"class":125,"line":300},[123,628,629],{"class":129},"line.set_global_opts(\n",[123,631,632,635,637,640,643,645,648],{"class":125,"line":305},[123,633,634],{"class":279},"    title_opts",[123,636,134],{"class":133},[123,638,639],{"class":129},"opts.TitleOpts(",[123,641,642],{"class":279},"title",[123,644,134],{"class":133},[123,646,647],{"class":143},"\"一周销售额\"",[123,649,650],{"class":129},"),\n",[123,652,653,656,658,661,664,666,669],{"class":125,"line":316},[123,654,655],{"class":279},"    xaxis_opts",[123,657,134],{"class":133},[123,659,660],{"class":129},"opts.AxisOpts(",[123,662,663],{"class":279},"name",[123,665,134],{"class":133},[123,667,668],{"class":143},"\"日期\"",[123,670,650],{"class":129},[123,672,674,677,679,681,683,685,688],{"class":125,"line":673},10,[123,675,676],{"class":279},"    yaxis_opts",[123,678,134],{"class":133},[123,680,660],{"class":129},[123,682,663],{"class":279},[123,684,134],{"class":133},[123,686,687],{"class":143},"\"金额\"",[123,689,650],{"class":129},[123,691,693,696,698,701,704,706,709],{"class":125,"line":692},11,[123,694,695],{"class":279},"    tooltip_opts",[123,697,134],{"class":133},[123,699,700],{"class":129},"opts.TooltipOpts(",[123,702,703],{"class":279},"trigger",[123,705,134],{"class":133},[123,707,708],{"class":143},"\"axis\"",[123,710,650],{"class":129},[123,712,714],{"class":125,"line":713},12,[123,715,288],{"class":129},[123,717,719,721,723],{"class":125,"line":718},13,[123,720,484],{"class":129},[123,722,487],{"class":143},[123,724,288],{"class":129},[19,726,727],{},"常见全局配置：",[48,729,730,740],{},[51,731,732],{},[54,733,734,737],{},[57,735,736],{},"配置",[57,738,739],{},"作用",[64,741,742,752,762,772,782,792],{},[54,743,744,749],{},[69,745,746],{},[120,747,748],{},"TitleOpts",[69,750,751],{},"标题",[54,753,754,759],{},[69,755,756],{},[120,757,758],{},"LegendOpts",[69,760,761],{},"图例",[54,763,764,769],{},[69,765,766],{},[120,767,768],{},"TooltipOpts",[69,770,771],{},"提示框",[54,773,774,779],{},[69,775,776],{},[120,777,778],{},"AxisOpts",[69,780,781],{},"坐标轴",[54,783,784,789],{},[69,785,786],{},[120,787,788],{},"VisualMapOpts",[69,790,791],{},"视觉映射",[54,793,794,799],{},[69,795,796],{},[120,797,798],{},"DataZoomOpts",[69,800,801],{},"区域缩放",[14,803,805],{"id":804},"_106-系列配置","10.6 系列配置",[19,807,808],{},"系列配置作用于某一组数据。",[113,810,812],{"className":115,"code":811,"language":117,"meta":118,"style":118},"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",[120,813,814,819,830,861,873,892],{"__ignoreMap":118},[123,815,816],{"class":125,"line":126},[123,817,818],{"class":129},"line.add_yaxis(\n",[123,820,821,824,826,828],{"class":125,"line":140},[123,822,823],{"class":279},"    series_name",[123,825,134],{"class":133},[123,827,452],{"class":143},[123,829,153],{"class":129},[123,831,832,835,837,840,842,844,846,848,850,852,854,856,858],{"class":125,"line":156},[123,833,834],{"class":279},"    y_axis",[123,836,134],{"class":133},[123,838,839],{"class":129},"[",[123,841,259],{"class":164},[123,843,251],{"class":129},[123,845,462],{"class":164},[123,847,251],{"class":129},[123,849,467],{"class":164},[123,851,251],{"class":129},[123,853,472],{"class":164},[123,855,251],{"class":129},[123,857,477],{"class":164},[123,859,860],{"class":129},"],\n",[123,862,863,866,868,871],{"class":125,"line":168},[123,864,865],{"class":279},"    is_smooth",[123,867,134],{"class":133},[123,869,870],{"class":164},"True",[123,872,153],{"class":129},[123,874,875,878,880,883,886,888,890],{"class":125,"line":268},[123,876,877],{"class":279},"    label_opts",[123,879,134],{"class":133},[123,881,882],{"class":129},"opts.LabelOpts(",[123,884,885],{"class":279},"is_show",[123,887,134],{"class":133},[123,889,870],{"class":164},[123,891,650],{"class":129},[123,893,894],{"class":125,"line":291},[123,895,288],{"class":129},[19,897,898],{},"常用参数：",[26,900,901,907,913,919,925],{},[29,902,903,906],{},[120,904,905],{},"series_name","：系列名称。",[29,908,909,912],{},[120,910,911],{},"y_axis","：y 轴数据。",[29,914,915,918],{},[120,916,917],{},"is_smooth","：是否平滑曲线。",[29,920,921,924],{},[120,922,923],{},"label_opts","：标签配置。",[29,926,927,930],{},[120,928,929],{},"symbol_size","：标记点大小。",[14,932,934],{"id":933},"_107-多条折线","10.7 多条折线",[113,936,938],{"className":115,"code":937,"language":117,"meta":118,"style":118},"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",[120,939,940,954,964,968,999,1003,1011,1016,1057,1095,1099,1116,1132,1136],{"__ignoreMap":118},[123,941,942,944,946,948,950,952],{"class":125,"line":126},[123,943,391],{"class":133},[123,945,539],{"class":129},[123,947,223],{"class":133},[123,949,544],{"class":129},[123,951,547],{"class":133},[123,953,550],{"class":129},[123,955,956,958,960,962],{"class":125,"line":140},[123,957,391],{"class":133},[123,959,394],{"class":129},[123,961,223],{"class":133},[123,963,399],{"class":129},[123,965,966],{"class":125,"line":156},[123,967,232],{"emptyLinePlaceholder":231},[123,969,970,973,975,978,980,982,984,986,988,990,992,994,996],{"class":125,"line":168},[123,971,972],{"class":129},"dates ",[123,974,134],{"class":133},[123,976,977],{"class":129}," [",[123,979,421],{"class":143},[123,981,251],{"class":129},[123,983,426],{"class":143},[123,985,251],{"class":129},[123,987,431],{"class":143},[123,989,251],{"class":129},[123,991,436],{"class":143},[123,993,251],{"class":129},[123,995,441],{"class":143},[123,997,998],{"class":129},"]\n",[123,1000,1001],{"class":125,"line":268},[123,1002,232],{"emptyLinePlaceholder":231},[123,1004,1005,1007,1009],{"class":125,"line":291},[123,1006,408],{"class":129},[123,1008,134],{"class":133},[123,1010,413],{"class":129},[123,1012,1013],{"class":125,"line":300},[123,1014,1015],{"class":129},"line.add_xaxis(dates)\n",[123,1017,1018,1020,1023,1025,1027,1029,1032,1034,1036,1038,1041,1043,1046,1049,1051,1053,1055],{"class":125,"line":305},[123,1019,449],{"class":129},[123,1021,1022],{"class":143},"\"线上销售\"",[123,1024,455],{"class":129},[123,1026,259],{"class":164},[123,1028,251],{"class":129},[123,1030,1031],{"class":164},"130",[123,1033,251],{"class":129},[123,1035,462],{"class":164},[123,1037,251],{"class":129},[123,1039,1040],{"class":164},"160",[123,1042,251],{"class":129},[123,1044,1045],{"class":164},"200",[123,1047,1048],{"class":129},"], ",[123,1050,917],{"class":279},[123,1052,134],{"class":133},[123,1054,870],{"class":164},[123,1056,288],{"class":129},[123,1058,1059,1061,1064,1066,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093],{"class":125,"line":316},[123,1060,449],{"class":129},[123,1062,1063],{"class":143},"\"线下销售\"",[123,1065,455],{"class":129},[123,1067,1068],{"class":164},"80",[123,1070,251],{"class":129},[123,1072,467],{"class":164},[123,1074,251],{"class":129},[123,1076,259],{"class":164},[123,1078,251],{"class":129},[123,1080,462],{"class":164},[123,1082,251],{"class":129},[123,1084,472],{"class":164},[123,1086,1048],{"class":129},[123,1088,917],{"class":279},[123,1090,134],{"class":133},[123,1092,870],{"class":164},[123,1094,288],{"class":129},[123,1096,1097],{"class":125,"line":673},[123,1098,629],{"class":129},[123,1100,1101,1103,1105,1107,1109,1111,1114],{"class":125,"line":692},[123,1102,634],{"class":279},[123,1104,134],{"class":133},[123,1106,639],{"class":129},[123,1108,642],{"class":279},[123,1110,134],{"class":133},[123,1112,1113],{"class":143},"\"线上线下销售趋势\"",[123,1115,650],{"class":129},[123,1117,1118,1120,1122,1124,1126,1128,1130],{"class":125,"line":713},[123,1119,695],{"class":279},[123,1121,134],{"class":133},[123,1123,700],{"class":129},[123,1125,703],{"class":279},[123,1127,134],{"class":133},[123,1129,708],{"class":143},[123,1131,650],{"class":129},[123,1133,1134],{"class":125,"line":718},[123,1135,288],{"class":129},[123,1137,1139,1141,1144],{"class":125,"line":1138},14,[123,1140,484],{"class":129},[123,1142,1143],{"class":143},"\"sales.html\"",[123,1145,288],{"class":129},[19,1147,1148],{},"多条折线适合比较不同指标或不同地区。",[14,1150,1152],{"id":1151},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,1154,1155,1156,1159],{},"假设 ",[120,1157,1158],{},"sales.json","：",[113,1161,1163],{"className":177,"code":1162,"language":179,"meta":118,"style":118},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[120,1164,1165,1170,1203,1231,1259],{"__ignoreMap":118},[123,1166,1167],{"class":125,"line":126},[123,1168,1169],{"class":129},"[\n",[123,1171,1172,1175,1178,1180,1182,1184,1187,1189,1191,1193,1196,1198,1200],{"class":125,"line":140},[123,1173,1174],{"class":129},"  {",[123,1176,1177],{"class":164},"\"date\"",[123,1179,147],{"class":129},[123,1181,421],{"class":143},[123,1183,251],{"class":129},[123,1185,1186],{"class":164},"\"online\"",[123,1188,147],{"class":129},[123,1190,259],{"class":164},[123,1192,251],{"class":129},[123,1194,1195],{"class":164},"\"offline\"",[123,1197,147],{"class":129},[123,1199,1068],{"class":164},[123,1201,1202],{"class":129},"},\n",[123,1204,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229],{"class":125,"line":156},[123,1206,1174],{"class":129},[123,1208,1177],{"class":164},[123,1210,147],{"class":129},[123,1212,426],{"class":143},[123,1214,251],{"class":129},[123,1216,1186],{"class":164},[123,1218,147],{"class":129},[123,1220,1031],{"class":164},[123,1222,251],{"class":129},[123,1224,1195],{"class":164},[123,1226,147],{"class":129},[123,1228,467],{"class":164},[123,1230,1202],{"class":129},[123,1232,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257],{"class":125,"line":168},[123,1234,1174],{"class":129},[123,1236,1177],{"class":164},[123,1238,147],{"class":129},[123,1240,431],{"class":143},[123,1242,251],{"class":129},[123,1244,1186],{"class":164},[123,1246,147],{"class":129},[123,1248,462],{"class":164},[123,1250,251],{"class":129},[123,1252,1195],{"class":164},[123,1254,147],{"class":129},[123,1256,259],{"class":164},[123,1258,171],{"class":129},[123,1260,1261],{"class":125,"line":268},[123,1262,998],{"class":129},[19,1264,1265],{},"读取并绘图：",[113,1267,1269],{"className":115,"code":1268,"language":117,"meta":118,"style":118},"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",[120,1270,1271,1277,1291,1301,1305,1345,1360,1364,1373,1382,1391,1395,1409,1418,1427,1437,1442,1451,1456,1474,1492,1497,1515,1532,1537],{"__ignoreMap":118},[123,1272,1273,1275],{"class":125,"line":126},[123,1274,223],{"class":133},[123,1276,226],{"class":129},[123,1278,1279,1281,1283,1285,1287,1289],{"class":125,"line":140},[123,1280,391],{"class":133},[123,1282,539],{"class":129},[123,1284,223],{"class":133},[123,1286,544],{"class":129},[123,1288,547],{"class":133},[123,1290,550],{"class":129},[123,1292,1293,1295,1297,1299],{"class":125,"line":156},[123,1294,391],{"class":133},[123,1296,394],{"class":129},[123,1298,223],{"class":133},[123,1300,399],{"class":129},[123,1302,1303],{"class":125,"line":168},[123,1304,232],{"emptyLinePlaceholder":231},[123,1306,1307,1310,1313,1316,1319,1321,1324,1326,1329,1331,1334,1337,1339,1342],{"class":125,"line":268},[123,1308,1309],{"class":133},"with",[123,1311,1312],{"class":164}," open",[123,1314,1315],{"class":129},"(",[123,1317,1318],{"class":143},"\"sales.json\"",[123,1320,251],{"class":129},[123,1322,1323],{"class":143},"\"r\"",[123,1325,251],{"class":129},[123,1327,1328],{"class":279},"encoding",[123,1330,134],{"class":133},[123,1332,1333],{"class":143},"\"utf-8\"",[123,1335,1336],{"class":129},") ",[123,1338,547],{"class":133},[123,1340,1341],{"class":279}," file",[123,1343,1344],{"class":129},":\n",[123,1346,1347,1350,1352,1355,1358],{"class":125,"line":291},[123,1348,1349],{"class":129},"    data ",[123,1351,134],{"class":133},[123,1353,1354],{"class":129}," json.load(",[123,1356,1357],{"class":279},"file",[123,1359,288],{"class":129},[123,1361,1362],{"class":125,"line":300},[123,1363,232],{"emptyLinePlaceholder":231},[123,1365,1366,1368,1370],{"class":125,"line":305},[123,1367,972],{"class":129},[123,1369,134],{"class":133},[123,1371,1372],{"class":129}," []\n",[123,1374,1375,1378,1380],{"class":125,"line":316},[123,1376,1377],{"class":129},"online_sales ",[123,1379,134],{"class":133},[123,1381,1372],{"class":129},[123,1383,1384,1387,1389],{"class":125,"line":673},[123,1385,1386],{"class":129},"offline_sales ",[123,1388,134],{"class":133},[123,1390,1372],{"class":129},[123,1392,1393],{"class":125,"line":692},[123,1394,232],{"emptyLinePlaceholder":231},[123,1396,1397,1400,1403,1406],{"class":125,"line":713},[123,1398,1399],{"class":133},"for",[123,1401,1402],{"class":129}," item ",[123,1404,1405],{"class":133},"in",[123,1407,1408],{"class":129}," data:\n",[123,1410,1411,1414,1416],{"class":125,"line":718},[123,1412,1413],{"class":129},"    dates.append(item[",[123,1415,1177],{"class":143},[123,1417,444],{"class":129},[123,1419,1420,1423,1425],{"class":125,"line":1138},[123,1421,1422],{"class":129},"    online_sales.append(item[",[123,1424,1186],{"class":143},[123,1426,444],{"class":129},[123,1428,1430,1433,1435],{"class":125,"line":1429},15,[123,1431,1432],{"class":129},"    offline_sales.append(item[",[123,1434,1195],{"class":143},[123,1436,444],{"class":129},[123,1438,1440],{"class":125,"line":1439},16,[123,1441,232],{"emptyLinePlaceholder":231},[123,1443,1445,1447,1449],{"class":125,"line":1444},17,[123,1446,408],{"class":129},[123,1448,134],{"class":133},[123,1450,413],{"class":129},[123,1452,1454],{"class":125,"line":1453},18,[123,1455,1015],{"class":129},[123,1457,1459,1461,1463,1466,1468,1470,1472],{"class":125,"line":1458},19,[123,1460,449],{"class":129},[123,1462,1022],{"class":143},[123,1464,1465],{"class":129},", online_sales, ",[123,1467,917],{"class":279},[123,1469,134],{"class":133},[123,1471,870],{"class":164},[123,1473,288],{"class":129},[123,1475,1477,1479,1481,1484,1486,1488,1490],{"class":125,"line":1476},20,[123,1478,449],{"class":129},[123,1480,1063],{"class":143},[123,1482,1483],{"class":129},", offline_sales, ",[123,1485,917],{"class":279},[123,1487,134],{"class":133},[123,1489,870],{"class":164},[123,1491,288],{"class":129},[123,1493,1495],{"class":125,"line":1494},21,[123,1496,629],{"class":129},[123,1498,1500,1502,1504,1506,1508,1510,1513],{"class":125,"line":1499},22,[123,1501,634],{"class":279},[123,1503,134],{"class":133},[123,1505,639],{"class":129},[123,1507,642],{"class":279},[123,1509,134],{"class":133},[123,1511,1512],{"class":143},"\"销售趋势\"",[123,1514,650],{"class":129},[123,1516,1518,1520,1522,1524,1526,1528,1530],{"class":125,"line":1517},23,[123,1519,695],{"class":279},[123,1521,134],{"class":133},[123,1523,700],{"class":129},[123,1525,703],{"class":279},[123,1527,134],{"class":133},[123,1529,708],{"class":143},[123,1531,650],{"class":129},[123,1533,1535],{"class":125,"line":1534},24,[123,1536,288],{"class":129},[123,1538,1540,1542,1544],{"class":125,"line":1539},25,[123,1541,484],{"class":129},[123,1543,1143],{"class":143},[123,1545,288],{"class":129},[14,1547,1549],{"id":1548},"_109-数据清洗","10.9 数据清洗",[19,1551,1552],{},"真实数据经常不整齐，需要清洗。",[19,1554,1555],{},"常见问题：",[26,1557,1558,1561,1564,1567],{},[29,1559,1560],{},"数字是字符串。",[29,1562,1563],{},"字段缺失。",[29,1565,1566],{},"空值。",[29,1568,1569],{},"日期格式不统一。",[19,1571,1572],{},"示例：",[113,1574,1576],{"className":115,"code":1575,"language":117,"meta":118,"style":118},"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",[120,1577,1578,1588,1611,1632,1653,1657,1661,1669,1678,1682,1693,1707,1718,1723,1727,1735,1746,1750,1757],{"__ignoreMap":118},[123,1579,1580,1583,1585],{"class":125,"line":126},[123,1581,1582],{"class":129},"raw_data ",[123,1584,134],{"class":133},[123,1586,1587],{"class":129}," [\n",[123,1589,1590,1593,1595,1597,1599,1601,1604,1606,1609],{"class":125,"line":140},[123,1591,1592],{"class":129},"    {",[123,1594,1177],{"class":143},[123,1596,147],{"class":129},[123,1598,421],{"class":143},[123,1600,251],{"class":129},[123,1602,1603],{"class":143},"\"sales\"",[123,1605,147],{"class":129},[123,1607,1608],{"class":143},"\"100\"",[123,1610,1202],{"class":129},[123,1612,1613,1615,1617,1619,1621,1623,1625,1627,1630],{"class":125,"line":156},[123,1614,1592],{"class":129},[123,1616,1177],{"class":143},[123,1618,147],{"class":129},[123,1620,426],{"class":143},[123,1622,251],{"class":129},[123,1624,1603],{"class":143},[123,1626,147],{"class":129},[123,1628,1629],{"class":143},"\"\"",[123,1631,1202],{"class":129},[123,1633,1634,1636,1638,1640,1642,1644,1646,1648,1651],{"class":125,"line":168},[123,1635,1592],{"class":129},[123,1637,1177],{"class":143},[123,1639,147],{"class":129},[123,1641,431],{"class":143},[123,1643,251],{"class":129},[123,1645,1603],{"class":143},[123,1647,147],{"class":129},[123,1649,1650],{"class":143},"\"120\"",[123,1652,1202],{"class":129},[123,1654,1655],{"class":125,"line":268},[123,1656,998],{"class":129},[123,1658,1659],{"class":125,"line":291},[123,1660,232],{"emptyLinePlaceholder":231},[123,1662,1663,1665,1667],{"class":125,"line":300},[123,1664,972],{"class":129},[123,1666,134],{"class":133},[123,1668,1372],{"class":129},[123,1670,1671,1674,1676],{"class":125,"line":305},[123,1672,1673],{"class":129},"sales ",[123,1675,134],{"class":133},[123,1677,1372],{"class":129},[123,1679,1680],{"class":125,"line":316},[123,1681,232],{"emptyLinePlaceholder":231},[123,1683,1684,1686,1688,1690],{"class":125,"line":673},[123,1685,1399],{"class":133},[123,1687,1402],{"class":129},[123,1689,1405],{"class":133},[123,1691,1692],{"class":129}," raw_data:\n",[123,1694,1695,1698,1700,1703,1705],{"class":125,"line":692},[123,1696,1697],{"class":129},"    value ",[123,1699,134],{"class":133},[123,1701,1702],{"class":129}," item.get(",[123,1704,1603],{"class":143},[123,1706,288],{"class":129},[123,1708,1709,1712,1715],{"class":125,"line":713},[123,1710,1711],{"class":133},"    if",[123,1713,1714],{"class":133}," not",[123,1716,1717],{"class":129}," value:\n",[123,1719,1720],{"class":125,"line":718},[123,1721,1722],{"class":133},"        continue\n",[123,1724,1725],{"class":125,"line":1138},[123,1726,232],{"emptyLinePlaceholder":231},[123,1728,1729,1731,1733],{"class":125,"line":1429},[123,1730,1413],{"class":129},[123,1732,1177],{"class":143},[123,1734,444],{"class":129},[123,1736,1737,1740,1743],{"class":125,"line":1439},[123,1738,1739],{"class":129},"    sales.append(",[123,1741,1742],{"class":164},"int",[123,1744,1745],{"class":129},"(value))\n",[123,1747,1748],{"class":125,"line":1444},[123,1749,232],{"emptyLinePlaceholder":231},[123,1751,1752,1754],{"class":125,"line":1453},[123,1753,294],{"class":164},[123,1755,1756],{"class":129},"(dates)\n",[123,1758,1759,1761],{"class":125,"line":1458},[123,1760,294],{"class":164},[123,1762,1763],{"class":129},"(sales)\n",[14,1765,1767],{"id":1766},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[113,1769,1771],{"className":115,"code":1770,"language":117,"meta":118,"style":118},"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",[120,1772,1773,1787,1797,1801,1809,1832,1854,1876,1898,1920,1924,1928,1951,1972,1976,1984,1988,1992,2002,2011,2021,2037,2041,2045,2062,2078,2095,2112,2123,2128],{"__ignoreMap":118},[123,1774,1775,1777,1779,1781,1783,1785],{"class":125,"line":126},[123,1776,391],{"class":133},[123,1778,539],{"class":129},[123,1780,223],{"class":133},[123,1782,544],{"class":129},[123,1784,547],{"class":133},[123,1786,550],{"class":129},[123,1788,1789,1791,1793,1795],{"class":125,"line":140},[123,1790,391],{"class":133},[123,1792,394],{"class":129},[123,1794,223],{"class":133},[123,1796,399],{"class":129},[123,1798,1799],{"class":125,"line":156},[123,1800,232],{"emptyLinePlaceholder":231},[123,1802,1803,1805,1807],{"class":125,"line":168},[123,1804,1673],{"class":129},[123,1806,134],{"class":133},[123,1808,1587],{"class":129},[123,1810,1811,1813,1815,1817,1820,1822,1825,1827,1830],{"class":125,"line":268},[123,1812,1592],{"class":129},[123,1814,1177],{"class":143},[123,1816,147],{"class":129},[123,1818,1819],{"class":143},"\"2024-10-01\"",[123,1821,251],{"class":129},[123,1823,1824],{"class":143},"\"amount\"",[123,1826,147],{"class":129},[123,1828,1829],{"class":164},"1200",[123,1831,1202],{"class":129},[123,1833,1834,1836,1838,1840,1843,1845,1847,1849,1852],{"class":125,"line":291},[123,1835,1592],{"class":129},[123,1837,1177],{"class":143},[123,1839,147],{"class":129},[123,1841,1842],{"class":143},"\"2024-10-02\"",[123,1844,251],{"class":129},[123,1846,1824],{"class":143},[123,1848,147],{"class":129},[123,1850,1851],{"class":164},"1800",[123,1853,1202],{"class":129},[123,1855,1856,1858,1860,1862,1865,1867,1869,1871,1874],{"class":125,"line":300},[123,1857,1592],{"class":129},[123,1859,1177],{"class":143},[123,1861,147],{"class":129},[123,1863,1864],{"class":143},"\"2024-10-03\"",[123,1866,251],{"class":129},[123,1868,1824],{"class":143},[123,1870,147],{"class":129},[123,1872,1873],{"class":164},"1500",[123,1875,1202],{"class":129},[123,1877,1878,1880,1882,1884,1887,1889,1891,1893,1896],{"class":125,"line":305},[123,1879,1592],{"class":129},[123,1881,1177],{"class":143},[123,1883,147],{"class":129},[123,1885,1886],{"class":143},"\"2024-10-04\"",[123,1888,251],{"class":129},[123,1890,1824],{"class":143},[123,1892,147],{"class":129},[123,1894,1895],{"class":164},"2100",[123,1897,1202],{"class":129},[123,1899,1900,1902,1904,1906,1909,1911,1913,1915,1918],{"class":125,"line":316},[123,1901,1592],{"class":129},[123,1903,1177],{"class":143},[123,1905,147],{"class":129},[123,1907,1908],{"class":143},"\"2024-10-05\"",[123,1910,251],{"class":129},[123,1912,1824],{"class":143},[123,1914,147],{"class":129},[123,1916,1917],{"class":164},"2600",[123,1919,1202],{"class":129},[123,1921,1922],{"class":125,"line":673},[123,1923,998],{"class":129},[123,1925,1926],{"class":125,"line":692},[123,1927,232],{"emptyLinePlaceholder":231},[123,1929,1930,1932,1934,1937,1939,1942,1944,1946,1948],{"class":125,"line":713},[123,1931,972],{"class":129},[123,1933,134],{"class":133},[123,1935,1936],{"class":129}," [item[",[123,1938,1177],{"class":143},[123,1940,1941],{"class":129},"] ",[123,1943,1399],{"class":133},[123,1945,1402],{"class":129},[123,1947,1405],{"class":133},[123,1949,1950],{"class":129}," sales]\n",[123,1952,1953,1956,1958,1960,1962,1964,1966,1968,1970],{"class":125,"line":718},[123,1954,1955],{"class":129},"amounts ",[123,1957,134],{"class":133},[123,1959,1936],{"class":129},[123,1961,1824],{"class":143},[123,1963,1941],{"class":129},[123,1965,1399],{"class":133},[123,1967,1402],{"class":129},[123,1969,1405],{"class":133},[123,1971,1950],{"class":129},[123,1973,1974],{"class":125,"line":1138},[123,1975,232],{"emptyLinePlaceholder":231},[123,1977,1978,1980,1982],{"class":125,"line":1429},[123,1979,408],{"class":129},[123,1981,134],{"class":133},[123,1983,413],{"class":129},[123,1985,1986],{"class":125,"line":1439},[123,1987,1015],{"class":129},[123,1989,1990],{"class":125,"line":1444},[123,1991,818],{"class":129},[123,1993,1994,1996,1998,2000],{"class":125,"line":1453},[123,1995,823],{"class":279},[123,1997,134],{"class":133},[123,1999,452],{"class":143},[123,2001,153],{"class":129},[123,2003,2004,2006,2008],{"class":125,"line":1458},[123,2005,834],{"class":279},[123,2007,134],{"class":133},[123,2009,2010],{"class":129},"amounts,\n",[123,2012,2013,2015,2017,2019],{"class":125,"line":1476},[123,2014,865],{"class":279},[123,2016,134],{"class":133},[123,2018,870],{"class":164},[123,2020,153],{"class":129},[123,2022,2023,2025,2027,2029,2031,2033,2035],{"class":125,"line":1494},[123,2024,877],{"class":279},[123,2026,134],{"class":133},[123,2028,882],{"class":129},[123,2030,885],{"class":279},[123,2032,134],{"class":133},[123,2034,870],{"class":164},[123,2036,650],{"class":129},[123,2038,2039],{"class":125,"line":1499},[123,2040,288],{"class":129},[123,2042,2043],{"class":125,"line":1517},[123,2044,629],{"class":129},[123,2046,2047,2049,2051,2053,2055,2057,2060],{"class":125,"line":1534},[123,2048,634],{"class":279},[123,2050,134],{"class":133},[123,2052,639],{"class":129},[123,2054,642],{"class":279},[123,2056,134],{"class":133},[123,2058,2059],{"class":143},"\"每日销售额\"",[123,2061,650],{"class":129},[123,2063,2064,2066,2068,2070,2072,2074,2076],{"class":125,"line":1539},[123,2065,655],{"class":279},[123,2067,134],{"class":133},[123,2069,660],{"class":129},[123,2071,663],{"class":279},[123,2073,134],{"class":133},[123,2075,668],{"class":143},[123,2077,650],{"class":129},[123,2079,2081,2083,2085,2087,2089,2091,2093],{"class":125,"line":2080},26,[123,2082,676],{"class":279},[123,2084,134],{"class":133},[123,2086,660],{"class":129},[123,2088,663],{"class":279},[123,2090,134],{"class":133},[123,2092,687],{"class":143},[123,2094,650],{"class":129},[123,2096,2098,2100,2102,2104,2106,2108,2110],{"class":125,"line":2097},27,[123,2099,695],{"class":279},[123,2101,134],{"class":133},[123,2103,700],{"class":129},[123,2105,703],{"class":279},[123,2107,134],{"class":133},[123,2109,708],{"class":143},[123,2111,650],{"class":129},[123,2113,2115,2118,2120],{"class":125,"line":2114},28,[123,2116,2117],{"class":279},"    datazoom_opts",[123,2119,134],{"class":133},[123,2121,2122],{"class":129},"[opts.DataZoomOpts()],\n",[123,2124,2126],{"class":125,"line":2125},29,[123,2127,288],{"class":129},[123,2129,2131,2133,2136],{"class":125,"line":2130},30,[123,2132,484],{"class":129},[123,2134,2135],{"class":143},"\"daily_sales.html\"",[123,2137,288],{"class":129},[19,2139,2140,2143],{},[120,2141,2142],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,2145,2147],{"id":2146},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,2149,2150],{},"如果数据结构如下：",[113,2152,2154],{"className":115,"code":2153,"language":117,"meta":118,"style":118},"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",[120,2155,2156,2164,2172,2196,2218,2223,2230,2251,2272,2276],{"__ignoreMap":118},[123,2157,2158,2160,2162],{"class":125,"line":126},[123,2159,130],{"class":129},[123,2161,134],{"class":133},[123,2163,137],{"class":129},[123,2165,2166,2169],{"class":125,"line":140},[123,2167,2168],{"class":143},"    \"北京\"",[123,2170,2171],{"class":129},": [\n",[123,2173,2174,2177,2179,2181,2184,2186,2189,2191,2194],{"class":125,"line":156},[123,2175,2176],{"class":129},"        {",[123,2178,1177],{"class":143},[123,2180,147],{"class":129},[123,2182,2183],{"class":143},"\"2024-01-01\"",[123,2185,251],{"class":129},[123,2187,2188],{"class":143},"\"confirm\"",[123,2190,147],{"class":129},[123,2192,2193],{"class":164},"10",[123,2195,1202],{"class":129},[123,2197,2198,2200,2202,2204,2207,2209,2211,2213,2216],{"class":125,"line":168},[123,2199,2176],{"class":129},[123,2201,1177],{"class":143},[123,2203,147],{"class":129},[123,2205,2206],{"class":143},"\"2024-01-02\"",[123,2208,251],{"class":129},[123,2210,2188],{"class":143},[123,2212,147],{"class":129},[123,2214,2215],{"class":164},"12",[123,2217,1202],{"class":129},[123,2219,2220],{"class":125,"line":268},[123,2221,2222],{"class":129},"    ],\n",[123,2224,2225,2228],{"class":125,"line":291},[123,2226,2227],{"class":143},"    \"上海\"",[123,2229,2171],{"class":129},[123,2231,2232,2234,2236,2238,2240,2242,2244,2246,2249],{"class":125,"line":300},[123,2233,2176],{"class":129},[123,2235,1177],{"class":143},[123,2237,147],{"class":129},[123,2239,2183],{"class":143},[123,2241,251],{"class":129},[123,2243,2188],{"class":143},[123,2245,147],{"class":129},[123,2247,2248],{"class":164},"8",[123,2250,1202],{"class":129},[123,2252,2253,2255,2257,2259,2261,2263,2265,2267,2270],{"class":125,"line":305},[123,2254,2176],{"class":129},[123,2256,1177],{"class":143},[123,2258,147],{"class":129},[123,2260,2206],{"class":143},[123,2262,251],{"class":129},[123,2264,2188],{"class":143},[123,2266,147],{"class":129},[123,2268,2269],{"class":164},"13",[123,2271,1202],{"class":129},[123,2273,2274],{"class":125,"line":316},[123,2275,2222],{"class":129},[123,2277,2278],{"class":125,"line":673},[123,2279,171],{"class":129},[19,2281,2282],{},"绘制多地区趋势：",[113,2284,2286],{"className":115,"code":2285,"language":117,"meta":118,"style":118},"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",[120,2287,2288,2302,2312,2316,2342,2346,2354,2358,2362,2374,2396,2409,2413,2417,2434,2450,2454],{"__ignoreMap":118},[123,2289,2290,2292,2294,2296,2298,2300],{"class":125,"line":126},[123,2291,391],{"class":133},[123,2293,539],{"class":129},[123,2295,223],{"class":133},[123,2297,544],{"class":129},[123,2299,547],{"class":133},[123,2301,550],{"class":129},[123,2303,2304,2306,2308,2310],{"class":125,"line":140},[123,2305,391],{"class":133},[123,2307,394],{"class":129},[123,2309,223],{"class":133},[123,2311,399],{"class":129},[123,2313,2314],{"class":125,"line":156},[123,2315,232],{"emptyLinePlaceholder":231},[123,2317,2318,2320,2322,2324,2326,2328,2330,2332,2334,2337,2339],{"class":125,"line":168},[123,2319,972],{"class":129},[123,2321,134],{"class":133},[123,2323,1936],{"class":129},[123,2325,1177],{"class":143},[123,2327,1941],{"class":129},[123,2329,1399],{"class":133},[123,2331,1402],{"class":129},[123,2333,1405],{"class":133},[123,2335,2336],{"class":129}," data[",[123,2338,150],{"class":143},[123,2340,2341],{"class":129},"]]\n",[123,2343,2344],{"class":125,"line":268},[123,2345,232],{"emptyLinePlaceholder":231},[123,2347,2348,2350,2352],{"class":125,"line":291},[123,2349,408],{"class":129},[123,2351,134],{"class":133},[123,2353,413],{"class":129},[123,2355,2356],{"class":125,"line":300},[123,2357,1015],{"class":129},[123,2359,2360],{"class":125,"line":305},[123,2361,232],{"emptyLinePlaceholder":231},[123,2363,2364,2366,2369,2371],{"class":125,"line":316},[123,2365,1399],{"class":133},[123,2367,2368],{"class":129}," city, records ",[123,2370,1405],{"class":133},[123,2372,2373],{"class":129}," data.items():\n",[123,2375,2376,2379,2381,2383,2385,2387,2389,2391,2393],{"class":125,"line":673},[123,2377,2378],{"class":129},"    values ",[123,2380,134],{"class":133},[123,2382,1936],{"class":129},[123,2384,2188],{"class":143},[123,2386,1941],{"class":129},[123,2388,1399],{"class":133},[123,2390,1402],{"class":129},[123,2392,1405],{"class":133},[123,2394,2395],{"class":129}," records]\n",[123,2397,2398,2401,2403,2405,2407],{"class":125,"line":692},[123,2399,2400],{"class":129},"    line.add_yaxis(city, values, ",[123,2402,917],{"class":279},[123,2404,134],{"class":133},[123,2406,870],{"class":164},[123,2408,288],{"class":129},[123,2410,2411],{"class":125,"line":713},[123,2412,232],{"emptyLinePlaceholder":231},[123,2414,2415],{"class":125,"line":718},[123,2416,629],{"class":129},[123,2418,2419,2421,2423,2425,2427,2429,2432],{"class":125,"line":1138},[123,2420,634],{"class":279},[123,2422,134],{"class":133},[123,2424,639],{"class":129},[123,2426,642],{"class":279},[123,2428,134],{"class":133},[123,2430,2431],{"class":143},"\"多地区趋势图\"",[123,2433,650],{"class":129},[123,2435,2436,2438,2440,2442,2444,2446,2448],{"class":125,"line":1429},[123,2437,695],{"class":279},[123,2439,134],{"class":133},[123,2441,700],{"class":129},[123,2443,703],{"class":279},[123,2445,134],{"class":133},[123,2447,708],{"class":143},[123,2449,650],{"class":129},[123,2451,2452],{"class":125,"line":1439},[123,2453,288],{"class":129},[123,2455,2456,2458,2461],{"class":125,"line":1444},[123,2457,484],{"class":129},[123,2459,2460],{"class":143},"\"trend.html\"",[123,2462,288],{"class":129},[19,2464,2465],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,2467,2469],{"id":2468},"_1012-易错点","10.12 易错点",[26,2471,2472,2478,2484,2495,2501],{},[29,2473,2474,2477],{},[120,2475,2476],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,2479,2480,2483],{},[120,2481,2482],{},"render()"," 生成的是 HTML，不是图片。",[29,2485,2486,2487,2490,2491,2494],{},"JSON 字符串用 ",[120,2488,2489],{},"json.loads()","，JSON 文件用 ",[120,2492,2493],{},"json.load()","。",[29,2496,2497,2498,2494],{},"中文 JSON 保存时加 ",[120,2499,2500],{},"ensure_ascii=False",[29,2502,2503],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,2505,2507],{"id":2506},"_1013-本章练习","10.13 本章练习",[26,2509,2510,2513,2516,2519,2522],{},[29,2511,2512],{},"安装 pyecharts 并生成第一个折线图。",[29,2514,2515],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,2517,2518],{},"绘制两条折线，对比线上和线下销售额。",[29,2520,2521],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,2523,2524],{},"对含有空值的销售数据进行清洗后再绘图。",[2526,2527,2528],"style",{},"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":118,"searchDepth":140,"depth":140,"links":2530},[2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543],{"id":16,"depth":140,"text":17},{"id":104,"depth":140,"text":105},{"id":324,"depth":140,"text":325},{"id":380,"depth":140,"text":381},{"id":519,"depth":140,"text":520},{"id":804,"depth":140,"text":805},{"id":933,"depth":140,"text":934},{"id":1151,"depth":140,"text":1152},{"id":1548,"depth":140,"text":1549},{"id":1766,"depth":140,"text":1767},{"id":2146,"depth":140,"text":2147},{"id":2468,"depth":140,"text":2469},{"id":2506,"depth":140,"text":2507},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":5,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",[2552,7596,8703,10122,13111,14462,15950,17038,25798,25810,26404,26430,26554,26795,26860,26878,26891,26938,27061,27230,27429,27609,27814,27950,28045,28082,28095,28405,29145,29853,29874,30893,32524,32675,32688,32700,32997,52800,52815,52832,52865,55733,79078,95217,95238,95351,95472,96242,96905,97266,97304,97410,97510,97553,97579,97640,99294,99395,99420,99910,100410,101490,101773,102515,103017,103029,105043,106706,108209,109907,111823,113742,115763,119233,119665,120128,120877,123821,124169,124191,124547,127854,127866,128269,128292,128439,128606,128811,129112,129669,130326,132257,133855,134504,135998,137429,138664,140358,142110,144520,144636,145571,145782,146667,147902,148130,148143,149290,151436,153804,157125,159602,161246,163023,165036,168088,170268,172795,174989],{"id":2553,"title":2554,"body":2555,"description":118,"extension":2545,"meta":7591,"navigation":231,"path":7592,"seo":7593,"stem":7594,"__hash__":7595},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2556,"toc":7563},[2557,2560,2564,2567,2571,2582,2586,2591,2594,2597,2600,2603,2606,2631,2635,2638,2641,2644,2647,2698,2702,2720,2722,2736,2739,2747,2750,3598,3605,3622,3626,3712,3716,3722,3808,3812,3850,3854,3918,3922,3926,3933,3944,3948,3953,3957,3962,3966,3971,3975,3979,3984,4232,4237,4375,4380,4636,4639,4647,4651,4656,4759,4762,5066,5075,5176,5179,5182,5185,5188,5448,5453,5591,5594,5773,5776,5904,5907,6059,6063,6068,6071,6082,6090,6093,6199,6203,6207,6212,6262,6267,6272,6296,6301,6354,6357,6362,6539,6544,6829,6834,7228,7232,7237,7294,7299,7307,7310,7448,7451,7560],[10,2558,2554],{"id":2559},"_1基础入门",[14,2561,2563],{"id":2562},"_11注释","1.1注释",[19,2565,2566],{},"\u002F\u002F或者\u002F* *\u002F",[14,2568,2570],{"id":2569},"_12命名","1.2命名",[26,2572,2573,2576,2579],{},[29,2574,2575],{},"字母数字下划线",[29,2577,2578],{},"开头必须是字母或_",[29,2580,2581],{},"不能使用关键词",[14,2583,2585],{"id":2584},"_13数据类型","1.3数据类型",[2587,2588,2590],"h3",{"id":2589},"_131整形","1.3.1整形",[19,2592,2593],{},"short 短整形 2",[19,2595,2596],{},"int 整形 4",[19,2598,2599],{},"long 长整形 win4 linux32位4 linux64位8",[19,2601,2602],{},"long long 长长整形 8",[19,2604,2605],{},"利用sizeof可以求数据类型占用的内存空间大小",[113,2607,2611],{"className":2608,"code":2609,"language":2610,"meta":118,"style":118},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[120,2612,2613,2624],{"__ignoreMap":118},[123,2614,2615,2618,2620,2622],{"class":125,"line":126},[123,2616,2617],{"class":133},"sizeof",[123,2619,1315],{"class":129},[123,2621,1742],{"class":133},[123,2623,288],{"class":129},[123,2625,2626,2628],{"class":125,"line":140},[123,2627,2617],{"class":133},[123,2629,2630],{"class":129},"(num)\n",[2587,2632,2634],{"id":2633},"_132浮点型","1.3.2浮点型",[19,2636,2637],{},"float 单精度 4节 7位有效数字",[19,2639,2640],{},"double 双精度 8节 15-16有效数字",[19,2642,2643],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2645,2646],{},"注意点：",[113,2648,2650],{"className":2608,"code":2649,"language":2610,"meta":118,"style":118},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[120,2651,2652,2675],{"__ignoreMap":118},[123,2653,2654,2657,2660,2662,2665,2668,2671],{"class":125,"line":126},[123,2655,2656],{"class":133},"float",[123,2658,2659],{"class":129}," f1",[123,2661,134],{"class":133},[123,2663,2664],{"class":164},"3.14",[123,2666,2667],{"class":133},"f",[123,2669,2670],{"class":129},";",[123,2672,2674],{"class":2673},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[123,2676,2677,2679,2682,2684,2687,2690,2693,2695],{"class":125,"line":140},[123,2678,2656],{"class":133},[123,2680,2681],{"class":129}," f2",[123,2683,134],{"class":133},[123,2685,2686],{"class":164},"3",[123,2688,2689],{"class":133},"e",[123,2691,2692],{"class":164},"2",[123,2694,2670],{"class":129},[123,2696,2697],{"class":2673}," \u002F\u002F科学记数法\n",[2587,2699,2701],{"id":2700},"_133字符型","1.3.3字符型",[113,2703,2705],{"className":2608,"code":2704,"language":2610,"meta":118,"style":118},"char ch='a'\n",[120,2706,2707],{"__ignoreMap":118},[123,2708,2709,2712,2715,2717],{"class":125,"line":126},[123,2710,2711],{"class":133},"char",[123,2713,2714],{"class":129}," ch",[123,2716,134],{"class":133},[123,2718,2719],{"class":143},"'a'\n",[19,2721,2646],{},[26,2723,2724,2727,2730,2733],{},[29,2725,2726],{},"在显示字符型变量时，只能单引号，双引号x",[29,2728,2729],{},"单引号内只能一个字符，不能字符串",[29,2731,2732],{},"c和c++字符型变量只占用一个字符",[29,2734,2735],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2737,2738],{},"ASCII码大致由以下两部分组成：",[26,2740,2741,2744],{},[29,2742,2743],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2745,2746],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2748,2749],{},"ASCII码表格：",[48,2751,2752,2793],{},[51,2753,2754],{},[54,2755,2756,2763,2768,2772,2777,2781,2785,2789],{},[57,2757,2758,2762],{},[2759,2760,2761],"strong",{},"ASCII","值",[57,2764,2765],{},[2759,2766,2767],{},"控制字符",[57,2769,2770,2762],{},[2759,2771,2761],{},[57,2773,2774],{},[2759,2775,2776],{},"字符",[57,2778,2779,2762],{},[2759,2780,2761],{},[57,2782,2783],{},[2759,2784,2776],{},[57,2786,2787,2762],{},[2759,2788,2761],{},[57,2790,2791],{},[2759,2792,2776],{},[64,2794,2795,2821,2847,2872,2897,2922,2947,2972,2998,3022,3048,3073,3099,3123,3148,3174,3200,3223,3248,3273,3298,3323,3348,3373,3398,3422,3447,3472,3496,3521,3546,3572],{},[54,2796,2797,2800,2803,2806,2809,2812,2815,2818],{},[69,2798,2799],{},"0",[69,2801,2802],{},"NUT",[69,2804,2805],{},"32",[69,2807,2808],{},"(space)",[69,2810,2811],{},"64",[69,2813,2814],{},"@",[69,2816,2817],{},"96",[69,2819,2820],{},"、",[54,2822,2823,2826,2829,2832,2835,2838,2841,2844],{},[69,2824,2825],{},"1",[69,2827,2828],{},"SOH",[69,2830,2831],{},"33",[69,2833,2834],{},"!",[69,2836,2837],{},"65",[69,2839,2840],{},"A",[69,2842,2843],{},"97",[69,2845,2846],{},"a",[54,2848,2849,2851,2854,2857,2860,2863,2866,2869],{},[69,2850,2692],{},[69,2852,2853],{},"STX",[69,2855,2856],{},"34",[69,2858,2859],{},"\"",[69,2861,2862],{},"66",[69,2864,2865],{},"B",[69,2867,2868],{},"98",[69,2870,2871],{},"b",[54,2873,2874,2876,2879,2882,2885,2888,2891,2894],{},[69,2875,2686],{},[69,2877,2878],{},"ETX",[69,2880,2881],{},"35",[69,2883,2884],{},"#",[69,2886,2887],{},"67",[69,2889,2890],{},"C",[69,2892,2893],{},"99",[69,2895,2896],{},"c",[54,2898,2899,2902,2905,2908,2911,2914,2917,2919],{},[69,2900,2901],{},"4",[69,2903,2904],{},"EOT",[69,2906,2907],{},"36",[69,2909,2910],{},"$",[69,2912,2913],{},"68",[69,2915,2916],{},"D",[69,2918,259],{},[69,2920,2921],{},"d",[54,2923,2924,2927,2930,2933,2936,2939,2942,2945],{},[69,2925,2926],{},"5",[69,2928,2929],{},"ENQ",[69,2931,2932],{},"37",[69,2934,2935],{},"%",[69,2937,2938],{},"69",[69,2940,2941],{},"E",[69,2943,2944],{},"101",[69,2946,2689],{},[54,2948,2949,2952,2955,2958,2961,2964,2967,2970],{},[69,2950,2951],{},"6",[69,2953,2954],{},"ACK",[69,2956,2957],{},"38",[69,2959,2960],{},"&",[69,2962,2963],{},"70",[69,2965,2966],{},"F",[69,2968,2969],{},"102",[69,2971,2667],{},[54,2973,2974,2977,2980,2983,2986,2989,2992,2995],{},[69,2975,2976],{},"7",[69,2978,2979],{},"BEL",[69,2981,2982],{},"39",[69,2984,2985],{},",",[69,2987,2988],{},"71",[69,2990,2991],{},"G",[69,2993,2994],{},"103",[69,2996,2997],{},"g",[54,2999,3000,3002,3005,3008,3010,3013,3016,3019],{},[69,3001,2248],{},[69,3003,3004],{},"BS",[69,3006,3007],{},"40",[69,3009,1315],{},[69,3011,3012],{},"72",[69,3014,3015],{},"H",[69,3017,3018],{},"104",[69,3020,3021],{},"h",[54,3023,3024,3027,3030,3033,3036,3039,3042,3045],{},[69,3025,3026],{},"9",[69,3028,3029],{},"HT",[69,3031,3032],{},"41",[69,3034,3035],{},")",[69,3037,3038],{},"73",[69,3040,3041],{},"I",[69,3043,3044],{},"105",[69,3046,3047],{},"i",[54,3049,3050,3052,3055,3058,3061,3064,3067,3070],{},[69,3051,2193],{},[69,3053,3054],{},"LF",[69,3056,3057],{},"42",[69,3059,3060],{},"*",[69,3062,3063],{},"74",[69,3065,3066],{},"J",[69,3068,3069],{},"106",[69,3071,3072],{},"j",[54,3074,3075,3078,3081,3084,3087,3090,3093,3096],{},[69,3076,3077],{},"11",[69,3079,3080],{},"VT",[69,3082,3083],{},"43",[69,3085,3086],{},"+",[69,3088,3089],{},"75",[69,3091,3092],{},"K",[69,3094,3095],{},"107",[69,3097,3098],{},"k",[54,3100,3101,3103,3106,3109,3111,3114,3117,3120],{},[69,3102,2215],{},[69,3104,3105],{},"FF",[69,3107,3108],{},"44",[69,3110,2985],{},[69,3112,3113],{},"76",[69,3115,3116],{},"L",[69,3118,3119],{},"108",[69,3121,3122],{},"l",[54,3124,3125,3127,3130,3133,3136,3139,3142,3145],{},[69,3126,2269],{},[69,3128,3129],{},"CR",[69,3131,3132],{},"45",[69,3134,3135],{},"-",[69,3137,3138],{},"77",[69,3140,3141],{},"M",[69,3143,3144],{},"109",[69,3146,3147],{},"m",[54,3149,3150,3153,3156,3159,3162,3165,3168,3171],{},[69,3151,3152],{},"14",[69,3154,3155],{},"SO",[69,3157,3158],{},"46",[69,3160,3161],{},".",[69,3163,3164],{},"78",[69,3166,3167],{},"N",[69,3169,3170],{},"110",[69,3172,3173],{},"n",[54,3175,3176,3179,3182,3185,3188,3191,3194,3197],{},[69,3177,3178],{},"15",[69,3180,3181],{},"SI",[69,3183,3184],{},"47",[69,3186,3187],{},"\u002F",[69,3189,3190],{},"79",[69,3192,3193],{},"O",[69,3195,3196],{},"111",[69,3198,3199],{},"o",[54,3201,3202,3205,3208,3211,3213,3215,3218,3221],{},[69,3203,3204],{},"16",[69,3206,3207],{},"DLE",[69,3209,3210],{},"48",[69,3212,2799],{},[69,3214,1068],{},[69,3216,3217],{},"P",[69,3219,3220],{},"112",[69,3222,19],{},[54,3224,3225,3228,3231,3234,3236,3239,3242,3245],{},[69,3226,3227],{},"17",[69,3229,3230],{},"DCI",[69,3232,3233],{},"49",[69,3235,2825],{},[69,3237,3238],{},"81",[69,3240,3241],{},"Q",[69,3243,3244],{},"113",[69,3246,3247],{},"q",[54,3249,3250,3253,3256,3259,3261,3264,3267,3270],{},[69,3251,3252],{},"18",[69,3254,3255],{},"DC2",[69,3257,3258],{},"50",[69,3260,2692],{},[69,3262,3263],{},"82",[69,3265,3266],{},"R",[69,3268,3269],{},"114",[69,3271,3272],{},"r",[54,3274,3275,3278,3281,3284,3286,3289,3292,3295],{},[69,3276,3277],{},"19",[69,3279,3280],{},"DC3",[69,3282,3283],{},"51",[69,3285,2686],{},[69,3287,3288],{},"83",[69,3290,3291],{},"S",[69,3293,3294],{},"115",[69,3296,3297],{},"s",[54,3299,3300,3303,3306,3309,3311,3314,3317,3320],{},[69,3301,3302],{},"20",[69,3304,3305],{},"DC4",[69,3307,3308],{},"52",[69,3310,2901],{},[69,3312,3313],{},"84",[69,3315,3316],{},"T",[69,3318,3319],{},"116",[69,3321,3322],{},"t",[54,3324,3325,3328,3331,3334,3336,3339,3342,3345],{},[69,3326,3327],{},"21",[69,3329,3330],{},"NAK",[69,3332,3333],{},"53",[69,3335,2926],{},[69,3337,3338],{},"85",[69,3340,3341],{},"U",[69,3343,3344],{},"117",[69,3346,3347],{},"u",[54,3349,3350,3353,3356,3359,3361,3364,3367,3370],{},[69,3351,3352],{},"22",[69,3354,3355],{},"SYN",[69,3357,3358],{},"54",[69,3360,2951],{},[69,3362,3363],{},"86",[69,3365,3366],{},"V",[69,3368,3369],{},"118",[69,3371,3372],{},"v",[54,3374,3375,3378,3381,3384,3386,3389,3392,3395],{},[69,3376,3377],{},"23",[69,3379,3380],{},"TB",[69,3382,3383],{},"55",[69,3385,2976],{},[69,3387,3388],{},"87",[69,3390,3391],{},"W",[69,3393,3394],{},"119",[69,3396,3397],{},"w",[54,3399,3400,3403,3406,3409,3411,3414,3417,3419],{},[69,3401,3402],{},"24",[69,3404,3405],{},"CAN",[69,3407,3408],{},"56",[69,3410,2248],{},[69,3412,3413],{},"88",[69,3415,3416],{},"X",[69,3418,462],{},[69,3420,3421],{},"x",[54,3423,3424,3427,3430,3433,3435,3438,3441,3444],{},[69,3425,3426],{},"25",[69,3428,3429],{},"EM",[69,3431,3432],{},"57",[69,3434,3026],{},[69,3436,3437],{},"89",[69,3439,3440],{},"Y",[69,3442,3443],{},"121",[69,3445,3446],{},"y",[54,3448,3449,3452,3455,3458,3461,3463,3466,3469],{},[69,3450,3451],{},"26",[69,3453,3454],{},"SUB",[69,3456,3457],{},"58",[69,3459,3460],{},":",[69,3462,467],{},[69,3464,3465],{},"Z",[69,3467,3468],{},"122",[69,3470,3471],{},"z",[54,3473,3474,3477,3480,3483,3485,3488,3490,3493],{},[69,3475,3476],{},"27",[69,3478,3479],{},"ESC",[69,3481,3482],{},"59",[69,3484,2670],{},[69,3486,3487],{},"91",[69,3489,839],{},[69,3491,3492],{},"123",[69,3494,3495],{},"{",[54,3497,3498,3501,3504,3507,3510,3513,3515,3518],{},[69,3499,3500],{},"28",[69,3502,3503],{},"FS",[69,3505,3506],{},"60",[69,3508,3509],{},"\u003C",[69,3511,3512],{},"92",[69,3514,3187],{},[69,3516,3517],{},"124",[69,3519,3520],{},"|",[54,3522,3523,3526,3529,3532,3534,3537,3540,3543],{},[69,3524,3525],{},"29",[69,3527,3528],{},"GS",[69,3530,3531],{},"61",[69,3533,134],{},[69,3535,3536],{},"93",[69,3538,3539],{},"]",[69,3541,3542],{},"125",[69,3544,3545],{},"}",[54,3547,3548,3551,3554,3557,3560,3563,3566,3569],{},[69,3549,3550],{},"30",[69,3552,3553],{},"RS",[69,3555,3556],{},"62",[69,3558,3559],{},">",[69,3561,3562],{},"94",[69,3564,3565],{},"^",[69,3567,3568],{},"126",[69,3570,3571],{},"`",[54,3573,3574,3577,3580,3583,3586,3589,3592,3595],{},[69,3575,3576],{},"31",[69,3578,3579],{},"US",[69,3581,3582],{},"63",[69,3584,3585],{},"?",[69,3587,3588],{},"95",[69,3590,3591],{},"_",[69,3593,3594],{},"127",[69,3596,3597],{},"DEL",[19,3599,3600,3601,3604],{},"ASCII 码大致由以下",[2759,3602,3603],{},"两部分组","成：",[3606,3607,3608,3615],"ul",{},[29,3609,3610,3611,3614],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2759,3612,3613],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,3616,3617,3618,3621],{},"ASCII 打印字符：数字 ",[2759,3619,3620],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[2587,3623,3625],{"id":3624},"_134转义字符","1.3.4转义字符",[113,3627,3629],{"className":2608,"code":3628,"language":2610,"meta":118,"style":118},"\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",[120,3630,3631,3636,3652,3666,3671,3684,3689],{"__ignoreMap":118},[123,3632,3633],{"class":125,"line":126},[123,3634,3635],{"class":2673},"\u002F\u002F换行符\n",[123,3637,3638,3641,3644,3647,3649],{"class":125,"line":140},[123,3639,3640],{"class":129},"cout ",[123,3642,3643],{"class":133},"\u003C\u003C",[123,3645,3646],{"class":143},"\"hello world\u002Fn\"",[123,3648,2670],{"class":129},[123,3650,3651],{"class":2673}," \u002F\u002F就等同于如下：\n",[123,3653,3654,3656,3658,3661,3663],{"class":125,"line":156},[123,3655,3640],{"class":129},[123,3657,3643],{"class":133},[123,3659,3660],{"class":143},"\"hello world\"",[123,3662,3643],{"class":133},[123,3664,3665],{"class":129},"endl;\n",[123,3667,3668],{"class":125,"line":168},[123,3669,3670],{"class":2673},"\u002F\u002F反斜杠\n",[123,3672,3673,3675,3677,3680,3682],{"class":125,"line":268},[123,3674,3640],{"class":129},[123,3676,3643],{"class":133},[123,3678,3679],{"class":143},"\"\u002F\u002F\"",[123,3681,3643],{"class":133},[123,3683,3665],{"class":129},[123,3685,3686],{"class":125,"line":291},[123,3687,3688],{"class":2673},"\u002F\u002F水平制表符\n",[123,3690,3691,3693,3695,3698,3701,3704,3706,3709],{"class":125,"line":300},[123,3692,3640],{"class":129},[123,3694,3643],{"class":133},[123,3696,3697],{"class":143},"\"aaaa",[123,3699,3700],{"class":164},"\\t",[123,3702,3703],{"class":143},"helloworld\"",[123,3705,3643],{"class":133},[123,3707,3708],{"class":129},"endl;",[123,3710,3711],{"class":2673}," \u002F\u002F输出窗口时有对齐效果\n",[2587,3713,3715],{"id":3714},"_135字符串型","1.3.5字符串型",[19,3717,3718,3719,3721],{},"char 变量名",[123,3720],{},"=\"字符串值\"",[113,3723,3725],{"className":2608,"code":3724,"language":2610,"meta":118,"style":118},"\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",[120,3726,3727,3732,3737,3742,3747,3761,3774,3779,3784,3795],{"__ignoreMap":118},[123,3728,3729],{"class":125,"line":126},[123,3730,3731],{"class":2673},"\u002F\u002Fc风格字符串\n",[123,3733,3734],{"class":125,"line":140},[123,3735,3736],{"class":2673},"\u002F\u002F注意事项：\n",[123,3738,3739],{"class":125,"line":156},[123,3740,3741],{"class":2673},"\u002F\u002F1.char字符串名[]\n",[123,3743,3744],{"class":125,"line":168},[123,3745,3746],{"class":2673},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[123,3748,3749,3751,3754,3756,3758],{"class":125,"line":268},[123,3750,2711],{"class":133},[123,3752,3753],{"class":129}," str[]",[123,3755,134],{"class":133},[123,3757,3660],{"class":143},[123,3759,3760],{"class":129},";\n",[123,3762,3763,3765,3767,3770,3772],{"class":125,"line":291},[123,3764,3640],{"class":129},[123,3766,3643],{"class":133},[123,3768,3769],{"class":129},"str",[123,3771,3643],{"class":133},[123,3773,3665],{"class":129},[123,3775,3776],{"class":125,"line":300},[123,3777,3778],{"class":2673},"\u002F\u002Fc++风格字符串\n",[123,3780,3781],{"class":125,"line":305},[123,3782,3783],{"class":2673},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[123,3785,3786,3789,3791,3793],{"class":125,"line":316},[123,3787,3788],{"class":129},"string str2",[123,3790,134],{"class":133},[123,3792,3660],{"class":143},[123,3794,3760],{"class":129},[123,3796,3797,3799,3801,3804,3806],{"class":125,"line":673},[123,3798,3640],{"class":129},[123,3800,3643],{"class":133},[123,3802,3803],{"class":129},"str2",[123,3805,3643],{"class":133},[123,3807,3665],{"class":129},[2587,3809,3811],{"id":3810},"_136布尔类型bool","1.3.6布尔类型bool",[113,3813,3815],{"className":2608,"code":3814,"language":2610,"meta":118,"style":118},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[120,3816,3817,3832],{"__ignoreMap":118},[123,3818,3819,3822,3825,3827,3830],{"class":125,"line":126},[123,3820,3821],{"class":133},"bool",[123,3823,3824],{"class":129}," flag",[123,3826,134],{"class":133},[123,3828,3829],{"class":164},"true",[123,3831,3760],{"class":129},[123,3833,3834,3837,3840,3843,3845,3847],{"class":125,"line":140},[123,3835,3836],{"class":129},"cout",[123,3838,3839],{"class":133},"\u003C\u003Csizeof",[123,3841,3842],{"class":129},"(flag)",[123,3844,3643],{"class":133},[123,3846,3708],{"class":129},[123,3848,3849],{"class":2673}," \u002F\u002F查看布尔占内存空间\n",[14,3851,3853],{"id":3852},"_14键盘输入cin","1.4键盘输入cin",[113,3855,3857],{"className":2608,"code":3856,"language":2610,"meta":118,"style":118},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[120,3858,3859,3872,3889,3900],{"__ignoreMap":118},[123,3860,3861,3863,3866,3868,3870],{"class":125,"line":126},[123,3862,1742],{"class":133},[123,3864,3865],{"class":129}," a",[123,3867,134],{"class":133},[123,3869,2799],{"class":164},[123,3871,3760],{"class":129},[123,3873,3874,3876,3878,3881,3883,3885,3887],{"class":125,"line":140},[123,3875,3836],{"class":129},[123,3877,3643],{"class":133},[123,3879,3880],{"class":143},"\"请给整型变量a赋值\"",[123,3882,3643],{"class":133},[123,3884,2846],{"class":129},[123,3886,3643],{"class":133},[123,3888,3665],{"class":129},[123,3890,3891,3894,3897],{"class":125,"line":156},[123,3892,3893],{"class":129},"cin ",[123,3895,3896],{"class":133},">>",[123,3898,3899],{"class":129}," a;\n",[123,3901,3902,3904,3906,3909,3912,3914,3916],{"class":125,"line":168},[123,3903,3640],{"class":129},[123,3905,3643],{"class":133},[123,3907,3908],{"class":143}," \"整型变量a=\"",[123,3910,3911],{"class":133}," \u003C\u003C",[123,3913,2846],{"class":129},[123,3915,3643],{"class":133},[123,3917,3665],{"class":129},[14,3919,3921],{"id":3920},"_15运算符","1.5运算符",[2587,3923,3925],{"id":3924},"_151算术运算符","1.5.1算术运算符",[19,3927,3928,3932],{},[3929,3930],"img",{"alt":118,"src":3931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3934,3935,3938,3941],{},[29,3936,3937],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3939,3940],{},"两个小数不可以做取模运算",[29,3942,3943],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[2587,3945,3947],{"id":3946},"_152赋值运算符","1.5.2赋值运算符",[19,3949,3950],{},[3929,3951],{"alt":118,"src":3952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[2587,3954,3956],{"id":3955},"_153比较运算符","1.5.3比较运算符",[19,3958,3959],{},[3929,3960],{"alt":118,"src":3961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[2587,3963,3965],{"id":3964},"_154逻辑运算符","1.5.4逻辑运算符",[19,3967,3968],{},[3929,3969],{"alt":118,"src":3970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3972,3974],{"id":3973},"_16程序流程结构","1.6程序流程结构",[2587,3976,3978],{"id":3977},"_161选择结构","1.6.1选择结构",[26,3980,3981],{},[29,3982,3983],{},"if语句\n单行、多行、多条件if语句",[113,3985,3987],{"className":2608,"code":3986,"language":2610,"meta":118,"style":118},"\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",[120,3988,3989,3994,4009,4013,4027,4031,4036,4045,4058,4062,4075,4079,4084,4088,4101,4105,4110,4130,4134,4147,4151,4178,4182,4198,4202,4206,4210,4223,4227],{"__ignoreMap":118},[123,3990,3991],{"class":125,"line":126},[123,3992,3993],{"class":2673},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[123,3995,3996,3999,4002,4004,4007],{"class":125,"line":140},[123,3997,3998],{"class":133},"if",[123,4000,4001],{"class":129},"(score",[123,4003,3559],{"class":133},[123,4005,4006],{"class":164},"600",[123,4008,288],{"class":129},[123,4010,4011],{"class":125,"line":156},[123,4012,186],{"class":129},[123,4014,4015,4018,4020,4023,4025],{"class":125,"line":168},[123,4016,4017],{"class":129},"    cout",[123,4019,3643],{"class":133},[123,4021,4022],{"class":143},"'这是单行if语句'",[123,4024,3643],{"class":133},[123,4026,3665],{"class":129},[123,4028,4029],{"class":125,"line":268},[123,4030,171],{"class":129},[123,4032,4033],{"class":125,"line":291},[123,4034,4035],{"class":2673},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[123,4037,4038,4040,4042],{"class":125,"line":300},[123,4039,3893],{"class":129},[123,4041,3896],{"class":133},[123,4043,4044],{"class":129}," score\n",[123,4046,4047,4049,4051,4054,4056],{"class":125,"line":305},[123,4048,3998],{"class":133},[123,4050,4001],{"class":129},[123,4052,4053],{"class":133},"\u003C=",[123,4055,4006],{"class":164},[123,4057,288],{"class":129},[123,4059,4060],{"class":125,"line":316},[123,4061,186],{"class":129},[123,4063,4064,4066,4068,4071,4073],{"class":125,"line":673},[123,4065,4017],{"class":129},[123,4067,3896],{"class":133},[123,4069,4070],{"class":143},"\"小于等于600\"",[123,4072,3643],{"class":133},[123,4074,3665],{"class":129},[123,4076,4077],{"class":125,"line":692},[123,4078,171],{"class":129},[123,4080,4081],{"class":125,"line":713},[123,4082,4083],{"class":133},"else\n",[123,4085,4086],{"class":125,"line":718},[123,4087,186],{"class":129},[123,4089,4090,4092,4094,4097,4099],{"class":125,"line":1138},[123,4091,4017],{"class":129},[123,4093,3896],{"class":133},[123,4095,4096],{"class":143},"\"大于600\"",[123,4098,3896],{"class":133},[123,4100,3665],{"class":129},[123,4102,4103],{"class":125,"line":1429},[123,4104,171],{"class":129},[123,4106,4107],{"class":125,"line":1439},[123,4108,4109],{"class":2673},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[123,4111,4112,4114,4117,4119,4121,4124,4126,4128],{"class":125,"line":1444},[123,4113,3998],{"class":133},[123,4115,4116],{"class":129}," (",[123,4118,2799],{"class":164},[123,4120,3509],{"class":133},[123,4122,4123],{"class":129},"num",[123,4125,3509],{"class":133},[123,4127,259],{"class":164},[123,4129,288],{"class":129},[123,4131,4132],{"class":125,"line":1453},[123,4133,186],{"class":129},[123,4135,4136,4138,4140,4143,4145],{"class":125,"line":1458},[123,4137,4017],{"class":129},[123,4139,3643],{"class":133},[123,4141,4142],{"class":143},"\"小于100\"",[123,4144,3643],{"class":133},[123,4146,3665],{"class":129},[123,4148,4149],{"class":125,"line":1476},[123,4150,171],{"class":129},[123,4152,4153,4156,4159,4162,4165,4167,4170,4172,4174,4176],{"class":125,"line":1494},[123,4154,4155],{"class":133},"else",[123,4157,4158],{"class":133}," if",[123,4160,4161],{"class":129}," (nmu",[123,4163,4164],{"class":133},">=",[123,4166,259],{"class":164},[123,4168,4169],{"class":133},"&&",[123,4171,4123],{"class":129},[123,4173,3509],{"class":133},[123,4175,1045],{"class":164},[123,4177,288],{"class":129},[123,4179,4180],{"class":125,"line":1499},[123,4181,186],{"class":129},[123,4183,4184,4186,4188,4191,4193,4195],{"class":125,"line":1517},[123,4185,4017],{"class":129},[123,4187,3643],{"class":133},[123,4189,4190],{"class":143},"\"不小于100且小于200\"",[123,4192,3643],{"class":133},[123,4194,3708],{"class":129},[123,4196,4197],{"class":2673}," \u002F\u002F可以无限else if,python中是elif：\n",[123,4199,4200],{"class":125,"line":1534},[123,4201,171],{"class":129},[123,4203,4204],{"class":125,"line":1539},[123,4205,4083],{"class":133},[123,4207,4208],{"class":125,"line":2080},[123,4209,186],{"class":129},[123,4211,4212,4214,4216,4219,4221],{"class":125,"line":2097},[123,4213,4017],{"class":129},[123,4215,3643],{"class":133},[123,4217,4218],{"class":143},"\"不小于200\"",[123,4220,3643],{"class":133},[123,4222,3665],{"class":129},[123,4224,4225],{"class":125,"line":2114},[123,4226,171],{"class":129},[123,4228,4229],{"class":125,"line":2125},[123,4230,4231],{"class":2673},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,4233,4234],{"start":140},[29,4235,4236],{},"三目运算符",[113,4238,4240],{"className":2608,"code":4239,"language":2610,"meta":118,"style":118},"\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",[120,4241,4242,4247,4252,4278,4300,4317,4322,4345,4360],{"__ignoreMap":118},[123,4243,4244],{"class":125,"line":126},[123,4245,4246],{"class":2673},"\u002F\u002F创建三个变量a,b,c\n",[123,4248,4249],{"class":125,"line":140},[123,4250,4251],{"class":2673},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[123,4253,4254,4256,4258,4260,4262,4265,4267,4269,4272,4274,4276],{"class":125,"line":156},[123,4255,1742],{"class":133},[123,4257,3865],{"class":129},[123,4259,134],{"class":133},[123,4261,3302],{"class":164},[123,4263,4264],{"class":129},",b",[123,4266,134],{"class":133},[123,4268,2193],{"class":164},[123,4270,4271],{"class":129},",c",[123,4273,134],{"class":133},[123,4275,2799],{"class":164},[123,4277,3760],{"class":129},[123,4279,4280,4282,4284,4287,4289,4291,4293,4295,4297],{"class":125,"line":168},[123,4281,2896],{"class":129},[123,4283,134],{"class":133},[123,4285,4286],{"class":129},"(a",[123,4288,3559],{"class":133},[123,4290,2871],{"class":129},[123,4292,3585],{"class":133},[123,4294,2846],{"class":129},[123,4296,3460],{"class":133},[123,4298,4299],{"class":129},"b)\n",[123,4301,4302,4304,4306,4309,4311,4313,4315],{"class":125,"line":268},[123,4303,3836],{"class":129},[123,4305,3643],{"class":133},[123,4307,4308],{"class":143},"\"c=\"",[123,4310,3643],{"class":133},[123,4312,2896],{"class":129},[123,4314,3643],{"class":133},[123,4316,3665],{"class":129},[123,4318,4319],{"class":125,"line":291},[123,4320,4321],{"class":2673},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[123,4323,4324,4326,4328,4330,4332,4334,4336,4339,4341,4343],{"class":125,"line":300},[123,4325,4286],{"class":129},[123,4327,3559],{"class":133},[123,4329,2871],{"class":129},[123,4331,3585],{"class":133},[123,4333,2846],{"class":129},[123,4335,3460],{"class":133},[123,4337,4338],{"class":129},"b)",[123,4340,134],{"class":133},[123,4342,259],{"class":164},[123,4344,3760],{"class":129},[123,4346,4347,4349,4351,4353,4355,4357],{"class":125,"line":305},[123,4348,3836],{"class":129},[123,4350,3643],{"class":133},[123,4352,2846],{"class":129},[123,4354,3643],{"class":133},[123,4356,3708],{"class":129},[123,4358,4359],{"class":2673}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[123,4361,4362,4364,4366,4368,4370,4372],{"class":125,"line":316},[123,4363,3836],{"class":129},[123,4365,3643],{"class":133},[123,4367,2871],{"class":129},[123,4369,3643],{"class":133},[123,4371,3708],{"class":129},[123,4373,4374],{"class":2673}," \u002F\u002F10   a>b,b还是原值\n",[26,4376,4377],{"start":156},[29,4378,4379],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[113,4381,4383],{"className":2608,"code":4382,"language":2610,"meta":118,"style":118},"\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",[120,4384,4385,4390,4398,4411,4421,4425,4439,4452,4462,4470,4475,4500,4521,4543,4564,4586,4607,4627,4632],{"__ignoreMap":118},[123,4386,4387],{"class":125,"line":126},[123,4388,4389],{"class":2673},"\u002F\u002F案例-电影打分\n",[123,4391,4392,4395],{"class":125,"line":140},[123,4393,4394],{"class":133},"#include",[123,4396,4397],{"class":143},"\u003Ciostream>\n",[123,4399,4400,4403,4406,4409],{"class":125,"line":156},[123,4401,4402],{"class":133},"using",[123,4404,4405],{"class":133}," namespace",[123,4407,4408],{"class":337}," std",[123,4410,3760],{"class":129},[123,4412,4413,4415,4418],{"class":125,"line":168},[123,4414,1742],{"class":133},[123,4416,4417],{"class":337}," main",[123,4419,4420],{"class":129},"()\n",[123,4422,4423],{"class":125,"line":268},[123,4424,186],{"class":129},[123,4426,4427,4430,4433,4435,4437],{"class":125,"line":291},[123,4428,4429],{"class":133},"    int",[123,4431,4432],{"class":129}," score",[123,4434,134],{"class":133},[123,4436,2799],{"class":164},[123,4438,3760],{"class":129},[123,4440,4441,4443,4445,4448,4450],{"class":125,"line":300},[123,4442,4017],{"class":129},[123,4444,3643],{"class":133},[123,4446,4447],{"class":143},"\"电影打分：\"",[123,4449,3643],{"class":133},[123,4451,3665],{"class":129},[123,4453,4454,4457,4459],{"class":125,"line":305},[123,4455,4456],{"class":129},"    cin",[123,4458,3896],{"class":133},[123,4460,4461],{"class":129},"score;\n",[123,4463,4464,4467],{"class":125,"line":316},[123,4465,4466],{"class":133},"    switch",[123,4468,4469],{"class":129},"(score)\n",[123,4471,4472],{"class":125,"line":673},[123,4473,4474],{"class":129},"    {\n",[123,4476,4477,4480,4483,4486,4488,4491,4493,4495,4498],{"class":125,"line":692},[123,4478,4479],{"class":133},"        case",[123,4481,4482],{"class":164}," 10",[123,4484,4485],{"class":129},":cout",[123,4487,3643],{"class":133},[123,4489,4490],{"class":143},"\"经典\"",[123,4492,3643],{"class":133},[123,4494,3708],{"class":129},[123,4496,4497],{"class":133},"break",[123,4499,3760],{"class":129},[123,4501,4502,4504,4507,4509,4511,4513,4515,4517,4519],{"class":125,"line":713},[123,4503,4479],{"class":133},[123,4505,4506],{"class":164}," 9",[123,4508,4485],{"class":129},[123,4510,3643],{"class":133},[123,4512,4490],{"class":143},[123,4514,3643],{"class":133},[123,4516,3708],{"class":129},[123,4518,4497],{"class":133},[123,4520,3760],{"class":129},[123,4522,4523,4525,4528,4530,4532,4535,4537,4539,4541],{"class":125,"line":718},[123,4524,4479],{"class":133},[123,4526,4527],{"class":164}," 8",[123,4529,4485],{"class":129},[123,4531,3643],{"class":133},[123,4533,4534],{"class":143},"\"非常好\"",[123,4536,3643],{"class":133},[123,4538,3708],{"class":129},[123,4540,4497],{"class":133},[123,4542,3760],{"class":129},[123,4544,4545,4547,4550,4552,4554,4556,4558,4560,4562],{"class":125,"line":1138},[123,4546,4479],{"class":133},[123,4548,4549],{"class":164}," 7",[123,4551,4485],{"class":129},[123,4553,3643],{"class":133},[123,4555,4534],{"class":143},[123,4557,3643],{"class":133},[123,4559,3708],{"class":129},[123,4561,4497],{"class":133},[123,4563,3760],{"class":129},[123,4565,4566,4568,4571,4573,4575,4578,4580,4582,4584],{"class":125,"line":1429},[123,4567,4479],{"class":133},[123,4569,4570],{"class":164}," 6",[123,4572,4485],{"class":129},[123,4574,3643],{"class":133},[123,4576,4577],{"class":143},"\"一般\"",[123,4579,3643],{"class":133},[123,4581,3708],{"class":129},[123,4583,4497],{"class":133},[123,4585,3760],{"class":129},[123,4587,4588,4590,4593,4595,4597,4599,4601,4603,4605],{"class":125,"line":1439},[123,4589,4479],{"class":133},[123,4591,4592],{"class":164}," 5",[123,4594,4485],{"class":129},[123,4596,3643],{"class":133},[123,4598,4577],{"class":143},[123,4600,3643],{"class":133},[123,4602,3708],{"class":129},[123,4604,4497],{"class":133},[123,4606,3760],{"class":129},[123,4608,4609,4612,4614,4616,4619,4621,4623,4625],{"class":125,"line":1444},[123,4610,4611],{"class":133},"        default",[123,4613,4485],{"class":129},[123,4615,3643],{"class":133},[123,4617,4618],{"class":143},"\"烂片\"",[123,4620,3643],{"class":133},[123,4622,3708],{"class":129},[123,4624,4497],{"class":133},[123,4626,3760],{"class":129},[123,4628,4629],{"class":125,"line":1453},[123,4630,4631],{"class":129},"    }\n",[123,4633,4634],{"class":125,"line":1458},[123,4635,171],{"class":129},[19,4637,4638],{},"if和switch区别：",[3606,4640,4641,4644],{},[29,4642,4643],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,4645,4646],{},"switch优点：结构清晰，执行效率高",[2587,4648,4650],{"id":4649},"_162循环结构","1.6.2循环结构",[26,4652,4653],{},[29,4654,4655],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[113,4657,4659],{"className":2608,"code":4658,"language":2610,"meta":118,"style":118},"\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",[120,4660,4661,4666,4674,4678,4691,4705,4709,4729,4739,4743,4755],{"__ignoreMap":118},[123,4662,4663],{"class":125,"line":126},[123,4664,4665],{"class":2673},"\u002F\u002F打印0-9数字\n",[123,4667,4668,4670,4672],{"class":125,"line":140},[123,4669,1742],{"class":133},[123,4671,4417],{"class":337},[123,4673,4420],{"class":129},[123,4675,4676],{"class":125,"line":156},[123,4677,186],{"class":129},[123,4679,4680,4682,4685,4687,4689],{"class":125,"line":168},[123,4681,4429],{"class":133},[123,4683,4684],{"class":129}," num",[123,4686,134],{"class":133},[123,4688,2799],{"class":164},[123,4690,3760],{"class":129},[123,4692,4693,4696,4699,4701,4703],{"class":125,"line":268},[123,4694,4695],{"class":133},"    while",[123,4697,4698],{"class":129},"(num",[123,4700,3509],{"class":133},[123,4702,2193],{"class":164},[123,4704,288],{"class":129},[123,4706,4707],{"class":125,"line":291},[123,4708,4474],{"class":129},[123,4710,4711,4714,4717,4719,4721,4723,4726],{"class":125,"line":300},[123,4712,4713],{"class":337},"       std",[123,4715,4716],{"class":129},"::cout",[123,4718,3643],{"class":133},[123,4720,4123],{"class":129},[123,4722,3643],{"class":133},[123,4724,4725],{"class":337},"std",[123,4727,4728],{"class":129},"::endl;\n",[123,4730,4731,4734,4737],{"class":125,"line":305},[123,4732,4733],{"class":129},"        num",[123,4735,4736],{"class":133},"++",[123,4738,3760],{"class":129},[123,4740,4741],{"class":125,"line":316},[123,4742,4631],{"class":129},[123,4744,4745,4748,4750,4753],{"class":125,"line":673},[123,4746,4747],{"class":337},"    system",[123,4749,1315],{"class":129},[123,4751,4752],{"class":143},"\"pause\"",[123,4754,288],{"class":129},[123,4756,4757],{"class":125,"line":692},[123,4758,171],{"class":129},[19,4760,4761],{},"注意：写好循环条件，避免死循环情况",[113,4763,4765],{"className":2608,"code":4764,"language":2610,"meta":118,"style":118},"\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",[120,4766,4767,4772,4779,4786,4796,4804,4808,4813,4840,4844,4849,4857,4884,4889,4894,4907,4917,4921,4931,4936,4949,4954,4968,4973,4988,4992,5005,5009,5014,5018,5031,5039,5044,5050,5056,5061],{"__ignoreMap":118},[123,4768,4769],{"class":125,"line":126},[123,4770,4771],{"class":2673},"\u002F\u002F循环结构-猜数字\n",[123,4773,4774,4776],{"class":125,"line":140},[123,4775,4394],{"class":133},[123,4777,4778],{"class":143}," \u003Ciostream>\n",[123,4780,4781,4783],{"class":125,"line":156},[123,4782,4394],{"class":133},[123,4784,4785],{"class":143}," \u003Cctime>\n",[123,4787,4788,4790,4792,4794],{"class":125,"line":168},[123,4789,4402],{"class":133},[123,4791,4405],{"class":133},[123,4793,4408],{"class":337},[123,4795,3760],{"class":129},[123,4797,4798,4800,4802],{"class":125,"line":268},[123,4799,1742],{"class":133},[123,4801,4417],{"class":337},[123,4803,4420],{"class":129},[123,4805,4806],{"class":125,"line":291},[123,4807,186],{"class":129},[123,4809,4810],{"class":125,"line":300},[123,4811,4812],{"class":2673},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[123,4814,4815,4818,4821,4824,4827,4829,4832,4834,4837],{"class":125,"line":305},[123,4816,4817],{"class":337},"    srand",[123,4819,4820],{"class":129},"((",[123,4822,4823],{"class":133},"unsigned",[123,4825,4826],{"class":133}," int",[123,4828,3035],{"class":129},[123,4830,4831],{"class":337},"time",[123,4833,1315],{"class":129},[123,4835,4836],{"class":164},"NULL",[123,4838,4839],{"class":129},"));\n",[123,4841,4842],{"class":125,"line":316},[123,4843,232],{"emptyLinePlaceholder":231},[123,4845,4846],{"class":125,"line":673},[123,4847,4848],{"class":2673},"    \u002F\u002F1.系统生成随机数\n",[123,4850,4851,4854],{"class":125,"line":692},[123,4852,4853],{"class":2673},"    \u002F\u002Frand()%100",[123,4855,4856],{"class":2673}," \u002F\u002F生成0-99的随机数\n",[123,4858,4859,4861,4863,4865,4868,4871,4873,4875,4877,4879,4881],{"class":125,"line":713},[123,4860,4429],{"class":133},[123,4862,4684],{"class":129},[123,4864,134],{"class":133},[123,4866,4867],{"class":337},"rand",[123,4869,4870],{"class":129},"()",[123,4872,2935],{"class":133},[123,4874,259],{"class":164},[123,4876,3086],{"class":133},[123,4878,2825],{"class":164},[123,4880,2670],{"class":129},[123,4882,4883],{"class":2673}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[123,4885,4886],{"class":125,"line":718},[123,4887,4888],{"class":2673},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[123,4890,4891],{"class":125,"line":1138},[123,4892,4893],{"class":2673},"    \u002F\u002F2.玩家猜测\n",[123,4895,4896,4898,4901,4903,4905],{"class":125,"line":1429},[123,4897,4429],{"class":133},[123,4899,4900],{"class":129}," val",[123,4902,134],{"class":133},[123,4904,2799],{"class":164},[123,4906,3760],{"class":129},[123,4908,4909,4911,4913,4915],{"class":125,"line":1439},[123,4910,4695],{"class":133},[123,4912,4116],{"class":129},[123,4914,2825],{"class":164},[123,4916,288],{"class":129},[123,4918,4919],{"class":125,"line":1444},[123,4920,4474],{"class":129},[123,4922,4923,4926,4928],{"class":125,"line":1453},[123,4924,4925],{"class":129},"        cin",[123,4927,3896],{"class":133},[123,4929,4930],{"class":129},"val;\n",[123,4932,4933],{"class":125,"line":1458},[123,4934,4935],{"class":2673},"        \u002F\u002F3.判断玩家猜测\n",[123,4937,4938,4941,4944,4946],{"class":125,"line":1476},[123,4939,4940],{"class":133},"        if",[123,4942,4943],{"class":129},"(val",[123,4945,3509],{"class":133},[123,4947,4948],{"class":129},"num) \n",[123,4950,4951],{"class":125,"line":1494},[123,4952,4953],{"class":129},"        {\n",[123,4955,4956,4959,4961,4964,4966],{"class":125,"line":1499},[123,4957,4958],{"class":129},"            cout",[123,4960,3643],{"class":133},[123,4962,4963],{"class":143},"\"猜小了！\"",[123,4965,3643],{"class":133},[123,4967,3665],{"class":129},[123,4969,4970],{"class":125,"line":1517},[123,4971,4972],{"class":129},"        }\n",[123,4974,4975,4978,4980,4983,4985],{"class":125,"line":1534},[123,4976,4977],{"class":133},"        else",[123,4979,4158],{"class":133},[123,4981,4982],{"class":129}," (val",[123,4984,3559],{"class":133},[123,4986,4987],{"class":129},"num)\n",[123,4989,4990],{"class":125,"line":1539},[123,4991,4953],{"class":129},[123,4993,4994,4996,4998,5001,5003],{"class":125,"line":2080},[123,4995,4958],{"class":129},[123,4997,3643],{"class":133},[123,4999,5000],{"class":143},"\"猜大了！\"",[123,5002,3643],{"class":133},[123,5004,3665],{"class":129},[123,5006,5007],{"class":125,"line":2097},[123,5008,4972],{"class":129},[123,5010,5011],{"class":125,"line":2114},[123,5012,5013],{"class":133},"        else\n",[123,5015,5016],{"class":125,"line":2125},[123,5017,4953],{"class":129},[123,5019,5020,5022,5024,5027,5029],{"class":125,"line":2130},[123,5021,4958],{"class":129},[123,5023,3643],{"class":133},[123,5025,5026],{"class":143},"\"猜对了！\"",[123,5028,3643],{"class":133},[123,5030,3665],{"class":129},[123,5032,5034,5037],{"class":125,"line":5033},31,[123,5035,5036],{"class":133},"            break",[123,5038,3760],{"class":129},[123,5040,5042],{"class":125,"line":5041},32,[123,5043,4972],{"class":129},[123,5045,5047],{"class":125,"line":5046},33,[123,5048,5049],{"class":2673},"        \u002F\u002F猜对 退出游戏\n",[123,5051,5053],{"class":125,"line":5052},34,[123,5054,5055],{"class":2673},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[123,5057,5059],{"class":125,"line":5058},35,[123,5060,4631],{"class":129},[123,5062,5064],{"class":125,"line":5063},36,[123,5065,171],{"class":129},[26,5067,5068],{"start":140},[29,5069,5070,5071,5074],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2759,5072,5073],{},"do...while会先执行一次循环语句","，在判断循环语句",[113,5076,5078],{"className":2608,"code":5077,"language":2610,"meta":118,"style":118},"\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",[120,5079,5080,5085,5093,5097,5109,5117,5121,5138,5145,5149,5162,5172],{"__ignoreMap":118},[123,5081,5082],{"class":125,"line":126},[123,5083,5084],{"class":2673},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[123,5086,5087,5089,5091],{"class":125,"line":140},[123,5088,1742],{"class":133},[123,5090,4417],{"class":337},[123,5092,4420],{"class":129},[123,5094,5095],{"class":125,"line":156},[123,5096,186],{"class":129},[123,5098,5099,5101,5103,5105,5107],{"class":125,"line":168},[123,5100,4429],{"class":133},[123,5102,4684],{"class":129},[123,5104,134],{"class":133},[123,5106,2799],{"class":164},[123,5108,3760],{"class":129},[123,5110,5111,5114],{"class":125,"line":268},[123,5112,5113],{"class":133},"    do",[123,5115,5116],{"class":129}," \n",[123,5118,5119],{"class":125,"line":291},[123,5120,4474],{"class":129},[123,5122,5123,5126,5128,5130,5132,5134,5136],{"class":125,"line":300},[123,5124,5125],{"class":337},"        std",[123,5127,4716],{"class":129},[123,5129,3643],{"class":133},[123,5131,4123],{"class":129},[123,5133,3643],{"class":133},[123,5135,4725],{"class":337},[123,5137,4728],{"class":129},[123,5139,5140,5142],{"class":125,"line":305},[123,5141,4733],{"class":129},[123,5143,5144],{"class":133},"++\n",[123,5146,5147],{"class":125,"line":316},[123,5148,4631],{"class":129},[123,5150,5151,5153,5155,5157,5159],{"class":125,"line":673},[123,5152,4695],{"class":133},[123,5154,4698],{"class":129},[123,5156,3509],{"class":133},[123,5158,2193],{"class":164},[123,5160,5161],{"class":129},");\n",[123,5163,5164,5166,5168,5170],{"class":125,"line":692},[123,5165,4747],{"class":337},[123,5167,1315],{"class":129},[123,5169,4752],{"class":143},[123,5171,5161],{"class":129},[123,5173,5174],{"class":125,"line":713},[123,5175,171],{"class":129},[19,5177,5178],{},"案例-水仙花数",[19,5180,5181],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,5183,5184],{},"例如：1^3+5^3+3^3=153",[19,5186,5187],{},"请用do...while语句，求出所有3位数的水仙花数",[113,5189,5191],{"className":2608,"code":5190,"language":2610,"meta":118,"style":118},"#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",[120,5192,5193,5199,5209,5217,5221,5226,5238,5244,5248,5253,5269,5285,5301,5316,5335,5350,5398,5402,5414,5418,5426,5430,5444],{"__ignoreMap":118},[123,5194,5195,5197],{"class":125,"line":126},[123,5196,4394],{"class":133},[123,5198,4778],{"class":143},[123,5200,5201,5203,5205,5207],{"class":125,"line":140},[123,5202,4402],{"class":133},[123,5204,4405],{"class":133},[123,5206,4408],{"class":337},[123,5208,3760],{"class":129},[123,5210,5211,5213,5215],{"class":125,"line":156},[123,5212,1742],{"class":133},[123,5214,4417],{"class":337},[123,5216,4420],{"class":129},[123,5218,5219],{"class":125,"line":168},[123,5220,186],{"class":129},[123,5222,5223],{"class":125,"line":268},[123,5224,5225],{"class":2673},"    \u002F\u002F1.先打印所有三位数字\n",[123,5227,5228,5230,5232,5234,5236],{"class":125,"line":291},[123,5229,4429],{"class":133},[123,5231,4684],{"class":129},[123,5233,134],{"class":133},[123,5235,259],{"class":164},[123,5237,3760],{"class":129},[123,5239,5240,5242],{"class":125,"line":300},[123,5241,5113],{"class":133},[123,5243,5116],{"class":129},[123,5245,5246],{"class":125,"line":305},[123,5247,4474],{"class":129},[123,5249,5250],{"class":125,"line":316},[123,5251,5252],{"class":2673},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[123,5254,5255,5258,5260,5262,5264,5266],{"class":125,"line":673},[123,5256,5257],{"class":133},"        int",[123,5259,3865],{"class":129},[123,5261,134],{"class":133},[123,5263,2799],{"class":164},[123,5265,2670],{"class":129},[123,5267,5268],{"class":2673}," \u002F\u002F个位\n",[123,5270,5271,5273,5276,5278,5280,5282],{"class":125,"line":692},[123,5272,5257],{"class":133},[123,5274,5275],{"class":129}," b",[123,5277,134],{"class":133},[123,5279,2799],{"class":164},[123,5281,2670],{"class":129},[123,5283,5284],{"class":2673}," \u002F\u002F十位\n",[123,5286,5287,5289,5292,5294,5296,5298],{"class":125,"line":713},[123,5288,5257],{"class":133},[123,5290,5291],{"class":129}," c",[123,5293,134],{"class":133},[123,5295,2799],{"class":164},[123,5297,2670],{"class":129},[123,5299,5300],{"class":2673}," \u002F\u002F百位\n",[123,5302,5303,5306,5308,5310,5312,5314],{"class":125,"line":718},[123,5304,5305],{"class":129},"        a",[123,5307,134],{"class":133},[123,5309,4123],{"class":129},[123,5311,2935],{"class":133},[123,5313,2193],{"class":164},[123,5315,3760],{"class":129},[123,5317,5318,5321,5323,5325,5327,5329,5331,5333],{"class":125,"line":1138},[123,5319,5320],{"class":129},"        b",[123,5322,134],{"class":133},[123,5324,4123],{"class":129},[123,5326,3187],{"class":133},[123,5328,2193],{"class":164},[123,5330,2935],{"class":133},[123,5332,2193],{"class":164},[123,5334,3760],{"class":129},[123,5336,5337,5340,5342,5344,5346,5348],{"class":125,"line":1429},[123,5338,5339],{"class":129},"        c",[123,5341,134],{"class":133},[123,5343,4123],{"class":129},[123,5345,3187],{"class":133},[123,5347,259],{"class":164},[123,5349,3760],{"class":129},[123,5351,5352,5354,5356,5358,5360,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380,5382,5384,5386,5389,5392,5395],{"class":125,"line":1439},[123,5353,4940],{"class":133},[123,5355,4286],{"class":129},[123,5357,3060],{"class":133},[123,5359,2846],{"class":129},[123,5361,3060],{"class":133},[123,5363,2846],{"class":129},[123,5365,3086],{"class":133},[123,5367,2871],{"class":129},[123,5369,3060],{"class":133},[123,5371,2871],{"class":129},[123,5373,3060],{"class":133},[123,5375,2871],{"class":129},[123,5377,3086],{"class":133},[123,5379,2896],{"class":129},[123,5381,3060],{"class":133},[123,5383,2896],{"class":129},[123,5385,3060],{"class":133},[123,5387,5388],{"class":129},"c ",[123,5390,5391],{"class":133},"==",[123,5393,5394],{"class":129}," num)",[123,5396,5397],{"class":2673}," \u002F\u002F如果是水仙花数，才打印\n",[123,5399,5400],{"class":125,"line":1444},[123,5401,4953],{"class":129},[123,5403,5404,5406,5408,5410,5412],{"class":125,"line":1453},[123,5405,4958],{"class":129},[123,5407,3643],{"class":133},[123,5409,4123],{"class":129},[123,5411,3643],{"class":133},[123,5413,3665],{"class":129},[123,5415,5416],{"class":125,"line":1458},[123,5417,4972],{"class":129},[123,5419,5420,5422,5424],{"class":125,"line":1476},[123,5421,4733],{"class":129},[123,5423,4736],{"class":133},[123,5425,3760],{"class":129},[123,5427,5428],{"class":125,"line":1494},[123,5429,4631],{"class":129},[123,5431,5432,5434,5437,5439,5442],{"class":125,"line":1499},[123,5433,4695],{"class":133},[123,5435,5436],{"class":129}," (num ",[123,5438,3509],{"class":133},[123,5440,5441],{"class":164}," 1000",[123,5443,5161],{"class":129},[123,5445,5446],{"class":125,"line":1517},[123,5447,171],{"class":129},[26,5449,5450],{"start":156},[29,5451,5452],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[113,5454,5456],{"className":2608,"code":5455,"language":2610,"meta":118,"style":118},"\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",[120,5457,5458,5463,5491,5495,5507,5511,5516,5527,5534,5538,5551,5555,5562,5566,5578,5587],{"__ignoreMap":118},[123,5459,5460],{"class":125,"line":126},[123,5461,5462],{"class":2673},"\u002F\u002F从数字0-9打印\n",[123,5464,5465,5467,5469,5471,5474,5476,5478,5481,5483,5485,5487,5489],{"class":125,"line":140},[123,5466,1399],{"class":133},[123,5468,1315],{"class":129},[123,5470,1742],{"class":133},[123,5472,5473],{"class":129}," i",[123,5475,134],{"class":133},[123,5477,2799],{"class":164},[123,5479,5480],{"class":129},";i",[123,5482,3509],{"class":133},[123,5484,2193],{"class":164},[123,5486,5480],{"class":129},[123,5488,4736],{"class":133},[123,5490,288],{"class":129},[123,5492,5493],{"class":125,"line":156},[123,5494,186],{"class":129},[123,5496,5497,5499,5501,5503,5505],{"class":125,"line":168},[123,5498,4017],{"class":129},[123,5500,3643],{"class":133},[123,5502,3047],{"class":129},[123,5504,3643],{"class":133},[123,5506,3665],{"class":129},[123,5508,5509],{"class":125,"line":268},[123,5510,171],{"class":129},[123,5512,5513],{"class":125,"line":291},[123,5514,5515],{"class":2673},"\u002F\u002F上式可以进行拆分\n",[123,5517,5518,5520,5522,5524],{"class":125,"line":300},[123,5519,1742],{"class":133},[123,5521,5473],{"class":129},[123,5523,134],{"class":133},[123,5525,5526],{"class":164},"0\n",[123,5528,5529,5531],{"class":125,"line":305},[123,5530,1399],{"class":133},[123,5532,5533],{"class":129},"(;;;)\n",[123,5535,5536],{"class":125,"line":316},[123,5537,186],{"class":129},[123,5539,5540,5542,5545,5547,5549],{"class":125,"line":673},[123,5541,1711],{"class":133},[123,5543,5544],{"class":129},"(i",[123,5546,4164],{"class":133},[123,5548,2193],{"class":164},[123,5550,288],{"class":129},[123,5552,5553],{"class":125,"line":692},[123,5554,4474],{"class":129},[123,5556,5557,5560],{"class":125,"line":713},[123,5558,5559],{"class":133},"        break",[123,5561,3760],{"class":129},[123,5563,5564],{"class":125,"line":718},[123,5565,4631],{"class":129},[123,5567,5568,5570,5572,5574,5576],{"class":125,"line":1138},[123,5569,4017],{"class":129},[123,5571,3643],{"class":133},[123,5573,3047],{"class":129},[123,5575,3643],{"class":133},[123,5577,3665],{"class":129},[123,5579,5580,5583,5585],{"class":125,"line":1429},[123,5581,5582],{"class":129},"    i",[123,5584,4736],{"class":133},[123,5586,3760],{"class":129},[123,5588,5589],{"class":125,"line":1439},[123,5590,171],{"class":129},[19,5592,5593],{},"小练习",[113,5595,5597],{"className":2608,"code":5596,"language":2610,"meta":118,"style":118},"#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",[120,5598,5599,5605,5615,5623,5627,5632,5637,5665,5669,5674,5679,5720,5724,5737,5741,5745,5749,5761,5765,5769],{"__ignoreMap":118},[123,5600,5601,5603],{"class":125,"line":126},[123,5602,4394],{"class":133},[123,5604,4397],{"class":143},[123,5606,5607,5609,5611,5613],{"class":125,"line":140},[123,5608,4402],{"class":133},[123,5610,4405],{"class":133},[123,5612,4408],{"class":337},[123,5614,3760],{"class":129},[123,5616,5617,5619,5621],{"class":125,"line":156},[123,5618,1742],{"class":133},[123,5620,4417],{"class":337},[123,5622,4420],{"class":129},[123,5624,5625],{"class":125,"line":168},[123,5626,186],{"class":129},[123,5628,5629],{"class":125,"line":268},[123,5630,5631],{"class":2673},"    \u002F\u002F敲桌子案例\n",[123,5633,5634],{"class":125,"line":291},[123,5635,5636],{"class":2673},"    \u002F\u002F1.先输出1-100的数字\n",[123,5638,5639,5642,5644,5646,5648,5650,5652,5655,5657,5659,5661,5663],{"class":125,"line":300},[123,5640,5641],{"class":133},"    for",[123,5643,1315],{"class":129},[123,5645,1742],{"class":133},[123,5647,5473],{"class":129},[123,5649,134],{"class":133},[123,5651,2825],{"class":164},[123,5653,5654],{"class":129},"; i",[123,5656,4053],{"class":133},[123,5658,259],{"class":164},[123,5660,5654],{"class":129},[123,5662,4736],{"class":133},[123,5664,288],{"class":129},[123,5666,5667],{"class":125,"line":305},[123,5668,4474],{"class":129},[123,5670,5671],{"class":125,"line":316},[123,5672,5673],{"class":2673},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[123,5675,5676],{"class":125,"line":673},[123,5677,5678],{"class":2673},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[123,5680,5681,5683,5685,5687,5689,5691,5693,5696,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718],{"class":125,"line":692},[123,5682,4940],{"class":133},[123,5684,5544],{"class":129},[123,5686,2935],{"class":133},[123,5688,2976],{"class":164},[123,5690,5391],{"class":133},[123,5692,2799],{"class":164},[123,5694,5695],{"class":133}," ||",[123,5697,5473],{"class":129},[123,5699,2935],{"class":133},[123,5701,2193],{"class":164},[123,5703,5391],{"class":133},[123,5705,2976],{"class":164},[123,5707,5695],{"class":133},[123,5709,5473],{"class":129},[123,5711,3187],{"class":133},[123,5713,2193],{"class":164},[123,5715,5391],{"class":133},[123,5717,2976],{"class":164},[123,5719,288],{"class":129},[123,5721,5722],{"class":125,"line":713},[123,5723,4953],{"class":129},[123,5725,5726,5728,5730,5733,5735],{"class":125,"line":718},[123,5727,4958],{"class":129},[123,5729,3643],{"class":133},[123,5731,5732],{"class":143},"\"敲桌子\"",[123,5734,3643],{"class":133},[123,5736,3665],{"class":129},[123,5738,5739],{"class":125,"line":1138},[123,5740,4972],{"class":129},[123,5742,5743],{"class":125,"line":1429},[123,5744,5013],{"class":133},[123,5746,5747],{"class":125,"line":1439},[123,5748,4953],{"class":129},[123,5750,5751,5753,5755,5757,5759],{"class":125,"line":1444},[123,5752,4958],{"class":129},[123,5754,3643],{"class":133},[123,5756,3047],{"class":129},[123,5758,3643],{"class":133},[123,5760,3665],{"class":129},[123,5762,5763],{"class":125,"line":1453},[123,5764,4972],{"class":129},[123,5766,5767],{"class":125,"line":1458},[123,5768,4631],{"class":129},[123,5770,5771],{"class":125,"line":1476},[123,5772,171],{"class":129},[19,5774,5775],{},"嵌套实现星图",[113,5777,5779],{"className":2608,"code":5778,"language":2610,"meta":118,"style":118},"#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",[120,5780,5781,5787,5797,5805,5809,5835,5839,5868,5872,5883,5887,5896,5900],{"__ignoreMap":118},[123,5782,5783,5785],{"class":125,"line":126},[123,5784,4394],{"class":133},[123,5786,4397],{"class":143},[123,5788,5789,5791,5793,5795],{"class":125,"line":140},[123,5790,4402],{"class":133},[123,5792,4405],{"class":133},[123,5794,4408],{"class":337},[123,5796,3760],{"class":129},[123,5798,5799,5801,5803],{"class":125,"line":156},[123,5800,1742],{"class":133},[123,5802,4417],{"class":337},[123,5804,4420],{"class":129},[123,5806,5807],{"class":125,"line":168},[123,5808,186],{"class":129},[123,5810,5811,5813,5815,5817,5819,5821,5823,5825,5827,5829,5831,5833],{"class":125,"line":268},[123,5812,5641],{"class":133},[123,5814,4116],{"class":129},[123,5816,1742],{"class":133},[123,5818,5473],{"class":129},[123,5820,134],{"class":133},[123,5822,2799],{"class":164},[123,5824,5480],{"class":129},[123,5826,3509],{"class":133},[123,5828,2193],{"class":164},[123,5830,5480],{"class":129},[123,5832,4736],{"class":133},[123,5834,288],{"class":129},[123,5836,5837],{"class":125,"line":291},[123,5838,4474],{"class":129},[123,5840,5841,5844,5846,5848,5851,5853,5855,5858,5860,5862,5864,5866],{"class":125,"line":300},[123,5842,5843],{"class":133},"        for",[123,5845,4116],{"class":129},[123,5847,1742],{"class":133},[123,5849,5850],{"class":129}," j",[123,5852,134],{"class":133},[123,5854,2799],{"class":164},[123,5856,5857],{"class":129},";j",[123,5859,3509],{"class":133},[123,5861,2193],{"class":164},[123,5863,5857],{"class":129},[123,5865,4736],{"class":133},[123,5867,288],{"class":129},[123,5869,5870],{"class":125,"line":305},[123,5871,4953],{"class":129},[123,5873,5874,5876,5878,5881],{"class":125,"line":316},[123,5875,4958],{"class":129},[123,5877,3643],{"class":133},[123,5879,5880],{"class":143},"\"*\"",[123,5882,3760],{"class":129},[123,5884,5885],{"class":125,"line":673},[123,5886,4972],{"class":129},[123,5888,5889,5892,5894],{"class":125,"line":692},[123,5890,5891],{"class":129},"        cout",[123,5893,3643],{"class":133},[123,5895,3665],{"class":129},[123,5897,5898],{"class":125,"line":713},[123,5899,4631],{"class":129},[123,5901,5902],{"class":125,"line":718},[123,5903,171],{"class":129},[19,5905,5906],{},"乘法口诀表",[113,5908,5910],{"className":2608,"code":5909,"language":2610,"meta":118,"style":118},"#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",[120,5911,5912,5918,5928,5936,5940,5966,5970,5995,5999,6039,6043,6051,6055],{"__ignoreMap":118},[123,5913,5914,5916],{"class":125,"line":126},[123,5915,4394],{"class":133},[123,5917,4778],{"class":143},[123,5919,5920,5922,5924,5926],{"class":125,"line":140},[123,5921,4402],{"class":133},[123,5923,4405],{"class":133},[123,5925,4408],{"class":337},[123,5927,3760],{"class":129},[123,5929,5930,5932,5934],{"class":125,"line":156},[123,5931,1742],{"class":133},[123,5933,4417],{"class":337},[123,5935,4420],{"class":129},[123,5937,5938],{"class":125,"line":168},[123,5939,186],{"class":129},[123,5941,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964],{"class":125,"line":268},[123,5943,5641],{"class":133},[123,5945,1315],{"class":129},[123,5947,1742],{"class":133},[123,5949,5473],{"class":129},[123,5951,134],{"class":133},[123,5953,2825],{"class":164},[123,5955,5480],{"class":129},[123,5957,3509],{"class":133},[123,5959,2193],{"class":164},[123,5961,5480],{"class":129},[123,5963,4736],{"class":133},[123,5965,288],{"class":129},[123,5967,5968],{"class":125,"line":291},[123,5969,4474],{"class":129},[123,5971,5972,5974,5976,5978,5980,5982,5984,5986,5988,5991,5993],{"class":125,"line":300},[123,5973,5843],{"class":133},[123,5975,1315],{"class":129},[123,5977,1742],{"class":133},[123,5979,5850],{"class":129},[123,5981,134],{"class":133},[123,5983,2825],{"class":164},[123,5985,5857],{"class":129},[123,5987,4053],{"class":133},[123,5989,5990],{"class":129},"i;j",[123,5992,4736],{"class":133},[123,5994,288],{"class":129},[123,5996,5997],{"class":125,"line":305},[123,5998,4953],{"class":129},[123,6000,6001,6003,6005,6007,6009,6011,6013,6015,6017,6020,6022,6024,6026,6028,6030,6033,6035,6037],{"class":125,"line":316},[123,6002,4958],{"class":129},[123,6004,3643],{"class":133},[123,6006,3072],{"class":129},[123,6008,3643],{"class":133},[123,6010,5880],{"class":143},[123,6012,3643],{"class":133},[123,6014,3047],{"class":129},[123,6016,3643],{"class":133},[123,6018,6019],{"class":143},"\"=\"",[123,6021,3643],{"class":133},[123,6023,3047],{"class":129},[123,6025,3060],{"class":133},[123,6027,3072],{"class":129},[123,6029,3643],{"class":133},[123,6031,6032],{"class":143},"'",[123,6034,3700],{"class":164},[123,6036,6032],{"class":143},[123,6038,3760],{"class":129},[123,6040,6041],{"class":125,"line":673},[123,6042,4972],{"class":129},[123,6044,6045,6047,6049],{"class":125,"line":692},[123,6046,5891],{"class":129},[123,6048,3643],{"class":133},[123,6050,3665],{"class":129},[123,6052,6053],{"class":125,"line":713},[123,6054,4631],{"class":129},[123,6056,6057],{"class":125,"line":718},[123,6058,171],{"class":129},[2587,6060,6062],{"id":6061},"_163跳出语句","1.6.3跳出语句",[26,6064,6065],{},[29,6066,6067],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,6069,6070],{},"break使用时机：",[3606,6072,6073,6076,6079],{},[29,6074,6075],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,6077,6078],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,6080,6081],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,6083,6084,6087],{"start":140},[29,6085,6086],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,6088,6089],{},"goto语句\n语法：goto 标记;",[19,6091,6092],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[113,6094,6096],{"className":2608,"code":6095,"language":2610,"meta":118,"style":118},"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",[120,6097,6098,6106,6110,6123,6133,6146,6159,6172,6179,6195],{"__ignoreMap":118},[123,6099,6100,6102,6104],{"class":125,"line":126},[123,6101,1742],{"class":133},[123,6103,4417],{"class":337},[123,6105,4420],{"class":129},[123,6107,6108],{"class":125,"line":140},[123,6109,186],{"class":129},[123,6111,6112,6114,6116,6119,6121],{"class":125,"line":156},[123,6113,4017],{"class":129},[123,6115,3643],{"class":133},[123,6117,6118],{"class":143},"\"1\"",[123,6120,3643],{"class":133},[123,6122,3665],{"class":129},[123,6124,6125,6128,6131],{"class":125,"line":168},[123,6126,6127],{"class":133},"    goto",[123,6129,6130],{"class":337}," FLAG",[123,6132,3760],{"class":129},[123,6134,6135,6137,6139,6142,6144],{"class":125,"line":268},[123,6136,4017],{"class":129},[123,6138,3643],{"class":133},[123,6140,6141],{"class":143},"\"2\"",[123,6143,3643],{"class":133},[123,6145,3665],{"class":129},[123,6147,6148,6150,6152,6155,6157],{"class":125,"line":291},[123,6149,4017],{"class":129},[123,6151,3643],{"class":133},[123,6153,6154],{"class":143},"\"3\"",[123,6156,3643],{"class":133},[123,6158,3665],{"class":129},[123,6160,6161,6163,6165,6168,6170],{"class":125,"line":300},[123,6162,4017],{"class":129},[123,6164,3643],{"class":133},[123,6166,6167],{"class":143},"\"4\"",[123,6169,3643],{"class":133},[123,6171,3665],{"class":129},[123,6173,6174,6177],{"class":125,"line":305},[123,6175,6176],{"class":337},"    FLAG",[123,6178,1344],{"class":129},[123,6180,6181,6183,6185,6188,6190,6192],{"class":125,"line":316},[123,6182,4017],{"class":129},[123,6184,3643],{"class":133},[123,6186,6187],{"class":143},"\"5\"",[123,6189,3643],{"class":133},[123,6191,3708],{"class":129},[123,6193,6194],{"class":2673},"\u002F\u002F跳过了2,3,4,直接到5\n",[123,6196,6197],{"class":125,"line":673},[123,6198,171],{"class":129},[14,6200,6202],{"id":6201},"_17数组","1.7数组",[2587,6204,6206],{"id":6205},"_171一维数组","1.7.1一维数组",[26,6208,6209],{},[29,6210,6211],{},"一维数组定义方式",[48,6213,6214,6224],{},[51,6215,6216],{},[54,6217,6218,6221],{},[57,6219,6220],{},"方式",[57,6222,6223],{},"注意事项",[64,6225,6226,6240,6250],{},[54,6227,6228,6234],{},[69,6229,6230,6231,2670],{},"数据类型 数组名",[123,6232,6233],{},"数组长度",[69,6235,6236,6237,6239],{},"这种方式是先定义再arr",[123,6238,3047],{},"赋值",[54,6241,6242,6247],{},[69,6243,6230,6244,6246],{},[123,6245,6233],{},"={值1,值2....};",[69,6248,6249],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[54,6251,6252,6256],{},[69,6253,6230,6254,6246],{},[123,6255],{},[69,6257,6258,6259,6261],{},"int arr",[123,6260],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,6263,6264],{"start":140},[29,6265,6266],{},"一维数组数组名\n用途：",[3606,6268,6269],{},[29,6270,6271],{},"1.可以统计整个数组在内存中的长度：",[113,6273,6275],{"className":2608,"code":6274,"language":2610,"meta":118,"style":118},"sizeof(arr);\nsizeof(arr[0]);\n",[120,6276,6277,6284],{"__ignoreMap":118},[123,6278,6279,6281],{"class":125,"line":126},[123,6280,2617],{"class":133},[123,6282,6283],{"class":129},"(arr);\n",[123,6285,6286,6288,6291,6293],{"class":125,"line":140},[123,6287,2617],{"class":133},[123,6289,6290],{"class":129},"(arr[",[123,6292,2799],{"class":164},[123,6294,6295],{"class":129},"]);\n",[3606,6297,6298],{},[29,6299,6300],{},"2.可以获取数组在内存中的首地址:",[113,6302,6304],{"className":2608,"code":6303,"language":2610,"meta":118,"style":118},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[120,6305,6306,6311,6324,6329],{"__ignoreMap":118},[123,6307,6308],{"class":125,"line":126},[123,6309,6310],{"class":2673},"\u002F\u002F查看16进制的首地址\n",[123,6312,6313,6315,6317,6320,6322],{"class":125,"line":140},[123,6314,3836],{"class":129},[123,6316,3643],{"class":133},[123,6318,6319],{"class":129},"arr",[123,6321,3643],{"class":133},[123,6323,3665],{"class":129},[123,6325,6326],{"class":125,"line":156},[123,6327,6328],{"class":2673},"\u002F\u002F看10进制数\n",[123,6330,6331,6333,6335,6337,6339,6341,6343,6346,6348,6350,6352],{"class":125,"line":168},[123,6332,3836],{"class":129},[123,6334,3643],{"class":133},[123,6336,1315],{"class":129},[123,6338,1742],{"class":133},[123,6340,3035],{"class":129},[123,6342,2960],{"class":133},[123,6344,6345],{"class":129},"arr[",[123,6347,2799],{"class":164},[123,6349,3539],{"class":129},[123,6351,3643],{"class":133},[123,6353,3665],{"class":129},[19,6355,6356],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3606,6358,6359],{},[29,6360,6361],{},"1️⃣五只小猪称体重",[113,6363,6365],{"className":2608,"code":6364,"language":2610,"meta":118,"style":118},"#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",[120,6366,6367,6373,6383,6391,6395,6435,6448,6474,6478,6490,6494,6504,6508,6512,6525,6535],{"__ignoreMap":118},[123,6368,6369,6371],{"class":125,"line":126},[123,6370,4394],{"class":133},[123,6372,4397],{"class":143},[123,6374,6375,6377,6379,6381],{"class":125,"line":140},[123,6376,4402],{"class":133},[123,6378,4405],{"class":133},[123,6380,4408],{"class":337},[123,6382,3760],{"class":129},[123,6384,6385,6387,6389],{"class":125,"line":156},[123,6386,1742],{"class":133},[123,6388,4417],{"class":337},[123,6390,4420],{"class":129},[123,6392,6393],{"class":125,"line":168},[123,6394,186],{"class":129},[123,6396,6397,6399,6402,6404,6406,6408,6410,6413,6415,6418,6420,6422,6424,6427,6429,6432],{"class":125,"line":268},[123,6398,4429],{"class":133},[123,6400,6401],{"class":129}," arr[",[123,6403,2926],{"class":164},[123,6405,3539],{"class":129},[123,6407,134],{"class":133},[123,6409,3495],{"class":129},[123,6411,6412],{"class":164},"300",[123,6414,2985],{"class":129},[123,6416,6417],{"class":164},"350",[123,6419,2985],{"class":129},[123,6421,1045],{"class":164},[123,6423,2985],{"class":129},[123,6425,6426],{"class":164},"400",[123,6428,2985],{"class":129},[123,6430,6431],{"class":164},"250",[123,6433,6434],{"class":129},"};\n",[123,6436,6437,6439,6442,6444,6446],{"class":125,"line":291},[123,6438,4429],{"class":133},[123,6440,6441],{"class":129}," tmp",[123,6443,134],{"class":133},[123,6445,2799],{"class":164},[123,6447,3760],{"class":129},[123,6449,6450,6452,6454,6456,6458,6460,6462,6464,6466,6468,6470,6472],{"class":125,"line":300},[123,6451,5641],{"class":133},[123,6453,4116],{"class":129},[123,6455,1742],{"class":133},[123,6457,5473],{"class":129},[123,6459,134],{"class":133},[123,6461,2799],{"class":164},[123,6463,5480],{"class":129},[123,6465,3509],{"class":133},[123,6467,2926],{"class":164},[123,6469,5480],{"class":129},[123,6471,4736],{"class":133},[123,6473,288],{"class":129},[123,6475,6476],{"class":125,"line":305},[123,6477,4474],{"class":129},[123,6479,6480,6482,6485,6487],{"class":125,"line":316},[123,6481,4940],{"class":133},[123,6483,6484],{"class":129},"(tmp",[123,6486,3509],{"class":133},[123,6488,6489],{"class":129},"arr[i])\n",[123,6491,6492],{"class":125,"line":673},[123,6493,4953],{"class":129},[123,6495,6496,6499,6501],{"class":125,"line":692},[123,6497,6498],{"class":129},"            tmp",[123,6500,134],{"class":133},[123,6502,6503],{"class":129},"arr[i];\n",[123,6505,6506],{"class":125,"line":713},[123,6507,4972],{"class":129},[123,6509,6510],{"class":125,"line":718},[123,6511,4631],{"class":129},[123,6513,6514,6516,6518,6521,6523],{"class":125,"line":1138},[123,6515,4017],{"class":129},[123,6517,3643],{"class":133},[123,6519,6520],{"class":129},"tmp",[123,6522,3643],{"class":133},[123,6524,3665],{"class":129},[123,6526,6527,6530,6533],{"class":125,"line":1429},[123,6528,6529],{"class":133},"    return",[123,6531,6532],{"class":164}," 0",[123,6534,3760],{"class":129},[123,6536,6537],{"class":125,"line":1439},[123,6538,171],{"class":129},[3606,6540,6541],{},[29,6542,6543],{},"2️⃣数组元素逆置",[113,6545,6547],{"className":2608,"code":6546,"language":2610,"meta":118,"style":118},"\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",[120,6548,6549,6554,6560,6570,6578,6582,6617,6633,6665,6678,6683,6688,6700,6710,6720,6725,6734,6744,6749,6754,6781,6785,6801,6805,6816,6825],{"__ignoreMap":118},[123,6550,6551],{"class":125,"line":126},[123,6552,6553],{"class":2673},"\u002F\u002F元素逆置\n",[123,6555,6556,6558],{"class":125,"line":140},[123,6557,4394],{"class":133},[123,6559,4397],{"class":143},[123,6561,6562,6564,6566,6568],{"class":125,"line":156},[123,6563,4402],{"class":133},[123,6565,4405],{"class":133},[123,6567,4408],{"class":337},[123,6569,3760],{"class":129},[123,6571,6572,6574,6576],{"class":125,"line":168},[123,6573,1742],{"class":133},[123,6575,4417],{"class":337},[123,6577,4420],{"class":129},[123,6579,6580],{"class":125,"line":268},[123,6581,186],{"class":129},[123,6583,6584,6587,6589,6591,6593,6595,6597,6599,6601,6603,6605,6607,6609,6611,6613,6615],{"class":125,"line":291},[123,6585,6586],{"class":133},"   int",[123,6588,6401],{"class":129},[123,6590,2926],{"class":164},[123,6592,3539],{"class":129},[123,6594,134],{"class":133},[123,6596,3495],{"class":129},[123,6598,2825],{"class":164},[123,6600,2985],{"class":129},[123,6602,2692],{"class":164},[123,6604,2985],{"class":129},[123,6606,2686],{"class":164},[123,6608,2985],{"class":129},[123,6610,2901],{"class":164},[123,6612,2985],{"class":129},[123,6614,2926],{"class":164},[123,6616,6434],{"class":129},[123,6618,6619,6621,6624,6626,6628,6630],{"class":125,"line":300},[123,6620,6586],{"class":133},[123,6622,6623],{"class":129}," start",[123,6625,134],{"class":133},[123,6627,2799],{"class":164},[123,6629,2670],{"class":129},[123,6631,6632],{"class":2673},"\u002F\u002F起始下标\n",[123,6634,6635,6637,6640,6643,6646,6649,6651,6653,6656,6658,6660,6662],{"class":125,"line":305},[123,6636,6586],{"class":133},[123,6638,6639],{"class":129}," end",[123,6641,6642],{"class":133},"=sizeof",[123,6644,6645],{"class":129},"(arr)",[123,6647,6648],{"class":133},"\u002Fsizeof",[123,6650,6290],{"class":129},[123,6652,2799],{"class":164},[123,6654,6655],{"class":129},"])",[123,6657,3135],{"class":133},[123,6659,2825],{"class":164},[123,6661,2670],{"class":129},[123,6663,6664],{"class":2673},"\u002F\u002F结束下标\n",[123,6666,6667,6670,6673,6675],{"class":125,"line":316},[123,6668,6669],{"class":133},"   while",[123,6671,6672],{"class":129}," (start",[123,6674,3509],{"class":133},[123,6676,6677],{"class":129},"end)\n",[123,6679,6680],{"class":125,"line":673},[123,6681,6682],{"class":129},"   {\n",[123,6684,6685],{"class":125,"line":692},[123,6686,6687],{"class":2673},"    \u002F\u002F实现元素互换代码\n",[123,6689,6690,6692,6695,6697],{"class":125,"line":713},[123,6691,4429],{"class":133},[123,6693,6694],{"class":129}," temp",[123,6696,134],{"class":133},[123,6698,6699],{"class":129},"arr[start];\n",[123,6701,6702,6705,6707],{"class":125,"line":718},[123,6703,6704],{"class":129},"    arr[start]",[123,6706,134],{"class":133},[123,6708,6709],{"class":129},"arr[end];\n",[123,6711,6712,6715,6717],{"class":125,"line":1138},[123,6713,6714],{"class":129},"    arr[end]",[123,6716,134],{"class":133},[123,6718,6719],{"class":129},"temp;\n",[123,6721,6722],{"class":125,"line":1429},[123,6723,6724],{"class":2673},"    \u002F\u002F下标更新\n",[123,6726,6727,6730,6732],{"class":125,"line":1439},[123,6728,6729],{"class":129},"    start",[123,6731,4736],{"class":133},[123,6733,3760],{"class":129},[123,6735,6736,6739,6742],{"class":125,"line":1444},[123,6737,6738],{"class":129},"    end",[123,6740,6741],{"class":133},"--",[123,6743,3760],{"class":129},[123,6745,6746],{"class":125,"line":1453},[123,6747,6748],{"class":129},"   }\n",[123,6750,6751],{"class":125,"line":1458},[123,6752,6753],{"class":2673},"   \u002F\u002F输出逆置后的数组\n",[123,6755,6756,6759,6761,6763,6765,6767,6769,6771,6773,6775,6777,6779],{"class":125,"line":1476},[123,6757,6758],{"class":133},"   for",[123,6760,4116],{"class":129},[123,6762,1742],{"class":133},[123,6764,5473],{"class":129},[123,6766,134],{"class":133},[123,6768,2799],{"class":164},[123,6770,5480],{"class":129},[123,6772,3509],{"class":133},[123,6774,2926],{"class":164},[123,6776,5480],{"class":129},[123,6778,4736],{"class":133},[123,6780,288],{"class":129},[123,6782,6783],{"class":125,"line":1494},[123,6784,6682],{"class":129},[123,6786,6787,6789,6791,6794,6796,6799],{"class":125,"line":1499},[123,6788,4017],{"class":129},[123,6790,3643],{"class":133},[123,6792,6793],{"class":129},"arr[i]",[123,6795,3643],{"class":133},[123,6797,6798],{"class":143},"\" \"",[123,6800,3760],{"class":129},[123,6802,6803],{"class":125,"line":1517},[123,6804,6748],{"class":129},[123,6806,6807,6810,6812,6814],{"class":125,"line":1534},[123,6808,6809],{"class":337},"   system",[123,6811,1315],{"class":129},[123,6813,4752],{"class":143},[123,6815,5161],{"class":129},[123,6817,6818,6821,6823],{"class":125,"line":1539},[123,6819,6820],{"class":133},"   return",[123,6822,6532],{"class":164},[123,6824,3760],{"class":129},[123,6826,6827],{"class":125,"line":2080},[123,6828,171],{"class":129},[3606,6830,6831],{},[29,6832,6833],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[113,6835,6837],{"className":2608,"code":6836,"language":2610,"meta":118,"style":118},"\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",[120,6838,6839,6844,6850,6860,6868,6872,6922,6935,6961,6965,6979,6983,6988,6993,7023,7027,7032,7066,7070,7075,7094,7099,7111,7127,7142,7147,7151,7155,7168,7194,7198,7212,7216,7224],{"__ignoreMap":118},[123,6840,6841],{"class":125,"line":126},[123,6842,6843],{"class":2673},"\u002F\u002F冒泡排序,升序\n",[123,6845,6846,6848],{"class":125,"line":140},[123,6847,4394],{"class":133},[123,6849,4397],{"class":143},[123,6851,6852,6854,6856,6858],{"class":125,"line":156},[123,6853,4402],{"class":133},[123,6855,4405],{"class":133},[123,6857,4408],{"class":337},[123,6859,3760],{"class":129},[123,6861,6862,6864,6866],{"class":125,"line":168},[123,6863,1742],{"class":133},[123,6865,4417],{"class":337},[123,6867,4420],{"class":129},[123,6869,6870],{"class":125,"line":268},[123,6871,186],{"class":129},[123,6873,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920],{"class":125,"line":291},[123,6875,4429],{"class":133},[123,6877,6401],{"class":129},[123,6879,3026],{"class":164},[123,6881,1941],{"class":129},[123,6883,134],{"class":133},[123,6885,241],{"class":129},[123,6887,2901],{"class":164},[123,6889,2985],{"class":129},[123,6891,2692],{"class":164},[123,6893,2985],{"class":129},[123,6895,2248],{"class":164},[123,6897,2985],{"class":129},[123,6899,2799],{"class":164},[123,6901,2985],{"class":129},[123,6903,2926],{"class":164},[123,6905,2985],{"class":129},[123,6907,2976],{"class":164},[123,6909,2985],{"class":129},[123,6911,2825],{"class":164},[123,6913,2985],{"class":129},[123,6915,2686],{"class":164},[123,6917,2985],{"class":129},[123,6919,3026],{"class":164},[123,6921,6434],{"class":129},[123,6923,6924,6926,6928,6931,6933],{"class":125,"line":300},[123,6925,4017],{"class":129},[123,6927,3643],{"class":133},[123,6929,6930],{"class":143},"\"排序前：\"",[123,6932,3643],{"class":133},[123,6934,3665],{"class":129},[123,6936,6937,6939,6941,6943,6945,6947,6949,6951,6953,6955,6957,6959],{"class":125,"line":305},[123,6938,5641],{"class":133},[123,6940,4116],{"class":129},[123,6942,1742],{"class":133},[123,6944,5473],{"class":129},[123,6946,134],{"class":133},[123,6948,2799],{"class":164},[123,6950,5480],{"class":129},[123,6952,3509],{"class":133},[123,6954,3026],{"class":164},[123,6956,5480],{"class":129},[123,6958,4736],{"class":133},[123,6960,288],{"class":129},[123,6962,6963],{"class":125,"line":316},[123,6964,4474],{"class":129},[123,6966,6967,6969,6971,6973,6975,6977],{"class":125,"line":673},[123,6968,5891],{"class":129},[123,6970,3643],{"class":133},[123,6972,6793],{"class":129},[123,6974,3643],{"class":133},[123,6976,6798],{"class":143},[123,6978,3760],{"class":129},[123,6980,6981],{"class":125,"line":692},[123,6982,4631],{"class":129},[123,6984,6985],{"class":125,"line":713},[123,6986,6987],{"class":2673},"    \u002F\u002F开始冒泡排序\n",[123,6989,6990],{"class":125,"line":718},[123,6991,6992],{"class":2673},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[123,6994,6995,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021],{"class":125,"line":1138},[123,6996,5641],{"class":133},[123,6998,4116],{"class":129},[123,7000,1742],{"class":133},[123,7002,5473],{"class":129},[123,7004,134],{"class":133},[123,7006,2799],{"class":164},[123,7008,5480],{"class":129},[123,7010,3509],{"class":133},[123,7012,3026],{"class":164},[123,7014,3135],{"class":133},[123,7016,2825],{"class":164},[123,7018,5480],{"class":129},[123,7020,4736],{"class":133},[123,7022,288],{"class":129},[123,7024,7025],{"class":125,"line":1429},[123,7026,4474],{"class":129},[123,7028,7029],{"class":125,"line":1439},[123,7030,7031],{"class":2673},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[123,7033,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064],{"class":125,"line":1444},[123,7035,5843],{"class":133},[123,7037,4116],{"class":129},[123,7039,1742],{"class":133},[123,7041,5850],{"class":129},[123,7043,134],{"class":133},[123,7045,2799],{"class":164},[123,7047,5857],{"class":129},[123,7049,3509],{"class":133},[123,7051,3026],{"class":164},[123,7053,3135],{"class":133},[123,7055,3047],{"class":129},[123,7057,3135],{"class":133},[123,7059,2825],{"class":164},[123,7061,5857],{"class":129},[123,7063,4736],{"class":133},[123,7065,288],{"class":129},[123,7067,7068],{"class":125,"line":1453},[123,7069,4953],{"class":129},[123,7071,7072],{"class":125,"line":1458},[123,7073,7074],{"class":2673},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[123,7076,7077,7080,7083,7085,7088,7090,7092],{"class":125,"line":1476},[123,7078,7079],{"class":133},"            if",[123,7081,7082],{"class":129},"(arr[j]",[123,7084,3559],{"class":133},[123,7086,7087],{"class":129},"arr[j",[123,7089,3086],{"class":133},[123,7091,2825],{"class":164},[123,7093,444],{"class":129},[123,7095,7096],{"class":125,"line":1494},[123,7097,7098],{"class":129},"            {\n",[123,7100,7101,7104,7106,7108],{"class":125,"line":1499},[123,7102,7103],{"class":133},"                int",[123,7105,6694],{"class":129},[123,7107,134],{"class":133},[123,7109,7110],{"class":129},"arr[j];\n",[123,7112,7113,7116,7118,7120,7122,7124],{"class":125,"line":1517},[123,7114,7115],{"class":129},"                arr[j]",[123,7117,134],{"class":133},[123,7119,7087],{"class":129},[123,7121,3086],{"class":133},[123,7123,2825],{"class":164},[123,7125,7126],{"class":129},"];\n",[123,7128,7129,7132,7134,7136,7138,7140],{"class":125,"line":1534},[123,7130,7131],{"class":129},"                arr[j",[123,7133,3086],{"class":133},[123,7135,2825],{"class":164},[123,7137,3539],{"class":129},[123,7139,134],{"class":133},[123,7141,6719],{"class":129},[123,7143,7144],{"class":125,"line":1539},[123,7145,7146],{"class":129},"            }\n",[123,7148,7149],{"class":125,"line":2080},[123,7150,4972],{"class":129},[123,7152,7153],{"class":125,"line":2097},[123,7154,4631],{"class":129},[123,7156,7157,7159,7161,7164,7166],{"class":125,"line":2114},[123,7158,4017],{"class":129},[123,7160,3643],{"class":133},[123,7162,7163],{"class":143},"\"排序后：\"",[123,7165,3643],{"class":133},[123,7167,3665],{"class":129},[123,7169,7170,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192],{"class":125,"line":2125},[123,7171,5641],{"class":133},[123,7173,4116],{"class":129},[123,7175,1742],{"class":133},[123,7177,5473],{"class":129},[123,7179,134],{"class":133},[123,7181,2799],{"class":164},[123,7183,5480],{"class":129},[123,7185,3509],{"class":133},[123,7187,3026],{"class":164},[123,7189,5480],{"class":129},[123,7191,4736],{"class":133},[123,7193,288],{"class":129},[123,7195,7196],{"class":125,"line":2130},[123,7197,4474],{"class":129},[123,7199,7200,7202,7204,7206,7208,7210],{"class":125,"line":5033},[123,7201,5891],{"class":129},[123,7203,3643],{"class":133},[123,7205,6793],{"class":129},[123,7207,3643],{"class":133},[123,7209,6798],{"class":143},[123,7211,3760],{"class":129},[123,7213,7214],{"class":125,"line":5041},[123,7215,4631],{"class":129},[123,7217,7218,7220,7222],{"class":125,"line":5046},[123,7219,6529],{"class":133},[123,7221,6532],{"class":164},[123,7223,3760],{"class":129},[123,7225,7226],{"class":125,"line":5052},[123,7227,171],{"class":129},[2587,7229,7231],{"id":7230},"_172二维数组","1.7.2二维数组",[26,7233,7234],{},[29,7235,7236],{},"二维数组的四种定义方式",[48,7238,7239,7248],{},[51,7240,7241],{},[54,7242,7243,7246],{},[57,7244,7245],{},"序号",[57,7247,6220],{},[64,7249,7250,7260,7269,7278,7287],{},[54,7251,7252,7254],{},[69,7253,2825],{},[69,7255,7256,7257,2670],{},"数据类型 数组名[行数]",[123,7258,7259],{},"列数",[54,7261,7262,7264],{},[69,7263,2692],{},[69,7265,7256,7266,7268],{},[123,7267,7259],{},"={ {数据1,数据2}，{数据3，数据4}... }",[54,7270,7271,7273],{},[69,7272,2686],{},[69,7274,7256,7275,7277],{},[123,7276,7259],{},"={数据1,数据2,数据3...}",[54,7279,7280,7282],{},[69,7281,2901],{},[69,7283,7284,7285,7277],{},"数据类型 数组名[]",[123,7286,7259],{},[54,7288,7289,7292],{},[69,7290,7291],{},"注意：不能只省略列数",[69,7293],{},[26,7295,7296],{"start":140},[29,7297,7298],{},"二维数组数组名",[3606,7300,7301,7304],{},[29,7302,7303],{},"1.查看二维数组所占内存空间",[29,7305,7306],{},"2.获取二维数组首地址",[19,7308,7309],{},"已知二维数组，求二维数组的行数与列数",[113,7311,7313],{"className":2608,"code":7312,"language":2610,"meta":118,"style":118},"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",[120,7314,7315,7323,7327,7345,7349,7365,7381,7386,7411,7444],{"__ignoreMap":118},[123,7316,7317,7319,7321],{"class":125,"line":126},[123,7318,1742],{"class":133},[123,7320,4417],{"class":337},[123,7322,4420],{"class":129},[123,7324,7325],{"class":125,"line":140},[123,7326,186],{"class":129},[123,7328,7329,7331,7333,7335,7338,7340,7342],{"class":125,"line":156},[123,7330,4429],{"class":133},[123,7332,6401],{"class":129},[123,7334,2692],{"class":164},[123,7336,7337],{"class":129},"][",[123,7339,2686],{"class":164},[123,7341,3539],{"class":129},[123,7343,7344],{"class":133},"=\n",[123,7346,7347],{"class":125,"line":168},[123,7348,4474],{"class":129},[123,7350,7351,7353,7355,7357,7359,7361,7363],{"class":125,"line":268},[123,7352,2176],{"class":129},[123,7354,2825],{"class":164},[123,7356,2985],{"class":129},[123,7358,2692],{"class":164},[123,7360,2985],{"class":129},[123,7362,2686],{"class":164},[123,7364,1202],{"class":129},[123,7366,7367,7369,7371,7373,7375,7377,7379],{"class":125,"line":291},[123,7368,2176],{"class":129},[123,7370,2901],{"class":164},[123,7372,2985],{"class":129},[123,7374,2926],{"class":164},[123,7376,2985],{"class":129},[123,7378,2951],{"class":164},[123,7380,171],{"class":129},[123,7382,7383],{"class":125,"line":300},[123,7384,7385],{"class":129},"    };\n",[123,7387,7388,7390,7392,7395,7397,7399,7401,7403,7405,7407,7409],{"class":125,"line":305},[123,7389,4017],{"class":129},[123,7391,3643],{"class":133},[123,7393,7394],{"class":143},"\"二维数组的行数\"",[123,7396,3839],{"class":133},[123,7398,6645],{"class":129},[123,7400,6648],{"class":133},[123,7402,6290],{"class":129},[123,7404,2799],{"class":164},[123,7406,6655],{"class":129},[123,7408,3643],{"class":133},[123,7410,3665],{"class":129},[123,7412,7413,7415,7417,7420,7422,7424,7426,7428,7430,7432,7434,7436,7438,7440,7442],{"class":125,"line":316},[123,7414,4017],{"class":129},[123,7416,3643],{"class":133},[123,7418,7419],{"class":143},"\"二维数组的列数\"",[123,7421,3839],{"class":133},[123,7423,6290],{"class":129},[123,7425,2799],{"class":164},[123,7427,6655],{"class":129},[123,7429,6648],{"class":133},[123,7431,6290],{"class":129},[123,7433,2799],{"class":164},[123,7435,7337],{"class":129},[123,7437,2799],{"class":164},[123,7439,6655],{"class":129},[123,7441,3643],{"class":133},[123,7443,3665],{"class":129},[123,7445,7446],{"class":125,"line":673},[123,7447,171],{"class":129},[19,7449,7450],{},"查看二维数组首地址",[113,7452,7454],{"className":2608,"code":7453,"language":2610,"meta":118,"style":118},"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",[120,7455,7456,7473,7499,7524],{"__ignoreMap":118},[123,7457,7458,7460,7462,7465,7467,7469,7471],{"class":125,"line":126},[123,7459,3836],{"class":129},[123,7461,3643],{"class":133},[123,7463,7464],{"class":143},"\"二维数组首地址：\"",[123,7466,3643],{"class":133},[123,7468,6319],{"class":129},[123,7470,3643],{"class":133},[123,7472,3665],{"class":129},[123,7474,7475,7477,7479,7482,7484,7486,7488,7491,7493,7495,7497],{"class":125,"line":140},[123,7476,3836],{"class":129},[123,7478,3643],{"class":133},[123,7480,7481],{"class":143},"\"二维数组第一行的首地址：\"",[123,7483,3643],{"class":133},[123,7485,1315],{"class":129},[123,7487,1742],{"class":133},[123,7489,7490],{"class":129},")arr[",[123,7492,2799],{"class":164},[123,7494,3539],{"class":129},[123,7496,3643],{"class":133},[123,7498,3665],{"class":129},[123,7500,7501,7503,7505,7508,7510,7512,7514,7516,7518,7520,7522],{"class":125,"line":156},[123,7502,3836],{"class":129},[123,7504,3643],{"class":133},[123,7506,7507],{"class":143},"\"二维数组第二行的首地址：\"",[123,7509,3643],{"class":133},[123,7511,1315],{"class":129},[123,7513,1742],{"class":133},[123,7515,7490],{"class":129},[123,7517,2825],{"class":164},[123,7519,3539],{"class":129},[123,7521,3643],{"class":133},[123,7523,3665],{"class":129},[123,7525,7526,7528,7530,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555,7557],{"class":125,"line":168},[123,7527,3836],{"class":129},[123,7529,3643],{"class":133},[123,7531,7532],{"class":143},"\"二维数组第一个元素的首地址:\"",[123,7534,3643],{"class":133},[123,7536,1315],{"class":129},[123,7538,1742],{"class":133},[123,7540,3035],{"class":129},[123,7542,2960],{"class":133},[123,7544,6345],{"class":129},[123,7546,2799],{"class":164},[123,7548,7337],{"class":129},[123,7550,2799],{"class":164},[123,7552,3539],{"class":129},[123,7554,3643],{"class":133},[123,7556,3708],{"class":129},[123,7558,7559],{"class":2673},"\u002F\u002F对于数，要加取址符\n",[2526,7561,7562],{},"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":118,"searchDepth":140,"depth":140,"links":7564},[7565,7566,7567,7575,7576,7582,7587],{"id":2562,"depth":140,"text":2563},{"id":2569,"depth":140,"text":2570},{"id":2584,"depth":140,"text":2585,"children":7568},[7569,7570,7571,7572,7573,7574],{"id":2589,"depth":156,"text":2590},{"id":2633,"depth":156,"text":2634},{"id":2700,"depth":156,"text":2701},{"id":3624,"depth":156,"text":3625},{"id":3714,"depth":156,"text":3715},{"id":3810,"depth":156,"text":3811},{"id":3852,"depth":140,"text":3853},{"id":3920,"depth":140,"text":3921,"children":7577},[7578,7579,7580,7581],{"id":3924,"depth":156,"text":3925},{"id":3946,"depth":156,"text":3947},{"id":3955,"depth":156,"text":3956},{"id":3964,"depth":156,"text":3965},{"id":3973,"depth":140,"text":3974,"children":7583},[7584,7585,7586],{"id":3977,"depth":156,"text":3978},{"id":4649,"depth":156,"text":4650},{"id":6061,"depth":156,"text":6062},{"id":6201,"depth":140,"text":6202,"children":7588},[7589,7590],{"id":6205,"depth":156,"text":6206},{"id":7230,"depth":156,"text":7231},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2554,"description":118},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7597,"title":7598,"body":7599,"description":118,"extension":2545,"meta":8698,"navigation":231,"path":8699,"seo":8700,"stem":8701,"__hash__":8702},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7600,"toc":8690},[7601,7604,7608,7616,7624,7627,7692,7696,7699,7775,7779,7782,7785,7788,8001,8005,8010,8074,8079,8146,8151,8242,8245,8350,8354,8357,8363,8507,8511,8514,8528,8531,8576,8579,8687],[10,7602,7598],{"id":7603},"_2函数",[14,7605,7607],{"id":7606},"_21函数概述","2.1函数概述",[26,7609,7610,7613],{},[29,7611,7612],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,7614,7615],{},"语法：",[113,7617,7622],{"className":7618,"code":7620,"language":7621,"meta":118},[7619],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[120,7623,7620],{"__ignoreMap":118},[19,7625,7626],{},"小案例",[113,7628,7630],{"className":2608,"code":7629,"language":2610,"meta":118,"style":118},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[120,7631,7632,7637,7660,7664,7681,7688],{"__ignoreMap":118},[123,7633,7634],{"class":125,"line":126},[123,7635,7636],{"class":2673},"\u002F\u002Fnum1,num2形参\n",[123,7638,7639,7641,7644,7646,7648,7651,7653,7655,7658],{"class":125,"line":140},[123,7640,1742],{"class":133},[123,7642,7643],{"class":337}," add",[123,7645,1315],{"class":129},[123,7647,1742],{"class":133},[123,7649,7650],{"class":279}," num1",[123,7652,2985],{"class":129},[123,7654,1742],{"class":133},[123,7656,7657],{"class":279}," num2",[123,7659,288],{"class":129},[123,7661,7662],{"class":125,"line":156},[123,7663,186],{"class":129},[123,7665,7666,7668,7671,7673,7676,7678],{"class":125,"line":168},[123,7667,4429],{"class":133},[123,7669,7670],{"class":129}," sum",[123,7672,134],{"class":133},[123,7674,7675],{"class":129},"num1",[123,7677,3086],{"class":133},[123,7679,7680],{"class":129},"num2;\n",[123,7682,7683,7685],{"class":125,"line":268},[123,7684,6529],{"class":133},[123,7686,7687],{"class":129}," sum;\n",[123,7689,7690],{"class":125,"line":291},[123,7691,171],{"class":129},[14,7693,7695],{"id":7694},"_22函数调用","2.2函数调用",[19,7697,7698],{},"调用刚刚写的求和函数",[113,7700,7702],{"className":2608,"code":7701,"language":2610,"meta":118,"style":118},"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",[120,7703,7704,7712,7716,7721,7733,7745,7754,7759,7771],{"__ignoreMap":118},[123,7705,7706,7708,7710],{"class":125,"line":126},[123,7707,1742],{"class":133},[123,7709,4417],{"class":337},[123,7711,4420],{"class":129},[123,7713,7714],{"class":125,"line":140},[123,7715,186],{"class":129},[123,7717,7718],{"class":125,"line":156},[123,7719,7720],{"class":2673},"    \u002F\u002Fa,b实参\n",[123,7722,7723,7725,7727,7729,7731],{"class":125,"line":168},[123,7724,4429],{"class":133},[123,7726,3865],{"class":129},[123,7728,134],{"class":133},[123,7730,2799],{"class":164},[123,7732,3760],{"class":129},[123,7734,7735,7737,7739,7741,7743],{"class":125,"line":268},[123,7736,4429],{"class":133},[123,7738,5275],{"class":129},[123,7740,134],{"class":133},[123,7742,2799],{"class":164},[123,7744,3760],{"class":129},[123,7746,7747,7749,7751],{"class":125,"line":291},[123,7748,4456],{"class":129},[123,7750,3896],{"class":133},[123,7752,7753],{"class":129},"a,b;\n",[123,7755,7756],{"class":125,"line":300},[123,7757,7758],{"class":2673},"    \u002F\u002F调用函数时，实参值传给了形参\n",[123,7760,7761,7763,7765,7768],{"class":125,"line":305},[123,7762,4017],{"class":129},[123,7764,3643],{"class":133},[123,7766,7767],{"class":337},"add",[123,7769,7770],{"class":129},"(a,b);\n",[123,7772,7773],{"class":125,"line":316},[123,7774,171],{"class":129},[14,7776,7778],{"id":7777},"_23值传递","2.3值传递",[19,7780,7781],{},"值传递就是函数调用时实参将数值传给形参",[19,7783,7784],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7786,7787],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[113,7789,7791],{"className":2608,"code":7790,"language":2610,"meta":118,"style":118},"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",[120,7792,7793,7815,7819,7832,7849,7867,7878,7887,7896,7909,7925,7941,7950,7954,7962,7966,7978,7990,7997],{"__ignoreMap":118},[123,7794,7795,7798,7801,7803,7805,7807,7809,7811,7813],{"class":125,"line":126},[123,7796,7797],{"class":133},"void",[123,7799,7800],{"class":337}," swap",[123,7802,1315],{"class":129},[123,7804,1742],{"class":133},[123,7806,7650],{"class":279},[123,7808,2985],{"class":129},[123,7810,1742],{"class":133},[123,7812,7657],{"class":279},[123,7814,288],{"class":129},[123,7816,7817],{"class":125,"line":140},[123,7818,186],{"class":129},[123,7820,7821,7823,7825,7828,7830],{"class":125,"line":156},[123,7822,4017],{"class":129},[123,7824,3643],{"class":133},[123,7826,7827],{"class":143},"\"交换前：\"",[123,7829,3643],{"class":133},[123,7831,3665],{"class":129},[123,7833,7834,7836,7838,7841,7843,7845,7847],{"class":125,"line":168},[123,7835,4017],{"class":129},[123,7837,3643],{"class":133},[123,7839,7840],{"class":143},"\"num1=\"",[123,7842,3643],{"class":133},[123,7844,7675],{"class":129},[123,7846,3643],{"class":133},[123,7848,3665],{"class":129},[123,7850,7851,7853,7855,7858,7860,7863,7865],{"class":125,"line":268},[123,7852,4017],{"class":129},[123,7854,3643],{"class":133},[123,7856,7857],{"class":143},"\"num2=\"",[123,7859,3643],{"class":133},[123,7861,7862],{"class":129},"num2",[123,7864,3643],{"class":133},[123,7866,3665],{"class":129},[123,7868,7869,7871,7873,7875],{"class":125,"line":291},[123,7870,4429],{"class":133},[123,7872,6694],{"class":129},[123,7874,134],{"class":133},[123,7876,7877],{"class":129},"num1;\n",[123,7879,7880,7883,7885],{"class":125,"line":300},[123,7881,7882],{"class":129},"    num1",[123,7884,134],{"class":133},[123,7886,7680],{"class":129},[123,7888,7889,7892,7894],{"class":125,"line":305},[123,7890,7891],{"class":129},"    num2",[123,7893,134],{"class":133},[123,7895,6719],{"class":129},[123,7897,7898,7900,7902,7905,7907],{"class":125,"line":316},[123,7899,4017],{"class":129},[123,7901,3643],{"class":133},[123,7903,7904],{"class":143},"\"交换后：\"",[123,7906,3643],{"class":133},[123,7908,3665],{"class":129},[123,7910,7911,7913,7915,7917,7919,7921,7923],{"class":125,"line":673},[123,7912,4017],{"class":129},[123,7914,3643],{"class":133},[123,7916,7840],{"class":143},[123,7918,3643],{"class":133},[123,7920,7675],{"class":129},[123,7922,3643],{"class":133},[123,7924,3665],{"class":129},[123,7926,7927,7929,7931,7933,7935,7937,7939],{"class":125,"line":692},[123,7928,4017],{"class":129},[123,7930,3643],{"class":133},[123,7932,7857],{"class":143},[123,7934,3643],{"class":133},[123,7936,7862],{"class":129},[123,7938,3643],{"class":133},[123,7940,3665],{"class":129},[123,7942,7943,7945,7947],{"class":125,"line":713},[123,7944,6529],{"class":133},[123,7946,2670],{"class":129},[123,7948,7949],{"class":2673},"\u002F\u002F或者不写\n",[123,7951,7952],{"class":125,"line":718},[123,7953,171],{"class":129},[123,7955,7956,7958,7960],{"class":125,"line":1138},[123,7957,1742],{"class":133},[123,7959,4417],{"class":337},[123,7961,4420],{"class":129},[123,7963,7964],{"class":125,"line":1429},[123,7965,186],{"class":129},[123,7967,7968,7970,7972,7974,7976],{"class":125,"line":1439},[123,7969,4429],{"class":133},[123,7971,3865],{"class":129},[123,7973,134],{"class":133},[123,7975,2193],{"class":164},[123,7977,3760],{"class":129},[123,7979,7980,7982,7984,7986,7988],{"class":125,"line":1444},[123,7981,4429],{"class":133},[123,7983,5275],{"class":129},[123,7985,134],{"class":133},[123,7987,3302],{"class":164},[123,7989,3760],{"class":129},[123,7991,7992,7995],{"class":125,"line":1453},[123,7993,7994],{"class":337},"    swap",[123,7996,7770],{"class":129},[123,7998,7999],{"class":125,"line":1458},[123,8000,171],{"class":129},[14,8002,8004],{"id":8003},"_24函数的常见形式","2.4函数的常见形式",[26,8006,8007],{},[29,8008,8009],{},"无参无返",[113,8011,8013],{"className":2608,"code":8012,"language":2610,"meta":118,"style":118},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[120,8014,8015,8024,8028,8041,8045,8053,8057,8062,8070],{"__ignoreMap":118},[123,8016,8017,8019,8022],{"class":125,"line":126},[123,8018,7797],{"class":133},[123,8020,8021],{"class":337}," test01",[123,8023,4420],{"class":129},[123,8025,8026],{"class":125,"line":140},[123,8027,186],{"class":129},[123,8029,8030,8032,8034,8037,8039],{"class":125,"line":156},[123,8031,4017],{"class":129},[123,8033,3643],{"class":133},[123,8035,8036],{"class":143},"\"你好\"",[123,8038,3643],{"class":133},[123,8040,3665],{"class":129},[123,8042,8043],{"class":125,"line":168},[123,8044,171],{"class":129},[123,8046,8047,8049,8051],{"class":125,"line":268},[123,8048,1742],{"class":133},[123,8050,4417],{"class":337},[123,8052,4420],{"class":129},[123,8054,8055],{"class":125,"line":291},[123,8056,186],{"class":129},[123,8058,8059],{"class":125,"line":300},[123,8060,8061],{"class":2673},"    \u002F\u002F函数调用\n",[123,8063,8064,8067],{"class":125,"line":305},[123,8065,8066],{"class":337},"    test01",[123,8068,8069],{"class":129},"();\n",[123,8071,8072],{"class":125,"line":316},[123,8073,171],{"class":129},[26,8075,8076],{"start":140},[29,8077,8078],{},"有参无返",[113,8080,8082],{"className":2608,"code":8081,"language":2610,"meta":118,"style":118},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[120,8083,8084,8099,8103,8115,8119,8127,8131,8142],{"__ignoreMap":118},[123,8085,8086,8088,8091,8093,8095,8097],{"class":125,"line":126},[123,8087,7797],{"class":133},[123,8089,8090],{"class":337}," test02",[123,8092,1315],{"class":129},[123,8094,1742],{"class":133},[123,8096,3865],{"class":279},[123,8098,288],{"class":129},[123,8100,8101],{"class":125,"line":140},[123,8102,186],{"class":129},[123,8104,8105,8107,8109,8111,8113],{"class":125,"line":156},[123,8106,4017],{"class":129},[123,8108,3643],{"class":133},[123,8110,8036],{"class":143},[123,8112,3643],{"class":133},[123,8114,3665],{"class":129},[123,8116,8117],{"class":125,"line":168},[123,8118,171],{"class":129},[123,8120,8121,8123,8125],{"class":125,"line":268},[123,8122,1742],{"class":133},[123,8124,4417],{"class":337},[123,8126,4420],{"class":129},[123,8128,8129],{"class":125,"line":291},[123,8130,186],{"class":129},[123,8132,8133,8136,8138,8140],{"class":125,"line":300},[123,8134,8135],{"class":337},"    test02",[123,8137,1315],{"class":129},[123,8139,259],{"class":164},[123,8141,5161],{"class":129},[123,8143,8144],{"class":125,"line":305},[123,8145,171],{"class":129},[26,8147,8148],{"start":156},[29,8149,8150],{},"无参有返",[113,8152,8154],{"className":2608,"code":8153,"language":2610,"meta":118,"style":118},"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",[120,8155,8156,8165,8169,8181,8190,8194,8202,8206,8219,8238],{"__ignoreMap":118},[123,8157,8158,8160,8163],{"class":125,"line":126},[123,8159,1742],{"class":133},[123,8161,8162],{"class":337}," test03",[123,8164,4420],{"class":129},[123,8166,8167],{"class":125,"line":140},[123,8168,186],{"class":129},[123,8170,8171,8173,8175,8177,8179],{"class":125,"line":156},[123,8172,4017],{"class":129},[123,8174,3643],{"class":133},[123,8176,8036],{"class":143},[123,8178,3643],{"class":133},[123,8180,3665],{"class":129},[123,8182,8183,8185,8188],{"class":125,"line":168},[123,8184,6529],{"class":133},[123,8186,8187],{"class":164}," 100",[123,8189,3760],{"class":129},[123,8191,8192],{"class":125,"line":268},[123,8193,171],{"class":129},[123,8195,8196,8198,8200],{"class":125,"line":291},[123,8197,1742],{"class":133},[123,8199,4417],{"class":337},[123,8201,4420],{"class":129},[123,8203,8204],{"class":125,"line":300},[123,8205,186],{"class":129},[123,8207,8208,8210,8212,8214,8217],{"class":125,"line":305},[123,8209,4429],{"class":133},[123,8211,7650],{"class":129},[123,8213,134],{"class":133},[123,8215,8216],{"class":337},"test03",[123,8218,8069],{"class":129},[123,8220,8221,8223,8225,8227,8229,8231,8233,8235],{"class":125,"line":316},[123,8222,4017],{"class":129},[123,8224,3643],{"class":133},[123,8226,7840],{"class":143},[123,8228,3643],{"class":133},[123,8230,7675],{"class":129},[123,8232,3643],{"class":133},[123,8234,3708],{"class":129},[123,8236,8237],{"class":2673}," \u002F\u002F100\n",[123,8239,8240],{"class":125,"line":673},[123,8241,171],{"class":129},[19,8243,8244],{},"4.有参有返",[113,8246,8248],{"className":2608,"code":8247,"language":2610,"meta":118,"style":118},"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",[120,8249,8250,8265,8269,8282,8288,8292,8301,8305,8317,8331,8346],{"__ignoreMap":118},[123,8251,8252,8254,8257,8259,8261,8263],{"class":125,"line":126},[123,8253,1742],{"class":133},[123,8255,8256],{"class":337}," test04",[123,8258,1315],{"class":129},[123,8260,1742],{"class":133},[123,8262,3865],{"class":279},[123,8264,288],{"class":129},[123,8266,8267],{"class":125,"line":140},[123,8268,186],{"class":129},[123,8270,8271,8273,8275,8278,8280],{"class":125,"line":156},[123,8272,4017],{"class":129},[123,8274,3643],{"class":133},[123,8276,8277],{"class":143},"\"hello\"",[123,8279,3643],{"class":133},[123,8281,3665],{"class":129},[123,8283,8284,8286],{"class":125,"line":168},[123,8285,6529],{"class":133},[123,8287,3899],{"class":129},[123,8289,8290],{"class":125,"line":268},[123,8291,171],{"class":129},[123,8293,8294,8296,8299],{"class":125,"line":291},[123,8295,1742],{"class":133},[123,8297,8298],{"class":337}," mian",[123,8300,4420],{"class":129},[123,8302,8303],{"class":125,"line":300},[123,8304,186],{"class":129},[123,8306,8307,8309,8311,8313,8315],{"class":125,"line":305},[123,8308,4429],{"class":133},[123,8310,5275],{"class":129},[123,8312,134],{"class":133},[123,8314,2825],{"class":164},[123,8316,3760],{"class":129},[123,8318,8319,8321,8323,8325,8328],{"class":125,"line":316},[123,8320,4429],{"class":133},[123,8322,5291],{"class":129},[123,8324,134],{"class":133},[123,8326,8327],{"class":337},"test04",[123,8329,8330],{"class":129},"(b);\n",[123,8332,8333,8335,8337,8339,8341,8343],{"class":125,"line":673},[123,8334,4017],{"class":129},[123,8336,3643],{"class":133},[123,8338,2896],{"class":129},[123,8340,3643],{"class":133},[123,8342,3708],{"class":129},[123,8344,8345],{"class":2673}," \u002F\u002F1\n",[123,8347,8348],{"class":125,"line":692},[123,8349,171],{"class":129},[14,8351,8353],{"id":8352},"_25函数的声明","2.5函数的声明",[19,8355,8356],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8358,8359,8360],{},"函数的",[2759,8361,8362],{},"声明可以多次，但是函数的定义只能有一次",[113,8364,8366],{"className":2608,"code":8365,"language":2610,"meta":118,"style":118},"\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",[120,8367,8368,8373,8378,8403,8412,8416,8428,8440,8456,8460,8480,8484,8503],{"__ignoreMap":118},[123,8369,8370],{"class":125,"line":126},[123,8371,8372],{"class":2673},"\u002F\u002F函数声明\n",[123,8374,8375],{"class":125,"line":140},[123,8376,8377],{"class":2673},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[123,8379,8380,8382,8385,8387,8389,8391,8393,8395,8397,8400],{"class":125,"line":156},[123,8381,1742],{"class":133},[123,8383,8384],{"class":337}," max",[123,8386,1315],{"class":129},[123,8388,1742],{"class":133},[123,8390,3865],{"class":279},[123,8392,2985],{"class":129},[123,8394,1742],{"class":133},[123,8396,5275],{"class":279},[123,8398,8399],{"class":129},");",[123,8401,8402],{"class":2673},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[123,8404,8405,8407,8409],{"class":125,"line":168},[123,8406,1742],{"class":133},[123,8408,4417],{"class":337},[123,8410,8411],{"class":129},"() \n",[123,8413,8414],{"class":125,"line":268},[123,8415,186],{"class":129},[123,8417,8418,8420,8422,8424,8426],{"class":125,"line":291},[123,8419,4429],{"class":133},[123,8421,3865],{"class":129},[123,8423,134],{"class":133},[123,8425,2193],{"class":164},[123,8427,3760],{"class":129},[123,8429,8430,8432,8434,8436,8438],{"class":125,"line":300},[123,8431,4429],{"class":133},[123,8433,5275],{"class":129},[123,8435,134],{"class":133},[123,8437,3302],{"class":164},[123,8439,3760],{"class":129},[123,8441,8442,8444,8446,8449,8452,8454],{"class":125,"line":305},[123,8443,4017],{"class":129},[123,8445,3643],{"class":133},[123,8447,8448],{"class":337},"max",[123,8450,8451],{"class":129},"(a,b)",[123,8453,3643],{"class":133},[123,8455,3665],{"class":129},[123,8457,8458],{"class":125,"line":316},[123,8459,171],{"class":129},[123,8461,8462,8464,8466,8468,8470,8472,8474,8476,8478],{"class":125,"line":673},[123,8463,1742],{"class":133},[123,8465,8384],{"class":337},[123,8467,1315],{"class":129},[123,8469,1742],{"class":133},[123,8471,3865],{"class":279},[123,8473,2985],{"class":129},[123,8475,1742],{"class":133},[123,8477,5275],{"class":279},[123,8479,288],{"class":129},[123,8481,8482],{"class":125,"line":692},[123,8483,186],{"class":129},[123,8485,8486,8488,8490,8492,8494,8496,8498,8500],{"class":125,"line":713},[123,8487,6529],{"class":133},[123,8489,3865],{"class":129},[123,8491,3559],{"class":133},[123,8493,2871],{"class":129},[123,8495,3585],{"class":133},[123,8497,2846],{"class":129},[123,8499,3460],{"class":133},[123,8501,8502],{"class":129},"b;\n",[123,8504,8505],{"class":125,"line":718},[123,8506,171],{"class":129},[14,8508,8510],{"id":8509},"_26函数的分文件编写","2.6函数的分文件编写",[19,8512,8513],{},"4个步骤：",[3606,8515,8516,8519,8522,8525],{},[29,8517,8518],{},"1.创建后缀名为.h的头文件",[29,8520,8521],{},"2.创建后缀名为.cpp的源文件",[29,8523,8524],{},"3.在头文件中写函数的定义",[29,8526,8527],{},"4.在源文件中写函数的定义\n示例：",[19,8529,8530],{},"头文件：swap.h",[113,8532,8534],{"className":2608,"code":8533,"language":2610,"meta":118,"style":118},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[120,8535,8536,8542,8552,8556],{"__ignoreMap":118},[123,8537,8538,8540],{"class":125,"line":126},[123,8539,4394],{"class":133},[123,8541,4397],{"class":143},[123,8543,8544,8546,8548,8550],{"class":125,"line":140},[123,8545,4402],{"class":133},[123,8547,4405],{"class":133},[123,8549,4408],{"class":337},[123,8551,3760],{"class":129},[123,8553,8554],{"class":125,"line":156},[123,8555,8372],{"class":2673},[123,8557,8558,8560,8562,8564,8566,8568,8570,8572,8574],{"class":125,"line":168},[123,8559,7797],{"class":133},[123,8561,7800],{"class":337},[123,8563,1315],{"class":129},[123,8565,1742],{"class":133},[123,8567,3865],{"class":279},[123,8569,2985],{"class":129},[123,8571,1742],{"class":133},[123,8573,5275],{"class":279},[123,8575,5161],{"class":129},[19,8577,8578],{},"源文件：swap.cpp",[113,8580,8582],{"className":2608,"code":8581,"language":2610,"meta":118,"style":118},"#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",[120,8583,8584,8591,8596,8616,8620,8631,8640,8649,8666,8683],{"__ignoreMap":118},[123,8585,8586,8588],{"class":125,"line":126},[123,8587,4394],{"class":133},[123,8589,8590],{"class":143}," \"swap.h\"\n",[123,8592,8593],{"class":125,"line":140},[123,8594,8595],{"class":2673},"\u002F\u002F函数的定义\n",[123,8597,8598,8600,8602,8604,8606,8608,8610,8612,8614],{"class":125,"line":156},[123,8599,7797],{"class":133},[123,8601,7800],{"class":337},[123,8603,1315],{"class":129},[123,8605,1742],{"class":133},[123,8607,3865],{"class":279},[123,8609,2985],{"class":129},[123,8611,1742],{"class":133},[123,8613,5275],{"class":279},[123,8615,288],{"class":129},[123,8617,8618],{"class":125,"line":168},[123,8619,186],{"class":129},[123,8621,8622,8624,8626,8628],{"class":125,"line":268},[123,8623,4429],{"class":133},[123,8625,6694],{"class":129},[123,8627,134],{"class":133},[123,8629,8630],{"class":129},"a;\n",[123,8632,8633,8636,8638],{"class":125,"line":291},[123,8634,8635],{"class":129},"    a",[123,8637,134],{"class":133},[123,8639,8502],{"class":129},[123,8641,8642,8645,8647],{"class":125,"line":300},[123,8643,8644],{"class":129},"    b",[123,8646,134],{"class":133},[123,8648,6719],{"class":129},[123,8650,8651,8653,8655,8658,8660,8662,8664],{"class":125,"line":305},[123,8652,4017],{"class":129},[123,8654,3643],{"class":133},[123,8656,8657],{"class":143},"\"a=\"",[123,8659,3643],{"class":133},[123,8661,2846],{"class":129},[123,8663,3643],{"class":133},[123,8665,3665],{"class":129},[123,8667,8668,8670,8672,8675,8677,8679,8681],{"class":125,"line":316},[123,8669,4017],{"class":129},[123,8671,3643],{"class":133},[123,8673,8674],{"class":143},"\"b=\"",[123,8676,3643],{"class":133},[123,8678,2871],{"class":129},[123,8680,3643],{"class":133},[123,8682,3665],{"class":129},[123,8684,8685],{"class":125,"line":673},[123,8686,171],{"class":129},[2526,8688,8689],{},"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":118,"searchDepth":140,"depth":140,"links":8691},[8692,8693,8694,8695,8696,8697],{"id":7606,"depth":140,"text":7607},{"id":7694,"depth":140,"text":7695},{"id":7777,"depth":140,"text":7778},{"id":8003,"depth":140,"text":8004},{"id":8352,"depth":140,"text":8353},{"id":8509,"depth":140,"text":8510},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7598,"description":118},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8704,"title":8705,"body":8706,"description":8713,"extension":2545,"meta":10117,"navigation":231,"path":10118,"seo":10119,"stem":10120,"__hash__":10121},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8707,"toc":10107},[8708,8711,8714,8718,8880,8884,8887,8890,8893,8896,9036,9040,9043,9046,9049,9114,9118,9123,9190,9193,9197,9200,9211,9216,9236,9239,9244,9263,9266,9270,9289,9292,9296,9531,9535,9538,9541,9544,9706,9709,9713,9716,9722,10104],[10,8709,8705],{"id":8710},"_3指针",[19,8712,8713],{},"通过指针保存一个地址，指针就是个地址",[14,8715,8717],{"id":8716},"_31定义指针","3.1定义指针",[113,8719,8721],{"className":2608,"code":8720,"language":2610,"meta":118,"style":118},"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",[120,8722,8723,8731,8735,8740,8752,8757,8765,8775,8793,8813,8817,8822,8827,8832,8846,8862,8876],{"__ignoreMap":118},[123,8724,8725,8727,8729],{"class":125,"line":126},[123,8726,1742],{"class":133},[123,8728,4417],{"class":337},[123,8730,4420],{"class":129},[123,8732,8733],{"class":125,"line":140},[123,8734,186],{"class":129},[123,8736,8737],{"class":125,"line":156},[123,8738,8739],{"class":2673},"    \u002F\u002F1.定义指针\n",[123,8741,8742,8744,8746,8748,8750],{"class":125,"line":168},[123,8743,4429],{"class":133},[123,8745,3865],{"class":129},[123,8747,134],{"class":133},[123,8749,2193],{"class":164},[123,8751,3760],{"class":129},[123,8753,8754],{"class":125,"line":268},[123,8755,8756],{"class":2673},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[123,8758,8759,8762],{"class":125,"line":291},[123,8760,8761],{"class":133},"    int*",[123,8763,8764],{"class":129},"p;\n",[123,8766,8767,8770,8773],{"class":125,"line":300},[123,8768,8769],{"class":129},"    p",[123,8771,8772],{"class":133},"=&",[123,8774,8630],{"class":129},[123,8776,8777,8779,8781,8784,8787,8789,8791],{"class":125,"line":305},[123,8778,4017],{"class":129},[123,8780,3643],{"class":133},[123,8782,8783],{"class":143},"\"a的地址为：\"",[123,8785,8786],{"class":133},"\u003C\u003C&",[123,8788,2846],{"class":129},[123,8790,3643],{"class":133},[123,8792,3665],{"class":129},[123,8794,8795,8797,8799,8802,8804,8806,8808,8810],{"class":125,"line":316},[123,8796,4017],{"class":129},[123,8798,3643],{"class":133},[123,8800,8801],{"class":143},"\"指针p为：\"",[123,8803,3643],{"class":133},[123,8805,19],{"class":129},[123,8807,3643],{"class":133},[123,8809,3708],{"class":129},[123,8811,8812],{"class":2673},"\u002F\u002F指针p表示的就是a的地址\n",[123,8814,8815],{"class":125,"line":673},[123,8816,232],{"emptyLinePlaceholder":231},[123,8818,8819],{"class":125,"line":692},[123,8820,8821],{"class":2673},"    \u002F\u002F2.使用指针\n",[123,8823,8824],{"class":125,"line":713},[123,8825,8826],{"class":2673},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[123,8828,8829],{"class":125,"line":718},[123,8830,8831],{"class":2673},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[123,8833,8834,8837,8839,8841,8844],{"class":125,"line":1138},[123,8835,8836],{"class":133},"    *",[123,8838,19],{"class":129},[123,8840,134],{"class":133},[123,8842,8843],{"class":164},"1000",[123,8845,3760],{"class":129},[123,8847,8848,8850,8853,8855,8857,8859],{"class":125,"line":1429},[123,8849,4017],{"class":129},[123,8851,8852],{"class":133},"\u003C\u003C*",[123,8854,19],{"class":129},[123,8856,3643],{"class":133},[123,8858,3708],{"class":129},[123,8860,8861],{"class":2673},"\u002F\u002F1000\n",[123,8863,8864,8866,8868,8870,8872,8874],{"class":125,"line":1439},[123,8865,4017],{"class":129},[123,8867,3643],{"class":133},[123,8869,2846],{"class":129},[123,8871,3643],{"class":133},[123,8873,3708],{"class":129},[123,8875,8861],{"class":2673},[123,8877,8878],{"class":125,"line":1444},[123,8879,171],{"class":129},[14,8881,8883],{"id":8882},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8885,8886],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8888,8889],{},"在32位操作系统下：占用4个字节空间",[19,8891,8892],{},"在64位操作系统下：占用8个字节空间",[19,8894,8895],{},"上方是不管啥数据类型的",[113,8897,8899],{"className":2608,"code":8898,"language":2610,"meta":118,"style":118},"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",[120,8900,8901,8909,8913,8918,8930,8935,8940,8945,8958,8980,9006,9032],{"__ignoreMap":118},[123,8902,8903,8905,8907],{"class":125,"line":126},[123,8904,1742],{"class":133},[123,8906,4417],{"class":337},[123,8908,4420],{"class":129},[123,8910,8911],{"class":125,"line":140},[123,8912,186],{"class":129},[123,8914,8915],{"class":125,"line":156},[123,8916,8917],{"class":2673},"    \u002F\u002F指针所占内存空间\n",[123,8919,8920,8922,8924,8926,8928],{"class":125,"line":168},[123,8921,4429],{"class":133},[123,8923,3865],{"class":129},[123,8925,134],{"class":133},[123,8927,2193],{"class":164},[123,8929,3760],{"class":129},[123,8931,8932],{"class":125,"line":268},[123,8933,8934],{"class":2673},"    \u002F\u002Fint *p;\n",[123,8936,8937],{"class":125,"line":291},[123,8938,8939],{"class":2673},"    \u002F\u002Fp=&a;\n",[123,8941,8942],{"class":125,"line":300},[123,8943,8944],{"class":2673},"    \u002F\u002F上述可以写为以下：\n",[123,8946,8947,8949,8952,8954,8956],{"class":125,"line":305},[123,8948,4429],{"class":133},[123,8950,8951],{"class":133}," *",[123,8953,19],{"class":129},[123,8955,8772],{"class":133},[123,8957,8630],{"class":129},[123,8959,8960,8963,8965,8968,8970,8973,8975,8977],{"class":125,"line":316},[123,8961,8962],{"class":129},"    cout ",[123,8964,3643],{"class":133},[123,8966,8967],{"class":143},"\"sizeof(int *)\"",[123,8969,3839],{"class":133},[123,8971,8972],{"class":129},"(p)",[123,8974,3643],{"class":133},[123,8976,3708],{"class":129},[123,8978,8979],{"class":2673},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[123,8981,8982,8984,8986,8988,8990,8992,8994,8996,8998,9000,9003],{"class":125,"line":673},[123,8983,8962],{"class":129},[123,8985,3643],{"class":133},[123,8987,8967],{"class":143},[123,8989,3839],{"class":133},[123,8991,1315],{"class":129},[123,8993,1742],{"class":133},[123,8995,8951],{"class":133},[123,8997,3035],{"class":129},[123,8999,3643],{"class":133},[123,9001,9002],{"class":129},"endl",[123,9004,9005],{"class":2673},"  \u002F\u002F4字节(32位的话)\n",[123,9007,9008,9010,9012,9015,9017,9019,9021,9023,9025,9027,9029],{"class":125,"line":692},[123,9009,8962],{"class":129},[123,9011,3643],{"class":133},[123,9013,9014],{"class":143},"\"sizeof(char *)\"",[123,9016,3839],{"class":133},[123,9018,1315],{"class":129},[123,9020,2711],{"class":133},[123,9022,8951],{"class":133},[123,9024,3035],{"class":129},[123,9026,3643],{"class":133},[123,9028,3708],{"class":129},[123,9030,9031],{"class":2673}," \u002F\u002F4字节(32位的话)\n",[123,9033,9034],{"class":125,"line":713},[123,9035,171],{"class":129},[14,9037,9039],{"id":9038},"_33空指针","3.3空指针",[19,9041,9042],{},"空指针：指针变量指向内存中编号为0的空间",[19,9044,9045],{},"用途：初始化指针变量",[19,9047,9048],{},"注意：空指针指向的内存是不可以访问的",[113,9050,9052],{"className":2608,"code":9051,"language":2610,"meta":118,"style":118},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[120,9053,9054,9062,9066,9071,9085,9090,9105,9110],{"__ignoreMap":118},[123,9055,9056,9058,9060],{"class":125,"line":126},[123,9057,1742],{"class":133},[123,9059,4417],{"class":337},[123,9061,4420],{"class":129},[123,9063,9064],{"class":125,"line":140},[123,9065,186],{"class":129},[123,9067,9068],{"class":125,"line":156},[123,9069,9070],{"class":2673},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[123,9072,9073,9075,9077,9079,9081,9083],{"class":125,"line":168},[123,9074,4429],{"class":133},[123,9076,8951],{"class":133},[123,9078,19],{"class":129},[123,9080,134],{"class":133},[123,9082,4836],{"class":164},[123,9084,3760],{"class":129},[123,9086,9087],{"class":125,"line":268},[123,9088,9089],{"class":2673},"    \u002F\u002F2.空指针不能进行访问\n",[123,9091,9092,9094,9096,9098,9100,9102],{"class":125,"line":291},[123,9093,8836],{"class":133},[123,9095,19],{"class":129},[123,9097,134],{"class":133},[123,9099,259],{"class":164},[123,9101,2670],{"class":129},[123,9103,9104],{"class":2673},"\u002F\u002F直接报错，压根不能访问\n",[123,9106,9107],{"class":125,"line":300},[123,9108,9109],{"class":2673},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[123,9111,9112],{"class":125,"line":305},[123,9113,171],{"class":129},[14,9115,9117],{"id":9116},"_34野指针","3.4野指针",[19,9119,9120],{},[2759,9121,9122],{},"指针变量指向非法的内存空间",[113,9124,9126],{"className":2608,"code":9125,"language":2610,"meta":118,"style":118},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[120,9127,9128,9136,9140,9169,9174,9186],{"__ignoreMap":118},[123,9129,9130,9132,9134],{"class":125,"line":126},[123,9131,1742],{"class":133},[123,9133,4417],{"class":337},[123,9135,4420],{"class":129},[123,9137,9138],{"class":125,"line":140},[123,9139,186],{"class":129},[123,9141,9142,9144,9146,9148,9150,9152,9154,9156,9158,9161,9164,9166],{"class":125,"line":156},[123,9143,4429],{"class":133},[123,9145,8951],{"class":133},[123,9147,19],{"class":129},[123,9149,134],{"class":133},[123,9151,1315],{"class":129},[123,9153,1742],{"class":133},[123,9155,8951],{"class":133},[123,9157,3035],{"class":129},[123,9159,9160],{"class":133},"0x",[123,9162,9163],{"class":164},"1100",[123,9165,2670],{"class":129},[123,9167,9168],{"class":2673}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[123,9170,9171],{"class":125,"line":168},[123,9172,9173],{"class":2673},"    \u002F\u002F访问野指针报错\n",[123,9175,9176,9178,9180,9182,9184],{"class":125,"line":268},[123,9177,4017],{"class":129},[123,9179,8852],{"class":133},[123,9181,19],{"class":129},[123,9183,3643],{"class":133},[123,9185,3665],{"class":129},[123,9187,9188],{"class":125,"line":291},[123,9189,171],{"class":129},[19,9191,9192],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9194,9196],{"id":9195},"_35const修饰指针","3.5const修饰指针",[19,9198,9199],{},"三种情况：",[3606,9201,9202,9205,9208],{},[29,9203,9204],{},"const修饰指针 常量指针",[29,9206,9207],{},"const修饰常量 指针常量",[29,9209,9210],{},"const即修饰指针，又修饰常量",[26,9212,9213],{},[29,9214,9215],{},"常量指针",[113,9217,9219],{"className":2608,"code":9218,"language":2610,"meta":118,"style":118},"const int *p=&a;\n",[120,9220,9221],{"__ignoreMap":118},[123,9222,9223,9226,9228,9230,9232,9234],{"class":125,"line":126},[123,9224,9225],{"class":133},"const",[123,9227,4826],{"class":133},[123,9229,8951],{"class":133},[123,9231,19],{"class":129},[123,9233,8772],{"class":133},[123,9235,8630],{"class":129},[19,9237,9238],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,9240,9241],{"start":140},[29,9242,9243],{},"指针常量",[113,9245,9247],{"className":2608,"code":9246,"language":2610,"meta":118,"style":118},"int *const p=&a;\n",[120,9248,9249],{"__ignoreMap":118},[123,9250,9251,9253,9256,9259,9261],{"class":125,"line":126},[123,9252,1742],{"class":133},[123,9254,9255],{"class":133}," *const",[123,9257,9258],{"class":129}," p",[123,9260,8772],{"class":133},[123,9262,8630],{"class":129},[19,9264,9265],{},"指针的指向不可以改，指针指向的值可以改",[26,9267,9268],{"start":156},[29,9269,9210],{},[113,9271,9273],{"className":2608,"code":9272,"language":2610,"meta":118,"style":118},"const int *const p=&a;\n",[120,9274,9275],{"__ignoreMap":118},[123,9276,9277,9279,9281,9283,9285,9287],{"class":125,"line":126},[123,9278,9225],{"class":133},[123,9280,4826],{"class":133},[123,9282,9255],{"class":133},[123,9284,9258],{"class":129},[123,9286,8772],{"class":133},[123,9288,8630],{"class":129},[19,9290,9291],{},"指针的指向和指针指向的值都不可以改变",[14,9293,9295],{"id":9294},"_36指针和数组","3.6指针和数组",[113,9297,9299],{"className":2608,"code":9298,"language":2610,"meta":118,"style":118},"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",[120,9300,9301,9309,9313,9318,9372,9393,9409,9425,9436,9453,9458,9472,9498,9502,9514,9523,9527],{"__ignoreMap":118},[123,9302,9303,9305,9307],{"class":125,"line":126},[123,9304,1742],{"class":133},[123,9306,4417],{"class":337},[123,9308,4420],{"class":129},[123,9310,9311],{"class":125,"line":140},[123,9312,186],{"class":129},[123,9314,9315],{"class":125,"line":156},[123,9316,9317],{"class":2673},"    \u002F\u002F利用指针访问数组中的元素\n",[123,9319,9320,9322,9324,9326,9328,9330,9332,9334,9336,9338,9340,9342,9344,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364,9366,9368,9370],{"class":125,"line":168},[123,9321,4429],{"class":133},[123,9323,6401],{"class":129},[123,9325,2193],{"class":164},[123,9327,3539],{"class":129},[123,9329,134],{"class":133},[123,9331,3495],{"class":129},[123,9333,2825],{"class":164},[123,9335,2985],{"class":129},[123,9337,2692],{"class":164},[123,9339,2985],{"class":129},[123,9341,2686],{"class":164},[123,9343,2985],{"class":129},[123,9345,2901],{"class":164},[123,9347,2985],{"class":129},[123,9349,2926],{"class":164},[123,9351,2985],{"class":129},[123,9353,2951],{"class":164},[123,9355,2985],{"class":129},[123,9357,2976],{"class":164},[123,9359,2985],{"class":129},[123,9361,2248],{"class":164},[123,9363,2985],{"class":129},[123,9365,3026],{"class":164},[123,9367,2985],{"class":129},[123,9369,2193],{"class":164},[123,9371,6434],{"class":129},[123,9373,9374,9376,9378,9381,9383,9385,9387,9389,9391],{"class":125,"line":268},[123,9375,4017],{"class":129},[123,9377,3643],{"class":133},[123,9379,9380],{"class":143},"\"数组的第一个元素为：\"",[123,9382,3643],{"class":133},[123,9384,6345],{"class":129},[123,9386,2799],{"class":164},[123,9388,3539],{"class":129},[123,9390,3643],{"class":133},[123,9392,3665],{"class":129},[123,9394,9395,9397,9399,9401,9403,9406],{"class":125,"line":291},[123,9396,4429],{"class":133},[123,9398,8951],{"class":133},[123,9400,19],{"class":129},[123,9402,134],{"class":133},[123,9404,9405],{"class":129},"arr;",[123,9407,9408],{"class":2673},"\u002F\u002F注意数才要加取地址符号&\n",[123,9410,9411,9413,9415,9417,9419,9421,9423],{"class":125,"line":300},[123,9412,4017],{"class":129},[123,9414,3643],{"class":133},[123,9416,9380],{"class":143},[123,9418,8852],{"class":133},[123,9420,19],{"class":129},[123,9422,3643],{"class":133},[123,9424,3665],{"class":129},[123,9426,9427,9429,9431,9433],{"class":125,"line":305},[123,9428,8769],{"class":129},[123,9430,4736],{"class":133},[123,9432,2670],{"class":129},[123,9434,9435],{"class":2673}," \u002F\u002F让指针向后偏移4个字节\n",[123,9437,9438,9440,9442,9445,9447,9449,9451],{"class":125,"line":316},[123,9439,4017],{"class":129},[123,9441,3643],{"class":133},[123,9443,9444],{"class":143},"\"数组的第二个元素为：\"",[123,9446,8852],{"class":133},[123,9448,19],{"class":129},[123,9450,3643],{"class":133},[123,9452,3665],{"class":129},[123,9454,9455],{"class":125,"line":673},[123,9456,9457],{"class":2673},"    \u002F\u002F利用指针遍历数组\n",[123,9459,9460,9462,9464,9467,9469],{"class":125,"line":692},[123,9461,4429],{"class":133},[123,9463,8951],{"class":133},[123,9465,9466],{"class":129},"p2",[123,9468,134],{"class":133},[123,9470,9471],{"class":129},"arr;\n",[123,9473,9474,9476,9478,9480,9482,9484,9486,9488,9490,9492,9494,9496],{"class":125,"line":713},[123,9475,5641],{"class":133},[123,9477,4116],{"class":129},[123,9479,1742],{"class":133},[123,9481,5473],{"class":129},[123,9483,134],{"class":133},[123,9485,2799],{"class":164},[123,9487,5480],{"class":129},[123,9489,3509],{"class":133},[123,9491,2193],{"class":164},[123,9493,5480],{"class":129},[123,9495,4736],{"class":133},[123,9497,288],{"class":129},[123,9499,9500],{"class":125,"line":718},[123,9501,4474],{"class":129},[123,9503,9504,9506,9508,9510,9512],{"class":125,"line":1138},[123,9505,5891],{"class":129},[123,9507,8852],{"class":133},[123,9509,9466],{"class":129},[123,9511,3643],{"class":133},[123,9513,3665],{"class":129},[123,9515,9516,9519,9521],{"class":125,"line":1429},[123,9517,9518],{"class":129},"        p2",[123,9520,4736],{"class":133},[123,9522,3760],{"class":129},[123,9524,9525],{"class":125,"line":1439},[123,9526,4631],{"class":129},[123,9528,9529],{"class":125,"line":1444},[123,9530,171],{"class":129},[14,9532,9534],{"id":9533},"_37指针和函数","3.7指针和函数",[19,9536,9537],{},"利用指针做函数参数，可以修改实参的值",[19,9539,9540],{},"值传递：只改变形参，不改变实参",[19,9542,9543],{},"地址传递：",[113,9545,9547],{"className":2608,"code":9546,"language":2610,"meta":118,"style":118},"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",[120,9548,9549,9574,9578,9590,9601,9611,9615,9623,9627,9639,9651,9656,9672,9687,9702],{"__ignoreMap":118},[123,9550,9551,9553,9555,9557,9559,9561,9564,9566,9568,9570,9572],{"class":125,"line":126},[123,9552,7797],{"class":133},[123,9554,7800],{"class":337},[123,9556,1315],{"class":129},[123,9558,1742],{"class":133},[123,9560,8951],{"class":133},[123,9562,9563],{"class":279},"p1",[123,9565,2985],{"class":129},[123,9567,1742],{"class":133},[123,9569,8951],{"class":133},[123,9571,9466],{"class":279},[123,9573,288],{"class":129},[123,9575,9576],{"class":125,"line":140},[123,9577,186],{"class":129},[123,9579,9580,9582,9584,9587],{"class":125,"line":156},[123,9581,4429],{"class":133},[123,9583,6694],{"class":129},[123,9585,9586],{"class":133},"=*",[123,9588,9589],{"class":129},"p1;\n",[123,9591,9592,9594,9596,9598],{"class":125,"line":168},[123,9593,8836],{"class":133},[123,9595,9563],{"class":129},[123,9597,9586],{"class":133},[123,9599,9600],{"class":129},"p2;\n",[123,9602,9603,9605,9607,9609],{"class":125,"line":268},[123,9604,8836],{"class":133},[123,9606,9466],{"class":129},[123,9608,134],{"class":133},[123,9610,6719],{"class":129},[123,9612,9613],{"class":125,"line":291},[123,9614,171],{"class":129},[123,9616,9617,9619,9621],{"class":125,"line":300},[123,9618,1742],{"class":133},[123,9620,4417],{"class":337},[123,9622,4420],{"class":129},[123,9624,9625],{"class":125,"line":305},[123,9626,186],{"class":129},[123,9628,9629,9631,9633,9635,9637],{"class":125,"line":316},[123,9630,4429],{"class":133},[123,9632,3865],{"class":129},[123,9634,134],{"class":133},[123,9636,2193],{"class":164},[123,9638,3760],{"class":129},[123,9640,9641,9643,9645,9647,9649],{"class":125,"line":673},[123,9642,4429],{"class":133},[123,9644,5275],{"class":129},[123,9646,134],{"class":133},[123,9648,3302],{"class":164},[123,9650,3760],{"class":129},[123,9652,9653],{"class":125,"line":692},[123,9654,9655],{"class":2673},"    \u002F\u002F地址传递\n",[123,9657,9658,9660,9662,9664,9667,9669],{"class":125,"line":713},[123,9659,7994],{"class":337},[123,9661,1315],{"class":129},[123,9663,2960],{"class":133},[123,9665,9666],{"class":129},"a,",[123,9668,2960],{"class":133},[123,9670,9671],{"class":129},"b);\n",[123,9673,9674,9676,9678,9680,9682,9684],{"class":125,"line":718},[123,9675,4017],{"class":129},[123,9677,3643],{"class":133},[123,9679,2846],{"class":129},[123,9681,3643],{"class":133},[123,9683,3708],{"class":129},[123,9685,9686],{"class":2673},"\u002F\u002F20\n",[123,9688,9689,9691,9693,9695,9697,9699],{"class":125,"line":1138},[123,9690,4017],{"class":129},[123,9692,3643],{"class":133},[123,9694,2871],{"class":129},[123,9696,3643],{"class":133},[123,9698,3708],{"class":129},[123,9700,9701],{"class":2673},"\u002F\u002F10\n",[123,9703,9704],{"class":125,"line":1429},[123,9705,171],{"class":129},[19,9707,9708],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9710,9712],{"id":9711},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9714,9715],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9717,9718,9719,9721],{},"例如数组：int arr",[123,9720,2193],{},"={4,3,6,9,1,2,10,8,7,5}",[113,9723,9725],{"className":2608,"code":9724,"language":2610,"meta":118,"style":118},"#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",[120,9726,9727,9733,9743,9767,9771,9802,9806,9840,9844,9862,9866,9877,9892,9907,9911,9915,9919,9923,9927,9935,9939,9944,9998,10010,10022,10027,10035,10039,10044,10069,10073,10087,10096,10100],{"__ignoreMap":118},[123,9728,9729,9731],{"class":125,"line":126},[123,9730,4394],{"class":133},[123,9732,4397],{"class":143},[123,9734,9735,9737,9739,9741],{"class":125,"line":140},[123,9736,4402],{"class":133},[123,9738,4405],{"class":133},[123,9740,4408],{"class":337},[123,9742,3760],{"class":129},[123,9744,9745,9747,9750,9752,9754,9756,9758,9760,9762,9765],{"class":125,"line":156},[123,9746,7797],{"class":133},[123,9748,9749],{"class":337}," bubbleSort",[123,9751,1315],{"class":129},[123,9753,1742],{"class":133},[123,9755,8951],{"class":133},[123,9757,19],{"class":279},[123,9759,2985],{"class":129},[123,9761,1742],{"class":133},[123,9763,9764],{"class":279}," len",[123,9766,288],{"class":129},[123,9768,9769],{"class":125,"line":168},[123,9770,186],{"class":129},[123,9772,9773,9775,9777,9779,9781,9783,9785,9787,9789,9792,9794,9796,9798,9800],{"class":125,"line":268},[123,9774,5641],{"class":133},[123,9776,1315],{"class":129},[123,9778,1742],{"class":133},[123,9780,5473],{"class":129},[123,9782,134],{"class":133},[123,9784,2799],{"class":164},[123,9786,5480],{"class":129},[123,9788,3509],{"class":133},[123,9790,9791],{"class":129},"len",[123,9793,3135],{"class":133},[123,9795,2825],{"class":164},[123,9797,5480],{"class":129},[123,9799,4736],{"class":133},[123,9801,288],{"class":129},[123,9803,9804],{"class":125,"line":291},[123,9805,4474],{"class":129},[123,9807,9808,9810,9812,9814,9816,9818,9820,9822,9824,9826,9828,9830,9832,9834,9836,9838],{"class":125,"line":300},[123,9809,5843],{"class":133},[123,9811,1315],{"class":129},[123,9813,1742],{"class":133},[123,9815,5850],{"class":129},[123,9817,134],{"class":133},[123,9819,2799],{"class":164},[123,9821,5857],{"class":129},[123,9823,3509],{"class":133},[123,9825,9791],{"class":129},[123,9827,3135],{"class":133},[123,9829,3047],{"class":129},[123,9831,3135],{"class":133},[123,9833,2825],{"class":164},[123,9835,5857],{"class":129},[123,9837,4736],{"class":133},[123,9839,288],{"class":129},[123,9841,9842],{"class":125,"line":305},[123,9843,4953],{"class":129},[123,9845,9846,9848,9851,9853,9856,9858,9860],{"class":125,"line":316},[123,9847,7079],{"class":133},[123,9849,9850],{"class":129},"(p[j]",[123,9852,3559],{"class":133},[123,9854,9855],{"class":129},"p[j",[123,9857,3086],{"class":133},[123,9859,2825],{"class":164},[123,9861,444],{"class":129},[123,9863,9864],{"class":125,"line":673},[123,9865,7098],{"class":129},[123,9867,9868,9870,9872,9874],{"class":125,"line":692},[123,9869,7103],{"class":133},[123,9871,6694],{"class":129},[123,9873,134],{"class":133},[123,9875,9876],{"class":129},"p[j];\n",[123,9878,9879,9882,9884,9886,9888,9890],{"class":125,"line":713},[123,9880,9881],{"class":129},"                p[j]",[123,9883,134],{"class":133},[123,9885,9855],{"class":129},[123,9887,3086],{"class":133},[123,9889,2825],{"class":164},[123,9891,7126],{"class":129},[123,9893,9894,9897,9899,9901,9903,9905],{"class":125,"line":718},[123,9895,9896],{"class":129},"                p[j",[123,9898,3086],{"class":133},[123,9900,2825],{"class":164},[123,9902,3539],{"class":129},[123,9904,134],{"class":133},[123,9906,6719],{"class":129},[123,9908,9909],{"class":125,"line":1138},[123,9910,7146],{"class":129},[123,9912,9913],{"class":125,"line":1429},[123,9914,4972],{"class":129},[123,9916,9917],{"class":125,"line":1439},[123,9918,4631],{"class":129},[123,9920,9921],{"class":125,"line":1444},[123,9922,171],{"class":129},[123,9924,9925],{"class":125,"line":1453},[123,9926,232],{"emptyLinePlaceholder":231},[123,9928,9929,9931,9933],{"class":125,"line":1458},[123,9930,1742],{"class":133},[123,9932,4417],{"class":337},[123,9934,4420],{"class":129},[123,9936,9937],{"class":125,"line":1476},[123,9938,186],{"class":129},[123,9940,9941],{"class":125,"line":1494},[123,9942,9943],{"class":2673},"    \u002F\u002F 1.创建数组\n",[123,9945,9946,9948,9950,9952,9954,9956,9958,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990,9992,9994,9996],{"class":125,"line":1499},[123,9947,4429],{"class":133},[123,9949,6401],{"class":129},[123,9951,2193],{"class":164},[123,9953,3539],{"class":129},[123,9955,134],{"class":133},[123,9957,3495],{"class":129},[123,9959,2901],{"class":164},[123,9961,2985],{"class":129},[123,9963,2686],{"class":164},[123,9965,2985],{"class":129},[123,9967,2951],{"class":164},[123,9969,2985],{"class":129},[123,9971,3026],{"class":164},[123,9973,2985],{"class":129},[123,9975,2825],{"class":164},[123,9977,2985],{"class":129},[123,9979,2692],{"class":164},[123,9981,2985],{"class":129},[123,9983,2193],{"class":164},[123,9985,2985],{"class":129},[123,9987,2248],{"class":164},[123,9989,2985],{"class":129},[123,9991,2976],{"class":164},[123,9993,2985],{"class":129},[123,9995,2926],{"class":164},[123,9997,6434],{"class":129},[123,9999,10000,10002,10004,10006,10008],{"class":125,"line":1517},[123,10001,4429],{"class":133},[123,10003,9764],{"class":129},[123,10005,134],{"class":133},[123,10007,2193],{"class":164},[123,10009,3760],{"class":129},[123,10011,10012,10014,10016,10018,10020],{"class":125,"line":1534},[123,10013,4429],{"class":133},[123,10015,8951],{"class":133},[123,10017,19],{"class":129},[123,10019,134],{"class":133},[123,10021,9471],{"class":129},[123,10023,10024],{"class":125,"line":1539},[123,10025,10026],{"class":2673},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[123,10028,10029,10032],{"class":125,"line":2080},[123,10030,10031],{"class":337},"    bubbleSort",[123,10033,10034],{"class":129},"(p,len);\n",[123,10036,10037],{"class":125,"line":2097},[123,10038,232],{"emptyLinePlaceholder":231},[123,10040,10041],{"class":125,"line":2114},[123,10042,10043],{"class":2673},"    \u002F\u002F 3.打印排序后的数组\n",[123,10045,10046,10048,10050,10052,10054,10056,10058,10060,10062,10065,10067],{"class":125,"line":2125},[123,10047,5641],{"class":133},[123,10049,4116],{"class":129},[123,10051,1742],{"class":133},[123,10053,5473],{"class":129},[123,10055,134],{"class":133},[123,10057,2799],{"class":164},[123,10059,5654],{"class":129},[123,10061,3509],{"class":133},[123,10063,10064],{"class":129},"len; i",[123,10066,4736],{"class":133},[123,10068,288],{"class":129},[123,10070,10071],{"class":125,"line":2130},[123,10072,4474],{"class":129},[123,10074,10075,10077,10079,10081,10083,10085],{"class":125,"line":5033},[123,10076,5891],{"class":129},[123,10078,8852],{"class":133},[123,10080,19],{"class":129},[123,10082,3643],{"class":133},[123,10084,1629],{"class":143},[123,10086,3760],{"class":129},[123,10088,10089,10092,10094],{"class":125,"line":5041},[123,10090,10091],{"class":129},"        p",[123,10093,4736],{"class":133},[123,10095,3760],{"class":129},[123,10097,10098],{"class":125,"line":5046},[123,10099,4631],{"class":129},[123,10101,10102],{"class":125,"line":5052},[123,10103,171],{"class":129},[2526,10105,10106],{},"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":118,"searchDepth":140,"depth":140,"links":10108},[10109,10110,10111,10112,10113,10114,10115,10116],{"id":8716,"depth":140,"text":8717},{"id":8882,"depth":140,"text":8883},{"id":9038,"depth":140,"text":9039},{"id":9116,"depth":140,"text":9117},{"id":9195,"depth":140,"text":9196},{"id":9294,"depth":140,"text":9295},{"id":9533,"depth":140,"text":9534},{"id":9711,"depth":140,"text":9712},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8705,"description":8713},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10123,"title":10124,"body":10125,"description":10132,"extension":2545,"meta":13106,"navigation":231,"path":13107,"seo":13108,"stem":13109,"__hash__":13110},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10126,"toc":13097},[10127,10130,10133,10137,10140,10143,10154,10492,10495,10499,10502,10509,10764,10768,10771,10774,10929,10933,10936,10939,11145,11149,11152,11455,11458,11466,11470,11473,11624,11626,11637,11694,11698,11703,12360,12368,12371,12465,12468,13088,13094],[10,10128,10124],{"id":10129},"_4结构体",[19,10131,10132],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10134,10136],{"id":10135},"_41结构体定义与使用","4.1结构体定义与使用",[19,10138,10139],{},"语法：struct 结构体名 {结构体成员列表}；",[19,10141,10142],{},"通过结构体创建变量的方式：",[3606,10144,10145,10148,10151],{},[29,10146,10147],{},"struct 结构体名 变量名",[29,10149,10150],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,10152,10153],{},"定义结构体时顺便创建变量",[113,10155,10157],{"className":2608,"code":10156,"language":2610,"meta":118,"style":118},"#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",[120,10158,10159,10165,10175,10182,10187,10195,10199,10204,10208,10213,10218,10223,10230,10235,10242,10246,10253,10257,10261,10265,10269,10273,10277,10283,10287,10293,10301,10309,10313,10318,10323,10334,10339,10351,10362,10373,10378,10402,10407,10413,10440,10445,10451,10463,10475,10487],{"__ignoreMap":118},[123,10160,10161,10163],{"class":125,"line":126},[123,10162,4394],{"class":133},[123,10164,4397],{"class":143},[123,10166,10167,10169,10171,10173],{"class":125,"line":140},[123,10168,4402],{"class":133},[123,10170,4405],{"class":133},[123,10172,4408],{"class":337},[123,10174,3760],{"class":129},[123,10176,10177,10179],{"class":125,"line":156},[123,10178,4394],{"class":133},[123,10180,10181],{"class":143},"\u003Cstring>\n",[123,10183,10184],{"class":125,"line":168},[123,10185,10186],{"class":2673},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[123,10188,10189,10192],{"class":125,"line":268},[123,10190,10191],{"class":133},"struct",[123,10193,10194],{"class":337}," Student\n",[123,10196,10197],{"class":125,"line":291},[123,10198,186],{"class":129},[123,10200,10201],{"class":125,"line":300},[123,10202,10203],{"class":2673},"    \u002F\u002F成员列表\n",[123,10205,10206],{"class":125,"line":305},[123,10207,232],{"emptyLinePlaceholder":231},[123,10209,10210],{"class":125,"line":316},[123,10211,10212],{"class":2673},"    \u002F\u002F姓名\n",[123,10214,10215],{"class":125,"line":673},[123,10216,10217],{"class":129},"    string name;\n",[123,10219,10220],{"class":125,"line":692},[123,10221,10222],{"class":2673},"    \u002F\u002F年龄\n",[123,10224,10225,10227],{"class":125,"line":713},[123,10226,4429],{"class":133},[123,10228,10229],{"class":129}," age;\n",[123,10231,10232],{"class":125,"line":718},[123,10233,10234],{"class":2673},"    \u002F\u002F分数\n",[123,10236,10237,10239],{"class":125,"line":1138},[123,10238,4429],{"class":133},[123,10240,10241],{"class":129}," score;\n",[123,10243,10244],{"class":125,"line":1429},[123,10245,6434],{"class":129},[123,10247,10248,10250],{"class":125,"line":1439},[123,10249,10191],{"class":133},[123,10251,10252],{"class":337}," School\n",[123,10254,10255],{"class":125,"line":1444},[123,10256,186],{"class":129},[123,10258,10259],{"class":125,"line":1453},[123,10260,10203],{"class":2673},[123,10262,10263],{"class":125,"line":1458},[123,10264,232],{"emptyLinePlaceholder":231},[123,10266,10267],{"class":125,"line":1476},[123,10268,10212],{"class":2673},[123,10270,10271],{"class":125,"line":1494},[123,10272,10217],{"class":129},[123,10274,10275],{"class":125,"line":1499},[123,10276,10222],{"class":2673},[123,10278,10279,10281],{"class":125,"line":1517},[123,10280,4429],{"class":133},[123,10282,10229],{"class":129},[123,10284,10285],{"class":125,"line":1534},[123,10286,10234],{"class":2673},[123,10288,10289,10291],{"class":125,"line":1539},[123,10290,4429],{"class":133},[123,10292,10241],{"class":129},[123,10294,10295,10298],{"class":125,"line":2080},[123,10296,10297],{"class":129},"} s3;",[123,10299,10300],{"class":2673}," \u002F\u002F创建结构体时就创建了变量\n",[123,10302,10303,10305,10307],{"class":125,"line":2097},[123,10304,1742],{"class":133},[123,10306,4417],{"class":337},[123,10308,4420],{"class":129},[123,10310,10311],{"class":125,"line":2114},[123,10312,186],{"class":129},[123,10314,10315],{"class":125,"line":2125},[123,10316,10317],{"class":2673},"    \u002F\u002F2.通过学生类型创建具体学生\n",[123,10319,10320],{"class":125,"line":2130},[123,10321,10322],{"class":2673},"    \u002F\u002F2.1 struct Student s1;\n",[123,10324,10325,10328,10331],{"class":125,"line":5033},[123,10326,10327],{"class":133},"    struct",[123,10329,10330],{"class":337}," Student",[123,10332,10333],{"class":129}," s1;\n",[123,10335,10336],{"class":125,"line":5041},[123,10337,10338],{"class":2673},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[123,10340,10341,10344,10346,10349],{"class":125,"line":5046},[123,10342,10343],{"class":129},"    s1.name",[123,10345,134],{"class":133},[123,10347,10348],{"class":143},"\"张三\"",[123,10350,3760],{"class":129},[123,10352,10353,10356,10358,10360],{"class":125,"line":5052},[123,10354,10355],{"class":129},"    s1.age",[123,10357,134],{"class":133},[123,10359,3252],{"class":164},[123,10361,3760],{"class":129},[123,10363,10364,10367,10369,10371],{"class":125,"line":5058},[123,10365,10366],{"class":129},"    s1.score",[123,10368,134],{"class":133},[123,10370,2862],{"class":164},[123,10372,3760],{"class":129},[123,10374,10375],{"class":125,"line":5063},[123,10376,10377],{"class":2673},"    \u002F\u002F输出结果\n",[123,10379,10381,10383,10385,10388,10390,10393,10395,10398,10400],{"class":125,"line":10380},37,[123,10382,4017],{"class":129},[123,10384,3643],{"class":133},[123,10386,10387],{"class":129},"s1.name",[123,10389,3643],{"class":133},[123,10391,10392],{"class":129},"s1.age",[123,10394,3643],{"class":133},[123,10396,10397],{"class":129},"s1.score",[123,10399,3643],{"class":133},[123,10401,3665],{"class":129},[123,10403,10405],{"class":125,"line":10404},38,[123,10406,232],{"emptyLinePlaceholder":231},[123,10408,10410],{"class":125,"line":10409},39,[123,10411,10412],{"class":2673},"    \u002F\u002F2.2 struct Student s2={...}\n",[123,10414,10416,10418,10420,10423,10425,10427,10430,10432,10434,10436,10438],{"class":125,"line":10415},40,[123,10417,10327],{"class":133},[123,10419,10330],{"class":337},[123,10421,10422],{"class":129}," s2",[123,10424,134],{"class":133},[123,10426,3495],{"class":129},[123,10428,10429],{"class":143},"\"王五\"",[123,10431,2985],{"class":129},[123,10433,3252],{"class":164},[123,10435,2985],{"class":129},[123,10437,2862],{"class":164},[123,10439,6434],{"class":129},[123,10441,10443],{"class":125,"line":10442},41,[123,10444,232],{"emptyLinePlaceholder":231},[123,10446,10448],{"class":125,"line":10447},42,[123,10449,10450],{"class":2673},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[123,10452,10454,10457,10459,10461],{"class":125,"line":10453},43,[123,10455,10456],{"class":129},"    s3.name",[123,10458,134],{"class":133},[123,10460,6118],{"class":143},[123,10462,3760],{"class":129},[123,10464,10466,10469,10471,10473],{"class":125,"line":10465},44,[123,10467,10468],{"class":129},"    s3.age",[123,10470,134],{"class":133},[123,10472,3252],{"class":164},[123,10474,3760],{"class":129},[123,10476,10478,10481,10483,10485],{"class":125,"line":10477},45,[123,10479,10480],{"class":129},"    s3.score",[123,10482,134],{"class":133},[123,10484,3302],{"class":164},[123,10486,3760],{"class":129},[123,10488,10490],{"class":125,"line":10489},46,[123,10491,171],{"class":129},[19,10493,10494],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10496,10498],{"id":10497},"_42结构体数组","4.2结构体数组",[19,10500,10501],{},"将自定义的结构体放入到数组中方便维护",[19,10503,10504,10505,10508],{},"语法：struct 结构体名 数组名",[123,10506,10507],{},"元素个数","={ {}，{},...{} };",[113,10510,10512],{"className":2608,"code":10511,"language":2610,"meta":118,"style":118},"#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",[120,10513,10514,10520,10530,10536,10541,10547,10551,10555,10561,10567,10571,10575,10583,10587,10592,10607,10611,10627,10643,10647,10652,10668,10683,10698,10703,10729,10733,10756,10760],{"__ignoreMap":118},[123,10515,10516,10518],{"class":125,"line":126},[123,10517,4394],{"class":133},[123,10519,4397],{"class":143},[123,10521,10522,10524,10526,10528],{"class":125,"line":140},[123,10523,4402],{"class":133},[123,10525,4405],{"class":133},[123,10527,4408],{"class":337},[123,10529,3760],{"class":129},[123,10531,10532,10534],{"class":125,"line":156},[123,10533,4394],{"class":133},[123,10535,10181],{"class":143},[123,10537,10538],{"class":125,"line":168},[123,10539,10540],{"class":2673},"\u002F\u002F1.定义结构体\n",[123,10542,10543,10545],{"class":125,"line":268},[123,10544,10191],{"class":133},[123,10546,10194],{"class":337},[123,10548,10549],{"class":125,"line":291},[123,10550,186],{"class":129},[123,10552,10553],{"class":125,"line":300},[123,10554,10217],{"class":129},[123,10556,10557,10559],{"class":125,"line":305},[123,10558,4429],{"class":133},[123,10560,10229],{"class":129},[123,10562,10563,10565],{"class":125,"line":316},[123,10564,4429],{"class":133},[123,10566,10241],{"class":129},[123,10568,10569],{"class":125,"line":673},[123,10570,232],{"emptyLinePlaceholder":231},[123,10572,10573],{"class":125,"line":692},[123,10574,6434],{"class":129},[123,10576,10577,10579,10581],{"class":125,"line":713},[123,10578,1742],{"class":133},[123,10580,4417],{"class":337},[123,10582,4420],{"class":129},[123,10584,10585],{"class":125,"line":718},[123,10586,186],{"class":129},[123,10588,10589],{"class":125,"line":1138},[123,10590,10591],{"class":2673},"    \u002F\u002F2.创建结构体数组\n",[123,10593,10594,10596,10598,10601,10603,10605],{"class":125,"line":1429},[123,10595,10327],{"class":133},[123,10597,10330],{"class":337},[123,10599,10600],{"class":129}," stuArray[",[123,10602,2692],{"class":164},[123,10604,3539],{"class":129},[123,10606,7344],{"class":133},[123,10608,10609],{"class":125,"line":1439},[123,10610,4474],{"class":129},[123,10612,10613,10615,10617,10619,10621,10623,10625],{"class":125,"line":1444},[123,10614,2176],{"class":129},[123,10616,10348],{"class":143},[123,10618,2985],{"class":129},[123,10620,3252],{"class":164},[123,10622,2985],{"class":129},[123,10624,259],{"class":164},[123,10626,1202],{"class":129},[123,10628,10629,10631,10633,10635,10637,10639,10641],{"class":125,"line":1453},[123,10630,2176],{"class":129},[123,10632,6118],{"class":143},[123,10634,2985],{"class":129},[123,10636,3178],{"class":164},[123,10638,2985],{"class":129},[123,10640,3178],{"class":164},[123,10642,171],{"class":129},[123,10644,10645],{"class":125,"line":1458},[123,10646,4631],{"class":129},[123,10648,10649],{"class":125,"line":1476},[123,10650,10651],{"class":2673},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[123,10653,10654,10657,10659,10662,10664,10666],{"class":125,"line":1494},[123,10655,10656],{"class":129},"    stuArray[",[123,10658,2825],{"class":164},[123,10660,10661],{"class":129},"].name",[123,10663,134],{"class":133},[123,10665,6141],{"class":143},[123,10667,3760],{"class":129},[123,10669,10670,10672,10674,10677,10679,10681],{"class":125,"line":1499},[123,10671,10656],{"class":129},[123,10673,2825],{"class":164},[123,10675,10676],{"class":129},"].age",[123,10678,134],{"class":133},[123,10680,2692],{"class":164},[123,10682,3760],{"class":129},[123,10684,10685,10687,10689,10692,10694,10696],{"class":125,"line":1517},[123,10686,10656],{"class":129},[123,10688,2825],{"class":164},[123,10690,10691],{"class":129},"].score",[123,10693,134],{"class":133},[123,10695,2692],{"class":164},[123,10697,3760],{"class":129},[123,10699,10700],{"class":125,"line":1534},[123,10701,10702],{"class":2673},"    \u002F\u002F4.遍历结构体数组\n",[123,10704,10705,10707,10709,10711,10713,10715,10717,10719,10721,10723,10725,10727],{"class":125,"line":1539},[123,10706,5641],{"class":133},[123,10708,4116],{"class":129},[123,10710,1742],{"class":133},[123,10712,5473],{"class":129},[123,10714,134],{"class":133},[123,10716,2799],{"class":164},[123,10718,5480],{"class":129},[123,10720,3509],{"class":133},[123,10722,2692],{"class":164},[123,10724,5480],{"class":129},[123,10726,4736],{"class":133},[123,10728,288],{"class":129},[123,10730,10731],{"class":125,"line":2080},[123,10732,4474],{"class":129},[123,10734,10735,10737,10739,10742,10744,10747,10749,10752,10754],{"class":125,"line":2097},[123,10736,5891],{"class":129},[123,10738,3643],{"class":133},[123,10740,10741],{"class":129},"stuArray[i].name",[123,10743,3643],{"class":133},[123,10745,10746],{"class":129},"stuArray[i].age",[123,10748,3643],{"class":133},[123,10750,10751],{"class":129},"stuArray[i].score",[123,10753,3643],{"class":133},[123,10755,3665],{"class":129},[123,10757,10758],{"class":125,"line":2114},[123,10759,4631],{"class":129},[123,10761,10762],{"class":125,"line":2125},[123,10763,171],{"class":129},[14,10765,10767],{"id":10766},"_43结构体指针","4.3结构体指针",[19,10769,10770],{},"作用：通过指针访问结构体中的成员",[19,10772,10773],{},"利用操作符->可以通过结构体指针访问结构体属性",[113,10775,10777],{"className":2608,"code":10776,"language":2610,"meta":118,"style":118},"#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",[120,10778,10779,10785,10795,10801,10805,10811,10815,10819,10825,10831,10835,10843,10847,10852,10877,10882,10897,10902,10925],{"__ignoreMap":118},[123,10780,10781,10783],{"class":125,"line":126},[123,10782,4394],{"class":133},[123,10784,4397],{"class":143},[123,10786,10787,10789,10791,10793],{"class":125,"line":140},[123,10788,4402],{"class":133},[123,10790,4405],{"class":133},[123,10792,4408],{"class":337},[123,10794,3760],{"class":129},[123,10796,10797,10799],{"class":125,"line":156},[123,10798,4394],{"class":133},[123,10800,10181],{"class":143},[123,10802,10803],{"class":125,"line":168},[123,10804,10540],{"class":2673},[123,10806,10807,10809],{"class":125,"line":268},[123,10808,10191],{"class":133},[123,10810,10194],{"class":337},[123,10812,10813],{"class":125,"line":291},[123,10814,186],{"class":129},[123,10816,10817],{"class":125,"line":300},[123,10818,10217],{"class":129},[123,10820,10821,10823],{"class":125,"line":305},[123,10822,4429],{"class":133},[123,10824,10229],{"class":129},[123,10826,10827,10829],{"class":125,"line":316},[123,10828,4429],{"class":133},[123,10830,10241],{"class":129},[123,10832,10833],{"class":125,"line":673},[123,10834,6434],{"class":129},[123,10836,10837,10839,10841],{"class":125,"line":692},[123,10838,1742],{"class":133},[123,10840,4417],{"class":337},[123,10842,4420],{"class":129},[123,10844,10845],{"class":125,"line":713},[123,10846,186],{"class":129},[123,10848,10849],{"class":125,"line":718},[123,10850,10851],{"class":2673},"    \u002F\u002F创建学生结构体变量\n",[123,10853,10854,10856,10858,10861,10863,10865,10867,10869,10871,10873,10875],{"class":125,"line":1138},[123,10855,10327],{"class":133},[123,10857,10330],{"class":337},[123,10859,10860],{"class":129}," s",[123,10862,134],{"class":133},[123,10864,3495],{"class":129},[123,10866,10348],{"class":143},[123,10868,2985],{"class":129},[123,10870,3252],{"class":164},[123,10872,2985],{"class":129},[123,10874,1045],{"class":164},[123,10876,6434],{"class":129},[123,10878,10879],{"class":125,"line":1429},[123,10880,10881],{"class":2673},"    \u002F\u002F通过指针指向结构体变量\n",[123,10883,10884,10886,10888,10890,10892,10894],{"class":125,"line":1439},[123,10885,10327],{"class":133},[123,10887,10330],{"class":337},[123,10889,8951],{"class":133},[123,10891,19],{"class":129},[123,10893,8772],{"class":133},[123,10895,10896],{"class":129},"s\n",[123,10898,10899],{"class":125,"line":1444},[123,10900,10901],{"class":2673},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[123,10903,10904,10906,10908,10911,10913,10916,10918,10921,10923],{"class":125,"line":1453},[123,10905,4017],{"class":129},[123,10907,3643],{"class":133},[123,10909,10910],{"class":129},"p->name",[123,10912,3643],{"class":133},[123,10914,10915],{"class":129},"p->age",[123,10917,3643],{"class":133},[123,10919,10920],{"class":129},"p->score",[123,10922,3643],{"class":133},[123,10924,3665],{"class":129},[123,10926,10927],{"class":125,"line":1458},[123,10928,171],{"class":129},[14,10930,10932],{"id":10931},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10934,10935],{},"作用：结构体中的成员可以是另一个结构体",[19,10937,10938],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[113,10940,10942],{"className":2608,"code":10941,"language":2610,"meta":118,"style":118},"#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",[120,10943,10944,10950,10960,10966,10971,10979,10983,10987,10993,10999,11003,11008,11015,11019,11026,11030,11036,11041,11045,11053,11057,11062,11067,11072,11083,11095,11106,11119,11130,11141],{"__ignoreMap":118},[123,10945,10946,10948],{"class":125,"line":126},[123,10947,4394],{"class":133},[123,10949,4397],{"class":143},[123,10951,10952,10954,10956,10958],{"class":125,"line":140},[123,10953,4402],{"class":133},[123,10955,4405],{"class":133},[123,10957,4408],{"class":337},[123,10959,3760],{"class":129},[123,10961,10962,10964],{"class":125,"line":156},[123,10963,4394],{"class":133},[123,10965,10181],{"class":143},[123,10967,10968],{"class":125,"line":168},[123,10969,10970],{"class":2673},"\u002F\u002F定义学生结构体\n",[123,10972,10973,10975,10977],{"class":125,"line":268},[123,10974,10191],{"class":133},[123,10976,10330],{"class":337},[123,10978,5116],{"class":129},[123,10980,10981],{"class":125,"line":291},[123,10982,186],{"class":129},[123,10984,10985],{"class":125,"line":300},[123,10986,10217],{"class":129},[123,10988,10989,10991],{"class":125,"line":305},[123,10990,4429],{"class":133},[123,10992,10229],{"class":129},[123,10994,10995,10997],{"class":125,"line":316},[123,10996,4429],{"class":133},[123,10998,10241],{"class":129},[123,11000,11001],{"class":125,"line":673},[123,11002,171],{"class":129},[123,11004,11005],{"class":125,"line":692},[123,11006,11007],{"class":2673},"\u002F\u002F定义老师结构体\n",[123,11009,11010,11012],{"class":125,"line":713},[123,11011,10191],{"class":133},[123,11013,11014],{"class":337}," Teacher\n",[123,11016,11017],{"class":125,"line":718},[123,11018,186],{"class":129},[123,11020,11021,11023],{"class":125,"line":1138},[123,11022,4429],{"class":133},[123,11024,11025],{"class":129}," id;\n",[123,11027,11028],{"class":125,"line":1429},[123,11029,10217],{"class":129},[123,11031,11032,11034],{"class":125,"line":1439},[123,11033,4429],{"class":133},[123,11035,10229],{"class":129},[123,11037,11038],{"class":125,"line":1444},[123,11039,11040],{"class":129},"    Student stu;\n",[123,11042,11043],{"class":125,"line":1453},[123,11044,171],{"class":129},[123,11046,11047,11049,11051],{"class":125,"line":1458},[123,11048,1742],{"class":133},[123,11050,4417],{"class":337},[123,11052,8411],{"class":129},[123,11054,11055],{"class":125,"line":1476},[123,11056,186],{"class":129},[123,11058,11059],{"class":125,"line":1494},[123,11060,11061],{"class":2673},"    \u002F\u002F结构体嵌套结构体\n",[123,11063,11064],{"class":125,"line":1499},[123,11065,11066],{"class":2673},"    \u002F\u002F创建老师\n",[123,11068,11069],{"class":125,"line":1517},[123,11070,11071],{"class":129},"    Teacher t;\n",[123,11073,11074,11077,11079,11081],{"class":125,"line":1534},[123,11075,11076],{"class":129},"    t.id",[123,11078,134],{"class":133},[123,11080,259],{"class":164},[123,11082,3760],{"class":129},[123,11084,11085,11088,11090,11093],{"class":125,"line":1539},[123,11086,11087],{"class":129},"    t.name",[123,11089,134],{"class":133},[123,11091,11092],{"class":143},"\"老王\"",[123,11094,3760],{"class":129},[123,11096,11097,11100,11102,11104],{"class":125,"line":2080},[123,11098,11099],{"class":129},"    t.age",[123,11101,134],{"class":133},[123,11103,3252],{"class":164},[123,11105,3760],{"class":129},[123,11107,11108,11111,11113,11116],{"class":125,"line":2097},[123,11109,11110],{"class":129},"    t.stu.name",[123,11112,134],{"class":133},[123,11114,11115],{"class":143},"\"小王\"",[123,11117,11118],{"class":129},"；\n",[123,11120,11121,11124,11126,11128],{"class":125,"line":2114},[123,11122,11123],{"class":129},"    t.stu.age",[123,11125,134],{"class":133},[123,11127,3302],{"class":164},[123,11129,3760],{"class":129},[123,11131,11132,11135,11137,11139],{"class":125,"line":2125},[123,11133,11134],{"class":129},"    t.stu.score",[123,11136,134],{"class":133},[123,11138,2951],{"class":164},[123,11140,3760],{"class":129},[123,11142,11143],{"class":125,"line":2130},[123,11144,171],{"class":129},[14,11146,11148],{"id":11147},"_45结构体做函数参数","4.5结构体做函数参数",[19,11150,11151],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[113,11153,11155],{"className":2608,"code":11154,"language":2610,"meta":118,"style":118},"#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",[120,11156,11157,11163,11173,11179,11185,11189,11193,11199,11205,11209,11214,11219,11236,11240,11273,11277,11282,11301,11305,11336,11340,11348,11352,11361,11373,11385,11397,11410,11418,11431,11443,11451],{"__ignoreMap":118},[123,11158,11159,11161],{"class":125,"line":126},[123,11160,4394],{"class":133},[123,11162,4397],{"class":143},[123,11164,11165,11167,11169,11171],{"class":125,"line":140},[123,11166,4402],{"class":133},[123,11168,4405],{"class":133},[123,11170,4408],{"class":337},[123,11172,3760],{"class":129},[123,11174,11175,11177],{"class":125,"line":156},[123,11176,4394],{"class":133},[123,11178,10181],{"class":143},[123,11180,11181,11183],{"class":125,"line":168},[123,11182,10191],{"class":133},[123,11184,10194],{"class":337},[123,11186,11187],{"class":125,"line":268},[123,11188,186],{"class":129},[123,11190,11191],{"class":125,"line":291},[123,11192,10217],{"class":129},[123,11194,11195,11197],{"class":125,"line":300},[123,11196,4429],{"class":133},[123,11198,10229],{"class":129},[123,11200,11201,11203],{"class":125,"line":305},[123,11202,4429],{"class":133},[123,11204,10241],{"class":129},[123,11206,11207],{"class":125,"line":316},[123,11208,6434],{"class":129},[123,11210,11211],{"class":125,"line":673},[123,11212,11213],{"class":2673},"\u002F\u002F打印学生信息的函数\n",[123,11215,11216],{"class":125,"line":692},[123,11217,11218],{"class":2673},"\u002F\u002F值传递\n",[123,11220,11221,11223,11226,11228,11230,11232,11234],{"class":125,"line":713},[123,11222,7797],{"class":133},[123,11224,11225],{"class":337}," printStudent1",[123,11227,1315],{"class":129},[123,11229,10191],{"class":133},[123,11231,10330],{"class":337},[123,11233,10860],{"class":279},[123,11235,288],{"class":129},[123,11237,11238],{"class":125,"line":718},[123,11239,186],{"class":129},[123,11241,11242,11244,11246,11249,11251,11254,11256,11259,11261,11263,11265,11268,11270],{"class":125,"line":1138},[123,11243,8962],{"class":129},[123,11245,3643],{"class":133},[123,11247,11248],{"class":129}," s.name ",[123,11250,3643],{"class":133},[123,11252,11253],{"class":143}," \" \"",[123,11255,3911],{"class":133},[123,11257,11258],{"class":129}," s.age ",[123,11260,3643],{"class":133},[123,11262,11253],{"class":143},[123,11264,3911],{"class":133},[123,11266,11267],{"class":129}," s.score ",[123,11269,3643],{"class":133},[123,11271,11272],{"class":129}," endl;\n",[123,11274,11275],{"class":125,"line":1429},[123,11276,171],{"class":129},[123,11278,11279],{"class":125,"line":1439},[123,11280,11281],{"class":2673},"\u002F\u002F地址传递\n",[123,11283,11284,11286,11289,11291,11293,11295,11297,11299],{"class":125,"line":1444},[123,11285,7797],{"class":133},[123,11287,11288],{"class":337}," printStudent2",[123,11290,1315],{"class":129},[123,11292,10191],{"class":133},[123,11294,10330],{"class":337},[123,11296,8951],{"class":133},[123,11298,3297],{"class":279},[123,11300,288],{"class":129},[123,11302,11303],{"class":125,"line":1453},[123,11304,186],{"class":129},[123,11306,11307,11309,11311,11314,11316,11318,11320,11323,11325,11327,11329,11332,11334],{"class":125,"line":1458},[123,11308,8962],{"class":129},[123,11310,3643],{"class":133},[123,11312,11313],{"class":129}," s->name ",[123,11315,3643],{"class":133},[123,11317,11253],{"class":143},[123,11319,3911],{"class":133},[123,11321,11322],{"class":129}," s->age ",[123,11324,3643],{"class":133},[123,11326,11253],{"class":143},[123,11328,3911],{"class":133},[123,11330,11331],{"class":129}," s->score ",[123,11333,3643],{"class":133},[123,11335,11272],{"class":129},[123,11337,11338],{"class":125,"line":1476},[123,11339,171],{"class":129},[123,11341,11342,11344,11346],{"class":125,"line":1494},[123,11343,1742],{"class":133},[123,11345,4417],{"class":337},[123,11347,4420],{"class":129},[123,11349,11350],{"class":125,"line":1499},[123,11351,186],{"class":129},[123,11353,11354,11356,11358],{"class":125,"line":1517},[123,11355,10327],{"class":133},[123,11357,10330],{"class":337},[123,11359,11360],{"class":129}," s;\n",[123,11362,11363,11366,11368,11371],{"class":125,"line":1534},[123,11364,11365],{"class":129},"    s.name ",[123,11367,134],{"class":133},[123,11369,11370],{"class":143}," \"张三\"",[123,11372,3760],{"class":129},[123,11374,11375,11378,11380,11383],{"class":125,"line":1539},[123,11376,11377],{"class":129},"    s.age ",[123,11379,134],{"class":133},[123,11381,11382],{"class":164}," 20",[123,11384,3760],{"class":129},[123,11386,11387,11390,11392,11395],{"class":125,"line":2080},[123,11388,11389],{"class":129},"    s.score ",[123,11391,134],{"class":133},[123,11393,11394],{"class":164}," 85",[123,11396,3760],{"class":129},[123,11398,11399,11401,11403,11406,11408],{"class":125,"line":2097},[123,11400,4017],{"class":129},[123,11402,3643],{"class":133},[123,11404,11405],{"class":143},"\"值传递:\"",[123,11407,3643],{"class":133},[123,11409,3665],{"class":129},[123,11411,11412,11415],{"class":125,"line":2114},[123,11413,11414],{"class":337},"    printStudent1",[123,11416,11417],{"class":129},"(s);\n",[123,11419,11420,11422,11424,11427,11429],{"class":125,"line":2125},[123,11421,4017],{"class":129},[123,11423,3643],{"class":133},[123,11425,11426],{"class":143},"\"地址传递:\"",[123,11428,3643],{"class":133},[123,11430,3665],{"class":129},[123,11432,11433,11436,11438,11440],{"class":125,"line":2130},[123,11434,11435],{"class":337},"    printStudent2",[123,11437,1315],{"class":129},[123,11439,2960],{"class":133},[123,11441,11442],{"class":129},"s); \n",[123,11444,11445,11447,11449],{"class":125,"line":5033},[123,11446,6529],{"class":133},[123,11448,6532],{"class":164},[123,11450,3760],{"class":129},[123,11452,11453],{"class":125,"line":5041},[123,11454,171],{"class":129},[19,11456,11457],{},"注意：",[3606,11459,11460,11463],{},[29,11461,11462],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,11464,11465],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11467,11469],{"id":11468},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11471,11472],{},"用const防止误操作",[113,11474,11476],{"className":2608,"code":11475,"language":2610,"meta":118,"style":118},"#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",[120,11477,11478,11484,11494,11500,11505,11509,11513,11519,11525,11529,11545,11549,11572,11576,11584,11588,11609,11616,11620],{"__ignoreMap":118},[123,11479,11480,11482],{"class":125,"line":126},[123,11481,4394],{"class":133},[123,11483,4397],{"class":143},[123,11485,11486,11488,11490,11492],{"class":125,"line":140},[123,11487,4402],{"class":133},[123,11489,4405],{"class":133},[123,11491,4408],{"class":337},[123,11493,3760],{"class":129},[123,11495,11496,11498],{"class":125,"line":156},[123,11497,4394],{"class":133},[123,11499,10181],{"class":143},[123,11501,11502],{"class":125,"line":168},[123,11503,11504],{"class":129},"sctuct Student\n",[123,11506,11507],{"class":125,"line":268},[123,11508,186],{"class":129},[123,11510,11511],{"class":125,"line":291},[123,11512,10217],{"class":129},[123,11514,11515,11517],{"class":125,"line":300},[123,11516,4429],{"class":133},[123,11518,10229],{"class":129},[123,11520,11521,11523],{"class":125,"line":305},[123,11522,4429],{"class":133},[123,11524,10241],{"class":129},[123,11526,11527],{"class":125,"line":316},[123,11528,6434],{"class":129},[123,11530,11531,11533,11536,11538,11541,11543],{"class":125,"line":673},[123,11532,7797],{"class":133},[123,11534,11535],{"class":337}," printStudents",[123,11537,1315],{"class":129},[123,11539,11540],{"class":337},"student",[123,11542,10860],{"class":279},[123,11544,288],{"class":129},[123,11546,11547],{"class":125,"line":692},[123,11548,186],{"class":129},[123,11550,11551,11553,11555,11558,11560,11563,11565,11568,11570],{"class":125,"line":713},[123,11552,4017],{"class":129},[123,11554,3643],{"class":133},[123,11556,11557],{"class":129},"s.name",[123,11559,3643],{"class":133},[123,11561,11562],{"class":129},"s.age",[123,11564,3643],{"class":133},[123,11566,11567],{"class":129},"s.score",[123,11569,3643],{"class":133},[123,11571,3665],{"class":129},[123,11573,11574],{"class":125,"line":718},[123,11575,171],{"class":129},[123,11577,11578,11580,11582],{"class":125,"line":1138},[123,11579,1742],{"class":133},[123,11581,4417],{"class":337},[123,11583,8411],{"class":129},[123,11585,11586],{"class":125,"line":1429},[123,11587,186],{"class":129},[123,11589,11590,11593,11595,11597,11599,11601,11603,11605,11607],{"class":125,"line":1439},[123,11591,11592],{"class":129},"    Student s",[123,11594,134],{"class":133},[123,11596,3495],{"class":129},[123,11598,10348],{"class":143},[123,11600,2985],{"class":129},[123,11602,3252],{"class":164},[123,11604,2985],{"class":129},[123,11606,3252],{"class":164},[123,11608,6434],{"class":129},[123,11610,11611,11614],{"class":125,"line":1444},[123,11612,11613],{"class":337},"    printStudent",[123,11615,11417],{"class":129},[123,11617,11618],{"class":125,"line":1453},[123,11619,232],{"emptyLinePlaceholder":231},[123,11621,11622],{"class":125,"line":1458},[123,11623,171],{"class":129},[19,11625,11457],{},[3606,11627,11628,11631,11634],{},[29,11629,11630],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,11632,11633],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,11635,11636],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[113,11638,11640],{"className":2608,"code":11639,"language":2610,"meta":118,"style":118},"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",[120,11641,11642,11661,11665,11670,11690],{"__ignoreMap":118},[123,11643,11644,11646,11648,11650,11652,11655,11657,11659],{"class":125,"line":126},[123,11645,7797],{"class":133},[123,11647,11535],{"class":337},[123,11649,1315],{"class":129},[123,11651,9225],{"class":133},[123,11653,11654],{"class":337}," student",[123,11656,8951],{"class":133},[123,11658,3297],{"class":279},[123,11660,288],{"class":129},[123,11662,11663],{"class":125,"line":140},[123,11664,186],{"class":129},[123,11666,11667],{"class":125,"line":156},[123,11668,11669],{"class":2673},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[123,11671,11672,11674,11676,11678,11680,11682,11684,11686,11688],{"class":125,"line":168},[123,11673,4017],{"class":129},[123,11675,3643],{"class":133},[123,11677,11557],{"class":129},[123,11679,3643],{"class":133},[123,11681,11562],{"class":129},[123,11683,3643],{"class":133},[123,11685,11567],{"class":129},[123,11687,3643],{"class":133},[123,11689,3665],{"class":129},[123,11691,11692],{"class":125,"line":268},[123,11693,171],{"class":129},[14,11695,11697],{"id":11696},"_47案例","4.7案例",[26,11699,11700],{},[29,11701,11702],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[113,11704,11706],{"className":2608,"code":11705,"language":2610,"meta":118,"style":118},"#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",[120,11707,11708,11714,11724,11730,11737,11741,11747,11751,11756,11762,11768,11772,11776,11782,11786,11791,11796,11809,11813,11818,11844,11848,11860,11887,11891,11903,11913,11917,11922,11951,11955,11967,11976,12003,12014,12024,12028,12032,12036,12041,12065,12069,12093,12097,12116,12142,12146,12171,12194,12218,12223,12228,12233,12242,12247,12253,12274,12280,12294,12300,12327,12336,12342,12350,12355],{"__ignoreMap":118},[123,11709,11710,11712],{"class":125,"line":126},[123,11711,4394],{"class":133},[123,11713,4397],{"class":143},[123,11715,11716,11718,11720,11722],{"class":125,"line":140},[123,11717,4402],{"class":133},[123,11719,4405],{"class":133},[123,11721,4408],{"class":337},[123,11723,3760],{"class":129},[123,11725,11726,11728],{"class":125,"line":156},[123,11727,4394],{"class":133},[123,11729,10181],{"class":143},[123,11731,11732,11734],{"class":125,"line":168},[123,11733,4394],{"class":133},[123,11735,11736],{"class":143},"\u003Cctime>\n",[123,11738,11739],{"class":125,"line":268},[123,11740,10970],{"class":2673},[123,11742,11743,11745],{"class":125,"line":291},[123,11744,10191],{"class":133},[123,11746,10194],{"class":337},[123,11748,11749],{"class":125,"line":300},[123,11750,186],{"class":129},[123,11752,11753],{"class":125,"line":305},[123,11754,11755],{"class":129},"    string sName;\n",[123,11757,11758,11760],{"class":125,"line":316},[123,11759,4429],{"class":133},[123,11761,10229],{"class":129},[123,11763,11764,11766],{"class":125,"line":673},[123,11765,4429],{"class":133},[123,11767,10241],{"class":129},[123,11769,11770],{"class":125,"line":692},[123,11771,6434],{"class":129},[123,11773,11774],{"class":125,"line":713},[123,11775,11007],{"class":2673},[123,11777,11778,11780],{"class":125,"line":718},[123,11779,10191],{"class":133},[123,11781,11014],{"class":337},[123,11783,11784],{"class":125,"line":1138},[123,11785,186],{"class":129},[123,11787,11788],{"class":125,"line":1429},[123,11789,11790],{"class":129},"    string tName;\n",[123,11792,11793],{"class":125,"line":1439},[123,11794,11795],{"class":2673},"    \u002F\u002F学生数组\n",[123,11797,11798,11800,11802,11805,11807],{"class":125,"line":1444},[123,11799,10327],{"class":133},[123,11801,10330],{"class":337},[123,11803,11804],{"class":129}," sArray[",[123,11806,2926],{"class":164},[123,11808,7126],{"class":129},[123,11810,11811],{"class":125,"line":1453},[123,11812,6434],{"class":129},[123,11814,11815],{"class":125,"line":1458},[123,11816,11817],{"class":2673},"\u002F\u002F给老师和学生赋值的函数\n",[123,11819,11820,11822,11825,11827,11829,11832,11835,11838,11840,11842],{"class":125,"line":1476},[123,11821,7797],{"class":133},[123,11823,11824],{"class":337}," allocateSpace",[123,11826,1315],{"class":129},[123,11828,10191],{"class":133},[123,11830,11831],{"class":337}," Teacher",[123,11833,11834],{"class":279}," tArray",[123,11836,11837],{"class":129},"[],",[123,11839,1742],{"class":133},[123,11841,9764],{"class":279},[123,11843,288],{"class":129},[123,11845,11846],{"class":125,"line":1494},[123,11847,186],{"class":129},[123,11849,11850,11853,11855,11858],{"class":125,"line":1499},[123,11851,11852],{"class":129},"    string nameSeed",[123,11854,134],{"class":133},[123,11856,11857],{"class":143},"\"ABCDE\"",[123,11859,3760],{"class":129},[123,11861,11862,11864,11866,11868,11871,11873,11875,11878,11880,11883,11885],{"class":125,"line":1517},[123,11863,5641],{"class":133},[123,11865,4116],{"class":129},[123,11867,1742],{"class":133},[123,11869,11870],{"class":129}," i ",[123,11872,134],{"class":133},[123,11874,6532],{"class":164},[123,11876,11877],{"class":129},"; i ",[123,11879,3509],{"class":133},[123,11881,11882],{"class":129}," len; i",[123,11884,4736],{"class":133},[123,11886,288],{"class":129},[123,11888,11889],{"class":125,"line":1534},[123,11890,4474],{"class":129},[123,11892,11893,11896,11898,11901],{"class":125,"line":1539},[123,11894,11895],{"class":129},"        tArray[i].tName ",[123,11897,134],{"class":133},[123,11899,11900],{"class":143}," \"Teacher_\"",[123,11902,3760],{"class":129},[123,11904,11905,11907,11910],{"class":125,"line":2080},[123,11906,11895],{"class":129},[123,11908,11909],{"class":133},"+=",[123,11911,11912],{"class":129},"nameSeed[i];\n",[123,11914,11915],{"class":125,"line":2097},[123,11916,232],{"emptyLinePlaceholder":231},[123,11918,11919],{"class":125,"line":2114},[123,11920,11921],{"class":2673},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[123,11923,11924,11926,11928,11930,11933,11935,11937,11940,11942,11944,11947,11949],{"class":125,"line":2125},[123,11925,5843],{"class":133},[123,11927,4116],{"class":129},[123,11929,1742],{"class":133},[123,11931,11932],{"class":129}," j ",[123,11934,134],{"class":133},[123,11936,6532],{"class":164},[123,11938,11939],{"class":129},"; j ",[123,11941,3509],{"class":133},[123,11943,4592],{"class":164},[123,11945,11946],{"class":129},"; j",[123,11948,4736],{"class":133},[123,11950,288],{"class":129},[123,11952,11953],{"class":125,"line":2130},[123,11954,4953],{"class":129},[123,11956,11957,11960,11962,11965],{"class":125,"line":5033},[123,11958,11959],{"class":129},"            tArray[i].sArray[j].sName ",[123,11961,134],{"class":133},[123,11963,11964],{"class":143}," \"Student_\"",[123,11966,3760],{"class":129},[123,11968,11969,11971,11973],{"class":125,"line":5041},[123,11970,11959],{"class":129},[123,11972,11909],{"class":133},[123,11974,11975],{"class":129}," nameSeed[j];\n",[123,11977,11978,11981,11984,11986,11988,11990,11992,11994,11996,11998,12000],{"class":125,"line":5046},[123,11979,11980],{"class":133},"            int",[123,11982,11983],{"class":129}," random",[123,11985,134],{"class":133},[123,11987,4867],{"class":337},[123,11989,4870],{"class":129},[123,11991,2935],{"class":133},[123,11993,3506],{"class":164},[123,11995,3086],{"class":133},[123,11997,3007],{"class":164},[123,11999,2670],{"class":129},[123,12001,12002],{"class":2673},"\u002F\u002F40~99\n",[123,12004,12005,12008,12010,12012],{"class":125,"line":5052},[123,12006,12007],{"class":129},"            tArray[i].sArray[j].age ",[123,12009,134],{"class":133},[123,12011,11382],{"class":164},[123,12013,3760],{"class":129},[123,12015,12016,12019,12021],{"class":125,"line":5058},[123,12017,12018],{"class":129},"            tArray[i].sArray[j].score ",[123,12020,134],{"class":133},[123,12022,12023],{"class":129}," random;\n",[123,12025,12026],{"class":125,"line":5063},[123,12027,4972],{"class":129},[123,12029,12030],{"class":125,"line":10380},[123,12031,4631],{"class":129},[123,12033,12034],{"class":125,"line":10404},[123,12035,171],{"class":129},[123,12037,12038],{"class":125,"line":10409},[123,12039,12040],{"class":2673},"\u002F\u002F打印所有信息的函数\n",[123,12042,12043,12045,12048,12050,12052,12054,12056,12059,12061,12063],{"class":125,"line":10415},[123,12044,7797],{"class":133},[123,12046,12047],{"class":337}," printInfo",[123,12049,1315],{"class":129},[123,12051,10191],{"class":133},[123,12053,11831],{"class":337},[123,12055,11834],{"class":279},[123,12057,12058],{"class":129},"[], ",[123,12060,1742],{"class":133},[123,12062,9764],{"class":279},[123,12064,288],{"class":129},[123,12066,12067],{"class":125,"line":10442},[123,12068,186],{"class":129},[123,12070,12071,12073,12075,12077,12079,12081,12083,12085,12087,12089,12091],{"class":125,"line":10447},[123,12072,5641],{"class":133},[123,12074,4116],{"class":129},[123,12076,1742],{"class":133},[123,12078,11870],{"class":129},[123,12080,134],{"class":133},[123,12082,6532],{"class":164},[123,12084,11877],{"class":129},[123,12086,3509],{"class":133},[123,12088,11882],{"class":129},[123,12090,4736],{"class":133},[123,12092,288],{"class":129},[123,12094,12095],{"class":125,"line":10453},[123,12096,4474],{"class":129},[123,12098,12099,12102,12104,12107,12109,12112,12114],{"class":125,"line":10465},[123,12100,12101],{"class":129},"        cout ",[123,12103,3643],{"class":133},[123,12105,12106],{"class":143}," \"Teacher: \"",[123,12108,3911],{"class":133},[123,12110,12111],{"class":129}," tArray[i].tName ",[123,12113,3643],{"class":133},[123,12115,11272],{"class":129},[123,12117,12118,12120,12122,12124,12126,12128,12130,12132,12134,12136,12138,12140],{"class":125,"line":10477},[123,12119,5843],{"class":133},[123,12121,4116],{"class":129},[123,12123,1742],{"class":133},[123,12125,11932],{"class":129},[123,12127,134],{"class":133},[123,12129,6532],{"class":164},[123,12131,11939],{"class":129},[123,12133,3509],{"class":133},[123,12135,4592],{"class":164},[123,12137,11946],{"class":129},[123,12139,4736],{"class":133},[123,12141,288],{"class":129},[123,12143,12144],{"class":125,"line":10489},[123,12145,4953],{"class":129},[123,12147,12149,12152,12154,12157,12159,12162,12164,12167,12169],{"class":125,"line":12148},47,[123,12150,12151],{"class":129},"            cout ",[123,12153,3643],{"class":133},[123,12155,12156],{"class":143}," \"",[123,12158,3700],{"class":164},[123,12160,12161],{"class":143},"Student: \"",[123,12163,3911],{"class":133},[123,12165,12166],{"class":129}," tArray[i].sArray[j].sName",[123,12168,3643],{"class":133},[123,12170,3665],{"class":129},[123,12172,12174,12176,12178,12180,12182,12185,12187,12190,12192],{"class":125,"line":12173},48,[123,12175,12151],{"class":129},[123,12177,3643],{"class":133},[123,12179,12156],{"class":143},[123,12181,3700],{"class":164},[123,12183,12184],{"class":143},"Age: \"",[123,12186,3911],{"class":133},[123,12188,12189],{"class":129}," tArray[i].sArray[j].age ",[123,12191,3643],{"class":133},[123,12193,11272],{"class":129},[123,12195,12197,12199,12201,12203,12205,12208,12210,12213,12215],{"class":125,"line":12196},49,[123,12198,12151],{"class":129},[123,12200,3643],{"class":133},[123,12202,12156],{"class":143},[123,12204,3700],{"class":164},[123,12206,12207],{"class":143},"Score: \"",[123,12209,3911],{"class":133},[123,12211,12212],{"class":129}," tArray[i].sArray[j].score ",[123,12214,3643],{"class":133},[123,12216,12217],{"class":129}," endl;   \n",[123,12219,12221],{"class":125,"line":12220},50,[123,12222,4972],{"class":129},[123,12224,12226],{"class":125,"line":12225},51,[123,12227,4631],{"class":129},[123,12229,12231],{"class":125,"line":12230},52,[123,12232,171],{"class":129},[123,12234,12236,12238,12240],{"class":125,"line":12235},53,[123,12237,1742],{"class":133},[123,12239,4417],{"class":337},[123,12241,4420],{"class":129},[123,12243,12245],{"class":125,"line":12244},54,[123,12246,186],{"class":129},[123,12248,12250],{"class":125,"line":12249},55,[123,12251,12252],{"class":2673},"    \u002F\u002F随机数种子\n",[123,12254,12256,12258,12260,12262,12264,12266,12268,12270,12272],{"class":125,"line":12255},56,[123,12257,4817],{"class":337},[123,12259,4820],{"class":129},[123,12261,4823],{"class":133},[123,12263,4826],{"class":133},[123,12265,3035],{"class":129},[123,12267,4831],{"class":337},[123,12269,1315],{"class":129},[123,12271,4836],{"class":164},[123,12273,4839],{"class":129},[123,12275,12277],{"class":125,"line":12276},57,[123,12278,12279],{"class":2673},"    \u002F\u002F1.创建3名老师的数组\n",[123,12281,12283,12285,12287,12290,12292],{"class":125,"line":12282},58,[123,12284,10327],{"class":133},[123,12286,11831],{"class":337},[123,12288,12289],{"class":129}," tArray[",[123,12291,2686],{"class":164},[123,12293,7126],{"class":129},[123,12295,12297],{"class":125,"line":12296},59,[123,12298,12299],{"class":2673},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[123,12301,12303,12305,12308,12310,12313,12316,12318,12320,12323,12325],{"class":125,"line":12302},60,[123,12304,4429],{"class":133},[123,12306,12307],{"class":129}," len ",[123,12309,134],{"class":133},[123,12311,12312],{"class":133}," sizeof",[123,12314,12315],{"class":129},"(tArray) ",[123,12317,3187],{"class":133},[123,12319,12312],{"class":133},[123,12321,12322],{"class":129},"(tArray[",[123,12324,2799],{"class":164},[123,12326,6295],{"class":129},[123,12328,12330,12333],{"class":125,"line":12329},61,[123,12331,12332],{"class":337},"    allocateSpace",[123,12334,12335],{"class":129},"(tArray, len);\n",[123,12337,12339],{"class":125,"line":12338},62,[123,12340,12341],{"class":2673},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[123,12343,12345,12348],{"class":125,"line":12344},63,[123,12346,12347],{"class":337},"    printInfo",[123,12349,12335],{"class":129},[123,12351,12353],{"class":125,"line":12352},64,[123,12354,232],{"emptyLinePlaceholder":231},[123,12356,12358],{"class":125,"line":12357},65,[123,12359,171],{"class":129},[26,12361,12362],{"start":140},[29,12363,12364,12367],{},[2759,12365,12366],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12369,12370],{},"五名英雄信息如下：",[113,12372,12376],{"className":12373,"code":12374,"language":12375,"meta":118,"style":118},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[120,12377,12378,12396,12413,12430,12447],{"__ignoreMap":118},[123,12379,12380,12382,12385,12387,12389,12391,12394],{"class":125,"line":126},[123,12381,2176],{"class":129},[123,12383,12384],{"class":143},"\"刘备\"",[123,12386,2985],{"class":129},[123,12388,3377],{"class":164},[123,12390,2985],{"class":129},[123,12392,12393],{"class":143},"\"男\"",[123,12395,1202],{"class":129},[123,12397,12398,12400,12403,12405,12407,12409,12411],{"class":125,"line":140},[123,12399,2176],{"class":129},[123,12401,12402],{"class":143},"\"关羽\"",[123,12404,2985],{"class":129},[123,12406,3352],{"class":164},[123,12408,2985],{"class":129},[123,12410,12393],{"class":143},[123,12412,1202],{"class":129},[123,12414,12415,12417,12420,12422,12424,12426,12428],{"class":125,"line":156},[123,12416,2176],{"class":129},[123,12418,12419],{"class":143},"\"张飞\"",[123,12421,2985],{"class":129},[123,12423,3302],{"class":164},[123,12425,2985],{"class":129},[123,12427,12393],{"class":143},[123,12429,1202],{"class":129},[123,12431,12432,12434,12437,12439,12441,12443,12445],{"class":125,"line":168},[123,12433,2176],{"class":129},[123,12435,12436],{"class":143},"\"赵云\"",[123,12438,2985],{"class":129},[123,12440,3327],{"class":164},[123,12442,2985],{"class":129},[123,12444,12393],{"class":143},[123,12446,1202],{"class":129},[123,12448,12449,12451,12454,12456,12458,12460,12463],{"class":125,"line":268},[123,12450,2176],{"class":129},[123,12452,12453],{"class":143},"\"貂蝉\"",[123,12455,2985],{"class":129},[123,12457,3277],{"class":164},[123,12459,2985],{"class":129},[123,12461,12462],{"class":143},"\"女\"",[123,12464,1202],{"class":129},[19,12466,12467],{},"代码：",[113,12469,12471],{"className":2608,"code":12470,"language":2610,"meta":118,"style":118},"#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",[120,12472,12473,12479,12489,12495,12502,12506,12510,12516,12521,12525,12530,12553,12557,12582,12586,12619,12624,12653,12658,12673,12699,12719,12724,12729,12733,12737,12742,12764,12768,12792,12796,12858,12862,12866,12874,12878,12883,12894,12898,12914,12930,12946,12962,12978,12982,13002,13024,13029,13042,13049,13054,13060,13065,13078,13084],{"__ignoreMap":118},[123,12474,12475,12477],{"class":125,"line":126},[123,12476,4394],{"class":133},[123,12478,4397],{"class":143},[123,12480,12481,12483,12485,12487],{"class":125,"line":140},[123,12482,4402],{"class":133},[123,12484,4405],{"class":133},[123,12486,4408],{"class":337},[123,12488,3760],{"class":129},[123,12490,12491,12493],{"class":125,"line":156},[123,12492,4394],{"class":133},[123,12494,10181],{"class":143},[123,12496,12497,12499],{"class":125,"line":168},[123,12498,10191],{"class":133},[123,12500,12501],{"class":337}," Sanguo\n",[123,12503,12504],{"class":125,"line":268},[123,12505,186],{"class":129},[123,12507,12508],{"class":125,"line":291},[123,12509,10217],{"class":129},[123,12511,12512,12514],{"class":125,"line":300},[123,12513,4429],{"class":133},[123,12515,10229],{"class":129},[123,12517,12518],{"class":125,"line":305},[123,12519,12520],{"class":129},"    string gender;\n",[123,12522,12523],{"class":125,"line":316},[123,12524,6434],{"class":129},[123,12526,12527],{"class":125,"line":673},[123,12528,12529],{"class":2673},"\u002F\u002F定义排序函数\n",[123,12531,12532,12534,12536,12538,12541,12543,12545,12547,12549,12551],{"class":125,"line":692},[123,12533,7797],{"class":133},[123,12535,9749],{"class":337},[123,12537,1315],{"class":129},[123,12539,12540],{"class":337},"Sanguo",[123,12542,8951],{"class":133},[123,12544,3297],{"class":279},[123,12546,2985],{"class":129},[123,12548,1742],{"class":133},[123,12550,9764],{"class":279},[123,12552,288],{"class":129},[123,12554,12555],{"class":125,"line":713},[123,12556,186],{"class":129},[123,12558,12559,12561,12563,12565,12567,12569,12571,12573,12575,12578,12580],{"class":125,"line":718},[123,12560,5641],{"class":133},[123,12562,1315],{"class":129},[123,12564,1742],{"class":133},[123,12566,5473],{"class":129},[123,12568,134],{"class":133},[123,12570,2799],{"class":164},[123,12572,5480],{"class":129},[123,12574,3509],{"class":133},[123,12576,12577],{"class":129},"len;i",[123,12579,4736],{"class":133},[123,12581,288],{"class":129},[123,12583,12584],{"class":125,"line":1138},[123,12585,4474],{"class":129},[123,12587,12588,12591,12593,12595,12597,12599,12601,12603,12605,12607,12609,12611,12613,12615,12617],{"class":125,"line":1429},[123,12589,12590],{"class":133},"     for",[123,12592,4116],{"class":129},[123,12594,1742],{"class":133},[123,12596,5850],{"class":129},[123,12598,134],{"class":133},[123,12600,2799],{"class":164},[123,12602,5857],{"class":129},[123,12604,3509],{"class":133},[123,12606,9791],{"class":129},[123,12608,3135],{"class":133},[123,12610,2825],{"class":164},[123,12612,3135],{"class":133},[123,12614,5990],{"class":129},[123,12616,4736],{"class":133},[123,12618,288],{"class":129},[123,12620,12621],{"class":125,"line":1439},[123,12622,12623],{"class":129},"     {\n",[123,12625,12626,12629,12632,12634,12637,12639,12642,12644,12646,12648,12650],{"class":125,"line":1444},[123,12627,12628],{"class":133},"         if",[123,12630,12631],{"class":129}," ((s",[123,12633,3086],{"class":133},[123,12635,12636],{"class":129},"j)->age ",[123,12638,3559],{"class":133},[123,12640,12641],{"class":129}," (s",[123,12643,3086],{"class":133},[123,12645,3072],{"class":129},[123,12647,3086],{"class":133},[123,12649,2825],{"class":164},[123,12651,12652],{"class":129},")->age)\n",[123,12654,12655],{"class":125,"line":1453},[123,12656,12657],{"class":129},"         {\n",[123,12659,12660,12663,12665,12668,12670],{"class":125,"line":1458},[123,12661,12662],{"class":129},"             Sanguo temp",[123,12664,9586],{"class":133},[123,12666,12667],{"class":129},"(s",[123,12669,3086],{"class":133},[123,12671,12672],{"class":129},"j);\n",[123,12674,12675,12678,12680,12682,12685,12687,12689,12691,12693,12695,12697],{"class":125,"line":1476},[123,12676,12677],{"class":133},"             *",[123,12679,12667],{"class":129},[123,12681,3086],{"class":133},[123,12683,12684],{"class":129},"j)",[123,12686,9586],{"class":133},[123,12688,12667],{"class":129},[123,12690,3086],{"class":133},[123,12692,3072],{"class":129},[123,12694,3086],{"class":133},[123,12696,2825],{"class":164},[123,12698,5161],{"class":129},[123,12700,12701,12703,12705,12707,12709,12711,12713,12715,12717],{"class":125,"line":1494},[123,12702,12677],{"class":133},[123,12704,12667],{"class":129},[123,12706,3086],{"class":133},[123,12708,3072],{"class":129},[123,12710,3086],{"class":133},[123,12712,2825],{"class":164},[123,12714,3035],{"class":129},[123,12716,134],{"class":133},[123,12718,6719],{"class":129},[123,12720,12721],{"class":125,"line":1499},[123,12722,12723],{"class":129},"         }\n",[123,12725,12726],{"class":125,"line":1517},[123,12727,12728],{"class":129},"     }\n",[123,12730,12731],{"class":125,"line":1534},[123,12732,4631],{"class":129},[123,12734,12735],{"class":125,"line":1539},[123,12736,171],{"class":129},[123,12738,12739],{"class":125,"line":2080},[123,12740,12741],{"class":2673},"\u002F\u002F定义打印函数\n",[123,12743,12744,12746,12748,12750,12752,12754,12756,12758,12760,12762],{"class":125,"line":2097},[123,12745,7797],{"class":133},[123,12747,12047],{"class":337},[123,12749,1315],{"class":129},[123,12751,12540],{"class":337},[123,12753,8951],{"class":133},[123,12755,3297],{"class":279},[123,12757,2985],{"class":129},[123,12759,1742],{"class":133},[123,12761,9764],{"class":279},[123,12763,288],{"class":129},[123,12765,12766],{"class":125,"line":2114},[123,12767,186],{"class":129},[123,12769,12770,12772,12774,12776,12778,12780,12782,12784,12786,12788,12790],{"class":125,"line":2125},[123,12771,5641],{"class":133},[123,12773,4116],{"class":129},[123,12775,1742],{"class":133},[123,12777,5473],{"class":129},[123,12779,134],{"class":133},[123,12781,2799],{"class":164},[123,12783,5480],{"class":129},[123,12785,3509],{"class":133},[123,12787,12577],{"class":129},[123,12789,4736],{"class":133},[123,12791,288],{"class":129},[123,12793,12794],{"class":125,"line":2130},[123,12795,4474],{"class":129},[123,12797,12798,12800,12802,12804,12806,12809,12811,12813,12815,12818,12820,12822,12824,12827,12829,12831,12833,12836,12838,12840,12842,12845,12847,12849,12851,12854,12856],{"class":125,"line":5033},[123,12799,5891],{"class":129},[123,12801,3643],{"class":133},[123,12803,2859],{"class":143},[123,12805,3700],{"class":164},[123,12807,12808],{"class":143},"姓名：\"",[123,12810,3643],{"class":133},[123,12812,12667],{"class":129},[123,12814,3086],{"class":133},[123,12816,12817],{"class":129},"i)->name",[123,12819,3643],{"class":133},[123,12821,2859],{"class":143},[123,12823,3700],{"class":164},[123,12825,12826],{"class":143},"年龄：\"",[123,12828,3643],{"class":133},[123,12830,12667],{"class":129},[123,12832,3086],{"class":133},[123,12834,12835],{"class":129},"i)->age",[123,12837,3643],{"class":133},[123,12839,2859],{"class":143},[123,12841,3700],{"class":164},[123,12843,12844],{"class":143},"性别：\"",[123,12846,3643],{"class":133},[123,12848,12667],{"class":129},[123,12850,3086],{"class":133},[123,12852,12853],{"class":129},"i)->gender",[123,12855,3643],{"class":133},[123,12857,3665],{"class":129},[123,12859,12860],{"class":125,"line":5041},[123,12861,4631],{"class":129},[123,12863,12864],{"class":125,"line":5046},[123,12865,171],{"class":129},[123,12867,12868,12870,12872],{"class":125,"line":5052},[123,12869,1742],{"class":133},[123,12871,4417],{"class":337},[123,12873,4420],{"class":129},[123,12875,12876],{"class":125,"line":5058},[123,12877,186],{"class":129},[123,12879,12880],{"class":125,"line":5063},[123,12881,12882],{"class":2673},"    \u002F\u002F定义结构体变量\n",[123,12884,12885,12888,12890,12892],{"class":125,"line":10380},[123,12886,12887],{"class":129},"    Sanguo s1[",[123,12889,2926],{"class":164},[123,12891,3539],{"class":129},[123,12893,7344],{"class":133},[123,12895,12896],{"class":125,"line":10404},[123,12897,4474],{"class":129},[123,12899,12900,12902,12904,12906,12908,12910,12912],{"class":125,"line":10409},[123,12901,2176],{"class":129},[123,12903,12384],{"class":143},[123,12905,2985],{"class":129},[123,12907,3377],{"class":164},[123,12909,2985],{"class":129},[123,12911,12393],{"class":143},[123,12913,1202],{"class":129},[123,12915,12916,12918,12920,12922,12924,12926,12928],{"class":125,"line":10415},[123,12917,2176],{"class":129},[123,12919,12402],{"class":143},[123,12921,2985],{"class":129},[123,12923,3352],{"class":164},[123,12925,2985],{"class":129},[123,12927,12393],{"class":143},[123,12929,1202],{"class":129},[123,12931,12932,12934,12936,12938,12940,12942,12944],{"class":125,"line":10442},[123,12933,2176],{"class":129},[123,12935,12419],{"class":143},[123,12937,2985],{"class":129},[123,12939,3302],{"class":164},[123,12941,2985],{"class":129},[123,12943,12393],{"class":143},[123,12945,1202],{"class":129},[123,12947,12948,12950,12952,12954,12956,12958,12960],{"class":125,"line":10447},[123,12949,2176],{"class":129},[123,12951,12436],{"class":143},[123,12953,2985],{"class":129},[123,12955,3327],{"class":164},[123,12957,2985],{"class":129},[123,12959,12393],{"class":143},[123,12961,1202],{"class":129},[123,12963,12964,12966,12968,12970,12972,12974,12976],{"class":125,"line":10453},[123,12965,2176],{"class":129},[123,12967,12453],{"class":143},[123,12969,2985],{"class":129},[123,12971,3277],{"class":164},[123,12973,2985],{"class":129},[123,12975,12462],{"class":143},[123,12977,1202],{"class":129},[123,12979,12980],{"class":125,"line":10465},[123,12981,7385],{"class":129},[123,12983,12984,12986,12988,12990,12993,12995,12998,13000],{"class":125,"line":10477},[123,12985,4429],{"class":133},[123,12987,9764],{"class":129},[123,12989,6642],{"class":133},[123,12991,12992],{"class":129},"(s1)",[123,12994,6648],{"class":133},[123,12996,12997],{"class":129},"(s1[",[123,12999,2799],{"class":164},[123,13001,6295],{"class":129},[123,13003,13004,13007,13009,13012,13014,13017,13020,13022],{"class":125,"line":10489},[123,13005,13006],{"class":129},"    Sanguo ",[123,13008,3060],{"class":133},[123,13010,13011],{"class":129},"s ",[123,13013,134],{"class":133},[123,13015,13016],{"class":133}," &",[123,13018,13019],{"class":129},"s1[",[123,13021,2799],{"class":164},[123,13023,7126],{"class":129},[123,13025,13026],{"class":125,"line":12148},[123,13027,13028],{"class":2673},"    \u002F\u002F排序前：\n",[123,13030,13031,13033,13035,13038,13040],{"class":125,"line":12173},[123,13032,8962],{"class":129},[123,13034,3643],{"class":133},[123,13036,13037],{"class":143}," \"排序前：\"",[123,13039,3911],{"class":133},[123,13041,11272],{"class":129},[123,13043,13044,13046],{"class":125,"line":12196},[123,13045,12347],{"class":337},[123,13047,13048],{"class":129},"(s,len);\n",[123,13050,13051],{"class":125,"line":12220},[123,13052,13053],{"class":2673},"    \u002F\u002F调用排序函数\n",[123,13055,13056,13058],{"class":125,"line":12225},[123,13057,10031],{"class":337},[123,13059,13048],{"class":129},[123,13061,13062],{"class":125,"line":12230},[123,13063,13064],{"class":2673},"    \u002F\u002F排序后\n",[123,13066,13067,13069,13071,13074,13076],{"class":125,"line":12235},[123,13068,8962],{"class":129},[123,13070,3643],{"class":133},[123,13072,13073],{"class":143}," \"排序后：\"",[123,13075,3911],{"class":133},[123,13077,11272],{"class":129},[123,13079,13080,13082],{"class":125,"line":12244},[123,13081,12347],{"class":337},[123,13083,13048],{"class":129},[123,13085,13086],{"class":125,"line":12249},[123,13087,171],{"class":129},[19,13089,13090,13091,13093],{},"注意：使用指针时直接用传首地址**&s",[123,13092,2799],{},"**",[2526,13095,13096],{},"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":118,"searchDepth":140,"depth":140,"links":13098},[13099,13100,13101,13102,13103,13104,13105],{"id":10135,"depth":140,"text":10136},{"id":10497,"depth":140,"text":10498},{"id":10766,"depth":140,"text":10767},{"id":10931,"depth":140,"text":10932},{"id":11147,"depth":140,"text":11148},{"id":11468,"depth":140,"text":11469},{"id":11696,"depth":140,"text":11697},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10124,"description":10132},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13112,"title":13113,"body":13114,"description":118,"extension":2545,"meta":14457,"navigation":231,"path":14458,"seo":14459,"stem":14460,"__hash__":14461},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13115,"toc":14451},[13116,13119,13123,13129,13143,13148,13151,13155,13162,13168,13171,13178,13184,13189,13192,13195,13198,13762,13765,13779,13783,13788,13804,13944,13947,13953,13956,13961,13969,14077,14080,14085,14088,14093,14096,14102,14105,14448],[10,13117,13113],{"id":13118},"_5程序内存模型",[14,13120,13122],{"id":13121},"_51内存分区模型","5.1内存分区模型",[19,13124,13125,13126],{},"C++程序在执行时，将内存大方向划分为",[2759,13127,13128],{},"4个区域",[3606,13130,13131,13134,13137,13140],{},[29,13132,13133],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,13135,13136],{},"全局区：存放全局变量和静态变量以及常量",[29,13138,13139],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,13141,13142],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,13144,13145],{},[2759,13146,13147],{},"内存四区意义：",[19,13149,13150],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[2587,13152,13154],{"id":13153},"_511程序运行前","5.1.1程序运行前",[19,13156,13157,13158,13161],{},"​\t在程序编译后，生成了exe可执行程序，",[2759,13159,13160],{},"未执行该程序前","分为两个区域",[19,13163,13164,13165],{},"​\t",[2759,13166,13167],{},"代码区：",[19,13169,13170],{},"​\t\t存放 CPU 执行的机器指令",[19,13172,13173,13174,13177],{},"​\t\t代码区是",[2759,13175,13176],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,13179,13173,13180,13183],{},[2759,13181,13182],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,13185,13164,13186],{},[2759,13187,13188],{},"全局区：",[19,13190,13191],{},"​\t\t全局变量和静态变量存放在此.",[19,13193,13194],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13196,13197],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[113,13199,13201],{"className":2608,"code":13200,"language":2610,"meta":118,"style":118},"\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",[120,13202,13203,13208,13221,13234,13238,13243,13258,13273,13277,13286,13290,13295,13308,13321,13325,13330,13356,13382,13386,13413,13439,13443,13448,13464,13479,13483,13509,13535,13539,13564,13589,13593,13619,13645,13649,13665,13680,13706,13732,13736,13746,13750,13758],{"__ignoreMap":118},[123,13204,13205],{"class":125,"line":126},[123,13206,13207],{"class":2673},"\u002F\u002F全局变量\n",[123,13209,13210,13212,13215,13217,13219],{"class":125,"line":140},[123,13211,1742],{"class":133},[123,13213,13214],{"class":129}," g_a ",[123,13216,134],{"class":133},[123,13218,4482],{"class":164},[123,13220,3760],{"class":129},[123,13222,13223,13225,13228,13230,13232],{"class":125,"line":156},[123,13224,1742],{"class":133},[123,13226,13227],{"class":129}," g_b ",[123,13229,134],{"class":133},[123,13231,4482],{"class":164},[123,13233,3760],{"class":129},[123,13235,13236],{"class":125,"line":168},[123,13237,232],{"emptyLinePlaceholder":231},[123,13239,13240],{"class":125,"line":268},[123,13241,13242],{"class":2673},"\u002F\u002F全局常量\n",[123,13244,13245,13247,13249,13252,13254,13256],{"class":125,"line":291},[123,13246,9225],{"class":133},[123,13248,4826],{"class":133},[123,13250,13251],{"class":129}," c_g_a ",[123,13253,134],{"class":133},[123,13255,4482],{"class":164},[123,13257,3760],{"class":129},[123,13259,13260,13262,13264,13267,13269,13271],{"class":125,"line":300},[123,13261,9225],{"class":133},[123,13263,4826],{"class":133},[123,13265,13266],{"class":129}," c_g_b ",[123,13268,134],{"class":133},[123,13270,4482],{"class":164},[123,13272,3760],{"class":129},[123,13274,13275],{"class":125,"line":305},[123,13276,232],{"emptyLinePlaceholder":231},[123,13278,13279,13281,13283],{"class":125,"line":316},[123,13280,1742],{"class":133},[123,13282,4417],{"class":337},[123,13284,13285],{"class":129},"() {\n",[123,13287,13288],{"class":125,"line":673},[123,13289,232],{"emptyLinePlaceholder":231},[123,13291,13292],{"class":125,"line":692},[123,13293,13294],{"class":2673},"    \u002F\u002F局部变量\n",[123,13296,13297,13299,13302,13304,13306],{"class":125,"line":713},[123,13298,4429],{"class":133},[123,13300,13301],{"class":129}," a ",[123,13303,134],{"class":133},[123,13305,4482],{"class":164},[123,13307,3760],{"class":129},[123,13309,13310,13312,13315,13317,13319],{"class":125,"line":718},[123,13311,4429],{"class":133},[123,13313,13314],{"class":129}," b ",[123,13316,134],{"class":133},[123,13318,4482],{"class":164},[123,13320,3760],{"class":129},[123,13322,13323],{"class":125,"line":1138},[123,13324,232],{"emptyLinePlaceholder":231},[123,13326,13327],{"class":125,"line":1429},[123,13328,13329],{"class":2673},"    \u002F\u002F打印地址\n",[123,13331,13332,13334,13336,13339,13341,13343,13345,13347,13349,13352,13354],{"class":125,"line":1439},[123,13333,8962],{"class":129},[123,13335,3643],{"class":133},[123,13337,13338],{"class":143}," \"局部变量a地址为： \"",[123,13340,3911],{"class":133},[123,13342,4116],{"class":129},[123,13344,1742],{"class":133},[123,13346,3035],{"class":129},[123,13348,2960],{"class":133},[123,13350,13351],{"class":129},"a ",[123,13353,3643],{"class":133},[123,13355,11272],{"class":129},[123,13357,13358,13360,13362,13365,13367,13369,13371,13373,13375,13378,13380],{"class":125,"line":1444},[123,13359,8962],{"class":129},[123,13361,3643],{"class":133},[123,13363,13364],{"class":143}," \"局部变量b地址为： \"",[123,13366,3911],{"class":133},[123,13368,4116],{"class":129},[123,13370,1742],{"class":133},[123,13372,3035],{"class":129},[123,13374,2960],{"class":133},[123,13376,13377],{"class":129},"b ",[123,13379,3643],{"class":133},[123,13381,11272],{"class":129},[123,13383,13384],{"class":125,"line":1453},[123,13385,232],{"emptyLinePlaceholder":231},[123,13387,13388,13390,13392,13395,13397,13400,13402,13404,13406,13409,13411],{"class":125,"line":1458},[123,13389,8962],{"class":129},[123,13391,3643],{"class":133},[123,13393,13394],{"class":143}," \"全局变量g_a地址为： \"",[123,13396,3911],{"class":133},[123,13398,13399],{"class":129},"  (",[123,13401,1742],{"class":133},[123,13403,3035],{"class":129},[123,13405,2960],{"class":133},[123,13407,13408],{"class":129},"g_a ",[123,13410,3643],{"class":133},[123,13412,11272],{"class":129},[123,13414,13415,13417,13419,13422,13424,13426,13428,13430,13432,13435,13437],{"class":125,"line":1476},[123,13416,8962],{"class":129},[123,13418,3643],{"class":133},[123,13420,13421],{"class":143}," \"全局变量g_b地址为： \"",[123,13423,3911],{"class":133},[123,13425,13399],{"class":129},[123,13427,1742],{"class":133},[123,13429,3035],{"class":129},[123,13431,2960],{"class":133},[123,13433,13434],{"class":129},"g_b ",[123,13436,3643],{"class":133},[123,13438,11272],{"class":129},[123,13440,13441],{"class":125,"line":1494},[123,13442,232],{"emptyLinePlaceholder":231},[123,13444,13445],{"class":125,"line":1499},[123,13446,13447],{"class":2673},"    \u002F\u002F静态变量\n",[123,13449,13450,13453,13455,13458,13460,13462],{"class":125,"line":1517},[123,13451,13452],{"class":133},"    static",[123,13454,4826],{"class":133},[123,13456,13457],{"class":129}," s_a ",[123,13459,134],{"class":133},[123,13461,4482],{"class":164},[123,13463,3760],{"class":129},[123,13465,13466,13468,13470,13473,13475,13477],{"class":125,"line":1534},[123,13467,13452],{"class":133},[123,13469,4826],{"class":133},[123,13471,13472],{"class":129}," s_b ",[123,13474,134],{"class":133},[123,13476,4482],{"class":164},[123,13478,3760],{"class":129},[123,13480,13481],{"class":125,"line":1539},[123,13482,232],{"emptyLinePlaceholder":231},[123,13484,13485,13487,13489,13492,13494,13496,13498,13500,13502,13505,13507],{"class":125,"line":2080},[123,13486,8962],{"class":129},[123,13488,3643],{"class":133},[123,13490,13491],{"class":143}," \"静态变量s_a地址为： \"",[123,13493,3911],{"class":133},[123,13495,4116],{"class":129},[123,13497,1742],{"class":133},[123,13499,3035],{"class":129},[123,13501,2960],{"class":133},[123,13503,13504],{"class":129},"s_a ",[123,13506,3643],{"class":133},[123,13508,11272],{"class":129},[123,13510,13511,13513,13515,13518,13520,13522,13524,13526,13528,13531,13533],{"class":125,"line":2097},[123,13512,8962],{"class":129},[123,13514,3643],{"class":133},[123,13516,13517],{"class":143}," \"静态变量s_b地址为： \"",[123,13519,3911],{"class":133},[123,13521,4116],{"class":129},[123,13523,1742],{"class":133},[123,13525,3035],{"class":129},[123,13527,2960],{"class":133},[123,13529,13530],{"class":129},"s_b ",[123,13532,3643],{"class":133},[123,13534,11272],{"class":129},[123,13536,13537],{"class":125,"line":2114},[123,13538,232],{"emptyLinePlaceholder":231},[123,13540,13541,13543,13545,13548,13550,13552,13554,13556,13558,13560,13562],{"class":125,"line":2125},[123,13542,8962],{"class":129},[123,13544,3643],{"class":133},[123,13546,13547],{"class":143}," \"字符串常量地址为： \"",[123,13549,3911],{"class":133},[123,13551,4116],{"class":129},[123,13553,1742],{"class":133},[123,13555,3035],{"class":129},[123,13557,2960],{"class":133},[123,13559,3660],{"class":143},[123,13561,3911],{"class":133},[123,13563,11272],{"class":129},[123,13565,13566,13568,13570,13572,13574,13576,13578,13580,13582,13585,13587],{"class":125,"line":2130},[123,13567,8962],{"class":129},[123,13569,3643],{"class":133},[123,13571,13547],{"class":143},[123,13573,3911],{"class":133},[123,13575,4116],{"class":129},[123,13577,1742],{"class":133},[123,13579,3035],{"class":129},[123,13581,2960],{"class":133},[123,13583,13584],{"class":143},"\"hello world1\"",[123,13586,3911],{"class":133},[123,13588,11272],{"class":129},[123,13590,13591],{"class":125,"line":5033},[123,13592,232],{"emptyLinePlaceholder":231},[123,13594,13595,13597,13599,13602,13604,13606,13608,13610,13612,13615,13617],{"class":125,"line":5041},[123,13596,8962],{"class":129},[123,13598,3643],{"class":133},[123,13600,13601],{"class":143}," \"全局常量c_g_a地址为： \"",[123,13603,3911],{"class":133},[123,13605,4116],{"class":129},[123,13607,1742],{"class":133},[123,13609,3035],{"class":129},[123,13611,2960],{"class":133},[123,13613,13614],{"class":129},"c_g_a ",[123,13616,3643],{"class":133},[123,13618,11272],{"class":129},[123,13620,13621,13623,13625,13628,13630,13632,13634,13636,13638,13641,13643],{"class":125,"line":5046},[123,13622,8962],{"class":129},[123,13624,3643],{"class":133},[123,13626,13627],{"class":143}," \"全局常量c_g_b地址为： \"",[123,13629,3911],{"class":133},[123,13631,4116],{"class":129},[123,13633,1742],{"class":133},[123,13635,3035],{"class":129},[123,13637,2960],{"class":133},[123,13639,13640],{"class":129},"c_g_b ",[123,13642,3643],{"class":133},[123,13644,11272],{"class":129},[123,13646,13647],{"class":125,"line":5052},[123,13648,232],{"emptyLinePlaceholder":231},[123,13650,13651,13654,13656,13659,13661,13663],{"class":125,"line":5058},[123,13652,13653],{"class":133},"    const",[123,13655,4826],{"class":133},[123,13657,13658],{"class":129}," c_l_a ",[123,13660,134],{"class":133},[123,13662,4482],{"class":164},[123,13664,3760],{"class":129},[123,13666,13667,13669,13671,13674,13676,13678],{"class":125,"line":5063},[123,13668,13653],{"class":133},[123,13670,4826],{"class":133},[123,13672,13673],{"class":129}," c_l_b ",[123,13675,134],{"class":133},[123,13677,4482],{"class":164},[123,13679,3760],{"class":129},[123,13681,13682,13684,13686,13689,13691,13693,13695,13697,13699,13702,13704],{"class":125,"line":10380},[123,13683,8962],{"class":129},[123,13685,3643],{"class":133},[123,13687,13688],{"class":143}," \"局部常量c_l_a地址为： \"",[123,13690,3911],{"class":133},[123,13692,4116],{"class":129},[123,13694,1742],{"class":133},[123,13696,3035],{"class":129},[123,13698,2960],{"class":133},[123,13700,13701],{"class":129},"c_l_a ",[123,13703,3643],{"class":133},[123,13705,11272],{"class":129},[123,13707,13708,13710,13712,13715,13717,13719,13721,13723,13725,13728,13730],{"class":125,"line":10404},[123,13709,8962],{"class":129},[123,13711,3643],{"class":133},[123,13713,13714],{"class":143}," \"局部常量c_l_b地址为： \"",[123,13716,3911],{"class":133},[123,13718,4116],{"class":129},[123,13720,1742],{"class":133},[123,13722,3035],{"class":129},[123,13724,2960],{"class":133},[123,13726,13727],{"class":129},"c_l_b ",[123,13729,3643],{"class":133},[123,13731,11272],{"class":129},[123,13733,13734],{"class":125,"line":10409},[123,13735,232],{"emptyLinePlaceholder":231},[123,13737,13738,13740,13742,13744],{"class":125,"line":10415},[123,13739,4747],{"class":337},[123,13741,1315],{"class":129},[123,13743,4752],{"class":143},[123,13745,5161],{"class":129},[123,13747,13748],{"class":125,"line":10442},[123,13749,232],{"emptyLinePlaceholder":231},[123,13751,13752,13754,13756],{"class":125,"line":10447},[123,13753,6529],{"class":133},[123,13755,6532],{"class":164},[123,13757,3760],{"class":129},[123,13759,13760],{"class":125,"line":10453},[123,13761,171],{"class":129},[19,13763,13764],{},"总结：",[3606,13766,13767,13770,13773,13776],{},[29,13768,13769],{},"c++中程序运行前分为全局区和代码区",[29,13771,13772],{},"代码区特点是共享和只读",[29,13774,13775],{},"全局区中存放全局变量、静态变量、常量",[29,13777,13778],{},"常量区中存放const修饰的全局常量和字符串常量",[2587,13780,13782],{"id":13781},"_512程序运行后","5.1.2程序运行后",[26,13784,13785],{},[29,13786,13787],{},"栈区：",[3606,13789,13790,13797],{},[29,13791,13792,13793,13796],{},"由编译器自动分配释放, 存放",[2759,13794,13795],{},"函数的参数值,局部变量","等",[29,13798,13799,13800,13803],{},"注意事项：",[2759,13801,13802],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[113,13805,13807],{"className":2608,"code":13806,"language":2610,"meta":118,"style":118},"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",[120,13808,13809,13820,13824,13839,13851,13855,13859,13867,13872,13887,13905,13922,13932,13940],{"__ignoreMap":118},[123,13810,13811,13813,13815,13818],{"class":125,"line":126},[123,13812,1742],{"class":133},[123,13814,8951],{"class":133},[123,13816,13817],{"class":337}," func",[123,13819,4420],{"class":129},[123,13821,13822],{"class":125,"line":140},[123,13823,186],{"class":129},[123,13825,13826,13828,13830,13832,13834,13836],{"class":125,"line":156},[123,13827,4429],{"class":133},[123,13829,13301],{"class":129},[123,13831,134],{"class":133},[123,13833,4482],{"class":164},[123,13835,2670],{"class":129},[123,13837,13838],{"class":2673}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[123,13840,13841,13843,13845,13848],{"class":125,"line":168},[123,13842,6529],{"class":133},[123,13844,13016],{"class":133},[123,13846,13847],{"class":129},"a;",[123,13849,13850],{"class":2673}," \u002F\u002F放回局部变量的地址\n",[123,13852,13853],{"class":125,"line":268},[123,13854,171],{"class":129},[123,13856,13857],{"class":125,"line":291},[123,13858,232],{"emptyLinePlaceholder":231},[123,13860,13861,13863,13865],{"class":125,"line":300},[123,13862,1742],{"class":133},[123,13864,4417],{"class":337},[123,13866,13285],{"class":129},[123,13868,13869],{"class":125,"line":305},[123,13870,13871],{"class":2673},"    \u002F\u002F接受func的返回值\n",[123,13873,13874,13876,13878,13881,13883,13885],{"class":125,"line":316},[123,13875,4429],{"class":133},[123,13877,8951],{"class":133},[123,13879,13880],{"class":129},"p ",[123,13882,134],{"class":133},[123,13884,13817],{"class":337},[123,13886,8069],{"class":129},[123,13888,13889,13891,13893,13895,13897,13899,13902],{"class":125,"line":673},[123,13890,8962],{"class":129},[123,13892,3643],{"class":133},[123,13894,8951],{"class":133},[123,13896,13880],{"class":129},[123,13898,3643],{"class":133},[123,13900,13901],{"class":129}," endl;",[123,13903,13904],{"class":2673}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[123,13906,13907,13909,13911,13913,13915,13917,13919],{"class":125,"line":692},[123,13908,8962],{"class":129},[123,13910,3643],{"class":133},[123,13912,8951],{"class":133},[123,13914,13880],{"class":129},[123,13916,3643],{"class":133},[123,13918,13901],{"class":129},[123,13920,13921],{"class":2673}," \u002F\u002F第二次这个数据不再保留\n",[123,13923,13924,13926,13928,13930],{"class":125,"line":713},[123,13925,4747],{"class":337},[123,13927,1315],{"class":129},[123,13929,4752],{"class":143},[123,13931,5161],{"class":129},[123,13933,13934,13936,13938],{"class":125,"line":718},[123,13935,6529],{"class":133},[123,13937,6532],{"class":164},[123,13939,3760],{"class":129},[123,13941,13942],{"class":125,"line":1138},[123,13943,171],{"class":129},[19,13945,13946],{},"输出结果：",[19,13948,13949],{},[3929,13950],{"alt":13951,"src":13952},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13954,13955],{},"总结：不要返回局部变量的地址",[26,13957,13958],{"start":140},[29,13959,13960],{},"堆区",[3606,13962,13963,13966],{},[29,13964,13965],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13967,13968],{},"在c++中主要利用new在堆区开辟内存",[113,13970,13972],{"className":2608,"code":13971,"language":2610,"meta":118,"style":118},"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",[120,13973,13974,13989,13993,13998,14019,14026,14030,14038,14042,14047,14061,14073],{"__ignoreMap":118},[123,13975,13976,13978,13981,13984,13986],{"class":125,"line":126},[123,13977,1742],{"class":133},[123,13979,13980],{"class":133},"  *",[123,13982,13983],{"class":337},"func",[123,13985,4870],{"class":129},[123,13987,13988],{"class":2673},"  \u002F\u002F函数返回指针\n",[123,13990,13991],{"class":125,"line":140},[123,13992,186],{"class":129},[123,13994,13995],{"class":125,"line":156},[123,13996,13997],{"class":2673},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[123,13999,14000,14002,14004,14006,14008,14011,14013,14015,14017],{"class":125,"line":168},[123,14001,6586],{"class":133},[123,14003,8951],{"class":133},[123,14005,19],{"class":129},[123,14007,134],{"class":133},[123,14009,14010],{"class":133}," new",[123,14012,4826],{"class":133},[123,14014,1315],{"class":129},[123,14016,2193],{"class":164},[123,14018,5161],{"class":129},[123,14020,14021,14023],{"class":125,"line":268},[123,14022,6820],{"class":133},[123,14024,14025],{"class":129}," p;\n",[123,14027,14028],{"class":125,"line":291},[123,14029,171],{"class":129},[123,14031,14032,14034,14036],{"class":125,"line":300},[123,14033,1742],{"class":133},[123,14035,4417],{"class":337},[123,14037,4420],{"class":129},[123,14039,14040],{"class":125,"line":305},[123,14041,186],{"class":129},[123,14043,14044],{"class":125,"line":316},[123,14045,14046],{"class":2673},"    \u002F\u002F在堆区开辟数据\n",[123,14048,14049,14051,14053,14055,14057,14059],{"class":125,"line":673},[123,14050,4429],{"class":133},[123,14052,8951],{"class":133},[123,14054,19],{"class":129},[123,14056,134],{"class":133},[123,14058,13983],{"class":337},[123,14060,8069],{"class":129},[123,14062,14063,14065,14067,14069,14071],{"class":125,"line":692},[123,14064,4017],{"class":129},[123,14066,8852],{"class":133},[123,14068,19],{"class":129},[123,14070,3643],{"class":133},[123,14072,3665],{"class":129},[123,14074,14075],{"class":125,"line":713},[123,14076,171],{"class":129},[19,14078,14079],{},"图片展示：",[19,14081,14082],{},[3929,14083],{"alt":13951,"src":14084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,14086,14087],{},"堆区内存由程序员管生死！！！",[26,14089,14090],{"start":156},[29,14091,14092],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,14094,14095],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,14097,14098,14099],{},"​语法：",[120,14100,14101],{}," new 数据类型",[19,14103,14104],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[113,14106,14108],{"className":2608,"code":14107,"language":2610,"meta":118,"style":118},"\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",[120,14109,14110,14115,14125,14129,14134,14139,14161,14165,14173,14177,14191,14203,14215,14227,14232,14237,14248,14252,14257,14265,14269,14274,14296,14322,14326,14344,14348,14374,14378,14390,14394,14399,14404,14412,14416,14420,14428,14432,14438,14444],{"__ignoreMap":118},[123,14111,14112],{"class":125,"line":126},[123,14113,14114],{"class":2673},"\u002F\u002F1.new的基本语法\n",[123,14116,14117,14119,14121,14123],{"class":125,"line":140},[123,14118,1742],{"class":133},[123,14120,8951],{"class":133},[123,14122,13983],{"class":337},[123,14124,4420],{"class":129},[123,14126,14127],{"class":125,"line":156},[123,14128,186],{"class":129},[123,14130,14131],{"class":125,"line":168},[123,14132,14133],{"class":2673},"    \u002F\u002F在堆区创建整型数据\n",[123,14135,14136],{"class":125,"line":268},[123,14137,14138],{"class":2673},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[123,14140,14141,14143,14145,14147,14150,14152,14154,14156,14158],{"class":125,"line":291},[123,14142,4429],{"class":133},[123,14144,8951],{"class":133},[123,14146,19],{"class":129},[123,14148,14149],{"class":133},"=new",[123,14151,4826],{"class":133},[123,14153,1315],{"class":129},[123,14155,2193],{"class":164},[123,14157,8399],{"class":129},[123,14159,14160],{"class":2673},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[123,14162,14163],{"class":125,"line":300},[123,14164,171],{"class":129},[123,14166,14167,14169,14171],{"class":125,"line":305},[123,14168,7797],{"class":133},[123,14170,8021],{"class":337},[123,14172,4420],{"class":129},[123,14174,14175],{"class":125,"line":316},[123,14176,186],{"class":129},[123,14178,14179,14181,14183,14185,14187,14189],{"class":125,"line":673},[123,14180,4429],{"class":133},[123,14182,8951],{"class":133},[123,14184,19],{"class":129},[123,14186,134],{"class":133},[123,14188,13983],{"class":337},[123,14190,8069],{"class":129},[123,14192,14193,14195,14197,14199,14201],{"class":125,"line":692},[123,14194,4017],{"class":129},[123,14196,8852],{"class":133},[123,14198,19],{"class":129},[123,14200,3643],{"class":133},[123,14202,3665],{"class":129},[123,14204,14205,14207,14209,14211,14213],{"class":125,"line":713},[123,14206,4017],{"class":129},[123,14208,8852],{"class":133},[123,14210,19],{"class":129},[123,14212,3643],{"class":133},[123,14214,3665],{"class":129},[123,14216,14217,14219,14221,14223,14225],{"class":125,"line":718},[123,14218,4017],{"class":129},[123,14220,8852],{"class":133},[123,14222,19],{"class":129},[123,14224,3643],{"class":133},[123,14226,3665],{"class":129},[123,14228,14229],{"class":125,"line":1138},[123,14230,14231],{"class":2673},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[123,14233,14234],{"class":125,"line":1429},[123,14235,14236],{"class":2673},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[123,14238,14239,14242,14245],{"class":125,"line":1439},[123,14240,14241],{"class":133},"    delete",[123,14243,14244],{"class":129}," p;",[123,14246,14247],{"class":2673},"\u002F\u002F删除这块地址\n",[123,14249,14250],{"class":125,"line":1444},[123,14251,171],{"class":129},[123,14253,14254],{"class":125,"line":1453},[123,14255,14256],{"class":2673},"\u002F\u002F2.在堆区利用new开辟数组\n",[123,14258,14259,14261,14263],{"class":125,"line":1458},[123,14260,7797],{"class":133},[123,14262,8090],{"class":337},[123,14264,4420],{"class":129},[123,14266,14267],{"class":125,"line":1476},[123,14268,186],{"class":129},[123,14270,14271],{"class":125,"line":1494},[123,14272,14273],{"class":2673},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[123,14275,14276,14278,14280,14282,14284,14286,14288,14290,14293],{"class":125,"line":1499},[123,14277,4429],{"class":133},[123,14279,8951],{"class":133},[123,14281,6319],{"class":129},[123,14283,14149],{"class":133},[123,14285,4826],{"class":133},[123,14287,839],{"class":129},[123,14289,2193],{"class":164},[123,14291,14292],{"class":129},"];",[123,14294,14295],{"class":2673},"\u002F\u002F10代表数组有10个元素\n",[123,14297,14298,14300,14302,14304,14306,14308,14310,14312,14314,14316,14318,14320],{"class":125,"line":1517},[123,14299,5641],{"class":133},[123,14301,4116],{"class":129},[123,14303,1742],{"class":133},[123,14305,5473],{"class":129},[123,14307,134],{"class":133},[123,14309,2799],{"class":164},[123,14311,5480],{"class":129},[123,14313,3509],{"class":133},[123,14315,2193],{"class":164},[123,14317,5480],{"class":129},[123,14319,4736],{"class":133},[123,14321,288],{"class":129},[123,14323,14324],{"class":125,"line":1534},[123,14325,4474],{"class":129},[123,14327,14328,14331,14333,14335,14337,14339,14341],{"class":125,"line":1539},[123,14329,14330],{"class":129},"        arr[i]",[123,14332,134],{"class":133},[123,14334,3047],{"class":129},[123,14336,3086],{"class":133},[123,14338,259],{"class":164},[123,14340,2670],{"class":129},[123,14342,14343],{"class":2673},"\u002F\u002F给10个元素赋值100～109\n",[123,14345,14346],{"class":125,"line":2080},[123,14347,4631],{"class":129},[123,14349,14350,14352,14354,14356,14358,14360,14362,14364,14366,14368,14370,14372],{"class":125,"line":2097},[123,14351,5641],{"class":133},[123,14353,4116],{"class":129},[123,14355,1742],{"class":133},[123,14357,5473],{"class":129},[123,14359,134],{"class":133},[123,14361,2799],{"class":164},[123,14363,5480],{"class":129},[123,14365,3509],{"class":133},[123,14367,2193],{"class":164},[123,14369,5480],{"class":129},[123,14371,4736],{"class":133},[123,14373,288],{"class":129},[123,14375,14376],{"class":125,"line":2114},[123,14377,4474],{"class":129},[123,14379,14380,14382,14384,14386,14388],{"class":125,"line":2125},[123,14381,5891],{"class":129},[123,14383,3643],{"class":133},[123,14385,6793],{"class":129},[123,14387,3643],{"class":133},[123,14389,3665],{"class":129},[123,14391,14392],{"class":125,"line":2130},[123,14393,4631],{"class":129},[123,14395,14396],{"class":125,"line":5033},[123,14397,14398],{"class":2673},"    \u002F\u002F释放堆区数组\n",[123,14400,14401],{"class":125,"line":5041},[123,14402,14403],{"class":2673},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[123,14405,14406,14409],{"class":125,"line":5046},[123,14407,14408],{"class":133},"    delete[]",[123,14410,14411],{"class":129}," arr;\n",[123,14413,14414],{"class":125,"line":5052},[123,14415,171],{"class":129},[123,14417,14418],{"class":125,"line":5058},[123,14419,232],{"emptyLinePlaceholder":231},[123,14421,14422,14424,14426],{"class":125,"line":5063},[123,14423,1742],{"class":133},[123,14425,4417],{"class":337},[123,14427,4420],{"class":129},[123,14429,14430],{"class":125,"line":10380},[123,14431,186],{"class":129},[123,14433,14434,14436],{"class":125,"line":10404},[123,14435,8066],{"class":337},[123,14437,8069],{"class":129},[123,14439,14440,14442],{"class":125,"line":10409},[123,14441,8135],{"class":337},[123,14443,8069],{"class":129},[123,14445,14446],{"class":125,"line":10415},[123,14447,171],{"class":129},[2526,14449,14450],{},"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":118,"searchDepth":140,"depth":140,"links":14452},[14453],{"id":13121,"depth":140,"text":13122,"children":14454},[14455,14456],{"id":13153,"depth":156,"text":13154},{"id":13781,"depth":156,"text":13782},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13113,"description":118},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14463,"title":14464,"body":14465,"description":118,"extension":2545,"meta":15945,"navigation":231,"path":15946,"seo":15947,"stem":15948,"__hash__":15949},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14466,"toc":15937},[14467,14470,14474,14477,14480,14649,14653,14658,14675,14680,14832,14836,14839,14842,15235,15239,15242,15247,15250,15562,15566,15572,15732,15734,15742,15746,15749,15756,15934],[10,14468,14464],{"id":14469},"_6引用",[14,14471,14473],{"id":14472},"_61引用基本用法","6.1引用基本用法",[19,14475,14476],{},"引用的本质：给变量起别名",[19,14478,14479],{},"语法：数据类型 &别名=原名",[113,14481,14483],{"className":2608,"code":14482,"language":2610,"meta":118,"style":118},"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",[120,14484,14485,14493,14497,14509,14521,14525,14544,14563,14567,14578,14582,14601,14619,14623,14633,14637,14645],{"__ignoreMap":118},[123,14486,14487,14489,14491],{"class":125,"line":126},[123,14488,1742],{"class":133},[123,14490,4417],{"class":337},[123,14492,13285],{"class":129},[123,14494,14495],{"class":125,"line":140},[123,14496,232],{"emptyLinePlaceholder":231},[123,14498,14499,14501,14503,14505,14507],{"class":125,"line":156},[123,14500,4429],{"class":133},[123,14502,13301],{"class":129},[123,14504,134],{"class":133},[123,14506,4482],{"class":164},[123,14508,3760],{"class":129},[123,14510,14511,14513,14515,14517,14519],{"class":125,"line":168},[123,14512,4429],{"class":133},[123,14514,13016],{"class":133},[123,14516,13377],{"class":129},[123,14518,134],{"class":133},[123,14520,3899],{"class":129},[123,14522,14523],{"class":125,"line":268},[123,14524,232],{"emptyLinePlaceholder":231},[123,14526,14527,14529,14531,14534,14536,14538,14540,14542],{"class":125,"line":291},[123,14528,8962],{"class":129},[123,14530,3643],{"class":133},[123,14532,14533],{"class":143}," \"a = \"",[123,14535,3911],{"class":133},[123,14537,13301],{"class":129},[123,14539,3643],{"class":133},[123,14541,13901],{"class":129},[123,14543,9701],{"class":2673},[123,14545,14546,14548,14550,14553,14555,14557,14559,14561],{"class":125,"line":300},[123,14547,8962],{"class":129},[123,14549,3643],{"class":133},[123,14551,14552],{"class":143}," \"b = \"",[123,14554,3911],{"class":133},[123,14556,13314],{"class":129},[123,14558,3643],{"class":133},[123,14560,13901],{"class":129},[123,14562,9701],{"class":2673},[123,14564,14565],{"class":125,"line":305},[123,14566,232],{"emptyLinePlaceholder":231},[123,14568,14569,14572,14574,14576],{"class":125,"line":316},[123,14570,14571],{"class":129},"    b ",[123,14573,134],{"class":133},[123,14575,8187],{"class":164},[123,14577,3760],{"class":129},[123,14579,14580],{"class":125,"line":673},[123,14581,232],{"emptyLinePlaceholder":231},[123,14583,14584,14586,14588,14590,14592,14594,14596,14598],{"class":125,"line":692},[123,14585,8962],{"class":129},[123,14587,3643],{"class":133},[123,14589,14533],{"class":143},[123,14591,3911],{"class":133},[123,14593,13301],{"class":129},[123,14595,3643],{"class":133},[123,14597,13901],{"class":129},[123,14599,14600],{"class":2673},"\u002F\u002F100\n",[123,14602,14603,14605,14607,14609,14611,14613,14615,14617],{"class":125,"line":713},[123,14604,8962],{"class":129},[123,14606,3643],{"class":133},[123,14608,14552],{"class":143},[123,14610,3911],{"class":133},[123,14612,13314],{"class":129},[123,14614,3643],{"class":133},[123,14616,13901],{"class":129},[123,14618,14600],{"class":2673},[123,14620,14621],{"class":125,"line":718},[123,14622,232],{"emptyLinePlaceholder":231},[123,14624,14625,14627,14629,14631],{"class":125,"line":1138},[123,14626,4747],{"class":337},[123,14628,1315],{"class":129},[123,14630,4752],{"class":143},[123,14632,5161],{"class":129},[123,14634,14635],{"class":125,"line":1429},[123,14636,232],{"emptyLinePlaceholder":231},[123,14638,14639,14641,14643],{"class":125,"line":1439},[123,14640,6529],{"class":133},[123,14642,6532],{"class":164},[123,14644,3760],{"class":129},[123,14646,14647],{"class":125,"line":1444},[123,14648,171],{"class":129},[14,14650,14652],{"id":14651},"_62引用的注意事项","6.2引用的注意事项",[26,14654,14655],{},[29,14656,14657],{},"引用必须要初始化",[113,14659,14661],{"className":2608,"code":14660,"language":2610,"meta":118,"style":118},"int &b;\u002F\u002F非常错误！\n",[120,14662,14663],{"__ignoreMap":118},[123,14664,14665,14667,14669,14672],{"class":125,"line":126},[123,14666,1742],{"class":133},[123,14668,13016],{"class":133},[123,14670,14671],{"class":129},"b;",[123,14673,14674],{"class":2673},"\u002F\u002F非常错误！\n",[26,14676,14677],{"start":140},[29,14678,14679],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[113,14681,14683],{"className":2608,"code":14682,"language":2610,"meta":118,"style":118},"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",[120,14684,14685,14693,14705,14717,14725,14741,14754,14772,14790,14810,14820,14828],{"__ignoreMap":118},[123,14686,14687,14689,14691],{"class":125,"line":126},[123,14688,1742],{"class":133},[123,14690,4417],{"class":337},[123,14692,13285],{"class":129},[123,14694,14695,14697,14699,14701,14703],{"class":125,"line":140},[123,14696,4429],{"class":133},[123,14698,13301],{"class":129},[123,14700,134],{"class":133},[123,14702,4482],{"class":164},[123,14704,3760],{"class":129},[123,14706,14707,14709,14711,14713,14715],{"class":125,"line":156},[123,14708,4429],{"class":133},[123,14710,13314],{"class":129},[123,14712,134],{"class":133},[123,14714,11382],{"class":164},[123,14716,3760],{"class":129},[123,14718,14719,14722],{"class":125,"line":168},[123,14720,14721],{"class":2673},"    \u002F\u002Fint &c;",[123,14723,14724],{"class":2673}," \u002F\u002F错误，引用必须初始化\n",[123,14726,14727,14729,14731,14733,14735,14738],{"class":125,"line":268},[123,14728,4429],{"class":133},[123,14730,13016],{"class":133},[123,14732,5388],{"class":129},[123,14734,134],{"class":133},[123,14736,14737],{"class":129}," a;",[123,14739,14740],{"class":2673}," \u002F\u002F一旦初始化后，就不可以更改\n",[123,14742,14743,14746,14748,14751],{"class":125,"line":291},[123,14744,14745],{"class":129},"    c ",[123,14747,134],{"class":133},[123,14749,14750],{"class":129}," b;",[123,14752,14753],{"class":2673}," \u002F\u002F这是赋值操作，不是更改引用\n",[123,14755,14756,14758,14760,14762,14764,14766,14768,14770],{"class":125,"line":300},[123,14757,8962],{"class":129},[123,14759,3643],{"class":133},[123,14761,14533],{"class":143},[123,14763,3911],{"class":133},[123,14765,13301],{"class":129},[123,14767,3643],{"class":133},[123,14769,13901],{"class":129},[123,14771,9686],{"class":2673},[123,14773,14774,14776,14778,14780,14782,14784,14786,14788],{"class":125,"line":305},[123,14775,8962],{"class":129},[123,14777,3643],{"class":133},[123,14779,14552],{"class":143},[123,14781,3911],{"class":133},[123,14783,13314],{"class":129},[123,14785,3643],{"class":133},[123,14787,13901],{"class":129},[123,14789,9686],{"class":2673},[123,14791,14792,14794,14796,14799,14801,14804,14806,14808],{"class":125,"line":316},[123,14793,8962],{"class":129},[123,14795,3643],{"class":133},[123,14797,14798],{"class":143}," \"c = \"",[123,14800,3911],{"class":133},[123,14802,14803],{"class":129}," c ",[123,14805,3643],{"class":133},[123,14807,13901],{"class":129},[123,14809,9686],{"class":2673},[123,14811,14812,14814,14816,14818],{"class":125,"line":673},[123,14813,4747],{"class":337},[123,14815,1315],{"class":129},[123,14817,4752],{"class":143},[123,14819,5161],{"class":129},[123,14821,14822,14824,14826],{"class":125,"line":692},[123,14823,6529],{"class":133},[123,14825,6532],{"class":164},[123,14827,3760],{"class":129},[123,14829,14830],{"class":125,"line":713},[123,14831,171],{"class":129},[14,14833,14835],{"id":14834},"_63引用做函数参数","6.3引用做函数参数",[19,14837,14838],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14840,14841],{},"优点：可以简化指针修改实参",[113,14843,14845],{"className":2608,"code":14844,"language":2610,"meta":118,"style":118},"\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",[120,14846,14847,14852,14874,14885,14895,14904,14908,14912,14917,14939,14951,14963,14973,14977,14981,14986,15008,15018,15026,15034,15038,15042,15050,15054,15066,15078,15082,15093,15119,15123,15143,15167,15171,15181,15205,15209,15219,15223,15231],{"__ignoreMap":118},[123,14848,14849],{"class":125,"line":126},[123,14850,14851],{"class":2673},"\u002F\u002F1. 值传递\n",[123,14853,14854,14856,14859,14861,14863,14865,14867,14869,14871],{"class":125,"line":140},[123,14855,7797],{"class":133},[123,14857,14858],{"class":337}," mySwap01",[123,14860,1315],{"class":129},[123,14862,1742],{"class":133},[123,14864,3865],{"class":279},[123,14866,251],{"class":129},[123,14868,1742],{"class":133},[123,14870,5275],{"class":279},[123,14872,14873],{"class":129},") {\n",[123,14875,14876,14878,14881,14883],{"class":125,"line":156},[123,14877,4429],{"class":133},[123,14879,14880],{"class":129}," temp ",[123,14882,134],{"class":133},[123,14884,3899],{"class":129},[123,14886,14887,14890,14892],{"class":125,"line":168},[123,14888,14889],{"class":129},"    a ",[123,14891,134],{"class":133},[123,14893,14894],{"class":129}," b;\n",[123,14896,14897,14899,14901],{"class":125,"line":268},[123,14898,14571],{"class":129},[123,14900,134],{"class":133},[123,14902,14903],{"class":129}," temp;\n",[123,14905,14906],{"class":125,"line":291},[123,14907,171],{"class":129},[123,14909,14910],{"class":125,"line":300},[123,14911,232],{"emptyLinePlaceholder":231},[123,14913,14914],{"class":125,"line":305},[123,14915,14916],{"class":2673},"\u002F\u002F2. 地址传递\n",[123,14918,14919,14921,14924,14926,14929,14931,14933,14935,14937],{"class":125,"line":316},[123,14920,7797],{"class":133},[123,14922,14923],{"class":337}," mySwap02",[123,14925,1315],{"class":129},[123,14927,14928],{"class":133},"int*",[123,14930,3865],{"class":279},[123,14932,251],{"class":129},[123,14934,14928],{"class":133},[123,14936,5275],{"class":279},[123,14938,14873],{"class":129},[123,14940,14941,14943,14945,14947,14949],{"class":125,"line":673},[123,14942,4429],{"class":133},[123,14944,14880],{"class":129},[123,14946,134],{"class":133},[123,14948,8951],{"class":133},[123,14950,8630],{"class":129},[123,14952,14953,14955,14957,14959,14961],{"class":125,"line":692},[123,14954,8836],{"class":133},[123,14956,13351],{"class":129},[123,14958,134],{"class":133},[123,14960,8951],{"class":133},[123,14962,8502],{"class":129},[123,14964,14965,14967,14969,14971],{"class":125,"line":713},[123,14966,8836],{"class":133},[123,14968,13377],{"class":129},[123,14970,134],{"class":133},[123,14972,14903],{"class":129},[123,14974,14975],{"class":125,"line":718},[123,14976,171],{"class":129},[123,14978,14979],{"class":125,"line":1138},[123,14980,232],{"emptyLinePlaceholder":231},[123,14982,14983],{"class":125,"line":1429},[123,14984,14985],{"class":2673},"\u002F\u002F3. 引用传递\n",[123,14987,14988,14990,14993,14995,14998,15000,15002,15004,15006],{"class":125,"line":1439},[123,14989,7797],{"class":133},[123,14991,14992],{"class":337}," mySwap03",[123,14994,1315],{"class":129},[123,14996,14997],{"class":133},"int&",[123,14999,3865],{"class":279},[123,15001,251],{"class":129},[123,15003,14997],{"class":133},[123,15005,5275],{"class":279},[123,15007,14873],{"class":129},[123,15009,15010,15012,15014,15016],{"class":125,"line":1444},[123,15011,4429],{"class":133},[123,15013,14880],{"class":129},[123,15015,134],{"class":133},[123,15017,3899],{"class":129},[123,15019,15020,15022,15024],{"class":125,"line":1453},[123,15021,14889],{"class":129},[123,15023,134],{"class":133},[123,15025,14894],{"class":129},[123,15027,15028,15030,15032],{"class":125,"line":1458},[123,15029,14571],{"class":129},[123,15031,134],{"class":133},[123,15033,14903],{"class":129},[123,15035,15036],{"class":125,"line":1476},[123,15037,171],{"class":129},[123,15039,15040],{"class":125,"line":1494},[123,15041,232],{"emptyLinePlaceholder":231},[123,15043,15044,15046,15048],{"class":125,"line":1499},[123,15045,1742],{"class":133},[123,15047,4417],{"class":337},[123,15049,13285],{"class":129},[123,15051,15052],{"class":125,"line":1517},[123,15053,232],{"emptyLinePlaceholder":231},[123,15055,15056,15058,15060,15062,15064],{"class":125,"line":1534},[123,15057,4429],{"class":133},[123,15059,13301],{"class":129},[123,15061,134],{"class":133},[123,15063,4482],{"class":164},[123,15065,3760],{"class":129},[123,15067,15068,15070,15072,15074,15076],{"class":125,"line":1539},[123,15069,4429],{"class":133},[123,15071,13314],{"class":129},[123,15073,134],{"class":133},[123,15075,11382],{"class":164},[123,15077,3760],{"class":129},[123,15079,15080],{"class":125,"line":2080},[123,15081,232],{"emptyLinePlaceholder":231},[123,15083,15084,15087,15090],{"class":125,"line":2097},[123,15085,15086],{"class":337},"    mySwap01",[123,15088,15089],{"class":129},"(a, b);",[123,15091,15092],{"class":2673},"\u002F\u002F值传递，形参不会修饰实参\n",[123,15094,15095,15097,15099,15102,15104,15106,15108,15111,15113,15115,15117],{"class":125,"line":2114},[123,15096,8962],{"class":129},[123,15098,3643],{"class":133},[123,15100,15101],{"class":143}," \"a:\"",[123,15103,3911],{"class":133},[123,15105,13301],{"class":129},[123,15107,3643],{"class":133},[123,15109,15110],{"class":143}," \" b:\"",[123,15112,3911],{"class":133},[123,15114,13314],{"class":129},[123,15116,3643],{"class":133},[123,15118,11272],{"class":129},[123,15120,15121],{"class":125,"line":2125},[123,15122,232],{"emptyLinePlaceholder":231},[123,15124,15125,15128,15130,15132,15135,15137,15140],{"class":125,"line":2130},[123,15126,15127],{"class":337},"    mySwap02",[123,15129,1315],{"class":129},[123,15131,2960],{"class":133},[123,15133,15134],{"class":129},"a, ",[123,15136,2960],{"class":133},[123,15138,15139],{"class":129},"b);",[123,15141,15142],{"class":2673},"\u002F\u002F地址传递，形参会修饰实参\n",[123,15144,15145,15147,15149,15151,15153,15155,15157,15159,15161,15163,15165],{"class":125,"line":5033},[123,15146,8962],{"class":129},[123,15148,3643],{"class":133},[123,15150,15101],{"class":143},[123,15152,3911],{"class":133},[123,15154,13301],{"class":129},[123,15156,3643],{"class":133},[123,15158,15110],{"class":143},[123,15160,3911],{"class":133},[123,15162,13314],{"class":129},[123,15164,3643],{"class":133},[123,15166,11272],{"class":129},[123,15168,15169],{"class":125,"line":5041},[123,15170,232],{"emptyLinePlaceholder":231},[123,15172,15173,15176,15178],{"class":125,"line":5046},[123,15174,15175],{"class":337},"    mySwap03",[123,15177,15089],{"class":129},[123,15179,15180],{"class":2673},"\u002F\u002F引用传递，形参会修饰实参\n",[123,15182,15183,15185,15187,15189,15191,15193,15195,15197,15199,15201,15203],{"class":125,"line":5052},[123,15184,8962],{"class":129},[123,15186,3643],{"class":133},[123,15188,15101],{"class":143},[123,15190,3911],{"class":133},[123,15192,13301],{"class":129},[123,15194,3643],{"class":133},[123,15196,15110],{"class":143},[123,15198,3911],{"class":133},[123,15200,13314],{"class":129},[123,15202,3643],{"class":133},[123,15204,11272],{"class":129},[123,15206,15207],{"class":125,"line":5058},[123,15208,232],{"emptyLinePlaceholder":231},[123,15210,15211,15213,15215,15217],{"class":125,"line":5063},[123,15212,4747],{"class":337},[123,15214,1315],{"class":129},[123,15216,4752],{"class":143},[123,15218,5161],{"class":129},[123,15220,15221],{"class":125,"line":10380},[123,15222,232],{"emptyLinePlaceholder":231},[123,15224,15225,15227,15229],{"class":125,"line":10404},[123,15226,6529],{"class":133},[123,15228,6532],{"class":164},[123,15230,3760],{"class":129},[123,15232,15233],{"class":125,"line":10409},[123,15234,171],{"class":129},[14,15236,15238],{"id":15237},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15240,15241],{},"作用：引用是可以作为函数的返回值存在的",[19,15243,11457,15244],{},[2759,15245,15246],{},"不要返回局部变量引用",[19,15248,15249],{},"用法：函数调用作为左值",[113,15251,15253],{"className":12373,"code":15252,"language":12375,"meta":118,"style":118},"\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",[120,15254,15255,15260,15268,15283,15289,15293,15297,15302,15310,15327,15333,15337,15341,15349,15353,15358,15372,15392,15411,15415,15420,15433,15453,15471,15475,15491,15495,15514,15532,15536,15546,15550,15558],{"__ignoreMap":118},[123,15256,15257],{"class":125,"line":126},[123,15258,15259],{"class":2673},"\u002F\u002F返回局部变量引用\n",[123,15261,15262,15264,15266],{"class":125,"line":140},[123,15263,14997],{"class":133},[123,15265,8021],{"class":337},[123,15267,13285],{"class":129},[123,15269,15270,15272,15274,15276,15278,15280],{"class":125,"line":156},[123,15271,4429],{"class":133},[123,15273,13301],{"class":129},[123,15275,134],{"class":133},[123,15277,4482],{"class":164},[123,15279,2670],{"class":129},[123,15281,15282],{"class":2673}," \u002F\u002F局部变量\n",[123,15284,15285,15287],{"class":125,"line":168},[123,15286,6529],{"class":133},[123,15288,3899],{"class":129},[123,15290,15291],{"class":125,"line":268},[123,15292,171],{"class":129},[123,15294,15295],{"class":125,"line":291},[123,15296,232],{"emptyLinePlaceholder":231},[123,15298,15299],{"class":125,"line":300},[123,15300,15301],{"class":2673},"\u002F\u002F返回静态变量引用\n",[123,15303,15304,15306,15308],{"class":125,"line":305},[123,15305,14997],{"class":133},[123,15307,8090],{"class":337},[123,15309,13285],{"class":129},[123,15311,15312,15314,15316,15318,15320,15322,15324],{"class":125,"line":316},[123,15313,13452],{"class":133},[123,15315,4826],{"class":133},[123,15317,13301],{"class":129},[123,15319,134],{"class":133},[123,15321,11382],{"class":164},[123,15323,2670],{"class":129},[123,15325,15326],{"class":2673},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[123,15328,15329,15331],{"class":125,"line":673},[123,15330,6529],{"class":133},[123,15332,3899],{"class":129},[123,15334,15335],{"class":125,"line":692},[123,15336,171],{"class":129},[123,15338,15339],{"class":125,"line":713},[123,15340,232],{"emptyLinePlaceholder":231},[123,15342,15343,15345,15347],{"class":125,"line":718},[123,15344,1742],{"class":133},[123,15346,4417],{"class":337},[123,15348,13285],{"class":129},[123,15350,15351],{"class":125,"line":1138},[123,15352,232],{"emptyLinePlaceholder":231},[123,15354,15355],{"class":125,"line":1429},[123,15356,15357],{"class":2673},"    \u002F\u002F不能返回局部变量的引用\n",[123,15359,15360,15363,15366,15368,15370],{"class":125,"line":1439},[123,15361,15362],{"class":133},"    int&",[123,15364,15365],{"class":129}," ref ",[123,15367,134],{"class":133},[123,15369,8021],{"class":337},[123,15371,8069],{"class":129},[123,15373,15374,15376,15378,15381,15383,15385,15387,15389],{"class":125,"line":1444},[123,15375,8962],{"class":129},[123,15377,3643],{"class":133},[123,15379,15380],{"class":143}," \"ref = \"",[123,15382,3911],{"class":133},[123,15384,15365],{"class":129},[123,15386,3643],{"class":133},[123,15388,13901],{"class":129},[123,15390,15391],{"class":2673},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[123,15393,15394,15396,15398,15400,15402,15404,15406,15408],{"class":125,"line":1453},[123,15395,8962],{"class":129},[123,15397,3643],{"class":133},[123,15399,15380],{"class":143},[123,15401,3911],{"class":133},[123,15403,15365],{"class":129},[123,15405,3643],{"class":133},[123,15407,13901],{"class":129},[123,15409,15410],{"class":2673},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[123,15412,15413],{"class":125,"line":1458},[123,15414,232],{"emptyLinePlaceholder":231},[123,15416,15417],{"class":125,"line":1476},[123,15418,15419],{"class":2673},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[123,15421,15422,15424,15427,15429,15431],{"class":125,"line":1494},[123,15423,15362],{"class":133},[123,15425,15426],{"class":129}," ref2 ",[123,15428,134],{"class":133},[123,15430,8090],{"class":337},[123,15432,8069],{"class":129},[123,15434,15435,15437,15439,15442,15444,15446,15448,15450],{"class":125,"line":1499},[123,15436,8962],{"class":129},[123,15438,3643],{"class":133},[123,15440,15441],{"class":143}," \"ref2 = \"",[123,15443,3911],{"class":133},[123,15445,15426],{"class":129},[123,15447,3643],{"class":133},[123,15449,13901],{"class":129},[123,15451,15452],{"class":2673}," \u002F\u002F20\n",[123,15454,15455,15457,15459,15461,15463,15465,15467,15469],{"class":125,"line":1517},[123,15456,8962],{"class":129},[123,15458,3643],{"class":133},[123,15460,15441],{"class":143},[123,15462,3911],{"class":133},[123,15464,15426],{"class":129},[123,15466,3643],{"class":133},[123,15468,13901],{"class":129},[123,15470,15452],{"class":2673},[123,15472,15473],{"class":125,"line":1534},[123,15474,232],{"emptyLinePlaceholder":231},[123,15476,15477,15479,15482,15484,15486,15488],{"class":125,"line":1539},[123,15478,8135],{"class":337},[123,15480,15481],{"class":129},"() ",[123,15483,134],{"class":133},[123,15485,5441],{"class":164},[123,15487,2670],{"class":129},[123,15489,15490],{"class":2673},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[123,15492,15493],{"class":125,"line":2080},[123,15494,232],{"emptyLinePlaceholder":231},[123,15496,15497,15499,15501,15503,15505,15507,15509,15511],{"class":125,"line":2097},[123,15498,8962],{"class":129},[123,15500,3643],{"class":133},[123,15502,15441],{"class":143},[123,15504,3911],{"class":133},[123,15506,15426],{"class":129},[123,15508,3643],{"class":133},[123,15510,13901],{"class":129},[123,15512,15513],{"class":2673}," \u002F\u002F1000\n",[123,15515,15516,15518,15520,15522,15524,15526,15528,15530],{"class":125,"line":2114},[123,15517,8962],{"class":129},[123,15519,3643],{"class":133},[123,15521,15441],{"class":143},[123,15523,3911],{"class":133},[123,15525,15426],{"class":129},[123,15527,3643],{"class":133},[123,15529,13901],{"class":129},[123,15531,15513],{"class":2673},[123,15533,15534],{"class":125,"line":2125},[123,15535,232],{"emptyLinePlaceholder":231},[123,15537,15538,15540,15542,15544],{"class":125,"line":2130},[123,15539,4747],{"class":337},[123,15541,1315],{"class":129},[123,15543,4752],{"class":143},[123,15545,5161],{"class":129},[123,15547,15548],{"class":125,"line":5033},[123,15549,232],{"emptyLinePlaceholder":231},[123,15551,15552,15554,15556],{"class":125,"line":5041},[123,15553,6529],{"class":133},[123,15555,6532],{"class":164},[123,15557,3760],{"class":129},[123,15559,15560],{"class":125,"line":5046},[123,15561,171],{"class":129},[14,15563,15565],{"id":15564},"_65引用的本质","6.5引用的本质",[19,15567,15568,15569],{},"本质：",[2759,15570,15571],{},"引用的本质在c++内部实现是一个指针常量.",[113,15573,15575],{"className":2608,"code":15574,"language":2610,"meta":118,"style":118},"\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",[120,15576,15577,15582,15598,15612,15616,15625,15637,15642,15647,15658,15671,15675,15691,15708,15712,15720,15728],{"__ignoreMap":118},[123,15578,15579],{"class":125,"line":126},[123,15580,15581],{"class":2673},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[123,15583,15584,15586,15588,15590,15592,15595],{"class":125,"line":140},[123,15585,7797],{"class":133},[123,15587,13817],{"class":337},[123,15589,1315],{"class":129},[123,15591,14997],{"class":133},[123,15593,15594],{"class":279}," ref",[123,15596,15597],{"class":129},"){\n",[123,15599,15600,15603,15605,15607,15609],{"class":125,"line":156},[123,15601,15602],{"class":129},"    ref ",[123,15604,134],{"class":133},[123,15606,8187],{"class":164},[123,15608,2670],{"class":129},[123,15610,15611],{"class":2673}," \u002F\u002F ref是引用，转换为*ref = 100\n",[123,15613,15614],{"class":125,"line":168},[123,15615,171],{"class":129},[123,15617,15618,15620,15622],{"class":125,"line":268},[123,15619,1742],{"class":133},[123,15621,4417],{"class":337},[123,15623,15624],{"class":129},"(){\n",[123,15626,15627,15629,15631,15633,15635],{"class":125,"line":291},[123,15628,4429],{"class":133},[123,15630,13301],{"class":129},[123,15632,134],{"class":133},[123,15634,4482],{"class":164},[123,15636,3760],{"class":129},[123,15638,15639],{"class":125,"line":300},[123,15640,15641],{"class":129},"    \n",[123,15643,15644],{"class":125,"line":305},[123,15645,15646],{"class":2673},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[123,15648,15649,15651,15653,15655],{"class":125,"line":316},[123,15650,15362],{"class":133},[123,15652,15365],{"class":129},[123,15654,134],{"class":133},[123,15656,15657],{"class":129}," a; \n",[123,15659,15660,15662,15664,15666,15668],{"class":125,"line":673},[123,15661,15602],{"class":129},[123,15663,134],{"class":133},[123,15665,11382],{"class":164},[123,15667,2670],{"class":129},[123,15669,15670],{"class":2673}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[123,15672,15673],{"class":125,"line":692},[123,15674,15641],{"class":129},[123,15676,15677,15679,15681,15683,15685,15687,15689],{"class":125,"line":713},[123,15678,8962],{"class":129},[123,15680,3643],{"class":133},[123,15682,15101],{"class":143},[123,15684,3911],{"class":133},[123,15686,13301],{"class":129},[123,15688,3643],{"class":133},[123,15690,11272],{"class":129},[123,15692,15693,15695,15697,15700,15702,15704,15706],{"class":125,"line":718},[123,15694,8962],{"class":129},[123,15696,3643],{"class":133},[123,15698,15699],{"class":143}," \"ref:\"",[123,15701,3911],{"class":133},[123,15703,15365],{"class":129},[123,15705,3643],{"class":133},[123,15707,11272],{"class":129},[123,15709,15710],{"class":125,"line":1138},[123,15711,15641],{"class":129},[123,15713,15714,15717],{"class":125,"line":1429},[123,15715,15716],{"class":337},"    func",[123,15718,15719],{"class":129},"(a);\n",[123,15721,15722,15724,15726],{"class":125,"line":1439},[123,15723,6529],{"class":133},[123,15725,6532],{"class":164},[123,15727,3760],{"class":129},[123,15729,15730],{"class":125,"line":1444},[123,15731,171],{"class":129},[19,15733,13764],{},[26,15735,15736,15739],{},[29,15737,15738],{},"引用的本质，就是一个指针常量",[29,15740,15741],{},"引用一旦初始化，就不可以发生改变",[14,15743,15745],{"id":15744},"_66常量引用","6.6常量引用",[19,15747,15748],{},"作用：常量引用主要用来修饰形参",[19,15750,15751,15752,15755],{},"在函数形参列表中，可以加",[2759,15753,15754],{},"const修饰形参","，防止形参改变实参",[113,15757,15759],{"className":2608,"code":15758,"language":2610,"meta":118,"style":118},"\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",[120,15760,15761,15766,15771,15790,15795,15808,15812,15816,15824,15828,15833,15838,15852,15856,15864,15876,15880,15885,15897,15904,15908,15918,15922,15930],{"__ignoreMap":118},[123,15762,15763],{"class":125,"line":126},[123,15764,15765],{"class":2673},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[123,15767,15768],{"class":125,"line":140},[123,15769,15770],{"class":2673},"\u002F\u002F加上const就不能修改实参的\n",[123,15772,15773,15775,15778,15780,15782,15785,15788],{"class":125,"line":156},[123,15774,7797],{"class":133},[123,15776,15777],{"class":337}," showValue",[123,15779,1315],{"class":129},[123,15781,9225],{"class":133},[123,15783,15784],{"class":133}," int&",[123,15786,15787],{"class":279}," v",[123,15789,14873],{"class":129},[123,15791,15792],{"class":125,"line":168},[123,15793,15794],{"class":2673},"    \u002F\u002Fv += 100;\n",[123,15796,15797,15799,15801,15804,15806],{"class":125,"line":268},[123,15798,8962],{"class":129},[123,15800,3643],{"class":133},[123,15802,15803],{"class":129}," v ",[123,15805,3643],{"class":133},[123,15807,11272],{"class":129},[123,15809,15810],{"class":125,"line":291},[123,15811,171],{"class":129},[123,15813,15814],{"class":125,"line":300},[123,15815,232],{"emptyLinePlaceholder":231},[123,15817,15818,15820,15822],{"class":125,"line":305},[123,15819,1742],{"class":133},[123,15821,4417],{"class":337},[123,15823,13285],{"class":129},[123,15825,15826],{"class":125,"line":316},[123,15827,232],{"emptyLinePlaceholder":231},[123,15829,15830],{"class":125,"line":673},[123,15831,15832],{"class":2673},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[123,15834,15835],{"class":125,"line":692},[123,15836,15837],{"class":2673},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[123,15839,15840,15842,15844,15846,15848,15850],{"class":125,"line":713},[123,15841,13653],{"class":133},[123,15843,15784],{"class":133},[123,15845,15365],{"class":129},[123,15847,134],{"class":133},[123,15849,4482],{"class":164},[123,15851,3760],{"class":129},[123,15853,15854],{"class":125,"line":718},[123,15855,232],{"emptyLinePlaceholder":231},[123,15857,15858,15861],{"class":125,"line":1138},[123,15859,15860],{"class":2673},"    \u002F\u002Fref = 100;",[123,15862,15863],{"class":2673},"  \u002F\u002F加入const后不可以修改变量\n",[123,15865,15866,15868,15870,15872,15874],{"class":125,"line":1429},[123,15867,8962],{"class":129},[123,15869,3643],{"class":133},[123,15871,15365],{"class":129},[123,15873,3643],{"class":133},[123,15875,11272],{"class":129},[123,15877,15878],{"class":125,"line":1439},[123,15879,232],{"emptyLinePlaceholder":231},[123,15881,15882],{"class":125,"line":1444},[123,15883,15884],{"class":2673},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[123,15886,15887,15889,15891,15893,15895],{"class":125,"line":1453},[123,15888,4429],{"class":133},[123,15890,13301],{"class":129},[123,15892,134],{"class":133},[123,15894,4482],{"class":164},[123,15896,3760],{"class":129},[123,15898,15899,15902],{"class":125,"line":1458},[123,15900,15901],{"class":337},"    showValue",[123,15903,15719],{"class":129},[123,15905,15906],{"class":125,"line":1476},[123,15907,232],{"emptyLinePlaceholder":231},[123,15909,15910,15912,15914,15916],{"class":125,"line":1494},[123,15911,4747],{"class":337},[123,15913,1315],{"class":129},[123,15915,4752],{"class":143},[123,15917,5161],{"class":129},[123,15919,15920],{"class":125,"line":1499},[123,15921,232],{"emptyLinePlaceholder":231},[123,15923,15924,15926,15928],{"class":125,"line":1517},[123,15925,6529],{"class":133},[123,15927,6532],{"class":164},[123,15929,3760],{"class":129},[123,15931,15932],{"class":125,"line":1534},[123,15933,171],{"class":129},[2526,15935,15936],{},"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":118,"searchDepth":140,"depth":140,"links":15938},[15939,15940,15941,15942,15943,15944],{"id":14472,"depth":140,"text":14473},{"id":14651,"depth":140,"text":14652},{"id":14834,"depth":140,"text":14835},{"id":15237,"depth":140,"text":15238},{"id":15564,"depth":140,"text":15565},{"id":15744,"depth":140,"text":15745},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14464,"description":118},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15951,"title":15952,"body":15953,"description":118,"extension":2545,"meta":17033,"navigation":231,"path":17034,"seo":17035,"stem":17036,"__hash__":17037},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15954,"toc":17025},[15955,15958,15962,15965,15970,16201,16203,16214,16218,16221,16229,16333,16336,16340,16343,16347,16350,16355,16377,16383,16710,16713,16717,16725,17022],[10,15956,15952],{"id":15957},"_7函数高级部分",[14,15959,15961],{"id":15960},"_71函数默认参数","7.1函数默认参数",[19,15963,15964],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15966,7615,15967],{},[120,15968,15969],{}," 返回值类型  函数名 （参数= 默认值）{}",[113,15971,15973],{"className":2608,"code":15972,"language":2610,"meta":118,"style":118},"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",[120,15974,15975,16010,16025,16029,16033,16038,16043,16072,16092,16102,16106,16110,16118,16122,16149,16171,16175,16185,16189,16197],{"__ignoreMap":118},[123,15976,15977,15979,15981,15983,15985,15987,15989,15991,15993,15996,15998,16000,16002,16004,16006,16008],{"class":125,"line":126},[123,15978,1742],{"class":133},[123,15980,13817],{"class":337},[123,15982,1315],{"class":129},[123,15984,1742],{"class":133},[123,15986,3865],{"class":279},[123,15988,251],{"class":129},[123,15990,1742],{"class":133},[123,15992,5275],{"class":279},[123,15994,15995],{"class":133}," =",[123,15997,4482],{"class":164},[123,15999,251],{"class":129},[123,16001,1742],{"class":133},[123,16003,5291],{"class":279},[123,16005,15995],{"class":133},[123,16007,4482],{"class":164},[123,16009,14873],{"class":129},[123,16011,16012,16014,16016,16018,16020,16022],{"class":125,"line":140},[123,16013,6529],{"class":133},[123,16015,13301],{"class":129},[123,16017,3086],{"class":133},[123,16019,13314],{"class":129},[123,16021,3086],{"class":133},[123,16023,16024],{"class":129}," c;\n",[123,16026,16027],{"class":125,"line":156},[123,16028,171],{"class":129},[123,16030,16031],{"class":125,"line":168},[123,16032,232],{"emptyLinePlaceholder":231},[123,16034,16035],{"class":125,"line":268},[123,16036,16037],{"class":2673},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[123,16039,16040],{"class":125,"line":291},[123,16041,16042],{"class":2673},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[123,16044,16045,16047,16050,16052,16054,16056,16058,16060,16062,16064,16066,16068,16070],{"class":125,"line":300},[123,16046,1742],{"class":133},[123,16048,16049],{"class":337}," func2",[123,16051,1315],{"class":129},[123,16053,1742],{"class":133},[123,16055,3865],{"class":279},[123,16057,15995],{"class":133},[123,16059,4482],{"class":164},[123,16061,251],{"class":129},[123,16063,1742],{"class":133},[123,16065,5275],{"class":279},[123,16067,15995],{"class":133},[123,16069,4482],{"class":164},[123,16071,5161],{"class":129},[123,16073,16074,16076,16078,16080,16082,16084,16086,16088,16090],{"class":125,"line":305},[123,16075,1742],{"class":133},[123,16077,16049],{"class":337},[123,16079,1315],{"class":129},[123,16081,1742],{"class":133},[123,16083,3865],{"class":279},[123,16085,251],{"class":129},[123,16087,1742],{"class":133},[123,16089,5275],{"class":279},[123,16091,14873],{"class":129},[123,16093,16094,16096,16098,16100],{"class":125,"line":316},[123,16095,6529],{"class":133},[123,16097,13301],{"class":129},[123,16099,3086],{"class":133},[123,16101,14894],{"class":129},[123,16103,16104],{"class":125,"line":673},[123,16105,171],{"class":129},[123,16107,16108],{"class":125,"line":692},[123,16109,232],{"emptyLinePlaceholder":231},[123,16111,16112,16114,16116],{"class":125,"line":713},[123,16113,1742],{"class":133},[123,16115,4417],{"class":337},[123,16117,13285],{"class":129},[123,16119,16120],{"class":125,"line":718},[123,16121,232],{"emptyLinePlaceholder":231},[123,16123,16124,16126,16128,16131,16133,16135,16137,16139,16141,16143,16145,16147],{"class":125,"line":1138},[123,16125,8962],{"class":129},[123,16127,3643],{"class":133},[123,16129,16130],{"class":143}," \"ret = \"",[123,16132,3911],{"class":133},[123,16134,13817],{"class":337},[123,16136,1315],{"class":129},[123,16138,3302],{"class":164},[123,16140,251],{"class":129},[123,16142,3302],{"class":164},[123,16144,1336],{"class":129},[123,16146,3643],{"class":133},[123,16148,11272],{"class":129},[123,16150,16151,16153,16155,16157,16159,16161,16163,16165,16167,16169],{"class":125,"line":1429},[123,16152,8962],{"class":129},[123,16154,3643],{"class":133},[123,16156,16130],{"class":143},[123,16158,3911],{"class":133},[123,16160,13817],{"class":337},[123,16162,1315],{"class":129},[123,16164,259],{"class":164},[123,16166,1336],{"class":129},[123,16168,3643],{"class":133},[123,16170,11272],{"class":129},[123,16172,16173],{"class":125,"line":1439},[123,16174,232],{"emptyLinePlaceholder":231},[123,16176,16177,16179,16181,16183],{"class":125,"line":1444},[123,16178,4747],{"class":337},[123,16180,1315],{"class":129},[123,16182,4752],{"class":143},[123,16184,5161],{"class":129},[123,16186,16187],{"class":125,"line":1453},[123,16188,232],{"emptyLinePlaceholder":231},[123,16190,16191,16193,16195],{"class":125,"line":1458},[123,16192,6529],{"class":133},[123,16194,6532],{"class":164},[123,16196,3760],{"class":129},[123,16198,16199],{"class":125,"line":1476},[123,16200,171],{"class":129},[19,16202,13764],{},[26,16204,16205,16208,16211],{},[29,16206,16207],{},"我传就用我；没传就用你",[29,16209,16210],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,16212,16213],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16215,16217],{"id":16216},"_72函数的占位参数","7.2函数的占位参数",[19,16219,16220],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16222,16223,16225,16226],{},[2759,16224,7615],{}," ",[120,16227,16228],{},"返回值类型 函数名 (数据类型){}",[113,16230,16232],{"className":2608,"code":16231,"language":2610,"meta":118,"style":118},"\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",[120,16233,16234,16239,16257,16270,16274,16282,16286,16303,16307,16317,16321,16329],{"__ignoreMap":118},[123,16235,16236],{"class":125,"line":126},[123,16237,16238],{"class":2673},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[123,16240,16241,16243,16245,16247,16249,16251,16253,16255],{"class":125,"line":140},[123,16242,7797],{"class":133},[123,16244,13817],{"class":337},[123,16246,1315],{"class":129},[123,16248,1742],{"class":133},[123,16250,3865],{"class":279},[123,16252,251],{"class":129},[123,16254,1742],{"class":133},[123,16256,14873],{"class":129},[123,16258,16259,16261,16263,16266,16268],{"class":125,"line":156},[123,16260,8962],{"class":129},[123,16262,3643],{"class":133},[123,16264,16265],{"class":143}," \"this is func\"",[123,16267,3911],{"class":133},[123,16269,11272],{"class":129},[123,16271,16272],{"class":125,"line":168},[123,16273,171],{"class":129},[123,16275,16276,16278,16280],{"class":125,"line":268},[123,16277,1742],{"class":133},[123,16279,4417],{"class":337},[123,16281,13285],{"class":129},[123,16283,16284],{"class":125,"line":291},[123,16285,232],{"emptyLinePlaceholder":231},[123,16287,16288,16290,16292,16294,16296,16298,16300],{"class":125,"line":300},[123,16289,15716],{"class":337},[123,16291,1315],{"class":129},[123,16293,2193],{"class":164},[123,16295,2985],{"class":129},[123,16297,2193],{"class":164},[123,16299,8399],{"class":129},[123,16301,16302],{"class":2673}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[123,16304,16305],{"class":125,"line":305},[123,16306,232],{"emptyLinePlaceholder":231},[123,16308,16309,16311,16313,16315],{"class":125,"line":316},[123,16310,4747],{"class":337},[123,16312,1315],{"class":129},[123,16314,4752],{"class":143},[123,16316,5161],{"class":129},[123,16318,16319],{"class":125,"line":673},[123,16320,232],{"emptyLinePlaceholder":231},[123,16322,16323,16325,16327],{"class":125,"line":692},[123,16324,6529],{"class":133},[123,16326,6532],{"class":164},[123,16328,3760],{"class":129},[123,16330,16331],{"class":125,"line":713},[123,16332,171],{"class":129},[19,16334,16335],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16337,16339],{"id":16338},"_73函数重载","7.3函数重载",[19,16341,16342],{},"意思是函数名是可以相同的",[2587,16344,16346],{"id":16345},"_731基本语法","7.3.1基本语法",[19,16348,16349],{},"作用：函数名可以相同，提高复用性",[19,16351,16352],{},[2759,16353,16354],{},"函数重载满足条件：",[3606,16356,16357,16360,16363],{},[29,16358,16359],{},"同一个作用域下",[29,16361,16362],{},"函数名称相同",[29,16364,16365,16366,16369,16370,16373,16374],{},"函数参数",[2759,16367,16368],{},"类型不同","  或者 ",[2759,16371,16372],{},"个数不同"," 或者 ",[2759,16375,16376],{},"顺序不同",[19,16378,16379,16382],{},[2759,16380,16381],{},"注意:","  函数的返回值不可以作为函数重载的条件",[113,16384,16386],{"className":12373,"code":16385,"language":12375,"meta":118,"style":118},"\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",[120,16387,16388,16393,16401,16405,16418,16422,16436,16440,16453,16457,16472,16476,16489,16493,16514,16518,16531,16535,16555,16559,16572,16576,16580,16585,16590,16595,16600,16605,16609,16613,16621,16625,16631,16641,16651,16665,16680,16684,16694,16698,16706],{"__ignoreMap":118},[123,16389,16390],{"class":125,"line":126},[123,16391,16392],{"class":2673},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[123,16394,16395,16397,16399],{"class":125,"line":140},[123,16396,7797],{"class":133},[123,16398,13817],{"class":337},[123,16400,4420],{"class":129},[123,16402,16403],{"class":125,"line":156},[123,16404,186],{"class":129},[123,16406,16407,16409,16411,16414,16416],{"class":125,"line":168},[123,16408,8962],{"class":129},[123,16410,3643],{"class":133},[123,16412,16413],{"class":143}," \"func 的调用！\"",[123,16415,3911],{"class":133},[123,16417,11272],{"class":129},[123,16419,16420],{"class":125,"line":268},[123,16421,171],{"class":129},[123,16423,16424,16426,16428,16430,16432,16434],{"class":125,"line":291},[123,16425,7797],{"class":133},[123,16427,13817],{"class":337},[123,16429,1315],{"class":129},[123,16431,1742],{"class":133},[123,16433,3865],{"class":279},[123,16435,288],{"class":129},[123,16437,16438],{"class":125,"line":300},[123,16439,186],{"class":129},[123,16441,16442,16444,16446,16449,16451],{"class":125,"line":305},[123,16443,8962],{"class":129},[123,16445,3643],{"class":133},[123,16447,16448],{"class":143}," \"func (int a) 的调用！\"",[123,16450,3911],{"class":133},[123,16452,11272],{"class":129},[123,16454,16455],{"class":125,"line":316},[123,16456,171],{"class":129},[123,16458,16459,16461,16463,16465,16468,16470],{"class":125,"line":673},[123,16460,7797],{"class":133},[123,16462,13817],{"class":337},[123,16464,1315],{"class":129},[123,16466,16467],{"class":133},"double",[123,16469,3865],{"class":279},[123,16471,288],{"class":129},[123,16473,16474],{"class":125,"line":692},[123,16475,186],{"class":129},[123,16477,16478,16480,16482,16485,16487],{"class":125,"line":713},[123,16479,8962],{"class":129},[123,16481,3643],{"class":133},[123,16483,16484],{"class":143}," \"func (double a)的调用！\"",[123,16486,3911],{"class":133},[123,16488,11272],{"class":129},[123,16490,16491],{"class":125,"line":718},[123,16492,171],{"class":129},[123,16494,16495,16497,16499,16501,16503,16505,16508,16510,16512],{"class":125,"line":1138},[123,16496,7797],{"class":133},[123,16498,13817],{"class":337},[123,16500,1315],{"class":129},[123,16502,1742],{"class":133},[123,16504,3865],{"class":279},[123,16506,16507],{"class":129}," ,",[123,16509,16467],{"class":133},[123,16511,5275],{"class":279},[123,16513,288],{"class":129},[123,16515,16516],{"class":125,"line":1429},[123,16517,186],{"class":129},[123,16519,16520,16522,16524,16527,16529],{"class":125,"line":1439},[123,16521,8962],{"class":129},[123,16523,3643],{"class":133},[123,16525,16526],{"class":143}," \"func (int a ,double b) 的调用！\"",[123,16528,3911],{"class":133},[123,16530,11272],{"class":129},[123,16532,16533],{"class":125,"line":1444},[123,16534,171],{"class":129},[123,16536,16537,16539,16541,16543,16545,16547,16549,16551,16553],{"class":125,"line":1453},[123,16538,7797],{"class":133},[123,16540,13817],{"class":337},[123,16542,1315],{"class":129},[123,16544,16467],{"class":133},[123,16546,3865],{"class":279},[123,16548,16507],{"class":129},[123,16550,1742],{"class":133},[123,16552,5275],{"class":279},[123,16554,288],{"class":129},[123,16556,16557],{"class":125,"line":1458},[123,16558,186],{"class":129},[123,16560,16561,16563,16565,16568,16570],{"class":125,"line":1476},[123,16562,8962],{"class":129},[123,16564,3643],{"class":133},[123,16566,16567],{"class":143}," \"func (double a ,int b)的调用！\"",[123,16569,3911],{"class":133},[123,16571,11272],{"class":129},[123,16573,16574],{"class":125,"line":1494},[123,16575,171],{"class":129},[123,16577,16578],{"class":125,"line":1499},[123,16579,232],{"emptyLinePlaceholder":231},[123,16581,16582],{"class":125,"line":1517},[123,16583,16584],{"class":2673},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[123,16586,16587],{"class":125,"line":1534},[123,16588,16589],{"class":2673},"\u002F\u002Fint func(double a, int b)\n",[123,16591,16592],{"class":125,"line":1539},[123,16593,16594],{"class":2673},"\u002F\u002F{\n",[123,16596,16597],{"class":125,"line":2080},[123,16598,16599],{"class":2673},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[123,16601,16602],{"class":125,"line":2097},[123,16603,16604],{"class":2673},"\u002F\u002F}\n",[123,16606,16607],{"class":125,"line":2114},[123,16608,232],{"emptyLinePlaceholder":231},[123,16610,16611],{"class":125,"line":2125},[123,16612,232],{"emptyLinePlaceholder":231},[123,16614,16615,16617,16619],{"class":125,"line":2130},[123,16616,1742],{"class":133},[123,16618,4417],{"class":337},[123,16620,13285],{"class":129},[123,16622,16623],{"class":125,"line":5033},[123,16624,232],{"emptyLinePlaceholder":231},[123,16626,16627,16629],{"class":125,"line":5041},[123,16628,15716],{"class":337},[123,16630,8069],{"class":129},[123,16632,16633,16635,16637,16639],{"class":125,"line":5046},[123,16634,15716],{"class":337},[123,16636,1315],{"class":129},[123,16638,2193],{"class":164},[123,16640,5161],{"class":129},[123,16642,16643,16645,16647,16649],{"class":125,"line":5052},[123,16644,15716],{"class":337},[123,16646,1315],{"class":129},[123,16648,2664],{"class":164},[123,16650,5161],{"class":129},[123,16652,16653,16655,16657,16659,16661,16663],{"class":125,"line":5058},[123,16654,15716],{"class":337},[123,16656,1315],{"class":129},[123,16658,2193],{"class":164},[123,16660,2985],{"class":129},[123,16662,2664],{"class":164},[123,16664,5161],{"class":129},[123,16666,16667,16669,16671,16673,16676,16678],{"class":125,"line":5063},[123,16668,15716],{"class":337},[123,16670,1315],{"class":129},[123,16672,2664],{"class":164},[123,16674,16675],{"class":129}," , ",[123,16677,2193],{"class":164},[123,16679,5161],{"class":129},[123,16681,16682],{"class":125,"line":10380},[123,16683,15641],{"class":129},[123,16685,16686,16688,16690,16692],{"class":125,"line":10404},[123,16687,4747],{"class":337},[123,16689,1315],{"class":129},[123,16691,4752],{"class":143},[123,16693,5161],{"class":129},[123,16695,16696],{"class":125,"line":10409},[123,16697,232],{"emptyLinePlaceholder":231},[123,16699,16700,16702,16704],{"class":125,"line":10415},[123,16701,6529],{"class":133},[123,16703,6532],{"class":164},[123,16705,3760],{"class":129},[123,16707,16708],{"class":125,"line":10442},[123,16709,171],{"class":129},[19,16711,16712],{},"重点：函数返回值不可以作为函数重载条件！",[2587,16714,16716],{"id":16715},"_732注意事项","7.3.2注意事项",[3606,16718,16719,16722],{},[29,16720,16721],{},"引用作为重载条件!!!",[29,16723,16724],{},"函数重载碰到函数默认参数",[113,16726,16728],{"className":2608,"code":16727,"language":2610,"meta":118,"style":118},"\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",[120,16729,16730,16735,16740,16744,16760,16764,16777,16781,16785,16803,16807,16820,16824,16828,16832,16837,16841,16865,16869,16882,16886,16890,16904,16908,16921,16925,16929,16937,16941,16953,16963,16976,16980,16984,16992,16996,17006,17010,17018],{"__ignoreMap":118},[123,16731,16732],{"class":125,"line":126},[123,16733,16734],{"class":2673},"\u002F\u002F函数重载注意事项\n",[123,16736,16737],{"class":125,"line":140},[123,16738,16739],{"class":2673},"\u002F\u002F1、引用作为重载条件\n",[123,16741,16742],{"class":125,"line":156},[123,16743,232],{"emptyLinePlaceholder":231},[123,16745,16746,16748,16750,16752,16754,16756,16758],{"class":125,"line":168},[123,16747,7797],{"class":133},[123,16749,13817],{"class":337},[123,16751,1315],{"class":129},[123,16753,1742],{"class":133},[123,16755,13016],{"class":133},[123,16757,2846],{"class":279},[123,16759,288],{"class":129},[123,16761,16762],{"class":125,"line":268},[123,16763,186],{"class":129},[123,16765,16766,16768,16770,16773,16775],{"class":125,"line":291},[123,16767,8962],{"class":129},[123,16769,3643],{"class":133},[123,16771,16772],{"class":143}," \"func (int &a) 调用 \"",[123,16774,3911],{"class":133},[123,16776,11272],{"class":129},[123,16778,16779],{"class":125,"line":300},[123,16780,171],{"class":129},[123,16782,16783],{"class":125,"line":305},[123,16784,232],{"emptyLinePlaceholder":231},[123,16786,16787,16789,16791,16793,16795,16797,16799,16801],{"class":125,"line":316},[123,16788,7797],{"class":133},[123,16790,13817],{"class":337},[123,16792,1315],{"class":129},[123,16794,9225],{"class":133},[123,16796,4826],{"class":133},[123,16798,13016],{"class":133},[123,16800,2846],{"class":279},[123,16802,288],{"class":129},[123,16804,16805],{"class":125,"line":673},[123,16806,186],{"class":129},[123,16808,16809,16811,16813,16816,16818],{"class":125,"line":692},[123,16810,8962],{"class":129},[123,16812,3643],{"class":133},[123,16814,16815],{"class":143}," \"func (const int &a) 调用 \"",[123,16817,3911],{"class":133},[123,16819,11272],{"class":129},[123,16821,16822],{"class":125,"line":713},[123,16823,171],{"class":129},[123,16825,16826],{"class":125,"line":718},[123,16827,232],{"emptyLinePlaceholder":231},[123,16829,16830],{"class":125,"line":1138},[123,16831,232],{"emptyLinePlaceholder":231},[123,16833,16834],{"class":125,"line":1429},[123,16835,16836],{"class":2673},"\u002F\u002F2、函数重载碰到函数默认参数\n",[123,16838,16839],{"class":125,"line":1439},[123,16840,232],{"emptyLinePlaceholder":231},[123,16842,16843,16845,16847,16849,16851,16853,16855,16857,16859,16861,16863],{"class":125,"line":1444},[123,16844,7797],{"class":133},[123,16846,16049],{"class":337},[123,16848,1315],{"class":129},[123,16850,1742],{"class":133},[123,16852,3865],{"class":279},[123,16854,251],{"class":129},[123,16856,1742],{"class":133},[123,16858,5275],{"class":279},[123,16860,15995],{"class":133},[123,16862,4482],{"class":164},[123,16864,288],{"class":129},[123,16866,16867],{"class":125,"line":1453},[123,16868,186],{"class":129},[123,16870,16871,16873,16875,16878,16880],{"class":125,"line":1458},[123,16872,8962],{"class":129},[123,16874,3643],{"class":133},[123,16876,16877],{"class":143}," \"func2(int a, int b = 10) 调用\"",[123,16879,3911],{"class":133},[123,16881,11272],{"class":129},[123,16883,16884],{"class":125,"line":1476},[123,16885,171],{"class":129},[123,16887,16888],{"class":125,"line":1494},[123,16889,232],{"emptyLinePlaceholder":231},[123,16891,16892,16894,16896,16898,16900,16902],{"class":125,"line":1499},[123,16893,7797],{"class":133},[123,16895,16049],{"class":337},[123,16897,1315],{"class":129},[123,16899,1742],{"class":133},[123,16901,3865],{"class":279},[123,16903,288],{"class":129},[123,16905,16906],{"class":125,"line":1517},[123,16907,186],{"class":129},[123,16909,16910,16912,16914,16917,16919],{"class":125,"line":1534},[123,16911,8962],{"class":129},[123,16913,3643],{"class":133},[123,16915,16916],{"class":143}," \"func2(int a) 调用\"",[123,16918,3911],{"class":133},[123,16920,11272],{"class":129},[123,16922,16923],{"class":125,"line":1539},[123,16924,171],{"class":129},[123,16926,16927],{"class":125,"line":2080},[123,16928,232],{"emptyLinePlaceholder":231},[123,16930,16931,16933,16935],{"class":125,"line":2097},[123,16932,1742],{"class":133},[123,16934,4417],{"class":337},[123,16936,13285],{"class":129},[123,16938,16939],{"class":125,"line":2114},[123,16940,15641],{"class":129},[123,16942,16943,16945,16947,16949,16951],{"class":125,"line":2125},[123,16944,4429],{"class":133},[123,16946,13301],{"class":129},[123,16948,134],{"class":133},[123,16950,4482],{"class":164},[123,16952,3760],{"class":129},[123,16954,16955,16957,16960],{"class":125,"line":2130},[123,16956,15716],{"class":337},[123,16958,16959],{"class":129},"(a);",[123,16961,16962],{"class":2673}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[123,16964,16965,16967,16969,16971,16973],{"class":125,"line":5033},[123,16966,15716],{"class":337},[123,16968,1315],{"class":129},[123,16970,2193],{"class":164},[123,16972,8399],{"class":129},[123,16974,16975],{"class":2673},"\u002F\u002F调用有const   10是个常量\n",[123,16977,16978],{"class":125,"line":5041},[123,16979,232],{"emptyLinePlaceholder":231},[123,16981,16982],{"class":125,"line":5046},[123,16983,232],{"emptyLinePlaceholder":231},[123,16985,16986,16989],{"class":125,"line":5052},[123,16987,16988],{"class":2673},"    \u002F\u002Ffunc2(10);",[123,16990,16991],{"class":2673}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[123,16993,16994],{"class":125,"line":5058},[123,16995,232],{"emptyLinePlaceholder":231},[123,16997,16998,17000,17002,17004],{"class":125,"line":5063},[123,16999,4747],{"class":337},[123,17001,1315],{"class":129},[123,17003,4752],{"class":143},[123,17005,5161],{"class":129},[123,17007,17008],{"class":125,"line":10380},[123,17009,232],{"emptyLinePlaceholder":231},[123,17011,17012,17014,17016],{"class":125,"line":10404},[123,17013,6529],{"class":133},[123,17015,6532],{"class":164},[123,17017,3760],{"class":129},[123,17019,17020],{"class":125,"line":10409},[123,17021,171],{"class":129},[2526,17023,17024],{},"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":118,"searchDepth":140,"depth":140,"links":17026},[17027,17028,17029],{"id":15960,"depth":140,"text":15961},{"id":16216,"depth":140,"text":16217},{"id":16338,"depth":140,"text":16339,"children":17030},[17031,17032],{"id":16345,"depth":156,"text":16346},{"id":16715,"depth":156,"text":16716},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15952,"description":118},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17039,"title":17040,"body":17041,"description":25792,"extension":2545,"meta":25793,"navigation":231,"path":25794,"seo":25795,"stem":25796,"__hash__":25797},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17042,"toc":25773},[17043,17046,17052,17059,17064,17067,17070,17073,17077,17081,17084,17087,17095,17100,17103,17110,17115,17274,17277,17530,17533,17536,17539,17544,17547,17550,17561,17565,17801,17805,17815,17818,17826,17973,17977,17980,17983,17987,18431,18435,18443,18451,19363,19370,19375,20003,20006,20009,20012,20131,20134,20221,20224,20350,20353,20447,20450,20803,20807,20815,20819,20826,20829,20832,20843,20849,20854,20866,20874,20894,20902,20919,21105,21108,21112,21115,21118,21121,21124,21127,21130,21133,21593,21599,21603,21606,21617,22204,22207,22696,22700,22703,22706,22709,22712,22715,22723,23119,23123,23126,23129,23575,23578,23581,23586,23589,23594,23597,23601,23604,23606,23612,23615,23921,23931,23972,23976,23979,23981,24014,24017,24324,24326,24341,24344,24367,24376,24382,24385,24389,24392,24395,24400,24411,24416,24424,24429,24559,24562,24565,24740,24745,24957,24961,24964,25078,25083,25322,25326,25330,25333,25336,25341,25446,25449,25452,25455,25459,25570,25573,25576,25581,25633,25636,25639,25644,25690,25693,25698,25766,25768,25771],[10,17044,17040],{"id":17045},"_8类和对象",[19,17047,17048,17049],{},"C++面向对象的三大特性为",[2759,17050,17051],{},"封装、继承、多态",[19,17053,17054,17055,17058],{},"C++认为",[2759,17056,17057],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,17060,17061],{},[2759,17062,17063],{},"例如：",[19,17065,17066],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,17068,17069],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,17071,17072],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17074,17076],{"id":17075},"_81封装","8.1封装",[2587,17078,17080],{"id":17079},"_811封装的意义","8.1.1封装的意义",[19,17082,17083],{},"封装是C++面向对象三大特性之一",[19,17085,17086],{},"封装的意义：",[3606,17088,17089,17092],{},[29,17090,17091],{},"将属性和行为作为一个整体，表现生活中的事物",[29,17093,17094],{},"将属性和行为加以权限控制",[19,17096,17097],{},[2759,17098,17099],{},"封装意义一：",[19,17101,17102],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,17104,17105,16225,17107],{},[2759,17106,7615],{},[120,17108,17109],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,17111,17112],{},[29,17113,17114],{},"**示例1：**设计一个圆类，求圆的周长",[113,17116,17118],{"className":2608,"code":17117,"language":2610,"meta":118,"style":118},"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",[120,17119,17120,17128,17132,17137,17142,17147,17152,17159,17164,17174,17178,17196,17200,17204,17212,17216,17221,17226,17231,17236,17247,17270],{"__ignoreMap":118},[123,17121,17122,17125],{"class":125,"line":126},[123,17123,17124],{"class":133},"class",[123,17126,17127],{"class":337}," Circle\n",[123,17129,17130],{"class":125,"line":140},[123,17131,186],{"class":129},[123,17133,17134],{"class":125,"line":156},[123,17135,17136],{"class":2673},"    \u002F\u002F访问权限\n",[123,17138,17139],{"class":125,"line":168},[123,17140,17141],{"class":2673},"    \u002F\u002F公共权限\n",[123,17143,17144],{"class":125,"line":268},[123,17145,17146],{"class":133},"public:\n",[123,17148,17149],{"class":125,"line":291},[123,17150,17151],{"class":2673},"    \u002F\u002F属性\n",[123,17153,17154,17156],{"class":125,"line":300},[123,17155,4429],{"class":133},[123,17157,17158],{"class":129}," m_r;\n",[123,17160,17161],{"class":125,"line":305},[123,17162,17163],{"class":2673},"    \u002F\u002F行为\n",[123,17165,17166,17169,17172],{"class":125,"line":316},[123,17167,17168],{"class":133},"    double",[123,17170,17171],{"class":337}," calculateZC",[123,17173,4420],{"class":129},[123,17175,17176],{"class":125,"line":673},[123,17177,4474],{"class":129},[123,17179,17180,17183,17186,17188,17191,17193],{"class":125,"line":692},[123,17181,17182],{"class":133},"        return",[123,17184,17185],{"class":164}," 2",[123,17187,3060],{"class":133},[123,17189,17190],{"class":129},"PI",[123,17192,3060],{"class":133},[123,17194,17195],{"class":129},"m_r;\n",[123,17197,17198],{"class":125,"line":713},[123,17199,4631],{"class":129},[123,17201,17202],{"class":125,"line":718},[123,17203,6434],{"class":129},[123,17205,17206,17208,17210],{"class":125,"line":1138},[123,17207,1742],{"class":133},[123,17209,4417],{"class":337},[123,17211,4420],{"class":129},[123,17213,17214],{"class":125,"line":1429},[123,17215,186],{"class":129},[123,17217,17218],{"class":125,"line":1439},[123,17219,17220],{"class":2673},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[123,17222,17223],{"class":125,"line":1444},[123,17224,17225],{"class":2673},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[123,17227,17228],{"class":125,"line":1453},[123,17229,17230],{"class":129},"    Circle c1;\n",[123,17232,17233],{"class":125,"line":1458},[123,17234,17235],{"class":2673},"    \u002F\u002F给圆对象 的属性进行赋值\n",[123,17237,17238,17241,17243,17245],{"class":125,"line":1476},[123,17239,17240],{"class":129},"    c1.m_r",[123,17242,134],{"class":133},[123,17244,2193],{"class":164},[123,17246,3760],{"class":129},[123,17248,17249,17251,17253,17256,17258,17261,17264,17266,17268],{"class":125,"line":1494},[123,17250,4017],{"class":129},[123,17252,3643],{"class":133},[123,17254,17255],{"class":143},"\"圆的周长\"",[123,17257,3643],{"class":133},[123,17259,17260],{"class":129},"c1.",[123,17262,17263],{"class":337},"calculateZC",[123,17265,4870],{"class":129},[123,17267,3643],{"class":133},[123,17269,3665],{"class":129},[123,17271,17272],{"class":125,"line":1499},[123,17273,171],{"class":129},[19,17275,17276],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[113,17278,17280],{"className":2608,"code":17279,"language":2610,"meta":118,"style":118},"#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",[120,17281,17282,17288,17298,17304,17310,17314,17318,17323,17330,17335,17353,17357,17367,17371,17376,17392,17396,17406,17410,17415,17423,17427,17459,17463,17467,17475,17479,17484,17489,17503,17517,17526],{"__ignoreMap":118},[123,17283,17284,17286],{"class":125,"line":126},[123,17285,4394],{"class":133},[123,17287,4397],{"class":143},[123,17289,17290,17292,17294,17296],{"class":125,"line":140},[123,17291,4402],{"class":133},[123,17293,4405],{"class":133},[123,17295,4408],{"class":337},[123,17297,3760],{"class":129},[123,17299,17300,17302],{"class":125,"line":156},[123,17301,4394],{"class":133},[123,17303,10181],{"class":143},[123,17305,17306,17308],{"class":125,"line":168},[123,17307,17124],{"class":133},[123,17309,10194],{"class":337},[123,17311,17312],{"class":125,"line":268},[123,17313,186],{"class":129},[123,17315,17316],{"class":125,"line":291},[123,17317,17146],{"class":133},[123,17319,17320],{"class":125,"line":300},[123,17321,17322],{"class":129},"    string m_name;\n",[123,17324,17325,17327],{"class":125,"line":305},[123,17326,4429],{"class":133},[123,17328,17329],{"class":129}," m_id;\n",[123,17331,17332],{"class":125,"line":316},[123,17333,17334],{"class":2673},"    \u002F\u002F赋值姓名\n",[123,17336,17337,17340,17343,17345,17348,17351],{"class":125,"line":673},[123,17338,17339],{"class":133},"    void",[123,17341,17342],{"class":337}," setName",[123,17344,1315],{"class":129},[123,17346,17347],{"class":337},"string",[123,17349,17350],{"class":279}," name",[123,17352,288],{"class":129},[123,17354,17355],{"class":125,"line":692},[123,17356,4474],{"class":129},[123,17358,17359,17362,17364],{"class":125,"line":713},[123,17360,17361],{"class":129},"        m_name",[123,17363,134],{"class":133},[123,17365,17366],{"class":129},"name;\n",[123,17368,17369],{"class":125,"line":718},[123,17370,4631],{"class":129},[123,17372,17373],{"class":125,"line":1138},[123,17374,17375],{"class":2673},"    \u002F\u002F赋值学号\n",[123,17377,17378,17380,17383,17385,17387,17390],{"class":125,"line":1429},[123,17379,17339],{"class":133},[123,17381,17382],{"class":337}," setId",[123,17384,1315],{"class":129},[123,17386,1742],{"class":133},[123,17388,17389],{"class":279}," id",[123,17391,288],{"class":129},[123,17393,17394],{"class":125,"line":1439},[123,17395,4474],{"class":129},[123,17397,17398,17401,17403],{"class":125,"line":1444},[123,17399,17400],{"class":129},"        m_id",[123,17402,134],{"class":133},[123,17404,17405],{"class":129},"id;\n",[123,17407,17408],{"class":125,"line":1453},[123,17409,4631],{"class":129},[123,17411,17412],{"class":125,"line":1458},[123,17413,17414],{"class":2673},"    \u002F\u002F打印学生信息\n",[123,17416,17417,17419,17421],{"class":125,"line":1476},[123,17418,17339],{"class":133},[123,17420,12047],{"class":337},[123,17422,4420],{"class":129},[123,17424,17425],{"class":125,"line":1494},[123,17426,4474],{"class":129},[123,17428,17429,17431,17433,17436,17438,17441,17443,17445,17447,17450,17452,17455,17457],{"class":125,"line":1499},[123,17430,5891],{"class":129},[123,17432,3643],{"class":133},[123,17434,17435],{"class":143},"\"姓名：\"",[123,17437,3643],{"class":133},[123,17439,17440],{"class":129},"m_name",[123,17442,3643],{"class":133},[123,17444,6798],{"class":143},[123,17446,3643],{"class":133},[123,17448,17449],{"class":143},"\"学号：\"",[123,17451,3643],{"class":133},[123,17453,17454],{"class":129},"m_id",[123,17456,3643],{"class":133},[123,17458,3665],{"class":129},[123,17460,17461],{"class":125,"line":1517},[123,17462,4631],{"class":129},[123,17464,17465],{"class":125,"line":1534},[123,17466,6434],{"class":129},[123,17468,17469,17471,17473],{"class":125,"line":1539},[123,17470,1742],{"class":133},[123,17472,4417],{"class":337},[123,17474,4420],{"class":129},[123,17476,17477],{"class":125,"line":2080},[123,17478,186],{"class":129},[123,17480,17481],{"class":125,"line":2097},[123,17482,17483],{"class":2673},"    \u002F\u002F实例化\n",[123,17485,17486],{"class":125,"line":2114},[123,17487,17488],{"class":129},"    Student s1;\n",[123,17490,17491,17494,17497,17499,17501],{"class":125,"line":2125},[123,17492,17493],{"class":129},"    s1.",[123,17495,17496],{"class":337},"setName",[123,17498,1315],{"class":129},[123,17500,10348],{"class":143},[123,17502,5161],{"class":129},[123,17504,17505,17507,17510,17512,17515],{"class":125,"line":2130},[123,17506,17493],{"class":129},[123,17508,17509],{"class":337},"setId",[123,17511,1315],{"class":129},[123,17513,17514],{"class":164},"123456",[123,17516,5161],{"class":129},[123,17518,17519,17521,17524],{"class":125,"line":5033},[123,17520,17493],{"class":129},[123,17522,17523],{"class":337},"printInfo",[123,17525,8069],{"class":129},[123,17527,17528],{"class":125,"line":5041},[123,17529,171],{"class":129},[19,17531,17532],{},"类中的属性和行为统称为成员",[19,17534,17535],{},"属性：成员属性(成员变量)",[19,17537,17538],{},"方法：成员函数(成员方法)",[19,17540,17541],{},[2759,17542,17543],{},"封装意义二：",[19,17545,17546],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17548,17549],{},"访问权限有三种：",[26,17551,17552,17555,17558],{},[29,17553,17554],{},"public        公共权限",[29,17556,17557],{},"protected 保护权限",[29,17559,17560],{},"private      私有权限",[19,17562,17563],{},[2759,17564,1572],{},[113,17566,17568],{"className":12373,"code":17567,"language":12375,"meta":118,"style":118},"\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",[120,17569,17570,17575,17580,17585,17590,17594,17601,17605,17610,17614,17619,17623,17628,17633,17638,17642,17647,17652,17659,17663,17667,17675,17679,17690,17702,17714,17718,17722,17726,17734,17738,17743,17755,17763,17771,17775,17785,17789,17797],{"__ignoreMap":118},[123,17571,17572],{"class":125,"line":126},[123,17573,17574],{"class":2673},"\u002F\u002F三种权限\n",[123,17576,17577],{"class":125,"line":140},[123,17578,17579],{"class":2673},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[123,17581,17582],{"class":125,"line":156},[123,17583,17584],{"class":2673},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[123,17586,17587],{"class":125,"line":168},[123,17588,17589],{"class":2673},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[123,17591,17592],{"class":125,"line":268},[123,17593,232],{"emptyLinePlaceholder":231},[123,17595,17596,17598],{"class":125,"line":291},[123,17597,17124],{"class":133},[123,17599,17600],{"class":337}," Person\n",[123,17602,17603],{"class":125,"line":300},[123,17604,186],{"class":129},[123,17606,17607],{"class":125,"line":305},[123,17608,17609],{"class":2673},"    \u002F\u002F姓名  公共权限\n",[123,17611,17612],{"class":125,"line":316},[123,17613,17146],{"class":133},[123,17615,17616],{"class":125,"line":673},[123,17617,17618],{"class":129},"    string m_Name;\n",[123,17620,17621],{"class":125,"line":692},[123,17622,232],{"emptyLinePlaceholder":231},[123,17624,17625],{"class":125,"line":713},[123,17626,17627],{"class":2673},"    \u002F\u002F汽车  保护权限\n",[123,17629,17630],{"class":125,"line":718},[123,17631,17632],{"class":133},"protected:\n",[123,17634,17635],{"class":125,"line":1138},[123,17636,17637],{"class":129},"    string m_Car;\n",[123,17639,17640],{"class":125,"line":1429},[123,17641,232],{"emptyLinePlaceholder":231},[123,17643,17644],{"class":125,"line":1439},[123,17645,17646],{"class":2673},"    \u002F\u002F银行卡密码  私有权限\n",[123,17648,17649],{"class":125,"line":1444},[123,17650,17651],{"class":133},"private:\n",[123,17653,17654,17656],{"class":125,"line":1453},[123,17655,4429],{"class":133},[123,17657,17658],{"class":129}," m_Password;\n",[123,17660,17661],{"class":125,"line":1458},[123,17662,232],{"emptyLinePlaceholder":231},[123,17664,17665],{"class":125,"line":1476},[123,17666,17146],{"class":133},[123,17668,17669,17671,17673],{"class":125,"line":1494},[123,17670,17339],{"class":133},[123,17672,13817],{"class":337},[123,17674,4420],{"class":129},[123,17676,17677],{"class":125,"line":1499},[123,17678,4474],{"class":129},[123,17680,17681,17684,17686,17688],{"class":125,"line":1517},[123,17682,17683],{"class":129},"        m_Name ",[123,17685,134],{"class":133},[123,17687,11370],{"class":143},[123,17689,3760],{"class":129},[123,17691,17692,17695,17697,17700],{"class":125,"line":1534},[123,17693,17694],{"class":129},"        m_Car ",[123,17696,134],{"class":133},[123,17698,17699],{"class":143}," \"拖拉机\"",[123,17701,3760],{"class":129},[123,17703,17704,17707,17709,17712],{"class":125,"line":1539},[123,17705,17706],{"class":129},"        m_Password ",[123,17708,134],{"class":133},[123,17710,17711],{"class":164}," 123456",[123,17713,3760],{"class":129},[123,17715,17716],{"class":125,"line":2080},[123,17717,4631],{"class":129},[123,17719,17720],{"class":125,"line":2097},[123,17721,6434],{"class":129},[123,17723,17724],{"class":125,"line":2114},[123,17725,232],{"emptyLinePlaceholder":231},[123,17727,17728,17730,17732],{"class":125,"line":2125},[123,17729,1742],{"class":133},[123,17731,4417],{"class":337},[123,17733,13285],{"class":129},[123,17735,17736],{"class":125,"line":2130},[123,17737,232],{"emptyLinePlaceholder":231},[123,17739,17740],{"class":125,"line":5033},[123,17741,17742],{"class":129},"    Person p;\n",[123,17744,17745,17748,17750,17753],{"class":125,"line":5041},[123,17746,17747],{"class":129},"    p.m_Name ",[123,17749,134],{"class":133},[123,17751,17752],{"class":143}," \"李四\"",[123,17754,3760],{"class":129},[123,17756,17757,17760],{"class":125,"line":5046},[123,17758,17759],{"class":2673},"    \u002F\u002Fp.m_Car = \"奔驰\";",[123,17761,17762],{"class":2673},"  \u002F\u002F保护权限类外访问不到\n",[123,17764,17765,17768],{"class":125,"line":5052},[123,17766,17767],{"class":2673},"    \u002F\u002Fp.m_Password = 123;",[123,17769,17770],{"class":2673}," \u002F\u002F私有权限类外访问不到\n",[123,17772,17773],{"class":125,"line":5058},[123,17774,232],{"emptyLinePlaceholder":231},[123,17776,17777,17779,17781,17783],{"class":125,"line":5063},[123,17778,4747],{"class":337},[123,17780,1315],{"class":129},[123,17782,4752],{"class":143},[123,17784,5161],{"class":129},[123,17786,17787],{"class":125,"line":10380},[123,17788,232],{"emptyLinePlaceholder":231},[123,17790,17791,17793,17795],{"class":125,"line":10404},[123,17792,6529],{"class":133},[123,17794,6532],{"class":164},[123,17796,3760],{"class":129},[123,17798,17799],{"class":125,"line":10409},[123,17800,171],{"class":129},[2587,17802,17804],{"id":17803},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17806,17807,17808,17811,17812],{},"在C++中 struct和class唯一的",[2759,17809,17810],{},"区别","就在于 ",[2759,17813,17814],{},"默认的访问权限不同",[19,17816,17817],{},"区别：",[3606,17819,17820,17823],{},[29,17821,17822],{},"struct 默认权限为公共",[29,17824,17825],{},"class   默认权限为私有",[113,17827,17829],{"className":12373,"code":17828,"language":12375,"meta":118,"style":118},"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",[120,17830,17831,17838,17842,17852,17856,17860,17867,17871,17881,17885,17889,17897,17901,17906,17920,17924,17929,17943,17947,17957,17961,17969],{"__ignoreMap":118},[123,17832,17833,17835],{"class":125,"line":126},[123,17834,17124],{"class":133},[123,17836,17837],{"class":337}," C1\n",[123,17839,17840],{"class":125,"line":140},[123,17841,186],{"class":129},[123,17843,17844,17846,17849],{"class":125,"line":156},[123,17845,4429],{"class":133},[123,17847,17848],{"class":129},"  m_A;",[123,17850,17851],{"class":2673}," \u002F\u002F默认是私有权限\n",[123,17853,17854],{"class":125,"line":168},[123,17855,6434],{"class":129},[123,17857,17858],{"class":125,"line":268},[123,17859,232],{"emptyLinePlaceholder":231},[123,17861,17862,17864],{"class":125,"line":291},[123,17863,10191],{"class":133},[123,17865,17866],{"class":337}," C2\n",[123,17868,17869],{"class":125,"line":300},[123,17870,186],{"class":129},[123,17872,17873,17875,17878],{"class":125,"line":305},[123,17874,4429],{"class":133},[123,17876,17877],{"class":129}," m_A;",[123,17879,17880],{"class":2673},"  \u002F\u002F默认是公共权限\n",[123,17882,17883],{"class":125,"line":316},[123,17884,6434],{"class":129},[123,17886,17887],{"class":125,"line":673},[123,17888,232],{"emptyLinePlaceholder":231},[123,17890,17891,17893,17895],{"class":125,"line":692},[123,17892,1742],{"class":133},[123,17894,4417],{"class":337},[123,17896,13285],{"class":129},[123,17898,17899],{"class":125,"line":713},[123,17900,232],{"emptyLinePlaceholder":231},[123,17902,17903],{"class":125,"line":718},[123,17904,17905],{"class":129},"    C1 c1;\n",[123,17907,17908,17911,17913,17915,17917],{"class":125,"line":1138},[123,17909,17910],{"class":129},"    c1.m_A ",[123,17912,134],{"class":133},[123,17914,4482],{"class":164},[123,17916,2670],{"class":129},[123,17918,17919],{"class":2673}," \u002F\u002F错误，访问权限是私有\n",[123,17921,17922],{"class":125,"line":1429},[123,17923,232],{"emptyLinePlaceholder":231},[123,17925,17926],{"class":125,"line":1439},[123,17927,17928],{"class":129},"    C2 c2;\n",[123,17930,17931,17934,17936,17938,17940],{"class":125,"line":1444},[123,17932,17933],{"class":129},"    c2.m_A ",[123,17935,134],{"class":133},[123,17937,4482],{"class":164},[123,17939,2670],{"class":129},[123,17941,17942],{"class":2673}," \u002F\u002F正确，访问权限是公共\n",[123,17944,17945],{"class":125,"line":1453},[123,17946,232],{"emptyLinePlaceholder":231},[123,17948,17949,17951,17953,17955],{"class":125,"line":1458},[123,17950,4747],{"class":337},[123,17952,1315],{"class":129},[123,17954,4752],{"class":143},[123,17956,5161],{"class":129},[123,17958,17959],{"class":125,"line":1476},[123,17960,232],{"emptyLinePlaceholder":231},[123,17962,17963,17965,17967],{"class":125,"line":1494},[123,17964,6529],{"class":133},[123,17966,6532],{"class":164},[123,17968,3760],{"class":129},[123,17970,17971],{"class":125,"line":1499},[123,17972,171],{"class":129},[2587,17974,17976],{"id":17975},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17978,17979],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17981,17982],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17984,17985],{},[2759,17986,1572],{},[113,17988,17990],{"className":12373,"code":17989,"language":12375,"meta":118,"style":118},"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",[120,17991,17992,18001,18005,18009,18014,18028,18037,18041,18051,18055,18062,18066,18070,18074,18079,18088,18095,18099,18104,18120,18143,18156,18163,18167,18176,18180,18184,18189,18205,18215,18219,18223,18227,18235,18239,18249,18253,18261,18265,18269,18277,18281,18285,18290,18303,18326,18330,18335,18348,18370,18374,18379,18393,18401,18405,18415,18419,18427],{"__ignoreMap":118},[123,17993,17994,17996,17999],{"class":125,"line":126},[123,17995,17124],{"class":133},[123,17997,17998],{"class":337}," Person",[123,18000,137],{"class":129},[123,18002,18003],{"class":125,"line":140},[123,18004,17146],{"class":133},[123,18006,18007],{"class":125,"line":156},[123,18008,232],{"emptyLinePlaceholder":231},[123,18010,18011],{"class":125,"line":168},[123,18012,18013],{"class":2673},"    \u002F\u002F姓名设置可读可写\n",[123,18015,18016,18018,18020,18022,18024,18026],{"class":125,"line":268},[123,18017,17339],{"class":133},[123,18019,17342],{"class":337},[123,18021,1315],{"class":129},[123,18023,17347],{"class":337},[123,18025,17350],{"class":279},[123,18027,14873],{"class":129},[123,18029,18030,18032,18034],{"class":125,"line":291},[123,18031,17683],{"class":129},[123,18033,134],{"class":133},[123,18035,18036],{"class":129}," name;\n",[123,18038,18039],{"class":125,"line":300},[123,18040,4631],{"class":129},[123,18042,18043,18046,18049],{"class":125,"line":305},[123,18044,18045],{"class":337},"    string",[123,18047,18048],{"class":337}," getName",[123,18050,4420],{"class":129},[123,18052,18053],{"class":125,"line":316},[123,18054,4474],{"class":129},[123,18056,18057,18059],{"class":125,"line":673},[123,18058,17182],{"class":133},[123,18060,18061],{"class":129}," m_Name;\n",[123,18063,18064],{"class":125,"line":692},[123,18065,4631],{"class":129},[123,18067,18068],{"class":125,"line":713},[123,18069,232],{"emptyLinePlaceholder":231},[123,18071,18072],{"class":125,"line":718},[123,18073,232],{"emptyLinePlaceholder":231},[123,18075,18076],{"class":125,"line":1138},[123,18077,18078],{"class":2673},"    \u002F\u002F获取年龄 \n",[123,18080,18081,18083,18086],{"class":125,"line":1429},[123,18082,4429],{"class":133},[123,18084,18085],{"class":337}," getAge",[123,18087,13285],{"class":129},[123,18089,18090,18092],{"class":125,"line":1439},[123,18091,17182],{"class":133},[123,18093,18094],{"class":129}," m_Age;\n",[123,18096,18097],{"class":125,"line":1444},[123,18098,4631],{"class":129},[123,18100,18101],{"class":125,"line":1453},[123,18102,18103],{"class":2673},"    \u002F\u002F设置年龄\n",[123,18105,18106,18108,18111,18113,18115,18118],{"class":125,"line":1458},[123,18107,17339],{"class":133},[123,18109,18110],{"class":337}," setAge",[123,18112,1315],{"class":129},[123,18114,1742],{"class":133},[123,18116,18117],{"class":279}," age",[123,18119,14873],{"class":129},[123,18121,18122,18124,18127,18129,18131,18133,18136,18138,18141],{"class":125,"line":1476},[123,18123,4940],{"class":133},[123,18125,18126],{"class":129}," (age ",[123,18128,3509],{"class":133},[123,18130,6532],{"class":164},[123,18132,5695],{"class":133},[123,18134,18135],{"class":129}," age ",[123,18137,3559],{"class":133},[123,18139,18140],{"class":164}," 150",[123,18142,14873],{"class":129},[123,18144,18145,18147,18149,18152,18154],{"class":125,"line":1494},[123,18146,12151],{"class":129},[123,18148,3643],{"class":133},[123,18150,18151],{"class":143}," \"你个老妖精!\"",[123,18153,3911],{"class":133},[123,18155,11272],{"class":129},[123,18157,18158,18161],{"class":125,"line":1499},[123,18159,18160],{"class":133},"            return",[123,18162,3760],{"class":129},[123,18164,18165],{"class":125,"line":1517},[123,18166,4972],{"class":129},[123,18168,18169,18172,18174],{"class":125,"line":1534},[123,18170,18171],{"class":129},"        m_Age ",[123,18173,134],{"class":133},[123,18175,10229],{"class":129},[123,18177,18178],{"class":125,"line":1539},[123,18179,4631],{"class":129},[123,18181,18182],{"class":125,"line":2080},[123,18183,232],{"emptyLinePlaceholder":231},[123,18185,18186],{"class":125,"line":2097},[123,18187,18188],{"class":2673},"    \u002F\u002F情人设置为只写\n",[123,18190,18191,18193,18196,18198,18200,18203],{"class":125,"line":2114},[123,18192,17339],{"class":133},[123,18194,18195],{"class":337}," setLover",[123,18197,1315],{"class":129},[123,18199,17347],{"class":337},[123,18201,18202],{"class":279}," lover",[123,18204,14873],{"class":129},[123,18206,18207,18210,18212],{"class":125,"line":2125},[123,18208,18209],{"class":129},"        m_Lover ",[123,18211,134],{"class":133},[123,18213,18214],{"class":129}," lover;\n",[123,18216,18217],{"class":125,"line":2130},[123,18218,4631],{"class":129},[123,18220,18221],{"class":125,"line":5033},[123,18222,232],{"emptyLinePlaceholder":231},[123,18224,18225],{"class":125,"line":5041},[123,18226,17651],{"class":133},[123,18228,18229,18232],{"class":125,"line":5046},[123,18230,18231],{"class":129},"    string m_Name;",[123,18233,18234],{"class":2673}," \u002F\u002F可读可写  姓名\n",[123,18236,18237],{"class":125,"line":5052},[123,18238,15641],{"class":129},[123,18240,18241,18243,18246],{"class":125,"line":5058},[123,18242,4429],{"class":133},[123,18244,18245],{"class":129}," m_Age;",[123,18247,18248],{"class":2673}," \u002F\u002F只读  年龄\n",[123,18250,18251],{"class":125,"line":5063},[123,18252,232],{"emptyLinePlaceholder":231},[123,18254,18255,18258],{"class":125,"line":10380},[123,18256,18257],{"class":129},"    string m_Lover;",[123,18259,18260],{"class":2673}," \u002F\u002F只写  情人\n",[123,18262,18263],{"class":125,"line":10404},[123,18264,6434],{"class":129},[123,18266,18267],{"class":125,"line":10409},[123,18268,232],{"emptyLinePlaceholder":231},[123,18270,18271,18273,18275],{"class":125,"line":10415},[123,18272,1742],{"class":133},[123,18274,4417],{"class":337},[123,18276,13285],{"class":129},[123,18278,18279],{"class":125,"line":10442},[123,18280,232],{"emptyLinePlaceholder":231},[123,18282,18283],{"class":125,"line":10447},[123,18284,17742],{"class":129},[123,18286,18287],{"class":125,"line":10453},[123,18288,18289],{"class":2673},"    \u002F\u002F姓名设置\n",[123,18291,18292,18295,18297,18299,18301],{"class":125,"line":10465},[123,18293,18294],{"class":129},"    p.",[123,18296,17496],{"class":337},[123,18298,1315],{"class":129},[123,18300,10348],{"class":143},[123,18302,5161],{"class":129},[123,18304,18305,18307,18309,18312,18314,18317,18320,18322,18324],{"class":125,"line":10477},[123,18306,8962],{"class":129},[123,18308,3643],{"class":133},[123,18310,18311],{"class":143}," \"姓名： \"",[123,18313,3911],{"class":133},[123,18315,18316],{"class":129}," p.",[123,18318,18319],{"class":337},"getName",[123,18321,15481],{"class":129},[123,18323,3643],{"class":133},[123,18325,11272],{"class":129},[123,18327,18328],{"class":125,"line":10489},[123,18329,232],{"emptyLinePlaceholder":231},[123,18331,18332],{"class":125,"line":12148},[123,18333,18334],{"class":2673},"    \u002F\u002F年龄设置\n",[123,18336,18337,18339,18342,18344,18346],{"class":125,"line":12173},[123,18338,18294],{"class":129},[123,18340,18341],{"class":337},"setAge",[123,18343,1315],{"class":129},[123,18345,3258],{"class":164},[123,18347,5161],{"class":129},[123,18349,18350,18352,18354,18357,18359,18361,18364,18366,18368],{"class":125,"line":12196},[123,18351,8962],{"class":129},[123,18353,3643],{"class":133},[123,18355,18356],{"class":143}," \"年龄： \"",[123,18358,3911],{"class":133},[123,18360,18316],{"class":129},[123,18362,18363],{"class":337},"getAge",[123,18365,15481],{"class":129},[123,18367,3643],{"class":133},[123,18369,11272],{"class":129},[123,18371,18372],{"class":125,"line":12220},[123,18373,232],{"emptyLinePlaceholder":231},[123,18375,18376],{"class":125,"line":12225},[123,18377,18378],{"class":2673},"    \u002F\u002F情人设置\n",[123,18380,18381,18383,18386,18388,18391],{"class":125,"line":12230},[123,18382,18294],{"class":129},[123,18384,18385],{"class":337},"setLover",[123,18387,1315],{"class":129},[123,18389,18390],{"class":143},"\"苍井\"",[123,18392,5161],{"class":129},[123,18394,18395,18398],{"class":125,"line":12235},[123,18396,18397],{"class":2673},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[123,18399,18400],{"class":2673},"  \u002F\u002F只写属性，不可以读取\n",[123,18402,18403],{"class":125,"line":12244},[123,18404,232],{"emptyLinePlaceholder":231},[123,18406,18407,18409,18411,18413],{"class":125,"line":12249},[123,18408,4747],{"class":337},[123,18410,1315],{"class":129},[123,18412,4752],{"class":143},[123,18414,5161],{"class":129},[123,18416,18417],{"class":125,"line":12255},[123,18418,232],{"emptyLinePlaceholder":231},[123,18420,18421,18423,18425],{"class":125,"line":12276},[123,18422,6529],{"class":133},[123,18424,6532],{"class":164},[123,18426,3760],{"class":129},[123,18428,18429],{"class":125,"line":12282},[123,18430,171],{"class":129},[2587,18432,18434],{"id":18433},"_814封装案例","8.1.4封装案例",[26,18436,18437],{},[29,18438,18439,18442],{},[2759,18440,18441],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3606,18444,18445,18448],{},[29,18446,18447],{},"求出立方体的面积和体积",[29,18449,18450],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[113,18452,18454],{"className":2608,"code":18453,"language":2610,"meta":118,"style":118},"#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",[120,18455,18456,18462,18472,18479,18483,18487,18492,18522,18526,18536,18546,18556,18560,18569,18573,18609,18613,18622,18626,18642,18646,18651,18660,18664,18671,18675,18684,18688,18695,18699,18708,18712,18719,18723,18728,18745,18749,18795,18799,18808,18812,18816,18820,18829,18833,18837,18842,18846,18852,18858,18864,18868,18872,18877,18899,18903,18957,18961,18969,18973,18978,18983,18996,19003,19019,19030,19036,19059,19065,19088,19102,19122,19128,19139,19162,19184,19189,19195,19209,19222,19227,19241,19246,19252,19257,19271,19276,19281,19295,19307,19312,19325,19330,19335,19340,19353,19358],{"__ignoreMap":118},[123,18457,18458,18460],{"class":125,"line":126},[123,18459,4394],{"class":133},[123,18461,4397],{"class":143},[123,18463,18464,18466,18468,18470],{"class":125,"line":140},[123,18465,4402],{"class":133},[123,18467,4405],{"class":133},[123,18469,4408],{"class":337},[123,18471,3760],{"class":129},[123,18473,18474,18476],{"class":125,"line":156},[123,18475,17124],{"class":133},[123,18477,18478],{"class":337}," Cube\n",[123,18480,18481],{"class":125,"line":168},[123,18482,186],{"class":129},[123,18484,18485],{"class":125,"line":268},[123,18486,17146],{"class":133},[123,18488,18489],{"class":125,"line":291},[123,18490,18491],{"class":2673},"    \u002F\u002F输入长宽高\n",[123,18493,18494,18496,18499,18501,18503,18506,18508,18510,18513,18515,18517,18520],{"class":125,"line":300},[123,18495,17339],{"class":133},[123,18497,18498],{"class":337}," setLwh",[123,18500,1315],{"class":129},[123,18502,1742],{"class":133},[123,18504,18505],{"class":279}," l",[123,18507,2985],{"class":129},[123,18509,1742],{"class":133},[123,18511,18512],{"class":279}," w",[123,18514,2985],{"class":129},[123,18516,1742],{"class":133},[123,18518,18519],{"class":279}," h",[123,18521,288],{"class":129},[123,18523,18524],{"class":125,"line":305},[123,18525,4474],{"class":129},[123,18527,18528,18531,18533],{"class":125,"line":316},[123,18529,18530],{"class":129},"        m_L",[123,18532,134],{"class":133},[123,18534,18535],{"class":129},"l;\n",[123,18537,18538,18541,18543],{"class":125,"line":673},[123,18539,18540],{"class":129},"        m_W",[123,18542,134],{"class":133},[123,18544,18545],{"class":129},"w;\n",[123,18547,18548,18551,18553],{"class":125,"line":692},[123,18549,18550],{"class":129},"        m_H",[123,18552,134],{"class":133},[123,18554,18555],{"class":129},"h;\n",[123,18557,18558],{"class":125,"line":713},[123,18559,4631],{"class":129},[123,18561,18562,18564,18567],{"class":125,"line":718},[123,18563,4429],{"class":133},[123,18565,18566],{"class":337}," mianji",[123,18568,4420],{"class":129},[123,18570,18571],{"class":125,"line":1138},[123,18572,4474],{"class":129},[123,18574,18575,18577,18579,18581,18584,18586,18589,18591,18594,18596,18599,18601,18604,18606],{"class":125,"line":1429},[123,18576,17182],{"class":133},[123,18578,17185],{"class":164},[123,18580,3060],{"class":133},[123,18582,18583],{"class":129},"(m_L",[123,18585,3060],{"class":133},[123,18587,18588],{"class":129},"m_W ",[123,18590,3086],{"class":133},[123,18592,18593],{"class":129}," m_L",[123,18595,3060],{"class":133},[123,18597,18598],{"class":129},"m_H ",[123,18600,3086],{"class":133},[123,18602,18603],{"class":129}," m_W",[123,18605,3060],{"class":133},[123,18607,18608],{"class":129},"m_H);\n",[123,18610,18611],{"class":125,"line":1439},[123,18612,4631],{"class":129},[123,18614,18615,18617,18620],{"class":125,"line":1444},[123,18616,4429],{"class":133},[123,18618,18619],{"class":337}," tiji",[123,18621,4420],{"class":129},[123,18623,18624],{"class":125,"line":1453},[123,18625,4474],{"class":129},[123,18627,18628,18630,18632,18634,18637,18639],{"class":125,"line":1458},[123,18629,17182],{"class":133},[123,18631,18593],{"class":129},[123,18633,3060],{"class":133},[123,18635,18636],{"class":129},"m_W",[123,18638,3060],{"class":133},[123,18640,18641],{"class":129},"m_H;\n",[123,18643,18644],{"class":125,"line":1476},[123,18645,4631],{"class":129},[123,18647,18648],{"class":125,"line":1494},[123,18649,18650],{"class":2673},"    \u002F\u002F获取长宽高\n",[123,18652,18653,18655,18658],{"class":125,"line":1499},[123,18654,4429],{"class":133},[123,18656,18657],{"class":337}," getLength",[123,18659,4420],{"class":129},[123,18661,18662],{"class":125,"line":1517},[123,18663,4474],{"class":129},[123,18665,18666,18668],{"class":125,"line":1534},[123,18667,17182],{"class":133},[123,18669,18670],{"class":129}," m_L;\n",[123,18672,18673],{"class":125,"line":1539},[123,18674,4631],{"class":129},[123,18676,18677,18679,18682],{"class":125,"line":2080},[123,18678,4429],{"class":133},[123,18680,18681],{"class":337}," getWidth",[123,18683,4420],{"class":129},[123,18685,18686],{"class":125,"line":2097},[123,18687,4474],{"class":129},[123,18689,18690,18692],{"class":125,"line":2114},[123,18691,17182],{"class":133},[123,18693,18694],{"class":129}," m_W;\n",[123,18696,18697],{"class":125,"line":2125},[123,18698,4631],{"class":129},[123,18700,18701,18703,18706],{"class":125,"line":2130},[123,18702,4429],{"class":133},[123,18704,18705],{"class":337}," getHeight",[123,18707,4420],{"class":129},[123,18709,18710],{"class":125,"line":5033},[123,18711,4474],{"class":129},[123,18713,18714,18716],{"class":125,"line":5041},[123,18715,17182],{"class":133},[123,18717,18718],{"class":129}," m_H;\n",[123,18720,18721],{"class":125,"line":5046},[123,18722,4631],{"class":129},[123,18724,18725],{"class":125,"line":5052},[123,18726,18727],{"class":2673},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[123,18729,18730,18733,18736,18738,18741,18743],{"class":125,"line":5058},[123,18731,18732],{"class":133},"    bool",[123,18734,18735],{"class":337}," isEqual",[123,18737,1315],{"class":129},[123,18739,18740],{"class":337},"Cube",[123,18742,5291],{"class":279},[123,18744,288],{"class":129},[123,18746,18747],{"class":125,"line":5063},[123,18748,4474],{"class":129},[123,18750,18751,18753,18756,18759,18761,18763,18766,18768,18771,18774,18776,18778,18781,18783,18785,18788,18790,18792],{"class":125,"line":10380},[123,18752,4940],{"class":133},[123,18754,18755],{"class":129}," (c.",[123,18757,18758],{"class":337},"getLength",[123,18760,15481],{"class":129},[123,18762,5391],{"class":133},[123,18764,18765],{"class":129}," m_L ",[123,18767,4169],{"class":133},[123,18769,18770],{"class":129}," c.",[123,18772,18773],{"class":337},"getWidth",[123,18775,15481],{"class":129},[123,18777,5391],{"class":133},[123,18779,18780],{"class":129}," m_W ",[123,18782,4169],{"class":133},[123,18784,18770],{"class":129},[123,18786,18787],{"class":337},"getHeight",[123,18789,15481],{"class":129},[123,18791,5391],{"class":133},[123,18793,18794],{"class":129}," m_H)\n",[123,18796,18797],{"class":125,"line":10404},[123,18798,4953],{"class":129},[123,18800,18801,18803,18806],{"class":125,"line":10409},[123,18802,18160],{"class":133},[123,18804,18805],{"class":164}," true",[123,18807,3760],{"class":129},[123,18809,18810],{"class":125,"line":10415},[123,18811,4972],{"class":129},[123,18813,18814],{"class":125,"line":10442},[123,18815,5013],{"class":133},[123,18817,18818],{"class":125,"line":10447},[123,18819,4953],{"class":129},[123,18821,18822,18824,18827],{"class":125,"line":10453},[123,18823,18160],{"class":133},[123,18825,18826],{"class":164}," false",[123,18828,3760],{"class":129},[123,18830,18831],{"class":125,"line":10465},[123,18832,4972],{"class":129},[123,18834,18835],{"class":125,"line":10477},[123,18836,4631],{"class":129},[123,18838,18839],{"class":125,"line":10489},[123,18840,18841],{"class":2673},"    \u002F\u002F私有属性\n",[123,18843,18844],{"class":125,"line":12148},[123,18845,17651],{"class":133},[123,18847,18848,18850],{"class":125,"line":12173},[123,18849,4429],{"class":133},[123,18851,18670],{"class":129},[123,18853,18854,18856],{"class":125,"line":12196},[123,18855,4429],{"class":133},[123,18857,18694],{"class":129},[123,18859,18860,18862],{"class":125,"line":12220},[123,18861,4429],{"class":133},[123,18863,18718],{"class":129},[123,18865,18866],{"class":125,"line":12225},[123,18867,232],{"emptyLinePlaceholder":231},[123,18869,18870],{"class":125,"line":12230},[123,18871,6434],{"class":129},[123,18873,18874],{"class":125,"line":12235},[123,18875,18876],{"class":2673},"\u002F\u002F全局函数判断两个立方体是否相等\n",[123,18878,18879,18881,18883,18885,18887,18890,18892,18894,18897],{"class":125,"line":12244},[123,18880,3821],{"class":133},[123,18882,18735],{"class":337},[123,18884,1315],{"class":129},[123,18886,18740],{"class":337},[123,18888,18889],{"class":279}," c1",[123,18891,2985],{"class":129},[123,18893,18740],{"class":337},[123,18895,18896],{"class":279}," c2",[123,18898,288],{"class":129},[123,18900,18901],{"class":125,"line":12249},[123,18902,186],{"class":129},[123,18904,18905,18907,18910,18912,18914,18916,18919,18921,18924,18926,18928,18930,18932,18934,18936,18938,18940,18942,18944,18946,18948,18950,18952,18954],{"class":125,"line":12255},[123,18906,6529],{"class":133},[123,18908,18909],{"class":129}," (c1.",[123,18911,18758],{"class":337},[123,18913,15481],{"class":129},[123,18915,5391],{"class":133},[123,18917,18918],{"class":129}," c2.",[123,18920,18758],{"class":337},[123,18922,18923],{"class":129},"()) ",[123,18925,4169],{"class":133},[123,18927,18909],{"class":129},[123,18929,18773],{"class":337},[123,18931,15481],{"class":129},[123,18933,5391],{"class":133},[123,18935,18918],{"class":129},[123,18937,18773],{"class":337},[123,18939,18923],{"class":129},[123,18941,4169],{"class":133},[123,18943,18909],{"class":129},[123,18945,18787],{"class":337},[123,18947,15481],{"class":129},[123,18949,5391],{"class":133},[123,18951,18918],{"class":129},[123,18953,18787],{"class":337},[123,18955,18956],{"class":129},"());\n",[123,18958,18959],{"class":125,"line":12276},[123,18960,171],{"class":129},[123,18962,18963,18965,18967],{"class":125,"line":12282},[123,18964,1742],{"class":133},[123,18966,4417],{"class":337},[123,18968,4420],{"class":129},[123,18970,18971],{"class":125,"line":12296},[123,18972,186],{"class":129},[123,18974,18975],{"class":125,"line":12302},[123,18976,18977],{"class":129},"    Cube c1;\n",[123,18979,18980],{"class":125,"line":12329},[123,18981,18982],{"class":2673},"    \u002F\u002F输入立方体的长宽高\n",[123,18984,18985,18987,18989,18992,18994],{"class":125,"line":12338},[123,18986,4017],{"class":129},[123,18988,3643],{"class":133},[123,18990,18991],{"class":143},"\"请输入第一个立方体的长、宽、高：\"",[123,18993,3643],{"class":133},[123,18995,3665],{"class":129},[123,18997,18998,19000],{"class":125,"line":12344},[123,18999,4429],{"class":133},[123,19001,19002],{"class":129}," l,w,h,l1,w1,h1;\n",[123,19004,19005,19007,19009,19011,19013,19015,19017],{"class":125,"line":12352},[123,19006,4456],{"class":129},[123,19008,3896],{"class":133},[123,19010,3122],{"class":129},[123,19012,3896],{"class":133},[123,19014,3397],{"class":129},[123,19016,3896],{"class":133},[123,19018,18555],{"class":129},[123,19020,19021,19024,19027],{"class":125,"line":12357},[123,19022,19023],{"class":129},"    c1.",[123,19025,19026],{"class":337},"setLwh",[123,19028,19029],{"class":129},"(l,w,h);\n",[123,19031,19033],{"class":125,"line":19032},66,[123,19034,19035],{"class":2673},"    \u002F\u002F面积\n",[123,19037,19039,19041,19043,19046,19048,19050,19053,19055,19057],{"class":125,"line":19038},67,[123,19040,4017],{"class":129},[123,19042,3643],{"class":133},[123,19044,19045],{"class":143},"\"立方体的表面积为：\"",[123,19047,3643],{"class":133},[123,19049,17260],{"class":129},[123,19051,19052],{"class":337},"mianji",[123,19054,4870],{"class":129},[123,19056,3643],{"class":133},[123,19058,3665],{"class":129},[123,19060,19062],{"class":125,"line":19061},68,[123,19063,19064],{"class":2673},"    \u002F\u002F体积\n",[123,19066,19068,19070,19072,19075,19077,19079,19082,19084,19086],{"class":125,"line":19067},69,[123,19069,4017],{"class":129},[123,19071,3643],{"class":133},[123,19073,19074],{"class":143},"\"立方体的体积为：\"",[123,19076,3643],{"class":133},[123,19078,17260],{"class":129},[123,19080,19081],{"class":337},"tiji",[123,19083,4870],{"class":129},[123,19085,3643],{"class":133},[123,19087,3665],{"class":129},[123,19089,19091,19093,19095,19098,19100],{"class":125,"line":19090},70,[123,19092,4017],{"class":129},[123,19094,3643],{"class":133},[123,19096,19097],{"class":143},"\"请输入第二个立方体的长、宽、高：\"",[123,19099,3643],{"class":133},[123,19101,3665],{"class":129},[123,19103,19105,19107,19109,19112,19114,19117,19119],{"class":125,"line":19104},71,[123,19106,4456],{"class":129},[123,19108,3896],{"class":133},[123,19110,19111],{"class":129},"l1",[123,19113,3896],{"class":133},[123,19115,19116],{"class":129},"w1",[123,19118,3896],{"class":133},[123,19120,19121],{"class":129},"h1;\n",[123,19123,19125],{"class":125,"line":19124},72,[123,19126,19127],{"class":129},"    Cube c2;\n",[123,19129,19131,19134,19136],{"class":125,"line":19130},73,[123,19132,19133],{"class":129},"    c2.",[123,19135,19026],{"class":337},[123,19137,19138],{"class":129},"(l1,w1,h1);\n",[123,19140,19142,19144,19146,19149,19151,19154,19156,19158,19160],{"class":125,"line":19141},74,[123,19143,4017],{"class":129},[123,19145,3643],{"class":133},[123,19147,19148],{"class":143},"\"第二个立方体的表面积为：\"",[123,19150,3643],{"class":133},[123,19152,19153],{"class":129},"c2.",[123,19155,19052],{"class":337},[123,19157,4870],{"class":129},[123,19159,3643],{"class":133},[123,19161,3665],{"class":129},[123,19163,19165,19167,19169,19172,19174,19176,19178,19180,19182],{"class":125,"line":19164},75,[123,19166,4017],{"class":129},[123,19168,3643],{"class":133},[123,19170,19171],{"class":143},"\"第二个立方体的体积为：\"",[123,19173,3643],{"class":133},[123,19175,19153],{"class":129},[123,19177,19081],{"class":337},[123,19179,4870],{"class":129},[123,19181,3643],{"class":133},[123,19183,3665],{"class":129},[123,19185,19187],{"class":125,"line":19186},76,[123,19188,232],{"emptyLinePlaceholder":231},[123,19190,19192],{"class":125,"line":19191},77,[123,19193,19194],{"class":2673},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[123,19196,19198,19200,19202,19205,19207],{"class":125,"line":19197},78,[123,19199,4017],{"class":129},[123,19201,3643],{"class":133},[123,19203,19204],{"class":143},"\"内部函数判断结果：\"",[123,19206,3643],{"class":133},[123,19208,3665],{"class":129},[123,19210,19212,19214,19216,19219],{"class":125,"line":19211},79,[123,19213,1711],{"class":133},[123,19215,18909],{"class":129},[123,19217,19218],{"class":337},"isEqual",[123,19220,19221],{"class":129},"(c2))\n",[123,19223,19225],{"class":125,"line":19224},80,[123,19226,4474],{"class":129},[123,19228,19230,19232,19234,19237,19239],{"class":125,"line":19229},81,[123,19231,5891],{"class":129},[123,19233,3643],{"class":133},[123,19235,19236],{"class":143},"\"两个立方体相等\"",[123,19238,3643],{"class":133},[123,19240,3665],{"class":129},[123,19242,19244],{"class":125,"line":19243},82,[123,19245,4631],{"class":129},[123,19247,19249],{"class":125,"line":19248},83,[123,19250,19251],{"class":133},"    else\n",[123,19253,19255],{"class":125,"line":19254},84,[123,19256,4474],{"class":129},[123,19258,19260,19262,19264,19267,19269],{"class":125,"line":19259},85,[123,19261,5891],{"class":129},[123,19263,3643],{"class":133},[123,19265,19266],{"class":143},"\"两个立方体不相等\"",[123,19268,3643],{"class":133},[123,19270,3665],{"class":129},[123,19272,19274],{"class":125,"line":19273},86,[123,19275,4631],{"class":129},[123,19277,19279],{"class":125,"line":19278},87,[123,19280,232],{"emptyLinePlaceholder":231},[123,19282,19284,19286,19288,19291,19293],{"class":125,"line":19283},88,[123,19285,4017],{"class":129},[123,19287,3643],{"class":133},[123,19289,19290],{"class":143},"\"全局函数判断结果：\"",[123,19292,3643],{"class":133},[123,19294,3665],{"class":129},[123,19296,19298,19300,19302,19304],{"class":125,"line":19297},89,[123,19299,1711],{"class":133},[123,19301,4116],{"class":129},[123,19303,19218],{"class":337},[123,19305,19306],{"class":129},"(c1, c2))\n",[123,19308,19310],{"class":125,"line":19309},90,[123,19311,4474],{"class":129},[123,19313,19315,19317,19319,19321,19323],{"class":125,"line":19314},91,[123,19316,5891],{"class":129},[123,19318,3643],{"class":133},[123,19320,19236],{"class":143},[123,19322,3643],{"class":133},[123,19324,3665],{"class":129},[123,19326,19328],{"class":125,"line":19327},92,[123,19329,4631],{"class":129},[123,19331,19333],{"class":125,"line":19332},93,[123,19334,19251],{"class":133},[123,19336,19338],{"class":125,"line":19337},94,[123,19339,4474],{"class":129},[123,19341,19343,19345,19347,19349,19351],{"class":125,"line":19342},95,[123,19344,5891],{"class":129},[123,19346,3643],{"class":133},[123,19348,19266],{"class":143},[123,19350,3643],{"class":133},[123,19352,3665],{"class":129},[123,19354,19356],{"class":125,"line":19355},96,[123,19357,4631],{"class":129},[123,19359,19361],{"class":125,"line":19360},97,[123,19362,171],{"class":129},[26,19364,19365],{"start":140},[29,19366,19367],{},[2759,19368,19369],{},"练习案例2：点和圆的关系",[3606,19371,19372],{},[29,19373,19374],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[113,19376,19378],{"className":2608,"code":19377,"language":2610,"meta":118,"style":118},"#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",[120,19379,19380,19386,19396,19403,19410,19414,19418,19423,19457,19462,19478,19492,19496,19500,19507,19514,19518,19524,19528,19532,19536,19558,19581,19586,19600,19615,19619,19623,19629,19634,19639,19643,19669,19673,19703,19731,19759,19776,19780,19793,19797,19801,19805,19818,19822,19826,19834,19838,19842,19846,19851,19855,19866,19873,19882,19892,19903,19910,19923,19934,19944,19955,19962,19976,19981,19991,19999],{"__ignoreMap":118},[123,19381,19382,19384],{"class":125,"line":126},[123,19383,4394],{"class":133},[123,19385,4397],{"class":143},[123,19387,19388,19390,19392,19394],{"class":125,"line":140},[123,19389,4402],{"class":133},[123,19391,4405],{"class":133},[123,19393,4408],{"class":337},[123,19395,3760],{"class":129},[123,19397,19398,19400],{"class":125,"line":156},[123,19399,4394],{"class":133},[123,19401,19402],{"class":143},"\u003Ccmath>\n",[123,19404,19405,19407],{"class":125,"line":168},[123,19406,17124],{"class":133},[123,19408,19409],{"class":337}," Point\n",[123,19411,19412],{"class":125,"line":268},[123,19413,186],{"class":129},[123,19415,19416],{"class":125,"line":291},[123,19417,17146],{"class":133},[123,19419,19420],{"class":125,"line":300},[123,19421,19422],{"class":2673},"    \u002F\u002F赋值\n",[123,19424,19425,19427,19430,19432,19434,19437,19439,19441,19444,19447,19449,19452,19454],{"class":125,"line":305},[123,19426,17339],{"class":133},[123,19428,19429],{"class":337}," setPoint",[123,19431,1315],{"class":129},[123,19433,16467],{"class":133},[123,19435,19436],{"class":279}," x",[123,19438,251],{"class":129},[123,19440,16467],{"class":133},[123,19442,19443],{"class":279}," y",[123,19445,19446],{"class":129},") { m_x ",[123,19448,134],{"class":133},[123,19450,19451],{"class":129}," x; m_y ",[123,19453,134],{"class":133},[123,19455,19456],{"class":129}," y; }\n",[123,19458,19459],{"class":125,"line":316},[123,19460,19461],{"class":2673},"    \u002F\u002F获取坐标\n",[123,19463,19464,19466,19469,19472,19475],{"class":125,"line":673},[123,19465,17168],{"class":133},[123,19467,19468],{"class":337}," getX",[123,19470,19471],{"class":129},"() { ",[123,19473,19474],{"class":133},"return",[123,19476,19477],{"class":129}," m_x; }\n",[123,19479,19480,19482,19485,19487,19489],{"class":125,"line":692},[123,19481,17168],{"class":133},[123,19483,19484],{"class":337}," getY",[123,19486,19471],{"class":129},[123,19488,19474],{"class":133},[123,19490,19491],{"class":129}," m_y; }\n",[123,19493,19494],{"class":125,"line":713},[123,19495,232],{"emptyLinePlaceholder":231},[123,19497,19498],{"class":125,"line":718},[123,19499,17651],{"class":133},[123,19501,19502,19504],{"class":125,"line":1138},[123,19503,17168],{"class":133},[123,19505,19506],{"class":129}," m_x;\n",[123,19508,19509,19511],{"class":125,"line":1429},[123,19510,17168],{"class":133},[123,19512,19513],{"class":129}," m_y;\n",[123,19515,19516],{"class":125,"line":1439},[123,19517,6434],{"class":129},[123,19519,19520,19522],{"class":125,"line":1444},[123,19521,17124],{"class":133},[123,19523,17127],{"class":337},[123,19525,19526],{"class":125,"line":1453},[123,19527,186],{"class":129},[123,19529,19530],{"class":125,"line":1458},[123,19531,17146],{"class":133},[123,19533,19534],{"class":125,"line":1476},[123,19535,19422],{"class":2673},[123,19537,19538,19540,19543,19545,19547,19550,19553,19555],{"class":125,"line":1494},[123,19539,17339],{"class":133},[123,19541,19542],{"class":337}," setRadius",[123,19544,1315],{"class":129},[123,19546,16467],{"class":133},[123,19548,19549],{"class":279}," r",[123,19551,19552],{"class":129},") { m_r ",[123,19554,134],{"class":133},[123,19556,19557],{"class":129}," r; }\n",[123,19559,19560,19562,19565,19567,19570,19573,19576,19578],{"class":125,"line":1499},[123,19561,17339],{"class":133},[123,19563,19564],{"class":337}," setCenter",[123,19566,1315],{"class":129},[123,19568,19569],{"class":337},"Point",[123,19571,19572],{"class":279}," center",[123,19574,19575],{"class":129},") { m_center ",[123,19577,134],{"class":133},[123,19579,19580],{"class":129}," center; }\n",[123,19582,19583],{"class":125,"line":1517},[123,19584,19585],{"class":2673},"    \u002F\u002F获取属性\n",[123,19587,19588,19590,19593,19595,19597],{"class":125,"line":1534},[123,19589,17168],{"class":133},[123,19591,19592],{"class":337}," getRadius",[123,19594,19471],{"class":129},[123,19596,19474],{"class":133},[123,19598,19599],{"class":129}," m_r; }\n",[123,19601,19602,19605,19608,19610,19612],{"class":125,"line":1539},[123,19603,19604],{"class":337},"    Point",[123,19606,19607],{"class":337}," getCenter",[123,19609,19471],{"class":129},[123,19611,19474],{"class":133},[123,19613,19614],{"class":129}," m_center; }\n",[123,19616,19617],{"class":125,"line":2080},[123,19618,232],{"emptyLinePlaceholder":231},[123,19620,19621],{"class":125,"line":2097},[123,19622,17651],{"class":133},[123,19624,19625,19627],{"class":125,"line":2114},[123,19626,17168],{"class":133},[123,19628,17158],{"class":129},[123,19630,19631],{"class":125,"line":2125},[123,19632,19633],{"class":2673},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[123,19635,19636],{"class":125,"line":2130},[123,19637,19638],{"class":129},"    Point m_center;\n",[123,19640,19641],{"class":125,"line":5033},[123,19642,6434],{"class":129},[123,19644,19645,19647,19650,19652,19655,19657,19659,19661,19663,19665,19667],{"class":125,"line":5041},[123,19646,7797],{"class":133},[123,19648,19649],{"class":337}," isInCircle",[123,19651,1315],{"class":129},[123,19653,19654],{"class":337},"Circle",[123,19656,13016],{"class":133},[123,19658,2896],{"class":279},[123,19660,2985],{"class":129},[123,19662,19569],{"class":337},[123,19664,13016],{"class":133},[123,19666,19],{"class":279},[123,19668,288],{"class":129},[123,19670,19671],{"class":125,"line":5046},[123,19672,186],{"class":129},[123,19674,19675,19677,19680,19682,19684,19687,19690,19693,19695,19697,19699,19701],{"class":125,"line":5052},[123,19676,17168],{"class":133},[123,19678,19679],{"class":129}," dx ",[123,19681,134],{"class":133},[123,19683,18770],{"class":129},[123,19685,19686],{"class":337},"getCenter",[123,19688,19689],{"class":129},"().",[123,19691,19692],{"class":337},"getX",[123,19694,15481],{"class":129},[123,19696,3135],{"class":133},[123,19698,18316],{"class":129},[123,19700,19692],{"class":337},[123,19702,8069],{"class":129},[123,19704,19705,19707,19710,19712,19714,19716,19718,19721,19723,19725,19727,19729],{"class":125,"line":5058},[123,19706,17168],{"class":133},[123,19708,19709],{"class":129}," dy ",[123,19711,134],{"class":133},[123,19713,18770],{"class":129},[123,19715,19686],{"class":337},[123,19717,19689],{"class":129},[123,19719,19720],{"class":337},"getY",[123,19722,15481],{"class":129},[123,19724,3135],{"class":133},[123,19726,18316],{"class":129},[123,19728,19720],{"class":337},[123,19730,8069],{"class":129},[123,19732,19733,19735,19738,19740,19743,19746,19748,19750,19752,19754,19756],{"class":125,"line":5063},[123,19734,17168],{"class":133},[123,19736,19737],{"class":129}," distance ",[123,19739,134],{"class":133},[123,19741,19742],{"class":337}," sqrt",[123,19744,19745],{"class":129},"(dx ",[123,19747,3060],{"class":133},[123,19749,19679],{"class":129},[123,19751,3086],{"class":133},[123,19753,19709],{"class":129},[123,19755,3060],{"class":133},[123,19757,19758],{"class":129}," dy);\n",[123,19760,19761,19763,19766,19768,19770,19773],{"class":125,"line":10380},[123,19762,1711],{"class":133},[123,19764,19765],{"class":129}," (distance ",[123,19767,3509],{"class":133},[123,19769,18770],{"class":129},[123,19771,19772],{"class":337},"getRadius",[123,19774,19775],{"class":129},"())\n",[123,19777,19778],{"class":125,"line":10404},[123,19779,4474],{"class":129},[123,19781,19782,19784,19786,19789,19791],{"class":125,"line":10409},[123,19783,12101],{"class":129},[123,19785,3643],{"class":133},[123,19787,19788],{"class":143}," \"点在圆内\"",[123,19790,3911],{"class":133},[123,19792,11272],{"class":129},[123,19794,19795],{"class":125,"line":10415},[123,19796,4631],{"class":129},[123,19798,19799],{"class":125,"line":10442},[123,19800,19251],{"class":133},[123,19802,19803],{"class":125,"line":10447},[123,19804,4474],{"class":129},[123,19806,19807,19809,19811,19814,19816],{"class":125,"line":10453},[123,19808,12101],{"class":129},[123,19810,3643],{"class":133},[123,19812,19813],{"class":143}," \"点在圆外\"",[123,19815,3911],{"class":133},[123,19817,11272],{"class":129},[123,19819,19820],{"class":125,"line":10465},[123,19821,4631],{"class":129},[123,19823,19824],{"class":125,"line":10477},[123,19825,171],{"class":129},[123,19827,19828,19830,19832],{"class":125,"line":10489},[123,19829,1742],{"class":133},[123,19831,4417],{"class":337},[123,19833,4420],{"class":129},[123,19835,19836],{"class":125,"line":12148},[123,19837,186],{"class":129},[123,19839,19840],{"class":125,"line":12173},[123,19841,17483],{"class":2673},[123,19843,19844],{"class":125,"line":12196},[123,19845,17230],{"class":129},[123,19847,19848],{"class":125,"line":12220},[123,19849,19850],{"class":129},"    Point p1;\n",[123,19852,19853],{"class":125,"line":12225},[123,19854,19422],{"class":2673},[123,19856,19857,19859,19861,19864],{"class":125,"line":12230},[123,19858,4017],{"class":129},[123,19860,3643],{"class":133},[123,19862,19863],{"class":143},"\"请输入圆的半径：\"",[123,19865,3760],{"class":129},[123,19867,19868,19870],{"class":125,"line":12235},[123,19869,17168],{"class":133},[123,19871,19872],{"class":129}," r;\n",[123,19874,19875,19877,19879],{"class":125,"line":12244},[123,19876,4456],{"class":129},[123,19878,3896],{"class":133},[123,19880,19881],{"class":129},"r;\n",[123,19883,19884,19886,19889],{"class":125,"line":12249},[123,19885,19023],{"class":129},[123,19887,19888],{"class":337},"setRadius",[123,19890,19891],{"class":129},"(r);\n",[123,19893,19894,19896,19898,19901],{"class":125,"line":12255},[123,19895,4017],{"class":129},[123,19897,3643],{"class":133},[123,19899,19900],{"class":143},"\"请输入圆心坐标：\"",[123,19902,3760],{"class":129},[123,19904,19905,19907],{"class":125,"line":12276},[123,19906,17168],{"class":133},[123,19908,19909],{"class":129}," x, y;\n",[123,19911,19912,19914,19916,19918,19920],{"class":125,"line":12282},[123,19913,4456],{"class":129},[123,19915,3896],{"class":133},[123,19917,3421],{"class":129},[123,19919,3896],{"class":133},[123,19921,19922],{"class":129},"y;\n",[123,19924,19925,19928,19931],{"class":125,"line":12296},[123,19926,19927],{"class":129},"    p1.",[123,19929,19930],{"class":337},"setPoint",[123,19932,19933],{"class":129},"(x, y);\n",[123,19935,19936,19938,19941],{"class":125,"line":12302},[123,19937,19023],{"class":129},[123,19939,19940],{"class":337},"setCenter",[123,19942,19943],{"class":129},"(p1);\n",[123,19945,19946,19948,19950,19953],{"class":125,"line":12329},[123,19947,4017],{"class":129},[123,19949,3643],{"class":133},[123,19951,19952],{"class":143},"\"请输入测试点坐标：\"",[123,19954,3760],{"class":129},[123,19956,19957,19959],{"class":125,"line":12338},[123,19958,17168],{"class":133},[123,19960,19961],{"class":129}," x1, y1;\n",[123,19963,19964,19966,19968,19971,19973],{"class":125,"line":12344},[123,19965,4456],{"class":129},[123,19967,3896],{"class":133},[123,19969,19970],{"class":129},"x1",[123,19972,3896],{"class":133},[123,19974,19975],{"class":129},"y1;\n",[123,19977,19978],{"class":125,"line":12352},[123,19979,19980],{"class":129},"    Point p2;\n",[123,19982,19983,19986,19988],{"class":125,"line":12357},[123,19984,19985],{"class":129},"    p2.",[123,19987,19930],{"class":337},[123,19989,19990],{"class":129},"(x1, y1);\n",[123,19992,19993,19996],{"class":125,"line":19032},[123,19994,19995],{"class":337},"    isInCircle",[123,19997,19998],{"class":129},"(c1, p2);\n",[123,20000,20001],{"class":125,"line":19038},[123,20002,171],{"class":129},[19,20004,20005],{},"在类中可以让另一个类作为本来的成员",[19,20007,20008],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,20010,20011],{},"创建point.h",[113,20013,20015],{"className":2608,"code":20014,"language":2610,"meta":118,"style":118},"#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",[120,20016,20017,20028,20034,20044,20050,20054,20059,20063,20067,20087,20091,20099,20107,20111,20115,20121,20127],{"__ignoreMap":118},[123,20018,20019,20022,20025],{"class":125,"line":126},[123,20020,20021],{"class":133},"#pragma",[123,20023,20024],{"class":337}," once",[123,20026,20027],{"class":2673}," \u002F\u002F防止头文件重复包含\n",[123,20029,20030,20032],{"class":125,"line":140},[123,20031,4394],{"class":133},[123,20033,4397],{"class":143},[123,20035,20036,20038,20040,20042],{"class":125,"line":156},[123,20037,4402],{"class":133},[123,20039,4405],{"class":133},[123,20041,4408],{"class":337},[123,20043,3760],{"class":129},[123,20045,20046,20048],{"class":125,"line":168},[123,20047,17124],{"class":133},[123,20049,19409],{"class":337},[123,20051,20052],{"class":125,"line":268},[123,20053,186],{"class":129},[123,20055,20056],{"class":125,"line":291},[123,20057,20058],{"class":2673},"\u002F\u002F做好声明与变量定义就可以\n",[123,20060,20061],{"class":125,"line":300},[123,20062,17146],{"class":133},[123,20064,20065],{"class":125,"line":305},[123,20066,19422],{"class":2673},[123,20068,20069,20071,20073,20075,20077,20079,20081,20083,20085],{"class":125,"line":316},[123,20070,17339],{"class":133},[123,20072,19429],{"class":337},[123,20074,1315],{"class":129},[123,20076,16467],{"class":133},[123,20078,19436],{"class":279},[123,20080,251],{"class":129},[123,20082,16467],{"class":133},[123,20084,19443],{"class":279},[123,20086,5161],{"class":129},[123,20088,20089],{"class":125,"line":673},[123,20090,19461],{"class":2673},[123,20092,20093,20095,20097],{"class":125,"line":692},[123,20094,17168],{"class":133},[123,20096,19468],{"class":337},[123,20098,8069],{"class":129},[123,20100,20101,20103,20105],{"class":125,"line":713},[123,20102,17168],{"class":133},[123,20104,19484],{"class":337},[123,20106,8069],{"class":129},[123,20108,20109],{"class":125,"line":718},[123,20110,232],{"emptyLinePlaceholder":231},[123,20112,20113],{"class":125,"line":1138},[123,20114,17651],{"class":133},[123,20116,20117,20119],{"class":125,"line":1429},[123,20118,17168],{"class":133},[123,20120,19506],{"class":129},[123,20122,20123,20125],{"class":125,"line":1439},[123,20124,17168],{"class":133},[123,20126,19513],{"class":129},[123,20128,20129],{"class":125,"line":1444},[123,20130,6434],{"class":129},[19,20132,20133],{},"创建point.cpp",[113,20135,20137],{"className":2608,"code":20136,"language":2610,"meta":118,"style":118},"#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",[120,20138,20139,20146,20151,20185,20189,20205],{"__ignoreMap":118},[123,20140,20141,20143],{"class":125,"line":126},[123,20142,4394],{"class":133},[123,20144,20145],{"class":143},"\u003Cpoint.h>\n",[123,20147,20148],{"class":125,"line":140},[123,20149,20150],{"class":2673},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[123,20152,20153,20155,20158,20161,20163,20165,20167,20169,20171,20173,20175,20177,20179,20181,20183],{"class":125,"line":156},[123,20154,17339],{"class":133},[123,20156,20157],{"class":337}," Point",[123,20159,20160],{"class":129},"::",[123,20162,19930],{"class":337},[123,20164,1315],{"class":129},[123,20166,16467],{"class":133},[123,20168,19436],{"class":279},[123,20170,251],{"class":129},[123,20172,16467],{"class":133},[123,20174,19443],{"class":279},[123,20176,19446],{"class":129},[123,20178,134],{"class":133},[123,20180,19451],{"class":129},[123,20182,134],{"class":133},[123,20184,19456],{"class":129},[123,20186,20187],{"class":125,"line":168},[123,20188,19461],{"class":2673},[123,20190,20191,20193,20195,20197,20199,20201,20203],{"class":125,"line":268},[123,20192,17168],{"class":133},[123,20194,20157],{"class":337},[123,20196,20160],{"class":129},[123,20198,19692],{"class":337},[123,20200,19471],{"class":129},[123,20202,19474],{"class":133},[123,20204,19477],{"class":129},[123,20206,20207,20209,20211,20213,20215,20217,20219],{"class":125,"line":291},[123,20208,17168],{"class":133},[123,20210,20157],{"class":337},[123,20212,20160],{"class":129},[123,20214,19720],{"class":337},[123,20216,19471],{"class":129},[123,20218,19474],{"class":133},[123,20220,19491],{"class":129},[19,20222,20223],{},"创建circle.h",[113,20225,20227],{"className":2608,"code":20226,"language":2610,"meta":118,"style":118},"#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",[120,20228,20229,20236,20242,20252,20258,20264,20268,20272,20276,20290,20304,20308,20316,20324,20328,20332,20338,20342,20346],{"__ignoreMap":118},[123,20230,20231,20233],{"class":125,"line":126},[123,20232,20021],{"class":133},[123,20234,20235],{"class":337}," once\n",[123,20237,20238,20240],{"class":125,"line":140},[123,20239,4394],{"class":133},[123,20241,4397],{"class":143},[123,20243,20244,20246,20248,20250],{"class":125,"line":156},[123,20245,4402],{"class":133},[123,20247,4405],{"class":133},[123,20249,4408],{"class":337},[123,20251,3760],{"class":129},[123,20253,20254,20256],{"class":125,"line":168},[123,20255,4394],{"class":133},[123,20257,20145],{"class":143},[123,20259,20260,20262],{"class":125,"line":268},[123,20261,17124],{"class":133},[123,20263,17127],{"class":337},[123,20265,20266],{"class":125,"line":291},[123,20267,186],{"class":129},[123,20269,20270],{"class":125,"line":300},[123,20271,17146],{"class":133},[123,20273,20274],{"class":125,"line":305},[123,20275,19422],{"class":2673},[123,20277,20278,20280,20282,20284,20286,20288],{"class":125,"line":316},[123,20279,17339],{"class":133},[123,20281,19542],{"class":337},[123,20283,1315],{"class":129},[123,20285,16467],{"class":133},[123,20287,19549],{"class":279},[123,20289,5161],{"class":129},[123,20291,20292,20294,20296,20298,20300,20302],{"class":125,"line":673},[123,20293,17339],{"class":133},[123,20295,19564],{"class":337},[123,20297,1315],{"class":129},[123,20299,19569],{"class":337},[123,20301,19572],{"class":279},[123,20303,5161],{"class":129},[123,20305,20306],{"class":125,"line":692},[123,20307,19585],{"class":2673},[123,20309,20310,20312,20314],{"class":125,"line":713},[123,20311,17168],{"class":133},[123,20313,19592],{"class":337},[123,20315,8069],{"class":129},[123,20317,20318,20320,20322],{"class":125,"line":718},[123,20319,19604],{"class":337},[123,20321,19607],{"class":337},[123,20323,8069],{"class":129},[123,20325,20326],{"class":125,"line":1138},[123,20327,232],{"emptyLinePlaceholder":231},[123,20329,20330],{"class":125,"line":1429},[123,20331,17651],{"class":133},[123,20333,20334,20336],{"class":125,"line":1439},[123,20335,17168],{"class":133},[123,20337,17158],{"class":129},[123,20339,20340],{"class":125,"line":1444},[123,20341,19633],{"class":2673},[123,20343,20344],{"class":125,"line":1453},[123,20345,19638],{"class":129},[123,20347,20348],{"class":125,"line":1458},[123,20349,6434],{"class":129},[19,20351,20352],{},"创建circle.cpp",[113,20354,20356],{"className":2608,"code":20355,"language":2610,"meta":118,"style":118},"#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",[120,20357,20358,20365,20388,20410,20415,20431],{"__ignoreMap":118},[123,20359,20360,20362],{"class":125,"line":126},[123,20361,4394],{"class":133},[123,20363,20364],{"class":143},"\u003Ccircle.h>\n",[123,20366,20367,20369,20372,20374,20376,20378,20380,20382,20384,20386],{"class":125,"line":140},[123,20368,7797],{"class":133},[123,20370,20371],{"class":337}," Circle",[123,20373,20160],{"class":129},[123,20375,19888],{"class":337},[123,20377,1315],{"class":129},[123,20379,16467],{"class":133},[123,20381,19549],{"class":279},[123,20383,19552],{"class":129},[123,20385,134],{"class":133},[123,20387,19557],{"class":129},[123,20389,20390,20392,20394,20396,20398,20400,20402,20404,20406,20408],{"class":125,"line":156},[123,20391,7797],{"class":133},[123,20393,20371],{"class":337},[123,20395,20160],{"class":129},[123,20397,19940],{"class":337},[123,20399,1315],{"class":129},[123,20401,19569],{"class":337},[123,20403,19572],{"class":279},[123,20405,19575],{"class":129},[123,20407,134],{"class":133},[123,20409,19580],{"class":129},[123,20411,20412],{"class":125,"line":168},[123,20413,20414],{"class":2673},"\u002F\u002F获取属性\n",[123,20416,20417,20419,20421,20423,20425,20427,20429],{"class":125,"line":268},[123,20418,16467],{"class":133},[123,20420,20371],{"class":337},[123,20422,20160],{"class":129},[123,20424,19772],{"class":337},[123,20426,19471],{"class":129},[123,20428,19474],{"class":133},[123,20430,19599],{"class":129},[123,20432,20433,20435,20437,20439,20441,20443,20445],{"class":125,"line":291},[123,20434,19569],{"class":337},[123,20436,20371],{"class":337},[123,20438,20160],{"class":129},[123,20440,19686],{"class":337},[123,20442,19471],{"class":129},[123,20444,19474],{"class":133},[123,20446,19614],{"class":129},[19,20448,20449],{},"使用封装的类",[113,20451,20453],{"className":2608,"code":20452,"language":2610,"meta":118,"style":118},"#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",[120,20454,20455,20461,20471,20477,20483,20507,20511,20537,20563,20587,20601,20605,20617,20621,20625,20629,20641,20645,20649,20657,20661,20665,20669,20673,20677,20687,20693,20701,20709,20719,20725,20737,20745,20753,20763,20769,20781,20785,20793,20799],{"__ignoreMap":118},[123,20456,20457,20459],{"class":125,"line":126},[123,20458,4394],{"class":133},[123,20460,4397],{"class":143},[123,20462,20463,20465,20467,20469],{"class":125,"line":140},[123,20464,4402],{"class":133},[123,20466,4405],{"class":133},[123,20468,4408],{"class":337},[123,20470,3760],{"class":129},[123,20472,20473,20475],{"class":125,"line":156},[123,20474,4394],{"class":133},[123,20476,20364],{"class":143},[123,20478,20479,20481],{"class":125,"line":168},[123,20480,4394],{"class":133},[123,20482,20145],{"class":143},[123,20484,20485,20487,20489,20491,20493,20495,20497,20499,20501,20503,20505],{"class":125,"line":268},[123,20486,7797],{"class":133},[123,20488,19649],{"class":337},[123,20490,1315],{"class":129},[123,20492,19654],{"class":337},[123,20494,13016],{"class":133},[123,20496,2896],{"class":279},[123,20498,2985],{"class":129},[123,20500,19569],{"class":337},[123,20502,13016],{"class":133},[123,20504,19],{"class":279},[123,20506,288],{"class":129},[123,20508,20509],{"class":125,"line":291},[123,20510,186],{"class":129},[123,20512,20513,20515,20517,20519,20521,20523,20525,20527,20529,20531,20533,20535],{"class":125,"line":300},[123,20514,17168],{"class":133},[123,20516,19679],{"class":129},[123,20518,134],{"class":133},[123,20520,18770],{"class":129},[123,20522,19686],{"class":337},[123,20524,19689],{"class":129},[123,20526,19692],{"class":337},[123,20528,15481],{"class":129},[123,20530,3135],{"class":133},[123,20532,18316],{"class":129},[123,20534,19692],{"class":337},[123,20536,8069],{"class":129},[123,20538,20539,20541,20543,20545,20547,20549,20551,20553,20555,20557,20559,20561],{"class":125,"line":305},[123,20540,17168],{"class":133},[123,20542,19709],{"class":129},[123,20544,134],{"class":133},[123,20546,18770],{"class":129},[123,20548,19686],{"class":337},[123,20550,19689],{"class":129},[123,20552,19720],{"class":337},[123,20554,15481],{"class":129},[123,20556,3135],{"class":133},[123,20558,18316],{"class":129},[123,20560,19720],{"class":337},[123,20562,8069],{"class":129},[123,20564,20565,20567,20569,20571,20573,20575,20577,20579,20581,20583,20585],{"class":125,"line":316},[123,20566,17168],{"class":133},[123,20568,19737],{"class":129},[123,20570,134],{"class":133},[123,20572,19742],{"class":337},[123,20574,19745],{"class":129},[123,20576,3060],{"class":133},[123,20578,19679],{"class":129},[123,20580,3086],{"class":133},[123,20582,19709],{"class":129},[123,20584,3060],{"class":133},[123,20586,19758],{"class":129},[123,20588,20589,20591,20593,20595,20597,20599],{"class":125,"line":673},[123,20590,1711],{"class":133},[123,20592,19765],{"class":129},[123,20594,3509],{"class":133},[123,20596,18770],{"class":129},[123,20598,19772],{"class":337},[123,20600,19775],{"class":129},[123,20602,20603],{"class":125,"line":692},[123,20604,4474],{"class":129},[123,20606,20607,20609,20611,20613,20615],{"class":125,"line":713},[123,20608,12101],{"class":129},[123,20610,3643],{"class":133},[123,20612,19788],{"class":143},[123,20614,3911],{"class":133},[123,20616,11272],{"class":129},[123,20618,20619],{"class":125,"line":718},[123,20620,4631],{"class":129},[123,20622,20623],{"class":125,"line":1138},[123,20624,19251],{"class":133},[123,20626,20627],{"class":125,"line":1429},[123,20628,4474],{"class":129},[123,20630,20631,20633,20635,20637,20639],{"class":125,"line":1439},[123,20632,12101],{"class":129},[123,20634,3643],{"class":133},[123,20636,19813],{"class":143},[123,20638,3911],{"class":133},[123,20640,11272],{"class":129},[123,20642,20643],{"class":125,"line":1444},[123,20644,4631],{"class":129},[123,20646,20647],{"class":125,"line":1453},[123,20648,171],{"class":129},[123,20650,20651,20653,20655],{"class":125,"line":1458},[123,20652,1742],{"class":133},[123,20654,4417],{"class":337},[123,20656,4420],{"class":129},[123,20658,20659],{"class":125,"line":1476},[123,20660,186],{"class":129},[123,20662,20663],{"class":125,"line":1494},[123,20664,17483],{"class":2673},[123,20666,20667],{"class":125,"line":1499},[123,20668,17230],{"class":129},[123,20670,20671],{"class":125,"line":1517},[123,20672,19850],{"class":129},[123,20674,20675],{"class":125,"line":1534},[123,20676,19422],{"class":2673},[123,20678,20679,20681,20683,20685],{"class":125,"line":1539},[123,20680,4017],{"class":129},[123,20682,3643],{"class":133},[123,20684,19863],{"class":143},[123,20686,3760],{"class":129},[123,20688,20689,20691],{"class":125,"line":2080},[123,20690,17168],{"class":133},[123,20692,19872],{"class":129},[123,20694,20695,20697,20699],{"class":125,"line":2097},[123,20696,4456],{"class":129},[123,20698,3896],{"class":133},[123,20700,19881],{"class":129},[123,20702,20703,20705,20707],{"class":125,"line":2114},[123,20704,19023],{"class":129},[123,20706,19888],{"class":337},[123,20708,19891],{"class":129},[123,20710,20711,20713,20715,20717],{"class":125,"line":2125},[123,20712,4017],{"class":129},[123,20714,3643],{"class":133},[123,20716,19900],{"class":143},[123,20718,3760],{"class":129},[123,20720,20721,20723],{"class":125,"line":2130},[123,20722,17168],{"class":133},[123,20724,19909],{"class":129},[123,20726,20727,20729,20731,20733,20735],{"class":125,"line":5033},[123,20728,4456],{"class":129},[123,20730,3896],{"class":133},[123,20732,3421],{"class":129},[123,20734,3896],{"class":133},[123,20736,19922],{"class":129},[123,20738,20739,20741,20743],{"class":125,"line":5041},[123,20740,19927],{"class":129},[123,20742,19930],{"class":337},[123,20744,19933],{"class":129},[123,20746,20747,20749,20751],{"class":125,"line":5046},[123,20748,19023],{"class":129},[123,20750,19940],{"class":337},[123,20752,19943],{"class":129},[123,20754,20755,20757,20759,20761],{"class":125,"line":5052},[123,20756,4017],{"class":129},[123,20758,3643],{"class":133},[123,20760,19952],{"class":143},[123,20762,3760],{"class":129},[123,20764,20765,20767],{"class":125,"line":5058},[123,20766,17168],{"class":133},[123,20768,19961],{"class":129},[123,20770,20771,20773,20775,20777,20779],{"class":125,"line":5063},[123,20772,4456],{"class":129},[123,20774,3896],{"class":133},[123,20776,19970],{"class":129},[123,20778,3896],{"class":133},[123,20780,19975],{"class":129},[123,20782,20783],{"class":125,"line":10380},[123,20784,19980],{"class":129},[123,20786,20787,20789,20791],{"class":125,"line":10404},[123,20788,19985],{"class":129},[123,20790,19930],{"class":337},[123,20792,19990],{"class":129},[123,20794,20795,20797],{"class":125,"line":10409},[123,20796,19995],{"class":337},[123,20798,19998],{"class":129},[123,20800,20801],{"class":125,"line":10415},[123,20802,171],{"class":129},[14,20804,20806],{"id":20805},"_82对象的初始化清理","8.2对象的初始化清理",[3606,20808,20809,20812],{},[29,20810,20811],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20813,20814],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[2587,20816,20818],{"id":20817},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20820,20821,20822,20825],{},"对象的",[2759,20823,20824],{},"初始化和清理","也是两个非常重要的安全问题",[19,20827,20828],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20830,20831],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20833,20834,20835,20838,20839,20842],{},"c++利用了",[2759,20836,20837],{},"构造函数","和",[2759,20840,20841],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20844,20845,20846],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2759,20847,20848],{},"我们不提供构造和析构，编译器会提供",[19,20850,20851],{},[2759,20852,20853],{},"编译器提供的构造函数和析构函数是空实现。",[3606,20855,20856,20859],{},[29,20857,20858],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20860,20861,20862,20865],{},"析构函数：主要作用在于对象",[2759,20863,20864],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20867,20868,20871],{},[2759,20869,20870],{},"构造函数语法：",[120,20872,20873],{},"类名(){}",[26,20875,20876,20879,20882,20885,20888],{},[29,20877,20878],{},"构造函数，没有返回值也不写void",[29,20880,20881],{},"函数名称与类名相同",[29,20883,20884],{},"构造函数可以有参数，因此可以发生重载",[29,20886,20887],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20889,20890,20891,3035],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[120,20892,20893],{},"Person(){}",[19,20895,20896,16225,20899],{},[2759,20897,20898],{},"析构函数语法：",[120,20900,20901],{},"~类名(){}",[26,20903,20904,20907,20910,20916],{},[29,20905,20906],{},"析构函数，没有返回值也不写void",[29,20908,20909],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20911,20912,20913],{},"析构函数不可以有参数，因此",[2759,20914,20915],{},"不可以发生重载",[29,20917,20918],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[113,20920,20922],{"className":2608,"code":20921,"language":2610,"meta":118,"style":118},"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",[120,20923,20924,20930,20934,20938,20943,20950,20954,20967,20971,20976,20983,20987,21000,21004,21008,21012,21016,21024,21028,21036,21040,21044,21052,21056,21061,21065,21072,21076,21089,21093,21101],{"__ignoreMap":118},[123,20925,20926,20928],{"class":125,"line":126},[123,20927,17124],{"class":133},[123,20929,17600],{"class":337},[123,20931,20932],{"class":125,"line":140},[123,20933,186],{"class":129},[123,20935,20936],{"class":125,"line":156},[123,20937,17146],{"class":133},[123,20939,20940],{"class":125,"line":168},[123,20941,20942],{"class":2673},"    \u002F\u002F构造函数\n",[123,20944,20945,20948],{"class":125,"line":268},[123,20946,20947],{"class":337},"    Person",[123,20949,4420],{"class":129},[123,20951,20952],{"class":125,"line":291},[123,20953,4474],{"class":129},[123,20955,20956,20958,20960,20963,20965],{"class":125,"line":300},[123,20957,12101],{"class":129},[123,20959,3643],{"class":133},[123,20961,20962],{"class":143}," \"Person的构造函数调用\"",[123,20964,3911],{"class":133},[123,20966,11272],{"class":129},[123,20968,20969],{"class":125,"line":305},[123,20970,4631],{"class":129},[123,20972,20973],{"class":125,"line":316},[123,20974,20975],{"class":2673},"    \u002F\u002F析构函数\n",[123,20977,20978,20981],{"class":125,"line":673},[123,20979,20980],{"class":337},"    ~Person",[123,20982,4420],{"class":129},[123,20984,20985],{"class":125,"line":692},[123,20986,4474],{"class":129},[123,20988,20989,20991,20993,20996,20998],{"class":125,"line":713},[123,20990,12101],{"class":129},[123,20992,3643],{"class":133},[123,20994,20995],{"class":143}," \"Person的析构函数调用\"",[123,20997,3911],{"class":133},[123,20999,11272],{"class":129},[123,21001,21002],{"class":125,"line":718},[123,21003,4631],{"class":129},[123,21005,21006],{"class":125,"line":1138},[123,21007,232],{"emptyLinePlaceholder":231},[123,21009,21010],{"class":125,"line":1429},[123,21011,6434],{"class":129},[123,21013,21014],{"class":125,"line":1439},[123,21015,232],{"emptyLinePlaceholder":231},[123,21017,21018,21020,21022],{"class":125,"line":1444},[123,21019,7797],{"class":133},[123,21021,8021],{"class":337},[123,21023,4420],{"class":129},[123,21025,21026],{"class":125,"line":1453},[123,21027,186],{"class":129},[123,21029,21030,21033],{"class":125,"line":1458},[123,21031,21032],{"class":129},"    Person p;",[123,21034,21035],{"class":2673},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[123,21037,21038],{"class":125,"line":1476},[123,21039,171],{"class":129},[123,21041,21042],{"class":125,"line":1494},[123,21043,232],{"emptyLinePlaceholder":231},[123,21045,21046,21048,21050],{"class":125,"line":1499},[123,21047,1742],{"class":133},[123,21049,4417],{"class":337},[123,21051,13285],{"class":129},[123,21053,21054],{"class":125,"line":1517},[123,21055,15641],{"class":129},[123,21057,21058],{"class":125,"line":1534},[123,21059,21060],{"class":2673},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[123,21062,21063],{"class":125,"line":1539},[123,21064,232],{"emptyLinePlaceholder":231},[123,21066,21067,21069],{"class":125,"line":2080},[123,21068,21032],{"class":129},[123,21070,21071],{"class":2673},"\u002F\u002F只有构造函数\n",[123,21073,21074],{"class":125,"line":2097},[123,21075,232],{"emptyLinePlaceholder":231},[123,21077,21078,21080,21082,21084,21086],{"class":125,"line":2114},[123,21079,4747],{"class":337},[123,21081,1315],{"class":129},[123,21083,4752],{"class":143},[123,21085,8399],{"class":129},[123,21087,21088],{"class":2673},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[123,21090,21091],{"class":125,"line":2125},[123,21092,232],{"emptyLinePlaceholder":231},[123,21094,21095,21097,21099],{"class":125,"line":2130},[123,21096,6529],{"class":133},[123,21098,6532],{"class":164},[123,21100,3760],{"class":129},[123,21102,21103],{"class":125,"line":5033},[123,21104,171],{"class":129},[19,21106,21107],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[2587,21109,21111],{"id":21110},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,21113,21114],{},"两种分类方式：",[19,21116,21117],{},"​\t按参数分为： 有参构造和无参构造",[19,21119,21120],{},"​\t按类型分为： 普通构造和拷贝构造",[19,21122,21123],{},"三种调用方式：",[19,21125,21126],{},"​\t括号法",[19,21128,21129],{},"​\t显示法",[19,21131,21132],{},"​\t隐式转换法",[113,21134,21136],{"className":2608,"code":21135,"language":2610,"meta":118,"style":118},"#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",[120,21137,21138,21144,21154,21159,21164,21169,21174,21178,21186,21190,21194,21198,21204,21208,21221,21225,21237,21241,21250,21263,21267,21271,21277,21281,21294,21298,21303,21319,21323,21328,21337,21350,21354,21360,21364,21369,21377,21381,21386,21390,21398,21402,21407,21412,21417,21422,21427,21431,21436,21441,21446,21451,21455,21460,21465,21481,21493,21498,21502,21507,21512,21517,21521,21526,21540,21553,21557,21565,21569,21575,21581,21589],{"__ignoreMap":118},[123,21139,21140,21142],{"class":125,"line":126},[123,21141,4394],{"class":133},[123,21143,4397],{"class":143},[123,21145,21146,21148,21150,21152],{"class":125,"line":140},[123,21147,4402],{"class":133},[123,21149,4405],{"class":133},[123,21151,4408],{"class":337},[123,21153,3760],{"class":129},[123,21155,21156],{"class":125,"line":156},[123,21157,21158],{"class":2673},"\u002F\u002F1.构造函数的分类及调用\n",[123,21160,21161],{"class":125,"line":168},[123,21162,21163],{"class":2673},"\u002F\u002F分类\n",[123,21165,21166],{"class":125,"line":268},[123,21167,21168],{"class":2673},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[123,21170,21171],{"class":125,"line":291},[123,21172,21173],{"class":2673},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[123,21175,21176],{"class":125,"line":300},[123,21177,232],{"emptyLinePlaceholder":231},[123,21179,21180,21182,21184],{"class":125,"line":305},[123,21181,17124],{"class":133},[123,21183,17998],{"class":337},[123,21185,5116],{"class":129},[123,21187,21188],{"class":125,"line":316},[123,21189,186],{"class":129},[123,21191,21192],{"class":125,"line":673},[123,21193,17146],{"class":133},[123,21195,21196],{"class":125,"line":692},[123,21197,20942],{"class":2673},[123,21199,21200,21202],{"class":125,"line":713},[123,21201,20947],{"class":337},[123,21203,4420],{"class":129},[123,21205,21206],{"class":125,"line":718},[123,21207,4474],{"class":129},[123,21209,21210,21212,21214,21217,21219],{"class":125,"line":1138},[123,21211,5891],{"class":129},[123,21213,3643],{"class":133},[123,21215,21216],{"class":143},"\"Person构造函数无参构造\"",[123,21218,3643],{"class":133},[123,21220,3665],{"class":129},[123,21222,21223],{"class":125,"line":1429},[123,21224,4631],{"class":129},[123,21226,21227,21229,21231,21233,21235],{"class":125,"line":1439},[123,21228,20947],{"class":337},[123,21230,1315],{"class":129},[123,21232,1742],{"class":133},[123,21234,3865],{"class":279},[123,21236,288],{"class":129},[123,21238,21239],{"class":125,"line":1444},[123,21240,4474],{"class":129},[123,21242,21243,21246,21248],{"class":125,"line":1453},[123,21244,21245],{"class":129},"        age",[123,21247,134],{"class":133},[123,21249,8630],{"class":129},[123,21251,21252,21254,21256,21259,21261],{"class":125,"line":1458},[123,21253,5891],{"class":129},[123,21255,3643],{"class":133},[123,21257,21258],{"class":143},"\"Person构造函数有参构造\"",[123,21260,3643],{"class":133},[123,21262,3665],{"class":129},[123,21264,21265],{"class":125,"line":1476},[123,21266,4631],{"class":129},[123,21268,21269],{"class":125,"line":1494},[123,21270,20975],{"class":2673},[123,21272,21273,21275],{"class":125,"line":1499},[123,21274,20980],{"class":337},[123,21276,4420],{"class":129},[123,21278,21279],{"class":125,"line":1517},[123,21280,4474],{"class":129},[123,21282,21283,21285,21287,21290,21292],{"class":125,"line":1534},[123,21284,5891],{"class":129},[123,21286,3643],{"class":133},[123,21288,21289],{"class":143},"\"Person析构函数被调用\"",[123,21291,3643],{"class":133},[123,21293,3665],{"class":129},[123,21295,21296],{"class":125,"line":1539},[123,21297,4631],{"class":129},[123,21299,21300],{"class":125,"line":2080},[123,21301,21302],{"class":2673},"    \u002F\u002F拷贝构造函数\n",[123,21304,21305,21307,21309,21311,21313,21315,21317],{"class":125,"line":2097},[123,21306,20947],{"class":337},[123,21308,1315],{"class":129},[123,21310,9225],{"class":133},[123,21312,17998],{"class":337},[123,21314,13016],{"class":133},[123,21316,19],{"class":279},[123,21318,288],{"class":129},[123,21320,21321],{"class":125,"line":2114},[123,21322,4474],{"class":129},[123,21324,21325],{"class":125,"line":2125},[123,21326,21327],{"class":2673},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[123,21329,21330,21332,21334],{"class":125,"line":2130},[123,21331,21245],{"class":129},[123,21333,134],{"class":133},[123,21335,21336],{"class":129},"p.age;\n",[123,21338,21339,21341,21343,21346,21348],{"class":125,"line":5033},[123,21340,5891],{"class":129},[123,21342,3643],{"class":133},[123,21344,21345],{"class":143},"\"Person拷贝构造函数被调用\"",[123,21347,3643],{"class":133},[123,21349,3665],{"class":129},[123,21351,21352],{"class":125,"line":5041},[123,21353,4631],{"class":129},[123,21355,21356,21358],{"class":125,"line":5046},[123,21357,4429],{"class":133},[123,21359,10229],{"class":129},[123,21361,21362],{"class":125,"line":5052},[123,21363,6434],{"class":129},[123,21365,21366],{"class":125,"line":5058},[123,21367,21368],{"class":2673},"\u002F\u002F调用\n",[123,21370,21371,21373,21375],{"class":125,"line":5063},[123,21372,7797],{"class":133},[123,21374,8021],{"class":337},[123,21376,4420],{"class":129},[123,21378,21379],{"class":125,"line":10380},[123,21380,186],{"class":129},[123,21382,21383],{"class":125,"line":10404},[123,21384,21385],{"class":2673},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[123,21387,21388],{"class":125,"line":10409},[123,21389,171],{"class":129},[123,21391,21392,21394,21396],{"class":125,"line":10415},[123,21393,7797],{"class":133},[123,21395,8090],{"class":337},[123,21397,4420],{"class":129},[123,21399,21400],{"class":125,"line":10442},[123,21401,186],{"class":129},[123,21403,21404],{"class":125,"line":10447},[123,21405,21406],{"class":2673},"    \u002F\u002F1.括号法\n",[123,21408,21409],{"class":125,"line":10453},[123,21410,21411],{"class":2673},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[123,21413,21414],{"class":125,"line":10465},[123,21415,21416],{"class":2673},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[123,21418,21419],{"class":125,"line":10477},[123,21420,21421],{"class":2673},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[123,21423,21424],{"class":125,"line":10489},[123,21425,21426],{"class":2673},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[123,21428,21429],{"class":125,"line":12148},[123,21430,232],{"emptyLinePlaceholder":231},[123,21432,21433],{"class":125,"line":12173},[123,21434,21435],{"class":2673},"    \u002F\u002F注意事项\n",[123,21437,21438],{"class":125,"line":12196},[123,21439,21440],{"class":2673},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[123,21442,21443],{"class":125,"line":12220},[123,21444,21445],{"class":2673},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[123,21447,21448],{"class":125,"line":12225},[123,21449,21450],{"class":2673},"    \u002F\u002F Person p4();\n",[123,21452,21453],{"class":125,"line":12230},[123,21454,232],{"emptyLinePlaceholder":231},[123,21456,21457],{"class":125,"line":12235},[123,21458,21459],{"class":2673},"    \u002F\u002F2.显示法\n",[123,21461,21462],{"class":125,"line":12244},[123,21463,21464],{"class":129},"    Person p1;\n",[123,21466,21467,21470,21472,21475,21477,21479],{"class":125,"line":12249},[123,21468,21469],{"class":129},"    Person p2",[123,21471,134],{"class":133},[123,21473,21474],{"class":337},"Person",[123,21476,1315],{"class":129},[123,21478,2193],{"class":164},[123,21480,5161],{"class":129},[123,21482,21483,21486,21488,21490],{"class":125,"line":12255},[123,21484,21485],{"class":129},"    Person p3",[123,21487,134],{"class":133},[123,21489,21474],{"class":337},[123,21491,21492],{"class":129},"(p2);\n",[123,21494,21495],{"class":125,"line":12276},[123,21496,21497],{"class":2673},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[123,21499,21500],{"class":125,"line":12282},[123,21501,232],{"emptyLinePlaceholder":231},[123,21503,21504],{"class":125,"line":12296},[123,21505,21506],{"class":2673},"    \u002F\u002F 注意事项2\n",[123,21508,21509],{"class":125,"line":12302},[123,21510,21511],{"class":2673},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[123,21513,21514],{"class":125,"line":12329},[123,21515,21516],{"class":2673},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[123,21518,21519],{"class":125,"line":12338},[123,21520,232],{"emptyLinePlaceholder":231},[123,21522,21523],{"class":125,"line":12344},[123,21524,21525],{"class":2673},"    \u002F\u002F3.隐士转换法\n",[123,21527,21528,21531,21533,21535,21537],{"class":125,"line":12352},[123,21529,21530],{"class":129},"    Person p4",[123,21532,134],{"class":133},[123,21534,2193],{"class":164},[123,21536,2670],{"class":129},[123,21538,21539],{"class":2673},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[123,21541,21542,21545,21547,21550],{"class":125,"line":12357},[123,21543,21544],{"class":129},"    Person p5",[123,21546,134],{"class":133},[123,21548,21549],{"class":129},"p4;",[123,21551,21552],{"class":2673}," \u002F\u002F 这里会调用拷贝构造函数\n",[123,21554,21555],{"class":125,"line":19032},[123,21556,171],{"class":129},[123,21558,21559,21561,21563],{"class":125,"line":19038},[123,21560,1742],{"class":133},[123,21562,4417],{"class":337},[123,21564,4420],{"class":129},[123,21566,21567],{"class":125,"line":19061},[123,21568,186],{"class":129},[123,21570,21571,21573],{"class":125,"line":19067},[123,21572,8066],{"class":337},[123,21574,8069],{"class":129},[123,21576,21577,21579],{"class":125,"line":19090},[123,21578,8135],{"class":337},[123,21580,8069],{"class":129},[123,21582,21583,21585,21587],{"class":125,"line":19104},[123,21584,6529],{"class":133},[123,21586,6532],{"class":164},[123,21588,3760],{"class":129},[123,21590,21591],{"class":125,"line":19124},[123,21592,171],{"class":129},[19,21594,21595,21598],{},[2759,21596,21597],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[2587,21600,21602],{"id":21601},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21604,21605],{},"C++中拷贝构造函数调用时机通常有三种情况",[3606,21607,21608,21611,21614],{},[29,21609,21610],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,21612,21613],{},"值传递的方式给函数参数传值",[29,21615,21616],{},"以值方式返回局部对象",[113,21618,21620],{"className":2608,"code":21619,"language":2610,"meta":118,"style":118},"#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",[120,21621,21622,21628,21638,21642,21647,21651,21656,21661,21666,21672,21676,21680,21686,21690,21703,21707,21712,21724,21728,21736,21749,21753,21757,21773,21777,21786,21799,21803,21809,21813,21825,21829,21835,21839,21843,21851,21855,21868,21876,21894,21898,21903,21908,21923,21927,21940,21944,21952,21956,21960,21968,21972,21977,21986,21990,21994,22019,22029,22033,22041,22045,22056,22081,22085,22089,22093,22101,22105,22110,22115,22122,22127,22132,22137,22142,22146,22151,22155,22160,22164,22169,22174,22178,22182,22187,22192,22200],{"__ignoreMap":118},[123,21623,21624,21626],{"class":125,"line":126},[123,21625,4394],{"class":133},[123,21627,4397],{"class":143},[123,21629,21630,21632,21634,21636],{"class":125,"line":140},[123,21631,4402],{"class":133},[123,21633,4405],{"class":133},[123,21635,4408],{"class":337},[123,21637,3760],{"class":129},[123,21639,21640],{"class":125,"line":156},[123,21641,232],{"emptyLinePlaceholder":231},[123,21643,21644],{"class":125,"line":168},[123,21645,21646],{"class":2673},"\u002F\u002F拷贝构造函数调用时机\n",[123,21648,21649],{"class":125,"line":268},[123,21650,232],{"emptyLinePlaceholder":231},[123,21652,21653],{"class":125,"line":291},[123,21654,21655],{"class":2673},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[123,21657,21658],{"class":125,"line":300},[123,21659,21660],{"class":2673},"\u002F\u002F2.值传递的方式给函数参数传值\n",[123,21662,21663],{"class":125,"line":305},[123,21664,21665],{"class":2673},"\u002F\u002F3.以值方式返回局部对象\n",[123,21667,21668,21670],{"class":125,"line":316},[123,21669,17124],{"class":133},[123,21671,17600],{"class":337},[123,21673,21674],{"class":125,"line":673},[123,21675,186],{"class":129},[123,21677,21678],{"class":125,"line":692},[123,21679,17146],{"class":133},[123,21681,21682,21684],{"class":125,"line":713},[123,21683,20947],{"class":337},[123,21685,4420],{"class":129},[123,21687,21688],{"class":125,"line":718},[123,21689,4474],{"class":129},[123,21691,21692,21694,21696,21699,21701],{"class":125,"line":1138},[123,21693,12101],{"class":129},[123,21695,3643],{"class":133},[123,21697,21698],{"class":143}," \"Person的默认构造函数调用\"",[123,21700,3911],{"class":133},[123,21702,11272],{"class":129},[123,21704,21705],{"class":125,"line":1429},[123,21706,4631],{"class":129},[123,21708,21709],{"class":125,"line":1439},[123,21710,21711],{"class":2673},"    \u002F\u002F有参构造\n",[123,21713,21714,21716,21718,21720,21722],{"class":125,"line":1444},[123,21715,20947],{"class":337},[123,21717,1315],{"class":129},[123,21719,1742],{"class":133},[123,21721,18117],{"class":279},[123,21723,288],{"class":129},[123,21725,21726],{"class":125,"line":1453},[123,21727,4474],{"class":129},[123,21729,21730,21732,21734],{"class":125,"line":1458},[123,21731,18171],{"class":129},[123,21733,134],{"class":133},[123,21735,10229],{"class":129},[123,21737,21738,21740,21742,21745,21747],{"class":125,"line":1476},[123,21739,12101],{"class":129},[123,21741,3643],{"class":133},[123,21743,21744],{"class":143}," \"Person的有参构造函数调用\"",[123,21746,3911],{"class":133},[123,21748,11272],{"class":129},[123,21750,21751],{"class":125,"line":1494},[123,21752,4631],{"class":129},[123,21754,21755],{"class":125,"line":1499},[123,21756,21302],{"class":2673},[123,21758,21759,21761,21763,21765,21767,21769,21771],{"class":125,"line":1517},[123,21760,20947],{"class":337},[123,21762,1315],{"class":129},[123,21764,9225],{"class":133},[123,21766,17998],{"class":337},[123,21768,13016],{"class":133},[123,21770,19],{"class":279},[123,21772,288],{"class":129},[123,21774,21775],{"class":125,"line":1534},[123,21776,4474],{"class":129},[123,21778,21779,21781,21783],{"class":125,"line":1539},[123,21780,18171],{"class":129},[123,21782,134],{"class":133},[123,21784,21785],{"class":129}," p.m_Age;\n",[123,21787,21788,21790,21792,21795,21797],{"class":125,"line":2080},[123,21789,12101],{"class":129},[123,21791,3643],{"class":133},[123,21793,21794],{"class":143}," \"Person的拷贝构造函数调用\"",[123,21796,3911],{"class":133},[123,21798,11272],{"class":129},[123,21800,21801],{"class":125,"line":2097},[123,21802,4631],{"class":129},[123,21804,21805,21807],{"class":125,"line":2114},[123,21806,20980],{"class":337},[123,21808,4420],{"class":129},[123,21810,21811],{"class":125,"line":2125},[123,21812,4474],{"class":129},[123,21814,21815,21817,21819,21821,21823],{"class":125,"line":2130},[123,21816,12101],{"class":129},[123,21818,3643],{"class":133},[123,21820,20995],{"class":143},[123,21822,3911],{"class":133},[123,21824,11272],{"class":129},[123,21826,21827],{"class":125,"line":5033},[123,21828,4631],{"class":129},[123,21830,21831,21833],{"class":125,"line":5041},[123,21832,4429],{"class":133},[123,21834,18094],{"class":129},[123,21836,21837],{"class":125,"line":5046},[123,21838,6434],{"class":129},[123,21840,21841],{"class":125,"line":5052},[123,21842,21655],{"class":2673},[123,21844,21845,21847,21849],{"class":125,"line":5058},[123,21846,7797],{"class":133},[123,21848,8021],{"class":337},[123,21850,4420],{"class":129},[123,21852,21853],{"class":125,"line":5063},[123,21854,186],{"class":129},[123,21856,21857,21860,21862,21864,21866],{"class":125,"line":10380},[123,21858,21859],{"class":129},"    Person ",[123,21861,9563],{"class":337},[123,21863,1315],{"class":129},[123,21865,3302],{"class":164},[123,21867,5161],{"class":129},[123,21869,21870,21872,21874],{"class":125,"line":10404},[123,21871,21859],{"class":129},[123,21873,9466],{"class":337},[123,21875,19943],{"class":129},[123,21877,21878,21880,21882,21885,21887,21890,21892],{"class":125,"line":10409},[123,21879,4017],{"class":129},[123,21881,3643],{"class":133},[123,21883,21884],{"class":143},"\"P2的年龄为：\"",[123,21886,3643],{"class":133},[123,21888,21889],{"class":129},"p2.m_Age",[123,21891,3643],{"class":133},[123,21893,3665],{"class":129},[123,21895,21896],{"class":125,"line":10415},[123,21897,171],{"class":129},[123,21899,21900],{"class":125,"line":10442},[123,21901,21902],{"class":2673},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[123,21904,21905],{"class":125,"line":10447},[123,21906,21907],{"class":2673},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[123,21909,21910,21912,21915,21917,21919,21921],{"class":125,"line":10453},[123,21911,7797],{"class":133},[123,21913,21914],{"class":337}," doWork",[123,21916,1315],{"class":129},[123,21918,21474],{"class":337},[123,21920,9258],{"class":279},[123,21922,288],{"class":129},[123,21924,21925],{"class":125,"line":10465},[123,21926,186],{"class":129},[123,21928,21929,21931,21933,21936,21938],{"class":125,"line":10477},[123,21930,8962],{"class":129},[123,21932,3643],{"class":133},[123,21934,21935],{"class":143}," \"doWork函数调用\"",[123,21937,3911],{"class":133},[123,21939,11272],{"class":129},[123,21941,21942],{"class":125,"line":10489},[123,21943,171],{"class":129},[123,21945,21946,21948,21950],{"class":125,"line":12148},[123,21947,7797],{"class":133},[123,21949,8090],{"class":337},[123,21951,4420],{"class":129},[123,21953,21954],{"class":125,"line":12173},[123,21955,186],{"class":129},[123,21957,21958],{"class":125,"line":12196},[123,21959,17742],{"class":129},[123,21961,21962,21965],{"class":125,"line":12220},[123,21963,21964],{"class":337},"    doWork",[123,21966,21967],{"class":129},"(p);\n",[123,21969,21970],{"class":125,"line":12225},[123,21971,171],{"class":129},[123,21973,21974],{"class":125,"line":12230},[123,21975,21976],{"class":2673},"\u002F\u002F 3.以值方式返回局部对象\n",[123,21978,21979,21981,21984],{"class":125,"line":12235},[123,21980,21474],{"class":337},[123,21982,21983],{"class":337}," doWork2",[123,21985,4420],{"class":129},[123,21987,21988],{"class":125,"line":12244},[123,21989,186],{"class":129},[123,21991,21992],{"class":125,"line":12249},[123,21993,21464],{"class":129},[123,21995,21996,21998,22000,22002,22004,22006,22008,22010,22012,22014,22016],{"class":125,"line":12255},[123,21997,4017],{"class":129},[123,21999,3643],{"class":133},[123,22001,1315],{"class":129},[123,22003,1742],{"class":133},[123,22005,8951],{"class":133},[123,22007,3035],{"class":129},[123,22009,2960],{"class":133},[123,22011,9563],{"class":129},[123,22013,3643],{"class":133},[123,22015,3708],{"class":129},[123,22017,22018],{"class":2673},"\u002F\u002F打印p1的地址\n",[123,22020,22021,22023,22026],{"class":125,"line":12276},[123,22022,6529],{"class":133},[123,22024,22025],{"class":129}," p1;",[123,22027,22028],{"class":2673},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[123,22030,22031],{"class":125,"line":12282},[123,22032,171],{"class":129},[123,22034,22035,22037,22039],{"class":125,"line":12296},[123,22036,7797],{"class":133},[123,22038,8162],{"class":337},[123,22040,4420],{"class":129},[123,22042,22043],{"class":125,"line":12302},[123,22044,186],{"class":129},[123,22046,22047,22050,22052,22054],{"class":125,"line":12329},[123,22048,22049],{"class":129},"    Person p ",[123,22051,134],{"class":133},[123,22053,21983],{"class":337},[123,22055,8069],{"class":129},[123,22057,22058,22060,22062,22064,22066,22068,22070,22072,22074,22076,22078],{"class":125,"line":12338},[123,22059,4017],{"class":129},[123,22061,3643],{"class":133},[123,22063,1315],{"class":129},[123,22065,1742],{"class":133},[123,22067,8951],{"class":133},[123,22069,3035],{"class":129},[123,22071,2960],{"class":133},[123,22073,19],{"class":129},[123,22075,3643],{"class":133},[123,22077,3708],{"class":129},[123,22079,22080],{"class":2673},"\u002F\u002F打印p的地址\n",[123,22082,22083],{"class":125,"line":12344},[123,22084,171],{"class":129},[123,22086,22087],{"class":125,"line":12352},[123,22088,232],{"emptyLinePlaceholder":231},[123,22090,22091],{"class":125,"line":12357},[123,22092,232],{"emptyLinePlaceholder":231},[123,22094,22095,22097,22099],{"class":125,"line":19032},[123,22096,1742],{"class":133},[123,22098,4417],{"class":337},[123,22100,4420],{"class":129},[123,22102,22103],{"class":125,"line":19038},[123,22104,186],{"class":129},[123,22106,22107],{"class":125,"line":19061},[123,22108,22109],{"class":2673},"    \u002F\u002F test01();\n",[123,22111,22112],{"class":125,"line":19067},[123,22113,22114],{"class":2673},"    \u002F\u002F test02();\n",[123,22116,22117,22120],{"class":125,"line":19090},[123,22118,22119],{"class":337},"    test03",[123,22121,8069],{"class":129},[123,22123,22124],{"class":125,"line":19104},[123,22125,22126],{"class":2673},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[123,22128,22129],{"class":125,"line":19124},[123,22130,22131],{"class":2673},"\u002F\u002F 输出结果如下：\n",[123,22133,22134],{"class":125,"line":19130},[123,22135,22136],{"class":2673},"\u002F\u002F Person的默认构造函数调用\n",[123,22138,22139],{"class":125,"line":19141},[123,22140,22141],{"class":2673},"\u002F\u002F 0x7fffffffceec\n",[123,22143,22144],{"class":125,"line":19164},[123,22145,22141],{"class":2673},[123,22147,22148],{"class":125,"line":19186},[123,22149,22150],{"class":2673},"\u002F\u002F Person的析构函数调用\n",[123,22152,22153],{"class":125,"line":19191},[123,22154,232],{"emptyLinePlaceholder":231},[123,22156,22157],{"class":125,"line":19197},[123,22158,22159],{"class":2673},"\u002F\u002F 之前的输出结果如下：\n",[123,22161,22162],{"class":125,"line":19211},[123,22163,22136],{"class":2673},[123,22165,22166],{"class":125,"line":19224},[123,22167,22168],{"class":2673},"\u002F\u002F 地址\n",[123,22170,22171],{"class":125,"line":19229},[123,22172,22173],{"class":2673},"\u002F\u002F Person的拷贝构造函数调用\n",[123,22175,22176],{"class":125,"line":19243},[123,22177,22150],{"class":2673},[123,22179,22180],{"class":125,"line":19248},[123,22181,22168],{"class":2673},[123,22183,22184],{"class":125,"line":19254},[123,22185,22186],{"class":2673},"\u002F\u002F (这两次输出的地址也是不同的) \n",[123,22188,22189],{"class":125,"line":19259},[123,22190,22191],{"class":2673},"\u002F\u002F Person的析构函数调用     \n",[123,22193,22194,22196,22198],{"class":125,"line":19273},[123,22195,6529],{"class":133},[123,22197,6532],{"class":164},[123,22199,3760],{"class":129},[123,22201,22202],{"class":125,"line":19278},[123,22203,171],{"class":129},[19,22205,22206],{},"简化版理解",[113,22208,22210],{"className":2608,"code":22209,"language":2610,"meta":118,"style":118},"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",[120,22211,22212,22220,22224,22230,22243,22254,22258,22270,22283,22291,22295,22311,22324,22333,22337,22342,22348,22361,22365,22369,22376,22380,22384,22389,22397,22401,22417,22430,22443,22447,22452,22460,22464,22468,22473,22478,22494,22502,22509,22515,22519,22523,22528,22536,22540,22544,22567,22574,22578,22582,22590,22594,22604,22626,22630,22634,22638,22646,22650,22655,22660,22666,22670,22680,22684,22692],{"__ignoreMap":118},[123,22213,22214,22216,22218],{"class":125,"line":126},[123,22215,17124],{"class":133},[123,22217,17998],{"class":337},[123,22219,137],{"class":129},[123,22221,22222],{"class":125,"line":140},[123,22223,17146],{"class":133},[123,22225,22226,22228],{"class":125,"line":156},[123,22227,20947],{"class":337},[123,22229,13285],{"class":129},[123,22231,22232,22234,22236,22239,22241],{"class":125,"line":168},[123,22233,12101],{"class":129},[123,22235,3643],{"class":133},[123,22237,22238],{"class":143}," \"无参构造函数!\"",[123,22240,3911],{"class":133},[123,22242,11272],{"class":129},[123,22244,22245,22248,22250,22252],{"class":125,"line":268},[123,22246,22247],{"class":129},"        mAge ",[123,22249,134],{"class":133},[123,22251,6532],{"class":164},[123,22253,3760],{"class":129},[123,22255,22256],{"class":125,"line":291},[123,22257,4631],{"class":129},[123,22259,22260,22262,22264,22266,22268],{"class":125,"line":300},[123,22261,20947],{"class":337},[123,22263,1315],{"class":129},[123,22265,1742],{"class":133},[123,22267,18117],{"class":279},[123,22269,14873],{"class":129},[123,22271,22272,22274,22276,22279,22281],{"class":125,"line":305},[123,22273,12101],{"class":129},[123,22275,3643],{"class":133},[123,22277,22278],{"class":143}," \"有参构造函数!\"",[123,22280,3911],{"class":133},[123,22282,11272],{"class":129},[123,22284,22285,22287,22289],{"class":125,"line":316},[123,22286,22247],{"class":129},[123,22288,134],{"class":133},[123,22290,10229],{"class":129},[123,22292,22293],{"class":125,"line":673},[123,22294,4631],{"class":129},[123,22296,22297,22299,22301,22303,22305,22307,22309],{"class":125,"line":692},[123,22298,20947],{"class":337},[123,22300,1315],{"class":129},[123,22302,9225],{"class":133},[123,22304,17998],{"class":337},[123,22306,2960],{"class":133},[123,22308,9258],{"class":279},[123,22310,14873],{"class":129},[123,22312,22313,22315,22317,22320,22322],{"class":125,"line":713},[123,22314,12101],{"class":129},[123,22316,3643],{"class":133},[123,22318,22319],{"class":143}," \"拷贝构造函数!\"",[123,22321,3911],{"class":133},[123,22323,11272],{"class":129},[123,22325,22326,22328,22330],{"class":125,"line":718},[123,22327,22247],{"class":129},[123,22329,134],{"class":133},[123,22331,22332],{"class":129}," p.mAge;\n",[123,22334,22335],{"class":125,"line":1138},[123,22336,4631],{"class":129},[123,22338,22339],{"class":125,"line":1429},[123,22340,22341],{"class":2673},"    \u002F\u002F析构函数在释放内存之前调用\n",[123,22343,22344,22346],{"class":125,"line":1439},[123,22345,20980],{"class":337},[123,22347,13285],{"class":129},[123,22349,22350,22352,22354,22357,22359],{"class":125,"line":1444},[123,22351,12101],{"class":129},[123,22353,3643],{"class":133},[123,22355,22356],{"class":143}," \"析构函数!\"",[123,22358,3911],{"class":133},[123,22360,11272],{"class":129},[123,22362,22363],{"class":125,"line":1453},[123,22364,4631],{"class":129},[123,22366,22367],{"class":125,"line":1458},[123,22368,17146],{"class":133},[123,22370,22371,22373],{"class":125,"line":1476},[123,22372,4429],{"class":133},[123,22374,22375],{"class":129}," mAge;\n",[123,22377,22378],{"class":125,"line":1494},[123,22379,6434],{"class":129},[123,22381,22382],{"class":125,"line":1499},[123,22383,232],{"emptyLinePlaceholder":231},[123,22385,22386],{"class":125,"line":1517},[123,22387,22388],{"class":2673},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[123,22390,22391,22393,22395],{"class":125,"line":1534},[123,22392,7797],{"class":133},[123,22394,8021],{"class":337},[123,22396,13285],{"class":129},[123,22398,22399],{"class":125,"line":1539},[123,22400,232],{"emptyLinePlaceholder":231},[123,22402,22403,22405,22408,22410,22412,22414],{"class":125,"line":2080},[123,22404,21859],{"class":129},[123,22406,22407],{"class":337},"man",[123,22409,1315],{"class":129},[123,22411,259],{"class":164},[123,22413,8399],{"class":129},[123,22415,22416],{"class":2673}," \u002F\u002Fp对象已经创建完毕\n",[123,22418,22419,22421,22424,22427],{"class":125,"line":2097},[123,22420,21859],{"class":129},[123,22422,22423],{"class":337},"newman",[123,22425,22426],{"class":129},"(man);",[123,22428,22429],{"class":2673}," \u002F\u002F调用拷贝构造函数\n",[123,22431,22432,22435,22437,22440],{"class":125,"line":2114},[123,22433,22434],{"class":129},"    Person newman2 ",[123,22436,134],{"class":133},[123,22438,22439],{"class":129}," man;",[123,22441,22442],{"class":2673}," \u002F\u002F拷贝构造\n",[123,22444,22445],{"class":125,"line":2125},[123,22446,232],{"emptyLinePlaceholder":231},[123,22448,22449],{"class":125,"line":2130},[123,22450,22451],{"class":2673},"    \u002F\u002FPerson newman3;\n",[123,22453,22454,22457],{"class":125,"line":5033},[123,22455,22456],{"class":2673},"    \u002F\u002Fnewman3 = man;",[123,22458,22459],{"class":2673}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[123,22461,22462],{"class":125,"line":5041},[123,22463,171],{"class":129},[123,22465,22466],{"class":125,"line":5046},[123,22467,232],{"emptyLinePlaceholder":231},[123,22469,22470],{"class":125,"line":5052},[123,22471,22472],{"class":2673},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[123,22474,22475],{"class":125,"line":5058},[123,22476,22477],{"class":2673},"\u002F\u002F相当于Person p1 = p;\n",[123,22479,22480,22482,22484,22486,22488,22491],{"class":125,"line":5063},[123,22481,7797],{"class":133},[123,22483,21914],{"class":337},[123,22485,1315],{"class":129},[123,22487,21474],{"class":337},[123,22489,22490],{"class":279}," p1",[123,22492,22493],{"class":129},") {}\n",[123,22495,22496,22498,22500],{"class":125,"line":10380},[123,22497,7797],{"class":133},[123,22499,8090],{"class":337},[123,22501,13285],{"class":129},[123,22503,22504,22506],{"class":125,"line":10404},[123,22505,21032],{"class":129},[123,22507,22508],{"class":2673}," \u002F\u002F无参构造函数\n",[123,22510,22511,22513],{"class":125,"line":10409},[123,22512,21964],{"class":337},[123,22514,21967],{"class":129},[123,22516,22517],{"class":125,"line":10415},[123,22518,171],{"class":129},[123,22520,22521],{"class":125,"line":10442},[123,22522,232],{"emptyLinePlaceholder":231},[123,22524,22525],{"class":125,"line":10447},[123,22526,22527],{"class":2673},"\u002F\u002F3. 以值方式返回局部对象\n",[123,22529,22530,22532,22534],{"class":125,"line":10453},[123,22531,21474],{"class":337},[123,22533,21983],{"class":337},[123,22535,4420],{"class":129},[123,22537,22538],{"class":125,"line":10465},[123,22539,186],{"class":129},[123,22541,22542],{"class":125,"line":10477},[123,22543,21464],{"class":129},[123,22545,22546,22548,22550,22552,22554,22556,22558,22560,22563,22565],{"class":125,"line":10489},[123,22547,8962],{"class":129},[123,22549,3643],{"class":133},[123,22551,4116],{"class":129},[123,22553,1742],{"class":133},[123,22555,8951],{"class":133},[123,22557,3035],{"class":129},[123,22559,2960],{"class":133},[123,22561,22562],{"class":129},"p1 ",[123,22564,3643],{"class":133},[123,22566,11272],{"class":129},[123,22568,22569,22571],{"class":125,"line":12148},[123,22570,6529],{"class":133},[123,22572,22573],{"class":129}," p1;\n",[123,22575,22576],{"class":125,"line":12173},[123,22577,171],{"class":129},[123,22579,22580],{"class":125,"line":12196},[123,22581,232],{"emptyLinePlaceholder":231},[123,22583,22584,22586,22588],{"class":125,"line":12220},[123,22585,7797],{"class":133},[123,22587,8162],{"class":337},[123,22589,4420],{"class":129},[123,22591,22592],{"class":125,"line":12225},[123,22593,186],{"class":129},[123,22595,22596,22598,22600,22602],{"class":125,"line":12230},[123,22597,22049],{"class":129},[123,22599,134],{"class":133},[123,22601,21983],{"class":337},[123,22603,8069],{"class":129},[123,22605,22606,22608,22610,22612,22614,22616,22618,22620,22622,22624],{"class":125,"line":12235},[123,22607,8962],{"class":129},[123,22609,3643],{"class":133},[123,22611,4116],{"class":129},[123,22613,1742],{"class":133},[123,22615,8951],{"class":133},[123,22617,3035],{"class":129},[123,22619,2960],{"class":133},[123,22621,13880],{"class":129},[123,22623,3643],{"class":133},[123,22625,11272],{"class":129},[123,22627,22628],{"class":125,"line":12244},[123,22629,171],{"class":129},[123,22631,22632],{"class":125,"line":12249},[123,22633,232],{"emptyLinePlaceholder":231},[123,22635,22636],{"class":125,"line":12255},[123,22637,232],{"emptyLinePlaceholder":231},[123,22639,22640,22642,22644],{"class":125,"line":12276},[123,22641,1742],{"class":133},[123,22643,4417],{"class":337},[123,22645,13285],{"class":129},[123,22647,22648],{"class":125,"line":12282},[123,22649,232],{"emptyLinePlaceholder":231},[123,22651,22652],{"class":125,"line":12296},[123,22653,22654],{"class":2673},"    \u002F\u002Ftest01();\n",[123,22656,22657],{"class":125,"line":12302},[123,22658,22659],{"class":2673},"    \u002F\u002Ftest02();\n",[123,22661,22662,22664],{"class":125,"line":12329},[123,22663,22119],{"class":337},[123,22665,8069],{"class":129},[123,22667,22668],{"class":125,"line":12338},[123,22669,232],{"emptyLinePlaceholder":231},[123,22671,22672,22674,22676,22678],{"class":125,"line":12344},[123,22673,4747],{"class":337},[123,22675,1315],{"class":129},[123,22677,4752],{"class":143},[123,22679,5161],{"class":129},[123,22681,22682],{"class":125,"line":12352},[123,22683,232],{"emptyLinePlaceholder":231},[123,22685,22686,22688,22690],{"class":125,"line":12357},[123,22687,6529],{"class":133},[123,22689,6532],{"class":164},[123,22691,3760],{"class":129},[123,22693,22694],{"class":125,"line":19032},[123,22695,171],{"class":129},[2587,22697,22699],{"id":22698},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22701,22702],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22704,22705],{},"1．默认构造函数(无参，函数体为空)",[19,22707,22708],{},"2．默认析构函数(无参，函数体为空)",[19,22710,22711],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22713,22714],{},"构造函数调用规则如下：",[3606,22716,22717,22720],{},[29,22718,22719],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22721,22722],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[113,22724,22726],{"className":2608,"code":22725,"language":2610,"meta":118,"style":118},"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",[120,22727,22728,22736,22740,22745,22751,22763,22767,22772,22784,22793,22805,22809,22813,22829,22838,22850,22854,22858,22864,22876,22880,22884,22890,22894,22898,22906,22910,22922,22927,22935,22939,22957,22961,22965,22973,22977,22982,22990,23005,23018,23022,23027,23034,23050,23063,23067,23071,23079,23083,23089,23093,23103,23107,23115],{"__ignoreMap":118},[123,22729,22730,22732,22734],{"class":125,"line":126},[123,22731,17124],{"class":133},[123,22733,17998],{"class":337},[123,22735,137],{"class":129},[123,22737,22738],{"class":125,"line":140},[123,22739,17146],{"class":133},[123,22741,22742],{"class":125,"line":156},[123,22743,22744],{"class":2673},"    \u002F\u002F无参（默认）构造函数\n",[123,22746,22747,22749],{"class":125,"line":168},[123,22748,20947],{"class":337},[123,22750,13285],{"class":129},[123,22752,22753,22755,22757,22759,22761],{"class":125,"line":268},[123,22754,12101],{"class":129},[123,22756,3643],{"class":133},[123,22758,22238],{"class":143},[123,22760,3911],{"class":133},[123,22762,11272],{"class":129},[123,22764,22765],{"class":125,"line":291},[123,22766,4631],{"class":129},[123,22768,22769],{"class":125,"line":300},[123,22770,22771],{"class":2673},"    \u002F\u002F有参构造函数\n",[123,22773,22774,22776,22778,22780,22782],{"class":125,"line":305},[123,22775,20947],{"class":337},[123,22777,1315],{"class":129},[123,22779,1742],{"class":133},[123,22781,3865],{"class":279},[123,22783,14873],{"class":129},[123,22785,22786,22789,22791],{"class":125,"line":316},[123,22787,22788],{"class":129},"        age ",[123,22790,134],{"class":133},[123,22792,3899],{"class":129},[123,22794,22795,22797,22799,22801,22803],{"class":125,"line":673},[123,22796,12101],{"class":129},[123,22798,3643],{"class":133},[123,22800,22278],{"class":143},[123,22802,3911],{"class":133},[123,22804,11272],{"class":129},[123,22806,22807],{"class":125,"line":692},[123,22808,4631],{"class":129},[123,22810,22811],{"class":125,"line":713},[123,22812,21302],{"class":2673},[123,22814,22815,22817,22819,22821,22823,22825,22827],{"class":125,"line":718},[123,22816,20947],{"class":337},[123,22818,1315],{"class":129},[123,22820,9225],{"class":133},[123,22822,17998],{"class":337},[123,22824,2960],{"class":133},[123,22826,9258],{"class":279},[123,22828,14873],{"class":129},[123,22830,22831,22833,22835],{"class":125,"line":1138},[123,22832,22788],{"class":129},[123,22834,134],{"class":133},[123,22836,22837],{"class":129}," p.age;\n",[123,22839,22840,22842,22844,22846,22848],{"class":125,"line":1429},[123,22841,12101],{"class":129},[123,22843,3643],{"class":133},[123,22845,22319],{"class":143},[123,22847,3911],{"class":133},[123,22849,11272],{"class":129},[123,22851,22852],{"class":125,"line":1439},[123,22853,4631],{"class":129},[123,22855,22856],{"class":125,"line":1444},[123,22857,20975],{"class":2673},[123,22859,22860,22862],{"class":125,"line":1453},[123,22861,20980],{"class":337},[123,22863,13285],{"class":129},[123,22865,22866,22868,22870,22872,22874],{"class":125,"line":1458},[123,22867,12101],{"class":129},[123,22869,3643],{"class":133},[123,22871,22356],{"class":143},[123,22873,3911],{"class":133},[123,22875,11272],{"class":129},[123,22877,22878],{"class":125,"line":1476},[123,22879,4631],{"class":129},[123,22881,22882],{"class":125,"line":1494},[123,22883,17146],{"class":133},[123,22885,22886,22888],{"class":125,"line":1499},[123,22887,4429],{"class":133},[123,22889,10229],{"class":129},[123,22891,22892],{"class":125,"line":1517},[123,22893,6434],{"class":129},[123,22895,22896],{"class":125,"line":1534},[123,22897,232],{"emptyLinePlaceholder":231},[123,22899,22900,22902,22904],{"class":125,"line":1539},[123,22901,7797],{"class":133},[123,22903,8021],{"class":337},[123,22905,4420],{"class":129},[123,22907,22908],{"class":125,"line":2080},[123,22909,186],{"class":129},[123,22911,22912,22914,22916,22918,22920],{"class":125,"line":2097},[123,22913,21859],{"class":129},[123,22915,9563],{"class":337},[123,22917,1315],{"class":129},[123,22919,3252],{"class":164},[123,22921,5161],{"class":129},[123,22923,22924],{"class":125,"line":2114},[123,22925,22926],{"class":2673},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[123,22928,22929,22931,22933],{"class":125,"line":2125},[123,22930,21859],{"class":129},[123,22932,9466],{"class":337},[123,22934,19943],{"class":129},[123,22936,22937],{"class":125,"line":2130},[123,22938,232],{"emptyLinePlaceholder":231},[123,22940,22941,22943,22945,22948,22950,22953,22955],{"class":125,"line":5033},[123,22942,8962],{"class":129},[123,22944,3643],{"class":133},[123,22946,22947],{"class":143}," \"p2的年龄为： \"",[123,22949,3911],{"class":133},[123,22951,22952],{"class":129}," p2.age ",[123,22954,3643],{"class":133},[123,22956,11272],{"class":129},[123,22958,22959],{"class":125,"line":5041},[123,22960,171],{"class":129},[123,22962,22963],{"class":125,"line":5046},[123,22964,232],{"emptyLinePlaceholder":231},[123,22966,22967,22969,22971],{"class":125,"line":5052},[123,22968,7797],{"class":133},[123,22970,8090],{"class":337},[123,22972,4420],{"class":129},[123,22974,22975],{"class":125,"line":5058},[123,22976,186],{"class":129},[123,22978,22979],{"class":125,"line":5063},[123,22980,22981],{"class":2673},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[123,22983,22984,22987],{"class":125,"line":10380},[123,22985,22986],{"class":129},"    Person p1;",[123,22988,22989],{"class":2673}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[123,22991,22992,22994,22996,22998,23000,23002],{"class":125,"line":10404},[123,22993,21859],{"class":129},[123,22995,9466],{"class":337},[123,22997,1315],{"class":129},[123,22999,2193],{"class":164},[123,23001,8399],{"class":129},[123,23003,23004],{"class":2673}," \u002F\u002F用户提供的有参\n",[123,23006,23007,23009,23012,23015],{"class":125,"line":10409},[123,23008,21859],{"class":129},[123,23010,23011],{"class":337},"p3",[123,23013,23014],{"class":129},"(p2);",[123,23016,23017],{"class":2673}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[123,23019,23020],{"class":125,"line":10415},[123,23021,232],{"emptyLinePlaceholder":231},[123,23023,23024],{"class":125,"line":10442},[123,23025,23026],{"class":2673},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[123,23028,23029,23032],{"class":125,"line":10447},[123,23030,23031],{"class":129},"    Person p4;",[123,23033,22989],{"class":2673},[123,23035,23036,23038,23041,23043,23045,23047],{"class":125,"line":10453},[123,23037,21859],{"class":129},[123,23039,23040],{"class":337},"p5",[123,23042,1315],{"class":129},[123,23044,2193],{"class":164},[123,23046,8399],{"class":129},[123,23048,23049],{"class":2673}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[123,23051,23052,23054,23057,23060],{"class":125,"line":10465},[123,23053,21859],{"class":129},[123,23055,23056],{"class":337},"p6",[123,23058,23059],{"class":129},"(p5);",[123,23061,23062],{"class":2673}," \u002F\u002F用户自己提供拷贝构造\n",[123,23064,23065],{"class":125,"line":10477},[123,23066,171],{"class":129},[123,23068,23069],{"class":125,"line":10489},[123,23070,232],{"emptyLinePlaceholder":231},[123,23072,23073,23075,23077],{"class":125,"line":12148},[123,23074,1742],{"class":133},[123,23076,4417],{"class":337},[123,23078,13285],{"class":129},[123,23080,23081],{"class":125,"line":12173},[123,23082,232],{"emptyLinePlaceholder":231},[123,23084,23085,23087],{"class":125,"line":12196},[123,23086,8066],{"class":337},[123,23088,8069],{"class":129},[123,23090,23091],{"class":125,"line":12220},[123,23092,232],{"emptyLinePlaceholder":231},[123,23094,23095,23097,23099,23101],{"class":125,"line":12225},[123,23096,4747],{"class":337},[123,23098,1315],{"class":129},[123,23100,4752],{"class":143},[123,23102,5161],{"class":129},[123,23104,23105],{"class":125,"line":12230},[123,23106,232],{"emptyLinePlaceholder":231},[123,23108,23109,23111,23113],{"class":125,"line":12235},[123,23110,6529],{"class":133},[123,23112,6532],{"class":164},[123,23114,3760],{"class":129},[123,23116,23117],{"class":125,"line":12244},[123,23118,171],{"class":129},[2587,23120,23122],{"id":23121},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,23124,23125],{},"浅拷贝：简单的赋值拷贝操作",[19,23127,23128],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[113,23130,23132],{"className":2608,"code":23131,"language":2610,"meta":118,"style":118},"#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",[120,23133,23134,23140,23150,23156,23160,23164,23169,23175,23179,23192,23196,23200,23207,23211,23221,23236,23249,23253,23258,23263,23279,23283,23296,23301,23306,23311,23320,23325,23340,23344,23348,23352,23358,23362,23367,23382,23386,23397,23411,23415,23424,23428,23434,23446,23450,23458,23462,23478,23509,23517,23545,23549,23553,23561,23565,23571],{"__ignoreMap":118},[123,23135,23136,23138],{"class":125,"line":126},[123,23137,4394],{"class":133},[123,23139,4397],{"class":143},[123,23141,23142,23144,23146,23148],{"class":125,"line":140},[123,23143,4402],{"class":133},[123,23145,4405],{"class":133},[123,23147,4408],{"class":337},[123,23149,3760],{"class":129},[123,23151,23152,23154],{"class":125,"line":156},[123,23153,17124],{"class":133},[123,23155,17600],{"class":337},[123,23157,23158],{"class":125,"line":168},[123,23159,186],{"class":129},[123,23161,23162],{"class":125,"line":268},[123,23163,17146],{"class":133},[123,23165,23166],{"class":125,"line":291},[123,23167,23168],{"class":2673},"    \u002F\u002F默认构造函数\n",[123,23170,23171,23173],{"class":125,"line":300},[123,23172,20947],{"class":337},[123,23174,4420],{"class":129},[123,23176,23177],{"class":125,"line":305},[123,23178,4474],{"class":129},[123,23180,23181,23183,23185,23188,23190],{"class":125,"line":316},[123,23182,5891],{"class":129},[123,23184,3643],{"class":133},[123,23186,23187],{"class":143},"\"默认构造函数\"",[123,23189,3643],{"class":133},[123,23191,3665],{"class":129},[123,23193,23194],{"class":125,"line":673},[123,23195,4631],{"class":129},[123,23197,23198],{"class":125,"line":692},[123,23199,22771],{"class":2673},[123,23201,23202,23204],{"class":125,"line":713},[123,23203,20980],{"class":337},[123,23205,23206],{"class":129},"(int age,int height)\n",[123,23208,23209],{"class":125,"line":718},[123,23210,4474],{"class":129},[123,23212,23213,23216,23218],{"class":125,"line":1138},[123,23214,23215],{"class":129},"        m_Age",[123,23217,134],{"class":133},[123,23219,23220],{"class":129},"age;\n",[123,23222,23223,23226,23228,23230,23233],{"class":125,"line":1429},[123,23224,23225],{"class":129},"        m_Height",[123,23227,14149],{"class":133},[123,23229,4826],{"class":133},[123,23231,23232],{"class":129},"(height);",[123,23234,23235],{"class":2673},"\u002F\u002F放到堆区\n",[123,23237,23238,23240,23242,23245,23247],{"class":125,"line":1439},[123,23239,5891],{"class":129},[123,23241,3643],{"class":133},[123,23243,23244],{"class":143},"\"有参构造函数\"",[123,23246,3643],{"class":133},[123,23248,3665],{"class":129},[123,23250,23251],{"class":125,"line":1444},[123,23252,4631],{"class":129},[123,23254,23255],{"class":125,"line":1453},[123,23256,23257],{"class":2673},"    \u002F\u002F深拷贝解决上述问题\n",[123,23259,23260],{"class":125,"line":1458},[123,23261,23262],{"class":2673},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[123,23264,23265,23267,23269,23271,23273,23275,23277],{"class":125,"line":1476},[123,23266,20947],{"class":337},[123,23268,1315],{"class":129},[123,23270,9225],{"class":133},[123,23272,17998],{"class":337},[123,23274,13016],{"class":133},[123,23276,19],{"class":279},[123,23278,288],{"class":129},[123,23280,23281],{"class":125,"line":1494},[123,23282,4474],{"class":129},[123,23284,23285,23287,23289,23292,23294],{"class":125,"line":1499},[123,23286,5891],{"class":129},[123,23288,3643],{"class":133},[123,23290,23291],{"class":143},"\"拷贝构造函数\"",[123,23293,3643],{"class":133},[123,23295,3665],{"class":129},[123,23297,23298],{"class":125,"line":1517},[123,23299,23300],{"class":2673},"        \u002F\u002F编译器默认的写如下注释部分\n",[123,23302,23303],{"class":125,"line":1534},[123,23304,23305],{"class":2673},"        \u002F\u002Fm_Age=p.m_Age;\n",[123,23307,23308],{"class":125,"line":1539},[123,23309,23310],{"class":2673},"        \u002F\u002Fm_Height=p.m_Height;\n",[123,23312,23313,23315,23317],{"class":125,"line":2080},[123,23314,23215],{"class":129},[123,23316,134],{"class":133},[123,23318,23319],{"class":129},"p.m_Age;\n",[123,23321,23322],{"class":125,"line":2097},[123,23323,23324],{"class":2673},"        \u002F\u002F深拷贝操作\n",[123,23326,23327,23329,23331,23333,23335,23337],{"class":125,"line":2114},[123,23328,23225],{"class":129},[123,23330,14149],{"class":133},[123,23332,4826],{"class":133},[123,23334,1315],{"class":129},[123,23336,3060],{"class":133},[123,23338,23339],{"class":129},"p.m_Height);\n",[123,23341,23342],{"class":125,"line":2125},[123,23343,4631],{"class":129},[123,23345,23346],{"class":125,"line":2130},[123,23347,232],{"emptyLinePlaceholder":231},[123,23349,23350],{"class":125,"line":5033},[123,23351,20975],{"class":2673},[123,23353,23354,23356],{"class":125,"line":5041},[123,23355,20980],{"class":337},[123,23357,4420],{"class":129},[123,23359,23360],{"class":125,"line":5046},[123,23361,4474],{"class":129},[123,23363,23364],{"class":125,"line":5052},[123,23365,23366],{"class":2673},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[123,23368,23369,23371,23374,23377,23380],{"class":125,"line":5058},[123,23370,4940],{"class":133},[123,23372,23373],{"class":129},"(m_Height ",[123,23375,23376],{"class":133},"!=",[123,23378,23379],{"class":164}," NULL",[123,23381,288],{"class":129},[123,23383,23384],{"class":125,"line":5063},[123,23385,4953],{"class":129},[123,23387,23388,23391,23394],{"class":125,"line":10380},[123,23389,23390],{"class":133},"            delete",[123,23392,23393],{"class":129}," m_Height;",[123,23395,23396],{"class":2673}," \u002F\u002F释放堆区内存\n",[123,23398,23399,23402,23404,23406,23408],{"class":125,"line":10404},[123,23400,23401],{"class":129},"            m_Height",[123,23403,134],{"class":133},[123,23405,4836],{"class":164},[123,23407,2670],{"class":129},[123,23409,23410],{"class":2673}," \u002F\u002F防止野指针\n",[123,23412,23413],{"class":125,"line":10409},[123,23414,4972],{"class":129},[123,23416,23417,23419,23421],{"class":125,"line":10415},[123,23418,5891],{"class":129},[123,23420,3643],{"class":133},[123,23422,23423],{"class":143},"\"Person的析构函数调用\"\n",[123,23425,23426],{"class":125,"line":10442},[123,23427,4631],{"class":129},[123,23429,23430,23432],{"class":125,"line":10447},[123,23431,4429],{"class":133},[123,23433,18094],{"class":129},[123,23435,23436,23438,23440,23443],{"class":125,"line":10453},[123,23437,4429],{"class":133},[123,23439,8951],{"class":133},[123,23441,23442],{"class":129},"m_Height;",[123,23444,23445],{"class":2673}," \u002F\u002F定义一个指针，指向身高\n",[123,23447,23448],{"class":125,"line":10465},[123,23449,6434],{"class":129},[123,23451,23452,23454,23456],{"class":125,"line":10477},[123,23453,7797],{"class":133},[123,23455,8021],{"class":337},[123,23457,4420],{"class":129},[123,23459,23460],{"class":125,"line":10489},[123,23461,186],{"class":129},[123,23463,23464,23466,23468,23470,23472,23474,23476],{"class":125,"line":12148},[123,23465,21859],{"class":129},[123,23467,9563],{"class":337},[123,23469,1315],{"class":129},[123,23471,3252],{"class":164},[123,23473,2985],{"class":129},[123,23475,1040],{"class":164},[123,23477,5161],{"class":129},[123,23479,23480,23482,23484,23487,23489,23492,23494,23497,23499,23502,23504,23506],{"class":125,"line":12173},[123,23481,4017],{"class":129},[123,23483,3643],{"class":133},[123,23485,23486],{"class":143},"\"p1的年龄为:\"",[123,23488,3643],{"class":133},[123,23490,23491],{"class":129},"p1.m_Age",[123,23493,3643],{"class":133},[123,23495,23496],{"class":143},"\"身高为：\"",[123,23498,8852],{"class":133},[123,23500,23501],{"class":129},"p1.m_Height",[123,23503,3643],{"class":133},[123,23505,3708],{"class":129},[123,23507,23508],{"class":2673},"  \u002F\u002F18\n",[123,23510,23511,23513,23515],{"class":125,"line":12196},[123,23512,21859],{"class":129},[123,23514,9466],{"class":337},[123,23516,19943],{"class":129},[123,23518,23519,23521,23523,23526,23528,23530,23532,23534,23536,23539,23541,23543],{"class":125,"line":12220},[123,23520,4017],{"class":129},[123,23522,3643],{"class":133},[123,23524,23525],{"class":143},"\"p2的年龄为：\"",[123,23527,3643],{"class":133},[123,23529,21889],{"class":129},[123,23531,3643],{"class":133},[123,23533,23496],{"class":143},[123,23535,8852],{"class":133},[123,23537,23538],{"class":129},"p2.m_Height",[123,23540,3643],{"class":133},[123,23542,3708],{"class":129},[123,23544,23508],{"class":2673},[123,23546,23547],{"class":125,"line":12225},[123,23548,15641],{"class":129},[123,23550,23551],{"class":125,"line":12230},[123,23552,171],{"class":129},[123,23554,23555,23557,23559],{"class":125,"line":12235},[123,23556,1742],{"class":133},[123,23558,4417],{"class":337},[123,23560,4420],{"class":129},[123,23562,23563],{"class":125,"line":12244},[123,23564,186],{"class":129},[123,23566,23567,23569],{"class":125,"line":12249},[123,23568,8066],{"class":337},[123,23570,8069],{"class":129},[123,23572,23573],{"class":125,"line":12255},[123,23574,171],{"class":129},[19,23576,23577],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23579,23580],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23582,23583],{},[3929,23584],{"alt":118,"src":23585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23587,23588],{},"浅拷贝问题要使用深拷贝来解决",[19,23590,23591],{},[3929,23592],{"alt":118,"src":23593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23595,23596],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[2587,23598,23600],{"id":23599},"_826初始化列表","8.2.6初始化列表",[19,23602,23603],{},"作用：初始化属性",[19,23605,7615],{},[113,23607,23610],{"className":23608,"code":23609,"language":7621},[7619],"构造函数():属性1(值1),属性2(值2).....{}\n",[120,23611,23609],{"__ignoreMap":118},[19,23613,23614],{},"例子",[113,23616,23618],{"className":2608,"code":23617,"language":2610,"meta":118,"style":118},"#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",[120,23619,23620,23626,23636,23642,23646,23651,23655,23660,23665,23670,23675,23680,23685,23689,23694,23699,23742,23751,23769,23787,23805,23809,23813,23820,23827,23834,23838,23842,23850,23854,23858,23878,23887,23891,23895,23905,23909,23917],{"__ignoreMap":118},[123,23621,23622,23624],{"class":125,"line":126},[123,23623,4394],{"class":133},[123,23625,4397],{"class":143},[123,23627,23628,23630,23632,23634],{"class":125,"line":140},[123,23629,4402],{"class":133},[123,23631,4405],{"class":133},[123,23633,4408],{"class":337},[123,23635,3760],{"class":129},[123,23637,23638,23640],{"class":125,"line":156},[123,23639,17124],{"class":133},[123,23641,17600],{"class":337},[123,23643,23644],{"class":125,"line":168},[123,23645,186],{"class":129},[123,23647,23648],{"class":125,"line":268},[123,23649,23650],{"class":133},"    public:\n",[123,23652,23653],{"class":125,"line":291},[123,23654,232],{"emptyLinePlaceholder":231},[123,23656,23657],{"class":125,"line":300},[123,23658,23659],{"class":2673},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[123,23661,23662],{"class":125,"line":305},[123,23663,23664],{"class":2673},"    \u002F\u002FPerson(int a, int b, int c) {\n",[123,23666,23667],{"class":125,"line":316},[123,23668,23669],{"class":2673},"    \u002F\u002F  m_A = a;\n",[123,23671,23672],{"class":125,"line":673},[123,23673,23674],{"class":2673},"    \u002F\u002F  m_B = b;\n",[123,23676,23677],{"class":125,"line":692},[123,23678,23679],{"class":2673},"    \u002F\u002F  m_C = c;\n",[123,23681,23682],{"class":125,"line":713},[123,23683,23684],{"class":2673},"    \u002F\u002F}\n",[123,23686,23687],{"class":125,"line":718},[123,23688,232],{"emptyLinePlaceholder":231},[123,23690,23691],{"class":125,"line":1138},[123,23692,23693],{"class":2673},"    \u002F\u002F初始化列表方式初始化\n",[123,23695,23696],{"class":125,"line":1429},[123,23697,23698],{"class":2673},"    \u002F\u002F使用有参构造函数\n",[123,23700,23701,23703,23705,23707,23709,23711,23713,23715,23717,23719,23721,23724,23727,23730,23733,23736,23739],{"class":125,"line":1439},[123,23702,20947],{"class":337},[123,23704,1315],{"class":129},[123,23706,1742],{"class":133},[123,23708,3865],{"class":279},[123,23710,251],{"class":129},[123,23712,1742],{"class":133},[123,23714,5275],{"class":279},[123,23716,251],{"class":129},[123,23718,1742],{"class":133},[123,23720,5291],{"class":279},[123,23722,23723],{"class":129},") :",[123,23725,23726],{"class":337},"m_A",[123,23728,23729],{"class":129},"(a), ",[123,23731,23732],{"class":337},"m_B",[123,23734,23735],{"class":129},"(b), ",[123,23737,23738],{"class":337},"m_C",[123,23740,23741],{"class":129},"(c) {}\n",[123,23743,23744,23746,23749],{"class":125,"line":1444},[123,23745,17339],{"class":133},[123,23747,23748],{"class":337}," PrintPerson",[123,23750,13285],{"class":129},[123,23752,23753,23755,23757,23760,23762,23765,23767],{"class":125,"line":1453},[123,23754,12101],{"class":129},[123,23756,3643],{"class":133},[123,23758,23759],{"class":143}," \"mA:\"",[123,23761,3911],{"class":133},[123,23763,23764],{"class":129}," m_A ",[123,23766,3643],{"class":133},[123,23768,11272],{"class":129},[123,23770,23771,23773,23775,23778,23780,23783,23785],{"class":125,"line":1458},[123,23772,12101],{"class":129},[123,23774,3643],{"class":133},[123,23776,23777],{"class":143}," \"mB:\"",[123,23779,3911],{"class":133},[123,23781,23782],{"class":129}," m_B ",[123,23784,3643],{"class":133},[123,23786,11272],{"class":129},[123,23788,23789,23791,23793,23796,23798,23801,23803],{"class":125,"line":1476},[123,23790,12101],{"class":129},[123,23792,3643],{"class":133},[123,23794,23795],{"class":143}," \"mC:\"",[123,23797,3911],{"class":133},[123,23799,23800],{"class":129}," m_C ",[123,23802,3643],{"class":133},[123,23804,11272],{"class":129},[123,23806,23807],{"class":125,"line":1494},[123,23808,4631],{"class":129},[123,23810,23811],{"class":125,"line":1499},[123,23812,17651],{"class":133},[123,23814,23815,23817],{"class":125,"line":1517},[123,23816,4429],{"class":133},[123,23818,23819],{"class":129}," m_A;\n",[123,23821,23822,23824],{"class":125,"line":1534},[123,23823,4429],{"class":133},[123,23825,23826],{"class":129}," m_B;\n",[123,23828,23829,23831],{"class":125,"line":1539},[123,23830,4429],{"class":133},[123,23832,23833],{"class":129}," m_C;\n",[123,23835,23836],{"class":125,"line":2080},[123,23837,6434],{"class":129},[123,23839,23840],{"class":125,"line":2097},[123,23841,232],{"emptyLinePlaceholder":231},[123,23843,23844,23846,23848],{"class":125,"line":2114},[123,23845,1742],{"class":133},[123,23847,4417],{"class":337},[123,23849,8411],{"class":129},[123,23851,23852],{"class":125,"line":2125},[123,23853,186],{"class":129},[123,23855,23856],{"class":125,"line":2130},[123,23857,232],{"emptyLinePlaceholder":231},[123,23859,23860,23862,23864,23866,23868,23870,23872,23874,23876],{"class":125,"line":5033},[123,23861,21859],{"class":129},[123,23863,19],{"class":337},[123,23865,1315],{"class":129},[123,23867,2825],{"class":164},[123,23869,251],{"class":129},[123,23871,2692],{"class":164},[123,23873,251],{"class":129},[123,23875,2686],{"class":164},[123,23877,5161],{"class":129},[123,23879,23880,23882,23885],{"class":125,"line":5041},[123,23881,18294],{"class":129},[123,23883,23884],{"class":337},"PrintPerson",[123,23886,8069],{"class":129},[123,23888,23889],{"class":125,"line":5046},[123,23890,232],{"emptyLinePlaceholder":231},[123,23892,23893],{"class":125,"line":5052},[123,23894,232],{"emptyLinePlaceholder":231},[123,23896,23897,23899,23901,23903],{"class":125,"line":5058},[123,23898,4747],{"class":337},[123,23900,1315],{"class":129},[123,23902,4752],{"class":143},[123,23904,5161],{"class":129},[123,23906,23907],{"class":125,"line":5063},[123,23908,232],{"emptyLinePlaceholder":231},[123,23910,23911,23913,23915],{"class":125,"line":10380},[123,23912,6529],{"class":133},[123,23914,6532],{"class":164},[123,23916,3760],{"class":129},[123,23918,23919],{"class":125,"line":10404},[123,23920,171],{"class":129},[19,23922,23923,23924,23927,23928],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2759,23925,23926],{},"参数名就是定义的对象属性","，",[2759,23929,23930],{},"属性后面的值为有参构造函数的形参",[113,23932,23934],{"className":2608,"code":23933,"language":2610,"meta":118,"style":118},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[120,23935,23936],{"__ignoreMap":118},[123,23937,23938,23940,23942,23944,23947,23949,23952,23954,23957,23959,23962,23964,23967,23969],{"class":125,"line":126},[123,23939,21474],{"class":337},[123,23941,1315],{"class":129},[123,23943,1742],{"class":133},[123,23945,23946],{"class":129}," a.",[123,23948,1742],{"class":133},[123,23950,23951],{"class":129}," b,",[123,23953,1742],{"class":133},[123,23955,23956],{"class":129}," b):",[123,23958,23726],{"class":337},[123,23960,23961],{"class":129},"(a),",[123,23963,23732],{"class":337},[123,23965,23966],{"class":129},"(c),",[123,23968,23738],{"class":337},[123,23970,23971],{"class":129},"(b) {}\n",[2587,23973,23975],{"id":23974},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23977,23978],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23980,17063],{},[113,23982,23984],{"className":2608,"code":23983,"language":2610,"meta":118,"style":118},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[120,23985,23986,23991,23996,24000,24005,24009],{"__ignoreMap":118},[123,23987,23988],{"class":125,"line":126},[123,23989,23990],{"class":129},"A{};\n",[123,23992,23993],{"class":125,"line":140},[123,23994,23995],{"class":129},"B\n",[123,23997,23998],{"class":125,"line":156},[123,23999,186],{"class":129},[123,24001,24002],{"class":125,"line":168},[123,24003,24004],{"class":129},"    A a;\n",[123,24006,24007],{"class":125,"line":268},[123,24008,171],{"class":129},[123,24010,24011],{"class":125,"line":291},[123,24012,24013],{"class":2673},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,24015,24016],{},"案例",[113,24018,24020],{"className":2608,"code":24019,"language":2610,"meta":118,"style":118},"\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",[120,24021,24022,24027,24034,24038,24043,24048,24062,24066,24076,24087,24091,24098,24102,24115,24119,24124,24129,24133,24139,24143,24147,24151,24182,24186,24197,24201,24207,24211,24224,24228,24232,24236,24241,24246,24250,24258,24262,24279,24298,24302,24310,24314,24320],{"__ignoreMap":118},[123,24023,24024],{"class":125,"line":126},[123,24025,24026],{"class":2673},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[123,24028,24029,24031],{"class":125,"line":140},[123,24030,17124],{"class":133},[123,24032,24033],{"class":337}," Phone\n",[123,24035,24036],{"class":125,"line":156},[123,24037,186],{"class":129},[123,24039,24040],{"class":125,"line":168},[123,24041,24042],{"class":129},"public：\n",[123,24044,24045],{"class":125,"line":268},[123,24046,24047],{"class":2673},"    \u002F\u002F 赋值(构造函数)\n",[123,24049,24050,24053,24055,24057,24060],{"class":125,"line":291},[123,24051,24052],{"class":337},"    Phone",[123,24054,1315],{"class":129},[123,24056,17347],{"class":337},[123,24058,24059],{"class":279}," pName",[123,24061,288],{"class":129},[123,24063,24064],{"class":125,"line":300},[123,24065,4474],{"class":129},[123,24067,24068,24071,24073],{"class":125,"line":305},[123,24069,24070],{"class":129},"        m_pName",[123,24072,134],{"class":133},[123,24074,24075],{"class":129},"pName;\n",[123,24077,24078,24080,24082,24085],{"class":125,"line":316},[123,24079,5891],{"class":129},[123,24081,3643],{"class":133},[123,24083,24084],{"class":143},"\"Phone的构造函数调用\"",[123,24086,3760],{"class":129},[123,24088,24089],{"class":125,"line":673},[123,24090,4631],{"class":129},[123,24092,24093,24096],{"class":125,"line":692},[123,24094,24095],{"class":337},"    ~Phone",[123,24097,4420],{"class":129},[123,24099,24100],{"class":125,"line":713},[123,24101,4474],{"class":129},[123,24103,24104,24106,24108,24111,24113],{"class":125,"line":718},[123,24105,5891],{"class":129},[123,24107,3643],{"class":133},[123,24109,24110],{"class":143},"\"Phone析构函数调用\"",[123,24112,3643],{"class":133},[123,24114,3665],{"class":129},[123,24116,24117],{"class":125,"line":1138},[123,24118,4631],{"class":129},[123,24120,24121],{"class":125,"line":1429},[123,24122,24123],{"class":2673},"    \u002F\u002F\n",[123,24125,24126],{"class":125,"line":1439},[123,24127,24128],{"class":129},"    string m_PName;\n",[123,24130,24131],{"class":125,"line":1444},[123,24132,6434],{"class":129},[123,24134,24135,24137],{"class":125,"line":1453},[123,24136,17124],{"class":133},[123,24138,17600],{"class":337},[123,24140,24141],{"class":125,"line":1458},[123,24142,186],{"class":129},[123,24144,24145],{"class":125,"line":1476},[123,24146,17146],{"class":133},[123,24148,24149],{"class":125,"line":1494},[123,24150,19422],{"class":2673},[123,24152,24153,24155,24157,24159,24161,24163,24165,24168,24171,24173,24176,24179],{"class":125,"line":1499},[123,24154,20947],{"class":337},[123,24156,1315],{"class":129},[123,24158,17347],{"class":337},[123,24160,17350],{"class":279},[123,24162,2985],{"class":129},[123,24164,17347],{"class":337},[123,24166,24167],{"class":279}," pname",[123,24169,24170],{"class":129},"):",[123,24172,17440],{"class":337},[123,24174,24175],{"class":129},"(name),m_phone.",[123,24177,24178],{"class":337},"m_PName",[123,24180,24181],{"class":129},"(pname) \n",[123,24183,24184],{"class":125,"line":1517},[123,24185,4474],{"class":129},[123,24187,24188,24190,24192,24195],{"class":125,"line":1534},[123,24189,5891],{"class":129},[123,24191,3643],{"class":133},[123,24193,24194],{"class":143},"\"Person的构造函数调用\"",[123,24196,3760],{"class":129},[123,24198,24199],{"class":125,"line":1539},[123,24200,4631],{"class":129},[123,24202,24203,24205],{"class":125,"line":2080},[123,24204,20980],{"class":337},[123,24206,4420],{"class":129},[123,24208,24209],{"class":125,"line":2097},[123,24210,4474],{"class":129},[123,24212,24213,24215,24217,24220,24222],{"class":125,"line":2114},[123,24214,5891],{"class":129},[123,24216,3643],{"class":133},[123,24218,24219],{"class":143},"\"Person析构函数调用\"",[123,24221,3643],{"class":133},[123,24223,3665],{"class":129},[123,24225,24226],{"class":125,"line":2125},[123,24227,4631],{"class":129},[123,24229,24230],{"class":125,"line":2130},[123,24231,10212],{"class":2673},[123,24233,24234],{"class":125,"line":5033},[123,24235,17322],{"class":129},[123,24237,24238],{"class":125,"line":5041},[123,24239,24240],{"class":2673},"    \u002F\u002F手机\n",[123,24242,24243],{"class":125,"line":5046},[123,24244,24245],{"class":129},"    Phone m_Phone;\n",[123,24247,24248],{"class":125,"line":5052},[123,24249,6434],{"class":129},[123,24251,24252,24254,24256],{"class":125,"line":5058},[123,24253,7797],{"class":133},[123,24255,8021],{"class":337},[123,24257,4420],{"class":129},[123,24259,24260],{"class":125,"line":5063},[123,24261,186],{"class":129},[123,24263,24264,24266,24268,24270,24272,24274,24277],{"class":125,"line":10380},[123,24265,21859],{"class":129},[123,24267,19],{"class":337},[123,24269,1315],{"class":129},[123,24271,10348],{"class":143},[123,24273,2985],{"class":129},[123,24275,24276],{"class":143},"\"安卓\"",[123,24278,5161],{"class":129},[123,24280,24281,24283,24285,24288,24290,24293,24295],{"class":125,"line":10404},[123,24282,4017],{"class":129},[123,24284,3643],{"class":133},[123,24286,24287],{"class":129},"p.Name",[123,24289,3643],{"class":133},[123,24291,24292],{"class":143},"\"拿着：\"",[123,24294,3643],{"class":133},[123,24296,24297],{"class":129},"p.m_phone.m_PName;\n",[123,24299,24300],{"class":125,"line":10409},[123,24301,171],{"class":129},[123,24303,24304,24306,24308],{"class":125,"line":10415},[123,24305,1742],{"class":133},[123,24307,4417],{"class":337},[123,24309,4420],{"class":129},[123,24311,24312],{"class":125,"line":10442},[123,24313,186],{"class":129},[123,24315,24316,24318],{"class":125,"line":10447},[123,24317,8066],{"class":337},[123,24319,8069],{"class":129},[123,24321,24322],{"class":125,"line":10453},[123,24323,171],{"class":129},[19,24325,11457],{},[113,24327,24329],{"className":2608,"code":24328,"language":2610,"meta":118,"style":118},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[120,24330,24331,24336],{"__ignoreMap":118},[123,24332,24333],{"class":125,"line":126},[123,24334,24335],{"class":2673},"    \u002F\u002F不需要写这个：\n",[123,24337,24338],{"class":125,"line":140},[123,24339,24340],{"class":2673},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24342,24343],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[113,24345,24347],{"className":2608,"code":24346,"language":2610,"meta":118,"style":118},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[120,24348,24349],{"__ignoreMap":118},[123,24350,24351,24353,24356,24358,24361,24364],{"class":125,"line":126},[123,24352,21474],{"class":337},[123,24354,24355],{"class":129},"(string name.string pname):",[123,24357,17440],{"class":337},[123,24359,24360],{"class":129},"(name),",[123,24362,24363],{"class":337},"m_phone",[123,24365,24366],{"class":129},"(pname) {}\n",[19,24368,24369,24370,134,24373],{},"采用的是隐式转换法，实际为如下：\n",[120,24371,24372],{},"m_phone(pname)",[120,24374,24375],{},"Phone m_phone=pname",[19,24377,24378,24381],{},[2759,24379,24380],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24383,24384],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[2587,24386,24388],{"id":24387},"_828静态对象","8.2.8静态对象",[19,24390,24391],{},"静态对象在成员对象前static，称为静态对象",[19,24393,24394],{},"静态对象分为两类：",[26,24396,24397],{},[29,24398,24399],{},"静态成员变量",[3606,24401,24402,24405,24408],{},[29,24403,24404],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,24406,24407],{},"②在编译阶段分配内存",[29,24409,24410],{},"③类内声明，类外初始化",[26,24412,24413],{"start":140},[29,24414,24415],{},"静态成员函数",[3606,24417,24418,24421],{},[29,24419,24420],{},"①所有对象共享同一个函数",[29,24422,24423],{},"②静态成员函数只能访问静态成员变量",[24425,24426,24428],"h4",{"id":24427},"_8281静态成员变量","8.2.8.1静态成员变量",[113,24430,24432],{"className":2608,"code":24431,"language":2610,"meta":118,"style":118},"#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",[120,24433,24434,24440,24450,24456,24460,24464,24469,24474,24479,24487,24491,24495,24499,24507,24511,24515,24520,24533,24537,24545,24549,24555],{"__ignoreMap":118},[123,24435,24436,24438],{"class":125,"line":126},[123,24437,4394],{"class":133},[123,24439,4397],{"class":143},[123,24441,24442,24444,24446,24448],{"class":125,"line":140},[123,24443,4402],{"class":133},[123,24445,4405],{"class":133},[123,24447,4408],{"class":337},[123,24449,3760],{"class":129},[123,24451,24452,24454],{"class":125,"line":156},[123,24453,17124],{"class":133},[123,24455,17600],{"class":337},[123,24457,24458],{"class":125,"line":168},[123,24459,186],{"class":129},[123,24461,24462],{"class":125,"line":268},[123,24463,17146],{"class":133},[123,24465,24466],{"class":125,"line":291},[123,24467,24468],{"class":2673},"    \u002F\u002F非静态成员变量\n",[123,24470,24471],{"class":125,"line":300},[123,24472,24473],{"class":2673},"    \u002F\u002F int m_A;\n",[123,24475,24476],{"class":125,"line":305},[123,24477,24478],{"class":2673},"    \u002F\u002F定义静态成员变量\n",[123,24480,24481,24483,24485],{"class":125,"line":316},[123,24482,13452],{"class":133},[123,24484,4826],{"class":133},[123,24486,23819],{"class":129},[123,24488,24489],{"class":125,"line":673},[123,24490,232],{"emptyLinePlaceholder":231},[123,24492,24493],{"class":125,"line":692},[123,24494,232],{"emptyLinePlaceholder":231},[123,24496,24497],{"class":125,"line":713},[123,24498,6434],{"class":129},[123,24500,24501,24503,24505],{"class":125,"line":718},[123,24502,7797],{"class":133},[123,24504,8021],{"class":337},[123,24506,4420],{"class":129},[123,24508,24509],{"class":125,"line":1138},[123,24510,186],{"class":129},[123,24512,24513],{"class":125,"line":1429},[123,24514,17742],{"class":129},[123,24516,24517],{"class":125,"line":1439},[123,24518,24519],{"class":2673},"    \u002F\u002F输出类成员变量这块内存\n",[123,24521,24522,24524,24526,24529,24531],{"class":125,"line":1444},[123,24523,4017],{"class":129},[123,24525,3643],{"class":133},[123,24527,24528],{"class":129},"p.m_A",[123,24530,3643],{"class":133},[123,24532,3665],{"class":129},[123,24534,24535],{"class":125,"line":1453},[123,24536,171],{"class":129},[123,24538,24539,24541,24543],{"class":125,"line":1458},[123,24540,1742],{"class":133},[123,24542,4417],{"class":337},[123,24544,4420],{"class":129},[123,24546,24547],{"class":125,"line":1476},[123,24548,186],{"class":129},[123,24550,24551,24553],{"class":125,"line":1494},[123,24552,8066],{"class":337},[123,24554,4420],{"class":129},[123,24556,24557],{"class":125,"line":1499},[123,24558,171],{"class":129},[19,24560,24561],{},"此时输出是报错的：无法解析外部命令",[19,24563,24564],{},"解决这一问题：必须用到类内声明，类外初始化操作",[113,24566,24568],{"className":2608,"code":24567,"language":2610,"meta":118,"style":118},"#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",[120,24569,24570,24576,24586,24592,24596,24600,24605,24613,24617,24622,24637,24645,24649,24653,24658,24663,24675,24680,24691,24696,24701,24714,24718,24726,24730,24736],{"__ignoreMap":118},[123,24571,24572,24574],{"class":125,"line":126},[123,24573,4394],{"class":133},[123,24575,4397],{"class":143},[123,24577,24578,24580,24582,24584],{"class":125,"line":140},[123,24579,4402],{"class":133},[123,24581,4405],{"class":133},[123,24583,4408],{"class":337},[123,24585,3760],{"class":129},[123,24587,24588,24590],{"class":125,"line":156},[123,24589,17124],{"class":133},[123,24591,17600],{"class":337},[123,24593,24594],{"class":125,"line":168},[123,24595,186],{"class":129},[123,24597,24598],{"class":125,"line":268},[123,24599,17146],{"class":133},[123,24601,24602],{"class":125,"line":291},[123,24603,24604],{"class":2673},"    \u002F\u002F类内声明\n",[123,24606,24607,24609,24611],{"class":125,"line":300},[123,24608,13452],{"class":133},[123,24610,4826],{"class":133},[123,24612,23819],{"class":129},[123,24614,24615],{"class":125,"line":305},[123,24616,6434],{"class":129},[123,24618,24619],{"class":125,"line":316},[123,24620,24621],{"class":2673},"\u002F\u002F类外初始化\n",[123,24623,24624,24626,24628,24631,24633,24635],{"class":125,"line":673},[123,24625,1742],{"class":133},[123,24627,17998],{"class":337},[123,24629,24630],{"class":129},"::m_A",[123,24632,134],{"class":133},[123,24634,2193],{"class":164},[123,24636,3760],{"class":129},[123,24638,24639,24641,24643],{"class":125,"line":692},[123,24640,7797],{"class":133},[123,24642,8021],{"class":337},[123,24644,4420],{"class":129},[123,24646,24647],{"class":125,"line":713},[123,24648,186],{"class":129},[123,24650,24651],{"class":125,"line":718},[123,24652,17742],{"class":129},[123,24654,24655],{"class":125,"line":1138},[123,24656,24657],{"class":2673},"    \u002F\u002F访问变量的原内存空间\n",[123,24659,24660],{"class":125,"line":1429},[123,24661,24662],{"class":2673},"    \u002F\u002F100\n",[123,24664,24665,24667,24669,24671,24673],{"class":125,"line":1439},[123,24666,4017],{"class":129},[123,24668,3643],{"class":133},[123,24670,24528],{"class":129},[123,24672,3643],{"class":133},[123,24674,3665],{"class":129},[123,24676,24677],{"class":125,"line":1444},[123,24678,24679],{"class":129},"    Person p2;\n",[123,24681,24682,24685,24687,24689],{"class":125,"line":1453},[123,24683,24684],{"class":129},"    p2.m_A",[123,24686,134],{"class":133},[123,24688,1045],{"class":164},[123,24690,3760],{"class":129},[123,24692,24693],{"class":125,"line":1458},[123,24694,24695],{"class":2673},"    \u002F\u002F继续访问这片空间\n",[123,24697,24698],{"class":125,"line":1476},[123,24699,24700],{"class":2673},"    \u002F\u002F200\n",[123,24702,24703,24705,24707,24710,24712],{"class":125,"line":1494},[123,24704,4017],{"class":129},[123,24706,3643],{"class":133},[123,24708,24709],{"class":129},"p2.m_A",[123,24711,3643],{"class":133},[123,24713,3665],{"class":129},[123,24715,24716],{"class":125,"line":1499},[123,24717,171],{"class":129},[123,24719,24720,24722,24724],{"class":125,"line":1517},[123,24721,1742],{"class":133},[123,24723,4417],{"class":337},[123,24725,4420],{"class":129},[123,24727,24728],{"class":125,"line":1534},[123,24729,186],{"class":129},[123,24731,24732,24734],{"class":125,"line":1539},[123,24733,8066],{"class":337},[123,24735,8069],{"class":129},[123,24737,24738],{"class":125,"line":2080},[123,24739,171],{"class":129},[19,24741,24742],{},[2759,24743,24744],{},"静态变量的访问",[113,24746,24748],{"className":2608,"code":24747,"language":2610,"meta":118,"style":118},"#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",[120,24749,24750,24756,24766,24772,24776,24780,24784,24792,24796,24801,24809,24813,24817,24831,24846,24854,24858,24863,24868,24873,24878,24890,24895,24900,24914,24931,24935,24943,24947,24953],{"__ignoreMap":118},[123,24751,24752,24754],{"class":125,"line":126},[123,24753,4394],{"class":133},[123,24755,4397],{"class":143},[123,24757,24758,24760,24762,24764],{"class":125,"line":140},[123,24759,4402],{"class":133},[123,24761,4405],{"class":133},[123,24763,4408],{"class":337},[123,24765,3760],{"class":129},[123,24767,24768,24770],{"class":125,"line":156},[123,24769,17124],{"class":133},[123,24771,17600],{"class":337},[123,24773,24774],{"class":125,"line":168},[123,24775,186],{"class":129},[123,24777,24778],{"class":125,"line":268},[123,24779,17146],{"class":133},[123,24781,24782],{"class":125,"line":291},[123,24783,24604],{"class":2673},[123,24785,24786,24788,24790],{"class":125,"line":300},[123,24787,13452],{"class":133},[123,24789,4826],{"class":133},[123,24791,23819],{"class":129},[123,24793,24794],{"class":125,"line":305},[123,24795,17651],{"class":133},[123,24797,24798],{"class":125,"line":316},[123,24799,24800],{"class":2673},"    \u002F\u002F静态成员变量也是有访问权限的\n",[123,24802,24803,24805,24807],{"class":125,"line":673},[123,24804,13452],{"class":133},[123,24806,4826],{"class":133},[123,24808,23826],{"class":129},[123,24810,24811],{"class":125,"line":692},[123,24812,6434],{"class":129},[123,24814,24815],{"class":125,"line":713},[123,24816,24621],{"class":2673},[123,24818,24819,24821,24823,24825,24827,24829],{"class":125,"line":718},[123,24820,1742],{"class":133},[123,24822,17998],{"class":337},[123,24824,24630],{"class":129},[123,24826,134],{"class":133},[123,24828,2193],{"class":164},[123,24830,3760],{"class":129},[123,24832,24833,24835,24837,24840,24842,24844],{"class":125,"line":1138},[123,24834,1742],{"class":133},[123,24836,17998],{"class":337},[123,24838,24839],{"class":129},"::m_B",[123,24841,134],{"class":133},[123,24843,3302],{"class":164},[123,24845,3760],{"class":129},[123,24847,24848,24850,24852],{"class":125,"line":1429},[123,24849,7797],{"class":133},[123,24851,8090],{"class":337},[123,24853,4420],{"class":129},[123,24855,24856],{"class":125,"line":1439},[123,24857,186],{"class":129},[123,24859,24860],{"class":125,"line":1444},[123,24861,24862],{"class":2673},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[123,24864,24865],{"class":125,"line":1453},[123,24866,24867],{"class":2673},"    \u002F\u002F静态成员变量有两种访问方式：\n",[123,24869,24870],{"class":125,"line":1458},[123,24871,24872],{"class":2673},"    \u002F\u002F1.通过对象进行访问\n",[123,24874,24875],{"class":125,"line":1476},[123,24876,24877],{"class":129},"    Person p;  \n",[123,24879,24880,24882,24884,24886,24888],{"class":125,"line":1494},[123,24881,4017],{"class":129},[123,24883,3643],{"class":133},[123,24885,24528],{"class":129},[123,24887,3643],{"class":133},[123,24889,3665],{"class":129},[123,24891,24892],{"class":125,"line":1499},[123,24893,24894],{"class":2673},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[123,24896,24897],{"class":125,"line":1517},[123,24898,24899],{"class":2673},"    \u002F\u002F2.通过类名进行访问\n",[123,24901,24902,24904,24906,24908,24910,24912],{"class":125,"line":1534},[123,24903,4017],{"class":129},[123,24905,3643],{"class":133},[123,24907,21474],{"class":337},[123,24909,24630],{"class":129},[123,24911,3643],{"class":133},[123,24913,3665],{"class":129},[123,24915,24916,24918,24920,24922,24924,24926,24928],{"class":125,"line":1539},[123,24917,4017],{"class":129},[123,24919,3643],{"class":133},[123,24921,21474],{"class":337},[123,24923,24839],{"class":129},[123,24925,3643],{"class":133},[123,24927,3708],{"class":129},[123,24929,24930],{"class":2673}," \u002F\u002F没有访问权限，报错\n",[123,24932,24933],{"class":125,"line":2080},[123,24934,171],{"class":129},[123,24936,24937,24939,24941],{"class":125,"line":2097},[123,24938,1742],{"class":133},[123,24940,4417],{"class":337},[123,24942,4420],{"class":129},[123,24944,24945],{"class":125,"line":2114},[123,24946,186],{"class":129},[123,24948,24949,24951],{"class":125,"line":2125},[123,24950,8135],{"class":337},[123,24952,8069],{"class":129},[123,24954,24955],{"class":125,"line":2130},[123,24956,171],{"class":129},[24425,24958,24960],{"id":24959},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24962,24963],{},"1.静态成员函数定义与访问",[113,24965,24967],{"className":2608,"code":24966,"language":2610,"meta":118,"style":118},"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",[120,24968,24969,24975,24979,24983,24988,24999,25003,25017,25021,25025,25033,25037,25042,25047,25051,25059,25064,25074],{"__ignoreMap":118},[123,24970,24971,24973],{"class":125,"line":126},[123,24972,17124],{"class":133},[123,24974,17600],{"class":337},[123,24976,24977],{"class":125,"line":140},[123,24978,186],{"class":129},[123,24980,24981],{"class":125,"line":156},[123,24982,17146],{"class":133},[123,24984,24985],{"class":125,"line":168},[123,24986,24987],{"class":2673},"    \u002F\u002F在公共权限下定义静态成员函数\n",[123,24989,24990,24992,24995,24997],{"class":125,"line":268},[123,24991,13452],{"class":133},[123,24993,24994],{"class":133}," void",[123,24996,13817],{"class":337},[123,24998,4420],{"class":129},[123,25000,25001],{"class":125,"line":291},[123,25002,4474],{"class":129},[123,25004,25005,25008,25010,25013,25015],{"class":125,"line":300},[123,25006,25007],{"class":129},"        coout",[123,25009,3643],{"class":133},[123,25011,25012],{"class":143},"\"静态成员函数的调用\"",[123,25014,3643],{"class":133},[123,25016,3665],{"class":129},[123,25018,25019],{"class":125,"line":305},[123,25020,4631],{"class":129},[123,25022,25023],{"class":125,"line":316},[123,25024,6434],{"class":129},[123,25026,25027,25029,25031],{"class":125,"line":673},[123,25028,7797],{"class":133},[123,25030,8021],{"class":337},[123,25032,4420],{"class":129},[123,25034,25035],{"class":125,"line":692},[123,25036,186],{"class":129},[123,25038,25039],{"class":125,"line":713},[123,25040,25041],{"class":2673},"    \u002F\u002F静态成员函数的调用方式:\n",[123,25043,25044],{"class":125,"line":718},[123,25045,25046],{"class":2673},"    \u002F\u002F1.通过对象访问\n",[123,25048,25049],{"class":125,"line":1138},[123,25050,17742],{"class":129},[123,25052,25053,25055,25057],{"class":125,"line":1429},[123,25054,18294],{"class":129},[123,25056,13983],{"class":337},[123,25058,8069],{"class":129},[123,25060,25061],{"class":125,"line":1439},[123,25062,25063],{"class":2673},"    \u002F\u002F2.通过类名访问\n",[123,25065,25066,25068,25070,25072],{"class":125,"line":1444},[123,25067,20947],{"class":337},[123,25069,20160],{"class":129},[123,25071,13983],{"class":337},[123,25073,8069],{"class":129},[123,25075,25076],{"class":125,"line":1453},[123,25077,171],{"class":129},[26,25079,25080],{"start":140},[29,25081,25082],{},"静态成员函数只能访问静态成员变量",[113,25084,25086],{"className":2608,"code":25085,"language":2610,"meta":118,"style":118},"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",[120,25087,25088,25094,25098,25102,25106,25116,25120,25134,25139,25151,25155,25166,25176,25180,25184,25188,25198,25202,25215,25219,25223,25227,25231,25245,25253,25257,25261,25265,25269,25277,25281,25291,25296,25300,25308,25312,25318],{"__ignoreMap":118},[123,25089,25090,25092],{"class":125,"line":126},[123,25091,17124],{"class":133},[123,25093,17600],{"class":337},[123,25095,25096],{"class":125,"line":140},[123,25097,186],{"class":129},[123,25099,25100],{"class":125,"line":156},[123,25101,17146],{"class":133},[123,25103,25104],{"class":125,"line":168},[123,25105,24987],{"class":2673},[123,25107,25108,25110,25112,25114],{"class":125,"line":268},[123,25109,13452],{"class":133},[123,25111,24994],{"class":133},[123,25113,13817],{"class":337},[123,25115,4420],{"class":129},[123,25117,25118],{"class":125,"line":291},[123,25119,4474],{"class":129},[123,25121,25122,25125,25127,25129,25131],{"class":125,"line":300},[123,25123,25124],{"class":129},"        m_A",[123,25126,134],{"class":133},[123,25128,259],{"class":164},[123,25130,2670],{"class":129},[123,25132,25133],{"class":2673}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[123,25135,25136],{"class":125,"line":305},[123,25137,25138],{"class":2673},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[123,25140,25141,25143,25145,25147,25149],{"class":125,"line":316},[123,25142,25007],{"class":129},[123,25144,3643],{"class":133},[123,25146,25012],{"class":143},[123,25148,3643],{"class":133},[123,25150,3665],{"class":129},[123,25152,25153],{"class":125,"line":673},[123,25154,4631],{"class":129},[123,25156,25157,25159,25161,25163],{"class":125,"line":692},[123,25158,13452],{"class":133},[123,25160,4826],{"class":133},[123,25162,17877],{"class":129},[123,25164,25165],{"class":2673}," \u002F\u002F静态成员变量\n",[123,25167,25168,25170,25173],{"class":125,"line":713},[123,25169,4429],{"class":133},[123,25171,25172],{"class":129}," m_B;",[123,25174,25175],{"class":2673}," \u002F\u002F非静态成员变量\n",[123,25177,25178],{"class":125,"line":718},[123,25179,232],{"emptyLinePlaceholder":231},[123,25181,25182],{"class":125,"line":1138},[123,25183,17651],{"class":133},[123,25185,25186],{"class":125,"line":1429},[123,25187,24800],{"class":2673},[123,25189,25190,25192,25194,25196],{"class":125,"line":1439},[123,25191,13452],{"class":133},[123,25193,24994],{"class":133},[123,25195,16049],{"class":337},[123,25197,4420],{"class":129},[123,25199,25200],{"class":125,"line":1444},[123,25201,4474],{"class":129},[123,25203,25204,25206,25208,25211,25213],{"class":125,"line":1453},[123,25205,5891],{"class":129},[123,25207,3643],{"class":133},[123,25209,25210],{"class":143},"\"这是私有权限下的静态函数调用\"",[123,25212,3643],{"class":133},[123,25214,3665],{"class":129},[123,25216,25217],{"class":125,"line":1458},[123,25218,4631],{"class":129},[123,25220,25221],{"class":125,"line":1476},[123,25222,232],{"emptyLinePlaceholder":231},[123,25224,25225],{"class":125,"line":1494},[123,25226,232],{"emptyLinePlaceholder":231},[123,25228,25229],{"class":125,"line":1499},[123,25230,6434],{"class":129},[123,25232,25233,25235,25237,25239,25241,25243],{"class":125,"line":1517},[123,25234,1742],{"class":133},[123,25236,17998],{"class":337},[123,25238,24630],{"class":129},[123,25240,134],{"class":133},[123,25242,2799],{"class":164},[123,25244,3760],{"class":129},[123,25246,25247,25249,25251],{"class":125,"line":1534},[123,25248,7797],{"class":133},[123,25250,8021],{"class":337},[123,25252,4420],{"class":129},[123,25254,25255],{"class":125,"line":1539},[123,25256,186],{"class":129},[123,25258,25259],{"class":125,"line":2080},[123,25260,25041],{"class":2673},[123,25262,25263],{"class":125,"line":2097},[123,25264,25046],{"class":2673},[123,25266,25267],{"class":125,"line":2114},[123,25268,17742],{"class":129},[123,25270,25271,25273,25275],{"class":125,"line":2125},[123,25272,18294],{"class":129},[123,25274,13983],{"class":337},[123,25276,8069],{"class":129},[123,25278,25279],{"class":125,"line":2130},[123,25280,25063],{"class":2673},[123,25282,25283,25285,25287,25289],{"class":125,"line":5033},[123,25284,20947],{"class":337},[123,25286,20160],{"class":129},[123,25288,13983],{"class":337},[123,25290,8069],{"class":129},[123,25292,25293],{"class":125,"line":5041},[123,25294,25295],{"class":2673},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[123,25297,25298],{"class":125,"line":5046},[123,25299,171],{"class":129},[123,25301,25302,25304,25306],{"class":125,"line":5052},[123,25303,1742],{"class":133},[123,25305,4417],{"class":337},[123,25307,4420],{"class":129},[123,25309,25310],{"class":125,"line":5058},[123,25311,186],{"class":129},[123,25313,25314,25316],{"class":125,"line":5063},[123,25315,8066],{"class":337},[123,25317,8069],{"class":129},[123,25319,25320],{"class":125,"line":10380},[123,25321,171],{"class":129},[2587,25323,25325],{"id":25324},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24425,25327,25329],{"id":25328},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25331,25332],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25334,25335],{},"只有非静态成员变量才属于类的对象上",[25337,25338,25340],"h5",{"id":25339},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[113,25342,25344],{"className":2608,"code":25343,"language":2610,"meta":118,"style":118},"#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",[120,25345,25346,25353,25363,25369,25373,25377,25381,25389,25393,25397,25420,25424,25432,25436,25442],{"__ignoreMap":118},[123,25347,25348,25350],{"class":125,"line":126},[123,25349,4394],{"class":133},[123,25351,25352],{"class":143},"\u003Ciostraem>\n",[123,25354,25355,25357,25359,25361],{"class":125,"line":140},[123,25356,4402],{"class":133},[123,25358,4405],{"class":133},[123,25360,4408],{"class":337},[123,25362,3760],{"class":129},[123,25364,25365,25367],{"class":125,"line":156},[123,25366,17124],{"class":133},[123,25368,17600],{"class":337},[123,25370,25371],{"class":125,"line":168},[123,25372,186],{"class":129},[123,25374,25375],{"class":125,"line":268},[123,25376,232],{"emptyLinePlaceholder":231},[123,25378,25379],{"class":125,"line":291},[123,25380,6434],{"class":129},[123,25382,25383,25385,25387],{"class":125,"line":300},[123,25384,7797],{"class":133},[123,25386,8021],{"class":337},[123,25388,4420],{"class":129},[123,25390,25391],{"class":125,"line":305},[123,25392,186],{"class":129},[123,25394,25395],{"class":125,"line":316},[123,25396,17742],{"class":129},[123,25398,25399,25401,25403,25406,25408,25411,25413,25415,25417],{"class":125,"line":673},[123,25400,4017],{"class":129},[123,25402,3643],{"class":133},[123,25404,25405],{"class":143},"\"size of p=\"",[123,25407,3643],{"class":133},[123,25409,25410],{"class":337},"sizeoif",[123,25412,8972],{"class":129},[123,25414,3643],{"class":133},[123,25416,3708],{"class":129},[123,25418,25419],{"class":2673}," \u002F\u002F查看这个空类的占用的内存空间\n",[123,25421,25422],{"class":125,"line":692},[123,25423,171],{"class":129},[123,25425,25426,25428,25430],{"class":125,"line":713},[123,25427,1742],{"class":133},[123,25429,4417],{"class":337},[123,25431,4420],{"class":129},[123,25433,25434],{"class":125,"line":718},[123,25435,186],{"class":129},[123,25437,25438,25440],{"class":125,"line":1138},[123,25439,8066],{"class":337},[123,25441,8069],{"class":129},[123,25443,25444],{"class":125,"line":1429},[123,25445,171],{"class":129},[19,25447,25448],{},"输出结果为：size of p=1",[19,25450,25451],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25453,25454],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25337,25456,25458],{"id":25457},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[113,25460,25462],{"className":2608,"code":25461,"language":2610,"meta":118,"style":118},"#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",[120,25463,25464,25470,25480,25488,25492,25501,25505,25513,25517,25521,25540,25544,25548,25556,25560,25566],{"__ignoreMap":118},[123,25465,25466,25468],{"class":125,"line":126},[123,25467,4394],{"class":133},[123,25469,4397],{"class":143},[123,25471,25472,25474,25476,25478],{"class":125,"line":140},[123,25473,4402],{"class":133},[123,25475,4405],{"class":133},[123,25477,4408],{"class":337},[123,25479,3760],{"class":129},[123,25481,25482,25484,25486],{"class":125,"line":156},[123,25483,17124],{"class":133},[123,25485,17998],{"class":337},[123,25487,5116],{"class":129},[123,25489,25490],{"class":125,"line":168},[123,25491,186],{"class":129},[123,25493,25494,25496,25498],{"class":125,"line":268},[123,25495,4429],{"class":133},[123,25497,17877],{"class":129},[123,25499,25500],{"class":2673},"\u002F\u002F非静态成员变量\n",[123,25502,25503],{"class":125,"line":291},[123,25504,6434],{"class":129},[123,25506,25507,25509,25511],{"class":125,"line":300},[123,25508,7797],{"class":133},[123,25510,8021],{"class":337},[123,25512,4420],{"class":129},[123,25514,25515],{"class":125,"line":305},[123,25516,186],{"class":129},[123,25518,25519],{"class":125,"line":316},[123,25520,17742],{"class":129},[123,25522,25523,25525,25527,25529,25531,25533,25535,25537],{"class":125,"line":673},[123,25524,4017],{"class":129},[123,25526,3643],{"class":133},[123,25528,25405],{"class":143},[123,25530,3839],{"class":133},[123,25532,8972],{"class":129},[123,25534,3643],{"class":133},[123,25536,3708],{"class":129},[123,25538,25539],{"class":2673}," \u002F\u002F查看不是空对象时占用多少内存\n",[123,25541,25542],{"class":125,"line":692},[123,25543,232],{"emptyLinePlaceholder":231},[123,25545,25546],{"class":125,"line":713},[123,25547,171],{"class":129},[123,25549,25550,25552,25554],{"class":125,"line":718},[123,25551,1742],{"class":133},[123,25553,4417],{"class":337},[123,25555,4420],{"class":129},[123,25557,25558],{"class":125,"line":1138},[123,25559,186],{"class":129},[123,25561,25562,25564],{"class":125,"line":1429},[123,25563,8066],{"class":337},[123,25565,8069],{"class":129},[123,25567,25568],{"class":125,"line":1439},[123,25569,171],{"class":129},[19,25571,25572],{},"输出结果：size of p=4",[19,25574,25575],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,25577,25578],{},[29,25579,25580],{},"如果加上非静态成员变量，Person类修改如下",[113,25582,25584],{"className":2608,"code":25583,"language":2610,"meta":118,"style":118},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[120,25585,25586,25592,25596,25602,25610,25614,25619],{"__ignoreMap":118},[123,25587,25588,25590],{"class":125,"line":126},[123,25589,17124],{"class":133},[123,25591,17600],{"class":337},[123,25593,25594],{"class":125,"line":140},[123,25595,186],{"class":129},[123,25597,25598,25600],{"class":125,"line":156},[123,25599,4429],{"class":133},[123,25601,23819],{"class":129},[123,25603,25604,25606,25608],{"class":125,"line":168},[123,25605,13452],{"class":133},[123,25607,4826],{"class":133},[123,25609,23826],{"class":129},[123,25611,25612],{"class":125,"line":268},[123,25613,6434],{"class":129},[123,25615,25616],{"class":125,"line":291},[123,25617,25618],{"class":2673},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[123,25620,25621,25623,25625,25627,25629,25631],{"class":125,"line":300},[123,25622,1742],{"class":133},[123,25624,17998],{"class":337},[123,25626,24839],{"class":129},[123,25628,134],{"class":133},[123,25630,2799],{"class":164},[123,25632,3760],{"class":129},[19,25634,25635],{},"输出结果：4",[19,25637,25638],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,25640,25641],{"start":140},[29,25642,25643],{},"加上非静态成员函数",[113,25645,25647],{"className":2608,"code":25646,"language":2610,"meta":118,"style":118},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[120,25648,25649,25656,25660,25666,25674,25678,25682,25686],{"__ignoreMap":118},[123,25650,25651,25653],{"class":125,"line":126},[123,25652,17124],{"class":133},[123,25654,25655],{"class":337},"  Person\n",[123,25657,25658],{"class":125,"line":140},[123,25659,186],{"class":129},[123,25661,25662,25664],{"class":125,"line":156},[123,25663,4429],{"class":133},[123,25665,23819],{"class":129},[123,25667,25668,25670,25672],{"class":125,"line":168},[123,25669,17339],{"class":133},[123,25671,13817],{"class":337},[123,25673,4420],{"class":129},[123,25675,25676],{"class":125,"line":268},[123,25677,4474],{"class":129},[123,25679,25680],{"class":125,"line":291},[123,25681,232],{"emptyLinePlaceholder":231},[123,25683,25684],{"class":125,"line":300},[123,25685,4631],{"class":129},[123,25687,25688],{"class":125,"line":305},[123,25689,6434],{"class":129},[19,25691,25692],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25694,25695],{"start":156},[29,25696,25697],{},"加上静态成员函数",[113,25699,25701],{"className":2608,"code":25700,"language":2610,"meta":118,"style":118},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[120,25702,25703,25709,25713,25719,25727,25731,25735,25739,25750,25754,25758,25762],{"__ignoreMap":118},[123,25704,25705,25707],{"class":125,"line":126},[123,25706,17124],{"class":133},[123,25708,25655],{"class":337},[123,25710,25711],{"class":125,"line":140},[123,25712,186],{"class":129},[123,25714,25715,25717],{"class":125,"line":156},[123,25716,4429],{"class":133},[123,25718,23819],{"class":129},[123,25720,25721,25723,25725],{"class":125,"line":168},[123,25722,17339],{"class":133},[123,25724,13817],{"class":337},[123,25726,4420],{"class":129},[123,25728,25729],{"class":125,"line":268},[123,25730,4474],{"class":129},[123,25732,25733],{"class":125,"line":291},[123,25734,232],{"emptyLinePlaceholder":231},[123,25736,25737],{"class":125,"line":300},[123,25738,4631],{"class":129},[123,25740,25741,25743,25745,25748],{"class":125,"line":305},[123,25742,13452],{"class":133},[123,25744,24994],{"class":133},[123,25746,25747],{"class":337}," func1",[123,25749,4420],{"class":129},[123,25751,25752],{"class":125,"line":316},[123,25753,4474],{"class":129},[123,25755,25756],{"class":125,"line":673},[123,25757,232],{"emptyLinePlaceholder":231},[123,25759,25760],{"class":125,"line":692},[123,25761,4631],{"class":129},[123,25763,25764],{"class":125,"line":713},[123,25765,6434],{"class":129},[19,25767,25635],{},[19,25769,25770],{},"解释：静态成员函数也不属于类上",[2526,25772,10106],{},{"title":118,"searchDepth":140,"depth":140,"links":25774},[25775,25781],{"id":17075,"depth":140,"text":17076,"children":25776},[25777,25778,25779,25780],{"id":17079,"depth":156,"text":17080},{"id":17803,"depth":156,"text":17804},{"id":17975,"depth":156,"text":17976},{"id":18433,"depth":156,"text":18434},{"id":20805,"depth":140,"text":20806,"children":25782},[25783,25784,25785,25786,25787,25788,25789,25790,25791],{"id":20817,"depth":156,"text":20818},{"id":21110,"depth":156,"text":21111},{"id":21601,"depth":156,"text":21602},{"id":22698,"depth":156,"text":22699},{"id":23121,"depth":156,"text":23122},{"id":23599,"depth":156,"text":23600},{"id":23974,"depth":156,"text":23975},{"id":24387,"depth":156,"text":24388},{"id":25324,"depth":156,"text":25325},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17040,"description":25792},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25799,"title":2610,"body":25800,"description":2544,"extension":2545,"meta":25804,"navigation":231,"path":25806,"seo":25807,"stem":25808,"__hash__":25809},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25801,"toc":25802},[],{"title":118,"searchDepth":140,"depth":140,"links":25803},[],{"category":25805},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2610,"description":2544},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25811,"title":25812,"body":25813,"description":118,"extension":2545,"meta":26399,"navigation":231,"path":26400,"seo":26401,"stem":26402,"__hash__":26403},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25814,"toc":26381},[25815,25818,25822,25825,25828,25831,25849,25854,25857,25860,25863,25866,25871,25874,25879,25882,25885,25889,25892,25895,25901,25904,25922,25926,25930,25933,25938,25941,25945,25948,25961,25964,25968,25971,25974,25977,26002,26005,26014,26025,26040,26072,26076,26083,26091,26095,26098,26101,26106,26110,26113,26116,26121,26124,26128,26131,26134,26139,26142,26146,26151,26155,26221,26225,26228,26231,26234,26237,26240,26246,26263,26266,26280,26289,26293,26296,26299,26304,26307,26312,26317,26320,26323,26328,26333,26336,26341,26346,26349,26354,26359,26362,26365,26370,26373,26378],[10,25816,25812],{"id":25817},"_1强化学习基本认识",[14,25819,25821],{"id":25820},"_11什么是强化学习","1.1.什么是强化学习",[19,25823,25824],{},"强化学习有两部分组成：智能体和环境；",[19,25826,25827],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25829,25830],{},"强化学习与监督学习的区别:",[26,25832,25833,25836,25839,25842],{},[29,25834,25835],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25837,25838],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25840,25841],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,25843,25844,25845,25848],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2759,25846,25847],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25850,25851],{},[3929,25852],{"alt":118,"src":25853},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25855,25856],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25858,25859],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25861,25862],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25864,25865],{},"获取奖励",[19,25867,25868],{},[3929,25869],{"alt":118,"src":25870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25872,25873],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25875,25876],{},[3929,25877],{"alt":118,"src":25878},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25880,25881],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25883,25884],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25886,25888],{"id":25887},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25890,25891],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25893,25894],{},"具身智能中的应用",[19,25896,25897,25900],{},[2759,25898,25899],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25902,25903],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25905,25906,25907,25910,25911,25914,25915,25918,25919],{},"机器人是",[2759,25908,25909],{},"躯体","，深度学习是",[2759,25912,25913],{},"神经元****网络","，VLA是",[2759,25916,25917],{},"通用的行为逻辑","，而强化学习是",[2759,25920,25921],{},"教练",[14,25923,25925],{"id":25924},"_13序列决策","1.3.序列决策",[2587,25927,25929],{"id":25928},"_131智能体与环境","1.3.1.智能体与环境",[19,25931,25932],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25934,25935],{},[3929,25936],{"alt":118,"src":25937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25939,25940],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[2587,25942,25944],{"id":25943},"_132奖励","1.3.2.奖励",[19,25946,25947],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25949,25950,25951,25960],{},"取某个策略的表现如何。强化学习的目的就是",[2759,25952,25953,25954,25959],{},"最大化",[2759,25955,25956],{},[2759,25957,25958],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25962,25963],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[2587,25965,25967],{"id":25966},"_133序列决策","1.3.3.序列决策",[19,25969,25970],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25972,25973],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25975,25976],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25978,25979,25983,25984,25986,25987,25989,25990,25992,25993,16225,25996,16225,25999],{},[25980,25981,25982],"em",{},"Ht"," = ",[25980,25985,3199],{},"1*, a",[25980,25988,2825],{},", r",[25980,25991,2825],{},", . . . ,* ",[25980,25994,25995],{},"ot",[25980,25997,25998],{},", at ,",[25980,26000,26001],{},"rt",[19,26003,26004],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,26006,26007,25983,26010,4116,26012,3035],{},[25980,26008,26009],{},"st",[25980,26011,2667],{},[25980,26013,25982],{},[19,26015,26016,26017,26020,26021,26024],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2759,26018,26019],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2759,26022,26023],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,26026,26027,26028,26031,26032,26035,26036,26039],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2759,26029,26030],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2759,26033,26034],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25980,26037,26038],{},"S, A, T, R, Ω, O, γ",")。",[19,26041,26042,26043,26045,26046,26048,26049,1315,26051,26054,26055,26057,26058,1315,26061,26064,26065,26067,26068,26071],{},"其中 ",[25980,26044,3291],{}," 表示状态空间，为隐变量，",[25980,26047,2840],{}," 为动作空间，",[25980,26050,3316],{},[25980,26052,26053],{},"s ′ |s, a",") 为状态转移概率，",[25980,26056,3266],{}," 为奖励函数，",[25980,26059,26060],{},"Ω",[25980,26062,26063],{},"o|s, a",") 为观测概率，",[25980,26066,3193],{}," 为观测空间，",[25980,26069,26070],{},"γ"," 为折扣因子。",[14,26073,26075],{"id":26074},"_14动作空间","1.4.动作空间",[19,26077,26078,26079,26082],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2759,26080,26081],{},"动作空间"," ，动作空间分为:",[26,26084,26085,26088],{},[29,26086,26087],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,26089,26090],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26092,26094],{"id":26093},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,26096,26097],{},"由策略、价值函数、模型三部分组成",[19,26099,26100],{},"这三者组成马尔可夫决策过程",[19,26102,26103],{},[3929,26104],{"alt":118,"src":26105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[2587,26107,26109],{"id":26108},"_151策略","1.5.1.策略",[19,26111,26112],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,26114,26115],{},"策略可分为两种：",[19,26117,26118],{},[3929,26119],{"alt":118,"src":26120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,26122,26123],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[2587,26125,26127],{"id":26126},"_152价值函数","1.5.2.价值函数",[19,26129,26130],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,26132,26133],{},"价值函数中有一个折扣因子，类似于存款利息",[19,26135,26136],{},[3929,26137],{"alt":118,"src":26138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,26140,26141],{},"进入某个状态采取的最优动作可以通过Q函数得到",[2587,26143,26145],{"id":26144},"_153模型","1.5.3.模型",[19,26147,26148],{},[3929,26149],{"alt":118,"src":26150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26152,26154],{"id":26153},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[48,26156,26157,26167],{},[51,26158,26159],{},[54,26160,26161,26165],{},[57,26162,26164],{"align":26163},"left","类型",[57,26166,62],{"align":26163},[64,26168,26169,26179,26189,26199,26211],{},[54,26170,26171,26176],{},[69,26172,26173],{"align":26163},[2759,26174,26175],{},"基于价值的智能体",[69,26177,26178],{"align":26163},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[54,26180,26181,26186],{},[69,26182,26183],{"align":26163},[2759,26184,26185],{},"基于策略的智能体",[69,26187,26188],{"align":26163},"直接学习策略，没有学习价值函数",[54,26190,26191,26196],{},[69,26192,26193],{"align":26163},[2759,26194,26195],{},"演员-评论员智能体",[69,26197,26198],{"align":26163},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[54,26200,26201,26206],{},[69,26202,26203],{"align":26163},[2759,26204,26205],{},"有模型强化学习智能体",[69,26207,26208],{"align":26163},[3929,26209],{"alt":118,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[54,26212,26213,26218],{},[69,26214,26215],{"align":26163},[2759,26216,26217],{},"免模型强化学习智能体",[69,26219,26220],{"align":26163},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26222,26224],{"id":26223},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26226,26227],{},"学习和规划是序列决策的两个基本问题",[19,26229,26230],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26232,26233],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26235,26236],{},"强化学习用到的库：Gym",[19,26238,26239],{},"Gym可以检验强化学习算法的优劣",[19,26241,26242,26245],{},[2759,26243,26244],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[113,26247,26249],{"className":328,"code":26248,"language":330,"meta":118,"style":118},"pip install gym==0.25.2\n",[120,26250,26251],{"__ignoreMap":118},[123,26252,26253,26255,26257,26260],{"class":125,"line":126},[123,26254,338],{"class":337},[123,26256,341],{"class":143},[123,26258,26259],{"class":143}," gym==",[123,26261,26262],{"class":164},"0.25.2\n",[19,26264,26265],{},"显示图形界面需要",[113,26267,26269],{"className":328,"code":26268,"language":330,"meta":118,"style":118},"pip install pygame\n",[120,26270,26271],{"__ignoreMap":118},[123,26272,26273,26275,26277],{"class":125,"line":126},[123,26274,338],{"class":337},[123,26276,341],{"class":143},[123,26278,26279],{"class":143}," pygame\n",[19,26281,26282,26283],{},"有关Gym库的相关文档介绍：",[2846,26284,26288],{"href":26285,"rel":26286},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26287],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26290,26292],{"id":26291},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26294,26295],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26297,26298],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26300,26301],{},[3929,26302],{"alt":118,"src":26303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26305,26306],{},"折扣率需要自己来设定",[19,26308,26309],{},[3929,26310],{"alt":118,"src":26311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,26313,26314],{},[29,26315,26316],{},"状态转移函数：",[19,26318,26319],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26321,26322],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26324,26325],{},[3929,26326],{"alt":118,"src":26327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,26329,26330],{"start":140},[29,26331,26332],{},"动作价值函数：",[19,26334,26335],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26337,26338],{},[3929,26339],{"alt":118,"src":26340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,26342,26343],{"start":156},[29,26344,26345],{},"最优动作价值函数：",[19,26347,26348],{},"这个函数是对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,26350,26351],{},[3929,26352],{"alt":118,"src":26353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,26355,26356],{"start":168},[29,26357,26358],{},"状态价值函数:",[19,26360,26361],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26363,26364],{},"它衡量的是“一个具体动作”的长期价值",[19,26366,26367],{},[3929,26368],{"alt":118,"src":26369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26371,26372],{},"几个价值函数之间的比较：",[19,26374,26375],{},[3929,26376],{"alt":118,"src":26377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2526,26379,26380],{},"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":118,"searchDepth":140,"depth":140,"links":26382},[26383,26384,26385,26390,26391,26396,26397,26398],{"id":25820,"depth":140,"text":25821},{"id":25887,"depth":140,"text":25888},{"id":25924,"depth":140,"text":25925,"children":26386},[26387,26388,26389],{"id":25928,"depth":156,"text":25929},{"id":25943,"depth":156,"text":25944},{"id":25966,"depth":156,"text":25967},{"id":26074,"depth":140,"text":26075},{"id":26093,"depth":140,"text":26094,"children":26392},[26393,26394,26395],{"id":26108,"depth":156,"text":26109},{"id":26126,"depth":156,"text":26127},{"id":26144,"depth":156,"text":26145},{"id":26153,"depth":140,"text":26154},{"id":26223,"depth":140,"text":26224},{"id":26291,"depth":140,"text":26292},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25812,"description":118},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26405,"title":26406,"body":26407,"description":26414,"extension":2545,"meta":26425,"navigation":231,"path":26426,"seo":26427,"stem":26428,"__hash__":26429},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26408,"toc":26423},[26409,26412,26415,26420],[10,26410,26406],{"id":26411},"_2马尔可夫决策过程",[19,26413,26414],{},"这是强化学习的基本框架",[19,26416,26417],{},[3929,26418],{"alt":118,"src":26419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26421,26422],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":118,"searchDepth":140,"depth":140,"links":26424},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26406,"description":26414},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26431,"title":26432,"body":26433,"description":118,"extension":2545,"meta":26549,"navigation":231,"path":26550,"seo":26551,"stem":26552,"__hash__":26553},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26434,"toc":26544},[26435,26438,26442,26445,26450,26455,26458,26463,26466,26471,26474,26478,26483,26486,26491,26496,26501,26504,26508,26513,26516,26521,26526,26531,26536,26539],[10,26436,26432],{"id":26437},"_3动作价值函数",[14,26439,26441],{"id":26440},"_31dqn","3.1.DQN",[19,26443,26444],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26446,26447],{},[3929,26448],{"alt":118,"src":26449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26451,26452],{},[3929,26453],{"alt":118,"src":26454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26456,26457],{},"DQN算法的描述：",[19,26459,26460],{},[3929,26461],{"alt":118,"src":26462},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26464,26465],{},"这里的Dense指的是全连接层",[19,26467,26468],{},[3929,26469],{"alt":118,"src":26470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26472,26473],{},"当前观测的状态为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,26475,26477],{"id":26476},"_32dqn的举例","3.2.DQN的举例",[19,26479,26480],{},[3929,26481],{"alt":118,"src":26482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26484,26485],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26487,26488],{},[3929,26489],{"alt":118,"src":26490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26492,26493],{},[3929,26494],{"alt":118,"src":26495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26497,26498],{},[3929,26499],{"alt":118,"src":26500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26502,26503],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26505,26507],{"id":26506},"_33td算法","3.3.TD算法",[19,26509,26510],{},[3929,26511],{"alt":118,"src":26512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26514,26515],{},"强化学习TD算法公式的粗略解释：",[19,26517,26518],{},[3929,26519],{"alt":118,"src":26520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26522,26523],{},[3929,26524],{"alt":118,"src":26525},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26527,26528],{},[3929,26529],{"alt":118,"src":26530},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26532,26533],{},[3929,26534],{"alt":118,"src":26535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26537,26538],{},"TD算法总结：",[19,26540,26541],{},[3929,26542],{"alt":118,"src":26543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":118,"searchDepth":140,"depth":140,"links":26545},[26546,26547,26548],{"id":26440,"depth":140,"text":26441},{"id":26476,"depth":140,"text":26477},{"id":26506,"depth":140,"text":26507},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26432,"description":118},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26555,"title":26556,"body":26557,"description":118,"extension":2545,"meta":26790,"navigation":231,"path":26791,"seo":26792,"stem":26793,"__hash__":26794},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26558,"toc":26786},[26559,26562,26566,26569,26572,26577,26582,26585,26590,26595,26598,26603,26606,26611,26614,26619,26622,26627,26630,26635,26640,26643,26648,26651,26654,26659,26662,26667,26672,26676,26679,26682,26687,26692,26695,26700,26705,26708,26713,26716,26719,26724,26727,26732,26735,26740,26745,26748,26753,26758,26761,26766,26769,26774,26777],[10,26560,26556],{"id":26561},"_4策略学习",[14,26563,26565],{"id":26564},"_41概念描述","4.1.概念描述",[19,26567,26568],{},"用神经网络（策略网络）近似策略函数",[19,26570,26571],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26573,26574],{},[3929,26575],{"alt":118,"src":26576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26578,26579],{},[3929,26580],{"alt":118,"src":26581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26583,26584],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26586,26587],{},[3929,26588],{"alt":118,"src":26589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26591,26592],{},[3929,26593],{"alt":118,"src":26594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26596,26597],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26599,26600],{},[3929,26601],{"alt":118,"src":26602},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26604,26605],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26607,26608],{},[3929,26609],{"alt":118,"src":26610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26612,26613],{},"改进theta要用到策略梯度算法",[19,26615,26616],{},[3929,26617],{"alt":118,"src":26618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26620,26621],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26623,26624],{},[3929,26625],{"alt":118,"src":26626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26628,26629],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26631,26632],{},[3929,26633],{"alt":118,"src":26634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26636,26637],{},[3929,26638],{"alt":118,"src":26639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26641,26642],{},"梯度公式总结：",[19,26644,26645],{},[3929,26646],{"alt":118,"src":26647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26649,26650],{},"两个公式的分别应用场景：",[19,26652,26653],{},"对于离散的动作：",[19,26655,26656],{},[3929,26657],{"alt":118,"src":26658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26660,26661],{},"对于连续的动作：",[19,26663,26664],{},[3929,26665],{"alt":118,"src":26666},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26668,26669],{},[3929,26670],{"alt":118,"src":26671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26673,26675],{"id":26674},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26677,26678],{},"使用蒙特卡洛来近似计算策略梯度",[19,26680,26681],{},"蒙特卡洛法的解释如下：",[19,26683,26684],{},[3929,26685],{"alt":118,"src":26686},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26688,26689],{},[3929,26690],{"alt":118,"src":26691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26693,26694],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26696,26697],{},[29,26698,26699],{},"方法一：reinforce算法",[19,26701,26702],{},[3929,26703],{"alt":118,"src":26704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26706,26707],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26709,26710],{"start":140},[29,26711,26712],{},"方法二：actor-critic算法",[19,26714,26715],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26717,26718],{},"两个网络的构建：",[19,26720,26721],{},[3929,26722],{"alt":118,"src":26723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26725,26726],{},"actor网路：",[19,26728,26729],{},[3929,26730],{"alt":118,"src":26731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26733,26734],{},"critic网络",[19,26736,26737],{},[3929,26738],{"alt":118,"src":26739},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26741,26742],{"start":156},[29,26743,26744],{},"网络的训练",[19,26746,26747],{},"网络描述",[19,26749,26750],{},[3929,26751],{"alt":118,"src":26752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26754,26755],{},[3929,26756],{"alt":118,"src":26757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26759,26760],{},"TD算法更新梯度：",[19,26762,26763],{},[3929,26764],{"alt":118,"src":26765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26767,26768],{},"策略网络更新梯度：",[19,26770,26771],{},[3929,26772],{"alt":118,"src":26773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26775,26776],{},"训练整个流程的具体描述：",[19,26778,26779,26782,26783],{},[3929,26780],{"alt":118,"src":26781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3929,26784],{"alt":118,"src":26785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":118,"searchDepth":140,"depth":140,"links":26787},[26788,26789],{"id":26564,"depth":140,"text":26565},{"id":26674,"depth":140,"text":26675},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26556,"description":118},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26796,"title":26797,"body":26798,"description":26805,"extension":2545,"meta":26855,"navigation":231,"path":26856,"seo":26857,"stem":26858,"__hash__":26859},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26799,"toc":26851},[26800,26803,26806,26810,26813,26818,26822,26825,26830,26833,26838,26843,26846],[10,26801,26797],{"id":26802},"_5alphago算法",[19,26804,26805],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26807,26809],{"id":26808},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26811,26812],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26814,26815],{},[3929,26816],{"alt":118,"src":26817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26819,26821],{"id":26820},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26823,26824],{},"采用强化学习的方式训练策略网络",[19,26826,26827],{},[3929,26828],{"alt":118,"src":26829},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26831,26832],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26834,26835],{},[3929,26836],{"alt":118,"src":26837},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26839,26840],{},[3929,26841],{"alt":118,"src":26842},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26844,26845],{},"强化学习训练策略网络的总结：",[19,26847,26848],{},[3929,26849],{"alt":118,"src":26850},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":118,"searchDepth":140,"depth":140,"links":26852},[26853,26854],{"id":26808,"depth":140,"text":26809},{"id":26820,"depth":140,"text":26821},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26797,"description":26805},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26861,"title":26862,"body":26863,"description":26870,"extension":2545,"meta":26873,"navigation":231,"path":26874,"seo":26875,"stem":26876,"__hash__":26877},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26864,"toc":26871},[26865,26868],[10,26866,26862],{"id":26867},"_6价值网络",[19,26869,26870],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":118,"searchDepth":140,"depth":140,"links":26872},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26862,"description":26870},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26879,"title":26880,"body":26881,"description":26885,"extension":2545,"meta":26886,"navigation":231,"path":26887,"seo":26888,"stem":26889,"__hash__":26890},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26882,"toc":26883},[],{"title":118,"searchDepth":140,"depth":140,"links":26884},[],"记录自己的强化学习笔记。",{"category":25805},"\u002Fwiki\u002F2025-12-04",{"title":26880,"description":26885},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26892,"title":26893,"body":26894,"description":2544,"extension":2545,"meta":26933,"navigation":231,"path":26934,"seo":26935,"stem":26936,"__hash__":26937},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26895,"toc":26931},[26896,26899,26902,26908,26911,26917,26920,26925,26928],[10,26897,26893],{"id":26898},"_1-项目概览与官方资源",[19,26900,26901],{},"官方文档：",[19,26903,26904],{},[2846,26905,26906],{"href":26906,"rel":26907},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26287],[19,26909,26910],{},"官方代码仓库：",[19,26912,26913],{},[2846,26914,26915],{"href":26915,"rel":26916},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26287],[19,26918,26919],{},"复现大体流程：",[19,26921,26922],{},[3929,26923],{"alt":118,"src":26924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26926,26927],{},"本教程的目标是打通这条链路：",[19,26929,26930],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":118,"searchDepth":140,"depth":140,"links":26932},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26893,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26939,"title":26940,"body":26941,"description":2544,"extension":2545,"meta":27056,"navigation":231,"path":27057,"seo":27058,"stem":27059,"__hash__":27060},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26942,"toc":27051},[26943,26946,26950,26953,26960,26964,26967,26976,26986,26990,27020,27023,27048],[10,26944,26940],{"id":26945},"_2-环境准备与设备连接",[14,26947,26949],{"id":26948},"_21-系统与环境","2.1 系统与环境",[19,26951,26952],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26954,26955,26956,26959],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[120,26957,26958],{},"lerobot"," 依赖。",[14,26961,26963],{"id":26962},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26965,26966],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[113,26968,26970],{"className":328,"code":26969,"language":330,"meta":118,"style":118},"lerobot-find-out\n",[120,26971,26972],{"__ignoreMap":118},[123,26973,26974],{"class":125,"line":126},[123,26975,26969],{"class":337},[19,26977,26978,26979,2820,26982,26985],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[120,26980,26981],{},"\u002Fdev\u002FttyACM0",[120,26983,26984],{},"\u002Fdev\u002FttyACM1","）。",[14,26987,26989],{"id":26988},"_23-串口授权","2.3 串口授权",[113,26991,26993],{"className":328,"code":26992,"language":330,"meta":118,"style":118},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[120,26994,26995,27009],{"__ignoreMap":118},[123,26996,26997,27000,27003,27006],{"class":125,"line":126},[123,26998,26999],{"class":337},"sudo",[123,27001,27002],{"class":143}," chmod",[123,27004,27005],{"class":164}," 666",[123,27007,27008],{"class":143}," \u002Fdev\u002FttyACM0\n",[123,27010,27011,27013,27015,27017],{"class":125,"line":140},[123,27012,26999],{"class":337},[123,27014,27002],{"class":143},[123,27016,27005],{"class":164},[123,27018,27019],{"class":143}," \u002Fdev\u002FttyACM1\n",[19,27021,27022],{},"说明：",[3606,27024,27025,27030,27036,27045],{},[29,27026,27027,27029],{},[120,27028,26999],{},"：以 root 权限执行命令。",[29,27031,27032,27035],{},[120,27033,27034],{},"chmod","：修改设备节点权限。",[29,27037,27038,1159,27041,27044],{},[120,27039,27040],{},"666",[120,27042,27043],{},"rw-rw-rw-","，所有用户可读写。",[29,27046,27047],{},"串口号必须替换为你机器上的真实端口。",[2526,27049,27050],{},"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":118,"searchDepth":140,"depth":140,"links":27052},[27053,27054,27055],{"id":26948,"depth":140,"text":26949},{"id":26962,"depth":140,"text":26963},{"id":26988,"depth":140,"text":26989},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26940,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27062,"title":27063,"body":27064,"description":2544,"extension":2545,"meta":27225,"navigation":231,"path":27226,"seo":27227,"stem":27228,"__hash__":27229},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27065,"toc":27221},[27066,27070,27074,27080,27083,27140,27143,27147,27150,27218],[10,27067,27069],{"id":27068},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27071,27073],{"id":27072},"_31-配置电机-id","3.1 配置电机 ID",[19,27075,27076,27077,27079],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[120,27078,2825],{},"，需要改成机械臂链路里不冲突的编号。",[19,27081,27082],{},"方式一：用 LeRobot 命令逐步写入。",[113,27084,27086],{"className":328,"code":27085,"language":330,"meta":118,"style":118},"# 主臂舵机配置 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",[120,27087,27088,27093,27101,27108,27113,27117,27122,27128,27135],{"__ignoreMap":118},[123,27089,27090],{"class":125,"line":126},[123,27091,27092],{"class":2673},"# 主臂舵机配置 ID\n",[123,27094,27095,27098],{"class":125,"line":140},[123,27096,27097],{"class":337},"lerobot-setup-motors",[123,27099,27100],{"class":164}," \\\n",[123,27102,27103,27106],{"class":125,"line":156},[123,27104,27105],{"class":164},"  --teleop.type=so101_leader",[123,27107,27100],{"class":164},[123,27109,27110],{"class":125,"line":168},[123,27111,27112],{"class":164},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[123,27114,27115],{"class":125,"line":268},[123,27116,232],{"emptyLinePlaceholder":231},[123,27118,27119],{"class":125,"line":291},[123,27120,27121],{"class":2673},"# 从臂舵机配置 ID\n",[123,27123,27124,27126],{"class":125,"line":300},[123,27125,27097],{"class":337},[123,27127,27100],{"class":164},[123,27129,27130,27133],{"class":125,"line":305},[123,27131,27132],{"class":164},"  --robot.type=so101_follower",[123,27134,27100],{"class":164},[123,27136,27137],{"class":125,"line":316},[123,27138,27139],{"class":164},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,27141,27142],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27144,27146],{"id":27145},"_32-机械臂校准","3.2 机械臂校准",[19,27148,27149],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[113,27151,27153],{"className":328,"code":27152,"language":330,"meta":118,"style":118},"# 主臂校准\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",[120,27154,27155,27160,27167,27173,27180,27185,27189,27194,27200,27206,27213],{"__ignoreMap":118},[123,27156,27157],{"class":125,"line":126},[123,27158,27159],{"class":2673},"# 主臂校准\n",[123,27161,27162,27165],{"class":125,"line":140},[123,27163,27164],{"class":337},"lerobot-calibrate",[123,27166,27100],{"class":164},[123,27168,27169,27171],{"class":125,"line":156},[123,27170,27105],{"class":164},[123,27172,27100],{"class":164},[123,27174,27175,27178],{"class":125,"line":168},[123,27176,27177],{"class":164},"  --teleop.port=\u002Fdev\u002FttyACM0",[123,27179,27100],{"class":164},[123,27181,27182],{"class":125,"line":268},[123,27183,27184],{"class":164},"  --teleop.id=my_awesome_leader_arm\n",[123,27186,27187],{"class":125,"line":291},[123,27188,232],{"emptyLinePlaceholder":231},[123,27190,27191],{"class":125,"line":300},[123,27192,27193],{"class":2673},"# 从臂校准\n",[123,27195,27196,27198],{"class":125,"line":305},[123,27197,27164],{"class":337},[123,27199,27100],{"class":164},[123,27201,27202,27204],{"class":125,"line":316},[123,27203,27132],{"class":164},[123,27205,27100],{"class":164},[123,27207,27208,27211],{"class":125,"line":673},[123,27209,27210],{"class":164},"  --robot.port=\u002Fdev\u002FttyACM1",[123,27212,27100],{"class":164},[123,27214,27215],{"class":125,"line":692},[123,27216,27217],{"class":164},"  --robot.id=my_awesome_follower_arm\n",[2526,27219,27220],{},"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":118,"searchDepth":140,"depth":140,"links":27222},[27223,27224],{"id":27072,"depth":140,"text":27073},{"id":27145,"depth":140,"text":27146},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27063,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27231,"title":27232,"body":27233,"description":2544,"extension":2545,"meta":27424,"navigation":231,"path":27425,"seo":27426,"stem":27427,"__hash__":27428},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27234,"toc":27420},[27235,27238,27242,27289,27293,27306,27369,27372,27417],[10,27236,27232],{"id":27237},"_4-遥操与相机接入",[14,27239,27241],{"id":27240},"_41-不带相机遥操","4.1 不带相机遥操",[113,27243,27245],{"className":328,"code":27244,"language":330,"meta":118,"style":118},"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",[120,27246,27247,27254,27260,27266,27273,27279,27285],{"__ignoreMap":118},[123,27248,27249,27252],{"class":125,"line":126},[123,27250,27251],{"class":337},"lerobot-teleoperate",[123,27253,27100],{"class":164},[123,27255,27256,27258],{"class":125,"line":140},[123,27257,27132],{"class":164},[123,27259,27100],{"class":164},[123,27261,27262,27264],{"class":125,"line":156},[123,27263,27210],{"class":164},[123,27265,27100],{"class":164},[123,27267,27268,27271],{"class":125,"line":168},[123,27269,27270],{"class":164},"  --robot.id=my_awesome_follower_arm",[123,27272,27100],{"class":164},[123,27274,27275,27277],{"class":125,"line":268},[123,27276,27105],{"class":164},[123,27278,27100],{"class":164},[123,27280,27281,27283],{"class":125,"line":291},[123,27282,27177],{"class":164},[123,27284,27100],{"class":164},[123,27286,27287],{"class":125,"line":300},[123,27288,27184],{"class":164},[14,27290,27292],{"id":27291},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[113,27294,27296],{"className":328,"code":27295,"language":330,"meta":118,"style":118},"lerobot-find-cameras opencv\n",[120,27297,27298],{"__ignoreMap":118},[123,27299,27300,27303],{"class":125,"line":126},[123,27301,27302],{"class":337},"lerobot-find-cameras",[123,27304,27305],{"class":143}," opencv\n",[113,27307,27309],{"className":328,"code":27308,"language":330,"meta":118,"style":118},"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",[120,27310,27311,27317,27323,27329,27335,27345,27351,27357,27364],{"__ignoreMap":118},[123,27312,27313,27315],{"class":125,"line":126},[123,27314,27251],{"class":337},[123,27316,27100],{"class":164},[123,27318,27319,27321],{"class":125,"line":140},[123,27320,27132],{"class":164},[123,27322,27100],{"class":164},[123,27324,27325,27327],{"class":125,"line":156},[123,27326,27210],{"class":164},[123,27328,27100],{"class":164},[123,27330,27331,27333],{"class":125,"line":168},[123,27332,27270],{"class":164},[123,27334,27100],{"class":164},[123,27336,27337,27340,27343],{"class":125,"line":268},[123,27338,27339],{"class":164},"  --robot.cameras=",[123,27341,27342],{"class":143},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[123,27344,27100],{"class":164},[123,27346,27347,27349],{"class":125,"line":291},[123,27348,27105],{"class":164},[123,27350,27100],{"class":164},[123,27352,27353,27355],{"class":125,"line":300},[123,27354,27177],{"class":164},[123,27356,27100],{"class":164},[123,27358,27359,27362],{"class":125,"line":305},[123,27360,27361],{"class":164},"  --teleop.id=my_awesome_leader_arm",[123,27363,27100],{"class":164},[123,27365,27366],{"class":125,"line":316},[123,27367,27368],{"class":164},"  --display_data=true\n",[19,27370,27371],{},"相机参数说明：",[3606,27373,27374,27380,27386,27395,27405,27411],{},[29,27375,27376,27379],{},[120,27377,27378],{},"front","：相机名称。",[29,27381,27382,27385],{},[120,27383,27384],{},"type: opencv","：相机驱动类型。",[29,27387,27388,27391,27392,26985],{},[120,27389,27390],{},"index_or_path","：设备编号或设备路径（如 ",[120,27393,27394],{},"\u002Fdev\u002Fvideo4",[29,27396,27397,27400,27401,27404],{},[120,27398,27399],{},"width"," \u002F ",[120,27402,27403],{},"height","：图像分辨率。",[29,27406,27407,27410],{},[120,27408,27409],{},"fps","：采样帧率。",[29,27412,27413,27416],{},[120,27414,27415],{},"--display_data=true","：启用实时可视化。",[2526,27418,27419],{},"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":118,"searchDepth":140,"depth":140,"links":27421},[27422,27423],{"id":27240,"depth":140,"text":27241},{"id":27291,"depth":140,"text":27292},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27232,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27430,"title":27431,"body":27432,"description":2544,"extension":2545,"meta":27604,"navigation":231,"path":27605,"seo":27606,"stem":27607,"__hash__":27608},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27433,"toc":27599},[27434,27438,27442,27447,27452,27455,27497,27503,27507,27556,27561,27565,27568,27576,27581,27586,27591,27596],[10,27435,27437],{"id":27436},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27439,27441],{"id":27440},"_51-生成访问令牌","5.1 生成访问令牌",[19,27443,27444],{},[3929,27445],{"alt":118,"src":27446},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27448,27449],{},[3929,27450],{"alt":118,"src":27451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27453,27454],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[113,27456,27458],{"className":328,"code":27457,"language":330,"meta":118,"style":118},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[120,27459,27460,27473],{"__ignoreMap":118},[123,27461,27462,27465,27468,27470],{"class":125,"line":126},[123,27463,27464],{"class":133},"export",[123,27466,27467],{"class":129}," HF_TOKEN",[123,27469,134],{"class":133},[123,27471,27472],{"class":143},"\"your_huggingface_token\"\n",[123,27474,27475,27478,27481,27484,27487,27489,27492,27494],{"class":125,"line":140},[123,27476,27477],{"class":337},"hf",[123,27479,27480],{"class":143}," auth",[123,27482,27483],{"class":143}," login",[123,27485,27486],{"class":164}," --token",[123,27488,12156],{"class":143},[123,27490,27491],{"class":129},"$HF_TOKEN",[123,27493,2859],{"class":143},[123,27495,27496],{"class":164}," --add-to-git-credential\n",[19,27498,27499,27502],{},[120,27500,27501],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27504,27506],{"id":27505},"_52-验证登录","5.2 验证登录",[113,27508,27510],{"className":328,"code":27509,"language":330,"meta":118,"style":118},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[120,27511,27512,27543],{"__ignoreMap":118},[123,27513,27514,27517,27519,27522,27524,27526,27529,27532,27535,27538,27541],{"class":125,"line":126},[123,27515,27516],{"class":129},"HF_USER",[123,27518,134],{"class":133},[123,27520,27521],{"class":129},"$(",[123,27523,27477],{"class":337},[123,27525,27480],{"class":143},[123,27527,27528],{"class":143}," whoami",[123,27530,27531],{"class":133}," |",[123,27533,27534],{"class":337}," head",[123,27536,27537],{"class":164}," -n",[123,27539,27540],{"class":164}," 1",[123,27542,288],{"class":129},[123,27544,27545,27548,27550,27553],{"class":125,"line":140},[123,27546,27547],{"class":164},"echo",[123,27549,12156],{"class":143},[123,27551,27552],{"class":129},"$HF_USER",[123,27554,27555],{"class":143},"\"\n",[19,27557,27558],{},[3929,27559],{"alt":118,"src":27560},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27562,27564],{"id":27563},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27566,27567],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3606,27569,27570,27573],{},[29,27571,27572],{},"Dataset Repo（用于上传演示数据）",[29,27574,27575],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27577,27578],{},[3929,27579],{"alt":118,"src":27580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27582,27583],{},[3929,27584],{"alt":118,"src":27585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27587,27588],{},[3929,27589],{"alt":118,"src":27590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27592,27593],{},[3929,27594],{"alt":118,"src":27595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2526,27597,27598],{},"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":118,"searchDepth":140,"depth":140,"links":27600},[27601,27602,27603],{"id":27440,"depth":140,"text":27441},{"id":27505,"depth":140,"text":27506},{"id":27563,"depth":140,"text":27564},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27431,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27610,"title":27611,"body":27612,"description":2544,"extension":2545,"meta":27809,"navigation":231,"path":27810,"seo":27811,"stem":27812,"__hash__":27813},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27613,"toc":27804},[27614,27618,27622,27718,27726,27731,27735,27751,27754,27758,27801],[10,27615,27617],{"id":27616},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27619,27621],{"id":27620},"_61-录制示教数据","6.1 录制示教数据",[113,27623,27625],{"className":328,"code":27624,"language":330,"meta":118,"style":118},"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",[120,27626,27627,27634,27640,27646,27652,27661,27667,27673,27679,27686,27696,27703,27713],{"__ignoreMap":118},[123,27628,27629,27632],{"class":125,"line":126},[123,27630,27631],{"class":337},"lerobot-record",[123,27633,27100],{"class":164},[123,27635,27636,27638],{"class":125,"line":140},[123,27637,27132],{"class":164},[123,27639,27100],{"class":164},[123,27641,27642,27644],{"class":125,"line":156},[123,27643,27210],{"class":164},[123,27645,27100],{"class":164},[123,27647,27648,27650],{"class":125,"line":168},[123,27649,27270],{"class":164},[123,27651,27100],{"class":164},[123,27653,27654,27656,27659],{"class":125,"line":268},[123,27655,27339],{"class":164},[123,27657,27658],{"class":143},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[123,27660,27100],{"class":164},[123,27662,27663,27665],{"class":125,"line":291},[123,27664,27105],{"class":164},[123,27666,27100],{"class":164},[123,27668,27669,27671],{"class":125,"line":300},[123,27670,27177],{"class":164},[123,27672,27100],{"class":164},[123,27674,27675,27677],{"class":125,"line":305},[123,27676,27361],{"class":164},[123,27678,27100],{"class":164},[123,27680,27681,27684],{"class":125,"line":316},[123,27682,27683],{"class":164},"  --display_data=true",[123,27685,27100],{"class":164},[123,27687,27688,27691,27694],{"class":125,"line":673},[123,27689,27690],{"class":164},"  --dataset.repo_id=",[123,27692,27693],{"class":143},"\"Embodied-AI-6\u002Fso101_test\"",[123,27695,27100],{"class":164},[123,27697,27698,27701],{"class":125,"line":692},[123,27699,27700],{"class":164},"  --dataset.num_episodes=10",[123,27702,27100],{"class":164},[123,27704,27705,27708,27711],{"class":125,"line":713},[123,27706,27707],{"class":164},"  --dataset.single_task=",[123,27709,27710],{"class":143},"\"Grab the green cube\"",[123,27712,27100],{"class":164},[123,27714,27715],{"class":125,"line":718},[123,27716,27717],{"class":164},"  --resume=true\n",[3606,27719,27720],{},[29,27721,27722,27725],{},[120,27723,27724],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27727,27728],{},[3929,27729],{"alt":118,"src":27730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27732,27734],{"id":27733},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[113,27736,27738],{"className":328,"code":27737,"language":330,"meta":118,"style":118},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[120,27739,27740],{"__ignoreMap":118},[123,27741,27742,27745,27748],{"class":125,"line":126},[123,27743,27744],{"class":337},"rm",[123,27746,27747],{"class":164}," -rf",[123,27749,27750],{"class":143}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27752,27753],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27755,27757],{"id":27756},"_63-回放指定-episode","6.3 回放指定 episode",[113,27759,27761],{"className":328,"code":27760,"language":330,"meta":118,"style":118},"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",[120,27762,27763,27770,27776,27782,27788,27796],{"__ignoreMap":118},[123,27764,27765,27768],{"class":125,"line":126},[123,27766,27767],{"class":337},"lerobot-replay",[123,27769,27100],{"class":164},[123,27771,27772,27774],{"class":125,"line":140},[123,27773,27132],{"class":164},[123,27775,27100],{"class":164},[123,27777,27778,27780],{"class":125,"line":156},[123,27779,27210],{"class":164},[123,27781,27100],{"class":164},[123,27783,27784,27786],{"class":125,"line":168},[123,27785,27270],{"class":164},[123,27787,27100],{"class":164},[123,27789,27790,27792,27794],{"class":125,"line":268},[123,27791,27690],{"class":164},[123,27793,27693],{"class":143},[123,27795,27100],{"class":164},[123,27797,27798],{"class":125,"line":291},[123,27799,27800],{"class":164},"  --dataset.episode=0\n",[2526,27802,27803],{},"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":118,"searchDepth":140,"depth":140,"links":27805},[27806,27807,27808],{"id":27620,"depth":140,"text":27621},{"id":27733,"depth":140,"text":27734},{"id":27756,"depth":140,"text":27757},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27611,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27815,"title":27816,"body":27817,"description":2544,"extension":2545,"meta":27945,"navigation":231,"path":27946,"seo":27947,"stem":27948,"__hash__":27949},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27818,"toc":27943},[27819,27823,27886,27889,27936,27941],[10,27820,27822],{"id":27821},"_7-act-模型训练","7. ACT 模型训练",[113,27824,27826],{"className":328,"code":27825,"language":330,"meta":118,"style":118},"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",[120,27827,27828,27835,27843,27850,27857,27864,27871,27878],{"__ignoreMap":118},[123,27829,27830,27833],{"class":125,"line":126},[123,27831,27832],{"class":337},"lerobot-train",[123,27834,27100],{"class":164},[123,27836,27837,27839,27841],{"class":125,"line":140},[123,27838,27690],{"class":164},[123,27840,27693],{"class":143},[123,27842,27100],{"class":164},[123,27844,27845,27848],{"class":125,"line":156},[123,27846,27847],{"class":164},"  --policy.type=act",[123,27849,27100],{"class":164},[123,27851,27852,27855],{"class":125,"line":168},[123,27853,27854],{"class":164},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[123,27856,27100],{"class":164},[123,27858,27859,27862],{"class":125,"line":268},[123,27860,27861],{"class":164},"  --job_name=act_so101_test",[123,27863,27100],{"class":164},[123,27865,27866,27869],{"class":125,"line":291},[123,27867,27868],{"class":164},"  --policy.device=cuda",[123,27870,27100],{"class":164},[123,27872,27873,27876],{"class":125,"line":300},[123,27874,27875],{"class":164},"  --wandb.enable=false",[123,27877,27100],{"class":164},[123,27879,27880,27883],{"class":125,"line":305},[123,27881,27882],{"class":164},"  --policy.repo_id=",[123,27884,27885],{"class":143},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27887,27888],{},"参数说明：",[3606,27890,27891,27897,27903,27909,27915,27924,27930],{},[29,27892,27893,27896],{},[120,27894,27895],{},"--dataset.repo_id","：训练数据集仓库。",[29,27898,27899,27902],{},[120,27900,27901],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27904,27905,27908],{},[120,27906,27907],{},"--output_dir","：本地训练输出目录。",[29,27910,27911,27914],{},[120,27912,27913],{},"--job_name","：训练任务名称。",[29,27916,27917,27920,27921,26985],{},[120,27918,27919],{},"--policy.device","：训练设备（如 ",[120,27922,27923],{},"cuda",[29,27925,27926,27929],{},[120,27927,27928],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27931,27932,27935],{},[120,27933,27934],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27937,27938],{},[3929,27939],{"alt":118,"src":27940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2526,27942,27803],{},{"title":118,"searchDepth":140,"depth":140,"links":27944},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27816,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27951,"title":27952,"body":27953,"description":2544,"extension":2545,"meta":28040,"navigation":231,"path":28041,"seo":28042,"stem":28043,"__hash__":28044},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27954,"toc":28038},[27955,27958,27961,28028,28036],[10,27956,27952],{"id":27957},"_8-策略部署与自动采集",[19,27959,27960],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[113,27962,27964],{"className":328,"code":27963,"language":330,"meta":118,"style":118},"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",[120,27965,27966,27972,27978,27984,27992,27998,28005,28013,28021],{"__ignoreMap":118},[123,27967,27968,27970],{"class":125,"line":126},[123,27969,27631],{"class":337},[123,27971,27100],{"class":164},[123,27973,27974,27976],{"class":125,"line":140},[123,27975,27132],{"class":164},[123,27977,27100],{"class":164},[123,27979,27980,27982],{"class":125,"line":156},[123,27981,27210],{"class":164},[123,27983,27100],{"class":164},[123,27985,27986,27988,27990],{"class":125,"line":168},[123,27987,27339],{"class":164},[123,27989,27658],{"class":143},[123,27991,27100],{"class":164},[123,27993,27994,27996],{"class":125,"line":268},[123,27995,27270],{"class":164},[123,27997,27100],{"class":164},[123,27999,28000,28003],{"class":125,"line":291},[123,28001,28002],{"class":164},"  --display_data=false",[123,28004,27100],{"class":164},[123,28006,28007,28009,28011],{"class":125,"line":300},[123,28008,27690],{"class":164},[123,28010,27693],{"class":143},[123,28012,27100],{"class":164},[123,28014,28015,28017,28019],{"class":125,"line":305},[123,28016,27707],{"class":164},[123,28018,27710],{"class":143},[123,28020,27100],{"class":164},[123,28022,28023,28026],{"class":125,"line":316},[123,28024,28025],{"class":164},"  --policy.path=",[123,28027,27885],{"class":143},[3606,28029,28030],{},[29,28031,28032,28035],{},[120,28033,28034],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2526,28037,27803],{},{"title":118,"searchDepth":140,"depth":140,"links":28039},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27952,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28046,"title":28047,"body":28048,"description":2544,"extension":2545,"meta":28077,"navigation":231,"path":28078,"seo":28079,"stem":28080,"__hash__":28081},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28049,"toc":28075},[28050,28054,28057,28063,28066,28072],[10,28051,28053],{"id":28052},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,28055,28056],{},"项目地址：",[19,28058,28059],{},[2846,28060,28061],{"href":28061,"rel":28062},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26287],[19,28064,28065],{},"参考教程：",[19,28067,28068],{},[2846,28069,28070],{"href":28070,"rel":28071},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26287],[19,28073,28074],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":118,"searchDepth":140,"depth":140,"links":28076},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28047,"description":2544},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28083,"title":28084,"body":28085,"description":28089,"extension":2545,"meta":28090,"navigation":231,"path":28091,"seo":28092,"stem":28093,"__hash__":28094},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28086,"toc":28087},[],{"title":118,"searchDepth":140,"depth":140,"links":28088},[],"act复现",{"category":25805},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28084,"description":28089},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28096,"title":28097,"body":28098,"description":118,"extension":2545,"meta":28400,"navigation":231,"path":28401,"seo":28402,"stem":28403,"__hash__":28404},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28099,"toc":28392},[28100,28103,28107,28117,28124,28131,28134,28141,28144,28147,28151,28163,28167,28213,28216,28219,28222,28225,28228,28232,28270,28276,28280,28334,28339,28342,28345,28350,28353,28358,28361,28364,28368,28371,28374,28378],[10,28101,28097],{"id":28102},"_1简介",[2587,28104,28106],{"id":28105},"_11什么是-docker","1.1什么是 Docker？",[19,28108,28109,28110,28113,28114],{},"Docker 是一个开源的 ",[2759,28111,28112],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2759,28115,28116],{},"一次构建，到处运行。",[19,28118,28119,28120,28123],{},"“ ",[2759,28121,28122],{},"一次构建，到处运行"," ”也就是说：",[26,28125,28126],{},[29,28127,28128],{},[2759,28129,28130],{},"之前：",[19,28132,28133],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,28135,28136],{},[29,28137,28138],{},[2759,28139,28140],{},"使用docker后：",[19,28142,28143],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,28145,28146],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[2587,28148,28150],{"id":28149},"_12它是怎么工作的","1.2.它是怎么工作的？",[3606,28152,28153,28156],{},[29,28154,28155],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,28157,28158,28159,28162],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2759,28160,28161],{},"无论在哪运行都一样稳定"," 。",[2587,28164,28166],{"id":28165},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[48,28168,28169,28179],{},[51,28170,28171],{},[54,28172,28173,28176],{},[57,28174,28175],{"align":26163},"概念",[57,28177,28178],{"align":26163},"解释",[64,28180,28181,28189,28197,28205],{},[54,28182,28183,28186],{},[69,28184,28185],{"align":26163},"镜像",[69,28187,28188],{"align":26163},"Image，运行容器的模板，像是一个应用快照",[54,28190,28191,28194],{},[69,28192,28193],{"align":26163},"容器",[69,28195,28196],{"align":26163},"Container，运行中的镜像实例，有自己的文件系统、网络等",[54,28198,28199,28202],{},[69,28200,28201],{"align":26163},"Dockerfile",[69,28203,28204],{"align":26163},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[54,28206,28207,28210],{},[69,28208,28209],{"align":26163},"仓库",[69,28211,28212],{"align":26163},"Registry，存放镜像的地方，比如 Docker Hub",[19,28214,28215],{},"抽象化理解:",[19,28217,28218],{},"Docker镜像≈C++类",[19,28220,28221],{},"Docker容器≈C++类实例(即对象)",[19,28223,28224],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28226,28227],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[2587,28229,28231],{"id":28230},"_14类比理解","1.4.类比理解",[48,28233,28234,28244],{},[51,28235,28236],{},[54,28237,28238,28241],{},[57,28239,28240],{"align":26163},"传统部署",[57,28242,28243],{"align":26163},"Docker部署",[64,28245,28246,28254,28262],{},[54,28247,28248,28251],{},[69,28249,28250],{"align":26163},"手动安装依赖、调试版本不一致问题",[69,28252,28253],{"align":26163},"一次打包环境和代码",[54,28255,28256,28259],{},[69,28257,28258],{"align":26163},"程序“裸奔”跑在系统上",[69,28260,28261],{"align":26163},"程序“穿着容器”隔离运行",[54,28263,28264,28267],{},[69,28265,28266],{"align":26163},"容易“在我电脑上能跑”",[69,28268,28269],{"align":26163},"保证“无论在哪都能跑”",[19,28271,28272,28273],{},"就像快递包裹： ",[2759,28274,28275],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[2587,28277,28279],{"id":28278},"_15docker-的核心优势","1.5.Docker 的核心优势",[48,28281,28282,28292],{},[51,28283,28284],{},[54,28285,28286,28289],{},[57,28287,28288],{"align":26163},"优势",[57,28290,28291],{"align":26163},"说明",[64,28293,28294,28302,28310,28318,28326],{},[54,28295,28296,28299],{},[69,28297,28298],{"align":26163},"轻量级",[69,28300,28301],{"align":26163},"基于系统内核共享，启动速度快，占资源少",[54,28303,28304,28307],{},[69,28305,28306],{"align":26163},"跨平台",[69,28308,28309],{"align":26163},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[54,28311,28312,28315],{},[69,28313,28314],{"align":26163},"易于迁移部署",[69,28316,28317],{"align":26163},"应用和环境一起封装，不怕依赖不一致",[54,28319,28320,28323],{},[69,28321,28322],{"align":26163},"易于版本控制",[69,28324,28325],{"align":26163},"镜像版本可控，支持回滚",[54,28327,28328,28331],{},[69,28329,28330],{"align":26163},"生态丰富",[69,28332,28333],{"align":26163},"Docker Hub 上有成千上万的现成镜像可用",[26,28335,28336],{},[29,28337,28338],{},"在Linux上可以几乎实现无性能损失。",[19,28340,28341],{},"docker里的发行版和本机共用Linux内核。",[19,28343,28344],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,28346,28347],{},[29,28348,28349],{},"可以快速部署在绝大多数Linux发行版",[19,28351,28352],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,28354,28355],{},[29,28356,28357],{},"配置环境简单",[19,28359,28360],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28362,28363],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,28365,28366],{},[29,28367,28330],{},[19,28369,28370],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28372,28373],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[2587,28375,28377],{"id":28376},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3606,28379,28380,28383,28386,28389],{},[29,28381,28382],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,28384,28385],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,28387,28388],{},"微服务架构：每个服务一个容器，灵活组合",[29,28390,28391],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":118,"searchDepth":140,"depth":140,"links":28393},[28394,28395,28396,28397,28398,28399],{"id":28105,"depth":156,"text":28106},{"id":28149,"depth":156,"text":28150},{"id":28165,"depth":156,"text":28166},{"id":28230,"depth":156,"text":28231},{"id":28278,"depth":156,"text":28279},{"id":28376,"depth":156,"text":28377},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28097,"description":118},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28406,"title":28407,"body":28408,"description":118,"extension":2545,"meta":29140,"navigation":231,"path":29141,"seo":29142,"stem":29143,"__hash__":29144},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28409,"toc":29135},[28410,28413,28417,28420,28423,28429,28435,28439,28448,28451,28507,28510,28561,28564,28647,28650,28687,28691,28702,28715,28722,28725,28805,28808,28858,28861,28884,28888,28895,28898,28914,28920,28923,28939,28945,28948,28964,28978,28984,29004,29010,29013,29025,29031,29034,29048,29054,29057,29077,29082,29085,29088,29092,29095,29098,29101,29108,29111,29114,29117,29122,29127,29132],[10,28411,28407],{"id":28412},"_2安装docker",[2587,28414,28416],{"id":28415},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28418,28419],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28421,28422],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28424,28425],{},[2846,28426,28427],{"href":28427,"rel":28428},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26287],[19,28430,28431],{},[2846,28432,28433],{"href":28433,"rel":28434},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26287],[24425,28436,28438],{"id":28437},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28440,28441,28442,28447],{},"以下内容根据 ",[2846,28443,28446],{"href":28444,"rel":28445},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26287],"官方文档"," 修改而来。",[19,28449,28450],{},"如果你过去安装过 docker，先删掉：",[113,28452,28454],{"className":328,"code":28453,"language":330,"meta":118,"style":118},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[120,28455,28456],{"__ignoreMap":118},[123,28457,28458,28460,28463,28465,28468,28471,28474,28477,28480,28483,28486,28489,28492,28495,28498,28501,28504],{"class":125,"line":126},[123,28459,1399],{"class":133},[123,28461,28462],{"class":129}," pkg ",[123,28464,1405],{"class":133},[123,28466,28467],{"class":143}," docker.io",[123,28469,28470],{"class":143}," docker-doc",[123,28472,28473],{"class":143}," docker-compose",[123,28475,28476],{"class":143}," docker-compose-v2",[123,28478,28479],{"class":143}," podman-docker",[123,28481,28482],{"class":143}," containerd",[123,28484,28485],{"class":143}," runc",[123,28487,28488],{"class":129},"; ",[123,28490,28491],{"class":133},"do",[123,28493,28494],{"class":337}," sudo",[123,28496,28497],{"class":143}," apt-get",[123,28499,28500],{"class":143}," remove",[123,28502,28503],{"class":129}," $pkg; ",[123,28505,28506],{"class":133},"done\n",[19,28508,28509],{},"首先安装依赖和GPG：",[113,28511,28515],{"className":28512,"code":28513,"language":28514,"meta":118,"style":118},"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",[120,28516,28517,28522,28527,28532,28537,28542,28547,28551,28556],{"__ignoreMap":118},[123,28518,28519],{"class":125,"line":126},[123,28520,28521],{},"# Add Docker's official GPG key:\n",[123,28523,28524],{"class":125,"line":140},[123,28525,28526],{},"sudo apt-get update\n",[123,28528,28529],{"class":125,"line":156},[123,28530,28531],{},"sudo apt-get install ca-certificates curl\n",[123,28533,28534],{"class":125,"line":168},[123,28535,28536],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[123,28538,28539],{"class":125,"line":268},[123,28540,28541],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[123,28543,28544],{"class":125,"line":291},[123,28545,28546],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[123,28548,28549],{"class":125,"line":300},[123,28550,232],{"emptyLinePlaceholder":231},[123,28552,28553],{"class":125,"line":305},[123,28554,28555],{},"# 如果上面这行报错就弄下面这行\n",[123,28557,28558],{"class":125,"line":316},[123,28559,28560],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28562,28563],{},"信任 Docker 的 GPG 公钥并添加仓库：",[113,28565,28567],{"className":328,"code":28566,"language":330,"meta":118,"style":118},"# 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",[120,28568,28569,28574,28580,28597,28630],{"__ignoreMap":118},[123,28570,28571],{"class":125,"line":126},[123,28572,28573],{"class":2673},"# Add the repository to Apt sources:\n",[123,28575,28576,28578],{"class":125,"line":140},[123,28577,27547],{"class":164},[123,28579,27100],{"class":164},[123,28581,28582,28585,28588,28591,28594],{"class":125,"line":156},[123,28583,28584],{"class":143},"  \"deb [arch=$(",[123,28586,28587],{"class":337},"dpkg",[123,28589,28590],{"class":164}," --print-architecture",[123,28592,28593],{"class":143},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[123,28595,28596],{"class":164},"\\\n",[123,28598,28599,28602,28604,28606,28609,28612,28614,28616,28619,28621,28623,28626,28628],{"class":125,"line":168},[123,28600,28601],{"class":143},"  \"",[123,28603,27521],{"class":129},[123,28605,3161],{"class":164},[123,28607,28608],{"class":143}," \u002Fetc\u002Fos-release",[123,28610,28611],{"class":129}," && ",[123,28613,27547],{"class":164},[123,28615,12156],{"class":143},[123,28617,28618],{"class":129},"$VERSION_CODENAME",[123,28620,2859],{"class":143},[123,28622,3035],{"class":129},[123,28624,28625],{"class":143},"\" stable\"",[123,28627,27531],{"class":133},[123,28629,27100],{"class":164},[123,28631,28632,28635,28638,28641,28644],{"class":125,"line":268},[123,28633,28634],{"class":337},"  sudo",[123,28636,28637],{"class":143}," tee",[123,28639,28640],{"class":143}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[123,28642,28643],{"class":133}," >",[123,28645,28646],{"class":143}," \u002Fdev\u002Fnull\n",[19,28648,28649],{},"最后安装",[113,28651,28653],{"className":328,"code":28652,"language":330,"meta":118,"style":118},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[120,28654,28655,28664],{"__ignoreMap":118},[123,28656,28657,28659,28661],{"class":125,"line":126},[123,28658,26999],{"class":337},[123,28660,28497],{"class":143},[123,28662,28663],{"class":143}," update\n",[123,28665,28666,28668,28670,28672,28675,28678,28681,28684],{"class":125,"line":140},[123,28667,26999],{"class":337},[123,28669,28497],{"class":143},[123,28671,341],{"class":143},[123,28673,28674],{"class":143}," docker-ce",[123,28676,28677],{"class":143}," docker-ce-cli",[123,28679,28680],{"class":143}," containerd.io",[123,28682,28683],{"class":143}," docker-buildx-plugin",[123,28685,28686],{"class":143}," docker-compose-plugin\n",[24425,28688,28690],{"id":28689},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28692,28693,28694,28697,28698,28701],{},"查看自己自己包管理工具版本（dnf是 ",[2759,28695,28696],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2759,28699,28700],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[113,28703,28705],{"className":328,"code":28704,"language":330,"meta":118,"style":118},"dnf --version\n",[120,28706,28707],{"__ignoreMap":118},[123,28708,28709,28712],{"class":125,"line":126},[123,28710,28711],{"class":337},"dnf",[123,28713,28714],{"class":164}," --version\n",[19,28716,28441,28717,28721],{},[2846,28718,28446],{"href":28719,"rel":28720},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26287]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28723,28724],{},"如果你之前安装过 docker，请先删掉",[113,28726,28728],{"className":328,"code":28727,"language":330,"meta":118,"style":118},"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",[120,28729,28730,28744,28751,28758,28765,28772,28779,28786,28793,28800],{"__ignoreMap":118},[123,28731,28732,28734,28737,28739,28742],{"class":125,"line":126},[123,28733,26999],{"class":337},[123,28735,28736],{"class":143}," dnf",[123,28738,28500],{"class":143},[123,28740,28741],{"class":143}," docker",[123,28743,27100],{"class":164},[123,28745,28746,28749],{"class":125,"line":140},[123,28747,28748],{"class":143},"                  docker-client",[123,28750,27100],{"class":164},[123,28752,28753,28756],{"class":125,"line":156},[123,28754,28755],{"class":143},"                  docker-client-latest",[123,28757,27100],{"class":164},[123,28759,28760,28763],{"class":125,"line":168},[123,28761,28762],{"class":143},"                  docker-common",[123,28764,27100],{"class":164},[123,28766,28767,28770],{"class":125,"line":268},[123,28768,28769],{"class":143},"                  docker-latest",[123,28771,27100],{"class":164},[123,28773,28774,28777],{"class":125,"line":291},[123,28775,28776],{"class":143},"                  docker-latest-logrotate",[123,28778,27100],{"class":164},[123,28780,28781,28784],{"class":125,"line":300},[123,28782,28783],{"class":143},"                  docker-logrotate",[123,28785,27100],{"class":164},[123,28787,28788,28791],{"class":125,"line":305},[123,28789,28790],{"class":143},"                  docker-selinux",[123,28792,27100],{"class":164},[123,28794,28795,28798],{"class":125,"line":316},[123,28796,28797],{"class":143},"                  docker-engine-selinux",[123,28799,27100],{"class":164},[123,28801,28802],{"class":125,"line":673},[123,28803,28804],{"class":143},"                  docker-engine\n",[19,28806,28807],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[113,28809,28811],{"className":328,"code":28810,"language":330,"meta":118,"style":118},"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",[120,28812,28813,28827,28842],{"__ignoreMap":118},[123,28814,28815,28817,28819,28822,28824],{"class":125,"line":126},[123,28816,26999],{"class":337},[123,28818,28736],{"class":143},[123,28820,28821],{"class":164}," -y",[123,28823,341],{"class":143},[123,28825,28826],{"class":143}," dnf-plugins-core\n",[123,28828,28829,28831,28833,28836,28839],{"class":125,"line":140},[123,28830,26999],{"class":337},[123,28832,28736],{"class":143},[123,28834,28835],{"class":143}," config-manager",[123,28837,28838],{"class":143}," addrepo",[123,28840,28841],{"class":164}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[123,28843,28844,28846,28849,28852,28855],{"class":125,"line":156},[123,28845,26999],{"class":337},[123,28847,28848],{"class":143}," sed",[123,28850,28851],{"class":164}," -i",[123,28853,28854],{"class":143}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[123,28856,28857],{"class":143}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28859,28860],{},"最后安装：",[113,28862,28864],{"className":328,"code":28863,"language":330,"meta":118,"style":118},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[120,28865,28866],{"__ignoreMap":118},[123,28867,28868,28870,28872,28874,28876,28878,28880,28882],{"class":125,"line":126},[123,28869,26999],{"class":337},[123,28871,28736],{"class":143},[123,28873,341],{"class":143},[123,28875,28674],{"class":143},[123,28877,28677],{"class":143},[123,28879,28680],{"class":143},[123,28881,28683],{"class":143},[123,28883,28686],{"class":143},[2587,28885,28887],{"id":28886},"_22配置环境","2.2.配置环境",[24425,28889,28891,28894],{"id":28890},"_221检查-docker-服务状态",[2759,28892,28893],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28896,28897],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[113,28899,28901],{"className":328,"code":28900,"language":330,"meta":118,"style":118},"systemctl status docker\n",[120,28902,28903],{"__ignoreMap":118},[123,28904,28905,28908,28911],{"class":125,"line":126},[123,28906,28907],{"class":337},"systemctl",[123,28909,28910],{"class":143}," status",[123,28912,28913],{"class":143}," docker\n",[24425,28915,28917,28894],{"id":28916},"_222启动-docker-服务",[2759,28918,28919],{},"2.2.2.启动 Docker 服务",[19,28921,28922],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[113,28924,28926],{"className":328,"code":28925,"language":330,"meta":118,"style":118},"sudo systemctl start docker\n",[120,28927,28928],{"__ignoreMap":118},[123,28929,28930,28932,28935,28937],{"class":125,"line":126},[123,28931,26999],{"class":337},[123,28933,28934],{"class":143}," systemctl",[123,28936,6623],{"class":143},[123,28938,28913],{"class":143},[24425,28940,28942,28894],{"id":28941},"_223设置-docker-开机自启",[2759,28943,28944],{},"2.2.3.设置 Docker 开机自启",[19,28946,28947],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[113,28949,28951],{"className":328,"code":28950,"language":330,"meta":118,"style":118},"sudo systemctl enable docker\n",[120,28952,28953],{"__ignoreMap":118},[123,28954,28955,28957,28959,28962],{"class":125,"line":126},[123,28956,26999],{"class":337},[123,28958,28934],{"class":143},[123,28960,28961],{"class":143}," enable",[123,28963,28913],{"class":143},[24425,28965,28967,16225,28970,16225,28975,28894],{"id":28966},"_224将用户添加到-docker-组",[2759,28968,28969],{},"2.2.4.将用户添加到",[2759,28971,28972],{},[120,28973,28974],{},"docker",[2759,28976,28977],{},"组",[19,28979,28980,28981,28983],{},"使用以下命令将当前用户添加到 ",[120,28982,28974],{}," 组：",[113,28985,28987],{"className":328,"code":28986,"language":330,"meta":118,"style":118},"sudo usermod -aG docker $USER\n",[120,28988,28989],{"__ignoreMap":118},[123,28990,28991,28993,28996,28999,29001],{"class":125,"line":126},[123,28992,26999],{"class":337},[123,28994,28995],{"class":143}," usermod",[123,28997,28998],{"class":164}," -aG",[123,29000,28741],{"class":143},[123,29002,29003],{"class":129}," $USER\n",[24425,29005,29007,28894],{"id":29006},"_225退出并重新登录",[2759,29008,29009],{},"2.2.5.退出并重新登录",[19,29011,29012],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[113,29014,29016],{"className":328,"code":29015,"language":330,"meta":118,"style":118},"newgrp docker\n",[120,29017,29018],{"__ignoreMap":118},[123,29019,29020,29023],{"class":125,"line":126},[123,29021,29022],{"class":337},"newgrp",[123,29024,28913],{"class":143},[24425,29026,29028,28894],{"id":29027},"_226重新启动-docker-服务如果需要",[2759,29029,29030],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,29032,29033],{},"确保 Docker 服务正在运行，可以使用以下命令：",[113,29035,29036],{"className":328,"code":28925,"language":330,"meta":118,"style":118},[120,29037,29038],{"__ignoreMap":118},[123,29039,29040,29042,29044,29046],{"class":125,"line":126},[123,29041,26999],{"class":337},[123,29043,28934],{"class":143},[123,29045,6623],{"class":143},[123,29047,28913],{"class":143},[24425,29049,29051,28894],{"id":29050},"_227重启电脑后检查-docker-服务状态",[2759,29052,29053],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,29055,29056],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[113,29058,29060],{"className":328,"code":29059,"language":330,"meta":118,"style":118},"sudo reboot\nsystemctl status docker\n",[120,29061,29062,29069],{"__ignoreMap":118},[123,29063,29064,29066],{"class":125,"line":126},[123,29065,26999],{"class":337},[123,29067,29068],{"class":143}," reboot\n",[123,29070,29071,29073,29075],{"class":125,"line":140},[123,29072,28907],{"class":337},[123,29074,28910],{"class":143},[123,29076,28913],{"class":143},[19,29078,29079],{},[3929,29080],{"alt":118,"src":29081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,29083,29084],{},"第三行显示enabled说明开机自启动成功",[19,29086,29087],{},"按q退出",[2587,29089,29091],{"id":29090},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,29093,29094],{},"优先使用linux来使用docker是比较好的",[19,29096,29097],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,29099,29100],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,29102,29103,29104],{},"官方下载安装:",[2846,29105,29106],{"href":29106,"rel":29107},"https:\u002F\u002Fwww.docker.com\u002F",[26287],[19,29109,29110],{},"Windows的Docker显卡直通与USB直通:",[19,29112,29113],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,29115,29116],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,29118,29119],{},[3929,29120],{"alt":118,"src":29121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,29123,29124],{},[3929,29125],{"alt":118,"src":29126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,29128,29129],{},[3929,29130],{"alt":118,"src":29131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2526,29133,29134],{},"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":118,"searchDepth":140,"depth":140,"links":29136},[29137,29138,29139],{"id":28415,"depth":156,"text":28416},{"id":28886,"depth":156,"text":28887},{"id":29090,"depth":156,"text":29091},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28407,"description":118},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29146,"title":29147,"body":29148,"description":29155,"extension":2545,"meta":29848,"navigation":231,"path":29849,"seo":29850,"stem":29851,"__hash__":29852},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29149,"toc":29842},[29150,29153,29156,29160,29165,29170,29173,29201,29206,29215,29218,29223,29227,29234,29239,29245,29249,29252,29256,29261,29353,29358,29376,29381,29402,29407,29423,29427,29432,29461,29466,29512,29517,29561,29569,29586,29591,29607,29612,29626,29629,29632,29635,29638,29667,29670,29675,29679,29682,29685,29691,29694,29697,29700,29762,29769,29774,29777,29795,29799,29802,29819,29822,29825,29839],[10,29151,29147],{"id":29152},"_3docker直通",[19,29154,29155],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[2587,29157,29159],{"id":29158},"_31usb直通","3.1.USB直通",[19,29161,29162],{},[3929,29163],{"alt":118,"src":29164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,29166,29167],{},[29,29168,29169],{},"方法一(不是很推荐新手)：",[19,29171,29172],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[113,29174,29176],{"className":328,"code":29175,"language":330,"meta":118,"style":118},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[120,29177,29178,29186,29191],{"__ignoreMap":118},[123,29179,29180,29183],{"class":125,"line":126},[123,29181,29182],{"class":337},"ls",[123,29184,29185],{"class":143}," \u002Fdev\n",[123,29187,29188],{"class":125,"line":140},[123,29189,29190],{"class":2673},"#例如\n",[123,29192,29193,29196,29198],{"class":125,"line":156},[123,29194,29195],{"class":129},"--device",[123,29197,134],{"class":133},[123,29199,29200],{"class":143},"\u002Fdev\u002Ftty_USB0\n",[26,29202,29203],{"start":140},[29,29204,29205],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[113,29207,29209],{"className":328,"code":29208,"language":330,"meta":118,"style":118},"--privileged\n",[120,29210,29211],{"__ignoreMap":118},[123,29212,29213],{"class":125,"line":126},[123,29214,29208],{"class":337},[19,29216,29217],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29219,29220],{},[3929,29221],{"alt":118,"src":29222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[2587,29224,29226],{"id":29225},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29228,29229,29230,29233],{},"NVIDIA Container Toolkit使用户 ",[2759,29231,29232],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29235,29236],{},[3929,29237],{"alt":118,"src":29238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29240,29241],{},[2846,29242,29243],{"href":29243,"rel":29244},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26287],[24425,29246,29248],{"id":29247},"_321安装","3.2.1.安装",[19,29250,29251],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25337,29253,29255],{"id":29254},"_3211ubuntu","3.2.1.1.Ubuntu",[26,29257,29258],{},[29,29259,29260],{},"配置存储库 并更新",[113,29262,29264],{"className":328,"code":29263,"language":330,"meta":118,"style":118},"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",[120,29265,29266,29295,29315,29327,29339,29345],{"__ignoreMap":118},[123,29267,29268,29271,29274,29277,29279,29281,29284,29287,29290,29293],{"class":125,"line":126},[123,29269,29270],{"class":337},"curl",[123,29272,29273],{"class":164}," -fsSL",[123,29275,29276],{"class":143}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[123,29278,27531],{"class":133},[123,29280,28494],{"class":337},[123,29282,29283],{"class":143}," gpg",[123,29285,29286],{"class":164}," --dearmor",[123,29288,29289],{"class":164}," -o",[123,29291,29292],{"class":143}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[123,29294,27100],{"class":164},[123,29296,29297,29300,29302,29305,29308,29311,29313],{"class":125,"line":140},[123,29298,29299],{"class":129},"  && ",[123,29301,29270],{"class":337},[123,29303,29304],{"class":164}," -s",[123,29306,29307],{"class":164}," -L",[123,29309,29310],{"class":143}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[123,29312,27531],{"class":133},[123,29314,27100],{"class":164},[123,29316,29317,29320,29323,29325],{"class":125,"line":156},[123,29318,29319],{"class":337},"    sed",[123,29321,29322],{"class":143}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[123,29324,27531],{"class":133},[123,29326,27100],{"class":164},[123,29328,29329,29332,29334,29337],{"class":125,"line":168},[123,29330,29331],{"class":337},"    sudo",[123,29333,28637],{"class":143},[123,29335,29336],{"class":143}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[123,29338,27100],{"class":164},[123,29340,29341,29343],{"class":125,"line":268},[123,29342,29299],{"class":129},[123,29344,28596],{"class":164},[123,29346,29347,29349,29351],{"class":125,"line":291},[123,29348,29331],{"class":337},[123,29350,28497],{"class":143},[123,29352,28663],{"class":143},[26,29354,29355],{"start":140},[29,29356,29357],{},"安装nvidia-docker2",[113,29359,29361],{"className":328,"code":29360,"language":330,"meta":118,"style":118},"sudo apt-get install -y nvidia-docker2\n",[120,29362,29363],{"__ignoreMap":118},[123,29364,29365,29367,29369,29371,29373],{"class":125,"line":126},[123,29366,26999],{"class":337},[123,29368,28497],{"class":143},[123,29370,341],{"class":143},[123,29372,28821],{"class":164},[123,29374,29375],{"class":143}," nvidia-docker2\n",[26,29377,29378],{"start":156},[29,29379,29380],{},"使用nvidia-ctk命令配置container runtime",[113,29382,29384],{"className":328,"code":29383,"language":330,"meta":118,"style":118},"sudo nvidia-ctk runtime configure --runtime=docker\n",[120,29385,29386],{"__ignoreMap":118},[123,29387,29388,29390,29393,29396,29399],{"class":125,"line":126},[123,29389,26999],{"class":337},[123,29391,29392],{"class":143}," nvidia-ctk",[123,29394,29395],{"class":143}," runtime",[123,29397,29398],{"class":143}," configure",[123,29400,29401],{"class":164}," --runtime=docker\n",[26,29403,29404],{"start":168},[29,29405,29406],{},"重启docker服务:",[113,29408,29410],{"className":328,"code":29409,"language":330,"meta":118,"style":118},"sudo systemctl restart docker\n",[120,29411,29412],{"__ignoreMap":118},[123,29413,29414,29416,29418,29421],{"class":125,"line":126},[123,29415,26999],{"class":337},[123,29417,28934],{"class":143},[123,29419,29420],{"class":143}," restart",[123,29422,28913],{"class":143},[25337,29424,29426],{"id":29425},"_3212fedora","3.2.1.2.Fedora",[26,29428,29429],{},[29,29430,29431],{},"配置存储库",[113,29433,29435],{"className":328,"code":29434,"language":330,"meta":118,"style":118},"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",[120,29436,29437,29452],{"__ignoreMap":118},[123,29438,29439,29441,29443,29445,29448,29450],{"class":125,"line":126},[123,29440,29270],{"class":337},[123,29442,29304],{"class":164},[123,29444,29307],{"class":164},[123,29446,29447],{"class":143}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[123,29449,27531],{"class":133},[123,29451,27100],{"class":164},[123,29453,29454,29456,29458],{"class":125,"line":140},[123,29455,26999],{"class":337},[123,29457,28637],{"class":143},[123,29459,29460],{"class":143}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,29462,29463],{"start":140},[29,29464,29465],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[113,29467,29469],{"className":328,"code":29468,"language":330,"meta":118,"style":118},"# 如果是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",[120,29470,29471,29476,29490,29494,29499],{"__ignoreMap":118},[123,29472,29473],{"class":125,"line":126},[123,29474,29475],{"class":2673},"# 如果是RHEL或者Rocky（DNF4）\n",[123,29477,29478,29480,29482,29484,29487],{"class":125,"line":140},[123,29479,26999],{"class":337},[123,29481,28736],{"class":143},[123,29483,28835],{"class":143},[123,29485,29486],{"class":164}," --add-repo",[123,29488,29489],{"class":143}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[123,29491,29492],{"class":125,"line":156},[123,29493,232],{"emptyLinePlaceholder":231},[123,29495,29496],{"class":125,"line":168},[123,29497,29498],{"class":2673},"# 如果是Feodra41+（DNF5）\n",[123,29500,29501,29503,29505,29507,29509],{"class":125,"line":268},[123,29502,26999],{"class":337},[123,29504,28736],{"class":143},[123,29506,28835],{"class":143},[123,29508,28838],{"class":143},[123,29510,29511],{"class":164}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,29513,29514],{"start":156},[29,29515,29516],{},"安装NVIDIA Container Toolki包",[113,29518,29520],{"className":328,"code":29519,"language":330,"meta":118,"style":118},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[120,29521,29522,29527,29540,29544,29549],{"__ignoreMap":118},[123,29523,29524],{"class":125,"line":126},[123,29525,29526],{"class":2673},"# 如果是RHEL或者Rocky\n",[123,29528,29529,29531,29533,29535,29537],{"class":125,"line":140},[123,29530,26999],{"class":337},[123,29532,28736],{"class":143},[123,29534,341],{"class":143},[123,29536,28821],{"class":164},[123,29538,29539],{"class":143}," nvidia-container-toolkit\n",[123,29541,29542],{"class":125,"line":156},[123,29543,232],{"emptyLinePlaceholder":231},[123,29545,29546],{"class":125,"line":168},[123,29547,29548],{"class":2673},"# 如果是Fedora\n",[123,29550,29551,29553,29555,29557,29559],{"class":125,"line":268},[123,29552,26999],{"class":337},[123,29554,28736],{"class":143},[123,29556,341],{"class":143},[123,29558,28821],{"class":164},[123,29560,29539],{"class":143},[26,29562,29563],{"start":168},[29,29564,29565,29566,29568],{},"安装nvidia-docker2 ： 在Fedora上使用",[120,29567,28711],{},"进行安装",[113,29570,29572],{"className":328,"code":29571,"language":330,"meta":118,"style":118},"sudo dnf install -y nvidia-docker2\n",[120,29573,29574],{"__ignoreMap":118},[123,29575,29576,29578,29580,29582,29584],{"class":125,"line":126},[123,29577,26999],{"class":337},[123,29579,28736],{"class":143},[123,29581,341],{"class":143},[123,29583,28821],{"class":164},[123,29585,29375],{"class":143},[26,29587,29588],{"start":268},[29,29589,29590],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[113,29592,29593],{"className":328,"code":29383,"language":330,"meta":118,"style":118},[120,29594,29595],{"__ignoreMap":118},[123,29596,29597,29599,29601,29603,29605],{"class":125,"line":126},[123,29598,26999],{"class":337},[123,29600,29392],{"class":143},[123,29602,29395],{"class":143},[123,29604,29398],{"class":143},[123,29606,29401],{"class":164},[26,29608,29609],{"start":291},[29,29610,29611],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[113,29613,29614],{"className":328,"code":29409,"language":330,"meta":118,"style":118},[120,29615,29616],{"__ignoreMap":118},[123,29617,29618,29620,29622,29624],{"class":125,"line":126},[123,29619,26999],{"class":337},[123,29621,28934],{"class":143},[123,29623,29420],{"class":143},[123,29625,28913],{"class":143},[19,29627,29628],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29630,29631],{},"方法：",[19,29633,29634],{},"1️⃣nvidia-smi",[19,29636,29637],{},"2️⃣运行nvidia cuda 容器进行测试",[113,29639,29641],{"className":328,"code":29640,"language":330,"meta":118,"style":118},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[120,29642,29643],{"__ignoreMap":118},[123,29644,29645,29647,29649,29652,29655,29658,29661,29664],{"class":125,"line":126},[123,29646,26999],{"class":337},[123,29648,28741],{"class":143},[123,29650,29651],{"class":143}," run",[123,29653,29654],{"class":164}," --rm",[123,29656,29657],{"class":164}," --gpus",[123,29659,29660],{"class":143}," all",[123,29662,29663],{"class":143}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[123,29665,29666],{"class":143}," nvidia-smi\n",[19,29668,29669],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29671,29672],{},[3929,29673],{"alt":118,"src":29674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[2587,29676,29678],{"id":29677},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29680,29681],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29683,29684],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29686,29687],{},[2846,29688,29689],{"href":29689,"rel":29690},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26287],[19,29692,29693],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29695,29696],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29698,29699],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[48,29701,29702,29718],{},[51,29703,29704],{},[54,29705,29706,29709,29712,29715],{},[57,29707,29708],{"align":26163},"镜像类型",[57,29710,29711],{"align":26163},"适用场景",[57,29713,29714],{"align":26163},"示例标签",[57,29716,29717],{"align":26163},"大小",[64,29719,29720,29734,29748],{},[54,29721,29722,29725,29728,29731],{},[69,29723,29724],{"align":26163},"base",[69,29726,29727],{"align":26163},"仅需 CUDA 运行时库",[69,29729,29730],{"align":26163},"12.4.0-base-ubuntu22.04",[69,29732,29733],{"align":26163},"~240MB",[54,29735,29736,29739,29742,29745],{},[69,29737,29738],{"align":26163},"runtime",[69,29740,29741],{"align":26163},"部署编译后的应用（含数学库）",[69,29743,29744],{"align":26163},"12.4.0-runtime-ubuntu22.04",[69,29746,29747],{"align":26163},"~2GB",[54,29749,29750,29753,29756,29759],{},[69,29751,29752],{"align":26163},"devel",[69,29754,29755],{"align":26163},"开发环境（含编译工具）",[69,29757,29758],{"align":26163},"12.4.0-devel-ubuntu22.04",[69,29760,29761],{"align":26163},"~3GB",[19,29763,29764,29765,29768],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[120,29766,29767],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29770,29771],{},[3929,29772],{"alt":118,"src":29773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29775,29776],{},"在dockerfile里就可以开头这么写：",[113,29778,29780],{"className":328,"code":29779,"language":330,"meta":118,"style":118},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[120,29781,29782,29787],{"__ignoreMap":118},[123,29783,29784],{"class":125,"line":126},[123,29785,29786],{"class":2673},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[123,29788,29789,29792],{"class":125,"line":140},[123,29790,29791],{"class":337},"FROM",[123,29793,29794],{"class":143}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[2587,29796,29798],{"id":29797},"_34配置以太网","3.4.配置以太网",[19,29800,29801],{},"指定网络模式",[113,29803,29805],{"className":328,"code":29804,"language":330,"meta":118,"style":118},"--net=host \\\n",[120,29806,29807],{"__ignoreMap":118},[123,29808,29809,29812,29814,29817],{"class":125,"line":126},[123,29810,29811],{"class":129},"--net",[123,29813,134],{"class":133},[123,29815,29816],{"class":143},"host",[123,29818,27100],{"class":337},[19,29820,29821],{},"启动参数里加上这行即可。具体在下方",[19,29823,29824],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3606,29826,29827,29830,29833,29836],{},[29,29828,29829],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29831,29832],{},"--net=host:容器使用宿主机的网络",[29,29834,29835],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29837,29838],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2526,29840,29841],{},"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":118,"searchDepth":140,"depth":140,"links":29843},[29844,29845,29846,29847],{"id":29158,"depth":156,"text":29159},{"id":29225,"depth":156,"text":29226},{"id":29677,"depth":156,"text":29678},{"id":29797,"depth":156,"text":29798},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29147,"description":29155},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29854,"title":29855,"body":29856,"description":29863,"extension":2545,"meta":29869,"navigation":231,"path":29870,"seo":29871,"stem":29872,"__hash__":29873},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29857,"toc":29867},[29858,29861,29864],[10,29859,29855],{"id":29860},"_4dockerhub换源",[19,29862,29863],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29865,29866],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":118,"searchDepth":140,"depth":140,"links":29868},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29855,"description":29863},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29875,"title":29876,"body":29877,"description":118,"extension":2545,"meta":30888,"navigation":231,"path":30889,"seo":30890,"stem":30891,"__hash__":30892},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29878,"toc":30883},[29879,29882,29886,29892,29896,29899,30239,30242,30245,30248,30253,30258,30261,30264,30267,30270,30289,30292,30303,30309,30491,30501,30517,30780,30782,30806,30821,30830,30880],[10,29880,29876],{"id":29881},"_5docker命令学习",[2587,29883,29885],{"id":29884},"_51参考文档","5.1.参考文档",[19,29887,29888],{},[2846,29889,29890],{"href":29890,"rel":29891},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26287],[2587,29893,29895],{"id":29894},"_52常用命令","5.2.常用命令",[19,29897,29898],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[48,29900,29901,29914],{},[51,29902,29903],{},[54,29904,29905,29908,29911],{},[57,29906,29907],{"align":26163},"命令",[57,29909,29910],{"align":26163},"描述",[57,29912,29913],{"align":26163},"示例",[64,29915,29916,29927,29938,29949,29960,29971,29982,29993,30003,30014,30025,30036,30046,30057,30068,30079,30089,30099,30109,30119,30130,30141,30152,30163,30174,30185,30195,30206,30217,30228],{},[54,29917,29918,29921,29924],{},[69,29919,29920],{"align":26163},"docker run",[69,29922,29923],{"align":26163},"创建并启动一个新的容器。",[69,29925,29926],{"align":26163},"docker run -it ubuntu bash",[54,29928,29929,29932,29935],{},[69,29930,29931],{"align":26163},"docker build",[69,29933,29934],{"align":26163},"通过指定的 Dockerfile 创建一个新的镜像。",[69,29936,29937],{"align":26163},"docker build -t myimage .",[54,29939,29940,29943,29946],{},[69,29941,29942],{"align":26163},"docker pull",[69,29944,29945],{"align":26163},"从 Docker 仓库拉取镜像。",[69,29947,29948],{"align":26163},"docker pull ubuntu",[54,29950,29951,29954,29957],{},[69,29952,29953],{"align":26163},"docker push",[69,29955,29956],{"align":26163},"将本地镜像推送到 Docker 仓库。",[69,29958,29959],{"align":26163},"docker push myimage",[54,29961,29962,29965,29968],{},[69,29963,29964],{"align":26163},"docker stop",[69,29966,29967],{"align":26163},"停止一个正在运行的容器。",[69,29969,29970],{"align":26163},"docker stop container_id",[54,29972,29973,29976,29979],{},[69,29974,29975],{"align":26163},"docker start",[69,29977,29978],{"align":26163},"启动一个已经存在的容器。",[69,29980,29981],{"align":26163},"docker start container_id",[54,29983,29984,29987,29990],{},[69,29985,29986],{"align":26163},"docker restart",[69,29988,29989],{"align":26163},"重新启动容器。",[69,29991,29992],{"align":26163},"docker restart container_id",[54,29994,29995,29998,30001],{},[69,29996,29997],{"align":26163},"docker ps",[69,29999,30000],{"align":26163},"列出当前正在运行的容器。",[69,30002,29997],{"align":26163},[54,30004,30005,30008,30011],{},[69,30006,30007],{"align":26163},"docker rm",[69,30009,30010],{"align":26163},"删除一个或多个停止的容器。",[69,30012,30013],{"align":26163},"docker rm container_id",[54,30015,30016,30019,30022],{},[69,30017,30018],{"align":26163},"docker exec",[69,30020,30021],{"align":26163},"在一个正在运行的容器中执行命令。",[69,30023,30024],{"align":26163},"docker exec -it container_id bash",[54,30026,30027,30030,30033],{},[69,30028,30029],{"align":26163},"docker logs",[69,30031,30032],{"align":26163},"查看容器的日志输出。",[69,30034,30035],{"align":26163},"docker logs container_id",[54,30037,30038,30041,30044],{},[69,30039,30040],{"align":26163},"docker images",[69,30042,30043],{"align":26163},"列出本地所有镜像。",[69,30045,30040],{"align":26163},[54,30047,30048,30051,30054],{},[69,30049,30050],{"align":26163},"docker rmi",[69,30052,30053],{"align":26163},"删除一个或多个镜像。",[69,30055,30056],{"align":26163},"docker rmi myimage",[54,30058,30059,30062,30065],{},[69,30060,30061],{"align":26163},"docker network",[69,30063,30064],{"align":26163},"管理 Docker 网络。",[69,30066,30067],{"align":26163},"docker network ls",[54,30069,30070,30073,30076],{},[69,30071,30072],{"align":26163},"docker volume",[69,30074,30075],{"align":26163},"管理 Docker 数据卷。",[69,30077,30078],{"align":26163},"docker volume ls",[54,30080,30081,30084,30087],{},[69,30082,30083],{"align":26163},"docker-compose up",[69,30085,30086],{"align":26163},"启动 docker-compose.yml 中定义的所有服务。",[69,30088,30083],{"align":26163},[54,30090,30091,30094,30097],{},[69,30092,30093],{"align":26163},"docker-compose down",[69,30095,30096],{"align":26163},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[69,30098,30093],{"align":26163},[54,30100,30101,30104,30107],{},[69,30102,30103],{"align":26163},"docker info",[69,30105,30106],{"align":26163},"显示 Docker 系统的详细信息。",[69,30108,30103],{"align":26163},[54,30110,30111,30114,30117],{},[69,30112,30113],{"align":26163},"docker stats",[69,30115,30116],{"align":26163},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[69,30118,30113],{"align":26163},[54,30120,30121,30124,30127],{},[69,30122,30123],{"align":26163},"docker inspect",[69,30125,30126],{"align":26163},"查看容器或镜像的详细信息（JSON 格式）。",[69,30128,30129],{"align":26163},"docker inspect container_id",[54,30131,30132,30135,30138],{},[69,30133,30134],{"align":26163},"docker save",[69,30136,30137],{"align":26163},"将一个镜像保存为 tar 文件。",[69,30139,30140],{"align":26163},"docker save -o myimage.tar myimage",[54,30142,30143,30146,30149],{},[69,30144,30145],{"align":26163},"docker load",[69,30147,30148],{"align":26163},"从 tar 文件中加载镜像。",[69,30150,30151],{"align":26163},"docker load -i myimage.tar",[54,30153,30154,30157,30160],{},[69,30155,30156],{"align":26163},"docker tag",[69,30158,30159],{"align":26163},"为镜像添加标签（tag）。",[69,30161,30162],{"align":26163},"docker tag myimage myimage:v1",[54,30164,30165,30168,30171],{},[69,30166,30167],{"align":26163},"docker buildx build",[69,30169,30170],{"align":26163},"使用 Buildx 构建多架构镜像。",[69,30172,30173],{"align":26163},"docker buildx build -t myimage .",[54,30175,30176,30179,30182],{},[69,30177,30178],{"align":26163},"docker buildx create",[69,30180,30181],{"align":26163},"创建一个新的 Buildx 构建实例。",[69,30183,30184],{"align":26163},"docker buildx create –use",[54,30186,30187,30190,30193],{},[69,30188,30189],{"align":26163},"docker buildx ls",[69,30191,30192],{"align":26163},"列出所有可用的 Buildx 构建实例。",[69,30194,30189],{"align":26163},[54,30196,30197,30200,30203],{},[69,30198,30199],{"align":26163},"docker buildx use",[69,30201,30202],{"align":26163},"设置当前的 Buildx 构建实例。",[69,30204,30205],{"align":26163},"docker buildx use mybuilder",[54,30207,30208,30211,30214],{},[69,30209,30210],{"align":26163},"docker buildx bake",[69,30212,30213],{"align":26163},"使用 Bake 文件批量构建镜像。",[69,30215,30216],{"align":26163},"docker buildx bake -f bake.hcl",[54,30218,30219,30222,30225],{},[69,30220,30221],{"align":26163},"docker buildx build –push",[69,30223,30224],{"align":26163},"构建镜像并推送到镜像仓库。",[69,30226,30227],{"align":26163},"docker buildx build –push -t myimage .",[54,30229,30230,30233,30236],{},[69,30231,30232],{"align":26163},"docker buildx build –platform",[69,30234,30235],{"align":26163},"构建镜像并为多个平台生成支持。",[69,30237,30238],{"align":26163},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30240,30241],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30243,30244],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30246,30247],{},"docker images 可以查看已经下载的镜像",[19,30249,30250],{},[3929,30251],{"alt":118,"src":30252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30254,30255],{},[2759,30256,30257],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30259,30260],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30262,30263],{},"docker container logs 查看容器日志",[19,30265,30266],{},"docker top 查看容器里的进程",[19,30268,30269],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[113,30271,30273],{"className":328,"code":30272,"language":330,"meta":118,"style":118},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[120,30274,30275],{"__ignoreMap":118},[123,30276,30277,30280,30283,30286],{"class":125,"line":126},[123,30278,30279],{"class":337},"如：docker",[123,30281,30282],{"class":143}," cp",[123,30284,30285],{"class":143}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[123,30287,30288],{"class":143}," \u002Fmydata\u002Fnginx\n",[19,30290,30291],{},"docker run时在启动容器的时候会有几个常用的选项：",[3606,30293,30294,30297,30300],{},[29,30295,30296],{},"-d选项：表示后台运行",[29,30298,30299],{},"-P选项：随机端口映射",[29,30301,30302],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[2587,30304,30306],{"id":30305},"_53run命令的参数非常重要",[2759,30307,30308],{},"5.3.run命令的参数（非常重要）",[48,30310,30311,30324],{},[51,30312,30313],{},[54,30314,30315,30318,30321],{},[57,30316,30317],{"align":26163},"参数\u002F配置",[57,30319,30320],{"align":26163},"功能说明",[57,30322,30323],{"align":26163},"重要性与参考依据",[64,30325,30326,30337,30348,30359,30370,30381,30392,30403,30414,30425,30436,30447,30458,30469,30480],{},[54,30327,30328,30331,30334],{},[69,30329,30330],{"align":26163},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[69,30332,30333],{"align":26163},"指定容器名称，便于后续管理",[69,30335,30336],{"align":26163},"替代随机生成的容器名。",[54,30338,30339,30342,30345],{},[69,30340,30341],{"align":26163},"–gpus all",[69,30343,30344],{"align":26163},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[69,30346,30347],{"align":26163},"用于CUDA加速等GPU依赖任务。",[54,30349,30350,30353,30356],{},[69,30351,30352],{"align":26163},"-e NVIDIA_DRIVER_CAPABILITIES=all",[69,30354,30355],{"align":26163},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[69,30357,30358],{"align":26163},"确保容器内GPU功能完整67。",[54,30360,30361,30364,30367],{},[69,30362,30363],{"align":26163},"-dit",[69,30365,30366],{"align":26163},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[69,30368,30369],{"align":26163},"允许容器在后台运行并支持交互操作。",[54,30371,30372,30375,30378],{},[69,30373,30374],{"align":26163},"–privileged",[69,30376,30377],{"align":26163},"赋予容器完全主机权限（可访问设备、内核模块等）",[69,30379,30380],{"align":26163},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[54,30382,30383,30386,30389],{},[69,30384,30385],{"align":26163},"–net=host",[69,30387,30388],{"align":26163},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[69,30390,30391],{"align":26163},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[54,30393,30394,30397,30400],{},[69,30395,30396],{"align":26163},"–group-add audio–group-add video–group-add dialout",[69,30398,30399],{"align":26163},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[69,30401,30402],{"align":26163},"避免权限问题（如避免无法调用摄像头、麦克风）。",[54,30404,30405,30408,30411],{},[69,30406,30407],{"align":26163},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[69,30409,30410],{"align":26163},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[69,30412,30413],{"align":26163},"支持容器内运行图形界面应用（如OpenCV可视化）。",[54,30415,30416,30419,30422],{},[69,30417,30418],{"align":26163},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[69,30420,30421],{"align":26163},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[69,30423,30424],{"align":26163},"实现容器内图形显示。",[54,30426,30427,30430,30433],{},[69,30428,30429],{"align":26163},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[69,30431,30432],{"align":26163},"挂载X11认证文件（只读）",[69,30434,30435],{"align":26163},"确保容器有权连接宿主机显示服务。",[54,30437,30438,30441,30444],{},[69,30439,30440],{"align":26163},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[69,30442,30443],{"align":26163},"挂载Wayland显示协议相关目录",[69,30445,30446],{"align":26163},"支持Wayland协议的图形显示。",[54,30448,30449,30452,30455],{},[69,30450,30451],{"align":26163},"–ulimit nofile=1024:524288",[69,30453,30454],{"align":26163},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[69,30456,30457],{"align":26163},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[54,30459,30460,30463,30466],{},[69,30461,30462],{"align":26163},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[69,30464,30465],{"align":26163},"挂载宿主机用户目录到容器内同名路径",[69,30467,30468],{"align":26163},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[54,30470,30471,30474,30477],{},[69,30472,30473],{"align":26163},"-w \u002Fhome\u002Ftungchiahui",[69,30475,30476],{"align":26163},"设置容器启动后的默认工作目录",[69,30478,30479],{"align":26163},"直接进入项目路径，方便执行命令2324。",[54,30481,30482,30485,30488],{},[69,30483,30484],{"align":26163},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[69,30486,30487],{"align":26163},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[69,30489,30490],{"align":26163},"提供预配置的深度学习与机器人开发环境。",[19,30492,30493,30494,30496,30497,30500],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[120,30495,26999],{},"加不加",[120,30498,30499],{},"sudo -E","都无所谓。",[19,30502,30503,30504,30506,30507,30509,30510,30513,30514,30516],{},"用户已经被加到docker组了，不用",[120,30505,26999],{},"也行跑，其次，",[120,30508,26999],{},"运行的话，你的",[120,30511,30512],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[120,30515,30512],{},"更不可能变了。",[113,30518,30520],{"className":328,"code":30519,"language":330,"meta":118,"style":118},"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",[120,30521,30522,30535,30545,30555,30567,30574,30581,30588,30598,30607,30616,30630,30642,30654,30663,30673,30682,30697,30730,30757,30768,30775],{"__ignoreMap":118},[123,30523,30524,30526,30528,30530,30533],{"class":125,"line":126},[123,30525,26999],{"class":337},[123,30527,28741],{"class":143},[123,30529,29651],{"class":143},[123,30531,30532],{"class":164}," --name=ros_opencv_cuda",[123,30534,27100],{"class":164},[123,30536,30537,30540,30543],{"class":125,"line":140},[123,30538,30539],{"class":129},"--gpus ",[123,30541,30542],{"class":143},"all",[123,30544,27100],{"class":164},[123,30546,30547,30550,30553],{"class":125,"line":156},[123,30548,30549],{"class":129},"-e ",[123,30551,30552],{"class":143},"NVIDIA_DRIVER_CAPABILITIES=all",[123,30554,27100],{"class":164},[123,30556,30557,30559,30562,30565],{"class":125,"line":168},[123,30558,30549],{"class":129},[123,30560,30561],{"class":143},"DISPLAY=",[123,30563,30564],{"class":129},"$DISPLAY ",[123,30566,28596],{"class":164},[123,30568,30569,30572],{"class":125,"line":268},[123,30570,30571],{"class":129},"-dit ",[123,30573,28596],{"class":164},[123,30575,30576,30579],{"class":125,"line":291},[123,30577,30578],{"class":129},"--privileged ",[123,30580,28596],{"class":164},[123,30582,30583,30586],{"class":125,"line":300},[123,30584,30585],{"class":129},"--net=host ",[123,30587,28596],{"class":164},[123,30589,30590,30593,30596],{"class":125,"line":305},[123,30591,30592],{"class":129},"--group-add ",[123,30594,30595],{"class":143},"audio",[123,30597,27100],{"class":164},[123,30599,30600,30602,30605],{"class":125,"line":316},[123,30601,30592],{"class":129},[123,30603,30604],{"class":143},"video",[123,30606,27100],{"class":164},[123,30608,30609,30611,30614],{"class":125,"line":673},[123,30610,30592],{"class":129},[123,30612,30613],{"class":143},"dialout",[123,30615,27100],{"class":164},[123,30617,30618,30620,30623,30625,30628],{"class":125,"line":692},[123,30619,30549],{"class":129},[123,30621,30622],{"class":143},"XAUTHORITY=",[123,30624,30512],{"class":129},[123,30626,30627],{"class":143},"\u002F.Xauthority",[123,30629,27100],{"class":164},[123,30631,30632,30634,30637,30640],{"class":125,"line":713},[123,30633,30549],{"class":129},[123,30635,30636],{"class":143},"WAYLAND_DISPLAY=",[123,30638,30639],{"class":129},"$WAYLAND_DISPLAY ",[123,30641,28596],{"class":164},[123,30643,30644,30646,30649,30652],{"class":125,"line":718},[123,30645,30549],{"class":129},[123,30647,30648],{"class":143},"XDG_RUNTIME_DIR=",[123,30650,30651],{"class":129},"$XDG_RUNTIME_DIR ",[123,30653,28596],{"class":164},[123,30655,30656,30658,30661],{"class":125,"line":1138},[123,30657,30549],{"class":129},[123,30659,30660],{"class":143},"QT_QPA_PLATFORM=xcb",[123,30662,27100],{"class":164},[123,30664,30665,30668,30671],{"class":125,"line":1429},[123,30666,30667],{"class":129},"-v ",[123,30669,30670],{"class":143},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[123,30672,27100],{"class":164},[123,30674,30675,30677,30680],{"class":125,"line":1439},[123,30676,30667],{"class":129},[123,30678,30679],{"class":143},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[123,30681,27100],{"class":164},[123,30683,30684,30687,30690,30692,30695],{"class":125,"line":1444},[123,30685,30686],{"class":129},"-v $HOME",[123,30688,30689],{"class":143},"\u002F.Xauthority:",[123,30691,30512],{"class":129},[123,30693,30694],{"class":143},"\u002F.Xauthority:ro",[123,30696,27100],{"class":164},[123,30698,30699,30701,30704,30706,30709,30712,30714,30717,30719,30721,30723,30725,30728],{"class":125,"line":1453},[123,30700,30667],{"class":129},[123,30702,30703],{"class":143},"\u002Frun\u002Fuser\u002F",[123,30705,27521],{"class":129},[123,30707,30708],{"class":337},"id",[123,30710,30711],{"class":164}," -u",[123,30713,3035],{"class":129},[123,30715,30716],{"class":143},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[123,30718,27521],{"class":129},[123,30720,30708],{"class":337},[123,30722,30711],{"class":164},[123,30724,3035],{"class":129},[123,30726,30727],{"class":143},"\u002Fwayland-0",[123,30729,27100],{"class":164},[123,30731,30732,30734,30736,30738,30740,30742,30744,30747,30749,30751,30753,30755],{"class":125,"line":1458},[123,30733,30667],{"class":129},[123,30735,30703],{"class":143},[123,30737,27521],{"class":129},[123,30739,30708],{"class":337},[123,30741,30711],{"class":164},[123,30743,3035],{"class":129},[123,30745,30746],{"class":143},":\u002Frun\u002Fuser\u002F",[123,30748,27521],{"class":129},[123,30750,30708],{"class":337},[123,30752,30711],{"class":164},[123,30754,1336],{"class":129},[123,30756,28596],{"class":164},[123,30758,30759,30761,30763,30766],{"class":125,"line":1476},[123,30760,30686],{"class":129},[123,30762,3460],{"class":143},[123,30764,30765],{"class":129},"$HOME ",[123,30767,28596],{"class":164},[123,30769,30770,30773],{"class":125,"line":1494},[123,30771,30772],{"class":129},"-w $HOME ",[123,30774,28596],{"class":164},[123,30776,30777],{"class":125,"line":1499},[123,30778,30779],{"class":129},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30781,11457],{},[26,30783,30784,30792,30795,30798],{},[29,30785,30786,16225,30788,30791],{},[120,30787,30552],{},[120,30789,30790],{},"--gpus all","没有英伟达显卡请注释。",[29,30793,30794],{},"--name后面请自己为容器起名。",[29,30796,30797],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30799,30800,30801,2494],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25980,30802,30803],{},[2759,30804,30805],{},"请不要加",[113,30807,30809],{"className":328,"code":30808,"language":330,"meta":118,"style":118},"--ulimit nofile=1024:524288 \\\n",[120,30810,30811],{"__ignoreMap":118},[123,30812,30813,30816,30819],{"class":125,"line":126},[123,30814,30815],{"class":337},"--ulimit",[123,30817,30818],{"class":143}," nofile=1024:524288",[123,30820,27100],{"class":164},[19,30822,30823,30824,30829],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25980,30825,30826],{},[2759,30827,30828],{},"不建议","**.**",[113,30831,30833],{"className":328,"code":30832,"language":330,"meta":118,"style":118},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[120,30834,30835,30862,30871],{"__ignoreMap":118},[123,30836,30837,30840,30843,30845,30847,30849,30851,30853,30855,30858,30860],{"class":125,"line":126},[123,30838,30839],{"class":337},"--user",[123,30841,30842],{"class":129}," $(",[123,30844,30708],{"class":337},[123,30846,30711],{"class":164},[123,30848,3035],{"class":129},[123,30850,3460],{"class":143},[123,30852,27521],{"class":129},[123,30854,30708],{"class":337},[123,30856,30857],{"class":164}," -g",[123,30859,1336],{"class":129},[123,30861,28596],{"class":164},[123,30863,30864,30866,30869],{"class":125,"line":140},[123,30865,30667],{"class":129},[123,30867,30868],{"class":143},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[123,30870,27100],{"class":164},[123,30872,30873,30875,30878],{"class":125,"line":156},[123,30874,30667],{"class":129},[123,30876,30877],{"class":143},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[123,30879,27100],{"class":164},[2526,30881,30882],{},"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":118,"searchDepth":140,"depth":140,"links":30884},[30885,30886,30887],{"id":29884,"depth":156,"text":29885},{"id":29894,"depth":156,"text":29895},{"id":30305,"depth":156,"text":30308},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29876,"description":118},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30894,"title":30895,"body":30896,"description":118,"extension":2545,"meta":32519,"navigation":231,"path":32520,"seo":32521,"stem":32522,"__hash__":32523},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30897,"toc":32514},[30898,30901,30905,30908,31130,31134,31138,31141,31247,31252,31255,31260,31263,31268,31271,31276,31279,31291,31294,31299,31306,31334,31341,31417,31422,31425,31448,31450,31525,31530,31533,31537,31545,31550,31555,31559,31570,31576,31579,31582,31606,31609,31612,31640,31643,31646,32111,32114,32119,32124,32128,32151,32156,32160,32164,32167,32170,32173,32200,32203,32206,32224,32227,32230,32252,32260,32265,32270,32274,32277,32280,32283,32286,32331,32334,32352,32355,32360,32363,32384,32387,32443,32446,32451,32455,32458,32465,32468,32471,32476,32479,32495,32498,32511],[10,30899,30895],{"id":30900},"_6手动创建docker镜像",[2587,30902,30904],{"id":30903},"_61dockerfile","6.1.DockerFile",[19,30906,30907],{},"常用命令：",[48,30909,30910,30921],{},[51,30911,30912],{},[54,30913,30914,30917,30919],{},[57,30915,30916],{"align":26163},"指令",[57,30918,28291],{"align":26163},[57,30920,29913],{"align":26163},[64,30922,30923,30933,30949,30960,30971,30982,30993,31004,31015,31029,31043,31054,31068,31079,31090,31104,31119],{},[54,30924,30925,30927,30930],{},[69,30926,29791],{"align":26163},[69,30928,30929],{"align":26163},"指定基础镜像，是 Dockerfile 的起点",[69,30931,30932],{"align":26163},"FROM ubuntu:22.04",[54,30934,30935,30938,30941],{},[69,30936,30937],{"align":26163},"LABEL",[69,30939,30940],{"align":26163},"添加元数据（如作者、版本等）",[69,30942,30943,30944,30948],{"align":26163},"LABEL maintainer=”",[2846,30945,30947],{"href":30946},"mailto:you@example.com","you@example.com","”",[54,30950,30951,30954,30957],{},[69,30952,30953],{"align":26163},"ENV",[69,30955,30956],{"align":26163},"设置环境变量",[69,30958,30959],{"align":26163},"ENV PORT=8080",[54,30961,30962,30965,30968],{},[69,30963,30964],{"align":26163},"ARG",[69,30966,30967],{"align":26163},"构建参数，只在构建期间可用",[69,30969,30970],{"align":26163},"ARG VERSION=1.0",[54,30972,30973,30976,30979],{},[69,30974,30975],{"align":26163},"RUN",[69,30977,30978],{"align":26163},"构建镜像时运行命令",[69,30980,30981],{"align":26163},"RUN apt-get update && apt-get install -y curl",[54,30983,30984,30987,30990],{},[69,30985,30986],{"align":26163},"COPY",[69,30988,30989],{"align":26163},"复制文件到镜像中",[69,30991,30992],{"align":26163},"COPY . \u002Fapp",[54,30994,30995,30998,31001],{},[69,30996,30997],{"align":26163},"ADD",[69,30999,31000],{"align":26163},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[69,31002,31003],{"align":26163},"ADD archive.tar.gz \u002Fdata\u002F",[54,31005,31006,31009,31012],{},[69,31007,31008],{"align":26163},"WORKDIR",[69,31010,31011],{"align":26163},"设置工作目录",[69,31013,31014],{"align":26163},"WORKDIR \u002Fopt",[54,31016,31017,31020,31023],{},[69,31018,31019],{"align":26163},"CMD",[69,31021,31022],{"align":26163},"设置容器启动时默认命令（可被 docker run 覆盖）",[69,31024,31025,31026],{"align":26163},"CMD ",[123,31027,31028],{},"“node”, “index.js”",[54,31030,31031,31034,31037],{},[69,31032,31033],{"align":26163},"ENTRYPOINT",[69,31035,31036],{"align":26163},"设置容器启动时固定命令（通常用于 CLI 工具等）",[69,31038,31039,31040],{"align":26163},"ENTRYPOINT ",[123,31041,31042],{},"“python3”",[54,31044,31045,31048,31051],{},[69,31046,31047],{"align":26163},"EXPOSE",[69,31049,31050],{"align":26163},"声明镜像内服务监听的端口（不会自动映射）",[69,31052,31053],{"align":26163},"EXPOSE 80",[54,31055,31056,31059,31062],{},[69,31057,31058],{"align":26163},"VOLUME",[69,31060,31061],{"align":26163},"声明数据卷挂载点",[69,31063,31064,31065],{"align":26163},"VOLUME ",[123,31066,31067],{},"“\u002Fdata”",[54,31069,31070,31073,31076],{},[69,31071,31072],{"align":26163},"USER",[69,31074,31075],{"align":26163},"设置后续命令执行的用户",[69,31077,31078],{"align":26163},"USER appuser",[54,31080,31081,31084,31087],{},[69,31082,31083],{"align":26163},"ONBUILD",[69,31085,31086],{"align":26163},"当镜像作为其他镜像基础镜像时触发的构建指令",[69,31088,31089],{"align":26163},"ONBUILD COPY . \u002Fsrc",[54,31091,31092,31095,31098],{},[69,31093,31094],{"align":26163},"SHELL",[69,31096,31097],{"align":26163},"更改默认 shell，比如将 sh -c 改为 bash -c",[69,31099,31100,31101],{"align":26163},"SHELL ",[123,31102,31103],{},"“\u002Fbin\u002Fbash”, “-c”",[54,31105,31106,31109,31112],{},[69,31107,31108],{"align":26163},"HEALTHCHECK",[69,31110,31111],{"align":26163},"定义容器运行时的健康检查命令",[69,31113,31114,31115],{"align":26163},"`HEALTHCHECK CMD curl –fail ",[2846,31116,31117],{"href":31117,"rel":31118},"http:\u002F\u002Flocalhost:8080",[26287],[54,31120,31121,31124,31127],{},[69,31122,31123],{"align":26163},"STOPSIGNAL",[69,31125,31126],{"align":26163},"容器停止时发送的信号",[69,31128,31129],{"align":26163},"STOPSIGNAL SIGKILL",[2587,31131,31133],{"id":31132},"_62自己创建容器","6.2.自己创建容器",[24425,31135,31137],{"id":31136},"_621手动创建","6.2.1.手动创建",[19,31139,31140],{},"在x86电脑上编译x86的：",[113,31142,31144],{"className":328,"code":31143,"language":330,"meta":118,"style":118},"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",[120,31145,31146,31162,31166,31179,31183,31196,31200,31213,31217,31230,31234],{"__ignoreMap":118},[123,31147,31148,31150,31153,31156,31159],{"class":125,"line":126},[123,31149,28974],{"class":337},[123,31151,31152],{"class":143}," build",[123,31154,31155],{"class":164}," -t",[123,31157,31158],{"class":143}," ros-melodic-cuda118-cudnn8-bionic:latest",[123,31160,31161],{"class":143}," .\n",[123,31163,31164],{"class":125,"line":140},[123,31165,232],{"emptyLinePlaceholder":231},[123,31167,31168,31170,31172,31174,31177],{"class":125,"line":156},[123,31169,28974],{"class":337},[123,31171,31152],{"class":143},[123,31173,31155],{"class":164},[123,31175,31176],{"class":143}," ros-noetic-focal:latest",[123,31178,31161],{"class":143},[123,31180,31181],{"class":125,"line":168},[123,31182,232],{"emptyLinePlaceholder":231},[123,31184,31185,31187,31189,31191,31194],{"class":125,"line":268},[123,31186,28974],{"class":337},[123,31188,31152],{"class":143},[123,31190,31155],{"class":164},[123,31192,31193],{"class":143}," ros-humble-jammy:latest",[123,31195,31161],{"class":143},[123,31197,31198],{"class":125,"line":291},[123,31199,232],{"emptyLinePlaceholder":231},[123,31201,31202,31204,31206,31208,31211],{"class":125,"line":300},[123,31203,28974],{"class":337},[123,31205,31152],{"class":143},[123,31207,31155],{"class":164},[123,31209,31210],{"class":143}," ros-jazzy-noble:latest",[123,31212,31161],{"class":143},[123,31214,31215],{"class":125,"line":305},[123,31216,232],{"emptyLinePlaceholder":231},[123,31218,31219,31221,31223,31225,31228],{"class":125,"line":316},[123,31220,28974],{"class":337},[123,31222,31152],{"class":143},[123,31224,31155],{"class":164},[123,31226,31227],{"class":143}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[123,31229,31161],{"class":143},[123,31231,31232],{"class":125,"line":673},[123,31233,232],{"emptyLinePlaceholder":231},[123,31235,31236,31238,31240,31242,31245],{"class":125,"line":692},[123,31237,28974],{"class":337},[123,31239,31152],{"class":143},[123,31241,31155],{"class":164},[123,31243,31244],{"class":143}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[123,31246,31161],{"class":143},[19,31248,31249],{},[3929,31250],{"alt":118,"src":31251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31253,31254],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31256,31257],{},[3929,31258],{"alt":118,"src":31259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31261,31262],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,31264,31265],{},[29,31266,31267],{},"创建 Docker Hub 账户",[19,31269,31270],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,31272,31273],{"start":140},[29,31274,31275],{},"登录 Docker Hub",[19,31277,31278],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[113,31280,31282],{"className":328,"code":31281,"language":330,"meta":118,"style":118},"docker login\n",[120,31283,31284],{"__ignoreMap":118},[123,31285,31286,31288],{"class":125,"line":126},[123,31287,28974],{"class":337},[123,31289,31290],{"class":143}," login\n",[19,31292,31293],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,31295,31296],{},[29,31297,31298],{},"为你的镜像打标签",[19,31300,31301,31302,31305],{},"Docker Hub 使用 ",[120,31303,31304],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[113,31307,31309],{"className":328,"code":31308,"language":330,"meta":118,"style":118},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[120,31310,31311],{"__ignoreMap":118},[123,31312,31313,31315,31318,31320,31323,31326,31329,31331],{"class":125,"line":126},[123,31314,28974],{"class":337},[123,31316,31317],{"class":143}," tag",[123,31319,31210],{"class":143},[123,31321,31322],{"class":133}," \u003C",[123,31324,31325],{"class":143},"你的用户",[123,31327,31328],{"class":129},"名",[123,31330,3559],{"class":133},[123,31332,31333],{"class":143},"\u002Fros-jazzy-noble:latest\n",[19,31335,31336,31337,31340],{},"例如，如果你的 Docker Hub 用户名是 ",[120,31338,31339],{},"tungchiahui","，你应该执行：",[113,31342,31344],{"className":328,"code":31343,"language":330,"meta":118,"style":118},"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",[120,31345,31346,31357,31361,31372,31376,31387,31391,31402,31406],{"__ignoreMap":118},[123,31347,31348,31350,31352,31354],{"class":125,"line":126},[123,31349,28974],{"class":337},[123,31351,31317],{"class":143},[123,31353,31176],{"class":143},[123,31355,31356],{"class":143}," tungchiahui\u002Fros-noetic-focal:latest\n",[123,31358,31359],{"class":125,"line":140},[123,31360,232],{"emptyLinePlaceholder":231},[123,31362,31363,31365,31367,31369],{"class":125,"line":156},[123,31364,28974],{"class":337},[123,31366,31317],{"class":143},[123,31368,31193],{"class":143},[123,31370,31371],{"class":143}," tungchiahui\u002Fros-humble-jammy:latest\n",[123,31373,31374],{"class":125,"line":168},[123,31375,232],{"emptyLinePlaceholder":231},[123,31377,31378,31380,31382,31384],{"class":125,"line":268},[123,31379,28974],{"class":337},[123,31381,31317],{"class":143},[123,31383,31210],{"class":143},[123,31385,31386],{"class":143}," tungchiahui\u002Fros-jazzy-noble:latest\n",[123,31388,31389],{"class":125,"line":291},[123,31390,232],{"emptyLinePlaceholder":231},[123,31392,31393,31395,31397,31399],{"class":125,"line":300},[123,31394,28974],{"class":337},[123,31396,31317],{"class":143},[123,31398,31227],{"class":143},[123,31400,31401],{"class":143}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[123,31403,31404],{"class":125,"line":305},[123,31405,232],{"emptyLinePlaceholder":231},[123,31407,31408,31410,31412,31414],{"class":125,"line":316},[123,31409,28974],{"class":337},[123,31411,31317],{"class":143},[123,31413,31244],{"class":143},[123,31415,31416],{"class":143}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,31418,31419],{"start":140},[29,31420,31421],{},"推送镜像到 Docker Hub",[19,31423,31424],{},"使用以下命令将镜像推送到 Docker Hub：",[113,31426,31428],{"className":328,"code":31427,"language":330,"meta":118,"style":118},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[120,31429,31430],{"__ignoreMap":118},[123,31431,31432,31434,31437,31439,31441,31443,31445],{"class":125,"line":126},[123,31433,28974],{"class":337},[123,31435,31436],{"class":143}," push",[123,31438,31322],{"class":133},[123,31440,31325],{"class":143},[123,31442,31328],{"class":129},[123,31444,3559],{"class":133},[123,31446,31447],{"class":143},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31449,17063],{},[113,31451,31453],{"className":328,"code":31452,"language":330,"meta":118,"style":118},"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",[120,31454,31455,31463,31467,31475,31479,31487,31491,31500,31504,31512,31516],{"__ignoreMap":118},[123,31456,31457,31459,31461],{"class":125,"line":126},[123,31458,28974],{"class":337},[123,31460,31436],{"class":143},[123,31462,31356],{"class":143},[123,31464,31465],{"class":125,"line":140},[123,31466,232],{"emptyLinePlaceholder":231},[123,31468,31469,31471,31473],{"class":125,"line":156},[123,31470,28974],{"class":337},[123,31472,31436],{"class":143},[123,31474,31371],{"class":143},[123,31476,31477],{"class":125,"line":168},[123,31478,232],{"emptyLinePlaceholder":231},[123,31480,31481,31483,31485],{"class":125,"line":268},[123,31482,28974],{"class":337},[123,31484,31436],{"class":143},[123,31486,31386],{"class":143},[123,31488,31489],{"class":125,"line":291},[123,31490,232],{"emptyLinePlaceholder":231},[123,31492,31493,31495,31497],{"class":125,"line":300},[123,31494,28974],{"class":337},[123,31496,31436],{"class":143},[123,31498,31499],{"class":143}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[123,31501,31502],{"class":125,"line":305},[123,31503,232],{"emptyLinePlaceholder":231},[123,31505,31506,31508,31510],{"class":125,"line":316},[123,31507,28974],{"class":337},[123,31509,31436],{"class":143},[123,31511,31416],{"class":143},[123,31513,31514],{"class":125,"line":673},[123,31515,232],{"emptyLinePlaceholder":231},[123,31517,31518,31520,31522],{"class":125,"line":692},[123,31519,28974],{"class":337},[123,31521,31436],{"class":143},[123,31523,31524],{"class":143}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,31526,31527],{"start":156},[29,31528,31529],{},"验证推送成功",[19,31531,31532],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31534,31535],{},[2759,31536,6223],{},[3606,31538,31539,31542],{},[29,31540,31541],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,31543,31544],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31546,31547],{},[3929,31548],{"alt":118,"src":31549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31551,31552],{},[3929,31553],{"alt":118,"src":31554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24425,31556,31558],{"id":31557},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31560,31561,31562,31565,31566,31569],{},"如果您想在 ",[2759,31563,31564],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2759,31567,31568],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31571,31572,31573],{},"1. ",[2759,31574,31575],{},"启用 Docker 跨平台构建",[19,31577,31578],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31580,31581],{},"第一步：启用 buildx（只需执行一次）",[113,31583,31585],{"className":328,"code":31584,"language":330,"meta":118,"style":118},"docker buildx create --name multiarch_builder --use\n",[120,31586,31587],{"__ignoreMap":118},[123,31588,31589,31591,31594,31597,31600,31603],{"class":125,"line":126},[123,31590,28974],{"class":337},[123,31592,31593],{"class":143}," buildx",[123,31595,31596],{"class":143}," create",[123,31598,31599],{"class":164}," --name",[123,31601,31602],{"class":143}," multiarch_builder",[123,31604,31605],{"class":164}," --use\n",[19,31607,31608],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31610,31611],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[113,31613,31615],{"className":328,"code":31614,"language":330,"meta":118,"style":118},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[120,31616,31617],{"__ignoreMap":118},[123,31618,31619,31621,31623,31625,31628,31631,31634,31637],{"class":125,"line":126},[123,31620,28974],{"class":337},[123,31622,29651],{"class":143},[123,31624,29654],{"class":164},[123,31626,31627],{"class":164}," --privileged",[123,31629,31630],{"class":143}," multiarch\u002Fqemu-user-static",[123,31632,31633],{"class":164}," --reset",[123,31635,31636],{"class":164}," -p",[123,31638,31639],{"class":143}," yes\n",[19,31641,31642],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31644,31645],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[113,31647,31649],{"className":328,"code":31648,"language":330,"meta":118,"style":118},"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",[120,31650,31651,31693,31697,31702,31712,31722,31731,31737,31741,31745,31755,31763,31772,31778,31782,31786,31796,31804,31813,31819,31823,31827,31837,31845,31854,31860,31864,31868,31878,31886,31895,31901,31905,31909,31919,31927,31936,31942,31946,31950,31960,31968,31977,31983,31987,31991,32001,32009,32018,32024,32028,32032,32042,32050,32059,32065,32069,32073,32084,32092,32101,32107],{"__ignoreMap":118},[123,31652,31653,31655,31657,31659,31662,31665,31667,31669,31672,31674,31676,31678,31680,31683,31686,31688,31691],{"class":125,"line":126},[123,31654,28974],{"class":337},[123,31656,31593],{"class":143},[123,31658,31152],{"class":143},[123,31660,31661],{"class":164}," --platform",[123,31663,31664],{"class":143}," linux\u002Famd64,linux\u002Farm64",[123,31666,31155],{"class":164},[123,31668,31322],{"class":133},[123,31670,31671],{"class":143},"你的镜像",[123,31673,31328],{"class":129},[123,31675,3559],{"class":133},[123,31677,3460],{"class":143},[123,31679,3509],{"class":133},[123,31681,31682],{"class":143},"标",[123,31684,31685],{"class":129},"签",[123,31687,3559],{"class":133},[123,31689,31690],{"class":164}," --push",[123,31692,31161],{"class":143},[123,31694,31695],{"class":125,"line":140},[123,31696,232],{"emptyLinePlaceholder":231},[123,31698,31699],{"class":125,"line":156},[123,31700,31701],{"class":2673},"# 例子：\n",[123,31703,31704,31706,31708,31710],{"class":125,"line":168},[123,31705,28974],{"class":337},[123,31707,31593],{"class":143},[123,31709,31152],{"class":143},[123,31711,27100],{"class":164},[123,31713,31714,31717,31720],{"class":125,"line":268},[123,31715,31716],{"class":129},"--platform ",[123,31718,31719],{"class":143},"linux\u002Famd64,linux\u002Farm64",[123,31721,27100],{"class":164},[123,31723,31724,31726,31729],{"class":125,"line":291},[123,31725,31155],{"class":164},[123,31727,31728],{"class":143}," tungchiahui\u002Fros:noetic-focal",[123,31730,27100],{"class":164},[123,31732,31733,31735],{"class":125,"line":300},[123,31734,31690],{"class":164},[123,31736,27100],{"class":164},[123,31738,31739],{"class":125,"line":305},[123,31740,31161],{"class":143},[123,31742,31743],{"class":125,"line":316},[123,31744,232],{"emptyLinePlaceholder":231},[123,31746,31747,31749,31751,31753],{"class":125,"line":673},[123,31748,28974],{"class":337},[123,31750,31593],{"class":143},[123,31752,31152],{"class":143},[123,31754,27100],{"class":164},[123,31756,31757,31759,31761],{"class":125,"line":692},[123,31758,31716],{"class":129},[123,31760,31719],{"class":143},[123,31762,27100],{"class":164},[123,31764,31765,31767,31770],{"class":125,"line":713},[123,31766,31155],{"class":164},[123,31768,31769],{"class":143}," tungchiahui\u002Fros:humble-jammy",[123,31771,27100],{"class":164},[123,31773,31774,31776],{"class":125,"line":718},[123,31775,31690],{"class":164},[123,31777,27100],{"class":164},[123,31779,31780],{"class":125,"line":1138},[123,31781,31161],{"class":143},[123,31783,31784],{"class":125,"line":1429},[123,31785,232],{"emptyLinePlaceholder":231},[123,31787,31788,31790,31792,31794],{"class":125,"line":1439},[123,31789,28974],{"class":337},[123,31791,31593],{"class":143},[123,31793,31152],{"class":143},[123,31795,27100],{"class":164},[123,31797,31798,31800,31802],{"class":125,"line":1444},[123,31799,31716],{"class":129},[123,31801,31719],{"class":143},[123,31803,27100],{"class":164},[123,31805,31806,31808,31811],{"class":125,"line":1453},[123,31807,31155],{"class":164},[123,31809,31810],{"class":143}," tungchiahui\u002Fros:jazzy-noble",[123,31812,27100],{"class":164},[123,31814,31815,31817],{"class":125,"line":1458},[123,31816,31690],{"class":164},[123,31818,27100],{"class":164},[123,31820,31821],{"class":125,"line":1476},[123,31822,31161],{"class":143},[123,31824,31825],{"class":125,"line":1494},[123,31826,232],{"emptyLinePlaceholder":231},[123,31828,31829,31831,31833,31835],{"class":125,"line":1499},[123,31830,28741],{"class":337},[123,31832,31593],{"class":143},[123,31834,31152],{"class":143},[123,31836,27100],{"class":164},[123,31838,31839,31841,31843],{"class":125,"line":1517},[123,31840,31716],{"class":129},[123,31842,31719],{"class":143},[123,31844,27100],{"class":164},[123,31846,31847,31849,31852],{"class":125,"line":1534},[123,31848,31155],{"class":164},[123,31850,31851],{"class":143}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[123,31853,27100],{"class":164},[123,31855,31856,31858],{"class":125,"line":1539},[123,31857,31690],{"class":164},[123,31859,27100],{"class":164},[123,31861,31862],{"class":125,"line":2080},[123,31863,31161],{"class":143},[123,31865,31866],{"class":125,"line":2097},[123,31867,232],{"emptyLinePlaceholder":231},[123,31869,31870,31872,31874,31876],{"class":125,"line":2114},[123,31871,28974],{"class":337},[123,31873,31593],{"class":143},[123,31875,31152],{"class":143},[123,31877,27100],{"class":164},[123,31879,31880,31882,31884],{"class":125,"line":2125},[123,31881,31716],{"class":129},[123,31883,31719],{"class":143},[123,31885,27100],{"class":164},[123,31887,31888,31890,31893],{"class":125,"line":2130},[123,31889,31155],{"class":164},[123,31891,31892],{"class":143}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[123,31894,27100],{"class":164},[123,31896,31897,31899],{"class":125,"line":5033},[123,31898,31690],{"class":164},[123,31900,27100],{"class":164},[123,31902,31903],{"class":125,"line":5041},[123,31904,31161],{"class":143},[123,31906,31907],{"class":125,"line":5046},[123,31908,232],{"emptyLinePlaceholder":231},[123,31910,31911,31913,31915,31917],{"class":125,"line":5052},[123,31912,28741],{"class":337},[123,31914,31593],{"class":143},[123,31916,31152],{"class":143},[123,31918,27100],{"class":164},[123,31920,31921,31923,31925],{"class":125,"line":5058},[123,31922,31716],{"class":129},[123,31924,31719],{"class":143},[123,31926,27100],{"class":164},[123,31928,31929,31931,31934],{"class":125,"line":5063},[123,31930,31155],{"class":164},[123,31932,31933],{"class":143}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[123,31935,27100],{"class":164},[123,31937,31938,31940],{"class":125,"line":10380},[123,31939,31690],{"class":164},[123,31941,27100],{"class":164},[123,31943,31944],{"class":125,"line":10404},[123,31945,31161],{"class":143},[123,31947,31948],{"class":125,"line":10409},[123,31949,232],{"emptyLinePlaceholder":231},[123,31951,31952,31954,31956,31958],{"class":125,"line":10415},[123,31953,28974],{"class":337},[123,31955,31593],{"class":143},[123,31957,31152],{"class":143},[123,31959,27100],{"class":164},[123,31961,31962,31964,31966],{"class":125,"line":10442},[123,31963,31716],{"class":129},[123,31965,31719],{"class":143},[123,31967,27100],{"class":164},[123,31969,31970,31972,31975],{"class":125,"line":10447},[123,31971,31155],{"class":164},[123,31973,31974],{"class":143}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[123,31976,27100],{"class":164},[123,31978,31979,31981],{"class":125,"line":10453},[123,31980,31690],{"class":164},[123,31982,27100],{"class":164},[123,31984,31985],{"class":125,"line":10465},[123,31986,31161],{"class":143},[123,31988,31989],{"class":125,"line":10477},[123,31990,232],{"emptyLinePlaceholder":231},[123,31992,31993,31995,31997,31999],{"class":125,"line":10489},[123,31994,28974],{"class":337},[123,31996,31593],{"class":143},[123,31998,31152],{"class":143},[123,32000,27100],{"class":164},[123,32002,32003,32005,32007],{"class":125,"line":12148},[123,32004,31716],{"class":129},[123,32006,31719],{"class":143},[123,32008,27100],{"class":164},[123,32010,32011,32013,32016],{"class":125,"line":12173},[123,32012,31155],{"class":164},[123,32014,32015],{"class":143}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[123,32017,27100],{"class":164},[123,32019,32020,32022],{"class":125,"line":12196},[123,32021,31690],{"class":164},[123,32023,27100],{"class":164},[123,32025,32026],{"class":125,"line":12220},[123,32027,31161],{"class":143},[123,32029,32030],{"class":125,"line":12225},[123,32031,232],{"emptyLinePlaceholder":231},[123,32033,32034,32036,32038,32040],{"class":125,"line":12230},[123,32035,28741],{"class":337},[123,32037,31593],{"class":143},[123,32039,31152],{"class":143},[123,32041,27100],{"class":164},[123,32043,32044,32046,32048],{"class":125,"line":12235},[123,32045,31716],{"class":129},[123,32047,31719],{"class":143},[123,32049,27100],{"class":164},[123,32051,32052,32054,32057],{"class":125,"line":12244},[123,32053,31155],{"class":164},[123,32055,32056],{"class":143}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[123,32058,27100],{"class":164},[123,32060,32061,32063],{"class":125,"line":12249},[123,32062,31690],{"class":164},[123,32064,27100],{"class":164},[123,32066,32067],{"class":125,"line":12255},[123,32068,31161],{"class":143},[123,32070,32071],{"class":125,"line":12276},[123,32072,232],{"emptyLinePlaceholder":231},[123,32074,32075,32078,32080,32082],{"class":125,"line":12282},[123,32076,32077],{"class":337},"  docker",[123,32079,31593],{"class":143},[123,32081,31152],{"class":143},[123,32083,27100],{"class":164},[123,32085,32086,32088,32090],{"class":125,"line":12296},[123,32087,31716],{"class":129},[123,32089,31719],{"class":143},[123,32091,27100],{"class":164},[123,32093,32094,32096,32099],{"class":125,"line":12302},[123,32095,31155],{"class":164},[123,32097,32098],{"class":143}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[123,32100,27100],{"class":164},[123,32102,32103,32105],{"class":125,"line":12329},[123,32104,31690],{"class":164},[123,32106,27100],{"class":164},[123,32108,32109],{"class":125,"line":12338},[123,32110,31161],{"class":143},[19,32112,32113],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,32115,32116],{},[3929,32117],{"alt":118,"src":32118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,32120,32121],{},[3929,32122],{"alt":118,"src":32123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24425,32125,32127],{"id":32126},"_623清除构建缓存","6.2.3.清除构建缓存",[113,32129,32131],{"className":328,"code":32130,"language":330,"meta":118,"style":118},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[120,32132,32133,32138],{"__ignoreMap":118},[123,32134,32135],{"class":125,"line":126},[123,32136,32137],{"class":2673},"# 清理BuildKit构建缓存\n",[123,32139,32140,32142,32145,32148],{"class":125,"line":140},[123,32141,28974],{"class":337},[123,32143,32144],{"class":143}," builder",[123,32146,32147],{"class":143}," prune",[123,32149,32150],{"class":164}," -f\n",[19,32152,32153],{},[3929,32154],{"alt":118,"src":32155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[2587,32157,32159],{"id":32158},"_63补充","6.3.补充",[24425,32161,32163],{"id":32162},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,32165,32166],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,32168,32169],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,32171,32172],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[113,32174,32176],{"className":328,"code":32175,"language":330,"meta":118,"style":118},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[120,32177,32178,32185],{"__ignoreMap":118},[123,32179,32180,32182],{"class":125,"line":126},[123,32181,29791],{"class":337},[123,32183,32184],{"class":143}," nginx\n",[123,32186,32187,32189,32192,32195,32197],{"class":125,"line":140},[123,32188,30975],{"class":337},[123,32190,32191],{"class":143}," echo",[123,32193,32194],{"class":143}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[123,32196,28643],{"class":133},[123,32198,32199],{"class":143}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32201,32202],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32204,32205],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[113,32207,32209],{"className":328,"code":32208,"language":330,"meta":118,"style":118},"docker build -t nginx:tuling .\n",[120,32210,32211],{"__ignoreMap":118},[123,32212,32213,32215,32217,32219,32222],{"class":125,"line":126},[123,32214,28974],{"class":337},[123,32216,31152],{"class":143},[123,32218,31155],{"class":164},[123,32220,32221],{"class":143}," nginx:tuling",[123,32223,31161],{"class":143},[19,32225,32226],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32228,32229],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[113,32231,32233],{"className":328,"code":32232,"language":330,"meta":118,"style":118},"docker run -d -p 92:80 nginx:tuling\n",[120,32234,32235],{"__ignoreMap":118},[123,32236,32237,32239,32241,32244,32246,32249],{"class":125,"line":126},[123,32238,28974],{"class":337},[123,32240,29651],{"class":143},[123,32242,32243],{"class":164}," -d",[123,32245,31636],{"class":164},[123,32247,32248],{"class":143}," 92:80",[123,32250,32251],{"class":143}," nginx:tuling\n",[19,32253,32254,32255],{},"4、访问 ",[2846,32256,32259],{"href":32257,"rel":32258},"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",[26287],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32261,32262],{},[3929,32263],{"alt":118,"src":32264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32266,32267],{},[3929,32268],{"alt":118,"src":32269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24425,32271,32273],{"id":32272},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32275,32276],{},"只需要知道大体流程即可",[19,32278,32279],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32281,32282],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32284,32285],{},"2、在Dockerfile中添加以下内容",[113,32287,32289],{"className":28512,"code":32288,"language":28514,"meta":118,"style":118},"# 基于哪个镜像\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",[120,32290,32291,32296,32301,32306,32311,32316,32321,32326],{"__ignoreMap":118},[123,32292,32293],{"class":125,"line":126},[123,32294,32295],{},"# 基于哪个镜像\n",[123,32297,32298],{"class":125,"line":140},[123,32299,32300],{},"From java:8\n",[123,32302,32303],{"class":125,"line":156},[123,32304,32305],{},"# 复制文件到容器\n",[123,32307,32308],{"class":125,"line":168},[123,32309,32310],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[123,32312,32313],{"class":125,"line":268},[123,32314,32315],{},"# 声明需要暴露的端口\n",[123,32317,32318],{"class":125,"line":291},[123,32319,32320],{},"EXPOSE 8877\n",[123,32322,32323],{"class":125,"line":300},[123,32324,32325],{},"# 配置容器启动后执行的命令\n",[123,32327,32328],{"class":125,"line":305},[123,32329,32330],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32332,32333],{},"3、使用docker build命令构建镜像",[113,32335,32337],{"className":328,"code":32336,"language":330,"meta":118,"style":118},"docker build -t tulingmall-member:0.0.5 .\n",[120,32338,32339],{"__ignoreMap":118},[123,32340,32341,32343,32345,32347,32350],{"class":125,"line":126},[123,32342,28974],{"class":337},[123,32344,31152],{"class":143},[123,32346,31155],{"class":164},[123,32348,32349],{"class":143}," tulingmall-member:0.0.5",[123,32351,31161],{"class":143},[19,32353,32354],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32356,32357],{},[3929,32358],{"alt":118,"src":32359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32361,32362],{},"4、启动镜像，加-d可在后台启动",[113,32364,32366],{"className":328,"code":32365,"language":330,"meta":118,"style":118},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[120,32367,32368],{"__ignoreMap":118},[123,32369,32370,32372,32374,32376,32378,32381],{"class":125,"line":126},[123,32371,28974],{"class":337},[123,32373,29651],{"class":143},[123,32375,32243],{"class":164},[123,32377,31636],{"class":164},[123,32379,32380],{"class":143}," 8877:8877",[123,32382,32383],{"class":143}," tulingmall-member:0.0.5\n",[19,32385,32386],{},"加上JVM参数：",[113,32388,32390],{"className":328,"code":32389,"language":330,"meta":118,"style":118},"# --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",[120,32391,32392,32397,32412,32422,32431,32438],{"__ignoreMap":118},[123,32393,32394],{"class":125,"line":126},[123,32395,32396],{"class":2673},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[123,32398,32399,32401,32403,32406,32408,32410],{"class":125,"line":140},[123,32400,28974],{"class":337},[123,32402,29651],{"class":143},[123,32404,32405],{"class":164},"  -d",[123,32407,31636],{"class":164},[123,32409,32380],{"class":143},[123,32411,27100],{"class":164},[123,32413,32414,32416,32419],{"class":125,"line":156},[123,32415,30549],{"class":129},[123,32417,32418],{"class":143},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[123,32420,32421],{"class":164},"  \\\n",[123,32423,32424,32426,32429],{"class":125,"line":168},[123,32425,30549],{"class":129},[123,32427,32428],{"class":143},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[123,32430,32421],{"class":164},[123,32432,32433,32436],{"class":125,"line":268},[123,32434,32435],{"class":129},"--cap-add=SYS_PTRACE  ",[123,32437,28596],{"class":164},[123,32439,32440],{"class":125,"line":291},[123,32441,32442],{"class":129},"tulingmall-member:0.0.5\n",[19,32444,32445],{},"5、访问会员服务接口",[19,32447,32448],{},[3929,32449],{"alt":118,"src":32450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24425,32452,32454],{"id":32453},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32456,32457],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32459,32460,32461],{},"阿里云docker镜像仓库：",[2846,32462,32463],{"href":32463,"rel":32464},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26287],[19,32466,32467],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32469,32470],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32472,32473],{},[3929,32474],{"alt":118,"src":32475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32477,32478],{},"要把镜像推送到镜像仓库",[113,32480,32482],{"className":328,"code":32481,"language":330,"meta":118,"style":118},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[120,32483,32484],{"__ignoreMap":118},[123,32485,32486,32488,32490,32492],{"class":125,"line":126},[123,32487,28974],{"class":337},[123,32489,31317],{"class":143},[123,32491,32349],{"class":143},[123,32493,32494],{"class":143}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32496,32497],{},"最后将镜像推送到远程仓库",[113,32499,32501],{"className":328,"code":32500,"language":330,"meta":118,"style":118},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[120,32502,32503],{"__ignoreMap":118},[123,32504,32505,32507,32509],{"class":125,"line":126},[123,32506,28974],{"class":337},[123,32508,31436],{"class":143},[123,32510,32494],{"class":143},[2526,32512,32513],{},"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":118,"searchDepth":140,"depth":140,"links":32515},[32516,32517,32518],{"id":30903,"depth":156,"text":30904},{"id":31132,"depth":156,"text":31133},{"id":32158,"depth":156,"text":32159},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30895,"description":118},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32525,"title":32526,"body":32527,"description":118,"extension":2545,"meta":32670,"navigation":231,"path":32671,"seo":32672,"stem":32673,"__hash__":32674},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32528,"toc":32668},[32529,32532,32537,32542,32545,32550,32555,32558,32563,32568,32571,32576,32579,32582,32585,32588,32591,32594,32614,32636,32639,32642,32662,32665],[10,32530,32526],{"id":32531},"_7vscode远程开发",[26,32533,32534],{},[29,32535,32536],{},"插件1：微软Docker工具",[19,32538,32539],{},[3929,32540],{"alt":118,"src":32541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32543,32544],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32546,32547],{},[3929,32548],{"alt":118,"src":32549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,32551,32552],{"start":140},[29,32553,32554],{},"插件2：微软Docker远程开发工具",[19,32556,32557],{},"下面这是远程开发的插件。",[19,32559,32560],{},[3929,32561],{"alt":118,"src":32562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32564,32565],{},[3929,32566],{"alt":118,"src":32567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32569,32570],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32572,32573],{},[3929,32574],{"alt":118,"src":32575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32577,32578],{},"安装完拓展之后，vscode进行链接：",[19,32580,32581],{},"1.按ctrl+shift+p",[19,32583,32584],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32586,32587],{},"3.选择目前运行的容器",[19,32589,32590],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32592,32593],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[113,32595,32597],{"className":328,"code":32596,"language":330,"meta":118,"style":118},"docker run -v 主机目录:容器目录 image-name\n",[120,32598,32599],{"__ignoreMap":118},[123,32600,32601,32603,32605,32608,32611],{"class":125,"line":126},[123,32602,28974],{"class":337},[123,32604,29651],{"class":143},[123,32606,32607],{"class":164}," -v",[123,32609,32610],{"class":143}," 主机目录:容器目录",[123,32612,32613],{"class":143}," image-name\n",[113,32615,32617],{"className":328,"code":32616,"language":330,"meta":118,"style":118},"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",[120,32618,32619],{"__ignoreMap":118},[123,32620,32621,32623,32625,32628,32630,32633],{"class":125,"line":126},[123,32622,28974],{"class":337},[123,32624,29651],{"class":143},[123,32626,32627],{"class":164}," -it",[123,32629,32607],{"class":164},[123,32631,32632],{"class":143}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[123,32634,32635],{"class":143}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32637,32638],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32640,32641],{},"查看挂载情况：",[113,32643,32645],{"className":328,"code":32644,"language":330,"meta":118,"style":118},"mount | grep -i project\n",[120,32646,32647],{"__ignoreMap":118},[123,32648,32649,32652,32654,32657,32659],{"class":125,"line":126},[123,32650,32651],{"class":337},"mount",[123,32653,27531],{"class":133},[123,32655,32656],{"class":337}," grep",[123,32658,28851],{"class":164},[123,32660,32661],{"class":143}," project\n",[19,32663,32664],{},"也可以通过ls来进行查看",[2526,32666,32667],{},"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":118,"searchDepth":140,"depth":140,"links":32669},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32526,"description":118},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32676,"title":32677,"body":32678,"description":2544,"extension":2545,"meta":32682,"navigation":231,"path":32684,"seo":32685,"stem":32686,"__hash__":32687},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32679,"toc":32680},[],{"title":118,"searchDepth":140,"depth":140,"links":32681},[],{"category":32683},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32677,"description":2544},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32689,"title":32690,"body":32691,"description":2544,"extension":2545,"meta":32695,"navigation":231,"path":32696,"seo":32697,"stem":32698,"__hash__":32699},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32692,"toc":32693},[],{"title":118,"searchDepth":140,"depth":140,"links":32694},[],{"category":32683},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32690,"description":2544},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32701,"title":32702,"body":32703,"description":2544,"extension":2545,"meta":32992,"navigation":231,"path":32993,"seo":32994,"stem":32995,"__hash__":32996},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32704,"toc":32990},[32705,32708,32716,32731,32736,32787,32790,32796,32979,32984,32987],[10,32706,32702],{"id":32707},"_1验证深度学习环境",[19,32709,32710,32711],{},"关于环境的安装，看",[2846,32712,32715],{"href":32713,"rel":32714},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26287],"Pytorch-->深度学习",[19,32717,32718,32719,32722,32723,32726,32727,32730],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[120,32720,32721],{},"pytorch-cuda=12.4"," 是一个“ ",[2759,32724,32725],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2759,32728,32729],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32732,32733],{},[3929,32734],{"alt":118,"src":32735},"\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",[113,32737,32739],{"className":328,"code":32738,"language":330,"meta":118,"style":118},"# 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",[120,32740,32741,32746],{"__ignoreMap":118},[123,32742,32743],{"class":125,"line":126},[123,32744,32745],{"class":2673},"# CUDA 12.4\n",[123,32747,32748,32751,32753,32756,32759,32762,32765,32768,32770,32773,32776,32779,32782,32784],{"class":125,"line":140},[123,32749,32750],{"class":337},"conda",[123,32752,341],{"class":143},[123,32754,32755],{"class":143}," pytorch==",[123,32757,32758],{"class":164},"2.5.1",[123,32760,32761],{"class":143}," torchvision==",[123,32763,32764],{"class":164},"0.20.1",[123,32766,32767],{"class":143}," torchaudio==",[123,32769,32758],{"class":164},[123,32771,32772],{"class":143}," pytorch-cuda=",[123,32774,32775],{"class":164},"12.4",[123,32777,32778],{"class":164}," -c",[123,32780,32781],{"class":143}," pytorch",[123,32783,32778],{"class":164},[123,32785,32786],{"class":143}," nvidia\n",[19,32788,32789],{},"）：",[19,32791,32792],{},[2846,32793,32794],{"href":32794,"rel":32795},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26287],[113,32797,32799],{"className":115,"code":32798,"language":117,"meta":118,"style":118},"# 对深度学习环境进行测试\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",[120,32800,32801,32806,32813,32818,32828,32843,32848,32858,32895,32902,32914,32930,32935,32945,32957,32967],{"__ignoreMap":118},[123,32802,32803],{"class":125,"line":126},[123,32804,32805],{"class":2673},"# 对深度学习环境进行测试\n",[123,32807,32808,32810],{"class":125,"line":140},[123,32809,223],{"class":133},[123,32811,32812],{"class":129}," torch\n",[123,32814,32815],{"class":125,"line":156},[123,32816,32817],{"class":2673},"# 查看cuda是否被激活\n",[123,32819,32820,32823,32825],{"class":125,"line":168},[123,32821,32822],{"class":129},"flag",[123,32824,134],{"class":133},[123,32826,32827],{"class":129},"torch.cuda.is_available()\n",[123,32829,32830,32832,32834,32837,32840],{"class":125,"line":268},[123,32831,294],{"class":164},[123,32833,1315],{"class":129},[123,32835,32836],{"class":143},"\"cuda:\"",[123,32838,32839],{"class":129},", flag)   ",[123,32841,32842],{"class":2673},"#返回true的话说明被激活\n",[123,32844,32845],{"class":125,"line":291},[123,32846,32847],{"class":2673},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[123,32849,32850,32853,32855],{"class":125,"line":300},[123,32851,32852],{"class":129},"ngpu",[123,32854,134],{"class":133},[123,32856,32857],{"class":164},"1\n",[123,32859,32860,32863,32865,32868,32871,32873,32876,32879,32882,32884,32886,32888,32890,32893],{"class":125,"line":305},[123,32861,32862],{"class":129},"device",[123,32864,134],{"class":133},[123,32866,32867],{"class":129},"torch.device(",[123,32869,32870],{"class":143},"\"cuda:0\"",[123,32872,4158],{"class":133},[123,32874,32875],{"class":129},"(torch.cuda.is_available() ",[123,32877,32878],{"class":133},"and",[123,32880,32881],{"class":129}," ngpu",[123,32883,3559],{"class":133},[123,32885,2799],{"class":164},[123,32887,1336],{"class":129},[123,32889,4155],{"class":133},[123,32891,32892],{"class":143}," \"cpu\"",[123,32894,288],{"class":129},[123,32896,32897,32899],{"class":125,"line":316},[123,32898,294],{"class":164},[123,32900,32901],{"class":129},"(device)\n",[123,32903,32904,32906,32909,32911],{"class":125,"line":673},[123,32905,294],{"class":164},[123,32907,32908],{"class":129},"(torch.cuda.get_device_name(",[123,32910,2799],{"class":164},[123,32912,32913],{"class":129},"))\n",[123,32915,32916,32918,32921,32923,32925,32927],{"class":125,"line":692},[123,32917,294],{"class":164},[123,32919,32920],{"class":129},"(torch.rand(",[123,32922,2686],{"class":164},[123,32924,2985],{"class":129},[123,32926,2686],{"class":164},[123,32928,32929],{"class":129},").cuda())\n",[123,32931,32932],{"class":125,"line":713},[123,32933,32934],{"class":2673},"# 查看cuda和cudnn的版本\n",[123,32936,32937,32940,32942],{"class":125,"line":718},[123,32938,32939],{"class":129},"cuda_version",[123,32941,134],{"class":133},[123,32943,32944],{"class":129},"torch.version.cuda\n",[123,32946,32947,32949,32951,32954],{"class":125,"line":1138},[123,32948,294],{"class":164},[123,32950,1315],{"class":129},[123,32952,32953],{"class":143},"\"cuda version\"",[123,32955,32956],{"class":129},",cuda_version)\n",[123,32958,32959,32962,32964],{"class":125,"line":1429},[123,32960,32961],{"class":129},"cudnn_version",[123,32963,134],{"class":133},[123,32965,32966],{"class":129},"torch.backends.cudnn.version()\n",[123,32968,32969,32971,32973,32976],{"class":125,"line":1439},[123,32970,294],{"class":164},[123,32972,1315],{"class":129},[123,32974,32975],{"class":143},"\"cudnn version\"",[123,32977,32978],{"class":129},",cudnn_version)\n",[19,32980,32981],{},[3929,32982],{"alt":118,"src":32983},"\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,32985,32986],{},"cuda:0 指的是一块显卡",[2526,32988,32989],{},"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":118,"searchDepth":140,"depth":140,"links":32991},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32702,"description":2544},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32998,"title":32999,"body":33000,"description":2544,"extension":2545,"meta":52795,"navigation":231,"path":52796,"seo":52797,"stem":52798,"__hash__":52799},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33001,"toc":52789},[33002,33005,33009,33013,33016,33021,33026,33029,33034,33039,33044,33047,33051,33056,33060,33065,33068,33073,33076,33079,33082,33085,33090,33093,33098,33103,33108,33113,33116,33120,33123,33128,33731,33736,33739,33744,33747,33750,34211,34214,34217,34220,34223,36273,36276,36281,36286,37080,37083,37088,37866,37870,39529,39533,40247,40251,40255,40260,40265,40270,40273,40278,40283,40288,40293,40298,40302,40307,41587,41592,41595,41598,41601,41756,41759,41762,42978,42983,43678,43682,43686,43691,43696,43699,43704,43709,43714,43719,43724,43729,43734,43739,43744,43749,43754,43759,43764,43769,43774,43779,43784,43789,43794,43799,43804,43809,43814,43819,43824,43829,43834,43839,43844,43849,43853,43857,43860,45338,45342,46989,46993,47687,47691,47694,47697,48240,48243,48247,48250,49647,49651,49654,50232,52019,52023,52026,52786],[10,33003,32999],{"id":33004},"_2经典神经网络",[2587,33006,33008],{"id":33007},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24425,33010,33012],{"id":33011},"_211原理介绍","2.1.1.原理介绍",[19,33014,33015],{},"LeNet-5",[26,33017,33018],{},[29,33019,33020],{},"原理",[19,33022,33023],{},[3929,33024],{"alt":118,"src":33025},"\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,33027,33028],{},"B是batch批次；C是channel通道",[26,33030,33031],{"start":140},[29,33032,33033],{},"网络参数详细",[19,33035,33036],{},[3929,33037],{"alt":118,"src":33038},"\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,33040,33041],{},[3929,33042],{"alt":118,"src":33043},"\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,33045,33046],{},"AlexNet",[26,33048,33049],{},[29,33050,33020],{},[19,33052,33053],{},[3929,33054],{"alt":118,"src":33055},"\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",[26,33057,33058],{"start":140},[29,33059,33033],{},[19,33061,33062],{},[3929,33063],{"alt":118,"src":33064},"\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,33066,33067],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,33069,33070],{},[3929,33071],{"alt":118,"src":33072},"\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,33074,33075],{},"数据处理中的图像增强操作:",[19,33077,33078],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,33080,33081],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,33083,33084],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,33086,33087],{},[3929,33088],{"alt":118,"src":33089},"\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,33091,33092],{},"提升网络精确度的方法：LRN正则化",[19,33094,33095],{},[3929,33096],{"alt":118,"src":33097},"\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,33099,33100],{},[3929,33101],{"alt":118,"src":33102},"\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",[26,33104,33105],{"start":156},[29,33106,33107],{},"AlexNet的总结",[19,33109,33110],{},[3929,33111],{"alt":118,"src":33112},"\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,33114,33115],{},"比LeNet模型要深一丢丢",[24425,33117,33119],{"id":33118},"_212代码实现","2.1.2.代码实现",[19,33121,33122],{},"（1）LeNet",[26,33124,33125],{},[29,33126,33127],{},"模型搭建",[113,33129,33131],{"className":115,"code":33130,"language":117,"meta":118,"style":118},"# 导入库\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",[120,33132,33133,33138,33144,33149,33161,33166,33178,33182,33202,33207,33212,33223,33228,33247,33251,33256,33305,33317,33322,33351,33386,33413,33418,33430,33435,33455,33474,33493,33497,33502,33512,33529,33540,33555,33566,33577,33592,33607,33618,33625,33629,33643,33648,33671,33676,33681,33686,33690,33695,33700,33710],{"__ignoreMap":118},[123,33134,33135],{"class":125,"line":126},[123,33136,33137],{"class":2673},"# 导入库\n",[123,33139,33140,33142],{"class":125,"line":140},[123,33141,223],{"class":133},[123,33143,32812],{"class":129},[123,33145,33146],{"class":125,"line":156},[123,33147,33148],{"class":2673},"# 导入神经网络层\n",[123,33150,33151,33153,33156,33158],{"class":125,"line":168},[123,33152,391],{"class":133},[123,33154,33155],{"class":129}," torch ",[123,33157,223],{"class":133},[123,33159,33160],{"class":129}," nn\n",[123,33162,33163],{"class":125,"line":268},[123,33164,33165],{"class":2673},"# 导入展示神经网络参数的包\n",[123,33167,33168,33170,33173,33175],{"class":125,"line":291},[123,33169,391],{"class":133},[123,33171,33172],{"class":129}," torchsummary ",[123,33174,223],{"class":133},[123,33176,33177],{"class":129}," summary\n",[123,33179,33180],{"class":125,"line":300},[123,33181,232],{"emptyLinePlaceholder":231},[123,33183,33184,33186,33189,33191,33194,33196,33199],{"class":125,"line":305},[123,33185,17124],{"class":133},[123,33187,33188],{"class":337}," LeNet",[123,33190,1315],{"class":129},[123,33192,33193],{"class":337},"nn",[123,33195,3161],{"class":129},[123,33197,33198],{"class":337},"Module",[123,33200,33201],{"class":129},"):\n",[123,33203,33204],{"class":125,"line":316},[123,33205,33206],{"class":2673},"    # 模型初始化:\n",[123,33208,33209],{"class":125,"line":673},[123,33210,33211],{"class":2673},"    # 定义一些网络层和激活函数\n",[123,33213,33214,33217,33220],{"class":125,"line":692},[123,33215,33216],{"class":133},"    def",[123,33218,33219],{"class":164}," __init__",[123,33221,33222],{"class":129},"(self):\n",[123,33224,33225],{"class":125,"line":713},[123,33226,33227],{"class":2673},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[123,33229,33230,33233,33236,33239,33242,33245],{"class":125,"line":718},[123,33231,33232],{"class":164},"        super",[123,33234,33235],{"class":129},"(LeNet,",[123,33237,33238],{"class":164},"self",[123,33240,33241],{"class":129},").",[123,33243,33244],{"class":164},"__init__",[123,33246,4420],{"class":129},[123,33248,33249],{"class":125,"line":1138},[123,33250,232],{"emptyLinePlaceholder":231},[123,33252,33253],{"class":125,"line":1429},[123,33254,33255],{"class":2673},"        # 定义网络层\n",[123,33257,33258,33261,33264,33266,33269,33272,33274,33276,33278,33281,33283,33285,33287,33290,33292,33294,33296,33299,33301,33303],{"class":125,"line":1439},[123,33259,33260],{"class":164},"        self",[123,33262,33263],{"class":129},".c1",[123,33265,134],{"class":133},[123,33267,33268],{"class":129},"nn.Conv2d(",[123,33270,33271],{"class":279},"in_channels",[123,33273,134],{"class":133},[123,33275,2825],{"class":164},[123,33277,2985],{"class":129},[123,33279,33280],{"class":279},"out_channels",[123,33282,134],{"class":133},[123,33284,2951],{"class":164},[123,33286,2985],{"class":129},[123,33288,33289],{"class":279},"kernel_size",[123,33291,134],{"class":133},[123,33293,2926],{"class":164},[123,33295,2985],{"class":129},[123,33297,33298],{"class":279},"padding",[123,33300,134],{"class":133},[123,33302,2692],{"class":164},[123,33304,288],{"class":129},[123,33306,33307,33309,33312,33314],{"class":125,"line":1444},[123,33308,33260],{"class":164},[123,33310,33311],{"class":129},".sig",[123,33313,134],{"class":133},[123,33315,33316],{"class":129},"nn.Sigmoid()\n",[123,33318,33319],{"class":125,"line":1453},[123,33320,33321],{"class":2673},"        # 定义池化\n",[123,33323,33324,33326,33329,33331,33334,33336,33338,33340,33342,33345,33347,33349],{"class":125,"line":1458},[123,33325,33260],{"class":164},[123,33327,33328],{"class":129},".s2",[123,33330,134],{"class":133},[123,33332,33333],{"class":129},"nn.AvgPool2d(",[123,33335,33289],{"class":279},[123,33337,134],{"class":133},[123,33339,2692],{"class":164},[123,33341,2985],{"class":129},[123,33343,33344],{"class":279},"stride",[123,33346,134],{"class":133},[123,33348,2692],{"class":164},[123,33350,288],{"class":129},[123,33352,33353,33355,33358,33360,33362,33364,33366,33368,33370,33372,33374,33376,33378,33380,33382,33384],{"class":125,"line":1476},[123,33354,33260],{"class":164},[123,33356,33357],{"class":129},".c3",[123,33359,134],{"class":133},[123,33361,33268],{"class":129},[123,33363,33271],{"class":279},[123,33365,134],{"class":133},[123,33367,2951],{"class":164},[123,33369,2985],{"class":129},[123,33371,33280],{"class":279},[123,33373,134],{"class":133},[123,33375,3204],{"class":164},[123,33377,2985],{"class":129},[123,33379,33289],{"class":279},[123,33381,134],{"class":133},[123,33383,2926],{"class":164},[123,33385,288],{"class":129},[123,33387,33388,33390,33393,33395,33397,33399,33401,33403,33405,33407,33409,33411],{"class":125,"line":1494},[123,33389,33260],{"class":164},[123,33391,33392],{"class":129},".s4",[123,33394,134],{"class":133},[123,33396,33333],{"class":129},[123,33398,33289],{"class":279},[123,33400,134],{"class":133},[123,33402,2692],{"class":164},[123,33404,2985],{"class":129},[123,33406,33344],{"class":279},[123,33408,134],{"class":133},[123,33410,2692],{"class":164},[123,33412,288],{"class":129},[123,33414,33415],{"class":125,"line":1499},[123,33416,33417],{"class":2673},"        # 定义平展层\n",[123,33419,33420,33422,33425,33427],{"class":125,"line":1517},[123,33421,33260],{"class":164},[123,33423,33424],{"class":129},".flatten",[123,33426,134],{"class":133},[123,33428,33429],{"class":129},"nn.Flatten()\n",[123,33431,33432],{"class":125,"line":1534},[123,33433,33434],{"class":2673},"        # 定义全连接层\n",[123,33436,33437,33439,33442,33444,33447,33449,33451,33453],{"class":125,"line":1539},[123,33438,33260],{"class":164},[123,33440,33441],{"class":129},".f5",[123,33443,134],{"class":133},[123,33445,33446],{"class":129},"nn.Linear(",[123,33448,6426],{"class":164},[123,33450,2985],{"class":129},[123,33452,462],{"class":164},[123,33454,288],{"class":129},[123,33456,33457,33459,33462,33464,33466,33468,33470,33472],{"class":125,"line":2080},[123,33458,33260],{"class":164},[123,33460,33461],{"class":129},".f6",[123,33463,134],{"class":133},[123,33465,33446],{"class":129},[123,33467,462],{"class":164},[123,33469,2985],{"class":129},[123,33471,3313],{"class":164},[123,33473,288],{"class":129},[123,33475,33476,33478,33481,33483,33485,33487,33489,33491],{"class":125,"line":2097},[123,33477,33260],{"class":164},[123,33479,33480],{"class":129},".f7",[123,33482,134],{"class":133},[123,33484,33446],{"class":129},[123,33486,3313],{"class":164},[123,33488,2985],{"class":129},[123,33490,2193],{"class":164},[123,33492,288],{"class":129},[123,33494,33495],{"class":125,"line":2114},[123,33496,232],{"emptyLinePlaceholder":231},[123,33498,33499],{"class":125,"line":2125},[123,33500,33501],{"class":2673},"    # 写工具->写前向传播\n",[123,33503,33504,33506,33509],{"class":125,"line":2130},[123,33505,33216],{"class":133},[123,33507,33508],{"class":337}," forward",[123,33510,33511],{"class":129},"(self,x):\n",[123,33513,33514,33517,33519,33521,33524,33526],{"class":125,"line":5033},[123,33515,33516],{"class":129},"        x",[123,33518,134],{"class":133},[123,33520,33238],{"class":164},[123,33522,33523],{"class":129},".sig(",[123,33525,33238],{"class":164},[123,33527,33528],{"class":129},".c1(x))\n",[123,33530,33531,33533,33535,33537],{"class":125,"line":5041},[123,33532,33516],{"class":129},[123,33534,134],{"class":133},[123,33536,33238],{"class":164},[123,33538,33539],{"class":129},".s2(x)\n",[123,33541,33542,33544,33546,33548,33550,33552],{"class":125,"line":5046},[123,33543,33516],{"class":129},[123,33545,134],{"class":133},[123,33547,33238],{"class":164},[123,33549,33523],{"class":129},[123,33551,33238],{"class":164},[123,33553,33554],{"class":129},".c3(x))\n",[123,33556,33557,33559,33561,33563],{"class":125,"line":5052},[123,33558,33516],{"class":129},[123,33560,134],{"class":133},[123,33562,33238],{"class":164},[123,33564,33565],{"class":129},".s4(x)\n",[123,33567,33568,33570,33572,33574],{"class":125,"line":5058},[123,33569,33516],{"class":129},[123,33571,134],{"class":133},[123,33573,33238],{"class":164},[123,33575,33576],{"class":129},".flatten(x)\n",[123,33578,33579,33581,33583,33585,33587,33589],{"class":125,"line":5063},[123,33580,33516],{"class":129},[123,33582,134],{"class":133},[123,33584,33238],{"class":164},[123,33586,33523],{"class":129},[123,33588,33238],{"class":164},[123,33590,33591],{"class":129},".f5(x))\n",[123,33593,33594,33596,33598,33600,33602,33604],{"class":125,"line":10380},[123,33595,33516],{"class":129},[123,33597,134],{"class":133},[123,33599,33238],{"class":164},[123,33601,33523],{"class":129},[123,33603,33238],{"class":164},[123,33605,33606],{"class":129},".f6(x))\n",[123,33608,33609,33611,33613,33615],{"class":125,"line":10404},[123,33610,33516],{"class":129},[123,33612,134],{"class":133},[123,33614,33238],{"class":164},[123,33616,33617],{"class":129},".f7(x)\n",[123,33619,33620,33622],{"class":125,"line":10409},[123,33621,17182],{"class":133},[123,33623,33624],{"class":129}," x\n",[123,33626,33627],{"class":125,"line":10415},[123,33628,232],{"emptyLinePlaceholder":231},[123,33630,33631,33633,33636,33638,33641],{"class":125,"line":10442},[123,33632,3998],{"class":133},[123,33634,33635],{"class":164}," __name__",[123,33637,5391],{"class":133},[123,33639,33640],{"class":143},"\"__main__\"",[123,33642,1344],{"class":129},[123,33644,33645],{"class":125,"line":10447},[123,33646,33647],{"class":2673},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[123,33649,33650,33653,33655,33657,33660,33662,33665,33667,33669],{"class":125,"line":10453},[123,33651,33652],{"class":129},"    device",[123,33654,134],{"class":133},[123,33656,32867],{"class":129},[123,33658,33659],{"class":143},"\"cuda\"",[123,33661,4158],{"class":133},[123,33663,33664],{"class":129}," torch.cuda.is_available() ",[123,33666,4155],{"class":133},[123,33668,32892],{"class":143},[123,33670,288],{"class":129},[123,33672,33673],{"class":125,"line":10465},[123,33674,33675],{"class":2673},"    # 如果就是想指定用cpu用下方代码:\n",[123,33677,33678],{"class":125,"line":10477},[123,33679,33680],{"class":2673},"    # device=\"cpu\"\n",[123,33682,33683],{"class":125,"line":10489},[123,33684,33685],{"class":2673},"    # print(device)\n",[123,33687,33688],{"class":125,"line":12148},[123,33689,232],{"emptyLinePlaceholder":231},[123,33691,33692],{"class":125,"line":12173},[123,33693,33694],{"class":2673},"    # 实例化模型\n",[123,33696,33697],{"class":125,"line":12196},[123,33698,33699],{"class":2673},"    # 将模型放到设备中去运行\n",[123,33701,33702,33705,33707],{"class":125,"line":12220},[123,33703,33704],{"class":129},"    model",[123,33706,134],{"class":133},[123,33708,33709],{"class":129},"LeNet().to(device)\n",[123,33711,33712,33715,33718,33720,33722,33724,33726,33728],{"class":125,"line":12225},[123,33713,33714],{"class":164},"    print",[123,33716,33717],{"class":129},"(summary(model,(",[123,33719,2825],{"class":164},[123,33721,2985],{"class":129},[123,33723,3500],{"class":164},[123,33725,2985],{"class":129},[123,33727,3500],{"class":164},[123,33729,33730],{"class":129},")))\n",[19,33732,33733],{},[3929,33734],{"alt":118,"src":33735},"\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,33737,33738],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33740,33741],{"start":140},[29,33742,33743],{},"训练",[19,33745,33746],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33748,33749],{},"在训练之前可以将数据展示看一下",[113,33751,33753],{"className":115,"code":33752,"language":117,"meta":118,"style":118},"# 建立画图的函数，用于展示数据\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",[120,33754,33755,33760,33765,33777,33789,33801,33806,33818,33823,33835,33840,33852,33856,33860,33880,33891,33896,33917,33928,33932,33937,33955,33966,33971,33982,33987,33998,34002,34007,34022,34035,34040,34045,34058,34071,34084,34089,34093,34098,34118,34135,34155,34168,34181,34191,34206],{"__ignoreMap":118},[123,33756,33757],{"class":125,"line":126},[123,33758,33759],{"class":2673},"# 建立画图的函数，用于展示数据\n",[123,33761,33762],{"class":125,"line":140},[123,33763,33764],{"class":2673},"# torchvision中包含很多内置的数据集\n",[123,33766,33767,33769,33772,33774],{"class":125,"line":156},[123,33768,391],{"class":133},[123,33770,33771],{"class":129}," sklearn.externals.array_api_compat.torch ",[123,33773,223],{"class":133},[123,33775,33776],{"class":129}," squeeze\n",[123,33778,33779,33781,33784,33786],{"class":125,"line":168},[123,33780,391],{"class":133},[123,33782,33783],{"class":129}," torchvision.datasets ",[123,33785,223],{"class":133},[123,33787,33788],{"class":129}," FashionMNIST\n",[123,33790,33791,33793,33796,33798],{"class":125,"line":268},[123,33792,223],{"class":133},[123,33794,33795],{"class":129}," numpy ",[123,33797,547],{"class":133},[123,33799,33800],{"class":129}," np\n",[123,33802,33803],{"class":125,"line":291},[123,33804,33805],{"class":2673},"# 引入处理数据集的包\n",[123,33807,33808,33810,33813,33815],{"class":125,"line":300},[123,33809,391],{"class":133},[123,33811,33812],{"class":129}," torchvision ",[123,33814,223],{"class":133},[123,33816,33817],{"class":129}," transforms\n",[123,33819,33820],{"class":125,"line":305},[123,33821,33822],{"class":2673},"# 从torch库中引入数据处理的包\n",[123,33824,33825,33827,33830,33832],{"class":125,"line":316},[123,33826,223],{"class":133},[123,33828,33829],{"class":129}," torch.utils.data ",[123,33831,547],{"class":133},[123,33833,33834],{"class":129}," Data\n",[123,33836,33837],{"class":125,"line":673},[123,33838,33839],{"class":2673},"# 导入画图的库\n",[123,33841,33842,33844,33847,33849],{"class":125,"line":692},[123,33843,223],{"class":133},[123,33845,33846],{"class":129}," matplotlib.pyplot ",[123,33848,547],{"class":133},[123,33850,33851],{"class":129}," plt\n",[123,33853,33854],{"class":125,"line":713},[123,33855,232],{"emptyLinePlaceholder":231},[123,33857,33858],{"class":125,"line":718},[123,33859,232],{"emptyLinePlaceholder":231},[123,33861,33862,33865,33867,33870,33873,33875,33878],{"class":125,"line":1138},[123,33863,33864],{"class":129},"train_data",[123,33866,134],{"class":133},[123,33868,33869],{"class":129},"FashionMNIST(",[123,33871,33872],{"class":279},"root",[123,33874,134],{"class":133},[123,33876,33877],{"class":143},"'.\u002Fdata'",[123,33879,153],{"class":129},[123,33881,33882,33885,33887,33889],{"class":125,"line":1429},[123,33883,33884],{"class":279},"                        train",[123,33886,134],{"class":133},[123,33888,870],{"class":164},[123,33890,153],{"class":129},[123,33892,33893],{"class":125,"line":1439},[123,33894,33895],{"class":2673},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[123,33897,33898,33901,33903,33906,33909,33911,33914],{"class":125,"line":1444},[123,33899,33900],{"class":279},"                        transform",[123,33902,134],{"class":133},[123,33904,33905],{"class":129},"transforms.Compose([transforms.Resize(",[123,33907,33908],{"class":279},"size",[123,33910,134],{"class":133},[123,33912,33913],{"class":164},"224",[123,33915,33916],{"class":129},"),transforms.ToTensor()]),\n",[123,33918,33919,33922,33924,33926],{"class":125,"line":1453},[123,33920,33921],{"class":279},"                        download",[123,33923,134],{"class":133},[123,33925,870],{"class":164},[123,33927,288],{"class":129},[123,33929,33930],{"class":125,"line":1458},[123,33931,232],{"emptyLinePlaceholder":231},[123,33933,33934],{"class":125,"line":1476},[123,33935,33936],{"class":2673},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[123,33938,33939,33942,33944,33947,33950,33952],{"class":125,"line":1494},[123,33940,33941],{"class":129},"train_loader",[123,33943,134],{"class":133},[123,33945,33946],{"class":129},"Data.DataLoader(",[123,33948,33949],{"class":279},"dataset",[123,33951,134],{"class":133},[123,33953,33954],{"class":129},"train_data,\n",[123,33956,33957,33960,33962,33964],{"class":125,"line":1499},[123,33958,33959],{"class":279},"                             batch_size",[123,33961,134],{"class":133},[123,33963,2811],{"class":164},[123,33965,153],{"class":129},[123,33967,33968],{"class":125,"line":1517},[123,33969,33970],{"class":2673},"                             # 数据是否打乱\n",[123,33972,33973,33976,33978,33980],{"class":125,"line":1534},[123,33974,33975],{"class":279},"                             shuffle",[123,33977,134],{"class":133},[123,33979,870],{"class":164},[123,33981,153],{"class":129},[123,33983,33984],{"class":125,"line":1539},[123,33985,33986],{"class":2673},"                             # 规定加载数据的进程\n",[123,33988,33989,33992,33994,33996],{"class":125,"line":2080},[123,33990,33991],{"class":279},"                             num_workers",[123,33993,134],{"class":133},[123,33995,2799],{"class":164},[123,33997,288],{"class":129},[123,33999,34000],{"class":125,"line":2097},[123,34001,232],{"emptyLinePlaceholder":231},[123,34003,34004],{"class":125,"line":2114},[123,34005,34006],{"class":2673},"# 获得一个batch的数据\n",[123,34008,34009,34011,34014,34016,34019],{"class":125,"line":2125},[123,34010,1399],{"class":133},[123,34012,34013],{"class":129}," step,(b_x,b_y) ",[123,34015,1405],{"class":133},[123,34017,34018],{"class":164}," enumerate",[123,34020,34021],{"class":129},"(train_loader):\n",[123,34023,34024,34026,34029,34031,34033],{"class":125,"line":2130},[123,34025,1711],{"class":133},[123,34027,34028],{"class":129}," step ",[123,34030,3559],{"class":133},[123,34032,6532],{"class":164},[123,34034,1344],{"class":129},[123,34036,34037],{"class":125,"line":5033},[123,34038,34039],{"class":133},"        break\n",[123,34041,34042],{"class":125,"line":5041},[123,34043,34044],{"class":2673},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[123,34046,34047,34050,34052,34055],{"class":125,"line":5046},[123,34048,34049],{"class":129},"batch_x",[123,34051,134],{"class":133},[123,34053,34054],{"class":129},"b_x.squeeze().numpy()  ",[123,34056,34057],{"class":2673},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[123,34059,34060,34063,34065,34068],{"class":125,"line":5052},[123,34061,34062],{"class":129},"batch_y",[123,34064,134],{"class":133},[123,34066,34067],{"class":129},"b_y.numpy()   ",[123,34069,34070],{"class":2673},"#将张量转换成功numpy数组\n",[123,34072,34073,34076,34078,34081],{"class":125,"line":5058},[123,34074,34075],{"class":129},"class_label",[123,34077,134],{"class":133},[123,34079,34080],{"class":129},"train_data.classes  ",[123,34082,34083],{"class":2673},"#训练集标签\n",[123,34085,34086],{"class":125,"line":5063},[123,34087,34088],{"class":2673},"# print(class_label)\n",[123,34090,34091],{"class":125,"line":10380},[123,34092,232],{"emptyLinePlaceholder":231},[123,34094,34095],{"class":125,"line":10404},[123,34096,34097],{"class":2673},"# 可视化一个batch的图像\n",[123,34099,34100,34103,34106,34108,34110,34112,34114,34116],{"class":125,"line":10409},[123,34101,34102],{"class":129},"plt.figure(",[123,34104,34105],{"class":279},"figsize",[123,34107,134],{"class":133},[123,34109,1315],{"class":129},[123,34111,2215],{"class":164},[123,34113,2985],{"class":129},[123,34115,2926],{"class":164},[123,34117,32913],{"class":129},[123,34119,34120,34122,34125,34127,34130,34132],{"class":125,"line":10415},[123,34121,1399],{"class":133},[123,34123,34124],{"class":129}," ii ",[123,34126,1405],{"class":133},[123,34128,34129],{"class":129}," np.arange(",[123,34131,9791],{"class":164},[123,34133,34134],{"class":129},"(batch_y)):\n",[123,34136,34137,34140,34142,34144,34146,34149,34151,34153],{"class":125,"line":10442},[123,34138,34139],{"class":129},"    plt.subplot(",[123,34141,2901],{"class":164},[123,34143,2985],{"class":129},[123,34145,3204],{"class":164},[123,34147,34148],{"class":129},",ii ",[123,34150,3086],{"class":133},[123,34152,27540],{"class":164},[123,34154,288],{"class":129},[123,34156,34157,34160,34163,34165],{"class":125,"line":10447},[123,34158,34159],{"class":129},"    plt.imshow(batch_x[ii,:,:],",[123,34161,34162],{"class":279},"cmap",[123,34164,134],{"class":133},[123,34166,34167],{"class":129},"plt.cm.gray)\n",[123,34169,34170,34173,34175,34177,34179],{"class":125,"line":10453},[123,34171,34172],{"class":129},"    plt.title(class_label[batch_y[ii]],",[123,34174,33908],{"class":279},[123,34176,134],{"class":133},[123,34178,2193],{"class":164},[123,34180,288],{"class":129},[123,34182,34183,34186,34189],{"class":125,"line":10465},[123,34184,34185],{"class":129},"    plt.axis(",[123,34187,34188],{"class":143},"\"off\"",[123,34190,288],{"class":129},[123,34192,34193,34196,34199,34201,34204],{"class":125,"line":10477},[123,34194,34195],{"class":129},"    plt.subplots_adjust(",[123,34197,34198],{"class":279},"wspace",[123,34200,134],{"class":133},[123,34202,34203],{"class":164},"0.05",[123,34205,288],{"class":129},[123,34207,34208],{"class":125,"line":10489},[123,34209,34210],{"class":129},"plt.show()\n",[19,34212,34213],{},"用matplotlib进行展示的过程可以后续再补",[19,34215,34216],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34218,34219],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34221,34222],{},"模型训练：",[113,34224,34226],{"className":115,"code":34225,"language":117,"meta":118,"style":118},"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",[120,34227,34228,34235,34242,34246,34258,34264,34275,34285,34295,34305,34315,34320,34332,34342,34346,34350,34355,34366,34379,34390,34407,34418,34457,34473,34485,34496,34501,34512,34528,34539,34550,34561,34568,34572,34577,34582,34586,34591,34601,34622,34626,34630,34635,34640,34645,34665,34669,34674,34684,34688,34693,34702,34707,34712,34717,34727,34731,34735,34740,34745,34755,34760,34770,34775,34784,34789,34798,34803,34812,34816,34821,34831,34835,34839,34844,34859,34887,34902,34906,34911,34916,34925,34930,34939,34944,34953,34958,34967,34972,34981,34986,34995,35000,35013,35018,35028,35033,35043,35049,35055,35061,35067,35078,35084,35104,35110,35121,35127,35133,35139,35145,35151,35157,35163,35183,35189,35205,35211,35225,35231,35246,35252,35261,35267,35276,35282,35288,35297,35303,35314,35320,35339,35345,35356,35362,35382,35398,35404,35418,35424,35430,35441,35447,35453,35463,35469,35480,35486,35496,35501,35507,35556,35603,35608,35614,35633,35639,35658,35664,35670,35680,35685,35691,35707,35752,35758,35764,35770,35781,35787,35793,35799,35817,35831,35840,35849,35858,35867,35873,35879,35887,35892,35898,35909,35915,35935,35941,35947,35953,35970,35976,35982,35988,35994,36000,36027,36051,36057,36063,36069,36080,36091,36097,36114,36137,36160,36166,36171,36180,36190,36196,36201,36207,36220,36226,36237,36248,36267],{"__ignoreMap":118},[123,34229,34230,34232],{"class":125,"line":126},[123,34231,223],{"class":133},[123,34233,34234],{"class":129}," copy\n",[123,34236,34237,34239],{"class":125,"line":140},[123,34238,223],{"class":133},[123,34240,34241],{"class":129}," time\n",[123,34243,34244],{"class":125,"line":156},[123,34245,232],{"emptyLinePlaceholder":231},[123,34247,34248,34250,34253,34255],{"class":125,"line":168},[123,34249,223],{"class":133},[123,34251,34252],{"class":129}," pandas ",[123,34254,547],{"class":133},[123,34256,34257],{"class":129}," pd\n",[123,34259,34260,34262],{"class":125,"line":268},[123,34261,223],{"class":133},[123,34263,32812],{"class":129},[123,34265,34266,34268,34270,34272],{"class":125,"line":291},[123,34267,391],{"class":133},[123,34269,33829],{"class":129},[123,34271,223],{"class":133},[123,34273,34274],{"class":129}," Dataset\n",[123,34276,34277,34279,34281,34283],{"class":125,"line":300},[123,34278,391],{"class":133},[123,34280,33783],{"class":129},[123,34282,223],{"class":133},[123,34284,33788],{"class":129},[123,34286,34287,34289,34291,34293],{"class":125,"line":305},[123,34288,391],{"class":133},[123,34290,33812],{"class":129},[123,34292,223],{"class":133},[123,34294,33817],{"class":129},[123,34296,34297,34299,34301,34303],{"class":125,"line":316},[123,34298,223],{"class":133},[123,34300,33829],{"class":129},[123,34302,547],{"class":133},[123,34304,33834],{"class":129},[123,34306,34307,34309,34311,34313],{"class":125,"line":673},[123,34308,223],{"class":133},[123,34310,33846],{"class":129},[123,34312,547],{"class":133},[123,34314,33851],{"class":129},[123,34316,34317],{"class":125,"line":692},[123,34318,34319],{"class":2673},"# 导入模型\n",[123,34321,34322,34324,34327,34329],{"class":125,"line":713},[123,34323,391],{"class":133},[123,34325,34326],{"class":129}," model ",[123,34328,223],{"class":133},[123,34330,34331],{"class":129}," LeNet\n",[123,34333,34334,34336,34338,34340],{"class":125,"line":718},[123,34335,391],{"class":133},[123,34337,33155],{"class":129},[123,34339,223],{"class":133},[123,34341,33160],{"class":129},[123,34343,34344],{"class":125,"line":1138},[123,34345,232],{"emptyLinePlaceholder":231},[123,34347,34348],{"class":125,"line":1429},[123,34349,232],{"emptyLinePlaceholder":231},[123,34351,34352],{"class":125,"line":1439},[123,34353,34354],{"class":2673},"# 处理训练集与验证集函数--->划分数据集\n",[123,34356,34357,34360,34363],{"class":125,"line":1444},[123,34358,34359],{"class":133},"def",[123,34361,34362],{"class":337}," train_val_data_process",[123,34364,34365],{"class":129},"():\n",[123,34367,34368,34371,34373,34375,34377],{"class":125,"line":1453},[123,34369,34370],{"class":129},"    train_data",[123,34372,134],{"class":133},[123,34374,33869],{"class":129},[123,34376,33877],{"class":143},[123,34378,153],{"class":129},[123,34380,34381,34384,34386,34388],{"class":125,"line":1458},[123,34382,34383],{"class":279},"                            train",[123,34385,134],{"class":133},[123,34387,870],{"class":164},[123,34389,153],{"class":129},[123,34391,34392,34395,34397,34399,34401,34403,34405],{"class":125,"line":1476},[123,34393,34394],{"class":279},"                            transform",[123,34396,134],{"class":133},[123,34398,33905],{"class":129},[123,34400,33908],{"class":279},[123,34402,134],{"class":133},[123,34404,3500],{"class":164},[123,34406,33916],{"class":129},[123,34408,34409,34412,34414,34416],{"class":125,"line":1494},[123,34410,34411],{"class":279},"                            download",[123,34413,134],{"class":133},[123,34415,870],{"class":164},[123,34417,288],{"class":129},[123,34419,34420,34423,34425,34428,34431,34433,34436,34438,34440,34443,34445,34447,34450,34452,34454],{"class":125,"line":1499},[123,34421,34422],{"class":129},"    train_data,val_data",[123,34424,134],{"class":133},[123,34426,34427],{"class":129},"Data.random_split(train_data,[",[123,34429,34430],{"class":164},"round",[123,34432,1315],{"class":129},[123,34434,34435],{"class":164},"0.8",[123,34437,3060],{"class":133},[123,34439,9791],{"class":164},[123,34441,34442],{"class":129},"(train_data)),",[123,34444,34430],{"class":164},[123,34446,1315],{"class":129},[123,34448,34449],{"class":164},"0.2",[123,34451,3060],{"class":133},[123,34453,9791],{"class":164},[123,34455,34456],{"class":129},"(train_data))])\n",[123,34458,34459,34462,34464,34467,34469,34471],{"class":125,"line":1517},[123,34460,34461],{"class":129},"    train_dataloader ",[123,34463,134],{"class":133},[123,34465,34466],{"class":129}," Data.DataLoader(",[123,34468,33949],{"class":279},[123,34470,134],{"class":133},[123,34472,33954],{"class":129},[123,34474,34475,34478,34480,34483],{"class":125,"line":1534},[123,34476,34477],{"class":279},"                                       batch_size",[123,34479,134],{"class":133},[123,34481,34482],{"class":164},"128",[123,34484,153],{"class":129},[123,34486,34487,34490,34492,34494],{"class":125,"line":1539},[123,34488,34489],{"class":279},"                                       shuffle",[123,34491,134],{"class":133},[123,34493,870],{"class":164},[123,34495,153],{"class":129},[123,34497,34498],{"class":125,"line":2080},[123,34499,34500],{"class":2673},"                                       # 规定8个进程\n",[123,34502,34503,34506,34508,34510],{"class":125,"line":2097},[123,34504,34505],{"class":279},"                                       num_workers",[123,34507,134],{"class":133},[123,34509,2248],{"class":164},[123,34511,288],{"class":129},[123,34513,34514,34517,34519,34521,34523,34525],{"class":125,"line":2114},[123,34515,34516],{"class":129},"    val_dataloader",[123,34518,134],{"class":133},[123,34520,33946],{"class":129},[123,34522,33949],{"class":279},[123,34524,134],{"class":133},[123,34526,34527],{"class":129},"val_data,\n",[123,34529,34530,34533,34535,34537],{"class":125,"line":2125},[123,34531,34532],{"class":279},"                                   batch_size",[123,34534,134],{"class":133},[123,34536,34482],{"class":164},[123,34538,153],{"class":129},[123,34540,34541,34544,34546,34548],{"class":125,"line":2130},[123,34542,34543],{"class":279},"                                   shuffle",[123,34545,134],{"class":133},[123,34547,870],{"class":164},[123,34549,153],{"class":129},[123,34551,34552,34555,34557,34559],{"class":125,"line":5033},[123,34553,34554],{"class":279},"                                   num_workers",[123,34556,134],{"class":133},[123,34558,2248],{"class":164},[123,34560,288],{"class":129},[123,34562,34563,34565],{"class":125,"line":5041},[123,34564,6529],{"class":133},[123,34566,34567],{"class":129}," train_dataloader,val_dataloader\n",[123,34569,34570],{"class":125,"line":5046},[123,34571,232],{"emptyLinePlaceholder":231},[123,34573,34574],{"class":125,"line":5052},[123,34575,34576],{"class":2673},"# 验证是否出错\n",[123,34578,34579],{"class":125,"line":5058},[123,34580,34581],{"class":2673},"# train_val_data_process()\n",[123,34583,34584],{"class":125,"line":5063},[123,34585,232],{"emptyLinePlaceholder":231},[123,34587,34588],{"class":125,"line":10380},[123,34589,34590],{"class":2673},"# 定义模型训练函数\n",[123,34592,34593,34595,34598],{"class":125,"line":10404},[123,34594,34359],{"class":133},[123,34596,34597],{"class":337}," train_model_process",[123,34599,34600],{"class":129},"(model,train_dataloader,val_dataloader,num_epochs):\n",[123,34602,34603,34605,34607,34609,34611,34613,34615,34617,34620],{"class":125,"line":10409},[123,34604,33652],{"class":129},[123,34606,134],{"class":133},[123,34608,32867],{"class":129},[123,34610,33659],{"class":143},[123,34612,4158],{"class":133},[123,34614,33664],{"class":129},[123,34616,4155],{"class":133},[123,34618,34619],{"class":143}," 'cpu'",[123,34621,288],{"class":129},[123,34623,34624],{"class":125,"line":10415},[123,34625,232],{"emptyLinePlaceholder":231},[123,34627,34628],{"class":125,"line":10442},[123,34629,232],{"emptyLinePlaceholder":231},[123,34631,34632],{"class":125,"line":10447},[123,34633,34634],{"class":2673},"    # 定义优化器\n",[123,34636,34637],{"class":125,"line":10453},[123,34638,34639],{"class":2673},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[123,34641,34642],{"class":125,"line":10465},[123,34643,34644],{"class":2673},"    # lr为学习率\n",[123,34646,34647,34650,34652,34655,34658,34660,34663],{"class":125,"line":10477},[123,34648,34649],{"class":129},"    optimizer",[123,34651,134],{"class":133},[123,34653,34654],{"class":129},"torch.optim.Adam(model.parameters(),",[123,34656,34657],{"class":279},"lr",[123,34659,134],{"class":133},[123,34661,34662],{"class":164},"0.001",[123,34664,288],{"class":129},[123,34666,34667],{"class":125,"line":10489},[123,34668,232],{"emptyLinePlaceholder":231},[123,34670,34671],{"class":125,"line":12148},[123,34672,34673],{"class":2673},"    # 定义损失函数使用交叉熵损失函数\n",[123,34675,34676,34679,34681],{"class":125,"line":12173},[123,34677,34678],{"class":129},"    criterion",[123,34680,134],{"class":133},[123,34682,34683],{"class":129},"nn.CrossEntropyLoss()\n",[123,34685,34686],{"class":125,"line":12196},[123,34687,232],{"emptyLinePlaceholder":231},[123,34689,34690],{"class":125,"line":12220},[123,34691,34692],{"class":2673},"    # 将模型放到GPU中进行训练\n",[123,34694,34695,34697,34699],{"class":125,"line":12225},[123,34696,33704],{"class":129},[123,34698,134],{"class":133},[123,34700,34701],{"class":129},"model.to(device)\n",[123,34703,34704],{"class":125,"line":12230},[123,34705,34706],{"class":2673},"    # 复制当前模型的参数\n",[123,34708,34709],{"class":125,"line":12235},[123,34710,34711],{"class":2673},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[123,34713,34714],{"class":125,"line":12244},[123,34715,34716],{"class":2673},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[123,34718,34719,34722,34724],{"class":125,"line":12249},[123,34720,34721],{"class":129},"    best_model_wts",[123,34723,134],{"class":133},[123,34725,34726],{"class":129},"copy.deepcopy(model.state_dict())\n",[123,34728,34729],{"class":125,"line":12255},[123,34730,232],{"emptyLinePlaceholder":231},[123,34732,34733],{"class":125,"line":12276},[123,34734,232],{"emptyLinePlaceholder":231},[123,34736,34737],{"class":125,"line":12282},[123,34738,34739],{"class":2673},"    # 初始化参数\n",[123,34741,34742],{"class":125,"line":12296},[123,34743,34744],{"class":2673},"    # 最高准确度\n",[123,34746,34747,34750,34752],{"class":125,"line":12302},[123,34748,34749],{"class":129},"    best_acc",[123,34751,134],{"class":133},[123,34753,34754],{"class":164},"0.0\n",[123,34756,34757],{"class":125,"line":12329},[123,34758,34759],{"class":2673},"    # 训练集损失列表\n",[123,34761,34762,34765,34767],{"class":125,"line":12338},[123,34763,34764],{"class":129},"    train_loss_all",[123,34766,134],{"class":133},[123,34768,34769],{"class":129},"[]\n",[123,34771,34772],{"class":125,"line":12344},[123,34773,34774],{"class":2673},"    # 验证集函数列表\n",[123,34776,34777,34780,34782],{"class":125,"line":12352},[123,34778,34779],{"class":129},"    val_loss_all",[123,34781,134],{"class":133},[123,34783,34769],{"class":129},[123,34785,34786],{"class":125,"line":12357},[123,34787,34788],{"class":2673},"    # 训练集准确度列表\n",[123,34790,34791,34794,34796],{"class":125,"line":19032},[123,34792,34793],{"class":129},"    train_acc_all",[123,34795,134],{"class":133},[123,34797,34769],{"class":129},[123,34799,34800],{"class":125,"line":19038},[123,34801,34802],{"class":2673},"    # 验证集准确度列表\n",[123,34804,34805,34808,34810],{"class":125,"line":19061},[123,34806,34807],{"class":129},"    val_acc_all",[123,34809,134],{"class":133},[123,34811,34769],{"class":129},[123,34813,34814],{"class":125,"line":19067},[123,34815,232],{"emptyLinePlaceholder":231},[123,34817,34818],{"class":125,"line":19090},[123,34819,34820],{"class":2673},"    # 保存当前时间--->方便看每轮训练的时间\n",[123,34822,34823,34826,34828],{"class":125,"line":19104},[123,34824,34825],{"class":129},"    since",[123,34827,134],{"class":133},[123,34829,34830],{"class":129},"time.time()\n",[123,34832,34833],{"class":125,"line":19124},[123,34834,232],{"emptyLinePlaceholder":231},[123,34836,34837],{"class":125,"line":19130},[123,34838,232],{"emptyLinePlaceholder":231},[123,34840,34841],{"class":125,"line":19141},[123,34842,34843],{"class":2673},"    # 准备工作完成--->开始训练模型\n",[123,34845,34846,34848,34851,34853,34856],{"class":125,"line":19164},[123,34847,5641],{"class":133},[123,34849,34850],{"class":129}," epoch ",[123,34852,1405],{"class":133},[123,34854,34855],{"class":164}," range",[123,34857,34858],{"class":129},"(num_epochs):\n",[123,34860,34861,34864,34866,34869,34872,34874,34876,34878,34881,34883,34885],{"class":125,"line":19186},[123,34862,34863],{"class":164},"        print",[123,34865,1315],{"class":129},[123,34867,34868],{"class":143},"\"Epoch ",[123,34870,34871],{"class":164},"{}",[123,34873,3187],{"class":143},[123,34875,34871],{"class":164},[123,34877,2859],{"class":143},[123,34879,34880],{"class":129},".format(epoch,num_epochs",[123,34882,3135],{"class":133},[123,34884,2825],{"class":164},[123,34886,32913],{"class":129},[123,34888,34889,34891,34893,34896,34898,34900],{"class":125,"line":19191},[123,34890,34863],{"class":164},[123,34892,1315],{"class":129},[123,34894,34895],{"class":143},"\"-\"",[123,34897,3060],{"class":133},[123,34899,2193],{"class":164},[123,34901,288],{"class":129},[123,34903,34904],{"class":125,"line":19197},[123,34905,232],{"emptyLinePlaceholder":231},[123,34907,34908],{"class":125,"line":19211},[123,34909,34910],{"class":2673},"        # 初始化参数\n",[123,34912,34913],{"class":125,"line":19224},[123,34914,34915],{"class":2673},"        # 训练集损失函数\n",[123,34917,34918,34921,34923],{"class":125,"line":19229},[123,34919,34920],{"class":129},"        train_loss",[123,34922,134],{"class":133},[123,34924,34754],{"class":164},[123,34926,34927],{"class":125,"line":19243},[123,34928,34929],{"class":2673},"        # 训练集准确度\n",[123,34931,34932,34935,34937],{"class":125,"line":19248},[123,34933,34934],{"class":129},"        train_corrects",[123,34936,134],{"class":133},[123,34938,5526],{"class":164},[123,34940,34941],{"class":125,"line":19254},[123,34942,34943],{"class":2673},"        # 验证集损失函数\n",[123,34945,34946,34949,34951],{"class":125,"line":19259},[123,34947,34948],{"class":129},"        val_loss",[123,34950,134],{"class":133},[123,34952,34754],{"class":164},[123,34954,34955],{"class":125,"line":19273},[123,34956,34957],{"class":2673},"        # 验证集准确度\n",[123,34959,34960,34963,34965],{"class":125,"line":19278},[123,34961,34962],{"class":129},"        val_corrects",[123,34964,134],{"class":133},[123,34966,5526],{"class":164},[123,34968,34969],{"class":125,"line":19283},[123,34970,34971],{"class":2673},"        # 训练集样本数量\n",[123,34973,34974,34977,34979],{"class":125,"line":19297},[123,34975,34976],{"class":129},"        train_num",[123,34978,134],{"class":133},[123,34980,5526],{"class":164},[123,34982,34983],{"class":125,"line":19309},[123,34984,34985],{"class":2673},"        # 验证集样本数量\n",[123,34987,34988,34991,34993],{"class":125,"line":19314},[123,34989,34990],{"class":129},"        val_num",[123,34992,134],{"class":133},[123,34994,5526],{"class":164},[123,34996,34997],{"class":125,"line":19327},[123,34998,34999],{"class":2673},"        # 将数据放到设备,并开始训练\n",[123,35001,35002,35004,35006,35008,35010],{"class":125,"line":19332},[123,35003,5843],{"class":133},[123,35005,34013],{"class":129},[123,35007,1405],{"class":133},[123,35009,34018],{"class":164},[123,35011,35012],{"class":129},"(train_dataloader):\n",[123,35014,35015],{"class":125,"line":19337},[123,35016,35017],{"class":2673},"            # 将特征放入到训练设备\n",[123,35019,35020,35023,35025],{"class":125,"line":19342},[123,35021,35022],{"class":129},"            b_x",[123,35024,134],{"class":133},[123,35026,35027],{"class":129},"b_x.to(device)\n",[123,35029,35030],{"class":125,"line":19355},[123,35031,35032],{"class":2673},"            # 将标签放入到训练设备当中\n",[123,35034,35035,35038,35040],{"class":125,"line":19360},[123,35036,35037],{"class":129},"            b_y",[123,35039,134],{"class":133},[123,35041,35042],{"class":129},"b_y.to(device)\n",[123,35044,35046],{"class":125,"line":35045},98,[123,35047,35048],{"class":2673},"            # 设置模型为训练模式\n",[123,35050,35052],{"class":125,"line":35051},99,[123,35053,35054],{"class":129},"            model.train()\n",[123,35056,35058],{"class":125,"line":35057},100,[123,35059,35060],{"class":2673},"            # 将数据放到模型当中,开始前向传播\n",[123,35062,35064],{"class":125,"line":35063},101,[123,35065,35066],{"class":2673},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[123,35068,35070,35073,35075],{"class":125,"line":35069},102,[123,35071,35072],{"class":129},"            output",[123,35074,134],{"class":133},[123,35076,35077],{"class":129},"model(b_x)\n",[123,35079,35081],{"class":125,"line":35080},103,[123,35082,35083],{"class":2673},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[123,35085,35087,35090,35092,35095,35098,35100,35102],{"class":125,"line":35086},104,[123,35088,35089],{"class":129},"            pre_lab",[123,35091,134],{"class":133},[123,35093,35094],{"class":129},"torch.argmax(output,",[123,35096,35097],{"class":279},"dim",[123,35099,134],{"class":133},[123,35101,2825],{"class":164},[123,35103,288],{"class":129},[123,35105,35107],{"class":125,"line":35106},105,[123,35108,35109],{"class":2673},"            # 计算每一个batch的损失函数\n",[123,35111,35113,35116,35118],{"class":125,"line":35112},106,[123,35114,35115],{"class":129},"            loss",[123,35117,134],{"class":133},[123,35119,35120],{"class":129},"criterion(output,b_y)\n",[123,35122,35124],{"class":125,"line":35123},107,[123,35125,35126],{"class":2673},"            # 将梯度初始化为0\n",[123,35128,35130],{"class":125,"line":35129},108,[123,35131,35132],{"class":129},"            optimizer.zero_grad()\n",[123,35134,35136],{"class":125,"line":35135},109,[123,35137,35138],{"class":2673},"            # 梯度置为0后再进行反向传播\n",[123,35140,35142],{"class":125,"line":35141},110,[123,35143,35144],{"class":129},"            loss.backward()\n",[123,35146,35148],{"class":125,"line":35147},111,[123,35149,35150],{"class":2673},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[123,35152,35154],{"class":125,"line":35153},112,[123,35155,35156],{"class":129},"            optimizer.step()\n",[123,35158,35160],{"class":125,"line":35159},113,[123,35161,35162],{"class":2673},"            # loss.item()指的是batch的平均损失\n",[123,35164,35166,35169,35171,35174,35176,35179,35181],{"class":125,"line":35165},114,[123,35167,35168],{"class":129},"            train_loss",[123,35170,11909],{"class":133},[123,35172,35173],{"class":129},"loss.item()",[123,35175,3060],{"class":133},[123,35177,35178],{"class":129},"b_x.size(",[123,35180,2799],{"class":164},[123,35182,288],{"class":129},[123,35184,35186],{"class":125,"line":35185},115,[123,35187,35188],{"class":2673},"            # 计算每个批次中正确预测的数量\n",[123,35190,35192,35195,35197,35200,35202],{"class":125,"line":35191},116,[123,35193,35194],{"class":129},"            train_corrects",[123,35196,11909],{"class":133},[123,35198,35199],{"class":129},"torch.sum(pre_lab",[123,35201,5391],{"class":133},[123,35203,35204],{"class":129},"b_y.data)\n",[123,35206,35208],{"class":125,"line":35207},117,[123,35209,35210],{"class":2673},"            # 计算目前为止一共处理了多少样本\n",[123,35212,35214,35217,35219,35221,35223],{"class":125,"line":35213},118,[123,35215,35216],{"class":129},"            train_num",[123,35218,11909],{"class":133},[123,35220,35178],{"class":129},[123,35222,2799],{"class":164},[123,35224,288],{"class":129},[123,35226,35228],{"class":125,"line":35227},119,[123,35229,35230],{"class":2673},"        # 验证数据\n",[123,35232,35234,35236,35239,35241,35243],{"class":125,"line":35233},120,[123,35235,5843],{"class":133},[123,35237,35238],{"class":129}," step ,(b_x,b_y) ",[123,35240,1405],{"class":133},[123,35242,34018],{"class":164},[123,35244,35245],{"class":129},"(val_dataloader):\n",[123,35247,35249],{"class":125,"line":35248},121,[123,35250,35251],{"class":2673},"            # 将特征放到验证设备当中\n",[123,35253,35255,35257,35259],{"class":125,"line":35254},122,[123,35256,35022],{"class":129},[123,35258,134],{"class":133},[123,35260,35027],{"class":129},[123,35262,35264],{"class":125,"line":35263},123,[123,35265,35266],{"class":2673},"            # 将标签放到放到训练设备当中\n",[123,35268,35270,35272,35274],{"class":125,"line":35269},124,[123,35271,35037],{"class":129},[123,35273,134],{"class":133},[123,35275,35042],{"class":129},[123,35277,35279],{"class":125,"line":35278},125,[123,35280,35281],{"class":2673},"            # 开启验证模式，设置模型为评估模式\n",[123,35283,35285],{"class":125,"line":35284},126,[123,35286,35287],{"class":129},"            model.eval()\n",[123,35289,35291,35294],{"class":125,"line":35290},127,[123,35292,35293],{"class":133},"            with",[123,35295,35296],{"class":129}," torch.no_grad():\n",[123,35298,35300],{"class":125,"line":35299},128,[123,35301,35302],{"class":2673},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[123,35304,35306,35309,35311],{"class":125,"line":35305},129,[123,35307,35308],{"class":129},"                output ",[123,35310,134],{"class":133},[123,35312,35313],{"class":129}," model(b_x)\n",[123,35315,35317],{"class":125,"line":35316},130,[123,35318,35319],{"class":2673},"                # 查找每一行中最大值对应的下标\n",[123,35321,35323,35326,35328,35331,35333,35335,35337],{"class":125,"line":35322},131,[123,35324,35325],{"class":129},"                pre_lab ",[123,35327,134],{"class":133},[123,35329,35330],{"class":129}," torch.argmax(output, ",[123,35332,35097],{"class":279},[123,35334,134],{"class":133},[123,35336,2825],{"class":164},[123,35338,288],{"class":129},[123,35340,35342],{"class":125,"line":35341},132,[123,35343,35344],{"class":2673},"                # 计算验证集上的当前 batch 损失\n",[123,35346,35348,35351,35353],{"class":125,"line":35347},133,[123,35349,35350],{"class":129},"                val_batch_loss ",[123,35352,134],{"class":133},[123,35354,35355],{"class":129}," criterion(output, b_y)\n",[123,35357,35359],{"class":125,"line":35358},134,[123,35360,35361],{"class":2673},"                # 对损失函数进行累加（按样本数加权）\n",[123,35363,35365,35368,35370,35373,35375,35378,35380],{"class":125,"line":35364},135,[123,35366,35367],{"class":129},"                val_loss ",[123,35369,11909],{"class":133},[123,35371,35372],{"class":129}," val_batch_loss.item() ",[123,35374,3060],{"class":133},[123,35376,35377],{"class":129}," b_x.size(",[123,35379,2799],{"class":164},[123,35381,288],{"class":129},[123,35383,35385,35388,35390,35393,35395],{"class":125,"line":35384},136,[123,35386,35387],{"class":129},"                val_corrects ",[123,35389,11909],{"class":133},[123,35391,35392],{"class":129}," torch.sum(pre_lab ",[123,35394,5391],{"class":133},[123,35396,35397],{"class":129}," b_y.data)\n",[123,35399,35401],{"class":125,"line":35400},137,[123,35402,35403],{"class":2673},"                # 当前用于验证的样本数量\n",[123,35405,35407,35410,35412,35414,35416],{"class":125,"line":35406},138,[123,35408,35409],{"class":129},"            val_num ",[123,35411,11909],{"class":133},[123,35413,35377],{"class":129},[123,35415,2799],{"class":164},[123,35417,288],{"class":129},[123,35419,35421],{"class":125,"line":35420},139,[123,35422,35423],{"class":2673},"        # 计算并保存每一次迭代的loss值和准确率\n",[123,35425,35427],{"class":125,"line":35426},140,[123,35428,35429],{"class":2673},"        # 计算并保存训练集的loss值\n",[123,35431,35433,35436,35438],{"class":125,"line":35432},141,[123,35434,35435],{"class":129},"        train_loss_all.append(train_loss",[123,35437,3187],{"class":133},[123,35439,35440],{"class":129},"train_num)\n",[123,35442,35444],{"class":125,"line":35443},142,[123,35445,35446],{"class":2673},"        # 取双精度\n",[123,35448,35450],{"class":125,"line":35449},143,[123,35451,35452],{"class":2673},"        # 计算并保存训练集的准确率\n",[123,35454,35456,35459,35461],{"class":125,"line":35455},144,[123,35457,35458],{"class":129},"        train_acc_all.append(train_corrects.double().item()",[123,35460,3187],{"class":133},[123,35462,35440],{"class":129},[123,35464,35466],{"class":125,"line":35465},145,[123,35467,35468],{"class":2673},"        # 计算并保存验证集的loss值\n",[123,35470,35472,35475,35477],{"class":125,"line":35471},146,[123,35473,35474],{"class":129},"        val_loss_all.append(val_loss",[123,35476,3187],{"class":133},[123,35478,35479],{"class":129},"val_num)\n",[123,35481,35483],{"class":125,"line":35482},147,[123,35484,35485],{"class":2673},"        # 计算并保存验证集的准确率\n",[123,35487,35489,35492,35494],{"class":125,"line":35488},148,[123,35490,35491],{"class":129},"        val_acc_all.append(val_corrects.double().item()",[123,35493,3187],{"class":133},[123,35495,35479],{"class":129},[123,35497,35499],{"class":125,"line":35498},149,[123,35500,232],{"emptyLinePlaceholder":231},[123,35502,35504],{"class":125,"line":35503},150,[123,35505,35506],{"class":2673},"        # 打印训练一轮的loss值和准确率\n",[123,35508,35510,35512,35514,35516,35518,35521,35523,35526,35528,35531,35533,35535,35537,35539,35542,35544,35546,35549,35551,35553],{"class":125,"line":35509},151,[123,35511,34863],{"class":164},[123,35513,1315],{"class":129},[123,35515,6032],{"class":143},[123,35517,34871],{"class":164},[123,35519,35520],{"class":143},"train loss:",[123,35522,3495],{"class":164},[123,35524,35525],{"class":133},":.4f",[123,35527,3545],{"class":164},[123,35529,35530],{"class":143}," train acc:",[123,35532,3495],{"class":164},[123,35534,35525],{"class":133},[123,35536,3545],{"class":164},[123,35538,6032],{"class":143},[123,35540,35541],{"class":129},".format(epoch,train_loss_all[",[123,35543,3135],{"class":133},[123,35545,2825],{"class":164},[123,35547,35548],{"class":129},"],train_acc_all[",[123,35550,3135],{"class":133},[123,35552,2825],{"class":164},[123,35554,35555],{"class":129},"]))\n",[123,35557,35559,35561,35563,35565,35567,35570,35572,35574,35576,35579,35581,35583,35585,35587,35590,35592,35594,35597,35599,35601],{"class":125,"line":35558},152,[123,35560,34863],{"class":164},[123,35562,1315],{"class":129},[123,35564,6032],{"class":143},[123,35566,34871],{"class":164},[123,35568,35569],{"class":143},"val loss:",[123,35571,3495],{"class":164},[123,35573,35525],{"class":133},[123,35575,3545],{"class":164},[123,35577,35578],{"class":143}," val acc:",[123,35580,3495],{"class":164},[123,35582,35525],{"class":133},[123,35584,3545],{"class":164},[123,35586,6032],{"class":143},[123,35588,35589],{"class":129},".format(epoch,val_loss_all[",[123,35591,3135],{"class":133},[123,35593,2825],{"class":164},[123,35595,35596],{"class":129},"],val_acc_all[",[123,35598,3135],{"class":133},[123,35600,2825],{"class":164},[123,35602,35555],{"class":129},[123,35604,35606],{"class":125,"line":35605},153,[123,35607,232],{"emptyLinePlaceholder":231},[123,35609,35611],{"class":125,"line":35610},154,[123,35612,35613],{"class":2673},"        # 判断准确度--->保存最优模型\n",[123,35615,35617,35619,35622,35624,35626,35628,35630],{"class":125,"line":35616},155,[123,35618,4940],{"class":133},[123,35620,35621],{"class":129}," val_acc_all[",[123,35623,3135],{"class":133},[123,35625,2825],{"class":164},[123,35627,3539],{"class":129},[123,35629,3559],{"class":133},[123,35631,35632],{"class":129},"best_acc:\n",[123,35634,35636],{"class":125,"line":35635},156,[123,35637,35638],{"class":2673},"            # 保存当前模型准确度\n",[123,35640,35642,35645,35647,35649,35652,35654,35656],{"class":125,"line":35641},157,[123,35643,35644],{"class":129},"            best_acc:",[123,35646,2656],{"class":164},[123,35648,134],{"class":133},[123,35650,35651],{"class":129},"val_acc_all[",[123,35653,3135],{"class":133},[123,35655,2825],{"class":164},[123,35657,998],{"class":129},[123,35659,35661],{"class":125,"line":35660},158,[123,35662,35663],{"class":2673},"            # 保存当前的准确度\n",[123,35665,35667],{"class":125,"line":35666},159,[123,35668,35669],{"class":2673},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[123,35671,35673,35676,35678],{"class":125,"line":35672},160,[123,35674,35675],{"class":129},"            best_model_wts",[123,35677,134],{"class":133},[123,35679,34726],{"class":129},[123,35681,35683],{"class":125,"line":35682},161,[123,35684,232],{"emptyLinePlaceholder":231},[123,35686,35688],{"class":125,"line":35687},162,[123,35689,35690],{"class":2673},"        # 计算耗时\n",[123,35692,35694,35697,35699,35702,35704],{"class":125,"line":35693},163,[123,35695,35696],{"class":129},"        time_use",[123,35698,134],{"class":133},[123,35700,35701],{"class":129},"time.time()",[123,35703,3135],{"class":133},[123,35705,35706],{"class":129},"since\n",[123,35708,35710,35712,35714,35717,35719,35722,35724,35726,35728,35730,35732,35735,35738,35741,35743,35746,35748,35750],{"class":125,"line":35709},164,[123,35711,34863],{"class":164},[123,35713,1315],{"class":129},[123,35715,35716],{"class":143},"'训练和验证耗费的时间",[123,35718,3495],{"class":164},[123,35720,35721],{"class":133},":.0f",[123,35723,3545],{"class":164},[123,35725,3147],{"class":143},[123,35727,3495],{"class":164},[123,35729,35721],{"class":133},[123,35731,3545],{"class":164},[123,35733,35734],{"class":143},"s'",[123,35736,35737],{"class":129},".format(time_use",[123,35739,35740],{"class":133},"\u002F\u002F",[123,35742,3506],{"class":164},[123,35744,35745],{"class":129},",time_use",[123,35747,2935],{"class":133},[123,35749,3506],{"class":164},[123,35751,32913],{"class":129},[123,35753,35755],{"class":125,"line":35754},165,[123,35756,35757],{"class":2673},"    # 选择最优参数\n",[123,35759,35761],{"class":125,"line":35760},166,[123,35762,35763],{"class":2673},"    # 加载最高准确率下的模型参数\n",[123,35765,35767],{"class":125,"line":35766},167,[123,35768,35769],{"class":2673},"    # model.load_state_dict(best_model_wts)\n",[123,35771,35773,35776,35779],{"class":125,"line":35772},168,[123,35774,35775],{"class":129},"    torch.save(model.state_dict(best_model_wts), ",[123,35777,35778],{"class":143},"'.\u002Fbest_model.pth'",[123,35780,288],{"class":129},[123,35782,35784],{"class":125,"line":35783},169,[123,35785,35786],{"class":2673},"    # 或者写成\n",[123,35788,35790],{"class":125,"line":35789},170,[123,35791,35792],{"class":2673},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[123,35794,35796],{"class":125,"line":35795},171,[123,35797,35798],{"class":2673},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[123,35800,35802,35805,35807,35810,35813,35815],{"class":125,"line":35801},172,[123,35803,35804],{"class":129},"    train_process",[123,35806,134],{"class":133},[123,35808,35809],{"class":129},"pd.DataFrame(",[123,35811,35812],{"class":279},"data",[123,35814,134],{"class":133},[123,35816,186],{"class":129},[123,35818,35820,35823,35825,35828],{"class":125,"line":35819},173,[123,35821,35822],{"class":143},"        \"epoch\"",[123,35824,3460],{"class":129},[123,35826,35827],{"class":164},"range",[123,35829,35830],{"class":129},"(num_epochs),\n",[123,35832,35834,35837],{"class":125,"line":35833},174,[123,35835,35836],{"class":143},"        \"train_loss_all\"",[123,35838,35839],{"class":129},":train_loss_all,\n",[123,35841,35843,35846],{"class":125,"line":35842},175,[123,35844,35845],{"class":143},"        \"val_loss_all\"",[123,35847,35848],{"class":129},":val_loss_all,\n",[123,35850,35852,35855],{"class":125,"line":35851},176,[123,35853,35854],{"class":143},"        \"train_acc_all\"",[123,35856,35857],{"class":129},":train_acc_all,\n",[123,35859,35861,35864],{"class":125,"line":35860},177,[123,35862,35863],{"class":143},"        \"val_acc_all\"",[123,35865,35866],{"class":129},":val_acc_all\n",[123,35868,35870],{"class":125,"line":35869},178,[123,35871,35872],{"class":129},"    })\n",[123,35874,35876],{"class":125,"line":35875},179,[123,35877,35878],{"class":2673},"    # 返回训练保存的过程\n",[123,35880,35882,35884],{"class":125,"line":35881},180,[123,35883,6529],{"class":133},[123,35885,35886],{"class":129}," train_process\n",[123,35888,35890],{"class":125,"line":35889},181,[123,35891,232],{"emptyLinePlaceholder":231},[123,35893,35895],{"class":125,"line":35894},182,[123,35896,35897],{"class":2673},"# 将loss值和精度按照图片的形式展示出来\n",[123,35899,35901,35903,35906],{"class":125,"line":35900},183,[123,35902,34359],{"class":133},[123,35904,35905],{"class":337}," matplot_acc_loss",[123,35907,35908],{"class":129},"(train_process):\n",[123,35910,35912],{"class":125,"line":35911},184,[123,35913,35914],{"class":2673},"    # 设置图的大小\n",[123,35916,35918,35921,35923,35925,35927,35929,35931,35933],{"class":125,"line":35917},185,[123,35919,35920],{"class":129},"    plt.figure(",[123,35922,34105],{"class":279},[123,35924,134],{"class":133},[123,35926,1315],{"class":129},[123,35928,2215],{"class":164},[123,35930,2985],{"class":129},[123,35932,2901],{"class":164},[123,35934,32913],{"class":129},[123,35936,35938],{"class":125,"line":35937},186,[123,35939,35940],{"class":2673},"    # 设置图中有几张图\n",[123,35942,35944],{"class":125,"line":35943},187,[123,35945,35946],{"class":2673},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[123,35948,35950],{"class":125,"line":35949},188,[123,35951,35952],{"class":2673},"    # ①loss图\n",[123,35954,35956,35958,35960,35962,35964,35966,35968],{"class":125,"line":35955},189,[123,35957,34139],{"class":129},[123,35959,2825],{"class":164},[123,35961,2985],{"class":129},[123,35963,2692],{"class":164},[123,35965,2985],{"class":129},[123,35967,2825],{"class":164},[123,35969,288],{"class":129},[123,35971,35973],{"class":125,"line":35972},190,[123,35974,35975],{"class":2673},"    # 补充:\n",[123,35977,35979],{"class":125,"line":35978},191,[123,35980,35981],{"class":2673},"    # plt.subplot(nrows, ncols, index)\n",[123,35983,35985],{"class":125,"line":35984},192,[123,35986,35987],{"class":2673},"    # nrows：行数\n",[123,35989,35991],{"class":125,"line":35990},193,[123,35992,35993],{"class":2673},"    # ncols：列数\n",[123,35995,35997],{"class":125,"line":35996},194,[123,35998,35999],{"class":2673},"    # index：目前选中第几个子图（从1开始）\n",[123,36001,36003,36006,36009,36012,36015,36017,36020,36022,36025],{"class":125,"line":36002},195,[123,36004,36005],{"class":129},"    plt.plot(train_process[",[123,36007,36008],{"class":143},"\"epoch\"",[123,36010,36011],{"class":129},"],train_process.train_loss_all,",[123,36013,36014],{"class":143},"'ro-'",[123,36016,2985],{"class":129},[123,36018,36019],{"class":279},"label",[123,36021,134],{"class":133},[123,36023,36024],{"class":143},"'train loss'",[123,36026,288],{"class":129},[123,36028,36030,36032,36034,36037,36040,36042,36044,36046,36049],{"class":125,"line":36029},196,[123,36031,36005],{"class":129},[123,36033,36008],{"class":143},[123,36035,36036],{"class":129},"],train_process.val_loss_all,",[123,36038,36039],{"class":143},"'bs--'",[123,36041,2985],{"class":129},[123,36043,36019],{"class":279},[123,36045,134],{"class":133},[123,36047,36048],{"class":143},"'val loss'",[123,36050,288],{"class":129},[123,36052,36054],{"class":125,"line":36053},197,[123,36055,36056],{"class":2673},"    # 添加一个图例\n",[123,36058,36060],{"class":125,"line":36059},198,[123,36061,36062],{"class":129},"    plt.legend()\n",[123,36064,36066],{"class":125,"line":36065},199,[123,36067,36068],{"class":2673},"    # 给轴添加标签\n",[123,36070,36072,36075,36078],{"class":125,"line":36071},200,[123,36073,36074],{"class":129},"    plt.xlabel(",[123,36076,36077],{"class":143},"'epoch'",[123,36079,288],{"class":129},[123,36081,36083,36086,36089],{"class":125,"line":36082},201,[123,36084,36085],{"class":129},"    plt.ylabel(",[123,36087,36088],{"class":143},"'loss'",[123,36090,288],{"class":129},[123,36092,36094],{"class":125,"line":36093},202,[123,36095,36096],{"class":2673},"    # ②准确度图\n",[123,36098,36100,36102,36104,36106,36108,36110,36112],{"class":125,"line":36099},203,[123,36101,34139],{"class":129},[123,36103,2825],{"class":164},[123,36105,2985],{"class":129},[123,36107,2692],{"class":164},[123,36109,2985],{"class":129},[123,36111,2692],{"class":164},[123,36113,288],{"class":129},[123,36115,36117,36119,36121,36124,36126,36128,36130,36132,36135],{"class":125,"line":36116},204,[123,36118,36005],{"class":129},[123,36120,36008],{"class":143},[123,36122,36123],{"class":129},"],train_process.train_acc_all,",[123,36125,36014],{"class":143},[123,36127,2985],{"class":129},[123,36129,36019],{"class":279},[123,36131,134],{"class":133},[123,36133,36134],{"class":143},"'train acc'",[123,36136,288],{"class":129},[123,36138,36140,36142,36144,36147,36149,36151,36153,36155,36158],{"class":125,"line":36139},205,[123,36141,36005],{"class":129},[123,36143,36008],{"class":143},[123,36145,36146],{"class":129},"],train_process.val_acc_all,",[123,36148,36039],{"class":143},[123,36150,2985],{"class":129},[123,36152,36019],{"class":279},[123,36154,134],{"class":133},[123,36156,36157],{"class":143},"'val acc'",[123,36159,288],{"class":129},[123,36161,36163],{"class":125,"line":36162},206,[123,36164,36165],{"class":2673},"    # 添加图例\n",[123,36167,36169],{"class":125,"line":36168},207,[123,36170,36062],{"class":129},[123,36172,36174,36176,36178],{"class":125,"line":36173},208,[123,36175,36074],{"class":129},[123,36177,36008],{"class":143},[123,36179,288],{"class":129},[123,36181,36183,36185,36188],{"class":125,"line":36182},209,[123,36184,36085],{"class":129},[123,36186,36187],{"class":143},"\"acc\"",[123,36189,288],{"class":129},[123,36191,36193],{"class":125,"line":36192},210,[123,36194,36195],{"class":129},"    plt.show()\n",[123,36197,36199],{"class":125,"line":36198},211,[123,36200,232],{"emptyLinePlaceholder":231},[123,36202,36204],{"class":125,"line":36203},212,[123,36205,36206],{"class":2673},"# 正式开始训练:\n",[123,36208,36210,36212,36214,36216,36218],{"class":125,"line":36209},213,[123,36211,3998],{"class":133},[123,36213,33635],{"class":164},[123,36215,5391],{"class":133},[123,36217,33640],{"class":143},[123,36219,1344],{"class":129},[123,36221,36223],{"class":125,"line":36222},214,[123,36224,36225],{"class":2673},"    # 将模型实例化\n",[123,36227,36229,36232,36234],{"class":125,"line":36228},215,[123,36230,36231],{"class":129},"    LeNet",[123,36233,134],{"class":133},[123,36235,36236],{"class":129},"LeNet()\n",[123,36238,36240,36243,36245],{"class":125,"line":36239},216,[123,36241,36242],{"class":129},"    train_dataloader,val_dataloader",[123,36244,134],{"class":133},[123,36246,36247],{"class":129},"train_val_data_process()\n",[123,36249,36251,36253,36255,36258,36261,36263,36265],{"class":125,"line":36250},217,[123,36252,35804],{"class":129},[123,36254,134],{"class":133},[123,36256,36257],{"class":129},"train_model_process(LeNet,train_dataloader,val_dataloader,",[123,36259,36260],{"class":279},"num_epochs",[123,36262,134],{"class":133},[123,36264,3302],{"class":164},[123,36266,288],{"class":129},[123,36268,36270],{"class":125,"line":36269},218,[123,36271,36272],{"class":129},"    matplot_acc_loss(train_process)\n",[19,36274,36275],{},"画图的补充点学习：",[19,36277,36278],{},[3929,36279],{"alt":118,"src":36280},"\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",[26,36282,36283],{"start":156},[29,36284,36285],{},"测试",[113,36287,36289],{"className":115,"code":36288,"language":117,"meta":118,"style":118},"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",[120,36290,36291,36297,36307,36319,36329,36334,36344,36354,36358,36363,36372,36389,36400,36417,36428,36444,36449,36460,36471,36482,36489,36493,36498,36508,36513,36530,36538,36542,36547,36556,36565,36569,36574,36579,36584,36591,36596,36608,36618,36628,36633,36637,36642,36651,36656,36672,36677,36682,36687,36701,36706,36720,36724,36729,36744,36749,36761,36765,36770,36782,36787,36795,36800,36805,36815,36820,36829,36834,36839,36843,36848,36853,36869,36877,36882,36887,36946,36952,36957,36968,36976,36984,36988,36993,36997,37002,37010,37015,37031,37036,37046,37056],{"__ignoreMap":118},[123,36292,36293,36295],{"class":125,"line":126},[123,36294,223],{"class":133},[123,36296,32812],{"class":129},[123,36298,36299,36301,36303,36305],{"class":125,"line":140},[123,36300,223],{"class":133},[123,36302,33829],{"class":129},[123,36304,547],{"class":133},[123,36306,33834],{"class":129},[123,36308,36309,36311,36314,36316],{"class":125,"line":156},[123,36310,391],{"class":133},[123,36312,36313],{"class":129}," jupyter_client.consoleapp ",[123,36315,223],{"class":133},[123,36317,36318],{"class":129}," classes\n",[123,36320,36321,36323,36325,36327],{"class":125,"line":168},[123,36322,391],{"class":133},[123,36324,33812],{"class":129},[123,36326,223],{"class":133},[123,36328,33817],{"class":129},[123,36330,36331],{"class":125,"line":268},[123,36332,36333],{"class":2673},"# 导入数据集\n",[123,36335,36336,36338,36340,36342],{"class":125,"line":291},[123,36337,391],{"class":133},[123,36339,33783],{"class":129},[123,36341,223],{"class":133},[123,36343,33788],{"class":129},[123,36345,36346,36348,36350,36352],{"class":125,"line":300},[123,36347,391],{"class":133},[123,36349,34326],{"class":129},[123,36351,223],{"class":133},[123,36353,34331],{"class":129},[123,36355,36356],{"class":125,"line":305},[123,36357,232],{"emptyLinePlaceholder":231},[123,36359,36360],{"class":125,"line":316},[123,36361,36362],{"class":2673},"# 测试数据处理\n",[123,36364,36365,36367,36370],{"class":125,"line":673},[123,36366,34359],{"class":133},[123,36368,36369],{"class":337}," test_data_process",[123,36371,34365],{"class":129},[123,36373,36374,36377,36379,36381,36383,36385,36387],{"class":125,"line":692},[123,36375,36376],{"class":129},"    test_data",[123,36378,134],{"class":133},[123,36380,33869],{"class":129},[123,36382,33872],{"class":279},[123,36384,134],{"class":133},[123,36386,33877],{"class":143},[123,36388,153],{"class":129},[123,36390,36391,36394,36396,36398],{"class":125,"line":713},[123,36392,36393],{"class":279},"                           train",[123,36395,134],{"class":133},[123,36397,285],{"class":164},[123,36399,153],{"class":129},[123,36401,36402,36405,36407,36409,36411,36413,36415],{"class":125,"line":718},[123,36403,36404],{"class":279},"                           transform",[123,36406,134],{"class":133},[123,36408,33905],{"class":129},[123,36410,33908],{"class":279},[123,36412,134],{"class":133},[123,36414,3500],{"class":164},[123,36416,33916],{"class":129},[123,36418,36419,36422,36424,36426],{"class":125,"line":1138},[123,36420,36421],{"class":279},"                           download",[123,36423,134],{"class":133},[123,36425,870],{"class":164},[123,36427,288],{"class":129},[123,36429,36430,36433,36435,36437,36439,36441],{"class":125,"line":1429},[123,36431,36432],{"class":129},"    test_dataloader",[123,36434,134],{"class":133},[123,36436,33946],{"class":129},[123,36438,33949],{"class":279},[123,36440,134],{"class":133},[123,36442,36443],{"class":129},"test_data,\n",[123,36445,36446],{"class":125,"line":1439},[123,36447,36448],{"class":2673},"                                    # 这里是一张一张进行测试\n",[123,36450,36451,36454,36456,36458],{"class":125,"line":1444},[123,36452,36453],{"class":279},"                                    batch_size",[123,36455,134],{"class":133},[123,36457,2825],{"class":164},[123,36459,153],{"class":129},[123,36461,36462,36465,36467,36469],{"class":125,"line":1453},[123,36463,36464],{"class":279},"                                    shuffle",[123,36466,134],{"class":133},[123,36468,870],{"class":164},[123,36470,153],{"class":129},[123,36472,36473,36476,36478,36480],{"class":125,"line":1458},[123,36474,36475],{"class":279},"                                    num_workers",[123,36477,134],{"class":133},[123,36479,2799],{"class":164},[123,36481,288],{"class":129},[123,36483,36484,36486],{"class":125,"line":1476},[123,36485,6529],{"class":133},[123,36487,36488],{"class":129}," test_dataloader\n",[123,36490,36491],{"class":125,"line":1494},[123,36492,232],{"emptyLinePlaceholder":231},[123,36494,36495],{"class":125,"line":1499},[123,36496,36497],{"class":2673},"# 定义模型测试函数\n",[123,36499,36500,36502,36505],{"class":125,"line":1517},[123,36501,34359],{"class":133},[123,36503,36504],{"class":337}," test_model_process",[123,36506,36507],{"class":129},"(model,test_dataloader):\n",[123,36509,36510],{"class":125,"line":1534},[123,36511,36512],{"class":2673},"    # 将模型放到设备当中，先进行判断\n",[123,36514,36515,36517,36519,36521,36523,36525,36527],{"class":125,"line":1539},[123,36516,33652],{"class":129},[123,36518,134],{"class":133},[123,36520,33659],{"class":143},[123,36522,4158],{"class":133},[123,36524,33664],{"class":129},[123,36526,4155],{"class":133},[123,36528,36529],{"class":143}," \"cpu\"\n",[123,36531,36532,36534,36536],{"class":125,"line":2080},[123,36533,33704],{"class":129},[123,36535,134],{"class":133},[123,36537,34701],{"class":129},[123,36539,36540],{"class":125,"line":2097},[123,36541,232],{"emptyLinePlaceholder":231},[123,36543,36544],{"class":125,"line":2114},[123,36545,36546],{"class":2673},"    # 设置初始化参数\n",[123,36548,36549,36552,36554],{"class":125,"line":2125},[123,36550,36551],{"class":129},"    test_corrects",[123,36553,134],{"class":133},[123,36555,34754],{"class":164},[123,36557,36558,36561,36563],{"class":125,"line":2130},[123,36559,36560],{"class":129},"    test_num",[123,36562,134],{"class":133},[123,36564,5526],{"class":164},[123,36566,36567],{"class":125,"line":5033},[123,36568,232],{"emptyLinePlaceholder":231},[123,36570,36571],{"class":125,"line":5041},[123,36572,36573],{"class":2673},"    # 进行模型测试\n",[123,36575,36576],{"class":125,"line":5046},[123,36577,36578],{"class":2673},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[123,36580,36581],{"class":125,"line":5052},[123,36582,36583],{"class":2673},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[123,36585,36586,36589],{"class":125,"line":5058},[123,36587,36588],{"class":133},"    with",[123,36590,35296],{"class":129},[123,36592,36593],{"class":125,"line":5063},[123,36594,36595],{"class":2673},"        # 从数据中进行\n",[123,36597,36598,36600,36603,36605],{"class":125,"line":10380},[123,36599,5843],{"class":133},[123,36601,36602],{"class":129}," test_data_x,test_data_y ",[123,36604,1405],{"class":133},[123,36606,36607],{"class":129}," test_dataloader:\n",[123,36609,36610,36613,36615],{"class":125,"line":10404},[123,36611,36612],{"class":129},"            test_data_x",[123,36614,134],{"class":133},[123,36616,36617],{"class":129},"test_data_x.to(device)\n",[123,36619,36620,36623,36625],{"class":125,"line":10409},[123,36621,36622],{"class":129},"            test_data_y",[123,36624,134],{"class":133},[123,36626,36627],{"class":129},"test_data_y.to(device)\n",[123,36629,36630],{"class":125,"line":10415},[123,36631,36632],{"class":2673},"            # 设置为验证模式\n",[123,36634,36635],{"class":125,"line":10442},[123,36636,35287],{"class":129},[123,36638,36639],{"class":125,"line":10447},[123,36640,36641],{"class":2673},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[123,36643,36644,36646,36648],{"class":125,"line":10453},[123,36645,35072],{"class":129},[123,36647,134],{"class":133},[123,36649,36650],{"class":129},"model(test_data_x)\n",[123,36652,36653],{"class":125,"line":10465},[123,36654,36655],{"class":2673},"            # 查找每一行中最大值对应的下标\n",[123,36657,36658,36660,36662,36664,36666,36668,36670],{"class":125,"line":10477},[123,36659,35089],{"class":129},[123,36661,134],{"class":133},[123,36663,35094],{"class":129},[123,36665,35097],{"class":279},[123,36667,134],{"class":133},[123,36669,2825],{"class":164},[123,36671,288],{"class":129},[123,36673,36674],{"class":125,"line":10489},[123,36675,36676],{"class":2673},"            # 计算正确率\n",[123,36678,36679],{"class":125,"line":12148},[123,36680,36681],{"class":2673},"            # .data表示是一个不带梯度信息的tensor\n",[123,36683,36684],{"class":125,"line":12173},[123,36685,36686],{"class":2673},"            # 如果预测正确，则准确度test_corrects加1\n",[123,36688,36689,36692,36694,36696,36698],{"class":125,"line":12196},[123,36690,36691],{"class":129},"            test_corrects",[123,36693,11909],{"class":133},[123,36695,35199],{"class":129},[123,36697,5391],{"class":133},[123,36699,36700],{"class":129},"test_data_y.data)\n",[123,36702,36703],{"class":125,"line":12220},[123,36704,36705],{"class":2673},"            # 将所有的测试样本进行累计\n",[123,36707,36708,36711,36713,36716,36718],{"class":125,"line":12225},[123,36709,36710],{"class":129},"            test_num",[123,36712,11909],{"class":133},[123,36714,36715],{"class":129},"test_data_x.size(",[123,36717,2799],{"class":164},[123,36719,288],{"class":129},[123,36721,36722],{"class":125,"line":12230},[123,36723,232],{"emptyLinePlaceholder":231},[123,36725,36726],{"class":125,"line":12235},[123,36727,36728],{"class":2673},"        # 计算准确度\n",[123,36730,36731,36734,36736,36739,36741],{"class":125,"line":12244},[123,36732,36733],{"class":129},"        test_acc",[123,36735,134],{"class":133},[123,36737,36738],{"class":129},"test_corrects.double().item()",[123,36740,3187],{"class":133},[123,36742,36743],{"class":129},"test_num\n",[123,36745,36746],{"class":125,"line":12249},[123,36747,36748],{"class":2673},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[123,36750,36751,36753,36755,36758],{"class":125,"line":12255},[123,36752,34863],{"class":164},[123,36754,1315],{"class":129},[123,36756,36757],{"class":143},"\"测试的准确率：\"",[123,36759,36760],{"class":129},",test_acc)\n",[123,36762,36763],{"class":125,"line":12276},[123,36764,232],{"emptyLinePlaceholder":231},[123,36766,36767],{"class":125,"line":12282},[123,36768,36769],{"class":2673},"# 实现模型的测试功能\n",[123,36771,36772,36774,36776,36778,36780],{"class":125,"line":12296},[123,36773,3998],{"class":133},[123,36775,33635],{"class":164},[123,36777,5391],{"class":133},[123,36779,33640],{"class":143},[123,36781,1344],{"class":129},[123,36783,36784],{"class":125,"line":12302},[123,36785,36786],{"class":2673},"    # 加载模型\n",[123,36788,36789,36791,36793],{"class":125,"line":12329},[123,36790,33704],{"class":129},[123,36792,134],{"class":133},[123,36794,36236],{"class":129},[123,36796,36797],{"class":125,"line":12338},[123,36798,36799],{"class":2673},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[123,36801,36802],{"class":125,"line":12344},[123,36803,36804],{"class":2673},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[123,36806,36807,36810,36813],{"class":125,"line":12352},[123,36808,36809],{"class":129},"    model.load_state_dict(torch.load(",[123,36811,36812],{"class":143},"'best_model.pth'",[123,36814,32913],{"class":129},[123,36816,36817],{"class":125,"line":12357},[123,36818,36819],{"class":2673},"    # 数据加载\n",[123,36821,36822,36824,36826],{"class":125,"line":19032},[123,36823,36432],{"class":129},[123,36825,134],{"class":133},[123,36827,36828],{"class":129},"test_data_process()\n",[123,36830,36831],{"class":125,"line":19038},[123,36832,36833],{"class":2673},"    # 加载模型测试的函数\n",[123,36835,36836],{"class":125,"line":19061},[123,36837,36838],{"class":129},"    test_model_process(model,test_dataloader)\n",[123,36840,36841],{"class":125,"line":19067},[123,36842,232],{"emptyLinePlaceholder":231},[123,36844,36845],{"class":125,"line":19090},[123,36846,36847],{"class":2673},"    # 验证集推理实现：\n",[123,36849,36850],{"class":125,"line":19104},[123,36851,36852],{"class":2673},"    # 加载数据加载的更详细一些\n",[123,36854,36855,36857,36859,36861,36863,36865,36867],{"class":125,"line":19124},[123,36856,33652],{"class":129},[123,36858,134],{"class":133},[123,36860,33659],{"class":143},[123,36862,4158],{"class":133},[123,36864,33664],{"class":129},[123,36866,4155],{"class":133},[123,36868,36529],{"class":143},[123,36870,36871,36873,36875],{"class":125,"line":19130},[123,36872,33704],{"class":129},[123,36874,134],{"class":133},[123,36876,34701],{"class":129},[123,36878,36879],{"class":125,"line":19141},[123,36880,36881],{"class":2673},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[123,36883,36884],{"class":125,"line":19164},[123,36885,36886],{"class":2673},"    # 顺序不可改变\n",[123,36888,36889,36892,36894,36896,36899,36901,36904,36906,36909,36911,36914,36916,36919,36921,36924,36926,36929,36931,36934,36936,36939,36941,36944],{"class":125,"line":19186},[123,36890,36891],{"class":129},"    classes",[123,36893,134],{"class":133},[123,36895,839],{"class":129},[123,36897,36898],{"class":143},"'T-shirt\u002Ftop'",[123,36900,2985],{"class":129},[123,36902,36903],{"class":143},"'Trouser'",[123,36905,2985],{"class":129},[123,36907,36908],{"class":143},"'Pullover'",[123,36910,2985],{"class":129},[123,36912,36913],{"class":143},"'Dress'",[123,36915,2985],{"class":129},[123,36917,36918],{"class":143},"'Coat'",[123,36920,2985],{"class":129},[123,36922,36923],{"class":143},"'Sandal'",[123,36925,2985],{"class":129},[123,36927,36928],{"class":143},"'Shirt'",[123,36930,2985],{"class":129},[123,36932,36933],{"class":143},"'Sneaker'",[123,36935,2985],{"class":129},[123,36937,36938],{"class":143},"'Bag'",[123,36940,2985],{"class":129},[123,36942,36943],{"class":143},"'Ankle boot'",[123,36945,998],{"class":129},[123,36947,36948,36950],{"class":125,"line":19191},[123,36949,36588],{"class":133},[123,36951,35296],{"class":129},[123,36953,36954],{"class":125,"line":19197},[123,36955,36956],{"class":2673},"        # 将数据和标签都放到设备当中\n",[123,36958,36959,36961,36964,36966],{"class":125,"line":19211},[123,36960,5843],{"class":133},[123,36962,36963],{"class":129}," b_x,b_y ",[123,36965,1405],{"class":133},[123,36967,36607],{"class":129},[123,36969,36970,36972,36974],{"class":125,"line":19224},[123,36971,35022],{"class":129},[123,36973,134],{"class":133},[123,36975,35027],{"class":129},[123,36977,36978,36980,36982],{"class":125,"line":19229},[123,36979,35037],{"class":129},[123,36981,134],{"class":133},[123,36983,35042],{"class":129},[123,36985,36986],{"class":125,"line":19243},[123,36987,232],{"emptyLinePlaceholder":231},[123,36989,36990],{"class":125,"line":19248},[123,36991,36992],{"class":2673},"            # 设置模型为验证模式\n",[123,36994,36995],{"class":125,"line":19254},[123,36996,35287],{"class":129},[123,36998,36999],{"class":125,"line":19259},[123,37000,37001],{"class":2673},"            # 模型推理结果\n",[123,37003,37004,37006,37008],{"class":125,"line":19273},[123,37005,35072],{"class":129},[123,37007,134],{"class":133},[123,37009,35077],{"class":129},[123,37011,37012],{"class":125,"line":19278},[123,37013,37014],{"class":2673},"            # 获取最大下标，最大下标就是类别号\n",[123,37016,37017,37019,37021,37023,37025,37027,37029],{"class":125,"line":19283},[123,37018,35089],{"class":129},[123,37020,134],{"class":133},[123,37022,35094],{"class":129},[123,37024,35097],{"class":279},[123,37026,134],{"class":133},[123,37028,2825],{"class":164},[123,37030,288],{"class":129},[123,37032,37033],{"class":125,"line":19297},[123,37034,37035],{"class":2673},"            # 取出张量中的数值\n",[123,37037,37038,37041,37043],{"class":125,"line":19309},[123,37039,37040],{"class":129},"            result",[123,37042,134],{"class":133},[123,37044,37045],{"class":129},"pre_lab.item()\n",[123,37047,37048,37051,37053],{"class":125,"line":19314},[123,37049,37050],{"class":129},"            label",[123,37052,134],{"class":133},[123,37054,37055],{"class":129},"b_y.item()\n",[123,37057,37058,37061,37063,37066,37069,37072,37074,37077],{"class":125,"line":19327},[123,37059,37060],{"class":164},"            print",[123,37062,1315],{"class":129},[123,37064,37065],{"class":143},"\"预测值：\"",[123,37067,37068],{"class":129},",classes[result],",[123,37070,37071],{"class":143},"\"------\"",[123,37073,2985],{"class":129},[123,37075,37076],{"class":143},"\"真实值：\"",[123,37078,37079],{"class":129},",classes[label])\n",[19,37081,37082],{},"（2）AlexNet",[26,37084,37085],{},[29,37086,37087],{},"神经网络构建",[113,37089,37091],{"className":115,"code":37090,"language":117,"meta":118,"style":118},"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",[120,37092,37093,37099,37109,37119,37131,37135,37152,37160,37175,37187,37229,37256,37299,37325,37369,37412,37455,37482,37486,37496,37501,37529,37548,37567,37571,37576,37584,37599,37609,37623,37633,37648,37663,37678,37689,37693,37698,37708,37723,37728,37742,37757,37769,37774,37785,37790,37796,37801,37813,37833,37838,37847],{"__ignoreMap":118},[123,37094,37095,37097],{"class":125,"line":126},[123,37096,223],{"class":133},[123,37098,32812],{"class":129},[123,37100,37101,37103,37105,37107],{"class":125,"line":140},[123,37102,391],{"class":133},[123,37104,33155],{"class":129},[123,37106,223],{"class":133},[123,37108,33160],{"class":129},[123,37110,37111,37113,37115,37117],{"class":125,"line":156},[123,37112,391],{"class":133},[123,37114,33172],{"class":129},[123,37116,223],{"class":133},[123,37118,33177],{"class":129},[123,37120,37121,37123,37126,37128],{"class":125,"line":168},[123,37122,223],{"class":133},[123,37124,37125],{"class":129}," torch.nn.functional ",[123,37127,547],{"class":133},[123,37129,37130],{"class":129}," F\n",[123,37132,37133],{"class":125,"line":268},[123,37134,232],{"emptyLinePlaceholder":231},[123,37136,37137,37139,37142,37144,37146,37148,37150],{"class":125,"line":291},[123,37138,17124],{"class":133},[123,37140,37141],{"class":337}," AlexNet",[123,37143,1315],{"class":129},[123,37145,33193],{"class":337},[123,37147,3161],{"class":129},[123,37149,33198],{"class":337},[123,37151,33201],{"class":129},[123,37153,37154,37156,37158],{"class":125,"line":300},[123,37155,33216],{"class":133},[123,37157,33219],{"class":164},[123,37159,33222],{"class":129},[123,37161,37162,37164,37167,37169,37171,37173],{"class":125,"line":305},[123,37163,33232],{"class":164},[123,37165,37166],{"class":129},"(AlexNet,",[123,37168,33238],{"class":164},[123,37170,33241],{"class":129},[123,37172,33244],{"class":164},[123,37174,4420],{"class":129},[123,37176,37177,37179,37182,37184],{"class":125,"line":316},[123,37178,33260],{"class":164},[123,37180,37181],{"class":129},".ReLu",[123,37183,134],{"class":133},[123,37185,37186],{"class":129},"nn.ReLU()\n",[123,37188,37189,37191,37193,37195,37197,37199,37201,37203,37205,37207,37209,37211,37213,37215,37217,37219,37221,37223,37225,37227],{"class":125,"line":673},[123,37190,33260],{"class":164},[123,37192,33263],{"class":129},[123,37194,134],{"class":133},[123,37196,33268],{"class":129},[123,37198,33271],{"class":279},[123,37200,134],{"class":133},[123,37202,2825],{"class":164},[123,37204,2985],{"class":129},[123,37206,33280],{"class":279},[123,37208,134],{"class":133},[123,37210,2817],{"class":164},[123,37212,2985],{"class":129},[123,37214,33289],{"class":279},[123,37216,134],{"class":133},[123,37218,3077],{"class":164},[123,37220,2985],{"class":129},[123,37222,33344],{"class":279},[123,37224,134],{"class":133},[123,37226,2901],{"class":164},[123,37228,288],{"class":129},[123,37230,37231,37233,37235,37237,37240,37242,37244,37246,37248,37250,37252,37254],{"class":125,"line":692},[123,37232,33260],{"class":164},[123,37234,33328],{"class":129},[123,37236,134],{"class":133},[123,37238,37239],{"class":129},"nn.MaxPool2d(",[123,37241,33289],{"class":279},[123,37243,134],{"class":133},[123,37245,2686],{"class":164},[123,37247,2985],{"class":129},[123,37249,33344],{"class":279},[123,37251,134],{"class":133},[123,37253,2692],{"class":164},[123,37255,288],{"class":129},[123,37257,37258,37260,37262,37264,37266,37268,37270,37272,37274,37276,37278,37281,37283,37285,37287,37289,37291,37293,37295,37297],{"class":125,"line":713},[123,37259,33260],{"class":164},[123,37261,33357],{"class":129},[123,37263,134],{"class":133},[123,37265,33268],{"class":129},[123,37267,33271],{"class":279},[123,37269,134],{"class":133},[123,37271,2817],{"class":164},[123,37273,2985],{"class":129},[123,37275,33280],{"class":279},[123,37277,134],{"class":133},[123,37279,37280],{"class":164},"256",[123,37282,2985],{"class":129},[123,37284,33289],{"class":279},[123,37286,134],{"class":133},[123,37288,2926],{"class":164},[123,37290,2985],{"class":129},[123,37292,33298],{"class":279},[123,37294,134],{"class":133},[123,37296,2692],{"class":164},[123,37298,288],{"class":129},[123,37300,37301,37303,37305,37307,37309,37311,37313,37315,37317,37319,37321,37323],{"class":125,"line":718},[123,37302,33260],{"class":164},[123,37304,33392],{"class":129},[123,37306,134],{"class":133},[123,37308,37239],{"class":129},[123,37310,33289],{"class":279},[123,37312,134],{"class":133},[123,37314,2686],{"class":164},[123,37316,2985],{"class":129},[123,37318,33344],{"class":279},[123,37320,134],{"class":133},[123,37322,2692],{"class":164},[123,37324,288],{"class":129},[123,37326,37327,37329,37332,37334,37336,37338,37340,37342,37344,37346,37348,37351,37353,37355,37357,37359,37361,37363,37365,37367],{"class":125,"line":1138},[123,37328,33260],{"class":164},[123,37330,37331],{"class":129},".c5",[123,37333,134],{"class":133},[123,37335,33268],{"class":129},[123,37337,33271],{"class":279},[123,37339,134],{"class":133},[123,37341,37280],{"class":164},[123,37343,2985],{"class":129},[123,37345,33280],{"class":279},[123,37347,134],{"class":133},[123,37349,37350],{"class":164},"384",[123,37352,2985],{"class":129},[123,37354,33289],{"class":279},[123,37356,134],{"class":133},[123,37358,2686],{"class":164},[123,37360,2985],{"class":129},[123,37362,33298],{"class":279},[123,37364,134],{"class":133},[123,37366,2825],{"class":164},[123,37368,288],{"class":129},[123,37370,37371,37373,37376,37378,37380,37382,37384,37386,37388,37390,37392,37394,37396,37398,37400,37402,37404,37406,37408,37410],{"class":125,"line":1429},[123,37372,33260],{"class":164},[123,37374,37375],{"class":129},".c6",[123,37377,134],{"class":133},[123,37379,33268],{"class":129},[123,37381,33271],{"class":279},[123,37383,134],{"class":133},[123,37385,37350],{"class":164},[123,37387,2985],{"class":129},[123,37389,33280],{"class":279},[123,37391,134],{"class":133},[123,37393,37350],{"class":164},[123,37395,2985],{"class":129},[123,37397,33289],{"class":279},[123,37399,134],{"class":133},[123,37401,2686],{"class":164},[123,37403,2985],{"class":129},[123,37405,33298],{"class":279},[123,37407,134],{"class":133},[123,37409,2825],{"class":164},[123,37411,288],{"class":129},[123,37413,37414,37416,37419,37421,37423,37425,37427,37429,37431,37433,37435,37437,37439,37441,37443,37445,37447,37449,37451,37453],{"class":125,"line":1439},[123,37415,33260],{"class":164},[123,37417,37418],{"class":129},".c7",[123,37420,134],{"class":133},[123,37422,33268],{"class":129},[123,37424,33271],{"class":279},[123,37426,134],{"class":133},[123,37428,37350],{"class":164},[123,37430,2985],{"class":129},[123,37432,33280],{"class":279},[123,37434,134],{"class":133},[123,37436,37280],{"class":164},[123,37438,2985],{"class":129},[123,37440,33289],{"class":279},[123,37442,134],{"class":133},[123,37444,2686],{"class":164},[123,37446,2985],{"class":129},[123,37448,33298],{"class":279},[123,37450,134],{"class":133},[123,37452,2825],{"class":164},[123,37454,288],{"class":129},[123,37456,37457,37459,37462,37464,37466,37468,37470,37472,37474,37476,37478,37480],{"class":125,"line":1444},[123,37458,33260],{"class":164},[123,37460,37461],{"class":129},".s8",[123,37463,134],{"class":133},[123,37465,37239],{"class":129},[123,37467,33289],{"class":279},[123,37469,134],{"class":133},[123,37471,2686],{"class":164},[123,37473,2985],{"class":129},[123,37475,33344],{"class":279},[123,37477,134],{"class":133},[123,37479,2692],{"class":164},[123,37481,288],{"class":129},[123,37483,37484],{"class":125,"line":1453},[123,37485,33417],{"class":2673},[123,37487,37488,37490,37492,37494],{"class":125,"line":1458},[123,37489,33260],{"class":164},[123,37491,33424],{"class":129},[123,37493,134],{"class":133},[123,37495,33429],{"class":129},[123,37497,37498],{"class":125,"line":1476},[123,37499,37500],{"class":2673},"       # 定义全连接层\n",[123,37502,37503,37505,37508,37510,37512,37514,37516,37518,37520,37522,37524,37527],{"class":125,"line":1494},[123,37504,33260],{"class":164},[123,37506,37507],{"class":129},".f1",[123,37509,134],{"class":133},[123,37511,33446],{"class":129},[123,37513,2951],{"class":164},[123,37515,3060],{"class":133},[123,37517,2951],{"class":164},[123,37519,3060],{"class":133},[123,37521,37280],{"class":164},[123,37523,2985],{"class":129},[123,37525,37526],{"class":164},"4096",[123,37528,288],{"class":129},[123,37530,37531,37533,37536,37538,37540,37542,37544,37546],{"class":125,"line":1499},[123,37532,33260],{"class":164},[123,37534,37535],{"class":129},".f2",[123,37537,134],{"class":133},[123,37539,33446],{"class":129},[123,37541,37526],{"class":164},[123,37543,2985],{"class":129},[123,37545,37526],{"class":164},[123,37547,288],{"class":129},[123,37549,37550,37552,37555,37557,37559,37561,37563,37565],{"class":125,"line":1517},[123,37551,33260],{"class":164},[123,37553,37554],{"class":129},".f3",[123,37556,134],{"class":133},[123,37558,33446],{"class":129},[123,37560,37526],{"class":164},[123,37562,2985],{"class":129},[123,37564,2193],{"class":164},[123,37566,288],{"class":129},[123,37568,37569],{"class":125,"line":1534},[123,37570,232],{"emptyLinePlaceholder":231},[123,37572,37573],{"class":125,"line":1539},[123,37574,37575],{"class":2673},"    # 定义前向传播\n",[123,37577,37578,37580,37582],{"class":125,"line":2080},[123,37579,33216],{"class":133},[123,37581,33508],{"class":337},[123,37583,33511],{"class":129},[123,37585,37586,37588,37590,37592,37595,37597],{"class":125,"line":2097},[123,37587,33516],{"class":129},[123,37589,134],{"class":133},[123,37591,33238],{"class":164},[123,37593,37594],{"class":129},".ReLu(",[123,37596,33238],{"class":164},[123,37598,33528],{"class":129},[123,37600,37601,37603,37605,37607],{"class":125,"line":2114},[123,37602,33516],{"class":129},[123,37604,134],{"class":133},[123,37606,33238],{"class":164},[123,37608,33539],{"class":129},[123,37610,37611,37613,37615,37617,37619,37621],{"class":125,"line":2125},[123,37612,33516],{"class":129},[123,37614,134],{"class":133},[123,37616,33238],{"class":164},[123,37618,37594],{"class":129},[123,37620,33238],{"class":164},[123,37622,33554],{"class":129},[123,37624,37625,37627,37629,37631],{"class":125,"line":2130},[123,37626,33516],{"class":129},[123,37628,134],{"class":133},[123,37630,33238],{"class":164},[123,37632,33565],{"class":129},[123,37634,37635,37637,37639,37641,37643,37645],{"class":125,"line":5033},[123,37636,33516],{"class":129},[123,37638,134],{"class":133},[123,37640,33238],{"class":164},[123,37642,37594],{"class":129},[123,37644,33238],{"class":164},[123,37646,37647],{"class":129},".c5(x))\n",[123,37649,37650,37652,37654,37656,37658,37660],{"class":125,"line":5041},[123,37651,33516],{"class":129},[123,37653,134],{"class":133},[123,37655,33238],{"class":164},[123,37657,37594],{"class":129},[123,37659,33238],{"class":164},[123,37661,37662],{"class":129},".c6(x))\n",[123,37664,37665,37667,37669,37671,37673,37675],{"class":125,"line":5046},[123,37666,33516],{"class":129},[123,37668,134],{"class":133},[123,37670,33238],{"class":164},[123,37672,37594],{"class":129},[123,37674,33238],{"class":164},[123,37676,37677],{"class":129},".c7(x))\n",[123,37679,37680,37682,37684,37686],{"class":125,"line":5052},[123,37681,33516],{"class":129},[123,37683,134],{"class":133},[123,37685,33238],{"class":164},[123,37687,37688],{"class":129},".s8(x)\n",[123,37690,37691],{"class":125,"line":5058},[123,37692,232],{"emptyLinePlaceholder":231},[123,37694,37695],{"class":125,"line":5063},[123,37696,37697],{"class":2673},"        # 展平加线性全连接层\n",[123,37699,37700,37702,37704,37706],{"class":125,"line":10380},[123,37701,33516],{"class":129},[123,37703,134],{"class":133},[123,37705,33238],{"class":164},[123,37707,33576],{"class":129},[123,37709,37710,37712,37714,37716,37718,37720],{"class":125,"line":10404},[123,37711,33516],{"class":129},[123,37713,134],{"class":133},[123,37715,33238],{"class":164},[123,37717,37594],{"class":129},[123,37719,33238],{"class":164},[123,37721,37722],{"class":129},".f1(x))\n",[123,37724,37725],{"class":125,"line":10409},[123,37726,37727],{"class":2673},"        # 还需要dropout对神经元随机进行失活\n",[123,37729,37730,37732,37734,37737,37740],{"class":125,"line":10415},[123,37731,33516],{"class":129},[123,37733,134],{"class":133},[123,37735,37736],{"class":129},"F.dropout(x,",[123,37738,37739],{"class":164},"0.5",[123,37741,288],{"class":129},[123,37743,37744,37746,37748,37750,37752,37754],{"class":125,"line":10442},[123,37745,33516],{"class":129},[123,37747,134],{"class":133},[123,37749,33238],{"class":164},[123,37751,37594],{"class":129},[123,37753,33238],{"class":164},[123,37755,37756],{"class":129},".f2(x))\n",[123,37758,37759,37761,37763,37765,37767],{"class":125,"line":10447},[123,37760,33516],{"class":129},[123,37762,134],{"class":133},[123,37764,37736],{"class":129},[123,37766,37739],{"class":164},[123,37768,288],{"class":129},[123,37770,37771],{"class":125,"line":10453},[123,37772,37773],{"class":2673},"        # 直接输出\n",[123,37775,37776,37778,37780,37782],{"class":125,"line":10465},[123,37777,33516],{"class":129},[123,37779,134],{"class":133},[123,37781,33238],{"class":164},[123,37783,37784],{"class":129},".f3(x)\n",[123,37786,37787],{"class":125,"line":10477},[123,37788,37789],{"class":2673},"        # 前向传播输出\n",[123,37791,37792,37794],{"class":125,"line":10489},[123,37793,17182],{"class":133},[123,37795,33624],{"class":129},[123,37797,37798],{"class":125,"line":12148},[123,37799,37800],{"class":2673},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[123,37802,37803,37805,37807,37809,37811],{"class":125,"line":12173},[123,37804,3998],{"class":133},[123,37806,33635],{"class":164},[123,37808,5391],{"class":133},[123,37810,33640],{"class":143},[123,37812,1344],{"class":129},[123,37814,37815,37817,37819,37821,37823,37825,37827,37829,37831],{"class":125,"line":12196},[123,37816,33652],{"class":129},[123,37818,134],{"class":133},[123,37820,32867],{"class":129},[123,37822,33659],{"class":143},[123,37824,4158],{"class":133},[123,37826,33664],{"class":129},[123,37828,4155],{"class":133},[123,37830,32892],{"class":143},[123,37832,288],{"class":129},[123,37834,37835],{"class":125,"line":12220},[123,37836,37837],{"class":2673},"    # 模型实例化，然后将实例化的模型放到设备中\n",[123,37839,37840,37842,37844],{"class":125,"line":12225},[123,37841,33704],{"class":129},[123,37843,134],{"class":133},[123,37845,37846],{"class":129},"AlexNet().to(device)\n",[123,37848,37849,37851,37853,37855,37857,37860,37862,37864],{"class":125,"line":12230},[123,37850,33714],{"class":164},[123,37852,33717],{"class":129},[123,37854,2825],{"class":164},[123,37856,2985],{"class":129},[123,37858,37859],{"class":164},"227",[123,37861,2985],{"class":129},[123,37863,37859],{"class":164},[123,37865,33730],{"class":129},[26,37867,37868],{"start":140},[29,37869,33743],{},[113,37871,37873],{"className":115,"code":37872,"language":117,"meta":118,"style":118},"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",[120,37874,37875,37881,37887,37897,37903,37913,37923,37933,37943,37953,37957,37968,37978,37982,37986,37990,37998,38010,38020,38036,38046,38078,38092,38102,38112,38116,38126,38140,38150,38160,38170,38176,38180,38184,38188,38192,38196,38204,38224,38228,38232,38236,38240,38244,38260,38264,38268,38276,38280,38284,38292,38296,38300,38304,38312,38316,38320,38324,38328,38336,38340,38348,38352,38360,38364,38372,38376,38384,38388,38392,38400,38404,38408,38412,38424,38448,38462,38466,38470,38474,38482,38486,38494,38498,38506,38510,38518,38522,38530,38534,38542,38546,38558,38562,38570,38574,38582,38586,38590,38594,38598,38606,38610,38626,38630,38638,38642,38646,38650,38654,38658,38662,38666,38682,38686,38698,38702,38714,38718,38730,38734,38742,38746,38754,38758,38762,38767,38773,38777,38786,38790,38807,38811,38820,38824,38842,38855,38860,38873,38877,38881,38889,38893,38897,38905,38909,38917,38921,38929,38933,38937,38979,39021,39025,39029,39045,39049,39065,39069,39073,39081,39085,39089,39101,39139,39144,39149,39158,39162,39176,39186,39192,39198,39204,39210,39214,39218,39224,39228,39232,39240,39244,39262,39266,39270,39274,39290,39294,39298,39302,39306,39310,39330,39350,39354,39358,39362,39370,39378,39382,39398,39418,39438,39442,39446,39454,39462,39466,39470,39474,39486,39490,39500,39508,39525],{"__ignoreMap":118},[123,37876,37877,37879],{"class":125,"line":126},[123,37878,223],{"class":133},[123,37880,34234],{"class":129},[123,37882,37883,37885],{"class":125,"line":140},[123,37884,223],{"class":133},[123,37886,34241],{"class":129},[123,37888,37889,37891,37893,37895],{"class":125,"line":156},[123,37890,223],{"class":133},[123,37892,34252],{"class":129},[123,37894,547],{"class":133},[123,37896,34257],{"class":129},[123,37898,37899,37901],{"class":125,"line":168},[123,37900,223],{"class":133},[123,37902,32812],{"class":129},[123,37904,37905,37907,37909,37911],{"class":125,"line":268},[123,37906,391],{"class":133},[123,37908,33829],{"class":129},[123,37910,223],{"class":133},[123,37912,34274],{"class":129},[123,37914,37915,37917,37919,37921],{"class":125,"line":291},[123,37916,391],{"class":133},[123,37918,33783],{"class":129},[123,37920,223],{"class":133},[123,37922,33788],{"class":129},[123,37924,37925,37927,37929,37931],{"class":125,"line":300},[123,37926,391],{"class":133},[123,37928,33812],{"class":129},[123,37930,223],{"class":133},[123,37932,33817],{"class":129},[123,37934,37935,37937,37939,37941],{"class":125,"line":305},[123,37936,223],{"class":133},[123,37938,33829],{"class":129},[123,37940,547],{"class":133},[123,37942,33834],{"class":129},[123,37944,37945,37947,37949,37951],{"class":125,"line":316},[123,37946,223],{"class":133},[123,37948,33846],{"class":129},[123,37950,547],{"class":133},[123,37952,33851],{"class":129},[123,37954,37955],{"class":125,"line":673},[123,37956,34319],{"class":2673},[123,37958,37959,37961,37963,37965],{"class":125,"line":692},[123,37960,391],{"class":133},[123,37962,34326],{"class":129},[123,37964,223],{"class":133},[123,37966,37967],{"class":129}," AlexNet\n",[123,37969,37970,37972,37974,37976],{"class":125,"line":713},[123,37971,391],{"class":133},[123,37973,33155],{"class":129},[123,37975,223],{"class":133},[123,37977,33160],{"class":129},[123,37979,37980],{"class":125,"line":718},[123,37981,232],{"emptyLinePlaceholder":231},[123,37983,37984],{"class":125,"line":1138},[123,37985,232],{"emptyLinePlaceholder":231},[123,37987,37988],{"class":125,"line":1429},[123,37989,34354],{"class":2673},[123,37991,37992,37994,37996],{"class":125,"line":1439},[123,37993,34359],{"class":133},[123,37995,34362],{"class":337},[123,37997,34365],{"class":129},[123,37999,38000,38002,38004,38006,38008],{"class":125,"line":1444},[123,38001,34370],{"class":129},[123,38003,134],{"class":133},[123,38005,33869],{"class":129},[123,38007,33877],{"class":143},[123,38009,153],{"class":129},[123,38011,38012,38014,38016,38018],{"class":125,"line":1453},[123,38013,34383],{"class":279},[123,38015,134],{"class":133},[123,38017,870],{"class":164},[123,38019,153],{"class":129},[123,38021,38022,38024,38026,38028,38030,38032,38034],{"class":125,"line":1458},[123,38023,34394],{"class":279},[123,38025,134],{"class":133},[123,38027,33905],{"class":129},[123,38029,33908],{"class":279},[123,38031,134],{"class":133},[123,38033,37859],{"class":164},[123,38035,33916],{"class":129},[123,38037,38038,38040,38042,38044],{"class":125,"line":1476},[123,38039,34411],{"class":279},[123,38041,134],{"class":133},[123,38043,870],{"class":164},[123,38045,288],{"class":129},[123,38047,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076],{"class":125,"line":1494},[123,38049,34422],{"class":129},[123,38051,134],{"class":133},[123,38053,34427],{"class":129},[123,38055,34430],{"class":164},[123,38057,1315],{"class":129},[123,38059,34435],{"class":164},[123,38061,3060],{"class":133},[123,38063,9791],{"class":164},[123,38065,34442],{"class":129},[123,38067,34430],{"class":164},[123,38069,1315],{"class":129},[123,38071,34449],{"class":164},[123,38073,3060],{"class":133},[123,38075,9791],{"class":164},[123,38077,34456],{"class":129},[123,38079,38080,38082,38084,38086,38088,38090],{"class":125,"line":1499},[123,38081,34461],{"class":129},[123,38083,134],{"class":133},[123,38085,34466],{"class":129},[123,38087,33949],{"class":279},[123,38089,134],{"class":133},[123,38091,33954],{"class":129},[123,38093,38094,38096,38098,38100],{"class":125,"line":1517},[123,38095,34477],{"class":279},[123,38097,134],{"class":133},[123,38099,34482],{"class":164},[123,38101,153],{"class":129},[123,38103,38104,38106,38108,38110],{"class":125,"line":1534},[123,38105,34489],{"class":279},[123,38107,134],{"class":133},[123,38109,870],{"class":164},[123,38111,153],{"class":129},[123,38113,38114],{"class":125,"line":1539},[123,38115,34500],{"class":2673},[123,38117,38118,38120,38122,38124],{"class":125,"line":2080},[123,38119,34505],{"class":279},[123,38121,134],{"class":133},[123,38123,2248],{"class":164},[123,38125,288],{"class":129},[123,38127,38128,38130,38132,38134,38136,38138],{"class":125,"line":2097},[123,38129,34516],{"class":129},[123,38131,134],{"class":133},[123,38133,33946],{"class":129},[123,38135,33949],{"class":279},[123,38137,134],{"class":133},[123,38139,34527],{"class":129},[123,38141,38142,38144,38146,38148],{"class":125,"line":2114},[123,38143,34532],{"class":279},[123,38145,134],{"class":133},[123,38147,34482],{"class":164},[123,38149,153],{"class":129},[123,38151,38152,38154,38156,38158],{"class":125,"line":2125},[123,38153,34543],{"class":279},[123,38155,134],{"class":133},[123,38157,870],{"class":164},[123,38159,153],{"class":129},[123,38161,38162,38164,38166,38168],{"class":125,"line":2130},[123,38163,34554],{"class":279},[123,38165,134],{"class":133},[123,38167,2248],{"class":164},[123,38169,288],{"class":129},[123,38171,38172,38174],{"class":125,"line":5033},[123,38173,6529],{"class":133},[123,38175,34567],{"class":129},[123,38177,38178],{"class":125,"line":5041},[123,38179,232],{"emptyLinePlaceholder":231},[123,38181,38182],{"class":125,"line":5046},[123,38183,34576],{"class":2673},[123,38185,38186],{"class":125,"line":5052},[123,38187,34581],{"class":2673},[123,38189,38190],{"class":125,"line":5058},[123,38191,232],{"emptyLinePlaceholder":231},[123,38193,38194],{"class":125,"line":5063},[123,38195,34590],{"class":2673},[123,38197,38198,38200,38202],{"class":125,"line":10380},[123,38199,34359],{"class":133},[123,38201,34597],{"class":337},[123,38203,34600],{"class":129},[123,38205,38206,38208,38210,38212,38214,38216,38218,38220,38222],{"class":125,"line":10404},[123,38207,33652],{"class":129},[123,38209,134],{"class":133},[123,38211,32867],{"class":129},[123,38213,33659],{"class":143},[123,38215,4158],{"class":133},[123,38217,33664],{"class":129},[123,38219,4155],{"class":133},[123,38221,34619],{"class":143},[123,38223,288],{"class":129},[123,38225,38226],{"class":125,"line":10409},[123,38227,232],{"emptyLinePlaceholder":231},[123,38229,38230],{"class":125,"line":10415},[123,38231,232],{"emptyLinePlaceholder":231},[123,38233,38234],{"class":125,"line":10442},[123,38235,34634],{"class":2673},[123,38237,38238],{"class":125,"line":10447},[123,38239,34639],{"class":2673},[123,38241,38242],{"class":125,"line":10453},[123,38243,34644],{"class":2673},[123,38245,38246,38248,38250,38252,38254,38256,38258],{"class":125,"line":10465},[123,38247,34649],{"class":129},[123,38249,134],{"class":133},[123,38251,34654],{"class":129},[123,38253,34657],{"class":279},[123,38255,134],{"class":133},[123,38257,34662],{"class":164},[123,38259,288],{"class":129},[123,38261,38262],{"class":125,"line":10477},[123,38263,232],{"emptyLinePlaceholder":231},[123,38265,38266],{"class":125,"line":10489},[123,38267,34673],{"class":2673},[123,38269,38270,38272,38274],{"class":125,"line":12148},[123,38271,34678],{"class":129},[123,38273,134],{"class":133},[123,38275,34683],{"class":129},[123,38277,38278],{"class":125,"line":12173},[123,38279,232],{"emptyLinePlaceholder":231},[123,38281,38282],{"class":125,"line":12196},[123,38283,34692],{"class":2673},[123,38285,38286,38288,38290],{"class":125,"line":12220},[123,38287,33704],{"class":129},[123,38289,134],{"class":133},[123,38291,34701],{"class":129},[123,38293,38294],{"class":125,"line":12225},[123,38295,34706],{"class":2673},[123,38297,38298],{"class":125,"line":12230},[123,38299,34711],{"class":2673},[123,38301,38302],{"class":125,"line":12235},[123,38303,34716],{"class":2673},[123,38305,38306,38308,38310],{"class":125,"line":12244},[123,38307,34721],{"class":129},[123,38309,134],{"class":133},[123,38311,34726],{"class":129},[123,38313,38314],{"class":125,"line":12249},[123,38315,232],{"emptyLinePlaceholder":231},[123,38317,38318],{"class":125,"line":12255},[123,38319,232],{"emptyLinePlaceholder":231},[123,38321,38322],{"class":125,"line":12276},[123,38323,34739],{"class":2673},[123,38325,38326],{"class":125,"line":12282},[123,38327,34744],{"class":2673},[123,38329,38330,38332,38334],{"class":125,"line":12296},[123,38331,34749],{"class":129},[123,38333,134],{"class":133},[123,38335,34754],{"class":164},[123,38337,38338],{"class":125,"line":12302},[123,38339,34759],{"class":2673},[123,38341,38342,38344,38346],{"class":125,"line":12329},[123,38343,34764],{"class":129},[123,38345,134],{"class":133},[123,38347,34769],{"class":129},[123,38349,38350],{"class":125,"line":12338},[123,38351,34774],{"class":2673},[123,38353,38354,38356,38358],{"class":125,"line":12344},[123,38355,34779],{"class":129},[123,38357,134],{"class":133},[123,38359,34769],{"class":129},[123,38361,38362],{"class":125,"line":12352},[123,38363,34788],{"class":2673},[123,38365,38366,38368,38370],{"class":125,"line":12357},[123,38367,34793],{"class":129},[123,38369,134],{"class":133},[123,38371,34769],{"class":129},[123,38373,38374],{"class":125,"line":19032},[123,38375,34802],{"class":2673},[123,38377,38378,38380,38382],{"class":125,"line":19038},[123,38379,34807],{"class":129},[123,38381,134],{"class":133},[123,38383,34769],{"class":129},[123,38385,38386],{"class":125,"line":19061},[123,38387,232],{"emptyLinePlaceholder":231},[123,38389,38390],{"class":125,"line":19067},[123,38391,34820],{"class":2673},[123,38393,38394,38396,38398],{"class":125,"line":19090},[123,38395,34825],{"class":129},[123,38397,134],{"class":133},[123,38399,34830],{"class":129},[123,38401,38402],{"class":125,"line":19104},[123,38403,232],{"emptyLinePlaceholder":231},[123,38405,38406],{"class":125,"line":19124},[123,38407,232],{"emptyLinePlaceholder":231},[123,38409,38410],{"class":125,"line":19130},[123,38411,34843],{"class":2673},[123,38413,38414,38416,38418,38420,38422],{"class":125,"line":19141},[123,38415,5641],{"class":133},[123,38417,34850],{"class":129},[123,38419,1405],{"class":133},[123,38421,34855],{"class":164},[123,38423,34858],{"class":129},[123,38425,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446],{"class":125,"line":19164},[123,38427,34863],{"class":164},[123,38429,1315],{"class":129},[123,38431,34868],{"class":143},[123,38433,34871],{"class":164},[123,38435,3187],{"class":143},[123,38437,34871],{"class":164},[123,38439,2859],{"class":143},[123,38441,34880],{"class":129},[123,38443,3135],{"class":133},[123,38445,2825],{"class":164},[123,38447,32913],{"class":129},[123,38449,38450,38452,38454,38456,38458,38460],{"class":125,"line":19186},[123,38451,34863],{"class":164},[123,38453,1315],{"class":129},[123,38455,34895],{"class":143},[123,38457,3060],{"class":133},[123,38459,2193],{"class":164},[123,38461,288],{"class":129},[123,38463,38464],{"class":125,"line":19191},[123,38465,232],{"emptyLinePlaceholder":231},[123,38467,38468],{"class":125,"line":19197},[123,38469,34910],{"class":2673},[123,38471,38472],{"class":125,"line":19211},[123,38473,34915],{"class":2673},[123,38475,38476,38478,38480],{"class":125,"line":19224},[123,38477,34920],{"class":129},[123,38479,134],{"class":133},[123,38481,34754],{"class":164},[123,38483,38484],{"class":125,"line":19229},[123,38485,34929],{"class":2673},[123,38487,38488,38490,38492],{"class":125,"line":19243},[123,38489,34934],{"class":129},[123,38491,134],{"class":133},[123,38493,5526],{"class":164},[123,38495,38496],{"class":125,"line":19248},[123,38497,34943],{"class":2673},[123,38499,38500,38502,38504],{"class":125,"line":19254},[123,38501,34948],{"class":129},[123,38503,134],{"class":133},[123,38505,34754],{"class":164},[123,38507,38508],{"class":125,"line":19259},[123,38509,34957],{"class":2673},[123,38511,38512,38514,38516],{"class":125,"line":19273},[123,38513,34962],{"class":129},[123,38515,134],{"class":133},[123,38517,5526],{"class":164},[123,38519,38520],{"class":125,"line":19278},[123,38521,34971],{"class":2673},[123,38523,38524,38526,38528],{"class":125,"line":19283},[123,38525,34976],{"class":129},[123,38527,134],{"class":133},[123,38529,5526],{"class":164},[123,38531,38532],{"class":125,"line":19297},[123,38533,34985],{"class":2673},[123,38535,38536,38538,38540],{"class":125,"line":19309},[123,38537,34990],{"class":129},[123,38539,134],{"class":133},[123,38541,5526],{"class":164},[123,38543,38544],{"class":125,"line":19314},[123,38545,34999],{"class":2673},[123,38547,38548,38550,38552,38554,38556],{"class":125,"line":19327},[123,38549,5843],{"class":133},[123,38551,34013],{"class":129},[123,38553,1405],{"class":133},[123,38555,34018],{"class":164},[123,38557,35012],{"class":129},[123,38559,38560],{"class":125,"line":19332},[123,38561,35017],{"class":2673},[123,38563,38564,38566,38568],{"class":125,"line":19337},[123,38565,35022],{"class":129},[123,38567,134],{"class":133},[123,38569,35027],{"class":129},[123,38571,38572],{"class":125,"line":19342},[123,38573,35032],{"class":2673},[123,38575,38576,38578,38580],{"class":125,"line":19355},[123,38577,35037],{"class":129},[123,38579,134],{"class":133},[123,38581,35042],{"class":129},[123,38583,38584],{"class":125,"line":19360},[123,38585,35048],{"class":2673},[123,38587,38588],{"class":125,"line":35045},[123,38589,35054],{"class":129},[123,38591,38592],{"class":125,"line":35051},[123,38593,35060],{"class":2673},[123,38595,38596],{"class":125,"line":35057},[123,38597,35066],{"class":2673},[123,38599,38600,38602,38604],{"class":125,"line":35063},[123,38601,35072],{"class":129},[123,38603,134],{"class":133},[123,38605,35077],{"class":129},[123,38607,38608],{"class":125,"line":35069},[123,38609,35083],{"class":2673},[123,38611,38612,38614,38616,38618,38620,38622,38624],{"class":125,"line":35080},[123,38613,35089],{"class":129},[123,38615,134],{"class":133},[123,38617,35094],{"class":129},[123,38619,35097],{"class":279},[123,38621,134],{"class":133},[123,38623,2825],{"class":164},[123,38625,288],{"class":129},[123,38627,38628],{"class":125,"line":35086},[123,38629,35109],{"class":2673},[123,38631,38632,38634,38636],{"class":125,"line":35106},[123,38633,35115],{"class":129},[123,38635,134],{"class":133},[123,38637,35120],{"class":129},[123,38639,38640],{"class":125,"line":35112},[123,38641,35126],{"class":2673},[123,38643,38644],{"class":125,"line":35123},[123,38645,35132],{"class":129},[123,38647,38648],{"class":125,"line":35129},[123,38649,35138],{"class":2673},[123,38651,38652],{"class":125,"line":35135},[123,38653,35144],{"class":129},[123,38655,38656],{"class":125,"line":35141},[123,38657,35150],{"class":2673},[123,38659,38660],{"class":125,"line":35147},[123,38661,35156],{"class":129},[123,38663,38664],{"class":125,"line":35153},[123,38665,35162],{"class":2673},[123,38667,38668,38670,38672,38674,38676,38678,38680],{"class":125,"line":35159},[123,38669,35168],{"class":129},[123,38671,11909],{"class":133},[123,38673,35173],{"class":129},[123,38675,3060],{"class":133},[123,38677,35178],{"class":129},[123,38679,2799],{"class":164},[123,38681,288],{"class":129},[123,38683,38684],{"class":125,"line":35165},[123,38685,35188],{"class":2673},[123,38687,38688,38690,38692,38694,38696],{"class":125,"line":35185},[123,38689,35194],{"class":129},[123,38691,11909],{"class":133},[123,38693,35199],{"class":129},[123,38695,5391],{"class":133},[123,38697,35204],{"class":129},[123,38699,38700],{"class":125,"line":35191},[123,38701,35210],{"class":2673},[123,38703,38704,38706,38708,38710,38712],{"class":125,"line":35207},[123,38705,35216],{"class":129},[123,38707,11909],{"class":133},[123,38709,35178],{"class":129},[123,38711,2799],{"class":164},[123,38713,288],{"class":129},[123,38715,38716],{"class":125,"line":35213},[123,38717,35230],{"class":2673},[123,38719,38720,38722,38724,38726,38728],{"class":125,"line":35227},[123,38721,5843],{"class":133},[123,38723,35238],{"class":129},[123,38725,1405],{"class":133},[123,38727,34018],{"class":164},[123,38729,35245],{"class":129},[123,38731,38732],{"class":125,"line":35233},[123,38733,35251],{"class":2673},[123,38735,38736,38738,38740],{"class":125,"line":35248},[123,38737,35022],{"class":129},[123,38739,134],{"class":133},[123,38741,35027],{"class":129},[123,38743,38744],{"class":125,"line":35254},[123,38745,35266],{"class":2673},[123,38747,38748,38750,38752],{"class":125,"line":35263},[123,38749,35037],{"class":129},[123,38751,134],{"class":133},[123,38753,35042],{"class":129},[123,38755,38756],{"class":125,"line":35269},[123,38757,35281],{"class":2673},[123,38759,38760],{"class":125,"line":35278},[123,38761,35287],{"class":129},[123,38763,38764],{"class":125,"line":35284},[123,38765,38766],{"class":2673},"            # 验证时不计算梯度以节省内存\u002F计算\n",[123,38768,38769,38771],{"class":125,"line":35290},[123,38770,35293],{"class":133},[123,38772,35296],{"class":129},[123,38774,38775],{"class":125,"line":35299},[123,38776,35302],{"class":2673},[123,38778,38779,38782,38784],{"class":125,"line":35305},[123,38780,38781],{"class":129},"                output",[123,38783,134],{"class":133},[123,38785,35077],{"class":129},[123,38787,38788],{"class":125,"line":35316},[123,38789,35319],{"class":2673},[123,38791,38792,38795,38797,38799,38801,38803,38805],{"class":125,"line":35322},[123,38793,38794],{"class":129},"                pre_lab",[123,38796,134],{"class":133},[123,38798,35094],{"class":129},[123,38800,35097],{"class":279},[123,38802,134],{"class":133},[123,38804,2825],{"class":164},[123,38806,288],{"class":129},[123,38808,38809],{"class":125,"line":35341},[123,38810,35344],{"class":2673},[123,38812,38813,38816,38818],{"class":125,"line":35347},[123,38814,38815],{"class":129},"                val_batch_loss",[123,38817,134],{"class":133},[123,38819,35120],{"class":129},[123,38821,38822],{"class":125,"line":35358},[123,38823,35361],{"class":2673},[123,38825,38826,38829,38831,38834,38836,38838,38840],{"class":125,"line":35364},[123,38827,38828],{"class":129},"                val_loss",[123,38830,11909],{"class":133},[123,38832,38833],{"class":129},"val_batch_loss.item()",[123,38835,3060],{"class":133},[123,38837,35178],{"class":129},[123,38839,2799],{"class":164},[123,38841,288],{"class":129},[123,38843,38844,38847,38849,38851,38853],{"class":125,"line":35384},[123,38845,38846],{"class":129},"                val_corrects",[123,38848,11909],{"class":133},[123,38850,35199],{"class":129},[123,38852,5391],{"class":133},[123,38854,35204],{"class":129},[123,38856,38857],{"class":125,"line":35400},[123,38858,38859],{"class":2673},"            # 当前用于验证的样本数量\n",[123,38861,38862,38865,38867,38869,38871],{"class":125,"line":35406},[123,38863,38864],{"class":129},"            val_num",[123,38866,11909],{"class":133},[123,38868,35178],{"class":129},[123,38870,2799],{"class":164},[123,38872,288],{"class":129},[123,38874,38875],{"class":125,"line":35420},[123,38876,35423],{"class":2673},[123,38878,38879],{"class":125,"line":35426},[123,38880,35429],{"class":2673},[123,38882,38883,38885,38887],{"class":125,"line":35432},[123,38884,35435],{"class":129},[123,38886,3187],{"class":133},[123,38888,35440],{"class":129},[123,38890,38891],{"class":125,"line":35443},[123,38892,35446],{"class":2673},[123,38894,38895],{"class":125,"line":35449},[123,38896,35452],{"class":2673},[123,38898,38899,38901,38903],{"class":125,"line":35455},[123,38900,35458],{"class":129},[123,38902,3187],{"class":133},[123,38904,35440],{"class":129},[123,38906,38907],{"class":125,"line":35465},[123,38908,35468],{"class":2673},[123,38910,38911,38913,38915],{"class":125,"line":35471},[123,38912,35474],{"class":129},[123,38914,3187],{"class":133},[123,38916,35479],{"class":129},[123,38918,38919],{"class":125,"line":35482},[123,38920,35485],{"class":2673},[123,38922,38923,38925,38927],{"class":125,"line":35488},[123,38924,35491],{"class":129},[123,38926,3187],{"class":133},[123,38928,35479],{"class":129},[123,38930,38931],{"class":125,"line":35498},[123,38932,232],{"emptyLinePlaceholder":231},[123,38934,38935],{"class":125,"line":35503},[123,38936,35506],{"class":2673},[123,38938,38939,38941,38943,38945,38947,38949,38951,38953,38955,38957,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977],{"class":125,"line":35509},[123,38940,34863],{"class":164},[123,38942,1315],{"class":129},[123,38944,6032],{"class":143},[123,38946,34871],{"class":164},[123,38948,35520],{"class":143},[123,38950,3495],{"class":164},[123,38952,35525],{"class":133},[123,38954,3545],{"class":164},[123,38956,35530],{"class":143},[123,38958,3495],{"class":164},[123,38960,35525],{"class":133},[123,38962,3545],{"class":164},[123,38964,6032],{"class":143},[123,38966,35541],{"class":129},[123,38968,3135],{"class":133},[123,38970,2825],{"class":164},[123,38972,35548],{"class":129},[123,38974,3135],{"class":133},[123,38976,2825],{"class":164},[123,38978,35555],{"class":129},[123,38980,38981,38983,38985,38987,38989,38991,38993,38995,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019],{"class":125,"line":35558},[123,38982,34863],{"class":164},[123,38984,1315],{"class":129},[123,38986,6032],{"class":143},[123,38988,34871],{"class":164},[123,38990,35569],{"class":143},[123,38992,3495],{"class":164},[123,38994,35525],{"class":133},[123,38996,3545],{"class":164},[123,38998,35578],{"class":143},[123,39000,3495],{"class":164},[123,39002,35525],{"class":133},[123,39004,3545],{"class":164},[123,39006,6032],{"class":143},[123,39008,35589],{"class":129},[123,39010,3135],{"class":133},[123,39012,2825],{"class":164},[123,39014,35596],{"class":129},[123,39016,3135],{"class":133},[123,39018,2825],{"class":164},[123,39020,35555],{"class":129},[123,39022,39023],{"class":125,"line":35605},[123,39024,232],{"emptyLinePlaceholder":231},[123,39026,39027],{"class":125,"line":35610},[123,39028,35613],{"class":2673},[123,39030,39031,39033,39035,39037,39039,39041,39043],{"class":125,"line":35616},[123,39032,4940],{"class":133},[123,39034,35621],{"class":129},[123,39036,3135],{"class":133},[123,39038,2825],{"class":164},[123,39040,3539],{"class":129},[123,39042,3559],{"class":133},[123,39044,35632],{"class":129},[123,39046,39047],{"class":125,"line":35635},[123,39048,35638],{"class":2673},[123,39050,39051,39053,39055,39057,39059,39061,39063],{"class":125,"line":35641},[123,39052,35644],{"class":129},[123,39054,2656],{"class":164},[123,39056,134],{"class":133},[123,39058,35651],{"class":129},[123,39060,3135],{"class":133},[123,39062,2825],{"class":164},[123,39064,998],{"class":129},[123,39066,39067],{"class":125,"line":35660},[123,39068,35663],{"class":2673},[123,39070,39071],{"class":125,"line":35666},[123,39072,35669],{"class":2673},[123,39074,39075,39077,39079],{"class":125,"line":35672},[123,39076,35675],{"class":129},[123,39078,134],{"class":133},[123,39080,34726],{"class":129},[123,39082,39083],{"class":125,"line":35682},[123,39084,232],{"emptyLinePlaceholder":231},[123,39086,39087],{"class":125,"line":35687},[123,39088,35690],{"class":2673},[123,39090,39091,39093,39095,39097,39099],{"class":125,"line":35693},[123,39092,35696],{"class":129},[123,39094,134],{"class":133},[123,39096,35701],{"class":129},[123,39098,3135],{"class":133},[123,39100,35706],{"class":129},[123,39102,39103,39105,39107,39109,39111,39113,39115,39117,39119,39121,39123,39125,39127,39129,39131,39133,39135,39137],{"class":125,"line":35709},[123,39104,34863],{"class":164},[123,39106,1315],{"class":129},[123,39108,35716],{"class":143},[123,39110,3495],{"class":164},[123,39112,35721],{"class":133},[123,39114,3545],{"class":164},[123,39116,3147],{"class":143},[123,39118,3495],{"class":164},[123,39120,35721],{"class":133},[123,39122,3545],{"class":164},[123,39124,35734],{"class":143},[123,39126,35737],{"class":129},[123,39128,35740],{"class":133},[123,39130,3506],{"class":164},[123,39132,35745],{"class":129},[123,39134,2935],{"class":133},[123,39136,3506],{"class":164},[123,39138,32913],{"class":129},[123,39140,39141],{"class":125,"line":35754},[123,39142,39143],{"class":2673},"    # 选择最优参数并保存\n",[123,39145,39146],{"class":125,"line":35760},[123,39147,39148],{"class":2673},"    # 保存最佳模型权重字典\n",[123,39150,39151,39154,39156],{"class":125,"line":35766},[123,39152,39153],{"class":129},"    torch.save(best_model_wts,",[123,39155,35778],{"class":143},[123,39157,288],{"class":129},[123,39159,39160],{"class":125,"line":35772},[123,39161,35798],{"class":2673},[123,39163,39164,39166,39168,39170,39172,39174],{"class":125,"line":35783},[123,39165,35804],{"class":129},[123,39167,134],{"class":133},[123,39169,35809],{"class":129},[123,39171,35812],{"class":279},[123,39173,134],{"class":133},[123,39175,186],{"class":129},[123,39177,39178,39180,39182,39184],{"class":125,"line":35789},[123,39179,35822],{"class":143},[123,39181,3460],{"class":129},[123,39183,35827],{"class":164},[123,39185,35830],{"class":129},[123,39187,39188,39190],{"class":125,"line":35795},[123,39189,35836],{"class":143},[123,39191,35839],{"class":129},[123,39193,39194,39196],{"class":125,"line":35801},[123,39195,35845],{"class":143},[123,39197,35848],{"class":129},[123,39199,39200,39202],{"class":125,"line":35819},[123,39201,35854],{"class":143},[123,39203,35857],{"class":129},[123,39205,39206,39208],{"class":125,"line":35833},[123,39207,35863],{"class":143},[123,39209,35866],{"class":129},[123,39211,39212],{"class":125,"line":35842},[123,39213,35872],{"class":129},[123,39215,39216],{"class":125,"line":35851},[123,39217,35878],{"class":2673},[123,39219,39220,39222],{"class":125,"line":35860},[123,39221,6529],{"class":133},[123,39223,35886],{"class":129},[123,39225,39226],{"class":125,"line":35869},[123,39227,232],{"emptyLinePlaceholder":231},[123,39229,39230],{"class":125,"line":35875},[123,39231,35897],{"class":2673},[123,39233,39234,39236,39238],{"class":125,"line":35881},[123,39235,34359],{"class":133},[123,39237,35905],{"class":337},[123,39239,35908],{"class":129},[123,39241,39242],{"class":125,"line":35889},[123,39243,35914],{"class":2673},[123,39245,39246,39248,39250,39252,39254,39256,39258,39260],{"class":125,"line":35894},[123,39247,35920],{"class":129},[123,39249,34105],{"class":279},[123,39251,134],{"class":133},[123,39253,1315],{"class":129},[123,39255,2215],{"class":164},[123,39257,2985],{"class":129},[123,39259,2901],{"class":164},[123,39261,32913],{"class":129},[123,39263,39264],{"class":125,"line":35900},[123,39265,35940],{"class":2673},[123,39267,39268],{"class":125,"line":35911},[123,39269,35946],{"class":2673},[123,39271,39272],{"class":125,"line":35917},[123,39273,35952],{"class":2673},[123,39275,39276,39278,39280,39282,39284,39286,39288],{"class":125,"line":35937},[123,39277,34139],{"class":129},[123,39279,2825],{"class":164},[123,39281,2985],{"class":129},[123,39283,2692],{"class":164},[123,39285,2985],{"class":129},[123,39287,2825],{"class":164},[123,39289,288],{"class":129},[123,39291,39292],{"class":125,"line":35943},[123,39293,35975],{"class":2673},[123,39295,39296],{"class":125,"line":35949},[123,39297,35981],{"class":2673},[123,39299,39300],{"class":125,"line":35955},[123,39301,35987],{"class":2673},[123,39303,39304],{"class":125,"line":35972},[123,39305,35993],{"class":2673},[123,39307,39308],{"class":125,"line":35978},[123,39309,35999],{"class":2673},[123,39311,39312,39314,39316,39318,39320,39322,39324,39326,39328],{"class":125,"line":35984},[123,39313,36005],{"class":129},[123,39315,36008],{"class":143},[123,39317,36011],{"class":129},[123,39319,36014],{"class":143},[123,39321,2985],{"class":129},[123,39323,36019],{"class":279},[123,39325,134],{"class":133},[123,39327,36024],{"class":143},[123,39329,288],{"class":129},[123,39331,39332,39334,39336,39338,39340,39342,39344,39346,39348],{"class":125,"line":35990},[123,39333,36005],{"class":129},[123,39335,36008],{"class":143},[123,39337,36036],{"class":129},[123,39339,36039],{"class":143},[123,39341,2985],{"class":129},[123,39343,36019],{"class":279},[123,39345,134],{"class":133},[123,39347,36048],{"class":143},[123,39349,288],{"class":129},[123,39351,39352],{"class":125,"line":35996},[123,39353,36056],{"class":2673},[123,39355,39356],{"class":125,"line":36002},[123,39357,36062],{"class":129},[123,39359,39360],{"class":125,"line":36029},[123,39361,36068],{"class":2673},[123,39363,39364,39366,39368],{"class":125,"line":36053},[123,39365,36074],{"class":129},[123,39367,36077],{"class":143},[123,39369,288],{"class":129},[123,39371,39372,39374,39376],{"class":125,"line":36059},[123,39373,36085],{"class":129},[123,39375,36088],{"class":143},[123,39377,288],{"class":129},[123,39379,39380],{"class":125,"line":36065},[123,39381,36096],{"class":2673},[123,39383,39384,39386,39388,39390,39392,39394,39396],{"class":125,"line":36071},[123,39385,34139],{"class":129},[123,39387,2825],{"class":164},[123,39389,2985],{"class":129},[123,39391,2692],{"class":164},[123,39393,2985],{"class":129},[123,39395,2692],{"class":164},[123,39397,288],{"class":129},[123,39399,39400,39402,39404,39406,39408,39410,39412,39414,39416],{"class":125,"line":36082},[123,39401,36005],{"class":129},[123,39403,36008],{"class":143},[123,39405,36123],{"class":129},[123,39407,36014],{"class":143},[123,39409,2985],{"class":129},[123,39411,36019],{"class":279},[123,39413,134],{"class":133},[123,39415,36134],{"class":143},[123,39417,288],{"class":129},[123,39419,39420,39422,39424,39426,39428,39430,39432,39434,39436],{"class":125,"line":36093},[123,39421,36005],{"class":129},[123,39423,36008],{"class":143},[123,39425,36146],{"class":129},[123,39427,36039],{"class":143},[123,39429,2985],{"class":129},[123,39431,36019],{"class":279},[123,39433,134],{"class":133},[123,39435,36157],{"class":143},[123,39437,288],{"class":129},[123,39439,39440],{"class":125,"line":36099},[123,39441,36165],{"class":2673},[123,39443,39444],{"class":125,"line":36116},[123,39445,36062],{"class":129},[123,39447,39448,39450,39452],{"class":125,"line":36139},[123,39449,36074],{"class":129},[123,39451,36008],{"class":143},[123,39453,288],{"class":129},[123,39455,39456,39458,39460],{"class":125,"line":36162},[123,39457,36085],{"class":129},[123,39459,36187],{"class":143},[123,39461,288],{"class":129},[123,39463,39464],{"class":125,"line":36168},[123,39465,36195],{"class":129},[123,39467,39468],{"class":125,"line":36173},[123,39469,232],{"emptyLinePlaceholder":231},[123,39471,39472],{"class":125,"line":36182},[123,39473,36206],{"class":2673},[123,39475,39476,39478,39480,39482,39484],{"class":125,"line":36192},[123,39477,3998],{"class":133},[123,39479,33635],{"class":164},[123,39481,5391],{"class":133},[123,39483,33640],{"class":143},[123,39485,1344],{"class":129},[123,39487,39488],{"class":125,"line":36198},[123,39489,36225],{"class":2673},[123,39491,39492,39495,39497],{"class":125,"line":36203},[123,39493,39494],{"class":129},"    AlexNet",[123,39496,134],{"class":133},[123,39498,39499],{"class":129},"AlexNet()\n",[123,39501,39502,39504,39506],{"class":125,"line":36209},[123,39503,36242],{"class":129},[123,39505,134],{"class":133},[123,39507,36247],{"class":129},[123,39509,39510,39512,39514,39517,39519,39521,39523],{"class":125,"line":36222},[123,39511,35804],{"class":129},[123,39513,134],{"class":133},[123,39515,39516],{"class":129},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[123,39518,36260],{"class":279},[123,39520,134],{"class":133},[123,39522,3302],{"class":164},[123,39524,288],{"class":129},[123,39526,39527],{"class":125,"line":36228},[123,39528,36272],{"class":129},[26,39530,39531],{"start":156},[29,39532,36285],{},[113,39534,39536],{"className":115,"code":39535,"language":117,"meta":118,"style":118},"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",[120,39537,39538,39544,39554,39564,39574,39578,39588,39598,39609,39613,39617,39621,39629,39645,39655,39671,39681,39695,39699,39709,39719,39729,39735,39739,39743,39751,39755,39771,39779,39783,39787,39795,39803,39807,39811,39815,39819,39825,39829,39839,39847,39855,39859,39863,39867,39875,39879,39895,39899,39903,39907,39919,39923,39935,39939,39943,39955,39959,39969,39973,39977,39989,39993,40001,40005,40009,40017,40021,40029,40033,40037,40041,40045,40049,40065,40073,40077,40081,40129,40135,40139,40149,40157,40165,40169,40173,40177,40181,40189,40193,40209,40213,40221,40229],{"__ignoreMap":118},[123,39539,39540,39542],{"class":125,"line":126},[123,39541,223],{"class":133},[123,39543,32812],{"class":129},[123,39545,39546,39548,39550,39552],{"class":125,"line":140},[123,39547,223],{"class":133},[123,39549,33829],{"class":129},[123,39551,547],{"class":133},[123,39553,33834],{"class":129},[123,39555,39556,39558,39560,39562],{"class":125,"line":156},[123,39557,391],{"class":133},[123,39559,36313],{"class":129},[123,39561,223],{"class":133},[123,39563,36318],{"class":129},[123,39565,39566,39568,39570,39572],{"class":125,"line":168},[123,39567,391],{"class":133},[123,39569,33812],{"class":129},[123,39571,223],{"class":133},[123,39573,33817],{"class":129},[123,39575,39576],{"class":125,"line":268},[123,39577,36333],{"class":2673},[123,39579,39580,39582,39584,39586],{"class":125,"line":291},[123,39581,391],{"class":133},[123,39583,33783],{"class":129},[123,39585,223],{"class":133},[123,39587,33788],{"class":129},[123,39589,39590,39592,39594,39596],{"class":125,"line":300},[123,39591,391],{"class":133},[123,39593,34326],{"class":129},[123,39595,223],{"class":133},[123,39597,37967],{"class":129},[123,39599,39600,39602,39605,39607],{"class":125,"line":305},[123,39601,391],{"class":133},[123,39603,39604],{"class":129}," 练习.AlexNet.model ",[123,39606,223],{"class":133},[123,39608,37967],{"class":129},[123,39610,39611],{"class":125,"line":316},[123,39612,232],{"emptyLinePlaceholder":231},[123,39614,39615],{"class":125,"line":673},[123,39616,232],{"emptyLinePlaceholder":231},[123,39618,39619],{"class":125,"line":692},[123,39620,36362],{"class":2673},[123,39622,39623,39625,39627],{"class":125,"line":713},[123,39624,34359],{"class":133},[123,39626,36369],{"class":337},[123,39628,34365],{"class":129},[123,39630,39631,39633,39635,39637,39639,39641,39643],{"class":125,"line":718},[123,39632,36376],{"class":129},[123,39634,134],{"class":133},[123,39636,33869],{"class":129},[123,39638,33872],{"class":279},[123,39640,134],{"class":133},[123,39642,33877],{"class":143},[123,39644,153],{"class":129},[123,39646,39647,39649,39651,39653],{"class":125,"line":1138},[123,39648,36393],{"class":279},[123,39650,134],{"class":133},[123,39652,285],{"class":164},[123,39654,153],{"class":129},[123,39656,39657,39659,39661,39663,39665,39667,39669],{"class":125,"line":1429},[123,39658,36404],{"class":279},[123,39660,134],{"class":133},[123,39662,33905],{"class":129},[123,39664,33908],{"class":279},[123,39666,134],{"class":133},[123,39668,37859],{"class":164},[123,39670,33916],{"class":129},[123,39672,39673,39675,39677,39679],{"class":125,"line":1439},[123,39674,36421],{"class":279},[123,39676,134],{"class":133},[123,39678,870],{"class":164},[123,39680,288],{"class":129},[123,39682,39683,39685,39687,39689,39691,39693],{"class":125,"line":1444},[123,39684,36432],{"class":129},[123,39686,134],{"class":133},[123,39688,33946],{"class":129},[123,39690,33949],{"class":279},[123,39692,134],{"class":133},[123,39694,36443],{"class":129},[123,39696,39697],{"class":125,"line":1453},[123,39698,36448],{"class":2673},[123,39700,39701,39703,39705,39707],{"class":125,"line":1458},[123,39702,36453],{"class":279},[123,39704,134],{"class":133},[123,39706,2825],{"class":164},[123,39708,153],{"class":129},[123,39710,39711,39713,39715,39717],{"class":125,"line":1476},[123,39712,36464],{"class":279},[123,39714,134],{"class":133},[123,39716,870],{"class":164},[123,39718,153],{"class":129},[123,39720,39721,39723,39725,39727],{"class":125,"line":1494},[123,39722,36475],{"class":279},[123,39724,134],{"class":133},[123,39726,2799],{"class":164},[123,39728,288],{"class":129},[123,39730,39731,39733],{"class":125,"line":1499},[123,39732,6529],{"class":133},[123,39734,36488],{"class":129},[123,39736,39737],{"class":125,"line":1517},[123,39738,232],{"emptyLinePlaceholder":231},[123,39740,39741],{"class":125,"line":1534},[123,39742,36497],{"class":2673},[123,39744,39745,39747,39749],{"class":125,"line":1539},[123,39746,34359],{"class":133},[123,39748,36504],{"class":337},[123,39750,36507],{"class":129},[123,39752,39753],{"class":125,"line":2080},[123,39754,36512],{"class":2673},[123,39756,39757,39759,39761,39763,39765,39767,39769],{"class":125,"line":2097},[123,39758,33652],{"class":129},[123,39760,134],{"class":133},[123,39762,33659],{"class":143},[123,39764,4158],{"class":133},[123,39766,33664],{"class":129},[123,39768,4155],{"class":133},[123,39770,36529],{"class":143},[123,39772,39773,39775,39777],{"class":125,"line":2114},[123,39774,33704],{"class":129},[123,39776,134],{"class":133},[123,39778,34701],{"class":129},[123,39780,39781],{"class":125,"line":2125},[123,39782,232],{"emptyLinePlaceholder":231},[123,39784,39785],{"class":125,"line":2130},[123,39786,36546],{"class":2673},[123,39788,39789,39791,39793],{"class":125,"line":5033},[123,39790,36551],{"class":129},[123,39792,134],{"class":133},[123,39794,34754],{"class":164},[123,39796,39797,39799,39801],{"class":125,"line":5041},[123,39798,36560],{"class":129},[123,39800,134],{"class":133},[123,39802,5526],{"class":164},[123,39804,39805],{"class":125,"line":5046},[123,39806,232],{"emptyLinePlaceholder":231},[123,39808,39809],{"class":125,"line":5052},[123,39810,36573],{"class":2673},[123,39812,39813],{"class":125,"line":5058},[123,39814,36578],{"class":2673},[123,39816,39817],{"class":125,"line":5063},[123,39818,36583],{"class":2673},[123,39820,39821,39823],{"class":125,"line":10380},[123,39822,36588],{"class":133},[123,39824,35296],{"class":129},[123,39826,39827],{"class":125,"line":10404},[123,39828,36595],{"class":2673},[123,39830,39831,39833,39835,39837],{"class":125,"line":10409},[123,39832,5843],{"class":133},[123,39834,36602],{"class":129},[123,39836,1405],{"class":133},[123,39838,36607],{"class":129},[123,39840,39841,39843,39845],{"class":125,"line":10415},[123,39842,36612],{"class":129},[123,39844,134],{"class":133},[123,39846,36617],{"class":129},[123,39848,39849,39851,39853],{"class":125,"line":10442},[123,39850,36622],{"class":129},[123,39852,134],{"class":133},[123,39854,36627],{"class":129},[123,39856,39857],{"class":125,"line":10447},[123,39858,36632],{"class":2673},[123,39860,39861],{"class":125,"line":10453},[123,39862,35287],{"class":129},[123,39864,39865],{"class":125,"line":10465},[123,39866,36641],{"class":2673},[123,39868,39869,39871,39873],{"class":125,"line":10477},[123,39870,35072],{"class":129},[123,39872,134],{"class":133},[123,39874,36650],{"class":129},[123,39876,39877],{"class":125,"line":10489},[123,39878,36655],{"class":2673},[123,39880,39881,39883,39885,39887,39889,39891,39893],{"class":125,"line":12148},[123,39882,35089],{"class":129},[123,39884,134],{"class":133},[123,39886,35094],{"class":129},[123,39888,35097],{"class":279},[123,39890,134],{"class":133},[123,39892,2825],{"class":164},[123,39894,288],{"class":129},[123,39896,39897],{"class":125,"line":12173},[123,39898,36676],{"class":2673},[123,39900,39901],{"class":125,"line":12196},[123,39902,36681],{"class":2673},[123,39904,39905],{"class":125,"line":12220},[123,39906,36686],{"class":2673},[123,39908,39909,39911,39913,39915,39917],{"class":125,"line":12225},[123,39910,36691],{"class":129},[123,39912,11909],{"class":133},[123,39914,35199],{"class":129},[123,39916,5391],{"class":133},[123,39918,36700],{"class":129},[123,39920,39921],{"class":125,"line":12230},[123,39922,36705],{"class":2673},[123,39924,39925,39927,39929,39931,39933],{"class":125,"line":12235},[123,39926,36710],{"class":129},[123,39928,11909],{"class":133},[123,39930,36715],{"class":129},[123,39932,2799],{"class":164},[123,39934,288],{"class":129},[123,39936,39937],{"class":125,"line":12244},[123,39938,232],{"emptyLinePlaceholder":231},[123,39940,39941],{"class":125,"line":12249},[123,39942,36728],{"class":2673},[123,39944,39945,39947,39949,39951,39953],{"class":125,"line":12255},[123,39946,36733],{"class":129},[123,39948,134],{"class":133},[123,39950,36738],{"class":129},[123,39952,3187],{"class":133},[123,39954,36743],{"class":129},[123,39956,39957],{"class":125,"line":12276},[123,39958,36748],{"class":2673},[123,39960,39961,39963,39965,39967],{"class":125,"line":12282},[123,39962,34863],{"class":164},[123,39964,1315],{"class":129},[123,39966,36757],{"class":143},[123,39968,36760],{"class":129},[123,39970,39971],{"class":125,"line":12296},[123,39972,232],{"emptyLinePlaceholder":231},[123,39974,39975],{"class":125,"line":12302},[123,39976,36769],{"class":2673},[123,39978,39979,39981,39983,39985,39987],{"class":125,"line":12329},[123,39980,3998],{"class":133},[123,39982,33635],{"class":164},[123,39984,5391],{"class":133},[123,39986,33640],{"class":143},[123,39988,1344],{"class":129},[123,39990,39991],{"class":125,"line":12338},[123,39992,36786],{"class":2673},[123,39994,39995,39997,39999],{"class":125,"line":12344},[123,39996,33704],{"class":129},[123,39998,134],{"class":133},[123,40000,39499],{"class":129},[123,40002,40003],{"class":125,"line":12352},[123,40004,36799],{"class":2673},[123,40006,40007],{"class":125,"line":12357},[123,40008,36804],{"class":2673},[123,40010,40011,40013,40015],{"class":125,"line":19032},[123,40012,36809],{"class":129},[123,40014,36812],{"class":143},[123,40016,32913],{"class":129},[123,40018,40019],{"class":125,"line":19038},[123,40020,36819],{"class":2673},[123,40022,40023,40025,40027],{"class":125,"line":19061},[123,40024,36432],{"class":129},[123,40026,134],{"class":133},[123,40028,36828],{"class":129},[123,40030,40031],{"class":125,"line":19067},[123,40032,36833],{"class":2673},[123,40034,40035],{"class":125,"line":19090},[123,40036,36838],{"class":129},[123,40038,40039],{"class":125,"line":19104},[123,40040,232],{"emptyLinePlaceholder":231},[123,40042,40043],{"class":125,"line":19124},[123,40044,36847],{"class":2673},[123,40046,40047],{"class":125,"line":19130},[123,40048,36852],{"class":2673},[123,40050,40051,40053,40055,40057,40059,40061,40063],{"class":125,"line":19141},[123,40052,33652],{"class":129},[123,40054,134],{"class":133},[123,40056,33659],{"class":143},[123,40058,4158],{"class":133},[123,40060,33664],{"class":129},[123,40062,4155],{"class":133},[123,40064,36529],{"class":143},[123,40066,40067,40069,40071],{"class":125,"line":19164},[123,40068,33704],{"class":129},[123,40070,134],{"class":133},[123,40072,34701],{"class":129},[123,40074,40075],{"class":125,"line":19186},[123,40076,36881],{"class":2673},[123,40078,40079],{"class":125,"line":19191},[123,40080,36886],{"class":2673},[123,40082,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127],{"class":125,"line":19197},[123,40084,36891],{"class":129},[123,40086,134],{"class":133},[123,40088,839],{"class":129},[123,40090,36898],{"class":143},[123,40092,2985],{"class":129},[123,40094,36903],{"class":143},[123,40096,2985],{"class":129},[123,40098,36908],{"class":143},[123,40100,2985],{"class":129},[123,40102,36913],{"class":143},[123,40104,2985],{"class":129},[123,40106,36918],{"class":143},[123,40108,2985],{"class":129},[123,40110,36923],{"class":143},[123,40112,2985],{"class":129},[123,40114,36928],{"class":143},[123,40116,2985],{"class":129},[123,40118,36933],{"class":143},[123,40120,2985],{"class":129},[123,40122,36938],{"class":143},[123,40124,2985],{"class":129},[123,40126,36943],{"class":143},[123,40128,998],{"class":129},[123,40130,40131,40133],{"class":125,"line":19211},[123,40132,36588],{"class":133},[123,40134,35296],{"class":129},[123,40136,40137],{"class":125,"line":19224},[123,40138,36956],{"class":2673},[123,40140,40141,40143,40145,40147],{"class":125,"line":19229},[123,40142,5843],{"class":133},[123,40144,36963],{"class":129},[123,40146,1405],{"class":133},[123,40148,36607],{"class":129},[123,40150,40151,40153,40155],{"class":125,"line":19243},[123,40152,35022],{"class":129},[123,40154,134],{"class":133},[123,40156,35027],{"class":129},[123,40158,40159,40161,40163],{"class":125,"line":19248},[123,40160,35037],{"class":129},[123,40162,134],{"class":133},[123,40164,35042],{"class":129},[123,40166,40167],{"class":125,"line":19254},[123,40168,232],{"emptyLinePlaceholder":231},[123,40170,40171],{"class":125,"line":19259},[123,40172,36992],{"class":2673},[123,40174,40175],{"class":125,"line":19273},[123,40176,35287],{"class":129},[123,40178,40179],{"class":125,"line":19278},[123,40180,37001],{"class":2673},[123,40182,40183,40185,40187],{"class":125,"line":19283},[123,40184,35072],{"class":129},[123,40186,134],{"class":133},[123,40188,35077],{"class":129},[123,40190,40191],{"class":125,"line":19297},[123,40192,37014],{"class":2673},[123,40194,40195,40197,40199,40201,40203,40205,40207],{"class":125,"line":19309},[123,40196,35089],{"class":129},[123,40198,134],{"class":133},[123,40200,35094],{"class":129},[123,40202,35097],{"class":279},[123,40204,134],{"class":133},[123,40206,2825],{"class":164},[123,40208,288],{"class":129},[123,40210,40211],{"class":125,"line":19314},[123,40212,37035],{"class":2673},[123,40214,40215,40217,40219],{"class":125,"line":19327},[123,40216,37040],{"class":129},[123,40218,134],{"class":133},[123,40220,37045],{"class":129},[123,40222,40223,40225,40227],{"class":125,"line":19332},[123,40224,37050],{"class":129},[123,40226,134],{"class":133},[123,40228,37055],{"class":129},[123,40230,40231,40233,40235,40237,40239,40241,40243,40245],{"class":125,"line":19337},[123,40232,37060],{"class":164},[123,40234,1315],{"class":129},[123,40236,37065],{"class":143},[123,40238,37068],{"class":129},[123,40240,37071],{"class":143},[123,40242,2985],{"class":129},[123,40244,37076],{"class":143},[123,40246,37079],{"class":129},[2587,40248,40250],{"id":40249},"_22vgg","2.2.VGG",[24425,40252,40254],{"id":40253},"_221原理","2.2.1.原理",[19,40256,40257],{},[3929,40258],{"alt":118,"src":40259},"\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,40261,40262],{},[3929,40263],{"alt":118,"src":40264},"\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,40266,40267],{},[3929,40268],{"alt":118,"src":40269},"\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,40271,40272],{},"参数详细描述：",[19,40274,40275],{},[3929,40276],{"alt":118,"src":40277},"\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,40279,40280],{},[3929,40281],{"alt":118,"src":40282},"\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,40284,40285],{},[3929,40286],{"alt":118,"src":40287},"\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,40289,40290],{},[3929,40291],{"alt":118,"src":40292},"\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,40294,40295],{},[3929,40296],{"alt":118,"src":40297},"\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",[24425,40299,40301],{"id":40300},"_222代码实现","2.2.2.代码实现",[26,40303,40304],{},[29,40305,40306],{},"网络搭建",[113,40308,40310],{"className":115,"code":40309,"language":117,"meta":118,"style":118},"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",[120,40311,40312,40318,40330,40340,40350,40354,40371,40379,40398,40403,40408,40420,40457,40462,40498,40502,40531,40536,40541,40552,40588,40592,40628,40632,40660,40664,40669,40680,40716,40720,40756,40760,40796,40800,40828,40832,40837,40848,40885,40889,40925,40929,40965,40969,40997,41001,41006,41017,41053,41057,41093,41097,41133,41137,41165,41169,41174,41185,41190,41195,41200,41221,41225,41237,41241,41253,41257,41261,41266,41271,41286,41291,41301,41306,41321,41326,41344,41349,41358,41363,41373,41378,41383,41397,41402,41416,41424,41428,41432,41440,41451,41462,41473,41484,41495,41506,41512,41516,41521,41534,41554,41560,41569],{"__ignoreMap":118},[123,40313,40314,40316],{"class":125,"line":126},[123,40315,223],{"class":133},[123,40317,32812],{"class":129},[123,40319,40320,40322,40325,40327],{"class":125,"line":140},[123,40321,391],{"class":133},[123,40323,40324],{"class":129}," sympy.core.sympify ",[123,40326,223],{"class":133},[123,40328,40329],{"class":129}," kernS\n",[123,40331,40332,40334,40336,40338],{"class":125,"line":156},[123,40333,391],{"class":133},[123,40335,33155],{"class":129},[123,40337,223],{"class":133},[123,40339,33160],{"class":129},[123,40341,40342,40344,40346,40348],{"class":125,"line":168},[123,40343,391],{"class":133},[123,40345,33172],{"class":129},[123,40347,223],{"class":133},[123,40349,33177],{"class":129},[123,40351,40352],{"class":125,"line":268},[123,40353,232],{"emptyLinePlaceholder":231},[123,40355,40356,40358,40361,40363,40365,40367,40369],{"class":125,"line":291},[123,40357,17124],{"class":133},[123,40359,40360],{"class":337}," VGG16",[123,40362,1315],{"class":129},[123,40364,33193],{"class":337},[123,40366,3161],{"class":129},[123,40368,33198],{"class":337},[123,40370,33201],{"class":129},[123,40372,40373,40375,40377],{"class":125,"line":300},[123,40374,33216],{"class":133},[123,40376,33219],{"class":164},[123,40378,33222],{"class":129},[123,40380,40381,40383,40385,40388,40390,40392,40394,40396],{"class":125,"line":305},[123,40382,33232],{"class":164},[123,40384,1315],{"class":129},[123,40386,40387],{"class":164},"VGG16",[123,40389,251],{"class":129},[123,40391,33238],{"class":164},[123,40393,33241],{"class":129},[123,40395,33244],{"class":164},[123,40397,4420],{"class":129},[123,40399,40400],{"class":125,"line":316},[123,40401,40402],{"class":2673},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[123,40404,40405],{"class":125,"line":673},[123,40406,40407],{"class":2673},"        # 这里用的是灰度图\n",[123,40409,40410,40412,40415,40417],{"class":125,"line":692},[123,40411,33260],{"class":164},[123,40413,40414],{"class":129},".block1",[123,40416,134],{"class":133},[123,40418,40419],{"class":129},"nn.Sequential(\n",[123,40421,40422,40425,40427,40429,40431,40433,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455],{"class":125,"line":713},[123,40423,40424],{"class":129},"            nn.Conv2d(",[123,40426,33271],{"class":279},[123,40428,134],{"class":133},[123,40430,2825],{"class":164},[123,40432,2985],{"class":129},[123,40434,33280],{"class":279},[123,40436,134],{"class":133},[123,40438,2811],{"class":164},[123,40440,2985],{"class":129},[123,40442,33289],{"class":279},[123,40444,134],{"class":133},[123,40446,2686],{"class":164},[123,40448,2985],{"class":129},[123,40450,33298],{"class":279},[123,40452,134],{"class":133},[123,40454,2825],{"class":164},[123,40456,650],{"class":129},[123,40458,40459],{"class":125,"line":718},[123,40460,40461],{"class":129},"            nn.ReLU(),\n",[123,40463,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496],{"class":125,"line":1138},[123,40465,40424],{"class":129},[123,40467,33271],{"class":279},[123,40469,134],{"class":133},[123,40471,2811],{"class":164},[123,40473,2985],{"class":129},[123,40475,33280],{"class":279},[123,40477,134],{"class":133},[123,40479,2811],{"class":164},[123,40481,2985],{"class":129},[123,40483,33289],{"class":279},[123,40485,134],{"class":133},[123,40487,2686],{"class":164},[123,40489,2985],{"class":129},[123,40491,33298],{"class":279},[123,40493,134],{"class":133},[123,40495,2825],{"class":164},[123,40497,650],{"class":129},[123,40499,40500],{"class":125,"line":1429},[123,40501,40461],{"class":129},[123,40503,40504,40507,40509,40511,40513,40515,40517,40519,40521,40523,40525,40527,40529],{"class":125,"line":1439},[123,40505,40506],{"class":129},"            nn.MaxPool2d(",[123,40508,33289],{"class":279},[123,40510,134],{"class":133},[123,40512,2692],{"class":164},[123,40514,2985],{"class":129},[123,40516,33344],{"class":279},[123,40518,134],{"class":133},[123,40520,2692],{"class":164},[123,40522,2985],{"class":129},[123,40524,33298],{"class":279},[123,40526,134],{"class":133},[123,40528,2799],{"class":164},[123,40530,288],{"class":129},[123,40532,40533],{"class":125,"line":1444},[123,40534,40535],{"class":129},"        )\n",[123,40537,40538],{"class":125,"line":1453},[123,40539,40540],{"class":2673},"        # 第二层\n",[123,40542,40543,40545,40548,40550],{"class":125,"line":1458},[123,40544,33260],{"class":164},[123,40546,40547],{"class":129},".block2",[123,40549,134],{"class":133},[123,40551,40419],{"class":129},[123,40553,40554,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586],{"class":125,"line":1476},[123,40555,40424],{"class":129},[123,40557,33271],{"class":279},[123,40559,134],{"class":133},[123,40561,2811],{"class":164},[123,40563,2985],{"class":129},[123,40565,33280],{"class":279},[123,40567,134],{"class":133},[123,40569,34482],{"class":164},[123,40571,2985],{"class":129},[123,40573,33289],{"class":279},[123,40575,134],{"class":133},[123,40577,2686],{"class":164},[123,40579,2985],{"class":129},[123,40581,33298],{"class":279},[123,40583,134],{"class":133},[123,40585,2825],{"class":164},[123,40587,650],{"class":129},[123,40589,40590],{"class":125,"line":1494},[123,40591,40461],{"class":129},[123,40593,40594,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626],{"class":125,"line":1499},[123,40595,40424],{"class":129},[123,40597,33271],{"class":279},[123,40599,134],{"class":133},[123,40601,34482],{"class":164},[123,40603,2985],{"class":129},[123,40605,33280],{"class":279},[123,40607,134],{"class":133},[123,40609,34482],{"class":164},[123,40611,2985],{"class":129},[123,40613,33289],{"class":279},[123,40615,134],{"class":133},[123,40617,2686],{"class":164},[123,40619,2985],{"class":129},[123,40621,33298],{"class":279},[123,40623,134],{"class":133},[123,40625,2825],{"class":164},[123,40627,650],{"class":129},[123,40629,40630],{"class":125,"line":1517},[123,40631,40461],{"class":129},[123,40633,40634,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654,40656,40658],{"class":125,"line":1534},[123,40635,40506],{"class":129},[123,40637,33289],{"class":279},[123,40639,134],{"class":133},[123,40641,2692],{"class":164},[123,40643,2985],{"class":129},[123,40645,33344],{"class":279},[123,40647,134],{"class":133},[123,40649,2692],{"class":164},[123,40651,2985],{"class":129},[123,40653,33298],{"class":279},[123,40655,134],{"class":133},[123,40657,2799],{"class":164},[123,40659,288],{"class":129},[123,40661,40662],{"class":125,"line":1539},[123,40663,40535],{"class":129},[123,40665,40666],{"class":125,"line":2080},[123,40667,40668],{"class":2673},"        # 第三层\n",[123,40670,40671,40673,40676,40678],{"class":125,"line":2097},[123,40672,33260],{"class":164},[123,40674,40675],{"class":129},".block3",[123,40677,134],{"class":133},[123,40679,40419],{"class":129},[123,40681,40682,40684,40686,40688,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708,40710,40712,40714],{"class":125,"line":2114},[123,40683,40424],{"class":129},[123,40685,33271],{"class":279},[123,40687,134],{"class":133},[123,40689,34482],{"class":164},[123,40691,2985],{"class":129},[123,40693,33280],{"class":279},[123,40695,134],{"class":133},[123,40697,37280],{"class":164},[123,40699,2985],{"class":129},[123,40701,33289],{"class":279},[123,40703,134],{"class":133},[123,40705,2686],{"class":164},[123,40707,2985],{"class":129},[123,40709,33298],{"class":279},[123,40711,134],{"class":133},[123,40713,2825],{"class":164},[123,40715,650],{"class":129},[123,40717,40718],{"class":125,"line":2125},[123,40719,40461],{"class":129},[123,40721,40722,40724,40726,40728,40730,40732,40734,40736,40738,40740,40742,40744,40746,40748,40750,40752,40754],{"class":125,"line":2130},[123,40723,40424],{"class":129},[123,40725,33271],{"class":279},[123,40727,134],{"class":133},[123,40729,37280],{"class":164},[123,40731,2985],{"class":129},[123,40733,33280],{"class":279},[123,40735,134],{"class":133},[123,40737,37280],{"class":164},[123,40739,2985],{"class":129},[123,40741,33289],{"class":279},[123,40743,134],{"class":133},[123,40745,2686],{"class":164},[123,40747,2985],{"class":129},[123,40749,33298],{"class":279},[123,40751,134],{"class":133},[123,40753,2825],{"class":164},[123,40755,650],{"class":129},[123,40757,40758],{"class":125,"line":5033},[123,40759,40461],{"class":129},[123,40761,40762,40764,40766,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794],{"class":125,"line":5041},[123,40763,40424],{"class":129},[123,40765,33271],{"class":279},[123,40767,134],{"class":133},[123,40769,37280],{"class":164},[123,40771,2985],{"class":129},[123,40773,33280],{"class":279},[123,40775,134],{"class":133},[123,40777,37280],{"class":164},[123,40779,2985],{"class":129},[123,40781,33289],{"class":279},[123,40783,134],{"class":133},[123,40785,2686],{"class":164},[123,40787,2985],{"class":129},[123,40789,33298],{"class":279},[123,40791,134],{"class":133},[123,40793,2825],{"class":164},[123,40795,650],{"class":129},[123,40797,40798],{"class":125,"line":5046},[123,40799,40461],{"class":129},[123,40801,40802,40804,40806,40808,40810,40812,40814,40816,40818,40820,40822,40824,40826],{"class":125,"line":5052},[123,40803,40506],{"class":129},[123,40805,33289],{"class":279},[123,40807,134],{"class":133},[123,40809,2692],{"class":164},[123,40811,2985],{"class":129},[123,40813,33344],{"class":279},[123,40815,134],{"class":133},[123,40817,2692],{"class":164},[123,40819,2985],{"class":129},[123,40821,33298],{"class":279},[123,40823,134],{"class":133},[123,40825,2799],{"class":164},[123,40827,288],{"class":129},[123,40829,40830],{"class":125,"line":5058},[123,40831,40535],{"class":129},[123,40833,40834],{"class":125,"line":5063},[123,40835,40836],{"class":2673},"        # 第四层\n",[123,40838,40839,40841,40844,40846],{"class":125,"line":10380},[123,40840,33260],{"class":164},[123,40842,40843],{"class":129},".block4",[123,40845,134],{"class":133},[123,40847,40419],{"class":129},[123,40849,40850,40852,40854,40856,40858,40860,40862,40864,40867,40869,40871,40873,40875,40877,40879,40881,40883],{"class":125,"line":10404},[123,40851,40424],{"class":129},[123,40853,33271],{"class":279},[123,40855,134],{"class":133},[123,40857,37280],{"class":164},[123,40859,2985],{"class":129},[123,40861,33280],{"class":279},[123,40863,134],{"class":133},[123,40865,40866],{"class":164},"512",[123,40868,2985],{"class":129},[123,40870,33289],{"class":279},[123,40872,134],{"class":133},[123,40874,2686],{"class":164},[123,40876,2985],{"class":129},[123,40878,33298],{"class":279},[123,40880,134],{"class":133},[123,40882,2825],{"class":164},[123,40884,650],{"class":129},[123,40886,40887],{"class":125,"line":10409},[123,40888,40461],{"class":129},[123,40890,40891,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911,40913,40915,40917,40919,40921,40923],{"class":125,"line":10415},[123,40892,40424],{"class":129},[123,40894,33271],{"class":279},[123,40896,134],{"class":133},[123,40898,40866],{"class":164},[123,40900,2985],{"class":129},[123,40902,33280],{"class":279},[123,40904,134],{"class":133},[123,40906,40866],{"class":164},[123,40908,2985],{"class":129},[123,40910,33289],{"class":279},[123,40912,134],{"class":133},[123,40914,2686],{"class":164},[123,40916,2985],{"class":129},[123,40918,33298],{"class":279},[123,40920,134],{"class":133},[123,40922,2825],{"class":164},[123,40924,650],{"class":129},[123,40926,40927],{"class":125,"line":10442},[123,40928,40461],{"class":129},[123,40930,40931,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955,40957,40959,40961,40963],{"class":125,"line":10447},[123,40932,40424],{"class":129},[123,40934,33271],{"class":279},[123,40936,134],{"class":133},[123,40938,40866],{"class":164},[123,40940,2985],{"class":129},[123,40942,33280],{"class":279},[123,40944,134],{"class":133},[123,40946,40866],{"class":164},[123,40948,2985],{"class":129},[123,40950,33289],{"class":279},[123,40952,134],{"class":133},[123,40954,2686],{"class":164},[123,40956,2985],{"class":129},[123,40958,33298],{"class":279},[123,40960,134],{"class":133},[123,40962,2825],{"class":164},[123,40964,650],{"class":129},[123,40966,40967],{"class":125,"line":10453},[123,40968,40461],{"class":129},[123,40970,40971,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995],{"class":125,"line":10465},[123,40972,40506],{"class":129},[123,40974,33289],{"class":279},[123,40976,134],{"class":133},[123,40978,2692],{"class":164},[123,40980,2985],{"class":129},[123,40982,33344],{"class":279},[123,40984,134],{"class":133},[123,40986,2692],{"class":164},[123,40988,2985],{"class":129},[123,40990,33298],{"class":279},[123,40992,134],{"class":133},[123,40994,2799],{"class":164},[123,40996,288],{"class":129},[123,40998,40999],{"class":125,"line":10477},[123,41000,40535],{"class":129},[123,41002,41003],{"class":125,"line":10489},[123,41004,41005],{"class":2673},"        # 第五层\n",[123,41007,41008,41010,41013,41015],{"class":125,"line":12148},[123,41009,33260],{"class":164},[123,41011,41012],{"class":129},".block5",[123,41014,134],{"class":133},[123,41016,40419],{"class":129},[123,41018,41019,41021,41023,41025,41027,41029,41031,41033,41035,41037,41039,41041,41043,41045,41047,41049,41051],{"class":125,"line":12173},[123,41020,40424],{"class":129},[123,41022,33271],{"class":279},[123,41024,134],{"class":133},[123,41026,40866],{"class":164},[123,41028,2985],{"class":129},[123,41030,33280],{"class":279},[123,41032,134],{"class":133},[123,41034,40866],{"class":164},[123,41036,2985],{"class":129},[123,41038,33289],{"class":279},[123,41040,134],{"class":133},[123,41042,2686],{"class":164},[123,41044,2985],{"class":129},[123,41046,33298],{"class":279},[123,41048,134],{"class":133},[123,41050,2825],{"class":164},[123,41052,650],{"class":129},[123,41054,41055],{"class":125,"line":12196},[123,41056,40461],{"class":129},[123,41058,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077,41079,41081,41083,41085,41087,41089,41091],{"class":125,"line":12220},[123,41060,40424],{"class":129},[123,41062,33271],{"class":279},[123,41064,134],{"class":133},[123,41066,40866],{"class":164},[123,41068,2985],{"class":129},[123,41070,33280],{"class":279},[123,41072,134],{"class":133},[123,41074,40866],{"class":164},[123,41076,2985],{"class":129},[123,41078,33289],{"class":279},[123,41080,134],{"class":133},[123,41082,2686],{"class":164},[123,41084,2985],{"class":129},[123,41086,33298],{"class":279},[123,41088,134],{"class":133},[123,41090,2825],{"class":164},[123,41092,650],{"class":129},[123,41094,41095],{"class":125,"line":12225},[123,41096,40461],{"class":129},[123,41098,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131],{"class":125,"line":12230},[123,41100,40424],{"class":129},[123,41102,33271],{"class":279},[123,41104,134],{"class":133},[123,41106,40866],{"class":164},[123,41108,2985],{"class":129},[123,41110,33280],{"class":279},[123,41112,134],{"class":133},[123,41114,40866],{"class":164},[123,41116,2985],{"class":129},[123,41118,33289],{"class":279},[123,41120,134],{"class":133},[123,41122,2686],{"class":164},[123,41124,2985],{"class":129},[123,41126,33298],{"class":279},[123,41128,134],{"class":133},[123,41130,2825],{"class":164},[123,41132,650],{"class":129},[123,41134,41135],{"class":125,"line":12235},[123,41136,40461],{"class":129},[123,41138,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163],{"class":125,"line":12244},[123,41140,40506],{"class":129},[123,41142,33289],{"class":279},[123,41144,134],{"class":133},[123,41146,2692],{"class":164},[123,41148,2985],{"class":129},[123,41150,33344],{"class":279},[123,41152,134],{"class":133},[123,41154,2692],{"class":164},[123,41156,2985],{"class":129},[123,41158,33298],{"class":279},[123,41160,134],{"class":133},[123,41162,2799],{"class":164},[123,41164,288],{"class":129},[123,41166,41167],{"class":125,"line":12249},[123,41168,40535],{"class":129},[123,41170,41171],{"class":125,"line":12255},[123,41172,41173],{"class":2673},"        # 全连接层\n",[123,41175,41176,41178,41181,41183],{"class":125,"line":12276},[123,41177,33260],{"class":164},[123,41179,41180],{"class":129},".block6",[123,41182,134],{"class":133},[123,41184,40419],{"class":129},[123,41186,41187],{"class":125,"line":12282},[123,41188,41189],{"class":2673},"            # 平展操作\n",[123,41191,41192],{"class":125,"line":12296},[123,41193,41194],{"class":2673},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[123,41196,41197],{"class":125,"line":12302},[123,41198,41199],{"class":129},"            nn.Flatten(),\n",[123,41201,41202,41205,41207,41209,41211,41213,41215,41217,41219],{"class":125,"line":12329},[123,41203,41204],{"class":129},"            nn.Linear(",[123,41206,2976],{"class":164},[123,41208,3060],{"class":133},[123,41210,2976],{"class":164},[123,41212,3060],{"class":133},[123,41214,40866],{"class":164},[123,41216,2985],{"class":129},[123,41218,37280],{"class":164},[123,41220,650],{"class":129},[123,41222,41223],{"class":125,"line":12338},[123,41224,40461],{"class":129},[123,41226,41227,41229,41231,41233,41235],{"class":125,"line":12344},[123,41228,41204],{"class":129},[123,41230,37280],{"class":164},[123,41232,2985],{"class":129},[123,41234,34482],{"class":164},[123,41236,650],{"class":129},[123,41238,41239],{"class":125,"line":12352},[123,41240,40461],{"class":129},[123,41242,41243,41245,41247,41249,41251],{"class":125,"line":12357},[123,41244,41204],{"class":129},[123,41246,34482],{"class":164},[123,41248,2985],{"class":129},[123,41250,2193],{"class":164},[123,41252,288],{"class":129},[123,41254,41255],{"class":125,"line":19032},[123,41256,40535],{"class":129},[123,41258,41259],{"class":125,"line":19038},[123,41260,232],{"emptyLinePlaceholder":231},[123,41262,41263],{"class":125,"line":19061},[123,41264,41265],{"class":2673},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[123,41267,41268],{"class":125,"line":19067},[123,41269,41270],{"class":2673},"        # 循环遍历模型\n",[123,41272,41273,41275,41278,41280,41283],{"class":125,"line":19090},[123,41274,5843],{"class":133},[123,41276,41277],{"class":129}," m ",[123,41279,1405],{"class":133},[123,41281,41282],{"class":164}," self",[123,41284,41285],{"class":129},".modules():\n",[123,41287,41288],{"class":125,"line":19104},[123,41289,41290],{"class":2673},"            # print(m)\n",[123,41292,41293,41295,41298],{"class":125,"line":19124},[123,41294,7079],{"class":133},[123,41296,41297],{"class":164}," isinstance",[123,41299,41300],{"class":129},"(m,nn.Conv2d):\n",[123,41302,41303],{"class":125,"line":19130},[123,41304,41305],{"class":2673},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[123,41307,41308,41311,41314,41316,41319],{"class":125,"line":19141},[123,41309,41310],{"class":129},"                nn.init.kaiming_normal_(m.weight,",[123,41312,41313],{"class":279},"nonlinearity",[123,41315,134],{"class":133},[123,41317,41318],{"class":143},"'relu'",[123,41320,288],{"class":129},[123,41322,41323],{"class":125,"line":19164},[123,41324,41325],{"class":2673},"                # 判断b参数是否存在\n",[123,41327,41328,41331,41334,41337,41339,41342],{"class":125,"line":19186},[123,41329,41330],{"class":133},"                if",[123,41332,41333],{"class":129}," m.bias ",[123,41335,41336],{"class":133},"is",[123,41338,1714],{"class":133},[123,41340,41341],{"class":164}," None",[123,41343,1344],{"class":129},[123,41345,41346],{"class":125,"line":19191},[123,41347,41348],{"class":2673},"                    # 如果参数不存在的化初始化b=0\n",[123,41350,41351,41354,41356],{"class":125,"line":19197},[123,41352,41353],{"class":129},"                    nn.init.constant_(m.bias,",[123,41355,2799],{"class":164},[123,41357,288],{"class":129},[123,41359,41360],{"class":125,"line":19211},[123,41361,41362],{"class":2673},"            # 全连接层初始化\n",[123,41364,41365,41368,41370],{"class":125,"line":19224},[123,41366,41367],{"class":133},"            elif",[123,41369,41297],{"class":164},[123,41371,41372],{"class":129},"(m,nn.Linear):\n",[123,41374,41375],{"class":125,"line":19229},[123,41376,41377],{"class":2673},"                # 这个初始化方法是利用的是正太分布的方式\n",[123,41379,41380],{"class":125,"line":19243},[123,41381,41382],{"class":2673},"                # 均值为0，方差为0.01\n",[123,41384,41385,41388,41390,41392,41395],{"class":125,"line":19248},[123,41386,41387],{"class":129},"                nn.init.normal_(m.weight,",[123,41389,2799],{"class":164},[123,41391,2985],{"class":129},[123,41393,41394],{"class":164},"0.01",[123,41396,288],{"class":129},[123,41398,41399],{"class":125,"line":19254},[123,41400,41401],{"class":2673},"                # 初始化b参数\n",[123,41403,41404,41406,41408,41410,41412,41414],{"class":125,"line":19259},[123,41405,41330],{"class":133},[123,41407,41333],{"class":129},[123,41409,41336],{"class":133},[123,41411,1714],{"class":133},[123,41413,41341],{"class":164},[123,41415,1344],{"class":129},[123,41417,41418,41420,41422],{"class":125,"line":19273},[123,41419,41353],{"class":129},[123,41421,2799],{"class":164},[123,41423,288],{"class":129},[123,41425,41426],{"class":125,"line":19278},[123,41427,232],{"emptyLinePlaceholder":231},[123,41429,41430],{"class":125,"line":19283},[123,41431,37575],{"class":2673},[123,41433,41434,41436,41438],{"class":125,"line":19297},[123,41435,33216],{"class":133},[123,41437,33508],{"class":337},[123,41439,33511],{"class":129},[123,41441,41442,41444,41446,41448],{"class":125,"line":19309},[123,41443,33516],{"class":129},[123,41445,134],{"class":133},[123,41447,33238],{"class":164},[123,41449,41450],{"class":129},".block1(x)\n",[123,41452,41453,41455,41457,41459],{"class":125,"line":19314},[123,41454,33516],{"class":129},[123,41456,134],{"class":133},[123,41458,33238],{"class":164},[123,41460,41461],{"class":129},".block2(x)\n",[123,41463,41464,41466,41468,41470],{"class":125,"line":19327},[123,41465,33516],{"class":129},[123,41467,134],{"class":133},[123,41469,33238],{"class":164},[123,41471,41472],{"class":129},".block3(x)\n",[123,41474,41475,41477,41479,41481],{"class":125,"line":19332},[123,41476,33516],{"class":129},[123,41478,134],{"class":133},[123,41480,33238],{"class":164},[123,41482,41483],{"class":129},".block4(x)\n",[123,41485,41486,41488,41490,41492],{"class":125,"line":19337},[123,41487,33516],{"class":129},[123,41489,134],{"class":133},[123,41491,33238],{"class":164},[123,41493,41494],{"class":129},".block5(x)\n",[123,41496,41497,41499,41501,41503],{"class":125,"line":19342},[123,41498,33516],{"class":129},[123,41500,134],{"class":133},[123,41502,33238],{"class":164},[123,41504,41505],{"class":129},".block6(x)\n",[123,41507,41508,41510],{"class":125,"line":19355},[123,41509,17182],{"class":133},[123,41511,33624],{"class":129},[123,41513,41514],{"class":125,"line":19360},[123,41515,232],{"emptyLinePlaceholder":231},[123,41517,41518],{"class":125,"line":35045},[123,41519,41520],{"class":2673},"# 验证模型\n",[123,41522,41523,41525,41527,41529,41532],{"class":125,"line":35051},[123,41524,3998],{"class":133},[123,41526,33635],{"class":164},[123,41528,5391],{"class":133},[123,41530,41531],{"class":143},"'__main__'",[123,41533,1344],{"class":129},[123,41535,41536,41538,41540,41542,41544,41546,41548,41550,41552],{"class":125,"line":35057},[123,41537,33652],{"class":129},[123,41539,134],{"class":133},[123,41541,32867],{"class":129},[123,41543,33659],{"class":143},[123,41545,4158],{"class":133},[123,41547,33664],{"class":129},[123,41549,4155],{"class":133},[123,41551,32892],{"class":143},[123,41553,288],{"class":129},[123,41555,41556,41558],{"class":125,"line":35063},[123,41557,33714],{"class":164},[123,41559,32901],{"class":129},[123,41561,41562,41564,41566],{"class":125,"line":35069},[123,41563,33704],{"class":129},[123,41565,134],{"class":133},[123,41567,41568],{"class":129},"VGG16().to(device)\n",[123,41570,41571,41573,41575,41577,41579,41581,41583,41585],{"class":125,"line":35080},[123,41572,33714],{"class":164},[123,41574,33717],{"class":129},[123,41576,2825],{"class":164},[123,41578,2985],{"class":129},[123,41580,33913],{"class":164},[123,41582,2985],{"class":129},[123,41584,33913],{"class":164},[123,41586,33730],{"class":129},[26,41588,41589],{"start":140},[29,41590,41591],{},"训练代码",[19,41593,41594],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41596,41597],{},"解决方式:",[19,41599,41600],{},"①权重初始化",[113,41602,41604],{"className":115,"code":41603,"language":117,"meta":118,"style":118},"# 权重初始化,保证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",[120,41605,41606,41611,41616,41628,41633,41641,41646,41659,41664,41678,41683,41692,41697,41706,41711,41716,41729,41734,41748],{"__ignoreMap":118},[123,41607,41608],{"class":125,"line":126},[123,41609,41610],{"class":2673},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[123,41612,41613],{"class":125,"line":140},[123,41614,41615],{"class":2673},"# 循环遍历模型\n",[123,41617,41618,41620,41622,41624,41626],{"class":125,"line":156},[123,41619,1399],{"class":133},[123,41621,41277],{"class":129},[123,41623,1405],{"class":133},[123,41625,41282],{"class":164},[123,41627,41285],{"class":129},[123,41629,41630],{"class":125,"line":168},[123,41631,41632],{"class":2673},"    # print(m)\n",[123,41634,41635,41637,41639],{"class":125,"line":268},[123,41636,1711],{"class":133},[123,41638,41297],{"class":164},[123,41640,41300],{"class":129},[123,41642,41643],{"class":125,"line":291},[123,41644,41645],{"class":2673},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[123,41647,41648,41651,41653,41655,41657],{"class":125,"line":300},[123,41649,41650],{"class":129},"        nn.init.kaiming_normal_(m.weight,",[123,41652,41313],{"class":279},[123,41654,134],{"class":133},[123,41656,41318],{"class":143},[123,41658,288],{"class":129},[123,41660,41661],{"class":125,"line":305},[123,41662,41663],{"class":2673},"        # 判断b参数是否存在\n",[123,41665,41666,41668,41670,41672,41674,41676],{"class":125,"line":316},[123,41667,4940],{"class":133},[123,41669,41333],{"class":129},[123,41671,41336],{"class":133},[123,41673,1714],{"class":133},[123,41675,41341],{"class":164},[123,41677,1344],{"class":129},[123,41679,41680],{"class":125,"line":673},[123,41681,41682],{"class":2673},"            # 如果参数不存在的化初始化b=0\n",[123,41684,41685,41688,41690],{"class":125,"line":692},[123,41686,41687],{"class":129},"            nn.init.constant_(m.bias,",[123,41689,2799],{"class":164},[123,41691,288],{"class":129},[123,41693,41694],{"class":125,"line":713},[123,41695,41696],{"class":2673},"    # 全连接层初始化\n",[123,41698,41699,41702,41704],{"class":125,"line":718},[123,41700,41701],{"class":133},"    elif",[123,41703,41297],{"class":164},[123,41705,41372],{"class":129},[123,41707,41708],{"class":125,"line":1138},[123,41709,41710],{"class":2673},"        # 这个初始化方法是利用的是正太分布的方式\n",[123,41712,41713],{"class":125,"line":1429},[123,41714,41715],{"class":2673},"        # 均值为0，方差为0.01\n",[123,41717,41718,41721,41723,41725,41727],{"class":125,"line":1439},[123,41719,41720],{"class":129},"        nn.init.normal_(m.weight,",[123,41722,2799],{"class":164},[123,41724,2985],{"class":129},[123,41726,41394],{"class":164},[123,41728,288],{"class":129},[123,41730,41731],{"class":125,"line":1444},[123,41732,41733],{"class":2673},"        # 初始化b参数\n",[123,41735,41736,41738,41740,41742,41744,41746],{"class":125,"line":1453},[123,41737,4940],{"class":133},[123,41739,41333],{"class":129},[123,41741,41336],{"class":133},[123,41743,1714],{"class":133},[123,41745,41341],{"class":164},[123,41747,1344],{"class":129},[123,41749,41750,41752,41754],{"class":125,"line":1458},[123,41751,41687],{"class":129},[123,41753,2799],{"class":164},[123,41755,288],{"class":129},[19,41757,41758],{},"②尽可能地增加批次",[19,41760,41761],{},"训练完整代码：",[113,41763,41764],{"className":115,"code":40309,"language":117,"meta":118,"style":118},[120,41765,41766,41772,41782,41792,41802,41806,41822,41830,41848,41852,41856,41866,41902,41906,41942,41946,41974,41978,41982,41992,42028,42032,42068,42072,42100,42104,42108,42118,42154,42158,42194,42198,42234,42238,42266,42270,42274,42284,42320,42324,42360,42364,42400,42404,42432,42436,42440,42450,42486,42490,42526,42530,42566,42570,42598,42602,42606,42616,42620,42624,42628,42648,42652,42664,42668,42680,42684,42688,42692,42696,42708,42712,42720,42724,42736,42740,42754,42758,42766,42770,42778,42782,42786,42798,42802,42816,42824,42828,42832,42840,42850,42860,42870,42880,42890,42900,42906,42910,42914,42926,42946,42952,42960],{"__ignoreMap":118},[123,41767,41768,41770],{"class":125,"line":126},[123,41769,223],{"class":133},[123,41771,32812],{"class":129},[123,41773,41774,41776,41778,41780],{"class":125,"line":140},[123,41775,391],{"class":133},[123,41777,40324],{"class":129},[123,41779,223],{"class":133},[123,41781,40329],{"class":129},[123,41783,41784,41786,41788,41790],{"class":125,"line":156},[123,41785,391],{"class":133},[123,41787,33155],{"class":129},[123,41789,223],{"class":133},[123,41791,33160],{"class":129},[123,41793,41794,41796,41798,41800],{"class":125,"line":168},[123,41795,391],{"class":133},[123,41797,33172],{"class":129},[123,41799,223],{"class":133},[123,41801,33177],{"class":129},[123,41803,41804],{"class":125,"line":268},[123,41805,232],{"emptyLinePlaceholder":231},[123,41807,41808,41810,41812,41814,41816,41818,41820],{"class":125,"line":291},[123,41809,17124],{"class":133},[123,41811,40360],{"class":337},[123,41813,1315],{"class":129},[123,41815,33193],{"class":337},[123,41817,3161],{"class":129},[123,41819,33198],{"class":337},[123,41821,33201],{"class":129},[123,41823,41824,41826,41828],{"class":125,"line":300},[123,41825,33216],{"class":133},[123,41827,33219],{"class":164},[123,41829,33222],{"class":129},[123,41831,41832,41834,41836,41838,41840,41842,41844,41846],{"class":125,"line":305},[123,41833,33232],{"class":164},[123,41835,1315],{"class":129},[123,41837,40387],{"class":164},[123,41839,251],{"class":129},[123,41841,33238],{"class":164},[123,41843,33241],{"class":129},[123,41845,33244],{"class":164},[123,41847,4420],{"class":129},[123,41849,41850],{"class":125,"line":316},[123,41851,40402],{"class":2673},[123,41853,41854],{"class":125,"line":673},[123,41855,40407],{"class":2673},[123,41857,41858,41860,41862,41864],{"class":125,"line":692},[123,41859,33260],{"class":164},[123,41861,40414],{"class":129},[123,41863,134],{"class":133},[123,41865,40419],{"class":129},[123,41867,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896,41898,41900],{"class":125,"line":713},[123,41869,40424],{"class":129},[123,41871,33271],{"class":279},[123,41873,134],{"class":133},[123,41875,2825],{"class":164},[123,41877,2985],{"class":129},[123,41879,33280],{"class":279},[123,41881,134],{"class":133},[123,41883,2811],{"class":164},[123,41885,2985],{"class":129},[123,41887,33289],{"class":279},[123,41889,134],{"class":133},[123,41891,2686],{"class":164},[123,41893,2985],{"class":129},[123,41895,33298],{"class":279},[123,41897,134],{"class":133},[123,41899,2825],{"class":164},[123,41901,650],{"class":129},[123,41903,41904],{"class":125,"line":718},[123,41905,40461],{"class":129},[123,41907,41908,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940],{"class":125,"line":1138},[123,41909,40424],{"class":129},[123,41911,33271],{"class":279},[123,41913,134],{"class":133},[123,41915,2811],{"class":164},[123,41917,2985],{"class":129},[123,41919,33280],{"class":279},[123,41921,134],{"class":133},[123,41923,2811],{"class":164},[123,41925,2985],{"class":129},[123,41927,33289],{"class":279},[123,41929,134],{"class":133},[123,41931,2686],{"class":164},[123,41933,2985],{"class":129},[123,41935,33298],{"class":279},[123,41937,134],{"class":133},[123,41939,2825],{"class":164},[123,41941,650],{"class":129},[123,41943,41944],{"class":125,"line":1429},[123,41945,40461],{"class":129},[123,41947,41948,41950,41952,41954,41956,41958,41960,41962,41964,41966,41968,41970,41972],{"class":125,"line":1439},[123,41949,40506],{"class":129},[123,41951,33289],{"class":279},[123,41953,134],{"class":133},[123,41955,2692],{"class":164},[123,41957,2985],{"class":129},[123,41959,33344],{"class":279},[123,41961,134],{"class":133},[123,41963,2692],{"class":164},[123,41965,2985],{"class":129},[123,41967,33298],{"class":279},[123,41969,134],{"class":133},[123,41971,2799],{"class":164},[123,41973,288],{"class":129},[123,41975,41976],{"class":125,"line":1444},[123,41977,40535],{"class":129},[123,41979,41980],{"class":125,"line":1453},[123,41981,40540],{"class":2673},[123,41983,41984,41986,41988,41990],{"class":125,"line":1458},[123,41985,33260],{"class":164},[123,41987,40547],{"class":129},[123,41989,134],{"class":133},[123,41991,40419],{"class":129},[123,41993,41994,41996,41998,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026],{"class":125,"line":1476},[123,41995,40424],{"class":129},[123,41997,33271],{"class":279},[123,41999,134],{"class":133},[123,42001,2811],{"class":164},[123,42003,2985],{"class":129},[123,42005,33280],{"class":279},[123,42007,134],{"class":133},[123,42009,34482],{"class":164},[123,42011,2985],{"class":129},[123,42013,33289],{"class":279},[123,42015,134],{"class":133},[123,42017,2686],{"class":164},[123,42019,2985],{"class":129},[123,42021,33298],{"class":279},[123,42023,134],{"class":133},[123,42025,2825],{"class":164},[123,42027,650],{"class":129},[123,42029,42030],{"class":125,"line":1494},[123,42031,40461],{"class":129},[123,42033,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066],{"class":125,"line":1499},[123,42035,40424],{"class":129},[123,42037,33271],{"class":279},[123,42039,134],{"class":133},[123,42041,34482],{"class":164},[123,42043,2985],{"class":129},[123,42045,33280],{"class":279},[123,42047,134],{"class":133},[123,42049,34482],{"class":164},[123,42051,2985],{"class":129},[123,42053,33289],{"class":279},[123,42055,134],{"class":133},[123,42057,2686],{"class":164},[123,42059,2985],{"class":129},[123,42061,33298],{"class":279},[123,42063,134],{"class":133},[123,42065,2825],{"class":164},[123,42067,650],{"class":129},[123,42069,42070],{"class":125,"line":1517},[123,42071,40461],{"class":129},[123,42073,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098],{"class":125,"line":1534},[123,42075,40506],{"class":129},[123,42077,33289],{"class":279},[123,42079,134],{"class":133},[123,42081,2692],{"class":164},[123,42083,2985],{"class":129},[123,42085,33344],{"class":279},[123,42087,134],{"class":133},[123,42089,2692],{"class":164},[123,42091,2985],{"class":129},[123,42093,33298],{"class":279},[123,42095,134],{"class":133},[123,42097,2799],{"class":164},[123,42099,288],{"class":129},[123,42101,42102],{"class":125,"line":1539},[123,42103,40535],{"class":129},[123,42105,42106],{"class":125,"line":2080},[123,42107,40668],{"class":2673},[123,42109,42110,42112,42114,42116],{"class":125,"line":2097},[123,42111,33260],{"class":164},[123,42113,40675],{"class":129},[123,42115,134],{"class":133},[123,42117,40419],{"class":129},[123,42119,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150,42152],{"class":125,"line":2114},[123,42121,40424],{"class":129},[123,42123,33271],{"class":279},[123,42125,134],{"class":133},[123,42127,34482],{"class":164},[123,42129,2985],{"class":129},[123,42131,33280],{"class":279},[123,42133,134],{"class":133},[123,42135,37280],{"class":164},[123,42137,2985],{"class":129},[123,42139,33289],{"class":279},[123,42141,134],{"class":133},[123,42143,2686],{"class":164},[123,42145,2985],{"class":129},[123,42147,33298],{"class":279},[123,42149,134],{"class":133},[123,42151,2825],{"class":164},[123,42153,650],{"class":129},[123,42155,42156],{"class":125,"line":2125},[123,42157,40461],{"class":129},[123,42159,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192],{"class":125,"line":2130},[123,42161,40424],{"class":129},[123,42163,33271],{"class":279},[123,42165,134],{"class":133},[123,42167,37280],{"class":164},[123,42169,2985],{"class":129},[123,42171,33280],{"class":279},[123,42173,134],{"class":133},[123,42175,37280],{"class":164},[123,42177,2985],{"class":129},[123,42179,33289],{"class":279},[123,42181,134],{"class":133},[123,42183,2686],{"class":164},[123,42185,2985],{"class":129},[123,42187,33298],{"class":279},[123,42189,134],{"class":133},[123,42191,2825],{"class":164},[123,42193,650],{"class":129},[123,42195,42196],{"class":125,"line":5033},[123,42197,40461],{"class":129},[123,42199,42200,42202,42204,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232],{"class":125,"line":5041},[123,42201,40424],{"class":129},[123,42203,33271],{"class":279},[123,42205,134],{"class":133},[123,42207,37280],{"class":164},[123,42209,2985],{"class":129},[123,42211,33280],{"class":279},[123,42213,134],{"class":133},[123,42215,37280],{"class":164},[123,42217,2985],{"class":129},[123,42219,33289],{"class":279},[123,42221,134],{"class":133},[123,42223,2686],{"class":164},[123,42225,2985],{"class":129},[123,42227,33298],{"class":279},[123,42229,134],{"class":133},[123,42231,2825],{"class":164},[123,42233,650],{"class":129},[123,42235,42236],{"class":125,"line":5046},[123,42237,40461],{"class":129},[123,42239,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264],{"class":125,"line":5052},[123,42241,40506],{"class":129},[123,42243,33289],{"class":279},[123,42245,134],{"class":133},[123,42247,2692],{"class":164},[123,42249,2985],{"class":129},[123,42251,33344],{"class":279},[123,42253,134],{"class":133},[123,42255,2692],{"class":164},[123,42257,2985],{"class":129},[123,42259,33298],{"class":279},[123,42261,134],{"class":133},[123,42263,2799],{"class":164},[123,42265,288],{"class":129},[123,42267,42268],{"class":125,"line":5058},[123,42269,40535],{"class":129},[123,42271,42272],{"class":125,"line":5063},[123,42273,40836],{"class":2673},[123,42275,42276,42278,42280,42282],{"class":125,"line":10380},[123,42277,33260],{"class":164},[123,42279,40843],{"class":129},[123,42281,134],{"class":133},[123,42283,40419],{"class":129},[123,42285,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318],{"class":125,"line":10404},[123,42287,40424],{"class":129},[123,42289,33271],{"class":279},[123,42291,134],{"class":133},[123,42293,37280],{"class":164},[123,42295,2985],{"class":129},[123,42297,33280],{"class":279},[123,42299,134],{"class":133},[123,42301,40866],{"class":164},[123,42303,2985],{"class":129},[123,42305,33289],{"class":279},[123,42307,134],{"class":133},[123,42309,2686],{"class":164},[123,42311,2985],{"class":129},[123,42313,33298],{"class":279},[123,42315,134],{"class":133},[123,42317,2825],{"class":164},[123,42319,650],{"class":129},[123,42321,42322],{"class":125,"line":10409},[123,42323,40461],{"class":129},[123,42325,42326,42328,42330,42332,42334,42336,42338,42340,42342,42344,42346,42348,42350,42352,42354,42356,42358],{"class":125,"line":10415},[123,42327,40424],{"class":129},[123,42329,33271],{"class":279},[123,42331,134],{"class":133},[123,42333,40866],{"class":164},[123,42335,2985],{"class":129},[123,42337,33280],{"class":279},[123,42339,134],{"class":133},[123,42341,40866],{"class":164},[123,42343,2985],{"class":129},[123,42345,33289],{"class":279},[123,42347,134],{"class":133},[123,42349,2686],{"class":164},[123,42351,2985],{"class":129},[123,42353,33298],{"class":279},[123,42355,134],{"class":133},[123,42357,2825],{"class":164},[123,42359,650],{"class":129},[123,42361,42362],{"class":125,"line":10442},[123,42363,40461],{"class":129},[123,42365,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398],{"class":125,"line":10447},[123,42367,40424],{"class":129},[123,42369,33271],{"class":279},[123,42371,134],{"class":133},[123,42373,40866],{"class":164},[123,42375,2985],{"class":129},[123,42377,33280],{"class":279},[123,42379,134],{"class":133},[123,42381,40866],{"class":164},[123,42383,2985],{"class":129},[123,42385,33289],{"class":279},[123,42387,134],{"class":133},[123,42389,2686],{"class":164},[123,42391,2985],{"class":129},[123,42393,33298],{"class":279},[123,42395,134],{"class":133},[123,42397,2825],{"class":164},[123,42399,650],{"class":129},[123,42401,42402],{"class":125,"line":10453},[123,42403,40461],{"class":129},[123,42405,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430],{"class":125,"line":10465},[123,42407,40506],{"class":129},[123,42409,33289],{"class":279},[123,42411,134],{"class":133},[123,42413,2692],{"class":164},[123,42415,2985],{"class":129},[123,42417,33344],{"class":279},[123,42419,134],{"class":133},[123,42421,2692],{"class":164},[123,42423,2985],{"class":129},[123,42425,33298],{"class":279},[123,42427,134],{"class":133},[123,42429,2799],{"class":164},[123,42431,288],{"class":129},[123,42433,42434],{"class":125,"line":10477},[123,42435,40535],{"class":129},[123,42437,42438],{"class":125,"line":10489},[123,42439,41005],{"class":2673},[123,42441,42442,42444,42446,42448],{"class":125,"line":12148},[123,42443,33260],{"class":164},[123,42445,41012],{"class":129},[123,42447,134],{"class":133},[123,42449,40419],{"class":129},[123,42451,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484],{"class":125,"line":12173},[123,42453,40424],{"class":129},[123,42455,33271],{"class":279},[123,42457,134],{"class":133},[123,42459,40866],{"class":164},[123,42461,2985],{"class":129},[123,42463,33280],{"class":279},[123,42465,134],{"class":133},[123,42467,40866],{"class":164},[123,42469,2985],{"class":129},[123,42471,33289],{"class":279},[123,42473,134],{"class":133},[123,42475,2686],{"class":164},[123,42477,2985],{"class":129},[123,42479,33298],{"class":279},[123,42481,134],{"class":133},[123,42483,2825],{"class":164},[123,42485,650],{"class":129},[123,42487,42488],{"class":125,"line":12196},[123,42489,40461],{"class":129},[123,42491,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518,42520,42522,42524],{"class":125,"line":12220},[123,42493,40424],{"class":129},[123,42495,33271],{"class":279},[123,42497,134],{"class":133},[123,42499,40866],{"class":164},[123,42501,2985],{"class":129},[123,42503,33280],{"class":279},[123,42505,134],{"class":133},[123,42507,40866],{"class":164},[123,42509,2985],{"class":129},[123,42511,33289],{"class":279},[123,42513,134],{"class":133},[123,42515,2686],{"class":164},[123,42517,2985],{"class":129},[123,42519,33298],{"class":279},[123,42521,134],{"class":133},[123,42523,2825],{"class":164},[123,42525,650],{"class":129},[123,42527,42528],{"class":125,"line":12225},[123,42529,40461],{"class":129},[123,42531,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564],{"class":125,"line":12230},[123,42533,40424],{"class":129},[123,42535,33271],{"class":279},[123,42537,134],{"class":133},[123,42539,40866],{"class":164},[123,42541,2985],{"class":129},[123,42543,33280],{"class":279},[123,42545,134],{"class":133},[123,42547,40866],{"class":164},[123,42549,2985],{"class":129},[123,42551,33289],{"class":279},[123,42553,134],{"class":133},[123,42555,2686],{"class":164},[123,42557,2985],{"class":129},[123,42559,33298],{"class":279},[123,42561,134],{"class":133},[123,42563,2825],{"class":164},[123,42565,650],{"class":129},[123,42567,42568],{"class":125,"line":12235},[123,42569,40461],{"class":129},[123,42571,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596],{"class":125,"line":12244},[123,42573,40506],{"class":129},[123,42575,33289],{"class":279},[123,42577,134],{"class":133},[123,42579,2692],{"class":164},[123,42581,2985],{"class":129},[123,42583,33344],{"class":279},[123,42585,134],{"class":133},[123,42587,2692],{"class":164},[123,42589,2985],{"class":129},[123,42591,33298],{"class":279},[123,42593,134],{"class":133},[123,42595,2799],{"class":164},[123,42597,288],{"class":129},[123,42599,42600],{"class":125,"line":12249},[123,42601,40535],{"class":129},[123,42603,42604],{"class":125,"line":12255},[123,42605,41173],{"class":2673},[123,42607,42608,42610,42612,42614],{"class":125,"line":12276},[123,42609,33260],{"class":164},[123,42611,41180],{"class":129},[123,42613,134],{"class":133},[123,42615,40419],{"class":129},[123,42617,42618],{"class":125,"line":12282},[123,42619,41189],{"class":2673},[123,42621,42622],{"class":125,"line":12296},[123,42623,41194],{"class":2673},[123,42625,42626],{"class":125,"line":12302},[123,42627,41199],{"class":129},[123,42629,42630,42632,42634,42636,42638,42640,42642,42644,42646],{"class":125,"line":12329},[123,42631,41204],{"class":129},[123,42633,2976],{"class":164},[123,42635,3060],{"class":133},[123,42637,2976],{"class":164},[123,42639,3060],{"class":133},[123,42641,40866],{"class":164},[123,42643,2985],{"class":129},[123,42645,37280],{"class":164},[123,42647,650],{"class":129},[123,42649,42650],{"class":125,"line":12338},[123,42651,40461],{"class":129},[123,42653,42654,42656,42658,42660,42662],{"class":125,"line":12344},[123,42655,41204],{"class":129},[123,42657,37280],{"class":164},[123,42659,2985],{"class":129},[123,42661,34482],{"class":164},[123,42663,650],{"class":129},[123,42665,42666],{"class":125,"line":12352},[123,42667,40461],{"class":129},[123,42669,42670,42672,42674,42676,42678],{"class":125,"line":12357},[123,42671,41204],{"class":129},[123,42673,34482],{"class":164},[123,42675,2985],{"class":129},[123,42677,2193],{"class":164},[123,42679,288],{"class":129},[123,42681,42682],{"class":125,"line":19032},[123,42683,40535],{"class":129},[123,42685,42686],{"class":125,"line":19038},[123,42687,232],{"emptyLinePlaceholder":231},[123,42689,42690],{"class":125,"line":19061},[123,42691,41265],{"class":2673},[123,42693,42694],{"class":125,"line":19067},[123,42695,41270],{"class":2673},[123,42697,42698,42700,42702,42704,42706],{"class":125,"line":19090},[123,42699,5843],{"class":133},[123,42701,41277],{"class":129},[123,42703,1405],{"class":133},[123,42705,41282],{"class":164},[123,42707,41285],{"class":129},[123,42709,42710],{"class":125,"line":19104},[123,42711,41290],{"class":2673},[123,42713,42714,42716,42718],{"class":125,"line":19124},[123,42715,7079],{"class":133},[123,42717,41297],{"class":164},[123,42719,41300],{"class":129},[123,42721,42722],{"class":125,"line":19130},[123,42723,41305],{"class":2673},[123,42725,42726,42728,42730,42732,42734],{"class":125,"line":19141},[123,42727,41310],{"class":129},[123,42729,41313],{"class":279},[123,42731,134],{"class":133},[123,42733,41318],{"class":143},[123,42735,288],{"class":129},[123,42737,42738],{"class":125,"line":19164},[123,42739,41325],{"class":2673},[123,42741,42742,42744,42746,42748,42750,42752],{"class":125,"line":19186},[123,42743,41330],{"class":133},[123,42745,41333],{"class":129},[123,42747,41336],{"class":133},[123,42749,1714],{"class":133},[123,42751,41341],{"class":164},[123,42753,1344],{"class":129},[123,42755,42756],{"class":125,"line":19191},[123,42757,41348],{"class":2673},[123,42759,42760,42762,42764],{"class":125,"line":19197},[123,42761,41353],{"class":129},[123,42763,2799],{"class":164},[123,42765,288],{"class":129},[123,42767,42768],{"class":125,"line":19211},[123,42769,41362],{"class":2673},[123,42771,42772,42774,42776],{"class":125,"line":19224},[123,42773,41367],{"class":133},[123,42775,41297],{"class":164},[123,42777,41372],{"class":129},[123,42779,42780],{"class":125,"line":19229},[123,42781,41377],{"class":2673},[123,42783,42784],{"class":125,"line":19243},[123,42785,41382],{"class":2673},[123,42787,42788,42790,42792,42794,42796],{"class":125,"line":19248},[123,42789,41387],{"class":129},[123,42791,2799],{"class":164},[123,42793,2985],{"class":129},[123,42795,41394],{"class":164},[123,42797,288],{"class":129},[123,42799,42800],{"class":125,"line":19254},[123,42801,41401],{"class":2673},[123,42803,42804,42806,42808,42810,42812,42814],{"class":125,"line":19259},[123,42805,41330],{"class":133},[123,42807,41333],{"class":129},[123,42809,41336],{"class":133},[123,42811,1714],{"class":133},[123,42813,41341],{"class":164},[123,42815,1344],{"class":129},[123,42817,42818,42820,42822],{"class":125,"line":19273},[123,42819,41353],{"class":129},[123,42821,2799],{"class":164},[123,42823,288],{"class":129},[123,42825,42826],{"class":125,"line":19278},[123,42827,232],{"emptyLinePlaceholder":231},[123,42829,42830],{"class":125,"line":19283},[123,42831,37575],{"class":2673},[123,42833,42834,42836,42838],{"class":125,"line":19297},[123,42835,33216],{"class":133},[123,42837,33508],{"class":337},[123,42839,33511],{"class":129},[123,42841,42842,42844,42846,42848],{"class":125,"line":19309},[123,42843,33516],{"class":129},[123,42845,134],{"class":133},[123,42847,33238],{"class":164},[123,42849,41450],{"class":129},[123,42851,42852,42854,42856,42858],{"class":125,"line":19314},[123,42853,33516],{"class":129},[123,42855,134],{"class":133},[123,42857,33238],{"class":164},[123,42859,41461],{"class":129},[123,42861,42862,42864,42866,42868],{"class":125,"line":19327},[123,42863,33516],{"class":129},[123,42865,134],{"class":133},[123,42867,33238],{"class":164},[123,42869,41472],{"class":129},[123,42871,42872,42874,42876,42878],{"class":125,"line":19332},[123,42873,33516],{"class":129},[123,42875,134],{"class":133},[123,42877,33238],{"class":164},[123,42879,41483],{"class":129},[123,42881,42882,42884,42886,42888],{"class":125,"line":19337},[123,42883,33516],{"class":129},[123,42885,134],{"class":133},[123,42887,33238],{"class":164},[123,42889,41494],{"class":129},[123,42891,42892,42894,42896,42898],{"class":125,"line":19342},[123,42893,33516],{"class":129},[123,42895,134],{"class":133},[123,42897,33238],{"class":164},[123,42899,41505],{"class":129},[123,42901,42902,42904],{"class":125,"line":19355},[123,42903,17182],{"class":133},[123,42905,33624],{"class":129},[123,42907,42908],{"class":125,"line":19360},[123,42909,232],{"emptyLinePlaceholder":231},[123,42911,42912],{"class":125,"line":35045},[123,42913,41520],{"class":2673},[123,42915,42916,42918,42920,42922,42924],{"class":125,"line":35051},[123,42917,3998],{"class":133},[123,42919,33635],{"class":164},[123,42921,5391],{"class":133},[123,42923,41531],{"class":143},[123,42925,1344],{"class":129},[123,42927,42928,42930,42932,42934,42936,42938,42940,42942,42944],{"class":125,"line":35057},[123,42929,33652],{"class":129},[123,42931,134],{"class":133},[123,42933,32867],{"class":129},[123,42935,33659],{"class":143},[123,42937,4158],{"class":133},[123,42939,33664],{"class":129},[123,42941,4155],{"class":133},[123,42943,32892],{"class":143},[123,42945,288],{"class":129},[123,42947,42948,42950],{"class":125,"line":35063},[123,42949,33714],{"class":164},[123,42951,32901],{"class":129},[123,42953,42954,42956,42958],{"class":125,"line":35069},[123,42955,33704],{"class":129},[123,42957,134],{"class":133},[123,42959,41568],{"class":129},[123,42961,42962,42964,42966,42968,42970,42972,42974,42976],{"class":125,"line":35080},[123,42963,33714],{"class":164},[123,42965,33717],{"class":129},[123,42967,2825],{"class":164},[123,42969,2985],{"class":129},[123,42971,33913],{"class":164},[123,42973,2985],{"class":129},[123,42975,33913],{"class":164},[123,42977,33730],{"class":129},[26,42979,42980],{"start":156},[29,42981,42982],{},"测试代码",[113,42984,42986],{"className":115,"code":42985,"language":117,"meta":118,"style":118},"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",[120,42987,42988,42994,43004,43014,43018,43028,43039,43043,43047,43051,43059,43075,43085,43101,43111,43125,43129,43139,43149,43159,43165,43169,43173,43181,43185,43201,43209,43213,43217,43225,43233,43237,43241,43245,43249,43255,43259,43269,43277,43285,43289,43293,43297,43305,43309,43325,43329,43333,43337,43349,43353,43365,43369,43373,43385,43389,43399,43403,43407,43419,43423,43432,43436,43440,43448,43452,43460,43464,43468,43472,43476,43480,43496,43504,43508,43512,43560,43566,43570,43580,43588,43596,43600,43604,43608,43612,43620,43624,43640,43644,43652,43660],{"__ignoreMap":118},[123,42989,42990,42992],{"class":125,"line":126},[123,42991,223],{"class":133},[123,42993,32812],{"class":129},[123,42995,42996,42998,43000,43002],{"class":125,"line":140},[123,42997,223],{"class":133},[123,42999,33829],{"class":129},[123,43001,547],{"class":133},[123,43003,33834],{"class":129},[123,43005,43006,43008,43010,43012],{"class":125,"line":156},[123,43007,391],{"class":133},[123,43009,33812],{"class":129},[123,43011,223],{"class":133},[123,43013,33817],{"class":129},[123,43015,43016],{"class":125,"line":168},[123,43017,36333],{"class":2673},[123,43019,43020,43022,43024,43026],{"class":125,"line":268},[123,43021,391],{"class":133},[123,43023,33783],{"class":129},[123,43025,223],{"class":133},[123,43027,33788],{"class":129},[123,43029,43030,43032,43034,43036],{"class":125,"line":291},[123,43031,391],{"class":133},[123,43033,34326],{"class":129},[123,43035,223],{"class":133},[123,43037,43038],{"class":164}," VGG16\n",[123,43040,43041],{"class":125,"line":300},[123,43042,232],{"emptyLinePlaceholder":231},[123,43044,43045],{"class":125,"line":305},[123,43046,232],{"emptyLinePlaceholder":231},[123,43048,43049],{"class":125,"line":316},[123,43050,36362],{"class":2673},[123,43052,43053,43055,43057],{"class":125,"line":673},[123,43054,34359],{"class":133},[123,43056,36369],{"class":337},[123,43058,34365],{"class":129},[123,43060,43061,43063,43065,43067,43069,43071,43073],{"class":125,"line":692},[123,43062,36376],{"class":129},[123,43064,134],{"class":133},[123,43066,33869],{"class":129},[123,43068,33872],{"class":279},[123,43070,134],{"class":133},[123,43072,33877],{"class":143},[123,43074,153],{"class":129},[123,43076,43077,43079,43081,43083],{"class":125,"line":713},[123,43078,36393],{"class":279},[123,43080,134],{"class":133},[123,43082,285],{"class":164},[123,43084,153],{"class":129},[123,43086,43087,43089,43091,43093,43095,43097,43099],{"class":125,"line":718},[123,43088,36404],{"class":279},[123,43090,134],{"class":133},[123,43092,33905],{"class":129},[123,43094,33908],{"class":279},[123,43096,134],{"class":133},[123,43098,33913],{"class":164},[123,43100,33916],{"class":129},[123,43102,43103,43105,43107,43109],{"class":125,"line":1138},[123,43104,36421],{"class":279},[123,43106,134],{"class":133},[123,43108,870],{"class":164},[123,43110,288],{"class":129},[123,43112,43113,43115,43117,43119,43121,43123],{"class":125,"line":1429},[123,43114,36432],{"class":129},[123,43116,134],{"class":133},[123,43118,33946],{"class":129},[123,43120,33949],{"class":279},[123,43122,134],{"class":133},[123,43124,36443],{"class":129},[123,43126,43127],{"class":125,"line":1439},[123,43128,36448],{"class":2673},[123,43130,43131,43133,43135,43137],{"class":125,"line":1444},[123,43132,36453],{"class":279},[123,43134,134],{"class":133},[123,43136,2825],{"class":164},[123,43138,153],{"class":129},[123,43140,43141,43143,43145,43147],{"class":125,"line":1453},[123,43142,36464],{"class":279},[123,43144,134],{"class":133},[123,43146,870],{"class":164},[123,43148,153],{"class":129},[123,43150,43151,43153,43155,43157],{"class":125,"line":1458},[123,43152,36475],{"class":279},[123,43154,134],{"class":133},[123,43156,2799],{"class":164},[123,43158,288],{"class":129},[123,43160,43161,43163],{"class":125,"line":1476},[123,43162,6529],{"class":133},[123,43164,36488],{"class":129},[123,43166,43167],{"class":125,"line":1494},[123,43168,232],{"emptyLinePlaceholder":231},[123,43170,43171],{"class":125,"line":1499},[123,43172,36497],{"class":2673},[123,43174,43175,43177,43179],{"class":125,"line":1517},[123,43176,34359],{"class":133},[123,43178,36504],{"class":337},[123,43180,36507],{"class":129},[123,43182,43183],{"class":125,"line":1534},[123,43184,36512],{"class":2673},[123,43186,43187,43189,43191,43193,43195,43197,43199],{"class":125,"line":1539},[123,43188,33652],{"class":129},[123,43190,134],{"class":133},[123,43192,33659],{"class":143},[123,43194,4158],{"class":133},[123,43196,33664],{"class":129},[123,43198,4155],{"class":133},[123,43200,36529],{"class":143},[123,43202,43203,43205,43207],{"class":125,"line":2080},[123,43204,33704],{"class":129},[123,43206,134],{"class":133},[123,43208,34701],{"class":129},[123,43210,43211],{"class":125,"line":2097},[123,43212,232],{"emptyLinePlaceholder":231},[123,43214,43215],{"class":125,"line":2114},[123,43216,36546],{"class":2673},[123,43218,43219,43221,43223],{"class":125,"line":2125},[123,43220,36551],{"class":129},[123,43222,134],{"class":133},[123,43224,34754],{"class":164},[123,43226,43227,43229,43231],{"class":125,"line":2130},[123,43228,36560],{"class":129},[123,43230,134],{"class":133},[123,43232,5526],{"class":164},[123,43234,43235],{"class":125,"line":5033},[123,43236,232],{"emptyLinePlaceholder":231},[123,43238,43239],{"class":125,"line":5041},[123,43240,36573],{"class":2673},[123,43242,43243],{"class":125,"line":5046},[123,43244,36578],{"class":2673},[123,43246,43247],{"class":125,"line":5052},[123,43248,36583],{"class":2673},[123,43250,43251,43253],{"class":125,"line":5058},[123,43252,36588],{"class":133},[123,43254,35296],{"class":129},[123,43256,43257],{"class":125,"line":5063},[123,43258,36595],{"class":2673},[123,43260,43261,43263,43265,43267],{"class":125,"line":10380},[123,43262,5843],{"class":133},[123,43264,36602],{"class":129},[123,43266,1405],{"class":133},[123,43268,36607],{"class":129},[123,43270,43271,43273,43275],{"class":125,"line":10404},[123,43272,36612],{"class":129},[123,43274,134],{"class":133},[123,43276,36617],{"class":129},[123,43278,43279,43281,43283],{"class":125,"line":10409},[123,43280,36622],{"class":129},[123,43282,134],{"class":133},[123,43284,36627],{"class":129},[123,43286,43287],{"class":125,"line":10415},[123,43288,36632],{"class":2673},[123,43290,43291],{"class":125,"line":10442},[123,43292,35287],{"class":129},[123,43294,43295],{"class":125,"line":10447},[123,43296,36641],{"class":2673},[123,43298,43299,43301,43303],{"class":125,"line":10453},[123,43300,35072],{"class":129},[123,43302,134],{"class":133},[123,43304,36650],{"class":129},[123,43306,43307],{"class":125,"line":10465},[123,43308,36655],{"class":2673},[123,43310,43311,43313,43315,43317,43319,43321,43323],{"class":125,"line":10477},[123,43312,35089],{"class":129},[123,43314,134],{"class":133},[123,43316,35094],{"class":129},[123,43318,35097],{"class":279},[123,43320,134],{"class":133},[123,43322,2825],{"class":164},[123,43324,288],{"class":129},[123,43326,43327],{"class":125,"line":10489},[123,43328,36676],{"class":2673},[123,43330,43331],{"class":125,"line":12148},[123,43332,36681],{"class":2673},[123,43334,43335],{"class":125,"line":12173},[123,43336,36686],{"class":2673},[123,43338,43339,43341,43343,43345,43347],{"class":125,"line":12196},[123,43340,36691],{"class":129},[123,43342,11909],{"class":133},[123,43344,35199],{"class":129},[123,43346,5391],{"class":133},[123,43348,36700],{"class":129},[123,43350,43351],{"class":125,"line":12220},[123,43352,36705],{"class":2673},[123,43354,43355,43357,43359,43361,43363],{"class":125,"line":12225},[123,43356,36710],{"class":129},[123,43358,11909],{"class":133},[123,43360,36715],{"class":129},[123,43362,2799],{"class":164},[123,43364,288],{"class":129},[123,43366,43367],{"class":125,"line":12230},[123,43368,232],{"emptyLinePlaceholder":231},[123,43370,43371],{"class":125,"line":12235},[123,43372,36728],{"class":2673},[123,43374,43375,43377,43379,43381,43383],{"class":125,"line":12244},[123,43376,36733],{"class":129},[123,43378,134],{"class":133},[123,43380,36738],{"class":129},[123,43382,3187],{"class":133},[123,43384,36743],{"class":129},[123,43386,43387],{"class":125,"line":12249},[123,43388,36748],{"class":2673},[123,43390,43391,43393,43395,43397],{"class":125,"line":12255},[123,43392,34863],{"class":164},[123,43394,1315],{"class":129},[123,43396,36757],{"class":143},[123,43398,36760],{"class":129},[123,43400,43401],{"class":125,"line":12276},[123,43402,232],{"emptyLinePlaceholder":231},[123,43404,43405],{"class":125,"line":12282},[123,43406,36769],{"class":2673},[123,43408,43409,43411,43413,43415,43417],{"class":125,"line":12296},[123,43410,3998],{"class":133},[123,43412,33635],{"class":164},[123,43414,5391],{"class":133},[123,43416,33640],{"class":143},[123,43418,1344],{"class":129},[123,43420,43421],{"class":125,"line":12302},[123,43422,36786],{"class":2673},[123,43424,43425,43427,43429],{"class":125,"line":12329},[123,43426,33704],{"class":129},[123,43428,134],{"class":133},[123,43430,43431],{"class":129},"VGG16()\n",[123,43433,43434],{"class":125,"line":12338},[123,43435,36799],{"class":2673},[123,43437,43438],{"class":125,"line":12344},[123,43439,36804],{"class":2673},[123,43441,43442,43444,43446],{"class":125,"line":12352},[123,43443,36809],{"class":129},[123,43445,36812],{"class":143},[123,43447,32913],{"class":129},[123,43449,43450],{"class":125,"line":12357},[123,43451,36819],{"class":2673},[123,43453,43454,43456,43458],{"class":125,"line":19032},[123,43455,36432],{"class":129},[123,43457,134],{"class":133},[123,43459,36828],{"class":129},[123,43461,43462],{"class":125,"line":19038},[123,43463,36833],{"class":2673},[123,43465,43466],{"class":125,"line":19061},[123,43467,36838],{"class":129},[123,43469,43470],{"class":125,"line":19067},[123,43471,232],{"emptyLinePlaceholder":231},[123,43473,43474],{"class":125,"line":19090},[123,43475,36847],{"class":2673},[123,43477,43478],{"class":125,"line":19104},[123,43479,36852],{"class":2673},[123,43481,43482,43484,43486,43488,43490,43492,43494],{"class":125,"line":19124},[123,43483,33652],{"class":129},[123,43485,134],{"class":133},[123,43487,33659],{"class":143},[123,43489,4158],{"class":133},[123,43491,33664],{"class":129},[123,43493,4155],{"class":133},[123,43495,36529],{"class":143},[123,43497,43498,43500,43502],{"class":125,"line":19130},[123,43499,33704],{"class":129},[123,43501,134],{"class":133},[123,43503,34701],{"class":129},[123,43505,43506],{"class":125,"line":19141},[123,43507,36881],{"class":2673},[123,43509,43510],{"class":125,"line":19164},[123,43511,36886],{"class":2673},[123,43513,43514,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546,43548,43550,43552,43554,43556,43558],{"class":125,"line":19186},[123,43515,36891],{"class":129},[123,43517,134],{"class":133},[123,43519,839],{"class":129},[123,43521,36898],{"class":143},[123,43523,2985],{"class":129},[123,43525,36903],{"class":143},[123,43527,2985],{"class":129},[123,43529,36908],{"class":143},[123,43531,2985],{"class":129},[123,43533,36913],{"class":143},[123,43535,2985],{"class":129},[123,43537,36918],{"class":143},[123,43539,2985],{"class":129},[123,43541,36923],{"class":143},[123,43543,2985],{"class":129},[123,43545,36928],{"class":143},[123,43547,2985],{"class":129},[123,43549,36933],{"class":143},[123,43551,2985],{"class":129},[123,43553,36938],{"class":143},[123,43555,2985],{"class":129},[123,43557,36943],{"class":143},[123,43559,998],{"class":129},[123,43561,43562,43564],{"class":125,"line":19191},[123,43563,36588],{"class":133},[123,43565,35296],{"class":129},[123,43567,43568],{"class":125,"line":19197},[123,43569,36956],{"class":2673},[123,43571,43572,43574,43576,43578],{"class":125,"line":19211},[123,43573,5843],{"class":133},[123,43575,36963],{"class":129},[123,43577,1405],{"class":133},[123,43579,36607],{"class":129},[123,43581,43582,43584,43586],{"class":125,"line":19224},[123,43583,35022],{"class":129},[123,43585,134],{"class":133},[123,43587,35027],{"class":129},[123,43589,43590,43592,43594],{"class":125,"line":19229},[123,43591,35037],{"class":129},[123,43593,134],{"class":133},[123,43595,35042],{"class":129},[123,43597,43598],{"class":125,"line":19243},[123,43599,232],{"emptyLinePlaceholder":231},[123,43601,43602],{"class":125,"line":19248},[123,43603,36992],{"class":2673},[123,43605,43606],{"class":125,"line":19254},[123,43607,35287],{"class":129},[123,43609,43610],{"class":125,"line":19259},[123,43611,37001],{"class":2673},[123,43613,43614,43616,43618],{"class":125,"line":19273},[123,43615,35072],{"class":129},[123,43617,134],{"class":133},[123,43619,35077],{"class":129},[123,43621,43622],{"class":125,"line":19278},[123,43623,37014],{"class":2673},[123,43625,43626,43628,43630,43632,43634,43636,43638],{"class":125,"line":19283},[123,43627,35089],{"class":129},[123,43629,134],{"class":133},[123,43631,35094],{"class":129},[123,43633,35097],{"class":279},[123,43635,134],{"class":133},[123,43637,2825],{"class":164},[123,43639,288],{"class":129},[123,43641,43642],{"class":125,"line":19297},[123,43643,37035],{"class":2673},[123,43645,43646,43648,43650],{"class":125,"line":19309},[123,43647,37040],{"class":129},[123,43649,134],{"class":133},[123,43651,37045],{"class":129},[123,43653,43654,43656,43658],{"class":125,"line":19314},[123,43655,37050],{"class":129},[123,43657,134],{"class":133},[123,43659,37055],{"class":129},[123,43661,43662,43664,43666,43668,43670,43672,43674,43676],{"class":125,"line":19327},[123,43663,37060],{"class":164},[123,43665,1315],{"class":129},[123,43667,37065],{"class":143},[123,43669,37068],{"class":129},[123,43671,37071],{"class":143},[123,43673,2985],{"class":129},[123,43675,37076],{"class":143},[123,43677,37079],{"class":129},[2587,43679,43681],{"id":43680},"_23googlenet","2.3.GoogLeNet",[24425,43683,43685],{"id":43684},"_231原理","2.3.1.原理",[26,43687,43688],{},[29,43689,43690],{},"网络结构",[19,43692,43693],{},[3929,43694],{"alt":118,"src":43695},"\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,43697,43698],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43700,43701],{},[3929,43702],{"alt":118,"src":43703},"\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,43705,43706],{},[3929,43707],{"alt":118,"src":43708},"\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,43710,43711],{},[3929,43712],{"alt":118,"src":43713},"\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",[26,43715,43716],{"start":140},[29,43717,43718],{},"1x1卷积的优点",[19,43720,43721],{},[3929,43722],{"alt":118,"src":43723},"\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",[26,43725,43726],{"start":156},[29,43727,43728],{},"全局平均池化层优点",[19,43730,43731],{},[3929,43732],{"alt":118,"src":43733},"\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,43735,43736],{},[3929,43737],{"alt":118,"src":43738},"\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",[26,43740,43741],{"start":168},[29,43742,43743],{},"参数详细描述",[19,43745,43746],{},[3929,43747],{"alt":118,"src":43748},"\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,43750,43751],{},[3929,43752],{"alt":118,"src":43753},"\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,43755,43756],{},[3929,43757],{"alt":118,"src":43758},"\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,43760,43761],{},[3929,43762],{"alt":118,"src":43763},"\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,43765,43766],{},[3929,43767],{"alt":118,"src":43768},"\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,43770,43771],{},[3929,43772],{"alt":118,"src":43773},"\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,43775,43776],{},[3929,43777],{"alt":118,"src":43778},"\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,43780,43781],{},[3929,43782],{"alt":118,"src":43783},"\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,43785,43786],{},[3929,43787],{"alt":118,"src":43788},"\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,43790,43791],{},[3929,43792],{"alt":118,"src":43793},"\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,43795,43796],{},[3929,43797],{"alt":118,"src":43798},"\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,43800,43801],{},[3929,43802],{"alt":118,"src":43803},"\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,43805,43806],{},[3929,43807],{"alt":118,"src":43808},"\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,43810,43811],{},[3929,43812],{"alt":118,"src":43813},"\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,43815,43816],{},[3929,43817],{"alt":118,"src":43818},"\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,43820,43821],{},[3929,43822],{"alt":118,"src":43823},"\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,43825,43826],{},[3929,43827],{"alt":118,"src":43828},"\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,43830,43831],{},[3929,43832],{"alt":118,"src":43833},"\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,43835,43836],{},[3929,43837],{"alt":118,"src":43838},"\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,43840,43841],{},[3929,43842],{"alt":118,"src":43843},"\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,43845,43846],{},[3929,43847],{"alt":118,"src":43848},"\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",[24425,43850,43852],{"id":43851},"_232代码实现","2.3.2.代码实现",[26,43854,43855],{},[29,43856,33127],{},[19,43858,43859],{},"根据原理一步一步搭建即可",[113,43861,43863],{"className":115,"code":43862,"language":117,"meta":118,"style":118},"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",[120,43864,43865,43871,43881,43891,43895,43912,43921,43936,43946,43951,43984,43989,44026,44073,44078,44114,44161,44166,44171,44206,44238,44242,44250,44266,44290,44315,44336,44341,44356,44360,44364,44369,44386,44391,44400,44415,44426,44470,44474,44502,44506,44517,44545,44549,44586,44590,44618,44622,44633,44669,44701,44729,44733,44744,44778,44810,44842,44875,44909,44937,44941,44952,44985,45017,45031,45035,45048,45052,45057,45069,45077,45099,45104,45109,45114,45119,45124,45129,45143,45151,45160,45173,45188,45197,45201,45209,45220,45231,45242,45253,45264,45270,45274,45279,45291,45311,45320],{"__ignoreMap":118},[123,43866,43867,43869],{"class":125,"line":126},[123,43868,223],{"class":133},[123,43870,32812],{"class":129},[123,43872,43873,43875,43877,43879],{"class":125,"line":140},[123,43874,391],{"class":133},[123,43876,33155],{"class":129},[123,43878,223],{"class":133},[123,43880,33160],{"class":129},[123,43882,43883,43885,43887,43889],{"class":125,"line":156},[123,43884,391],{"class":133},[123,43886,33172],{"class":129},[123,43888,223],{"class":133},[123,43890,33177],{"class":129},[123,43892,43893],{"class":125,"line":168},[123,43894,232],{"emptyLinePlaceholder":231},[123,43896,43897,43899,43902,43904,43906,43908,43910],{"class":125,"line":268},[123,43898,17124],{"class":133},[123,43900,43901],{"class":337}," Inception",[123,43903,1315],{"class":129},[123,43905,33193],{"class":337},[123,43907,3161],{"class":129},[123,43909,33198],{"class":337},[123,43911,33201],{"class":129},[123,43913,43914,43916,43918],{"class":125,"line":291},[123,43915,33216],{"class":133},[123,43917,33219],{"class":164},[123,43919,43920],{"class":129},"(self,in_channels,c1,c2,c3,c4):\n",[123,43922,43923,43925,43928,43930,43932,43934],{"class":125,"line":300},[123,43924,33232],{"class":164},[123,43926,43927],{"class":129},"(Inception,",[123,43929,33238],{"class":164},[123,43931,33241],{"class":129},[123,43933,33244],{"class":164},[123,43935,4420],{"class":129},[123,43937,43938,43940,43942,43944],{"class":125,"line":305},[123,43939,33260],{"class":164},[123,43941,37181],{"class":129},[123,43943,134],{"class":133},[123,43945,37186],{"class":129},[123,43947,43948],{"class":125,"line":316},[123,43949,43950],{"class":2673},"        # 路线1：定义1*1卷积\n",[123,43952,43953,43955,43958,43960,43962,43964,43966,43969,43971,43973,43976,43978,43980,43982],{"class":125,"line":673},[123,43954,33260],{"class":164},[123,43956,43957],{"class":129},".p1_1",[123,43959,134],{"class":133},[123,43961,33268],{"class":129},[123,43963,33271],{"class":279},[123,43965,134],{"class":133},[123,43967,43968],{"class":129},"in_channels,",[123,43970,33280],{"class":279},[123,43972,134],{"class":133},[123,43974,43975],{"class":129},"c1,",[123,43977,33289],{"class":279},[123,43979,134],{"class":133},[123,43981,2825],{"class":164},[123,43983,288],{"class":129},[123,43985,43986],{"class":125,"line":692},[123,43987,43988],{"class":2673},"        # 路线2：定义1*1卷积和3*3\n",[123,43990,43991,43993,43996,43998,44000,44002,44004,44006,44008,44010,44013,44015,44018,44020,44022,44024],{"class":125,"line":713},[123,43992,33260],{"class":164},[123,43994,43995],{"class":129},".p2_1",[123,43997,134],{"class":133},[123,43999,33268],{"class":129},[123,44001,33271],{"class":279},[123,44003,134],{"class":133},[123,44005,43968],{"class":129},[123,44007,33280],{"class":279},[123,44009,134],{"class":133},[123,44011,44012],{"class":129},"c2[",[123,44014,2799],{"class":164},[123,44016,44017],{"class":129},"],",[123,44019,33289],{"class":279},[123,44021,134],{"class":133},[123,44023,2825],{"class":164},[123,44025,288],{"class":129},[123,44027,44028,44030,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071],{"class":125,"line":718},[123,44029,33260],{"class":164},[123,44031,44032],{"class":129},".p2_2",[123,44034,134],{"class":133},[123,44036,33268],{"class":129},[123,44038,33271],{"class":279},[123,44040,134],{"class":133},[123,44042,44012],{"class":129},[123,44044,2799],{"class":164},[123,44046,44017],{"class":129},[123,44048,33280],{"class":279},[123,44050,134],{"class":133},[123,44052,44012],{"class":129},[123,44054,2825],{"class":164},[123,44056,44017],{"class":129},[123,44058,33289],{"class":279},[123,44060,134],{"class":133},[123,44062,2686],{"class":164},[123,44064,2985],{"class":129},[123,44066,33298],{"class":279},[123,44068,134],{"class":133},[123,44070,2825],{"class":164},[123,44072,288],{"class":129},[123,44074,44075],{"class":125,"line":1138},[123,44076,44077],{"class":2673},"        # 路线3：定义1*1卷积和5*5\n",[123,44079,44080,44082,44085,44087,44089,44091,44093,44095,44097,44099,44102,44104,44106,44108,44110,44112],{"class":125,"line":1429},[123,44081,33260],{"class":164},[123,44083,44084],{"class":129},".p3_1",[123,44086,134],{"class":133},[123,44088,33268],{"class":129},[123,44090,33271],{"class":279},[123,44092,134],{"class":133},[123,44094,43968],{"class":129},[123,44096,33280],{"class":279},[123,44098,134],{"class":133},[123,44100,44101],{"class":129},"c3[",[123,44103,2799],{"class":164},[123,44105,44017],{"class":129},[123,44107,33289],{"class":279},[123,44109,134],{"class":133},[123,44111,2825],{"class":164},[123,44113,288],{"class":129},[123,44115,44116,44118,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159],{"class":125,"line":1439},[123,44117,33260],{"class":164},[123,44119,44120],{"class":129},".p3_2",[123,44122,134],{"class":133},[123,44124,33268],{"class":129},[123,44126,33271],{"class":279},[123,44128,134],{"class":133},[123,44130,44101],{"class":129},[123,44132,2799],{"class":164},[123,44134,44017],{"class":129},[123,44136,33280],{"class":279},[123,44138,134],{"class":133},[123,44140,44101],{"class":129},[123,44142,2825],{"class":164},[123,44144,44017],{"class":129},[123,44146,33289],{"class":279},[123,44148,134],{"class":133},[123,44150,2926],{"class":164},[123,44152,2985],{"class":129},[123,44154,33298],{"class":279},[123,44156,134],{"class":133},[123,44158,2692],{"class":164},[123,44160,288],{"class":129},[123,44162,44163],{"class":125,"line":1444},[123,44164,44165],{"class":2673},"        # 路线4：定义3*3最大池化和1*1卷积\n",[123,44167,44168],{"class":125,"line":1453},[123,44169,44170],{"class":2673},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[123,44172,44173,44175,44178,44180,44182,44184,44186,44188,44190,44192,44194,44196,44198,44200,44202,44204],{"class":125,"line":1458},[123,44174,33260],{"class":164},[123,44176,44177],{"class":129},".p4_1",[123,44179,134],{"class":133},[123,44181,37239],{"class":129},[123,44183,33289],{"class":279},[123,44185,134],{"class":133},[123,44187,2686],{"class":164},[123,44189,2985],{"class":129},[123,44191,33344],{"class":279},[123,44193,134],{"class":133},[123,44195,2825],{"class":164},[123,44197,2985],{"class":129},[123,44199,33298],{"class":279},[123,44201,134],{"class":133},[123,44203,2825],{"class":164},[123,44205,288],{"class":129},[123,44207,44208,44210,44213,44215,44217,44219,44221,44223,44225,44227,44230,44232,44234,44236],{"class":125,"line":1476},[123,44209,33260],{"class":164},[123,44211,44212],{"class":129},".p4_2",[123,44214,134],{"class":133},[123,44216,33268],{"class":129},[123,44218,33271],{"class":279},[123,44220,134],{"class":133},[123,44222,43968],{"class":129},[123,44224,33280],{"class":279},[123,44226,134],{"class":133},[123,44228,44229],{"class":129},"c4,",[123,44231,33289],{"class":279},[123,44233,134],{"class":133},[123,44235,2825],{"class":164},[123,44237,288],{"class":129},[123,44239,44240],{"class":125,"line":1494},[123,44241,232],{"emptyLinePlaceholder":231},[123,44243,44244,44246,44248],{"class":125,"line":1499},[123,44245,33216],{"class":133},[123,44247,33508],{"class":337},[123,44249,33511],{"class":129},[123,44251,44252,44255,44257,44259,44261,44263],{"class":125,"line":1517},[123,44253,44254],{"class":129},"        p1",[123,44256,134],{"class":133},[123,44258,33238],{"class":164},[123,44260,37594],{"class":129},[123,44262,33238],{"class":164},[123,44264,44265],{"class":129},".p1_1(x))\n",[123,44267,44268,44270,44272,44274,44276,44278,44281,44283,44285,44287],{"class":125,"line":1534},[123,44269,9518],{"class":129},[123,44271,134],{"class":133},[123,44273,33238],{"class":164},[123,44275,37594],{"class":129},[123,44277,33238],{"class":164},[123,44279,44280],{"class":129},".p2_2(",[123,44282,33238],{"class":164},[123,44284,37594],{"class":129},[123,44286,33238],{"class":164},[123,44288,44289],{"class":129},".p2_1(x))))\n",[123,44291,44292,44295,44297,44299,44301,44303,44306,44308,44310,44312],{"class":125,"line":1539},[123,44293,44294],{"class":129},"        p3",[123,44296,134],{"class":133},[123,44298,33238],{"class":164},[123,44300,37594],{"class":129},[123,44302,33238],{"class":164},[123,44304,44305],{"class":129},".p3_2(",[123,44307,33238],{"class":164},[123,44309,37594],{"class":129},[123,44311,33238],{"class":164},[123,44313,44314],{"class":129},".p3_1(x))))\n",[123,44316,44317,44320,44322,44324,44326,44328,44331,44333],{"class":125,"line":2080},[123,44318,44319],{"class":129},"        p4",[123,44321,134],{"class":133},[123,44323,33238],{"class":164},[123,44325,37594],{"class":129},[123,44327,33238],{"class":164},[123,44329,44330],{"class":129},".p4_2(",[123,44332,33238],{"class":164},[123,44334,44335],{"class":129},".p4_1(x)))\n",[123,44337,44338],{"class":125,"line":2097},[123,44339,44340],{"class":2673},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[123,44342,44343,44345,44348,44350,44352,44354],{"class":125,"line":2114},[123,44344,17182],{"class":133},[123,44346,44347],{"class":129}," torch.cat((p1,p2,p3,p4),",[123,44349,35097],{"class":279},[123,44351,134],{"class":133},[123,44353,2825],{"class":164},[123,44355,288],{"class":129},[123,44357,44358],{"class":125,"line":2125},[123,44359,232],{"emptyLinePlaceholder":231},[123,44361,44362],{"class":125,"line":2130},[123,44363,232],{"emptyLinePlaceholder":231},[123,44365,44366],{"class":125,"line":5033},[123,44367,44368],{"class":2673},"# 搭建GoogLeNet网络\n",[123,44370,44371,44373,44376,44378,44380,44382,44384],{"class":125,"line":5041},[123,44372,17124],{"class":133},[123,44374,44375],{"class":337}," GoogLeNet",[123,44377,1315],{"class":129},[123,44379,33193],{"class":337},[123,44381,3161],{"class":129},[123,44383,33198],{"class":337},[123,44385,33201],{"class":129},[123,44387,44388],{"class":125,"line":5046},[123,44389,44390],{"class":2673},"    # 必须把Inception导入到里边\n",[123,44392,44393,44395,44397],{"class":125,"line":5052},[123,44394,33216],{"class":133},[123,44396,33219],{"class":164},[123,44398,44399],{"class":129},"(self,Inception):\n",[123,44401,44402,44404,44407,44409,44411,44413],{"class":125,"line":5058},[123,44403,33232],{"class":164},[123,44405,44406],{"class":129},"(GoogLeNet,",[123,44408,33238],{"class":164},[123,44410,33241],{"class":129},[123,44412,33244],{"class":164},[123,44414,4420],{"class":129},[123,44416,44417,44419,44422,44424],{"class":125,"line":5063},[123,44418,33260],{"class":164},[123,44420,44421],{"class":129},".b1",[123,44423,134],{"class":133},[123,44425,40419],{"class":129},[123,44427,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448,44450,44452,44454,44456,44458,44460,44462,44464,44466,44468],{"class":125,"line":10380},[123,44429,40424],{"class":129},[123,44431,33271],{"class":279},[123,44433,134],{"class":133},[123,44435,2825],{"class":164},[123,44437,2985],{"class":129},[123,44439,33280],{"class":279},[123,44441,134],{"class":133},[123,44443,2811],{"class":164},[123,44445,2985],{"class":129},[123,44447,33289],{"class":279},[123,44449,134],{"class":133},[123,44451,2976],{"class":164},[123,44453,2985],{"class":129},[123,44455,33344],{"class":279},[123,44457,134],{"class":133},[123,44459,2692],{"class":164},[123,44461,2985],{"class":129},[123,44463,33298],{"class":279},[123,44465,134],{"class":133},[123,44467,2686],{"class":164},[123,44469,650],{"class":129},[123,44471,44472],{"class":125,"line":10404},[123,44473,40461],{"class":129},[123,44475,44476,44478,44480,44482,44484,44486,44488,44490,44492,44494,44496,44498,44500],{"class":125,"line":10409},[123,44477,40506],{"class":129},[123,44479,33289],{"class":279},[123,44481,134],{"class":133},[123,44483,2686],{"class":164},[123,44485,2985],{"class":129},[123,44487,33344],{"class":279},[123,44489,134],{"class":133},[123,44491,2692],{"class":164},[123,44493,2985],{"class":129},[123,44495,33298],{"class":279},[123,44497,134],{"class":133},[123,44499,2825],{"class":164},[123,44501,288],{"class":129},[123,44503,44504],{"class":125,"line":10415},[123,44505,40535],{"class":129},[123,44507,44508,44510,44513,44515],{"class":125,"line":10442},[123,44509,33260],{"class":164},[123,44511,44512],{"class":129},".b2",[123,44514,134],{"class":133},[123,44516,40419],{"class":129},[123,44518,44519,44521,44523,44525,44527,44529,44531,44533,44535,44537,44539,44541,44543],{"class":125,"line":10447},[123,44520,40424],{"class":129},[123,44522,33271],{"class":279},[123,44524,134],{"class":133},[123,44526,2811],{"class":164},[123,44528,2985],{"class":129},[123,44530,33280],{"class":279},[123,44532,134],{"class":133},[123,44534,2811],{"class":164},[123,44536,2985],{"class":129},[123,44538,33289],{"class":279},[123,44540,134],{"class":133},[123,44542,2825],{"class":164},[123,44544,650],{"class":129},[123,44546,44547],{"class":125,"line":10453},[123,44548,40461],{"class":129},[123,44550,44551,44553,44555,44557,44559,44561,44563,44565,44568,44570,44572,44574,44576,44578,44580,44582,44584],{"class":125,"line":10465},[123,44552,40424],{"class":129},[123,44554,33271],{"class":279},[123,44556,134],{"class":133},[123,44558,2811],{"class":164},[123,44560,2985],{"class":129},[123,44562,33280],{"class":279},[123,44564,134],{"class":133},[123,44566,44567],{"class":164},"192",[123,44569,2985],{"class":129},[123,44571,33289],{"class":279},[123,44573,134],{"class":133},[123,44575,2686],{"class":164},[123,44577,2985],{"class":129},[123,44579,33298],{"class":279},[123,44581,134],{"class":133},[123,44583,2825],{"class":164},[123,44585,650],{"class":129},[123,44587,44588],{"class":125,"line":10477},[123,44589,40461],{"class":129},[123,44591,44592,44594,44596,44598,44600,44602,44604,44606,44608,44610,44612,44614,44616],{"class":125,"line":10489},[123,44593,40506],{"class":129},[123,44595,33289],{"class":279},[123,44597,134],{"class":133},[123,44599,2686],{"class":164},[123,44601,2985],{"class":129},[123,44603,33344],{"class":279},[123,44605,134],{"class":133},[123,44607,2692],{"class":164},[123,44609,2985],{"class":129},[123,44611,33298],{"class":279},[123,44613,134],{"class":133},[123,44615,2825],{"class":164},[123,44617,288],{"class":129},[123,44619,44620],{"class":125,"line":12148},[123,44621,40535],{"class":129},[123,44623,44624,44626,44629,44631],{"class":125,"line":12173},[123,44625,33260],{"class":164},[123,44627,44628],{"class":129},".b3",[123,44630,134],{"class":133},[123,44632,40419],{"class":129},[123,44634,44635,44638,44640,44642,44644,44647,44649,44651,44653,44656,44658,44660,44662,44665,44667],{"class":125,"line":12196},[123,44636,44637],{"class":129},"            Inception(",[123,44639,44567],{"class":164},[123,44641,2985],{"class":129},[123,44643,2811],{"class":164},[123,44645,44646],{"class":129},",(",[123,44648,2817],{"class":164},[123,44650,2985],{"class":129},[123,44652,34482],{"class":164},[123,44654,44655],{"class":129},"),(",[123,44657,3204],{"class":164},[123,44659,2985],{"class":129},[123,44661,2805],{"class":164},[123,44663,44664],{"class":129},"),",[123,44666,2805],{"class":164},[123,44668,650],{"class":129},[123,44670,44671,44673,44675,44677,44679,44681,44683,44685,44687,44689,44691,44693,44695,44697,44699],{"class":125,"line":12220},[123,44672,44637],{"class":129},[123,44674,37280],{"class":164},[123,44676,2985],{"class":129},[123,44678,34482],{"class":164},[123,44680,44646],{"class":129},[123,44682,34482],{"class":164},[123,44684,2985],{"class":129},[123,44686,44567],{"class":164},[123,44688,44655],{"class":129},[123,44690,2805],{"class":164},[123,44692,2985],{"class":129},[123,44694,2817],{"class":164},[123,44696,44664],{"class":129},[123,44698,2811],{"class":164},[123,44700,650],{"class":129},[123,44702,44703,44705,44707,44709,44711,44713,44715,44717,44719,44721,44723,44725,44727],{"class":125,"line":12225},[123,44704,40506],{"class":129},[123,44706,33289],{"class":279},[123,44708,134],{"class":133},[123,44710,2686],{"class":164},[123,44712,2985],{"class":129},[123,44714,33344],{"class":279},[123,44716,134],{"class":133},[123,44718,2692],{"class":164},[123,44720,2985],{"class":129},[123,44722,33298],{"class":279},[123,44724,134],{"class":133},[123,44726,2825],{"class":164},[123,44728,288],{"class":129},[123,44730,44731],{"class":125,"line":12230},[123,44732,40535],{"class":129},[123,44734,44735,44737,44740,44742],{"class":125,"line":12235},[123,44736,33260],{"class":164},[123,44738,44739],{"class":129},".b4",[123,44741,134],{"class":133},[123,44743,40419],{"class":129},[123,44745,44746,44748,44751,44753,44755,44757,44759,44761,44764,44766,44768,44770,44772,44774,44776],{"class":125,"line":12244},[123,44747,44637],{"class":129},[123,44749,44750],{"class":164},"480",[123,44752,2985],{"class":129},[123,44754,44567],{"class":164},[123,44756,44646],{"class":129},[123,44758,2817],{"class":164},[123,44760,2985],{"class":129},[123,44762,44763],{"class":164},"208",[123,44765,44655],{"class":129},[123,44767,3204],{"class":164},[123,44769,2985],{"class":129},[123,44771,3210],{"class":164},[123,44773,44664],{"class":129},[123,44775,2811],{"class":164},[123,44777,650],{"class":129},[123,44779,44780,44782,44784,44786,44788,44790,44792,44794,44796,44798,44800,44802,44804,44806,44808],{"class":125,"line":12249},[123,44781,44637],{"class":129},[123,44783,40866],{"class":164},[123,44785,2985],{"class":129},[123,44787,1040],{"class":164},[123,44789,44646],{"class":129},[123,44791,3220],{"class":164},[123,44793,2985],{"class":129},[123,44795,33913],{"class":164},[123,44797,44655],{"class":129},[123,44799,3402],{"class":164},[123,44801,2985],{"class":129},[123,44803,2811],{"class":164},[123,44805,44664],{"class":129},[123,44807,2811],{"class":164},[123,44809,650],{"class":129},[123,44811,44812,44814,44816,44818,44820,44822,44824,44826,44828,44830,44832,44834,44836,44838,44840],{"class":125,"line":12255},[123,44813,44637],{"class":129},[123,44815,40866],{"class":164},[123,44817,2985],{"class":129},[123,44819,34482],{"class":164},[123,44821,44646],{"class":129},[123,44823,34482],{"class":164},[123,44825,2985],{"class":129},[123,44827,37280],{"class":164},[123,44829,44655],{"class":129},[123,44831,3402],{"class":164},[123,44833,2985],{"class":129},[123,44835,2811],{"class":164},[123,44837,44664],{"class":129},[123,44839,2811],{"class":164},[123,44841,650],{"class":129},[123,44843,44844,44846,44848,44850,44852,44854,44856,44858,44861,44863,44865,44867,44869,44871,44873],{"class":125,"line":12276},[123,44845,44637],{"class":129},[123,44847,40866],{"class":164},[123,44849,2985],{"class":129},[123,44851,3220],{"class":164},[123,44853,44646],{"class":129},[123,44855,34482],{"class":164},[123,44857,2985],{"class":129},[123,44859,44860],{"class":164},"288",[123,44862,44655],{"class":129},[123,44864,2805],{"class":164},[123,44866,2985],{"class":129},[123,44868,2811],{"class":164},[123,44870,44664],{"class":129},[123,44872,2811],{"class":164},[123,44874,650],{"class":129},[123,44876,44877,44879,44882,44884,44886,44888,44890,44892,44895,44897,44899,44901,44903,44905,44907],{"class":125,"line":12282},[123,44878,44637],{"class":129},[123,44880,44881],{"class":164},"528",[123,44883,2985],{"class":129},[123,44885,37280],{"class":164},[123,44887,44646],{"class":129},[123,44889,1040],{"class":164},[123,44891,2985],{"class":129},[123,44893,44894],{"class":164},"320",[123,44896,44655],{"class":129},[123,44898,2805],{"class":164},[123,44900,2985],{"class":129},[123,44902,34482],{"class":164},[123,44904,44664],{"class":129},[123,44906,34482],{"class":164},[123,44908,650],{"class":129},[123,44910,44911,44913,44915,44917,44919,44921,44923,44925,44927,44929,44931,44933,44935],{"class":125,"line":12296},[123,44912,40506],{"class":129},[123,44914,33289],{"class":279},[123,44916,134],{"class":133},[123,44918,2686],{"class":164},[123,44920,2985],{"class":129},[123,44922,33344],{"class":279},[123,44924,134],{"class":133},[123,44926,2692],{"class":164},[123,44928,2985],{"class":129},[123,44930,33298],{"class":279},[123,44932,134],{"class":133},[123,44934,2825],{"class":164},[123,44936,288],{"class":129},[123,44938,44939],{"class":125,"line":12302},[123,44940,40535],{"class":129},[123,44942,44943,44945,44948,44950],{"class":125,"line":12329},[123,44944,33260],{"class":164},[123,44946,44947],{"class":129},".b5",[123,44949,134],{"class":133},[123,44951,40419],{"class":129},[123,44953,44954,44956,44959,44961,44963,44965,44967,44969,44971,44973,44975,44977,44979,44981,44983],{"class":125,"line":12338},[123,44955,44637],{"class":129},[123,44957,44958],{"class":164},"832",[123,44960,2985],{"class":129},[123,44962,37280],{"class":164},[123,44964,44646],{"class":129},[123,44966,1040],{"class":164},[123,44968,2985],{"class":129},[123,44970,44894],{"class":164},[123,44972,44655],{"class":129},[123,44974,2805],{"class":164},[123,44976,2985],{"class":129},[123,44978,34482],{"class":164},[123,44980,44664],{"class":129},[123,44982,34482],{"class":164},[123,44984,650],{"class":129},[123,44986,44987,44989,44991,44993,44995,44997,44999,45001,45003,45005,45007,45009,45011,45013,45015],{"class":125,"line":12344},[123,44988,44637],{"class":129},[123,44990,44958],{"class":164},[123,44992,2985],{"class":129},[123,44994,37350],{"class":164},[123,44996,44646],{"class":129},[123,44998,44567],{"class":164},[123,45000,2985],{"class":129},[123,45002,37350],{"class":164},[123,45004,44655],{"class":129},[123,45006,3210],{"class":164},[123,45008,2985],{"class":129},[123,45010,34482],{"class":164},[123,45012,44664],{"class":129},[123,45014,34482],{"class":164},[123,45016,650],{"class":129},[123,45018,45019,45022,45024,45026,45028],{"class":125,"line":12352},[123,45020,45021],{"class":129},"            nn.AdaptiveAvgPool2d((",[123,45023,2825],{"class":164},[123,45025,2985],{"class":129},[123,45027,2825],{"class":164},[123,45029,45030],{"class":129},")),\n",[123,45032,45033],{"class":125,"line":12357},[123,45034,41199],{"class":129},[123,45036,45037,45039,45042,45044,45046],{"class":125,"line":19032},[123,45038,41204],{"class":129},[123,45040,45041],{"class":164},"1024",[123,45043,2985],{"class":129},[123,45045,2193],{"class":164},[123,45047,288],{"class":129},[123,45049,45050],{"class":125,"line":19038},[123,45051,40535],{"class":129},[123,45053,45054],{"class":125,"line":19061},[123,45055,45056],{"class":2673},"        # 对模型参数初始化\n",[123,45058,45059,45061,45063,45065,45067],{"class":125,"line":19067},[123,45060,5843],{"class":133},[123,45062,41277],{"class":129},[123,45064,1405],{"class":133},[123,45066,41282],{"class":164},[123,45068,41285],{"class":129},[123,45070,45071,45073,45075],{"class":125,"line":19090},[123,45072,7079],{"class":133},[123,45074,41297],{"class":164},[123,45076,41300],{"class":129},[123,45078,45079,45081,45084,45086,45089,45091,45093,45095,45097],{"class":125,"line":19104},[123,45080,41310],{"class":129},[123,45082,45083],{"class":279},"mode",[123,45085,134],{"class":133},[123,45087,45088],{"class":143},"'fan_out'",[123,45090,2985],{"class":129},[123,45092,41313],{"class":279},[123,45094,134],{"class":133},[123,45096,41318],{"class":143},[123,45098,288],{"class":129},[123,45100,45101],{"class":125,"line":19124},[123,45102,45103],{"class":2673},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[123,45105,45106],{"class":125,"line":19130},[123,45107,45108],{"class":2673},"                # ② mode = 'fan_out'决定使用的fan值：\n",[123,45110,45111],{"class":125,"line":19141},[123,45112,45113],{"class":2673},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[123,45115,45116],{"class":125,"line":19164},[123,45117,45118],{"class":2673},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[123,45120,45121],{"class":125,"line":19186},[123,45122,45123],{"class":2673},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[123,45125,45126],{"class":125,"line":19191},[123,45127,45128],{"class":2673},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[123,45130,45131,45133,45135,45137,45139,45141],{"class":125,"line":19197},[123,45132,41330],{"class":133},[123,45134,41333],{"class":129},[123,45136,41336],{"class":133},[123,45138,1714],{"class":133},[123,45140,41341],{"class":164},[123,45142,1344],{"class":129},[123,45144,45145,45147,45149],{"class":125,"line":19211},[123,45146,41353],{"class":129},[123,45148,2799],{"class":164},[123,45150,288],{"class":129},[123,45152,45153,45156,45158],{"class":125,"line":19224},[123,45154,45155],{"class":133},"                elif",[123,45157,41297],{"class":164},[123,45159,41372],{"class":129},[123,45161,45162,45165,45167,45169,45171],{"class":125,"line":19229},[123,45163,45164],{"class":129},"                    nn.init.normal_(m.weight,",[123,45166,2799],{"class":164},[123,45168,2985],{"class":129},[123,45170,41394],{"class":164},[123,45172,288],{"class":129},[123,45174,45175,45178,45180,45182,45184,45186],{"class":125,"line":19243},[123,45176,45177],{"class":133},"                    if",[123,45179,41333],{"class":129},[123,45181,41336],{"class":133},[123,45183,1714],{"class":133},[123,45185,41341],{"class":164},[123,45187,1344],{"class":129},[123,45189,45190,45193,45195],{"class":125,"line":19248},[123,45191,45192],{"class":129},"                        nn.init.constant_(m.bias,",[123,45194,2799],{"class":164},[123,45196,288],{"class":129},[123,45198,45199],{"class":125,"line":19254},[123,45200,37575],{"class":2673},[123,45202,45203,45205,45207],{"class":125,"line":19259},[123,45204,33216],{"class":133},[123,45206,33508],{"class":337},[123,45208,33511],{"class":129},[123,45210,45211,45213,45215,45217],{"class":125,"line":19273},[123,45212,33516],{"class":129},[123,45214,134],{"class":133},[123,45216,33238],{"class":164},[123,45218,45219],{"class":129},".b1(x)\n",[123,45221,45222,45224,45226,45228],{"class":125,"line":19278},[123,45223,33516],{"class":129},[123,45225,134],{"class":133},[123,45227,33238],{"class":164},[123,45229,45230],{"class":129},".b2(x)\n",[123,45232,45233,45235,45237,45239],{"class":125,"line":19283},[123,45234,33516],{"class":129},[123,45236,134],{"class":133},[123,45238,33238],{"class":164},[123,45240,45241],{"class":129},".b3(x)\n",[123,45243,45244,45246,45248,45250],{"class":125,"line":19297},[123,45245,33516],{"class":129},[123,45247,134],{"class":133},[123,45249,33238],{"class":164},[123,45251,45252],{"class":129},".b4(x)\n",[123,45254,45255,45257,45259,45261],{"class":125,"line":19309},[123,45256,33516],{"class":129},[123,45258,134],{"class":133},[123,45260,33238],{"class":164},[123,45262,45263],{"class":129},".b5(x)\n",[123,45265,45266,45268],{"class":125,"line":19314},[123,45267,17182],{"class":133},[123,45269,33624],{"class":129},[123,45271,45272],{"class":125,"line":19327},[123,45273,232],{"emptyLinePlaceholder":231},[123,45275,45276],{"class":125,"line":19332},[123,45277,45278],{"class":2673},"# 模型展示\n",[123,45280,45281,45283,45285,45287,45289],{"class":125,"line":19337},[123,45282,3998],{"class":133},[123,45284,33635],{"class":164},[123,45286,5391],{"class":133},[123,45288,33640],{"class":143},[123,45290,1344],{"class":129},[123,45292,45293,45295,45297,45299,45301,45303,45305,45307,45309],{"class":125,"line":19342},[123,45294,33652],{"class":129},[123,45296,134],{"class":133},[123,45298,32867],{"class":129},[123,45300,33659],{"class":143},[123,45302,4158],{"class":133},[123,45304,33664],{"class":129},[123,45306,4155],{"class":133},[123,45308,32892],{"class":143},[123,45310,288],{"class":129},[123,45312,45313,45315,45317],{"class":125,"line":19355},[123,45314,33704],{"class":129},[123,45316,134],{"class":133},[123,45318,45319],{"class":129},"GoogLeNet(Inception).to(device)\n",[123,45321,45322,45324,45326,45328,45330,45332,45334,45336],{"class":125,"line":19360},[123,45323,33714],{"class":164},[123,45325,33717],{"class":129},[123,45327,2825],{"class":164},[123,45329,2985],{"class":129},[123,45331,33913],{"class":164},[123,45333,2985],{"class":129},[123,45335,33913],{"class":164},[123,45337,33730],{"class":129},[26,45339,45340],{"start":140},[29,45341,41591],{},[113,45343,45345],{"className":115,"code":45344,"language":117,"meta":118,"style":118},"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",[120,45346,45347,45353,45359,45369,45375,45385,45395,45405,45415,45425,45429,45440,45450,45454,45458,45462,45470,45482,45492,45508,45518,45550,45564,45574,45584,45588,45598,45612,45622,45632,45642,45648,45652,45656,45660,45664,45668,45676,45696,45700,45704,45708,45712,45716,45732,45736,45740,45748,45752,45756,45764,45768,45772,45776,45784,45788,45792,45796,45800,45808,45812,45820,45824,45832,45836,45844,45848,45856,45860,45864,45872,45876,45880,45884,45896,45920,45934,45938,45942,45946,45954,45958,45966,45970,45978,45982,45990,45994,46002,46006,46014,46018,46030,46034,46042,46046,46054,46058,46062,46066,46070,46078,46082,46098,46102,46110,46114,46118,46122,46126,46130,46134,46138,46154,46158,46170,46174,46186,46190,46202,46206,46214,46218,46226,46230,46234,46238,46244,46248,46256,46260,46276,46280,46288,46292,46308,46320,46324,46336,46340,46344,46352,46356,46360,46368,46372,46380,46384,46392,46396,46400,46442,46484,46488,46492,46508,46512,46528,46532,46536,46544,46548,46552,46564,46602,46606,46610,46618,46622,46636,46646,46652,46658,46664,46670,46674,46678,46684,46688,46692,46700,46704,46722,46726,46730,46734,46750,46754,46758,46762,46766,46770,46790,46810,46814,46818,46822,46830,46838,46842,46858,46878,46898,46902,46906,46914,46922,46926,46930,46934,46946,46950,46960,46968,46985],{"__ignoreMap":118},[123,45348,45349,45351],{"class":125,"line":126},[123,45350,223],{"class":133},[123,45352,34234],{"class":129},[123,45354,45355,45357],{"class":125,"line":140},[123,45356,223],{"class":133},[123,45358,34241],{"class":129},[123,45360,45361,45363,45365,45367],{"class":125,"line":156},[123,45362,223],{"class":133},[123,45364,34252],{"class":129},[123,45366,547],{"class":133},[123,45368,34257],{"class":129},[123,45370,45371,45373],{"class":125,"line":168},[123,45372,223],{"class":133},[123,45374,32812],{"class":129},[123,45376,45377,45379,45381,45383],{"class":125,"line":268},[123,45378,391],{"class":133},[123,45380,33829],{"class":129},[123,45382,223],{"class":133},[123,45384,34274],{"class":129},[123,45386,45387,45389,45391,45393],{"class":125,"line":291},[123,45388,391],{"class":133},[123,45390,33783],{"class":129},[123,45392,223],{"class":133},[123,45394,33788],{"class":129},[123,45396,45397,45399,45401,45403],{"class":125,"line":300},[123,45398,391],{"class":133},[123,45400,33812],{"class":129},[123,45402,223],{"class":133},[123,45404,33817],{"class":129},[123,45406,45407,45409,45411,45413],{"class":125,"line":305},[123,45408,223],{"class":133},[123,45410,33829],{"class":129},[123,45412,547],{"class":133},[123,45414,33834],{"class":129},[123,45416,45417,45419,45421,45423],{"class":125,"line":316},[123,45418,223],{"class":133},[123,45420,33846],{"class":129},[123,45422,547],{"class":133},[123,45424,33851],{"class":129},[123,45426,45427],{"class":125,"line":673},[123,45428,34319],{"class":2673},[123,45430,45431,45433,45435,45437],{"class":125,"line":692},[123,45432,391],{"class":133},[123,45434,34326],{"class":129},[123,45436,223],{"class":133},[123,45438,45439],{"class":129}," GoogLeNet, Inception\n",[123,45441,45442,45444,45446,45448],{"class":125,"line":713},[123,45443,391],{"class":133},[123,45445,33155],{"class":129},[123,45447,223],{"class":133},[123,45449,33160],{"class":129},[123,45451,45452],{"class":125,"line":718},[123,45453,232],{"emptyLinePlaceholder":231},[123,45455,45456],{"class":125,"line":1138},[123,45457,232],{"emptyLinePlaceholder":231},[123,45459,45460],{"class":125,"line":1429},[123,45461,34354],{"class":2673},[123,45463,45464,45466,45468],{"class":125,"line":1439},[123,45465,34359],{"class":133},[123,45467,34362],{"class":337},[123,45469,34365],{"class":129},[123,45471,45472,45474,45476,45478,45480],{"class":125,"line":1444},[123,45473,34370],{"class":129},[123,45475,134],{"class":133},[123,45477,33869],{"class":129},[123,45479,33877],{"class":143},[123,45481,153],{"class":129},[123,45483,45484,45486,45488,45490],{"class":125,"line":1453},[123,45485,34383],{"class":279},[123,45487,134],{"class":133},[123,45489,870],{"class":164},[123,45491,153],{"class":129},[123,45493,45494,45496,45498,45500,45502,45504,45506],{"class":125,"line":1458},[123,45495,34394],{"class":279},[123,45497,134],{"class":133},[123,45499,33905],{"class":129},[123,45501,33908],{"class":279},[123,45503,134],{"class":133},[123,45505,37859],{"class":164},[123,45507,33916],{"class":129},[123,45509,45510,45512,45514,45516],{"class":125,"line":1476},[123,45511,34411],{"class":279},[123,45513,134],{"class":133},[123,45515,870],{"class":164},[123,45517,288],{"class":129},[123,45519,45520,45522,45524,45526,45528,45530,45532,45534,45536,45538,45540,45542,45544,45546,45548],{"class":125,"line":1494},[123,45521,34422],{"class":129},[123,45523,134],{"class":133},[123,45525,34427],{"class":129},[123,45527,34430],{"class":164},[123,45529,1315],{"class":129},[123,45531,34435],{"class":164},[123,45533,3060],{"class":133},[123,45535,9791],{"class":164},[123,45537,34442],{"class":129},[123,45539,34430],{"class":164},[123,45541,1315],{"class":129},[123,45543,34449],{"class":164},[123,45545,3060],{"class":133},[123,45547,9791],{"class":164},[123,45549,34456],{"class":129},[123,45551,45552,45554,45556,45558,45560,45562],{"class":125,"line":1499},[123,45553,34461],{"class":129},[123,45555,134],{"class":133},[123,45557,34466],{"class":129},[123,45559,33949],{"class":279},[123,45561,134],{"class":133},[123,45563,33954],{"class":129},[123,45565,45566,45568,45570,45572],{"class":125,"line":1517},[123,45567,34477],{"class":279},[123,45569,134],{"class":133},[123,45571,2805],{"class":164},[123,45573,153],{"class":129},[123,45575,45576,45578,45580,45582],{"class":125,"line":1534},[123,45577,34489],{"class":279},[123,45579,134],{"class":133},[123,45581,870],{"class":164},[123,45583,153],{"class":129},[123,45585,45586],{"class":125,"line":1539},[123,45587,34500],{"class":2673},[123,45589,45590,45592,45594,45596],{"class":125,"line":2080},[123,45591,34505],{"class":279},[123,45593,134],{"class":133},[123,45595,2248],{"class":164},[123,45597,288],{"class":129},[123,45599,45600,45602,45604,45606,45608,45610],{"class":125,"line":2097},[123,45601,34516],{"class":129},[123,45603,134],{"class":133},[123,45605,33946],{"class":129},[123,45607,33949],{"class":279},[123,45609,134],{"class":133},[123,45611,34527],{"class":129},[123,45613,45614,45616,45618,45620],{"class":125,"line":2114},[123,45615,34532],{"class":279},[123,45617,134],{"class":133},[123,45619,2805],{"class":164},[123,45621,153],{"class":129},[123,45623,45624,45626,45628,45630],{"class":125,"line":2125},[123,45625,34543],{"class":279},[123,45627,134],{"class":133},[123,45629,870],{"class":164},[123,45631,153],{"class":129},[123,45633,45634,45636,45638,45640],{"class":125,"line":2130},[123,45635,34554],{"class":279},[123,45637,134],{"class":133},[123,45639,2248],{"class":164},[123,45641,288],{"class":129},[123,45643,45644,45646],{"class":125,"line":5033},[123,45645,6529],{"class":133},[123,45647,34567],{"class":129},[123,45649,45650],{"class":125,"line":5041},[123,45651,232],{"emptyLinePlaceholder":231},[123,45653,45654],{"class":125,"line":5046},[123,45655,34576],{"class":2673},[123,45657,45658],{"class":125,"line":5052},[123,45659,34581],{"class":2673},[123,45661,45662],{"class":125,"line":5058},[123,45663,232],{"emptyLinePlaceholder":231},[123,45665,45666],{"class":125,"line":5063},[123,45667,34590],{"class":2673},[123,45669,45670,45672,45674],{"class":125,"line":10380},[123,45671,34359],{"class":133},[123,45673,34597],{"class":337},[123,45675,34600],{"class":129},[123,45677,45678,45680,45682,45684,45686,45688,45690,45692,45694],{"class":125,"line":10404},[123,45679,33652],{"class":129},[123,45681,134],{"class":133},[123,45683,32867],{"class":129},[123,45685,33659],{"class":143},[123,45687,4158],{"class":133},[123,45689,33664],{"class":129},[123,45691,4155],{"class":133},[123,45693,34619],{"class":143},[123,45695,288],{"class":129},[123,45697,45698],{"class":125,"line":10409},[123,45699,232],{"emptyLinePlaceholder":231},[123,45701,45702],{"class":125,"line":10415},[123,45703,232],{"emptyLinePlaceholder":231},[123,45705,45706],{"class":125,"line":10442},[123,45707,34634],{"class":2673},[123,45709,45710],{"class":125,"line":10447},[123,45711,34639],{"class":2673},[123,45713,45714],{"class":125,"line":10453},[123,45715,34644],{"class":2673},[123,45717,45718,45720,45722,45724,45726,45728,45730],{"class":125,"line":10465},[123,45719,34649],{"class":129},[123,45721,134],{"class":133},[123,45723,34654],{"class":129},[123,45725,34657],{"class":279},[123,45727,134],{"class":133},[123,45729,34662],{"class":164},[123,45731,288],{"class":129},[123,45733,45734],{"class":125,"line":10477},[123,45735,232],{"emptyLinePlaceholder":231},[123,45737,45738],{"class":125,"line":10489},[123,45739,34673],{"class":2673},[123,45741,45742,45744,45746],{"class":125,"line":12148},[123,45743,34678],{"class":129},[123,45745,134],{"class":133},[123,45747,34683],{"class":129},[123,45749,45750],{"class":125,"line":12173},[123,45751,232],{"emptyLinePlaceholder":231},[123,45753,45754],{"class":125,"line":12196},[123,45755,34692],{"class":2673},[123,45757,45758,45760,45762],{"class":125,"line":12220},[123,45759,33704],{"class":129},[123,45761,134],{"class":133},[123,45763,34701],{"class":129},[123,45765,45766],{"class":125,"line":12225},[123,45767,34706],{"class":2673},[123,45769,45770],{"class":125,"line":12230},[123,45771,34711],{"class":2673},[123,45773,45774],{"class":125,"line":12235},[123,45775,34716],{"class":2673},[123,45777,45778,45780,45782],{"class":125,"line":12244},[123,45779,34721],{"class":129},[123,45781,134],{"class":133},[123,45783,34726],{"class":129},[123,45785,45786],{"class":125,"line":12249},[123,45787,232],{"emptyLinePlaceholder":231},[123,45789,45790],{"class":125,"line":12255},[123,45791,232],{"emptyLinePlaceholder":231},[123,45793,45794],{"class":125,"line":12276},[123,45795,34739],{"class":2673},[123,45797,45798],{"class":125,"line":12282},[123,45799,34744],{"class":2673},[123,45801,45802,45804,45806],{"class":125,"line":12296},[123,45803,34749],{"class":129},[123,45805,134],{"class":133},[123,45807,34754],{"class":164},[123,45809,45810],{"class":125,"line":12302},[123,45811,34759],{"class":2673},[123,45813,45814,45816,45818],{"class":125,"line":12329},[123,45815,34764],{"class":129},[123,45817,134],{"class":133},[123,45819,34769],{"class":129},[123,45821,45822],{"class":125,"line":12338},[123,45823,34774],{"class":2673},[123,45825,45826,45828,45830],{"class":125,"line":12344},[123,45827,34779],{"class":129},[123,45829,134],{"class":133},[123,45831,34769],{"class":129},[123,45833,45834],{"class":125,"line":12352},[123,45835,34788],{"class":2673},[123,45837,45838,45840,45842],{"class":125,"line":12357},[123,45839,34793],{"class":129},[123,45841,134],{"class":133},[123,45843,34769],{"class":129},[123,45845,45846],{"class":125,"line":19032},[123,45847,34802],{"class":2673},[123,45849,45850,45852,45854],{"class":125,"line":19038},[123,45851,34807],{"class":129},[123,45853,134],{"class":133},[123,45855,34769],{"class":129},[123,45857,45858],{"class":125,"line":19061},[123,45859,232],{"emptyLinePlaceholder":231},[123,45861,45862],{"class":125,"line":19067},[123,45863,34820],{"class":2673},[123,45865,45866,45868,45870],{"class":125,"line":19090},[123,45867,34825],{"class":129},[123,45869,134],{"class":133},[123,45871,34830],{"class":129},[123,45873,45874],{"class":125,"line":19104},[123,45875,232],{"emptyLinePlaceholder":231},[123,45877,45878],{"class":125,"line":19124},[123,45879,232],{"emptyLinePlaceholder":231},[123,45881,45882],{"class":125,"line":19130},[123,45883,34843],{"class":2673},[123,45885,45886,45888,45890,45892,45894],{"class":125,"line":19141},[123,45887,5641],{"class":133},[123,45889,34850],{"class":129},[123,45891,1405],{"class":133},[123,45893,34855],{"class":164},[123,45895,34858],{"class":129},[123,45897,45898,45900,45902,45904,45906,45908,45910,45912,45914,45916,45918],{"class":125,"line":19164},[123,45899,34863],{"class":164},[123,45901,1315],{"class":129},[123,45903,34868],{"class":143},[123,45905,34871],{"class":164},[123,45907,3187],{"class":143},[123,45909,34871],{"class":164},[123,45911,2859],{"class":143},[123,45913,34880],{"class":129},[123,45915,3135],{"class":133},[123,45917,2825],{"class":164},[123,45919,32913],{"class":129},[123,45921,45922,45924,45926,45928,45930,45932],{"class":125,"line":19186},[123,45923,34863],{"class":164},[123,45925,1315],{"class":129},[123,45927,34895],{"class":143},[123,45929,3060],{"class":133},[123,45931,2193],{"class":164},[123,45933,288],{"class":129},[123,45935,45936],{"class":125,"line":19191},[123,45937,232],{"emptyLinePlaceholder":231},[123,45939,45940],{"class":125,"line":19197},[123,45941,34910],{"class":2673},[123,45943,45944],{"class":125,"line":19211},[123,45945,34915],{"class":2673},[123,45947,45948,45950,45952],{"class":125,"line":19224},[123,45949,34920],{"class":129},[123,45951,134],{"class":133},[123,45953,34754],{"class":164},[123,45955,45956],{"class":125,"line":19229},[123,45957,34929],{"class":2673},[123,45959,45960,45962,45964],{"class":125,"line":19243},[123,45961,34934],{"class":129},[123,45963,134],{"class":133},[123,45965,5526],{"class":164},[123,45967,45968],{"class":125,"line":19248},[123,45969,34943],{"class":2673},[123,45971,45972,45974,45976],{"class":125,"line":19254},[123,45973,34948],{"class":129},[123,45975,134],{"class":133},[123,45977,34754],{"class":164},[123,45979,45980],{"class":125,"line":19259},[123,45981,34957],{"class":2673},[123,45983,45984,45986,45988],{"class":125,"line":19273},[123,45985,34962],{"class":129},[123,45987,134],{"class":133},[123,45989,5526],{"class":164},[123,45991,45992],{"class":125,"line":19278},[123,45993,34971],{"class":2673},[123,45995,45996,45998,46000],{"class":125,"line":19283},[123,45997,34976],{"class":129},[123,45999,134],{"class":133},[123,46001,5526],{"class":164},[123,46003,46004],{"class":125,"line":19297},[123,46005,34985],{"class":2673},[123,46007,46008,46010,46012],{"class":125,"line":19309},[123,46009,34990],{"class":129},[123,46011,134],{"class":133},[123,46013,5526],{"class":164},[123,46015,46016],{"class":125,"line":19314},[123,46017,34999],{"class":2673},[123,46019,46020,46022,46024,46026,46028],{"class":125,"line":19327},[123,46021,5843],{"class":133},[123,46023,34013],{"class":129},[123,46025,1405],{"class":133},[123,46027,34018],{"class":164},[123,46029,35012],{"class":129},[123,46031,46032],{"class":125,"line":19332},[123,46033,35017],{"class":2673},[123,46035,46036,46038,46040],{"class":125,"line":19337},[123,46037,35022],{"class":129},[123,46039,134],{"class":133},[123,46041,35027],{"class":129},[123,46043,46044],{"class":125,"line":19342},[123,46045,35032],{"class":2673},[123,46047,46048,46050,46052],{"class":125,"line":19355},[123,46049,35037],{"class":129},[123,46051,134],{"class":133},[123,46053,35042],{"class":129},[123,46055,46056],{"class":125,"line":19360},[123,46057,35048],{"class":2673},[123,46059,46060],{"class":125,"line":35045},[123,46061,35054],{"class":129},[123,46063,46064],{"class":125,"line":35051},[123,46065,35060],{"class":2673},[123,46067,46068],{"class":125,"line":35057},[123,46069,35066],{"class":2673},[123,46071,46072,46074,46076],{"class":125,"line":35063},[123,46073,35072],{"class":129},[123,46075,134],{"class":133},[123,46077,35077],{"class":129},[123,46079,46080],{"class":125,"line":35069},[123,46081,35083],{"class":2673},[123,46083,46084,46086,46088,46090,46092,46094,46096],{"class":125,"line":35080},[123,46085,35089],{"class":129},[123,46087,134],{"class":133},[123,46089,35094],{"class":129},[123,46091,35097],{"class":279},[123,46093,134],{"class":133},[123,46095,2825],{"class":164},[123,46097,288],{"class":129},[123,46099,46100],{"class":125,"line":35086},[123,46101,35109],{"class":2673},[123,46103,46104,46106,46108],{"class":125,"line":35106},[123,46105,35115],{"class":129},[123,46107,134],{"class":133},[123,46109,35120],{"class":129},[123,46111,46112],{"class":125,"line":35112},[123,46113,35126],{"class":2673},[123,46115,46116],{"class":125,"line":35123},[123,46117,35132],{"class":129},[123,46119,46120],{"class":125,"line":35129},[123,46121,35138],{"class":2673},[123,46123,46124],{"class":125,"line":35135},[123,46125,35144],{"class":129},[123,46127,46128],{"class":125,"line":35141},[123,46129,35150],{"class":2673},[123,46131,46132],{"class":125,"line":35147},[123,46133,35156],{"class":129},[123,46135,46136],{"class":125,"line":35153},[123,46137,35162],{"class":2673},[123,46139,46140,46142,46144,46146,46148,46150,46152],{"class":125,"line":35159},[123,46141,35168],{"class":129},[123,46143,11909],{"class":133},[123,46145,35173],{"class":129},[123,46147,3060],{"class":133},[123,46149,35178],{"class":129},[123,46151,2799],{"class":164},[123,46153,288],{"class":129},[123,46155,46156],{"class":125,"line":35165},[123,46157,35188],{"class":2673},[123,46159,46160,46162,46164,46166,46168],{"class":125,"line":35185},[123,46161,35194],{"class":129},[123,46163,11909],{"class":133},[123,46165,35199],{"class":129},[123,46167,5391],{"class":133},[123,46169,35204],{"class":129},[123,46171,46172],{"class":125,"line":35191},[123,46173,35210],{"class":2673},[123,46175,46176,46178,46180,46182,46184],{"class":125,"line":35207},[123,46177,35216],{"class":129},[123,46179,11909],{"class":133},[123,46181,35178],{"class":129},[123,46183,2799],{"class":164},[123,46185,288],{"class":129},[123,46187,46188],{"class":125,"line":35213},[123,46189,35230],{"class":2673},[123,46191,46192,46194,46196,46198,46200],{"class":125,"line":35227},[123,46193,5843],{"class":133},[123,46195,35238],{"class":129},[123,46197,1405],{"class":133},[123,46199,34018],{"class":164},[123,46201,35245],{"class":129},[123,46203,46204],{"class":125,"line":35233},[123,46205,35251],{"class":2673},[123,46207,46208,46210,46212],{"class":125,"line":35248},[123,46209,35022],{"class":129},[123,46211,134],{"class":133},[123,46213,35027],{"class":129},[123,46215,46216],{"class":125,"line":35254},[123,46217,35266],{"class":2673},[123,46219,46220,46222,46224],{"class":125,"line":35263},[123,46221,35037],{"class":129},[123,46223,134],{"class":133},[123,46225,35042],{"class":129},[123,46227,46228],{"class":125,"line":35269},[123,46229,35281],{"class":2673},[123,46231,46232],{"class":125,"line":35278},[123,46233,35287],{"class":129},[123,46235,46236],{"class":125,"line":35284},[123,46237,38766],{"class":2673},[123,46239,46240,46242],{"class":125,"line":35290},[123,46241,35293],{"class":133},[123,46243,35296],{"class":129},[123,46245,46246],{"class":125,"line":35299},[123,46247,35302],{"class":2673},[123,46249,46250,46252,46254],{"class":125,"line":35305},[123,46251,38781],{"class":129},[123,46253,134],{"class":133},[123,46255,35077],{"class":129},[123,46257,46258],{"class":125,"line":35316},[123,46259,35319],{"class":2673},[123,46261,46262,46264,46266,46268,46270,46272,46274],{"class":125,"line":35322},[123,46263,38794],{"class":129},[123,46265,134],{"class":133},[123,46267,35094],{"class":129},[123,46269,35097],{"class":279},[123,46271,134],{"class":133},[123,46273,2825],{"class":164},[123,46275,288],{"class":129},[123,46277,46278],{"class":125,"line":35341},[123,46279,35344],{"class":2673},[123,46281,46282,46284,46286],{"class":125,"line":35347},[123,46283,38815],{"class":129},[123,46285,134],{"class":133},[123,46287,35120],{"class":129},[123,46289,46290],{"class":125,"line":35358},[123,46291,35361],{"class":2673},[123,46293,46294,46296,46298,46300,46302,46304,46306],{"class":125,"line":35364},[123,46295,38828],{"class":129},[123,46297,11909],{"class":133},[123,46299,38833],{"class":129},[123,46301,3060],{"class":133},[123,46303,35178],{"class":129},[123,46305,2799],{"class":164},[123,46307,288],{"class":129},[123,46309,46310,46312,46314,46316,46318],{"class":125,"line":35384},[123,46311,38846],{"class":129},[123,46313,11909],{"class":133},[123,46315,35199],{"class":129},[123,46317,5391],{"class":133},[123,46319,35204],{"class":129},[123,46321,46322],{"class":125,"line":35400},[123,46323,38859],{"class":2673},[123,46325,46326,46328,46330,46332,46334],{"class":125,"line":35406},[123,46327,38864],{"class":129},[123,46329,11909],{"class":133},[123,46331,35178],{"class":129},[123,46333,2799],{"class":164},[123,46335,288],{"class":129},[123,46337,46338],{"class":125,"line":35420},[123,46339,35423],{"class":2673},[123,46341,46342],{"class":125,"line":35426},[123,46343,35429],{"class":2673},[123,46345,46346,46348,46350],{"class":125,"line":35432},[123,46347,35435],{"class":129},[123,46349,3187],{"class":133},[123,46351,35440],{"class":129},[123,46353,46354],{"class":125,"line":35443},[123,46355,35446],{"class":2673},[123,46357,46358],{"class":125,"line":35449},[123,46359,35452],{"class":2673},[123,46361,46362,46364,46366],{"class":125,"line":35455},[123,46363,35458],{"class":129},[123,46365,3187],{"class":133},[123,46367,35440],{"class":129},[123,46369,46370],{"class":125,"line":35465},[123,46371,35468],{"class":2673},[123,46373,46374,46376,46378],{"class":125,"line":35471},[123,46375,35474],{"class":129},[123,46377,3187],{"class":133},[123,46379,35479],{"class":129},[123,46381,46382],{"class":125,"line":35482},[123,46383,35485],{"class":2673},[123,46385,46386,46388,46390],{"class":125,"line":35488},[123,46387,35491],{"class":129},[123,46389,3187],{"class":133},[123,46391,35479],{"class":129},[123,46393,46394],{"class":125,"line":35498},[123,46395,232],{"emptyLinePlaceholder":231},[123,46397,46398],{"class":125,"line":35503},[123,46399,35506],{"class":2673},[123,46401,46402,46404,46406,46408,46410,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440],{"class":125,"line":35509},[123,46403,34863],{"class":164},[123,46405,1315],{"class":129},[123,46407,6032],{"class":143},[123,46409,34871],{"class":164},[123,46411,35520],{"class":143},[123,46413,3495],{"class":164},[123,46415,35525],{"class":133},[123,46417,3545],{"class":164},[123,46419,35530],{"class":143},[123,46421,3495],{"class":164},[123,46423,35525],{"class":133},[123,46425,3545],{"class":164},[123,46427,6032],{"class":143},[123,46429,35541],{"class":129},[123,46431,3135],{"class":133},[123,46433,2825],{"class":164},[123,46435,35548],{"class":129},[123,46437,3135],{"class":133},[123,46439,2825],{"class":164},[123,46441,35555],{"class":129},[123,46443,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482],{"class":125,"line":35558},[123,46445,34863],{"class":164},[123,46447,1315],{"class":129},[123,46449,6032],{"class":143},[123,46451,34871],{"class":164},[123,46453,35569],{"class":143},[123,46455,3495],{"class":164},[123,46457,35525],{"class":133},[123,46459,3545],{"class":164},[123,46461,35578],{"class":143},[123,46463,3495],{"class":164},[123,46465,35525],{"class":133},[123,46467,3545],{"class":164},[123,46469,6032],{"class":143},[123,46471,35589],{"class":129},[123,46473,3135],{"class":133},[123,46475,2825],{"class":164},[123,46477,35596],{"class":129},[123,46479,3135],{"class":133},[123,46481,2825],{"class":164},[123,46483,35555],{"class":129},[123,46485,46486],{"class":125,"line":35605},[123,46487,232],{"emptyLinePlaceholder":231},[123,46489,46490],{"class":125,"line":35610},[123,46491,35613],{"class":2673},[123,46493,46494,46496,46498,46500,46502,46504,46506],{"class":125,"line":35616},[123,46495,4940],{"class":133},[123,46497,35621],{"class":129},[123,46499,3135],{"class":133},[123,46501,2825],{"class":164},[123,46503,3539],{"class":129},[123,46505,3559],{"class":133},[123,46507,35632],{"class":129},[123,46509,46510],{"class":125,"line":35635},[123,46511,35638],{"class":2673},[123,46513,46514,46516,46518,46520,46522,46524,46526],{"class":125,"line":35641},[123,46515,35644],{"class":129},[123,46517,2656],{"class":164},[123,46519,134],{"class":133},[123,46521,35651],{"class":129},[123,46523,3135],{"class":133},[123,46525,2825],{"class":164},[123,46527,998],{"class":129},[123,46529,46530],{"class":125,"line":35660},[123,46531,35663],{"class":2673},[123,46533,46534],{"class":125,"line":35666},[123,46535,35669],{"class":2673},[123,46537,46538,46540,46542],{"class":125,"line":35672},[123,46539,35675],{"class":129},[123,46541,134],{"class":133},[123,46543,34726],{"class":129},[123,46545,46546],{"class":125,"line":35682},[123,46547,232],{"emptyLinePlaceholder":231},[123,46549,46550],{"class":125,"line":35687},[123,46551,35690],{"class":2673},[123,46553,46554,46556,46558,46560,46562],{"class":125,"line":35693},[123,46555,35696],{"class":129},[123,46557,134],{"class":133},[123,46559,35701],{"class":129},[123,46561,3135],{"class":133},[123,46563,35706],{"class":129},[123,46565,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594,46596,46598,46600],{"class":125,"line":35709},[123,46567,34863],{"class":164},[123,46569,1315],{"class":129},[123,46571,35716],{"class":143},[123,46573,3495],{"class":164},[123,46575,35721],{"class":133},[123,46577,3545],{"class":164},[123,46579,3147],{"class":143},[123,46581,3495],{"class":164},[123,46583,35721],{"class":133},[123,46585,3545],{"class":164},[123,46587,35734],{"class":143},[123,46589,35737],{"class":129},[123,46591,35740],{"class":133},[123,46593,3506],{"class":164},[123,46595,35745],{"class":129},[123,46597,2935],{"class":133},[123,46599,3506],{"class":164},[123,46601,32913],{"class":129},[123,46603,46604],{"class":125,"line":35754},[123,46605,39143],{"class":2673},[123,46607,46608],{"class":125,"line":35760},[123,46609,39148],{"class":2673},[123,46611,46612,46614,46616],{"class":125,"line":35766},[123,46613,39153],{"class":129},[123,46615,35778],{"class":143},[123,46617,288],{"class":129},[123,46619,46620],{"class":125,"line":35772},[123,46621,35798],{"class":2673},[123,46623,46624,46626,46628,46630,46632,46634],{"class":125,"line":35783},[123,46625,35804],{"class":129},[123,46627,134],{"class":133},[123,46629,35809],{"class":129},[123,46631,35812],{"class":279},[123,46633,134],{"class":133},[123,46635,186],{"class":129},[123,46637,46638,46640,46642,46644],{"class":125,"line":35789},[123,46639,35822],{"class":143},[123,46641,3460],{"class":129},[123,46643,35827],{"class":164},[123,46645,35830],{"class":129},[123,46647,46648,46650],{"class":125,"line":35795},[123,46649,35836],{"class":143},[123,46651,35839],{"class":129},[123,46653,46654,46656],{"class":125,"line":35801},[123,46655,35845],{"class":143},[123,46657,35848],{"class":129},[123,46659,46660,46662],{"class":125,"line":35819},[123,46661,35854],{"class":143},[123,46663,35857],{"class":129},[123,46665,46666,46668],{"class":125,"line":35833},[123,46667,35863],{"class":143},[123,46669,35866],{"class":129},[123,46671,46672],{"class":125,"line":35842},[123,46673,35872],{"class":129},[123,46675,46676],{"class":125,"line":35851},[123,46677,35878],{"class":2673},[123,46679,46680,46682],{"class":125,"line":35860},[123,46681,6529],{"class":133},[123,46683,35886],{"class":129},[123,46685,46686],{"class":125,"line":35869},[123,46687,232],{"emptyLinePlaceholder":231},[123,46689,46690],{"class":125,"line":35875},[123,46691,35897],{"class":2673},[123,46693,46694,46696,46698],{"class":125,"line":35881},[123,46695,34359],{"class":133},[123,46697,35905],{"class":337},[123,46699,35908],{"class":129},[123,46701,46702],{"class":125,"line":35889},[123,46703,35914],{"class":2673},[123,46705,46706,46708,46710,46712,46714,46716,46718,46720],{"class":125,"line":35894},[123,46707,35920],{"class":129},[123,46709,34105],{"class":279},[123,46711,134],{"class":133},[123,46713,1315],{"class":129},[123,46715,2215],{"class":164},[123,46717,2985],{"class":129},[123,46719,2901],{"class":164},[123,46721,32913],{"class":129},[123,46723,46724],{"class":125,"line":35900},[123,46725,35940],{"class":2673},[123,46727,46728],{"class":125,"line":35911},[123,46729,35946],{"class":2673},[123,46731,46732],{"class":125,"line":35917},[123,46733,35952],{"class":2673},[123,46735,46736,46738,46740,46742,46744,46746,46748],{"class":125,"line":35937},[123,46737,34139],{"class":129},[123,46739,2825],{"class":164},[123,46741,2985],{"class":129},[123,46743,2692],{"class":164},[123,46745,2985],{"class":129},[123,46747,2825],{"class":164},[123,46749,288],{"class":129},[123,46751,46752],{"class":125,"line":35943},[123,46753,35975],{"class":2673},[123,46755,46756],{"class":125,"line":35949},[123,46757,35981],{"class":2673},[123,46759,46760],{"class":125,"line":35955},[123,46761,35987],{"class":2673},[123,46763,46764],{"class":125,"line":35972},[123,46765,35993],{"class":2673},[123,46767,46768],{"class":125,"line":35978},[123,46769,35999],{"class":2673},[123,46771,46772,46774,46776,46778,46780,46782,46784,46786,46788],{"class":125,"line":35984},[123,46773,36005],{"class":129},[123,46775,36008],{"class":143},[123,46777,36011],{"class":129},[123,46779,36014],{"class":143},[123,46781,2985],{"class":129},[123,46783,36019],{"class":279},[123,46785,134],{"class":133},[123,46787,36024],{"class":143},[123,46789,288],{"class":129},[123,46791,46792,46794,46796,46798,46800,46802,46804,46806,46808],{"class":125,"line":35990},[123,46793,36005],{"class":129},[123,46795,36008],{"class":143},[123,46797,36036],{"class":129},[123,46799,36039],{"class":143},[123,46801,2985],{"class":129},[123,46803,36019],{"class":279},[123,46805,134],{"class":133},[123,46807,36048],{"class":143},[123,46809,288],{"class":129},[123,46811,46812],{"class":125,"line":35996},[123,46813,36056],{"class":2673},[123,46815,46816],{"class":125,"line":36002},[123,46817,36062],{"class":129},[123,46819,46820],{"class":125,"line":36029},[123,46821,36068],{"class":2673},[123,46823,46824,46826,46828],{"class":125,"line":36053},[123,46825,36074],{"class":129},[123,46827,36077],{"class":143},[123,46829,288],{"class":129},[123,46831,46832,46834,46836],{"class":125,"line":36059},[123,46833,36085],{"class":129},[123,46835,36088],{"class":143},[123,46837,288],{"class":129},[123,46839,46840],{"class":125,"line":36065},[123,46841,36096],{"class":2673},[123,46843,46844,46846,46848,46850,46852,46854,46856],{"class":125,"line":36071},[123,46845,34139],{"class":129},[123,46847,2825],{"class":164},[123,46849,2985],{"class":129},[123,46851,2692],{"class":164},[123,46853,2985],{"class":129},[123,46855,2692],{"class":164},[123,46857,288],{"class":129},[123,46859,46860,46862,46864,46866,46868,46870,46872,46874,46876],{"class":125,"line":36082},[123,46861,36005],{"class":129},[123,46863,36008],{"class":143},[123,46865,36123],{"class":129},[123,46867,36014],{"class":143},[123,46869,2985],{"class":129},[123,46871,36019],{"class":279},[123,46873,134],{"class":133},[123,46875,36134],{"class":143},[123,46877,288],{"class":129},[123,46879,46880,46882,46884,46886,46888,46890,46892,46894,46896],{"class":125,"line":36093},[123,46881,36005],{"class":129},[123,46883,36008],{"class":143},[123,46885,36146],{"class":129},[123,46887,36039],{"class":143},[123,46889,2985],{"class":129},[123,46891,36019],{"class":279},[123,46893,134],{"class":133},[123,46895,36157],{"class":143},[123,46897,288],{"class":129},[123,46899,46900],{"class":125,"line":36099},[123,46901,36165],{"class":2673},[123,46903,46904],{"class":125,"line":36116},[123,46905,36062],{"class":129},[123,46907,46908,46910,46912],{"class":125,"line":36139},[123,46909,36074],{"class":129},[123,46911,36008],{"class":143},[123,46913,288],{"class":129},[123,46915,46916,46918,46920],{"class":125,"line":36162},[123,46917,36085],{"class":129},[123,46919,36187],{"class":143},[123,46921,288],{"class":129},[123,46923,46924],{"class":125,"line":36168},[123,46925,36195],{"class":129},[123,46927,46928],{"class":125,"line":36173},[123,46929,232],{"emptyLinePlaceholder":231},[123,46931,46932],{"class":125,"line":36182},[123,46933,36206],{"class":2673},[123,46935,46936,46938,46940,46942,46944],{"class":125,"line":36192},[123,46937,3998],{"class":133},[123,46939,33635],{"class":164},[123,46941,5391],{"class":133},[123,46943,33640],{"class":143},[123,46945,1344],{"class":129},[123,46947,46948],{"class":125,"line":36198},[123,46949,36225],{"class":2673},[123,46951,46952,46955,46957],{"class":125,"line":36203},[123,46953,46954],{"class":129},"    GoogLeNet",[123,46956,134],{"class":133},[123,46958,46959],{"class":129},"GoogLeNet(Inception)\n",[123,46961,46962,46964,46966],{"class":125,"line":36209},[123,46963,36242],{"class":129},[123,46965,134],{"class":133},[123,46967,36247],{"class":129},[123,46969,46970,46972,46974,46977,46979,46981,46983],{"class":125,"line":36222},[123,46971,35804],{"class":129},[123,46973,134],{"class":133},[123,46975,46976],{"class":129},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[123,46978,36260],{"class":279},[123,46980,134],{"class":133},[123,46982,3550],{"class":164},[123,46984,288],{"class":129},[123,46986,46987],{"class":125,"line":36228},[123,46988,36272],{"class":129},[26,46990,46991],{"start":156},[29,46992,42982],{},[113,46994,46996],{"className":115,"code":46995,"language":117,"meta":118,"style":118},"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",[120,46997,46998,47004,47014,47024,47028,47038,47049,47053,47057,47061,47069,47085,47095,47111,47121,47135,47139,47149,47159,47169,47175,47179,47183,47191,47195,47211,47219,47223,47227,47235,47243,47247,47251,47255,47259,47265,47269,47279,47287,47295,47299,47303,47307,47315,47319,47335,47339,47343,47347,47359,47363,47375,47379,47383,47395,47399,47409,47413,47417,47429,47433,47441,47445,47449,47457,47461,47469,47473,47477,47481,47485,47489,47505,47513,47517,47521,47569,47575,47579,47589,47597,47605,47609,47613,47617,47621,47629,47633,47649,47653,47661,47669],{"__ignoreMap":118},[123,46999,47000,47002],{"class":125,"line":126},[123,47001,223],{"class":133},[123,47003,32812],{"class":129},[123,47005,47006,47008,47010,47012],{"class":125,"line":140},[123,47007,223],{"class":133},[123,47009,33829],{"class":129},[123,47011,547],{"class":133},[123,47013,33834],{"class":129},[123,47015,47016,47018,47020,47022],{"class":125,"line":156},[123,47017,391],{"class":133},[123,47019,33812],{"class":129},[123,47021,223],{"class":133},[123,47023,33817],{"class":129},[123,47025,47026],{"class":125,"line":168},[123,47027,36333],{"class":2673},[123,47029,47030,47032,47034,47036],{"class":125,"line":268},[123,47031,391],{"class":133},[123,47033,33783],{"class":129},[123,47035,223],{"class":133},[123,47037,33788],{"class":129},[123,47039,47040,47042,47044,47046],{"class":125,"line":291},[123,47041,391],{"class":133},[123,47043,34326],{"class":129},[123,47045,223],{"class":133},[123,47047,47048],{"class":129}," GoogLeNet,Inception\n",[123,47050,47051],{"class":125,"line":300},[123,47052,232],{"emptyLinePlaceholder":231},[123,47054,47055],{"class":125,"line":305},[123,47056,232],{"emptyLinePlaceholder":231},[123,47058,47059],{"class":125,"line":316},[123,47060,36362],{"class":2673},[123,47062,47063,47065,47067],{"class":125,"line":673},[123,47064,34359],{"class":133},[123,47066,36369],{"class":337},[123,47068,34365],{"class":129},[123,47070,47071,47073,47075,47077,47079,47081,47083],{"class":125,"line":692},[123,47072,36376],{"class":129},[123,47074,134],{"class":133},[123,47076,33869],{"class":129},[123,47078,33872],{"class":279},[123,47080,134],{"class":133},[123,47082,33877],{"class":143},[123,47084,153],{"class":129},[123,47086,47087,47089,47091,47093],{"class":125,"line":713},[123,47088,36393],{"class":279},[123,47090,134],{"class":133},[123,47092,285],{"class":164},[123,47094,153],{"class":129},[123,47096,47097,47099,47101,47103,47105,47107,47109],{"class":125,"line":718},[123,47098,36404],{"class":279},[123,47100,134],{"class":133},[123,47102,33905],{"class":129},[123,47104,33908],{"class":279},[123,47106,134],{"class":133},[123,47108,37859],{"class":164},[123,47110,33916],{"class":129},[123,47112,47113,47115,47117,47119],{"class":125,"line":1138},[123,47114,36421],{"class":279},[123,47116,134],{"class":133},[123,47118,870],{"class":164},[123,47120,288],{"class":129},[123,47122,47123,47125,47127,47129,47131,47133],{"class":125,"line":1429},[123,47124,36432],{"class":129},[123,47126,134],{"class":133},[123,47128,33946],{"class":129},[123,47130,33949],{"class":279},[123,47132,134],{"class":133},[123,47134,36443],{"class":129},[123,47136,47137],{"class":125,"line":1439},[123,47138,36448],{"class":2673},[123,47140,47141,47143,47145,47147],{"class":125,"line":1444},[123,47142,36453],{"class":279},[123,47144,134],{"class":133},[123,47146,2825],{"class":164},[123,47148,153],{"class":129},[123,47150,47151,47153,47155,47157],{"class":125,"line":1453},[123,47152,36464],{"class":279},[123,47154,134],{"class":133},[123,47156,870],{"class":164},[123,47158,153],{"class":129},[123,47160,47161,47163,47165,47167],{"class":125,"line":1458},[123,47162,36475],{"class":279},[123,47164,134],{"class":133},[123,47166,2799],{"class":164},[123,47168,288],{"class":129},[123,47170,47171,47173],{"class":125,"line":1476},[123,47172,6529],{"class":133},[123,47174,36488],{"class":129},[123,47176,47177],{"class":125,"line":1494},[123,47178,232],{"emptyLinePlaceholder":231},[123,47180,47181],{"class":125,"line":1499},[123,47182,36497],{"class":2673},[123,47184,47185,47187,47189],{"class":125,"line":1517},[123,47186,34359],{"class":133},[123,47188,36504],{"class":337},[123,47190,36507],{"class":129},[123,47192,47193],{"class":125,"line":1534},[123,47194,36512],{"class":2673},[123,47196,47197,47199,47201,47203,47205,47207,47209],{"class":125,"line":1539},[123,47198,33652],{"class":129},[123,47200,134],{"class":133},[123,47202,33659],{"class":143},[123,47204,4158],{"class":133},[123,47206,33664],{"class":129},[123,47208,4155],{"class":133},[123,47210,36529],{"class":143},[123,47212,47213,47215,47217],{"class":125,"line":2080},[123,47214,33704],{"class":129},[123,47216,134],{"class":133},[123,47218,34701],{"class":129},[123,47220,47221],{"class":125,"line":2097},[123,47222,232],{"emptyLinePlaceholder":231},[123,47224,47225],{"class":125,"line":2114},[123,47226,36546],{"class":2673},[123,47228,47229,47231,47233],{"class":125,"line":2125},[123,47230,36551],{"class":129},[123,47232,134],{"class":133},[123,47234,34754],{"class":164},[123,47236,47237,47239,47241],{"class":125,"line":2130},[123,47238,36560],{"class":129},[123,47240,134],{"class":133},[123,47242,5526],{"class":164},[123,47244,47245],{"class":125,"line":5033},[123,47246,232],{"emptyLinePlaceholder":231},[123,47248,47249],{"class":125,"line":5041},[123,47250,36573],{"class":2673},[123,47252,47253],{"class":125,"line":5046},[123,47254,36578],{"class":2673},[123,47256,47257],{"class":125,"line":5052},[123,47258,36583],{"class":2673},[123,47260,47261,47263],{"class":125,"line":5058},[123,47262,36588],{"class":133},[123,47264,35296],{"class":129},[123,47266,47267],{"class":125,"line":5063},[123,47268,36595],{"class":2673},[123,47270,47271,47273,47275,47277],{"class":125,"line":10380},[123,47272,5843],{"class":133},[123,47274,36602],{"class":129},[123,47276,1405],{"class":133},[123,47278,36607],{"class":129},[123,47280,47281,47283,47285],{"class":125,"line":10404},[123,47282,36612],{"class":129},[123,47284,134],{"class":133},[123,47286,36617],{"class":129},[123,47288,47289,47291,47293],{"class":125,"line":10409},[123,47290,36622],{"class":129},[123,47292,134],{"class":133},[123,47294,36627],{"class":129},[123,47296,47297],{"class":125,"line":10415},[123,47298,36632],{"class":2673},[123,47300,47301],{"class":125,"line":10442},[123,47302,35287],{"class":129},[123,47304,47305],{"class":125,"line":10447},[123,47306,36641],{"class":2673},[123,47308,47309,47311,47313],{"class":125,"line":10453},[123,47310,35072],{"class":129},[123,47312,134],{"class":133},[123,47314,36650],{"class":129},[123,47316,47317],{"class":125,"line":10465},[123,47318,36655],{"class":2673},[123,47320,47321,47323,47325,47327,47329,47331,47333],{"class":125,"line":10477},[123,47322,35089],{"class":129},[123,47324,134],{"class":133},[123,47326,35094],{"class":129},[123,47328,35097],{"class":279},[123,47330,134],{"class":133},[123,47332,2825],{"class":164},[123,47334,288],{"class":129},[123,47336,47337],{"class":125,"line":10489},[123,47338,36676],{"class":2673},[123,47340,47341],{"class":125,"line":12148},[123,47342,36681],{"class":2673},[123,47344,47345],{"class":125,"line":12173},[123,47346,36686],{"class":2673},[123,47348,47349,47351,47353,47355,47357],{"class":125,"line":12196},[123,47350,36691],{"class":129},[123,47352,11909],{"class":133},[123,47354,35199],{"class":129},[123,47356,5391],{"class":133},[123,47358,36700],{"class":129},[123,47360,47361],{"class":125,"line":12220},[123,47362,36705],{"class":2673},[123,47364,47365,47367,47369,47371,47373],{"class":125,"line":12225},[123,47366,36710],{"class":129},[123,47368,11909],{"class":133},[123,47370,36715],{"class":129},[123,47372,2799],{"class":164},[123,47374,288],{"class":129},[123,47376,47377],{"class":125,"line":12230},[123,47378,232],{"emptyLinePlaceholder":231},[123,47380,47381],{"class":125,"line":12235},[123,47382,36728],{"class":2673},[123,47384,47385,47387,47389,47391,47393],{"class":125,"line":12244},[123,47386,36733],{"class":129},[123,47388,134],{"class":133},[123,47390,36738],{"class":129},[123,47392,3187],{"class":133},[123,47394,36743],{"class":129},[123,47396,47397],{"class":125,"line":12249},[123,47398,36748],{"class":2673},[123,47400,47401,47403,47405,47407],{"class":125,"line":12255},[123,47402,34863],{"class":164},[123,47404,1315],{"class":129},[123,47406,36757],{"class":143},[123,47408,36760],{"class":129},[123,47410,47411],{"class":125,"line":12276},[123,47412,232],{"emptyLinePlaceholder":231},[123,47414,47415],{"class":125,"line":12282},[123,47416,36769],{"class":2673},[123,47418,47419,47421,47423,47425,47427],{"class":125,"line":12296},[123,47420,3998],{"class":133},[123,47422,33635],{"class":164},[123,47424,5391],{"class":133},[123,47426,33640],{"class":143},[123,47428,1344],{"class":129},[123,47430,47431],{"class":125,"line":12302},[123,47432,36786],{"class":2673},[123,47434,47435,47437,47439],{"class":125,"line":12329},[123,47436,33704],{"class":129},[123,47438,134],{"class":133},[123,47440,46959],{"class":129},[123,47442,47443],{"class":125,"line":12338},[123,47444,36799],{"class":2673},[123,47446,47447],{"class":125,"line":12344},[123,47448,36804],{"class":2673},[123,47450,47451,47453,47455],{"class":125,"line":12352},[123,47452,36809],{"class":129},[123,47454,36812],{"class":143},[123,47456,32913],{"class":129},[123,47458,47459],{"class":125,"line":12357},[123,47460,36819],{"class":2673},[123,47462,47463,47465,47467],{"class":125,"line":19032},[123,47464,36432],{"class":129},[123,47466,134],{"class":133},[123,47468,36828],{"class":129},[123,47470,47471],{"class":125,"line":19038},[123,47472,36833],{"class":2673},[123,47474,47475],{"class":125,"line":19061},[123,47476,36838],{"class":129},[123,47478,47479],{"class":125,"line":19067},[123,47480,232],{"emptyLinePlaceholder":231},[123,47482,47483],{"class":125,"line":19090},[123,47484,36847],{"class":2673},[123,47486,47487],{"class":125,"line":19104},[123,47488,36852],{"class":2673},[123,47490,47491,47493,47495,47497,47499,47501,47503],{"class":125,"line":19124},[123,47492,33652],{"class":129},[123,47494,134],{"class":133},[123,47496,33659],{"class":143},[123,47498,4158],{"class":133},[123,47500,33664],{"class":129},[123,47502,4155],{"class":133},[123,47504,36529],{"class":143},[123,47506,47507,47509,47511],{"class":125,"line":19130},[123,47508,33704],{"class":129},[123,47510,134],{"class":133},[123,47512,34701],{"class":129},[123,47514,47515],{"class":125,"line":19141},[123,47516,36881],{"class":2673},[123,47518,47519],{"class":125,"line":19164},[123,47520,36886],{"class":2673},[123,47522,47523,47525,47527,47529,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551,47553,47555,47557,47559,47561,47563,47565,47567],{"class":125,"line":19186},[123,47524,36891],{"class":129},[123,47526,134],{"class":133},[123,47528,839],{"class":129},[123,47530,36898],{"class":143},[123,47532,2985],{"class":129},[123,47534,36903],{"class":143},[123,47536,2985],{"class":129},[123,47538,36908],{"class":143},[123,47540,2985],{"class":129},[123,47542,36913],{"class":143},[123,47544,2985],{"class":129},[123,47546,36918],{"class":143},[123,47548,2985],{"class":129},[123,47550,36923],{"class":143},[123,47552,2985],{"class":129},[123,47554,36928],{"class":143},[123,47556,2985],{"class":129},[123,47558,36933],{"class":143},[123,47560,2985],{"class":129},[123,47562,36938],{"class":143},[123,47564,2985],{"class":129},[123,47566,36943],{"class":143},[123,47568,998],{"class":129},[123,47570,47571,47573],{"class":125,"line":19191},[123,47572,36588],{"class":133},[123,47574,35296],{"class":129},[123,47576,47577],{"class":125,"line":19197},[123,47578,36956],{"class":2673},[123,47580,47581,47583,47585,47587],{"class":125,"line":19211},[123,47582,5843],{"class":133},[123,47584,36963],{"class":129},[123,47586,1405],{"class":133},[123,47588,36607],{"class":129},[123,47590,47591,47593,47595],{"class":125,"line":19224},[123,47592,35022],{"class":129},[123,47594,134],{"class":133},[123,47596,35027],{"class":129},[123,47598,47599,47601,47603],{"class":125,"line":19229},[123,47600,35037],{"class":129},[123,47602,134],{"class":133},[123,47604,35042],{"class":129},[123,47606,47607],{"class":125,"line":19243},[123,47608,232],{"emptyLinePlaceholder":231},[123,47610,47611],{"class":125,"line":19248},[123,47612,36992],{"class":2673},[123,47614,47615],{"class":125,"line":19254},[123,47616,35287],{"class":129},[123,47618,47619],{"class":125,"line":19259},[123,47620,37001],{"class":2673},[123,47622,47623,47625,47627],{"class":125,"line":19273},[123,47624,35072],{"class":129},[123,47626,134],{"class":133},[123,47628,35077],{"class":129},[123,47630,47631],{"class":125,"line":19278},[123,47632,37014],{"class":2673},[123,47634,47635,47637,47639,47641,47643,47645,47647],{"class":125,"line":19283},[123,47636,35089],{"class":129},[123,47638,134],{"class":133},[123,47640,35094],{"class":129},[123,47642,35097],{"class":279},[123,47644,134],{"class":133},[123,47646,2825],{"class":164},[123,47648,288],{"class":129},[123,47650,47651],{"class":125,"line":19297},[123,47652,37035],{"class":2673},[123,47654,47655,47657,47659],{"class":125,"line":19309},[123,47656,37040],{"class":129},[123,47658,134],{"class":133},[123,47660,37045],{"class":129},[123,47662,47663,47665,47667],{"class":125,"line":19314},[123,47664,37050],{"class":129},[123,47666,134],{"class":133},[123,47668,37055],{"class":129},[123,47670,47671,47673,47675,47677,47679,47681,47683,47685],{"class":125,"line":19327},[123,47672,37060],{"class":164},[123,47674,1315],{"class":129},[123,47676,37065],{"class":143},[123,47678,37068],{"class":129},[123,47680,37071],{"class":143},[123,47682,2985],{"class":129},[123,47684,37076],{"class":143},[123,47686,37079],{"class":129},[2587,47688,47690],{"id":47689},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47692,47693],{},"猫狗分类任务",[19,47695,47696],{},"划分数据集和验证集",[113,47698,47700],{"className":115,"code":47699,"language":117,"meta":118,"style":118},"# 创建脚本，用于划分数据集和验证集\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",[120,47701,47702,47707,47714,47719,47730,47737,47741,47751,47764,47773,47777,47782,47792,47812,47816,47821,47831,47842,47855,47859,47864,47873,47883,47894,47898,47903,47913,47917,47922,47927,47932,47937,47942,47946,47956,47983,47996,48008,48035,48040,48045,48059,48064,48076,48091,48106,48114,48118,48123,48129,48141,48154,48159,48164,48169,48219,48225,48229],{"__ignoreMap":118},[123,47703,47704],{"class":125,"line":126},[123,47705,47706],{"class":2673},"# 创建脚本，用于划分数据集和验证集\n",[123,47708,47709,47711],{"class":125,"line":140},[123,47710,223],{"class":133},[123,47712,47713],{"class":129}," os\n",[123,47715,47716],{"class":125,"line":156},[123,47717,47718],{"class":2673},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[123,47720,47721,47723,47726,47728],{"class":125,"line":168},[123,47722,391],{"class":133},[123,47724,47725],{"class":129}," shutil ",[123,47727,223],{"class":133},[123,47729,34234],{"class":129},[123,47731,47732,47734],{"class":125,"line":268},[123,47733,223],{"class":133},[123,47735,47736],{"class":129}," random\n",[123,47738,47739],{"class":125,"line":291},[123,47740,232],{"emptyLinePlaceholder":231},[123,47742,47743,47745,47748],{"class":125,"line":300},[123,47744,34359],{"class":133},[123,47746,47747],{"class":337}," mkfile",[123,47749,47750],{"class":129},"(file):\n",[123,47752,47753,47755,47757,47760,47762],{"class":125,"line":305},[123,47754,1711],{"class":133},[123,47756,1714],{"class":133},[123,47758,47759],{"class":129}," os.path.exists(",[123,47761,1357],{"class":279},[123,47763,33201],{"class":129},[123,47765,47766,47769,47771],{"class":125,"line":316},[123,47767,47768],{"class":129},"        os.makedirs(",[123,47770,1357],{"class":279},[123,47772,288],{"class":129},[123,47774,47775],{"class":125,"line":673},[123,47776,232],{"emptyLinePlaceholder":231},[123,47778,47779],{"class":125,"line":692},[123,47780,47781],{"class":2673},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[123,47783,47784,47787,47789],{"class":125,"line":713},[123,47785,47786],{"class":129},"file_path",[123,47788,134],{"class":133},[123,47790,47791],{"class":143},"'data_cat_dog'\n",[123,47793,47794,47797,47799,47802,47804,47807,47809],{"class":125,"line":718},[123,47795,47796],{"class":129},"flower_class",[123,47798,134],{"class":133},[123,47800,47801],{"class":129},"[cla ",[123,47803,1399],{"class":133},[123,47805,47806],{"class":129}," cla ",[123,47808,1405],{"class":133},[123,47810,47811],{"class":129}," os.listdir(file_path)]\n",[123,47813,47814],{"class":125,"line":1138},[123,47815,232],{"emptyLinePlaceholder":231},[123,47817,47818],{"class":125,"line":1429},[123,47819,47820],{"class":2673},"# 创建训练集train文件夹\n",[123,47822,47823,47826,47829],{"class":125,"line":1439},[123,47824,47825],{"class":129},"mkfile(",[123,47827,47828],{"class":143},"'data\u002Ftrain'",[123,47830,288],{"class":129},[123,47832,47833,47835,47837,47839],{"class":125,"line":1444},[123,47834,1399],{"class":133},[123,47836,47806],{"class":129},[123,47838,1405],{"class":133},[123,47840,47841],{"class":129}," flower_class:\n",[123,47843,47844,47847,47850,47852],{"class":125,"line":1453},[123,47845,47846],{"class":129},"    mkfile(",[123,47848,47849],{"class":143},"'data\u002Ftrain\u002F'",[123,47851,3086],{"class":133},[123,47853,47854],{"class":129},"cla)\n",[123,47856,47857],{"class":125,"line":1458},[123,47858,232],{"emptyLinePlaceholder":231},[123,47860,47861],{"class":125,"line":1476},[123,47862,47863],{"class":2673},"# 创建验证集val文件夹\n",[123,47865,47866,47868,47871],{"class":125,"line":1494},[123,47867,47825],{"class":129},[123,47869,47870],{"class":143},"'data\u002Ftest'",[123,47872,288],{"class":129},[123,47874,47875,47877,47879,47881],{"class":125,"line":1499},[123,47876,1399],{"class":133},[123,47878,47806],{"class":129},[123,47880,1405],{"class":133},[123,47882,47841],{"class":129},[123,47884,47885,47887,47890,47892],{"class":125,"line":1517},[123,47886,47846],{"class":129},[123,47888,47889],{"class":143},"'data\u002Ftest\u002F'",[123,47891,3086],{"class":133},[123,47893,47854],{"class":129},[123,47895,47896],{"class":125,"line":1534},[123,47897,232],{"emptyLinePlaceholder":231},[123,47899,47900],{"class":125,"line":1539},[123,47901,47902],{"class":2673},"# 划分比例，训练集：测试集=9：1\n",[123,47904,47905,47908,47910],{"class":125,"line":2080},[123,47906,47907],{"class":129},"split_rate",[123,47909,134],{"class":133},[123,47911,47912],{"class":164},"0.1\n",[123,47914,47915],{"class":125,"line":2097},[123,47916,232],{"emptyLinePlaceholder":231},[123,47918,47919],{"class":125,"line":2114},[123,47920,47921],{"class":2673},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[123,47923,47924],{"class":125,"line":2125},[123,47925,47926],{"class":2673},"# cla_path：当前类别的原始图片路径\n",[123,47928,47929],{"class":125,"line":2130},[123,47930,47931],{"class":2673},"# images：当前类别下所有图片的文件名列表\n",[123,47933,47934],{"class":125,"line":5033},[123,47935,47936],{"class":2673},"# num：该类别图片总数\n",[123,47938,47939],{"class":125,"line":5041},[123,47940,47941],{"class":2673},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[123,47943,47944],{"class":125,"line":5046},[123,47945,232],{"emptyLinePlaceholder":231},[123,47947,47948,47950,47952,47954],{"class":125,"line":5052},[123,47949,1399],{"class":133},[123,47951,47806],{"class":129},[123,47953,1405],{"class":133},[123,47955,47841],{"class":129},[123,47957,47958,47961,47963,47966,47968,47971,47974,47976,47978,47980],{"class":125,"line":5058},[123,47959,47960],{"class":129},"    cla_path ",[123,47962,134],{"class":133},[123,47964,47965],{"class":129}," file_path ",[123,47967,3086],{"class":133},[123,47969,47970],{"class":143}," '\u002F'",[123,47972,47973],{"class":133}," +",[123,47975,47806],{"class":129},[123,47977,3086],{"class":133},[123,47979,47970],{"class":143},[123,47981,47982],{"class":2673},"  # 某一类别的子目录\n",[123,47984,47985,47988,47990,47993],{"class":125,"line":5063},[123,47986,47987],{"class":129},"    images ",[123,47989,134],{"class":133},[123,47991,47992],{"class":129}," os.listdir(cla_path)  ",[123,47994,47995],{"class":2673},"# iamges 列表存储了该目录下所有图像的名称\n",[123,47997,47998,48001,48003,48005],{"class":125,"line":10380},[123,47999,48000],{"class":129},"    num ",[123,48002,134],{"class":133},[123,48004,9764],{"class":164},[123,48006,48007],{"class":129},"(images)\n",[123,48009,48010,48013,48015,48018,48020,48022,48024,48027,48029,48032],{"class":125,"line":10404},[123,48011,48012],{"class":129},"    eval_index ",[123,48014,134],{"class":133},[123,48016,48017],{"class":129}," random.sample(images, ",[123,48019,3098],{"class":279},[123,48021,134],{"class":133},[123,48023,1742],{"class":164},[123,48025,48026],{"class":129},"(num ",[123,48028,3060],{"class":133},[123,48030,48031],{"class":129}," split_rate))  ",[123,48033,48034],{"class":2673},"# 从images列表中随机抽取 k 个图像名称\n",[123,48036,48037],{"class":125,"line":10409},[123,48038,48039],{"class":2673},"    # 遍历该类别下的所有图片\n",[123,48041,48042],{"class":125,"line":10415},[123,48043,48044],{"class":2673},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[123,48046,48047,48049,48052,48054,48056],{"class":125,"line":10442},[123,48048,5641],{"class":133},[123,48050,48051],{"class":129}," index, image ",[123,48053,1405],{"class":133},[123,48055,34018],{"class":164},[123,48057,48058],{"class":129},"(images):\n",[123,48060,48061],{"class":125,"line":10447},[123,48062,48063],{"class":2673},"        # eval_index 中保存验证集val的图像名称\n",[123,48065,48066,48068,48071,48073],{"class":125,"line":10453},[123,48067,4940],{"class":133},[123,48069,48070],{"class":129}," image ",[123,48072,1405],{"class":133},[123,48074,48075],{"class":129}," eval_index:\n",[123,48077,48078,48081,48083,48086,48088],{"class":125,"line":10465},[123,48079,48080],{"class":129},"            image_path ",[123,48082,134],{"class":133},[123,48084,48085],{"class":129}," cla_path ",[123,48087,3086],{"class":133},[123,48089,48090],{"class":129}," image\n",[123,48092,48093,48096,48098,48101,48103],{"class":125,"line":10477},[123,48094,48095],{"class":129},"            new_path ",[123,48097,134],{"class":133},[123,48099,48100],{"class":143}," 'data\u002Ftest\u002F'",[123,48102,47973],{"class":133},[123,48104,48105],{"class":129}," cla\n",[123,48107,48108,48111],{"class":125,"line":10489},[123,48109,48110],{"class":129},"            copy(image_path, new_path)  ",[123,48112,48113],{"class":2673},"# 将选中的图像复制到新路径\n",[123,48115,48116],{"class":125,"line":12148},[123,48117,232],{"emptyLinePlaceholder":231},[123,48119,48120],{"class":125,"line":12173},[123,48121,48122],{"class":2673},"        # 其余的图像保存在训练集train中\n",[123,48124,48125,48127],{"class":125,"line":12196},[123,48126,4977],{"class":133},[123,48128,1344],{"class":129},[123,48130,48131,48133,48135,48137,48139],{"class":125,"line":12220},[123,48132,48080],{"class":129},[123,48134,134],{"class":133},[123,48136,48085],{"class":129},[123,48138,3086],{"class":133},[123,48140,48090],{"class":129},[123,48142,48143,48145,48147,48150,48152],{"class":125,"line":12225},[123,48144,48095],{"class":129},[123,48146,134],{"class":133},[123,48148,48149],{"class":143}," 'data\u002Ftrain\u002F'",[123,48151,47973],{"class":133},[123,48153,48105],{"class":129},[123,48155,48156],{"class":125,"line":12230},[123,48157,48158],{"class":129},"            copy(image_path, new_path)\n",[123,48160,48161],{"class":125,"line":12235},[123,48162,48163],{"class":2673},"            # 打印进度条信息\n",[123,48165,48166],{"class":125,"line":12244},[123,48167,48168],{"class":2673},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[123,48170,48171,48173,48175,48177,48180,48182,48184,48187,48189,48191,48193,48196,48199,48201,48203,48206,48209,48211,48213,48216],{"class":125,"line":12249},[123,48172,34863],{"class":164},[123,48174,1315],{"class":129},[123,48176,2859],{"class":143},[123,48178,48179],{"class":164},"\\r",[123,48181,839],{"class":143},[123,48183,34871],{"class":164},[123,48185,48186],{"class":143},"] processing [",[123,48188,34871],{"class":164},[123,48190,3187],{"class":143},[123,48192,34871],{"class":164},[123,48194,48195],{"class":143},"]\"",[123,48197,48198],{"class":129},".format(cla, index ",[123,48200,3086],{"class":133},[123,48202,27540],{"class":164},[123,48204,48205],{"class":129},", num), ",[123,48207,48208],{"class":279},"end",[123,48210,134],{"class":133},[123,48212,1629],{"class":143},[123,48214,48215],{"class":129},")  ",[123,48217,48218],{"class":2673},"# processing bar\n",[123,48220,48221,48223],{"class":125,"line":12255},[123,48222,33714],{"class":164},[123,48224,4420],{"class":129},[123,48226,48227],{"class":125,"line":12276},[123,48228,232],{"emptyLinePlaceholder":231},[123,48230,48231,48233,48235,48238],{"class":125,"line":12282},[123,48232,294],{"class":164},[123,48234,1315],{"class":129},[123,48236,48237],{"class":143},"\"processing done!\"",[123,48239,288],{"class":129},[19,48241,48242],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24425,48244,48246],{"id":48245},"_242模型代码","2.4.2.模型代码",[19,48248,48249],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[113,48251,48253],{"className":115,"code":48252,"language":117,"meta":118,"style":118},"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",[120,48254,48255,48261,48271,48281,48285,48301,48309,48323,48333,48337,48367,48371,48405,48451,48455,48489,48535,48539,48543,48577,48607,48611,48619,48633,48655,48677,48695,48699,48713,48717,48721,48737,48741,48749,48763,48773,48817,48821,48849,48853,48863,48891,48895,48931,48935,48963,48967,48977,49009,49041,49069,49073,49083,49115,49147,49179,49211,49243,49271,49275,49285,49317,49349,49361,49365,49377,49381,49385,49397,49405,49425,49429,49433,49437,49441,49445,49449,49463,49471,49479,49491,49505,49513,49517,49525,49535,49545,49555,49565,49575,49581,49585,49589,49601,49621,49629],{"__ignoreMap":118},[123,48256,48257,48259],{"class":125,"line":126},[123,48258,223],{"class":133},[123,48260,32812],{"class":129},[123,48262,48263,48265,48267,48269],{"class":125,"line":140},[123,48264,391],{"class":133},[123,48266,33155],{"class":129},[123,48268,223],{"class":133},[123,48270,33160],{"class":129},[123,48272,48273,48275,48277,48279],{"class":125,"line":156},[123,48274,391],{"class":133},[123,48276,33172],{"class":129},[123,48278,223],{"class":133},[123,48280,33177],{"class":129},[123,48282,48283],{"class":125,"line":168},[123,48284,232],{"emptyLinePlaceholder":231},[123,48286,48287,48289,48291,48293,48295,48297,48299],{"class":125,"line":268},[123,48288,17124],{"class":133},[123,48290,43901],{"class":337},[123,48292,1315],{"class":129},[123,48294,33193],{"class":337},[123,48296,3161],{"class":129},[123,48298,33198],{"class":337},[123,48300,33201],{"class":129},[123,48302,48303,48305,48307],{"class":125,"line":291},[123,48304,33216],{"class":133},[123,48306,33219],{"class":164},[123,48308,43920],{"class":129},[123,48310,48311,48313,48315,48317,48319,48321],{"class":125,"line":300},[123,48312,33232],{"class":164},[123,48314,43927],{"class":129},[123,48316,33238],{"class":164},[123,48318,33241],{"class":129},[123,48320,33244],{"class":164},[123,48322,4420],{"class":129},[123,48324,48325,48327,48329,48331],{"class":125,"line":305},[123,48326,33260],{"class":164},[123,48328,37181],{"class":129},[123,48330,134],{"class":133},[123,48332,37186],{"class":129},[123,48334,48335],{"class":125,"line":316},[123,48336,43950],{"class":2673},[123,48338,48339,48341,48343,48345,48347,48349,48351,48353,48355,48357,48359,48361,48363,48365],{"class":125,"line":673},[123,48340,33260],{"class":164},[123,48342,43957],{"class":129},[123,48344,134],{"class":133},[123,48346,33268],{"class":129},[123,48348,33271],{"class":279},[123,48350,134],{"class":133},[123,48352,43968],{"class":129},[123,48354,33280],{"class":279},[123,48356,134],{"class":133},[123,48358,43975],{"class":129},[123,48360,33289],{"class":279},[123,48362,134],{"class":133},[123,48364,2825],{"class":164},[123,48366,288],{"class":129},[123,48368,48369],{"class":125,"line":692},[123,48370,43988],{"class":2673},[123,48372,48373,48375,48377,48379,48381,48383,48385,48387,48389,48391,48393,48395,48397,48399,48401,48403],{"class":125,"line":713},[123,48374,33260],{"class":164},[123,48376,43995],{"class":129},[123,48378,134],{"class":133},[123,48380,33268],{"class":129},[123,48382,33271],{"class":279},[123,48384,134],{"class":133},[123,48386,43968],{"class":129},[123,48388,33280],{"class":279},[123,48390,134],{"class":133},[123,48392,44012],{"class":129},[123,48394,2799],{"class":164},[123,48396,44017],{"class":129},[123,48398,33289],{"class":279},[123,48400,134],{"class":133},[123,48402,2825],{"class":164},[123,48404,288],{"class":129},[123,48406,48407,48409,48411,48413,48415,48417,48419,48421,48423,48425,48427,48429,48431,48433,48435,48437,48439,48441,48443,48445,48447,48449],{"class":125,"line":718},[123,48408,33260],{"class":164},[123,48410,44032],{"class":129},[123,48412,134],{"class":133},[123,48414,33268],{"class":129},[123,48416,33271],{"class":279},[123,48418,134],{"class":133},[123,48420,44012],{"class":129},[123,48422,2799],{"class":164},[123,48424,44017],{"class":129},[123,48426,33280],{"class":279},[123,48428,134],{"class":133},[123,48430,44012],{"class":129},[123,48432,2825],{"class":164},[123,48434,44017],{"class":129},[123,48436,33289],{"class":279},[123,48438,134],{"class":133},[123,48440,2686],{"class":164},[123,48442,2985],{"class":129},[123,48444,33298],{"class":279},[123,48446,134],{"class":133},[123,48448,2825],{"class":164},[123,48450,288],{"class":129},[123,48452,48453],{"class":125,"line":1138},[123,48454,44077],{"class":2673},[123,48456,48457,48459,48461,48463,48465,48467,48469,48471,48473,48475,48477,48479,48481,48483,48485,48487],{"class":125,"line":1429},[123,48458,33260],{"class":164},[123,48460,44084],{"class":129},[123,48462,134],{"class":133},[123,48464,33268],{"class":129},[123,48466,33271],{"class":279},[123,48468,134],{"class":133},[123,48470,43968],{"class":129},[123,48472,33280],{"class":279},[123,48474,134],{"class":133},[123,48476,44101],{"class":129},[123,48478,2799],{"class":164},[123,48480,44017],{"class":129},[123,48482,33289],{"class":279},[123,48484,134],{"class":133},[123,48486,2825],{"class":164},[123,48488,288],{"class":129},[123,48490,48491,48493,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533],{"class":125,"line":1439},[123,48492,33260],{"class":164},[123,48494,44120],{"class":129},[123,48496,134],{"class":133},[123,48498,33268],{"class":129},[123,48500,33271],{"class":279},[123,48502,134],{"class":133},[123,48504,44101],{"class":129},[123,48506,2799],{"class":164},[123,48508,44017],{"class":129},[123,48510,33280],{"class":279},[123,48512,134],{"class":133},[123,48514,44101],{"class":129},[123,48516,2825],{"class":164},[123,48518,44017],{"class":129},[123,48520,33289],{"class":279},[123,48522,134],{"class":133},[123,48524,2926],{"class":164},[123,48526,2985],{"class":129},[123,48528,33298],{"class":279},[123,48530,134],{"class":133},[123,48532,2692],{"class":164},[123,48534,288],{"class":129},[123,48536,48537],{"class":125,"line":1444},[123,48538,44165],{"class":2673},[123,48540,48541],{"class":125,"line":1453},[123,48542,44170],{"class":2673},[123,48544,48545,48547,48549,48551,48553,48555,48557,48559,48561,48563,48565,48567,48569,48571,48573,48575],{"class":125,"line":1458},[123,48546,33260],{"class":164},[123,48548,44177],{"class":129},[123,48550,134],{"class":133},[123,48552,37239],{"class":129},[123,48554,33289],{"class":279},[123,48556,134],{"class":133},[123,48558,2686],{"class":164},[123,48560,2985],{"class":129},[123,48562,33344],{"class":279},[123,48564,134],{"class":133},[123,48566,2825],{"class":164},[123,48568,2985],{"class":129},[123,48570,33298],{"class":279},[123,48572,134],{"class":133},[123,48574,2825],{"class":164},[123,48576,288],{"class":129},[123,48578,48579,48581,48583,48585,48587,48589,48591,48593,48595,48597,48599,48601,48603,48605],{"class":125,"line":1476},[123,48580,33260],{"class":164},[123,48582,44212],{"class":129},[123,48584,134],{"class":133},[123,48586,33268],{"class":129},[123,48588,33271],{"class":279},[123,48590,134],{"class":133},[123,48592,43968],{"class":129},[123,48594,33280],{"class":279},[123,48596,134],{"class":133},[123,48598,44229],{"class":129},[123,48600,33289],{"class":279},[123,48602,134],{"class":133},[123,48604,2825],{"class":164},[123,48606,288],{"class":129},[123,48608,48609],{"class":125,"line":1494},[123,48610,232],{"emptyLinePlaceholder":231},[123,48612,48613,48615,48617],{"class":125,"line":1499},[123,48614,33216],{"class":133},[123,48616,33508],{"class":337},[123,48618,33511],{"class":129},[123,48620,48621,48623,48625,48627,48629,48631],{"class":125,"line":1517},[123,48622,44254],{"class":129},[123,48624,134],{"class":133},[123,48626,33238],{"class":164},[123,48628,37594],{"class":129},[123,48630,33238],{"class":164},[123,48632,44265],{"class":129},[123,48634,48635,48637,48639,48641,48643,48645,48647,48649,48651,48653],{"class":125,"line":1534},[123,48636,9518],{"class":129},[123,48638,134],{"class":133},[123,48640,33238],{"class":164},[123,48642,37594],{"class":129},[123,48644,33238],{"class":164},[123,48646,44280],{"class":129},[123,48648,33238],{"class":164},[123,48650,37594],{"class":129},[123,48652,33238],{"class":164},[123,48654,44289],{"class":129},[123,48656,48657,48659,48661,48663,48665,48667,48669,48671,48673,48675],{"class":125,"line":1539},[123,48658,44294],{"class":129},[123,48660,134],{"class":133},[123,48662,33238],{"class":164},[123,48664,37594],{"class":129},[123,48666,33238],{"class":164},[123,48668,44305],{"class":129},[123,48670,33238],{"class":164},[123,48672,37594],{"class":129},[123,48674,33238],{"class":164},[123,48676,44314],{"class":129},[123,48678,48679,48681,48683,48685,48687,48689,48691,48693],{"class":125,"line":2080},[123,48680,44319],{"class":129},[123,48682,134],{"class":133},[123,48684,33238],{"class":164},[123,48686,37594],{"class":129},[123,48688,33238],{"class":164},[123,48690,44330],{"class":129},[123,48692,33238],{"class":164},[123,48694,44335],{"class":129},[123,48696,48697],{"class":125,"line":2097},[123,48698,44340],{"class":2673},[123,48700,48701,48703,48705,48707,48709,48711],{"class":125,"line":2114},[123,48702,17182],{"class":133},[123,48704,44347],{"class":129},[123,48706,35097],{"class":279},[123,48708,134],{"class":133},[123,48710,2825],{"class":164},[123,48712,288],{"class":129},[123,48714,48715],{"class":125,"line":2125},[123,48716,232],{"emptyLinePlaceholder":231},[123,48718,48719],{"class":125,"line":2130},[123,48720,44368],{"class":2673},[123,48722,48723,48725,48727,48729,48731,48733,48735],{"class":125,"line":5033},[123,48724,17124],{"class":133},[123,48726,44375],{"class":337},[123,48728,1315],{"class":129},[123,48730,33193],{"class":337},[123,48732,3161],{"class":129},[123,48734,33198],{"class":337},[123,48736,33201],{"class":129},[123,48738,48739],{"class":125,"line":5041},[123,48740,44390],{"class":2673},[123,48742,48743,48745,48747],{"class":125,"line":5046},[123,48744,33216],{"class":133},[123,48746,33219],{"class":164},[123,48748,44399],{"class":129},[123,48750,48751,48753,48755,48757,48759,48761],{"class":125,"line":5052},[123,48752,33232],{"class":164},[123,48754,44406],{"class":129},[123,48756,33238],{"class":164},[123,48758,33241],{"class":129},[123,48760,33244],{"class":164},[123,48762,4420],{"class":129},[123,48764,48765,48767,48769,48771],{"class":125,"line":5058},[123,48766,33260],{"class":164},[123,48768,44421],{"class":129},[123,48770,134],{"class":133},[123,48772,40419],{"class":129},[123,48774,48775,48777,48779,48781,48783,48785,48787,48789,48791,48793,48795,48797,48799,48801,48803,48805,48807,48809,48811,48813,48815],{"class":125,"line":5063},[123,48776,40424],{"class":129},[123,48778,33271],{"class":279},[123,48780,134],{"class":133},[123,48782,2686],{"class":164},[123,48784,2985],{"class":129},[123,48786,33280],{"class":279},[123,48788,134],{"class":133},[123,48790,2811],{"class":164},[123,48792,2985],{"class":129},[123,48794,33289],{"class":279},[123,48796,134],{"class":133},[123,48798,2976],{"class":164},[123,48800,2985],{"class":129},[123,48802,33344],{"class":279},[123,48804,134],{"class":133},[123,48806,2692],{"class":164},[123,48808,2985],{"class":129},[123,48810,33298],{"class":279},[123,48812,134],{"class":133},[123,48814,2686],{"class":164},[123,48816,650],{"class":129},[123,48818,48819],{"class":125,"line":10380},[123,48820,40461],{"class":129},[123,48822,48823,48825,48827,48829,48831,48833,48835,48837,48839,48841,48843,48845,48847],{"class":125,"line":10404},[123,48824,40506],{"class":129},[123,48826,33289],{"class":279},[123,48828,134],{"class":133},[123,48830,2686],{"class":164},[123,48832,2985],{"class":129},[123,48834,33344],{"class":279},[123,48836,134],{"class":133},[123,48838,2692],{"class":164},[123,48840,2985],{"class":129},[123,48842,33298],{"class":279},[123,48844,134],{"class":133},[123,48846,2825],{"class":164},[123,48848,288],{"class":129},[123,48850,48851],{"class":125,"line":10409},[123,48852,40535],{"class":129},[123,48854,48855,48857,48859,48861],{"class":125,"line":10415},[123,48856,33260],{"class":164},[123,48858,44512],{"class":129},[123,48860,134],{"class":133},[123,48862,40419],{"class":129},[123,48864,48865,48867,48869,48871,48873,48875,48877,48879,48881,48883,48885,48887,48889],{"class":125,"line":10442},[123,48866,40424],{"class":129},[123,48868,33271],{"class":279},[123,48870,134],{"class":133},[123,48872,2811],{"class":164},[123,48874,2985],{"class":129},[123,48876,33280],{"class":279},[123,48878,134],{"class":133},[123,48880,2811],{"class":164},[123,48882,2985],{"class":129},[123,48884,33289],{"class":279},[123,48886,134],{"class":133},[123,48888,2825],{"class":164},[123,48890,650],{"class":129},[123,48892,48893],{"class":125,"line":10447},[123,48894,40461],{"class":129},[123,48896,48897,48899,48901,48903,48905,48907,48909,48911,48913,48915,48917,48919,48921,48923,48925,48927,48929],{"class":125,"line":10453},[123,48898,40424],{"class":129},[123,48900,33271],{"class":279},[123,48902,134],{"class":133},[123,48904,2811],{"class":164},[123,48906,2985],{"class":129},[123,48908,33280],{"class":279},[123,48910,134],{"class":133},[123,48912,44567],{"class":164},[123,48914,2985],{"class":129},[123,48916,33289],{"class":279},[123,48918,134],{"class":133},[123,48920,2686],{"class":164},[123,48922,2985],{"class":129},[123,48924,33298],{"class":279},[123,48926,134],{"class":133},[123,48928,2825],{"class":164},[123,48930,650],{"class":129},[123,48932,48933],{"class":125,"line":10465},[123,48934,40461],{"class":129},[123,48936,48937,48939,48941,48943,48945,48947,48949,48951,48953,48955,48957,48959,48961],{"class":125,"line":10477},[123,48938,40506],{"class":129},[123,48940,33289],{"class":279},[123,48942,134],{"class":133},[123,48944,2686],{"class":164},[123,48946,2985],{"class":129},[123,48948,33344],{"class":279},[123,48950,134],{"class":133},[123,48952,2692],{"class":164},[123,48954,2985],{"class":129},[123,48956,33298],{"class":279},[123,48958,134],{"class":133},[123,48960,2825],{"class":164},[123,48962,288],{"class":129},[123,48964,48965],{"class":125,"line":10489},[123,48966,40535],{"class":129},[123,48968,48969,48971,48973,48975],{"class":125,"line":12148},[123,48970,33260],{"class":164},[123,48972,44628],{"class":129},[123,48974,134],{"class":133},[123,48976,40419],{"class":129},[123,48978,48979,48981,48983,48985,48987,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007],{"class":125,"line":12173},[123,48980,44637],{"class":129},[123,48982,44567],{"class":164},[123,48984,2985],{"class":129},[123,48986,2811],{"class":164},[123,48988,44646],{"class":129},[123,48990,2817],{"class":164},[123,48992,2985],{"class":129},[123,48994,34482],{"class":164},[123,48996,44655],{"class":129},[123,48998,3204],{"class":164},[123,49000,2985],{"class":129},[123,49002,2805],{"class":164},[123,49004,44664],{"class":129},[123,49006,2805],{"class":164},[123,49008,650],{"class":129},[123,49010,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039],{"class":125,"line":12196},[123,49012,44637],{"class":129},[123,49014,37280],{"class":164},[123,49016,2985],{"class":129},[123,49018,34482],{"class":164},[123,49020,44646],{"class":129},[123,49022,34482],{"class":164},[123,49024,2985],{"class":129},[123,49026,44567],{"class":164},[123,49028,44655],{"class":129},[123,49030,2805],{"class":164},[123,49032,2985],{"class":129},[123,49034,2817],{"class":164},[123,49036,44664],{"class":129},[123,49038,2811],{"class":164},[123,49040,650],{"class":129},[123,49042,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067],{"class":125,"line":12220},[123,49044,40506],{"class":129},[123,49046,33289],{"class":279},[123,49048,134],{"class":133},[123,49050,2686],{"class":164},[123,49052,2985],{"class":129},[123,49054,33344],{"class":279},[123,49056,134],{"class":133},[123,49058,2692],{"class":164},[123,49060,2985],{"class":129},[123,49062,33298],{"class":279},[123,49064,134],{"class":133},[123,49066,2825],{"class":164},[123,49068,288],{"class":129},[123,49070,49071],{"class":125,"line":12225},[123,49072,40535],{"class":129},[123,49074,49075,49077,49079,49081],{"class":125,"line":12230},[123,49076,33260],{"class":164},[123,49078,44739],{"class":129},[123,49080,134],{"class":133},[123,49082,40419],{"class":129},[123,49084,49085,49087,49089,49091,49093,49095,49097,49099,49101,49103,49105,49107,49109,49111,49113],{"class":125,"line":12235},[123,49086,44637],{"class":129},[123,49088,44750],{"class":164},[123,49090,2985],{"class":129},[123,49092,44567],{"class":164},[123,49094,44646],{"class":129},[123,49096,2817],{"class":164},[123,49098,2985],{"class":129},[123,49100,44763],{"class":164},[123,49102,44655],{"class":129},[123,49104,3204],{"class":164},[123,49106,2985],{"class":129},[123,49108,3210],{"class":164},[123,49110,44664],{"class":129},[123,49112,2811],{"class":164},[123,49114,650],{"class":129},[123,49116,49117,49119,49121,49123,49125,49127,49129,49131,49133,49135,49137,49139,49141,49143,49145],{"class":125,"line":12244},[123,49118,44637],{"class":129},[123,49120,40866],{"class":164},[123,49122,2985],{"class":129},[123,49124,1040],{"class":164},[123,49126,44646],{"class":129},[123,49128,3220],{"class":164},[123,49130,2985],{"class":129},[123,49132,33913],{"class":164},[123,49134,44655],{"class":129},[123,49136,3402],{"class":164},[123,49138,2985],{"class":129},[123,49140,2811],{"class":164},[123,49142,44664],{"class":129},[123,49144,2811],{"class":164},[123,49146,650],{"class":129},[123,49148,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177],{"class":125,"line":12249},[123,49150,44637],{"class":129},[123,49152,40866],{"class":164},[123,49154,2985],{"class":129},[123,49156,34482],{"class":164},[123,49158,44646],{"class":129},[123,49160,34482],{"class":164},[123,49162,2985],{"class":129},[123,49164,37280],{"class":164},[123,49166,44655],{"class":129},[123,49168,3402],{"class":164},[123,49170,2985],{"class":129},[123,49172,2811],{"class":164},[123,49174,44664],{"class":129},[123,49176,2811],{"class":164},[123,49178,650],{"class":129},[123,49180,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209],{"class":125,"line":12255},[123,49182,44637],{"class":129},[123,49184,40866],{"class":164},[123,49186,2985],{"class":129},[123,49188,3220],{"class":164},[123,49190,44646],{"class":129},[123,49192,34482],{"class":164},[123,49194,2985],{"class":129},[123,49196,44860],{"class":164},[123,49198,44655],{"class":129},[123,49200,2805],{"class":164},[123,49202,2985],{"class":129},[123,49204,2811],{"class":164},[123,49206,44664],{"class":129},[123,49208,2811],{"class":164},[123,49210,650],{"class":129},[123,49212,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237,49239,49241],{"class":125,"line":12276},[123,49214,44637],{"class":129},[123,49216,44881],{"class":164},[123,49218,2985],{"class":129},[123,49220,37280],{"class":164},[123,49222,44646],{"class":129},[123,49224,1040],{"class":164},[123,49226,2985],{"class":129},[123,49228,44894],{"class":164},[123,49230,44655],{"class":129},[123,49232,2805],{"class":164},[123,49234,2985],{"class":129},[123,49236,34482],{"class":164},[123,49238,44664],{"class":129},[123,49240,34482],{"class":164},[123,49242,650],{"class":129},[123,49244,49245,49247,49249,49251,49253,49255,49257,49259,49261,49263,49265,49267,49269],{"class":125,"line":12282},[123,49246,40506],{"class":129},[123,49248,33289],{"class":279},[123,49250,134],{"class":133},[123,49252,2686],{"class":164},[123,49254,2985],{"class":129},[123,49256,33344],{"class":279},[123,49258,134],{"class":133},[123,49260,2692],{"class":164},[123,49262,2985],{"class":129},[123,49264,33298],{"class":279},[123,49266,134],{"class":133},[123,49268,2825],{"class":164},[123,49270,288],{"class":129},[123,49272,49273],{"class":125,"line":12296},[123,49274,40535],{"class":129},[123,49276,49277,49279,49281,49283],{"class":125,"line":12302},[123,49278,33260],{"class":164},[123,49280,44947],{"class":129},[123,49282,134],{"class":133},[123,49284,40419],{"class":129},[123,49286,49287,49289,49291,49293,49295,49297,49299,49301,49303,49305,49307,49309,49311,49313,49315],{"class":125,"line":12329},[123,49288,44637],{"class":129},[123,49290,44958],{"class":164},[123,49292,2985],{"class":129},[123,49294,37280],{"class":164},[123,49296,44646],{"class":129},[123,49298,1040],{"class":164},[123,49300,2985],{"class":129},[123,49302,44894],{"class":164},[123,49304,44655],{"class":129},[123,49306,2805],{"class":164},[123,49308,2985],{"class":129},[123,49310,34482],{"class":164},[123,49312,44664],{"class":129},[123,49314,34482],{"class":164},[123,49316,650],{"class":129},[123,49318,49319,49321,49323,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343,49345,49347],{"class":125,"line":12338},[123,49320,44637],{"class":129},[123,49322,44958],{"class":164},[123,49324,2985],{"class":129},[123,49326,37350],{"class":164},[123,49328,44646],{"class":129},[123,49330,44567],{"class":164},[123,49332,2985],{"class":129},[123,49334,37350],{"class":164},[123,49336,44655],{"class":129},[123,49338,3210],{"class":164},[123,49340,2985],{"class":129},[123,49342,34482],{"class":164},[123,49344,44664],{"class":129},[123,49346,34482],{"class":164},[123,49348,650],{"class":129},[123,49350,49351,49353,49355,49357,49359],{"class":125,"line":12344},[123,49352,45021],{"class":129},[123,49354,2825],{"class":164},[123,49356,2985],{"class":129},[123,49358,2825],{"class":164},[123,49360,45030],{"class":129},[123,49362,49363],{"class":125,"line":12352},[123,49364,41199],{"class":129},[123,49366,49367,49369,49371,49373,49375],{"class":125,"line":12357},[123,49368,41204],{"class":129},[123,49370,45041],{"class":164},[123,49372,2985],{"class":129},[123,49374,2692],{"class":164},[123,49376,288],{"class":129},[123,49378,49379],{"class":125,"line":19032},[123,49380,40535],{"class":129},[123,49382,49383],{"class":125,"line":19038},[123,49384,45056],{"class":2673},[123,49386,49387,49389,49391,49393,49395],{"class":125,"line":19061},[123,49388,5843],{"class":133},[123,49390,41277],{"class":129},[123,49392,1405],{"class":133},[123,49394,41282],{"class":164},[123,49396,41285],{"class":129},[123,49398,49399,49401,49403],{"class":125,"line":19067},[123,49400,7079],{"class":133},[123,49402,41297],{"class":164},[123,49404,41300],{"class":129},[123,49406,49407,49409,49411,49413,49415,49417,49419,49421,49423],{"class":125,"line":19090},[123,49408,41310],{"class":129},[123,49410,45083],{"class":279},[123,49412,134],{"class":133},[123,49414,45088],{"class":143},[123,49416,2985],{"class":129},[123,49418,41313],{"class":279},[123,49420,134],{"class":133},[123,49422,41318],{"class":143},[123,49424,288],{"class":129},[123,49426,49427],{"class":125,"line":19104},[123,49428,45103],{"class":2673},[123,49430,49431],{"class":125,"line":19124},[123,49432,45108],{"class":2673},[123,49434,49435],{"class":125,"line":19130},[123,49436,45113],{"class":2673},[123,49438,49439],{"class":125,"line":19141},[123,49440,45118],{"class":2673},[123,49442,49443],{"class":125,"line":19164},[123,49444,45123],{"class":2673},[123,49446,49447],{"class":125,"line":19186},[123,49448,45128],{"class":2673},[123,49450,49451,49453,49455,49457,49459,49461],{"class":125,"line":19191},[123,49452,41330],{"class":133},[123,49454,41333],{"class":129},[123,49456,41336],{"class":133},[123,49458,1714],{"class":133},[123,49460,41341],{"class":164},[123,49462,1344],{"class":129},[123,49464,49465,49467,49469],{"class":125,"line":19197},[123,49466,41353],{"class":129},[123,49468,2799],{"class":164},[123,49470,288],{"class":129},[123,49472,49473,49475,49477],{"class":125,"line":19211},[123,49474,45155],{"class":133},[123,49476,41297],{"class":164},[123,49478,41372],{"class":129},[123,49480,49481,49483,49485,49487,49489],{"class":125,"line":19224},[123,49482,45164],{"class":129},[123,49484,2799],{"class":164},[123,49486,2985],{"class":129},[123,49488,41394],{"class":164},[123,49490,288],{"class":129},[123,49492,49493,49495,49497,49499,49501,49503],{"class":125,"line":19229},[123,49494,45177],{"class":133},[123,49496,41333],{"class":129},[123,49498,41336],{"class":133},[123,49500,1714],{"class":133},[123,49502,41341],{"class":164},[123,49504,1344],{"class":129},[123,49506,49507,49509,49511],{"class":125,"line":19243},[123,49508,45192],{"class":129},[123,49510,2799],{"class":164},[123,49512,288],{"class":129},[123,49514,49515],{"class":125,"line":19248},[123,49516,37575],{"class":2673},[123,49518,49519,49521,49523],{"class":125,"line":19254},[123,49520,33216],{"class":133},[123,49522,33508],{"class":337},[123,49524,33511],{"class":129},[123,49526,49527,49529,49531,49533],{"class":125,"line":19259},[123,49528,33516],{"class":129},[123,49530,134],{"class":133},[123,49532,33238],{"class":164},[123,49534,45219],{"class":129},[123,49536,49537,49539,49541,49543],{"class":125,"line":19273},[123,49538,33516],{"class":129},[123,49540,134],{"class":133},[123,49542,33238],{"class":164},[123,49544,45230],{"class":129},[123,49546,49547,49549,49551,49553],{"class":125,"line":19278},[123,49548,33516],{"class":129},[123,49550,134],{"class":133},[123,49552,33238],{"class":164},[123,49554,45241],{"class":129},[123,49556,49557,49559,49561,49563],{"class":125,"line":19283},[123,49558,33516],{"class":129},[123,49560,134],{"class":133},[123,49562,33238],{"class":164},[123,49564,45252],{"class":129},[123,49566,49567,49569,49571,49573],{"class":125,"line":19297},[123,49568,33516],{"class":129},[123,49570,134],{"class":133},[123,49572,33238],{"class":164},[123,49574,45263],{"class":129},[123,49576,49577,49579],{"class":125,"line":19309},[123,49578,17182],{"class":133},[123,49580,33624],{"class":129},[123,49582,49583],{"class":125,"line":19314},[123,49584,232],{"emptyLinePlaceholder":231},[123,49586,49587],{"class":125,"line":19327},[123,49588,45278],{"class":2673},[123,49590,49591,49593,49595,49597,49599],{"class":125,"line":19332},[123,49592,3998],{"class":133},[123,49594,33635],{"class":164},[123,49596,5391],{"class":133},[123,49598,33640],{"class":143},[123,49600,1344],{"class":129},[123,49602,49603,49605,49607,49609,49611,49613,49615,49617,49619],{"class":125,"line":19337},[123,49604,33652],{"class":129},[123,49606,134],{"class":133},[123,49608,32867],{"class":129},[123,49610,33659],{"class":143},[123,49612,4158],{"class":133},[123,49614,33664],{"class":129},[123,49616,4155],{"class":133},[123,49618,32892],{"class":143},[123,49620,288],{"class":129},[123,49622,49623,49625,49627],{"class":125,"line":19342},[123,49624,33704],{"class":129},[123,49626,134],{"class":133},[123,49628,45319],{"class":129},[123,49630,49631,49633,49635,49637,49639,49641,49643,49645],{"class":125,"line":19355},[123,49632,33714],{"class":164},[123,49634,33717],{"class":129},[123,49636,2825],{"class":164},[123,49638,2985],{"class":129},[123,49640,33913],{"class":164},[123,49642,2985],{"class":129},[123,49644,33913],{"class":164},[123,49646,33730],{"class":129},[24425,49648,49650],{"id":49649},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49652,49653],{},"计算图片的均值与方差，用于训练中归一化处理操作",[113,49655,49657],{"className":115,"code":49656,"language":117,"meta":118,"style":118},"# 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",[120,49658,49659,49664,49677,49682,49688,49693,49703,49707,49712,49722,49726,49731,49741,49758,49762,49767,49779,49791,49822,49831,49841,49851,49855,49860,49875,49879,49884,49889,49894,49904,49909,49934,49938,49943,49958,49962,49975,49979,49984,49989,49994,49999,50004,50014,50024,50047,50055,50063,50071,50075,50087,50091,50096,50100,50104,50111,50131,50155,50162,50176,50181,50186,50190,50204,50208,50220],{"__ignoreMap":118},[123,49660,49661],{"class":125,"line":126},[123,49662,49663],{"class":2673},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[123,49665,49666,49668,49671,49674],{"class":125,"line":140},[123,49667,391],{"class":133},[123,49669,49670],{"class":164}," PIL",[123,49672,49673],{"class":133}," import",[123,49675,49676],{"class":129}," Image\n",[123,49678,49679],{"class":125,"line":156},[123,49680,49681],{"class":2673},"# os 用来处理文件夹和文件路径\n",[123,49683,49684,49686],{"class":125,"line":168},[123,49685,223],{"class":133},[123,49687,47713],{"class":129},[123,49689,49690],{"class":125,"line":268},[123,49691,49692],{"class":2673},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[123,49694,49695,49697,49699,49701],{"class":125,"line":291},[123,49696,223],{"class":133},[123,49698,33795],{"class":129},[123,49700,547],{"class":133},[123,49702,33800],{"class":129},[123,49704,49705],{"class":125,"line":300},[123,49706,232],{"emptyLinePlaceholder":231},[123,49708,49709],{"class":125,"line":305},[123,49710,49711],{"class":2673},"# 文件夹路径，包含所有图片文件\n",[123,49713,49714,49717,49719],{"class":125,"line":316},[123,49715,49716],{"class":129},"folder_path ",[123,49718,134],{"class":133},[123,49720,49721],{"class":143}," 'data_cat_dog'\n",[123,49723,49724],{"class":125,"line":673},[123,49725,232],{"emptyLinePlaceholder":231},[123,49727,49728],{"class":125,"line":692},[123,49729,49730],{"class":2673},"# 初始化累积变量\n",[123,49732,49733,49736,49738],{"class":125,"line":713},[123,49734,49735],{"class":129},"total_pixels ",[123,49737,134],{"class":133},[123,49739,49740],{"class":164}," 0\n",[123,49742,49743,49746,49748,49751,49753,49755],{"class":125,"line":718},[123,49744,49745],{"class":129},"sum_normalized_pixel_values ",[123,49747,134],{"class":133},[123,49749,49750],{"class":129}," np.zeros(",[123,49752,2686],{"class":164},[123,49754,48215],{"class":129},[123,49756,49757],{"class":2673},"# 如果是RGB图像，需要三个通道的均值和方差\n",[123,49759,49760],{"class":125,"line":1138},[123,49761,232],{"emptyLinePlaceholder":231},[123,49763,49764],{"class":125,"line":1429},[123,49765,49766],{"class":2673},"# 遍历文件夹中的图片文件\n",[123,49768,49769,49771,49774,49776],{"class":125,"line":1439},[123,49770,1399],{"class":133},[123,49772,49773],{"class":129}," root, dirs, files ",[123,49775,1405],{"class":133},[123,49777,49778],{"class":129}," os.walk(folder_path):\n",[123,49780,49781,49783,49786,49788],{"class":125,"line":1444},[123,49782,5641],{"class":133},[123,49784,49785],{"class":129}," filename ",[123,49787,1405],{"class":133},[123,49789,49790],{"class":129}," files:\n",[123,49792,49793,49795,49798,49801,49803,49806,49808,49811,49813,49816,49819],{"class":125,"line":1453},[123,49794,4940],{"class":133},[123,49796,49797],{"class":129}," filename.endswith((",[123,49799,49800],{"class":143},"'.jpg'",[123,49802,251],{"class":129},[123,49804,49805],{"class":143},"'.jpeg'",[123,49807,251],{"class":129},[123,49809,49810],{"class":143},"'.png'",[123,49812,251],{"class":129},[123,49814,49815],{"class":143},"'.bmp'",[123,49817,49818],{"class":129},")):  ",[123,49820,49821],{"class":2673},"# 可根据实际情况添加其他格式\n",[123,49823,49824,49826,49828],{"class":125,"line":1458},[123,49825,48080],{"class":129},[123,49827,134],{"class":133},[123,49829,49830],{"class":129}," os.path.join(root, filename)\n",[123,49832,49833,49836,49838],{"class":125,"line":1476},[123,49834,49835],{"class":129},"            image ",[123,49837,134],{"class":133},[123,49839,49840],{"class":129}," Image.open(image_path)\n",[123,49842,49843,49846,49848],{"class":125,"line":1494},[123,49844,49845],{"class":129},"            image_array ",[123,49847,134],{"class":133},[123,49849,49850],{"class":129}," np.array(image)\n",[123,49852,49853],{"class":125,"line":1499},[123,49854,232],{"emptyLinePlaceholder":231},[123,49856,49857],{"class":125,"line":1517},[123,49858,49859],{"class":2673},"            # 归一化像素值到0-1之间\n",[123,49861,49862,49865,49867,49870,49872],{"class":125,"line":1534},[123,49863,49864],{"class":129},"            normalized_image_array ",[123,49866,134],{"class":133},[123,49868,49869],{"class":129}," image_array ",[123,49871,3187],{"class":133},[123,49873,49874],{"class":164}," 255.0\n",[123,49876,49877],{"class":125,"line":1539},[123,49878,232],{"emptyLinePlaceholder":231},[123,49880,49881],{"class":125,"line":2080},[123,49882,49883],{"class":2673},"            # print(image_path)\n",[123,49885,49886],{"class":125,"line":2097},[123,49887,49888],{"class":2673},"            # print(normalized_image_array.shape)\n",[123,49890,49891],{"class":125,"line":2114},[123,49892,49893],{"class":2673},"            # 累积归一化后的像素值和像素数量\n",[123,49895,49896,49899,49901],{"class":125,"line":2125},[123,49897,49898],{"class":129},"            total_pixels ",[123,49900,11909],{"class":133},[123,49902,49903],{"class":129}," normalized_image_array.size\n",[123,49905,49906],{"class":125,"line":2130},[123,49907,49908],{"class":2673},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[123,49910,49911,49914,49916,49919,49922,49924,49926,49928,49930,49932],{"class":125,"line":5033},[123,49912,49913],{"class":129},"            sum_normalized_pixel_values ",[123,49915,11909],{"class":133},[123,49917,49918],{"class":129}," np.sum(normalized_image_array, ",[123,49920,49921],{"class":279},"axis",[123,49923,134],{"class":133},[123,49925,1315],{"class":129},[123,49927,2799],{"class":164},[123,49929,251],{"class":129},[123,49931,2825],{"class":164},[123,49933,32913],{"class":129},[123,49935,49936],{"class":125,"line":5041},[123,49937,232],{"emptyLinePlaceholder":231},[123,49939,49940],{"class":125,"line":5046},[123,49941,49942],{"class":2673},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[123,49944,49945,49948,49950,49953,49955],{"class":125,"line":5052},[123,49946,49947],{"class":129},"mean ",[123,49949,134],{"class":133},[123,49951,49952],{"class":129}," sum_normalized_pixel_values ",[123,49954,3187],{"class":133},[123,49956,49957],{"class":129}," total_pixels\n",[123,49959,49960],{"class":125,"line":5058},[123,49961,232],{"emptyLinePlaceholder":231},[123,49963,49964,49967,49969,49971,49973],{"class":125,"line":5063},[123,49965,49966],{"class":129},"sum_squared_diff ",[123,49968,134],{"class":133},[123,49970,49750],{"class":129},[123,49972,2686],{"class":164},[123,49974,288],{"class":129},[123,49976,49977],{"class":125,"line":10380},[123,49978,232],{"emptyLinePlaceholder":231},[123,49980,49981],{"class":125,"line":10404},[123,49982,49983],{"class":2673},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[123,49985,49986],{"class":125,"line":10409},[123,49987,49988],{"class":2673},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[123,49990,49991],{"class":125,"line":10415},[123,49992,49993],{"class":2673},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[123,49995,49996],{"class":125,"line":10442},[123,49997,49998],{"class":2673},"# Image.open(image_path)：打开图片\n",[123,50000,50001],{"class":125,"line":10447},[123,50002,50003],{"class":2673},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[123,50005,50006,50008,50010,50012],{"class":125,"line":10453},[123,50007,1399],{"class":133},[123,50009,49773],{"class":129},[123,50011,1405],{"class":133},[123,50013,49778],{"class":129},[123,50015,50016,50018,50020,50022],{"class":125,"line":10465},[123,50017,5641],{"class":133},[123,50019,49785],{"class":129},[123,50021,1405],{"class":133},[123,50023,49790],{"class":129},[123,50025,50026,50028,50030,50032,50034,50036,50038,50040,50042,50044],{"class":125,"line":10477},[123,50027,4940],{"class":133},[123,50029,49797],{"class":129},[123,50031,49800],{"class":143},[123,50033,251],{"class":129},[123,50035,49805],{"class":143},[123,50037,251],{"class":129},[123,50039,49810],{"class":143},[123,50041,251],{"class":129},[123,50043,49815],{"class":143},[123,50045,50046],{"class":129},")):\n",[123,50048,50049,50051,50053],{"class":125,"line":10489},[123,50050,48080],{"class":129},[123,50052,134],{"class":133},[123,50054,49830],{"class":129},[123,50056,50057,50059,50061],{"class":125,"line":12148},[123,50058,49835],{"class":129},[123,50060,134],{"class":133},[123,50062,49840],{"class":129},[123,50064,50065,50067,50069],{"class":125,"line":12173},[123,50066,49845],{"class":129},[123,50068,134],{"class":133},[123,50070,49850],{"class":129},[123,50072,50073],{"class":125,"line":12196},[123,50074,49859],{"class":2673},[123,50076,50077,50079,50081,50083,50085],{"class":125,"line":12220},[123,50078,49864],{"class":129},[123,50080,134],{"class":133},[123,50082,49869],{"class":129},[123,50084,3187],{"class":133},[123,50086,49874],{"class":164},[123,50088,50089],{"class":125,"line":12225},[123,50090,49888],{"class":2673},[123,50092,50093],{"class":125,"line":12230},[123,50094,50095],{"class":2673},"            # print(mean.shape)\n",[123,50097,50098],{"class":125,"line":12235},[123,50099,49883],{"class":2673},[123,50101,50102],{"class":125,"line":12244},[123,50103,232],{"emptyLinePlaceholder":231},[123,50105,50106,50109],{"class":125,"line":12249},[123,50107,50108],{"class":133},"            try",[123,50110,1344],{"class":129},[123,50112,50113,50116,50118,50121,50123,50126,50128],{"class":125,"line":12255},[123,50114,50115],{"class":129},"                diff ",[123,50117,134],{"class":133},[123,50119,50120],{"class":129}," (normalized_image_array ",[123,50122,3135],{"class":133},[123,50124,50125],{"class":129}," mean) ",[123,50127,13093],{"class":133},[123,50129,50130],{"class":164}," 2\n",[123,50132,50133,50136,50138,50141,50143,50145,50147,50149,50151,50153],{"class":125,"line":12276},[123,50134,50135],{"class":129},"                sum_squared_diff ",[123,50137,11909],{"class":133},[123,50139,50140],{"class":129}," np.sum(diff, ",[123,50142,49921],{"class":279},[123,50144,134],{"class":133},[123,50146,1315],{"class":129},[123,50148,2799],{"class":164},[123,50150,251],{"class":129},[123,50152,2825],{"class":164},[123,50154,32913],{"class":129},[123,50156,50157,50160],{"class":125,"line":12282},[123,50158,50159],{"class":133},"            except",[123,50161,1344],{"class":129},[123,50163,50164,50167,50169,50171,50174],{"class":125,"line":12296},[123,50165,50166],{"class":164},"                print",[123,50168,1315],{"class":129},[123,50170,2667],{"class":133},[123,50172,50173],{"class":143},"\"捕获到自定义异常\"",[123,50175,288],{"class":129},[123,50177,50178],{"class":125,"line":12302},[123,50179,50180],{"class":2673},"            # diff = (normalized_image_array - mean) ** 2\n",[123,50182,50183],{"class":125,"line":12329},[123,50184,50185],{"class":2673},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[123,50187,50188],{"class":125,"line":12338},[123,50189,232],{"emptyLinePlaceholder":231},[123,50191,50192,50195,50197,50200,50202],{"class":125,"line":12344},[123,50193,50194],{"class":129},"variance ",[123,50196,134],{"class":133},[123,50198,50199],{"class":129}," sum_squared_diff ",[123,50201,3187],{"class":133},[123,50203,49957],{"class":129},[123,50205,50206],{"class":125,"line":12352},[123,50207,232],{"emptyLinePlaceholder":231},[123,50209,50210,50212,50214,50217],{"class":125,"line":12357},[123,50211,294],{"class":164},[123,50213,1315],{"class":129},[123,50215,50216],{"class":143},"\"Mean:\"",[123,50218,50219],{"class":129},", mean)\n",[123,50221,50222,50224,50226,50229],{"class":125,"line":19032},[123,50223,294],{"class":164},[123,50225,1315],{"class":129},[123,50227,50228],{"class":143},"\"Variance:\"",[123,50230,50231],{"class":129},", variance)\n",[113,50233,50235],{"className":115,"code":50234,"language":117,"meta":118,"style":118},"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",[120,50236,50237,50243,50249,50259,50265,50275,50289,50299,50309,50319,50323,50333,50343,50347,50351,50359,50364,50369,50388,50392,50397,50402,50407,50412,50453,50458,50468,50473,50486,50491,50496,50501,50506,50511,50515,50520,50525,50547,50551,50583,50597,50607,50617,50621,50631,50645,50655,50665,50675,50681,50685,50689,50693,50697,50701,50709,50729,50733,50737,50741,50745,50761,50765,50769,50777,50781,50785,50793,50797,50801,50805,50813,50817,50821,50825,50833,50837,50845,50849,50857,50861,50869,50873,50881,50885,50889,50897,50901,50905,50917,50941,50955,50959,50963,50967,50975,50979,50987,50991,50999,51003,51011,51015,51023,51027,51035,51039,51051,51055,51063,51067,51075,51079,51083,51087,51091,51099,51103,51119,51123,51131,51135,51139,51143,51147,51151,51155,51159,51175,51179,51191,51195,51207,51211,51223,51227,51235,51239,51247,51251,51255,51259,51265,51269,51277,51281,51297,51301,51309,51313,51329,51341,51345,51357,51361,51365,51373,51377,51381,51389,51393,51401,51405,51413,51417,51421,51463,51505,51509,51513,51529,51533,51549,51553,51557,51565,51569,51573,51585,51623,51627,51631,51639,51643,51657,51667,51673,51679,51685,51691,51695,51699,51705,51709,51713,51721,51725,51743,51747,51751,51755,51771,51775,51779,51783,51787,51791,51811,51831,51835,51839,51843,51851,51859,51863,51879,51899,51919,51923,51928,51937,51946,51951,51956,51961,51974,51979,51988,51997,52014],{"__ignoreMap":118},[123,50238,50239,50241],{"class":125,"line":126},[123,50240,223],{"class":133},[123,50242,34234],{"class":129},[123,50244,50245,50247],{"class":125,"line":140},[123,50246,223],{"class":133},[123,50248,34241],{"class":129},[123,50250,50251,50253,50255,50257],{"class":125,"line":156},[123,50252,223],{"class":133},[123,50254,34252],{"class":129},[123,50256,547],{"class":133},[123,50258,34257],{"class":129},[123,50260,50261,50263],{"class":125,"line":168},[123,50262,223],{"class":133},[123,50264,32812],{"class":129},[123,50266,50267,50269,50271,50273],{"class":125,"line":268},[123,50268,391],{"class":133},[123,50270,33829],{"class":129},[123,50272,223],{"class":133},[123,50274,34274],{"class":129},[123,50276,50277,50279,50281,50283,50286],{"class":125,"line":291},[123,50278,391],{"class":133},[123,50280,33783],{"class":129},[123,50282,223],{"class":133},[123,50284,50285],{"class":129}," ImageFolder ",[123,50287,50288],{"class":2673},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[123,50290,50291,50293,50295,50297],{"class":125,"line":300},[123,50292,391],{"class":133},[123,50294,33812],{"class":129},[123,50296,223],{"class":133},[123,50298,33817],{"class":129},[123,50300,50301,50303,50305,50307],{"class":125,"line":305},[123,50302,223],{"class":133},[123,50304,33829],{"class":129},[123,50306,547],{"class":133},[123,50308,33834],{"class":129},[123,50310,50311,50313,50315,50317],{"class":125,"line":316},[123,50312,223],{"class":133},[123,50314,33846],{"class":129},[123,50316,547],{"class":133},[123,50318,33851],{"class":129},[123,50320,50321],{"class":125,"line":673},[123,50322,34319],{"class":2673},[123,50324,50325,50327,50329,50331],{"class":125,"line":692},[123,50326,391],{"class":133},[123,50328,34326],{"class":129},[123,50330,223],{"class":133},[123,50332,45439],{"class":129},[123,50334,50335,50337,50339,50341],{"class":125,"line":713},[123,50336,391],{"class":133},[123,50338,33155],{"class":129},[123,50340,223],{"class":133},[123,50342,33160],{"class":129},[123,50344,50345],{"class":125,"line":718},[123,50346,232],{"emptyLinePlaceholder":231},[123,50348,50349],{"class":125,"line":1138},[123,50350,34354],{"class":2673},[123,50352,50353,50355,50357],{"class":125,"line":1429},[123,50354,34359],{"class":133},[123,50356,34362],{"class":337},[123,50358,34365],{"class":129},[123,50360,50361],{"class":125,"line":1439},[123,50362,50363],{"class":2673},"    # 导入自己的数据集，并进行数据处理\n",[123,50365,50366],{"class":125,"line":1444},[123,50367,50368],{"class":2673},"    # 定义数据集的路径\n",[123,50370,50371,50374,50376,50378,50380,50382,50386],{"class":125,"line":1453},[123,50372,50373],{"class":164},"    ROOT_PATH",[123,50375,134],{"class":133},[123,50377,3272],{"class":133},[123,50379,2859],{"class":143},[123,50381,3161],{"class":164},[123,50383,50385],{"class":50384},"sA_wV","\u002Fdata\u002Ftrain",[123,50387,27555],{"class":143},[123,50389,50390],{"class":125,"line":1458},[123,50391,232],{"emptyLinePlaceholder":231},[123,50393,50394],{"class":125,"line":1476},[123,50395,50396],{"class":2673},"    # 定义归一化方法\n",[123,50398,50399],{"class":125,"line":1494},[123,50400,50401],{"class":2673},"    # 这里需要先计算一下数据集的均值和方差\n",[123,50403,50404],{"class":125,"line":1499},[123,50405,50406],{"class":2673},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[123,50408,50409],{"class":125,"line":1517},[123,50410,50411],{"class":2673},"    # 第一个参数是均值，第二个参数是方差\n",[123,50413,50414,50417,50419,50422,50425,50427,50430,50432,50435,50438,50441,50443,50446,50448,50451],{"class":125,"line":1534},[123,50415,50416],{"class":129},"    normalize",[123,50418,134],{"class":133},[123,50420,50421],{"class":129},"transforms.Normalize([",[123,50423,50424],{"class":164},"0.162",[123,50426,2985],{"class":129},[123,50428,50429],{"class":164},"0.151",[123,50431,2985],{"class":129},[123,50433,50434],{"class":164},"0.138",[123,50436,50437],{"class":129},"],[",[123,50439,50440],{"class":164},"0.058",[123,50442,2985],{"class":129},[123,50444,50445],{"class":164},"0.052",[123,50447,2985],{"class":129},[123,50449,50450],{"class":164},"0.048",[123,50452,444],{"class":129},[123,50454,50455],{"class":125,"line":1539},[123,50456,50457],{"class":2673},"    # 定义数据集处理方法变量\n",[123,50459,50460,50463,50465],{"class":125,"line":2080},[123,50461,50462],{"class":129},"    train_transform",[123,50464,134],{"class":133},[123,50466,50467],{"class":129},"transforms.Compose([\n",[123,50469,50470],{"class":125,"line":2097},[123,50471,50472],{"class":2673},"        # 调整图像大小为224*224\n",[123,50474,50475,50478,50480,50482,50484],{"class":125,"line":2114},[123,50476,50477],{"class":129},"        transforms.Resize((",[123,50479,33913],{"class":164},[123,50481,2985],{"class":129},[123,50483,33913],{"class":164},[123,50485,45030],{"class":129},[123,50487,50488],{"class":125,"line":2125},[123,50489,50490],{"class":2673},"        # 将图像转换为张量\n",[123,50492,50493],{"class":125,"line":2130},[123,50494,50495],{"class":129},"        transforms.ToTensor(),\n",[123,50497,50498],{"class":125,"line":5033},[123,50499,50500],{"class":129},"        normalize])\n",[123,50502,50503],{"class":125,"line":5041},[123,50504,50505],{"class":2673},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[123,50507,50508],{"class":125,"line":5046},[123,50509,50510],{"class":2673},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[123,50512,50513],{"class":125,"line":5052},[123,50514,232],{"emptyLinePlaceholder":231},[123,50516,50517],{"class":125,"line":5058},[123,50518,50519],{"class":2673},"    # 加载数据集\n",[123,50521,50522],{"class":125,"line":5063},[123,50523,50524],{"class":2673},"    # 传入数据集路径与处理方法\n",[123,50526,50527,50529,50531,50534,50537,50539,50542,50544],{"class":125,"line":10380},[123,50528,34370],{"class":129},[123,50530,134],{"class":133},[123,50532,50533],{"class":129},"ImageFolder(",[123,50535,50536],{"class":164},"ROOT_PATH",[123,50538,2985],{"class":129},[123,50540,50541],{"class":279},"transform",[123,50543,134],{"class":133},[123,50545,50546],{"class":129},"train_transform)\n",[123,50548,50549],{"class":125,"line":10404},[123,50550,232],{"emptyLinePlaceholder":231},[123,50552,50553,50555,50557,50559,50561,50563,50565,50567,50569,50571,50573,50575,50577,50579,50581],{"class":125,"line":10409},[123,50554,34422],{"class":129},[123,50556,134],{"class":133},[123,50558,34427],{"class":129},[123,50560,34430],{"class":164},[123,50562,1315],{"class":129},[123,50564,34435],{"class":164},[123,50566,3060],{"class":133},[123,50568,9791],{"class":164},[123,50570,34442],{"class":129},[123,50572,34430],{"class":164},[123,50574,1315],{"class":129},[123,50576,34449],{"class":164},[123,50578,3060],{"class":133},[123,50580,9791],{"class":164},[123,50582,34456],{"class":129},[123,50584,50585,50587,50589,50591,50593,50595],{"class":125,"line":10415},[123,50586,34461],{"class":129},[123,50588,134],{"class":133},[123,50590,34466],{"class":129},[123,50592,33949],{"class":279},[123,50594,134],{"class":133},[123,50596,33954],{"class":129},[123,50598,50599,50601,50603,50605],{"class":125,"line":10442},[123,50600,34477],{"class":279},[123,50602,134],{"class":133},[123,50604,2805],{"class":164},[123,50606,153],{"class":129},[123,50608,50609,50611,50613,50615],{"class":125,"line":10447},[123,50610,34489],{"class":279},[123,50612,134],{"class":133},[123,50614,870],{"class":164},[123,50616,153],{"class":129},[123,50618,50619],{"class":125,"line":10453},[123,50620,34500],{"class":2673},[123,50622,50623,50625,50627,50629],{"class":125,"line":10465},[123,50624,34505],{"class":279},[123,50626,134],{"class":133},[123,50628,2248],{"class":164},[123,50630,288],{"class":129},[123,50632,50633,50635,50637,50639,50641,50643],{"class":125,"line":10477},[123,50634,34516],{"class":129},[123,50636,134],{"class":133},[123,50638,33946],{"class":129},[123,50640,33949],{"class":279},[123,50642,134],{"class":133},[123,50644,34527],{"class":129},[123,50646,50647,50649,50651,50653],{"class":125,"line":10489},[123,50648,34532],{"class":279},[123,50650,134],{"class":133},[123,50652,2805],{"class":164},[123,50654,153],{"class":129},[123,50656,50657,50659,50661,50663],{"class":125,"line":12148},[123,50658,34543],{"class":279},[123,50660,134],{"class":133},[123,50662,870],{"class":164},[123,50664,153],{"class":129},[123,50666,50667,50669,50671,50673],{"class":125,"line":12173},[123,50668,34554],{"class":279},[123,50670,134],{"class":133},[123,50672,2248],{"class":164},[123,50674,288],{"class":129},[123,50676,50677,50679],{"class":125,"line":12196},[123,50678,6529],{"class":133},[123,50680,34567],{"class":129},[123,50682,50683],{"class":125,"line":12220},[123,50684,232],{"emptyLinePlaceholder":231},[123,50686,50687],{"class":125,"line":12225},[123,50688,34576],{"class":2673},[123,50690,50691],{"class":125,"line":12230},[123,50692,34581],{"class":2673},[123,50694,50695],{"class":125,"line":12235},[123,50696,232],{"emptyLinePlaceholder":231},[123,50698,50699],{"class":125,"line":12244},[123,50700,34590],{"class":2673},[123,50702,50703,50705,50707],{"class":125,"line":12249},[123,50704,34359],{"class":133},[123,50706,34597],{"class":337},[123,50708,34600],{"class":129},[123,50710,50711,50713,50715,50717,50719,50721,50723,50725,50727],{"class":125,"line":12255},[123,50712,33652],{"class":129},[123,50714,134],{"class":133},[123,50716,32867],{"class":129},[123,50718,33659],{"class":143},[123,50720,4158],{"class":133},[123,50722,33664],{"class":129},[123,50724,4155],{"class":133},[123,50726,34619],{"class":143},[123,50728,288],{"class":129},[123,50730,50731],{"class":125,"line":12276},[123,50732,232],{"emptyLinePlaceholder":231},[123,50734,50735],{"class":125,"line":12282},[123,50736,34634],{"class":2673},[123,50738,50739],{"class":125,"line":12296},[123,50740,34639],{"class":2673},[123,50742,50743],{"class":125,"line":12302},[123,50744,34644],{"class":2673},[123,50746,50747,50749,50751,50753,50755,50757,50759],{"class":125,"line":12329},[123,50748,34649],{"class":129},[123,50750,134],{"class":133},[123,50752,34654],{"class":129},[123,50754,34657],{"class":279},[123,50756,134],{"class":133},[123,50758,34662],{"class":164},[123,50760,288],{"class":129},[123,50762,50763],{"class":125,"line":12338},[123,50764,232],{"emptyLinePlaceholder":231},[123,50766,50767],{"class":125,"line":12344},[123,50768,34673],{"class":2673},[123,50770,50771,50773,50775],{"class":125,"line":12352},[123,50772,34678],{"class":129},[123,50774,134],{"class":133},[123,50776,34683],{"class":129},[123,50778,50779],{"class":125,"line":12357},[123,50780,232],{"emptyLinePlaceholder":231},[123,50782,50783],{"class":125,"line":19032},[123,50784,34692],{"class":2673},[123,50786,50787,50789,50791],{"class":125,"line":19038},[123,50788,33704],{"class":129},[123,50790,134],{"class":133},[123,50792,34701],{"class":129},[123,50794,50795],{"class":125,"line":19061},[123,50796,34706],{"class":2673},[123,50798,50799],{"class":125,"line":19067},[123,50800,34711],{"class":2673},[123,50802,50803],{"class":125,"line":19090},[123,50804,34716],{"class":2673},[123,50806,50807,50809,50811],{"class":125,"line":19104},[123,50808,34721],{"class":129},[123,50810,134],{"class":133},[123,50812,34726],{"class":129},[123,50814,50815],{"class":125,"line":19124},[123,50816,232],{"emptyLinePlaceholder":231},[123,50818,50819],{"class":125,"line":19130},[123,50820,34739],{"class":2673},[123,50822,50823],{"class":125,"line":19141},[123,50824,34744],{"class":2673},[123,50826,50827,50829,50831],{"class":125,"line":19164},[123,50828,34749],{"class":129},[123,50830,134],{"class":133},[123,50832,34754],{"class":164},[123,50834,50835],{"class":125,"line":19186},[123,50836,34759],{"class":2673},[123,50838,50839,50841,50843],{"class":125,"line":19191},[123,50840,34764],{"class":129},[123,50842,134],{"class":133},[123,50844,34769],{"class":129},[123,50846,50847],{"class":125,"line":19197},[123,50848,34774],{"class":2673},[123,50850,50851,50853,50855],{"class":125,"line":19211},[123,50852,34779],{"class":129},[123,50854,134],{"class":133},[123,50856,34769],{"class":129},[123,50858,50859],{"class":125,"line":19224},[123,50860,34788],{"class":2673},[123,50862,50863,50865,50867],{"class":125,"line":19229},[123,50864,34793],{"class":129},[123,50866,134],{"class":133},[123,50868,34769],{"class":129},[123,50870,50871],{"class":125,"line":19243},[123,50872,34802],{"class":2673},[123,50874,50875,50877,50879],{"class":125,"line":19248},[123,50876,34807],{"class":129},[123,50878,134],{"class":133},[123,50880,34769],{"class":129},[123,50882,50883],{"class":125,"line":19254},[123,50884,232],{"emptyLinePlaceholder":231},[123,50886,50887],{"class":125,"line":19259},[123,50888,34820],{"class":2673},[123,50890,50891,50893,50895],{"class":125,"line":19273},[123,50892,34825],{"class":129},[123,50894,134],{"class":133},[123,50896,34830],{"class":129},[123,50898,50899],{"class":125,"line":19278},[123,50900,232],{"emptyLinePlaceholder":231},[123,50902,50903],{"class":125,"line":19283},[123,50904,34843],{"class":2673},[123,50906,50907,50909,50911,50913,50915],{"class":125,"line":19297},[123,50908,5641],{"class":133},[123,50910,34850],{"class":129},[123,50912,1405],{"class":133},[123,50914,34855],{"class":164},[123,50916,34858],{"class":129},[123,50918,50919,50921,50923,50925,50927,50929,50931,50933,50935,50937,50939],{"class":125,"line":19309},[123,50920,34863],{"class":164},[123,50922,1315],{"class":129},[123,50924,34868],{"class":143},[123,50926,34871],{"class":164},[123,50928,3187],{"class":143},[123,50930,34871],{"class":164},[123,50932,2859],{"class":143},[123,50934,34880],{"class":129},[123,50936,3135],{"class":133},[123,50938,2825],{"class":164},[123,50940,32913],{"class":129},[123,50942,50943,50945,50947,50949,50951,50953],{"class":125,"line":19314},[123,50944,34863],{"class":164},[123,50946,1315],{"class":129},[123,50948,34895],{"class":143},[123,50950,3060],{"class":133},[123,50952,2193],{"class":164},[123,50954,288],{"class":129},[123,50956,50957],{"class":125,"line":19327},[123,50958,232],{"emptyLinePlaceholder":231},[123,50960,50961],{"class":125,"line":19332},[123,50962,34910],{"class":2673},[123,50964,50965],{"class":125,"line":19337},[123,50966,34915],{"class":2673},[123,50968,50969,50971,50973],{"class":125,"line":19342},[123,50970,34920],{"class":129},[123,50972,134],{"class":133},[123,50974,34754],{"class":164},[123,50976,50977],{"class":125,"line":19355},[123,50978,34929],{"class":2673},[123,50980,50981,50983,50985],{"class":125,"line":19360},[123,50982,34934],{"class":129},[123,50984,134],{"class":133},[123,50986,5526],{"class":164},[123,50988,50989],{"class":125,"line":35045},[123,50990,34943],{"class":2673},[123,50992,50993,50995,50997],{"class":125,"line":35051},[123,50994,34948],{"class":129},[123,50996,134],{"class":133},[123,50998,34754],{"class":164},[123,51000,51001],{"class":125,"line":35057},[123,51002,34957],{"class":2673},[123,51004,51005,51007,51009],{"class":125,"line":35063},[123,51006,34962],{"class":129},[123,51008,134],{"class":133},[123,51010,5526],{"class":164},[123,51012,51013],{"class":125,"line":35069},[123,51014,34971],{"class":2673},[123,51016,51017,51019,51021],{"class":125,"line":35080},[123,51018,34976],{"class":129},[123,51020,134],{"class":133},[123,51022,5526],{"class":164},[123,51024,51025],{"class":125,"line":35086},[123,51026,34985],{"class":2673},[123,51028,51029,51031,51033],{"class":125,"line":35106},[123,51030,34990],{"class":129},[123,51032,134],{"class":133},[123,51034,5526],{"class":164},[123,51036,51037],{"class":125,"line":35112},[123,51038,34999],{"class":2673},[123,51040,51041,51043,51045,51047,51049],{"class":125,"line":35123},[123,51042,5843],{"class":133},[123,51044,34013],{"class":129},[123,51046,1405],{"class":133},[123,51048,34018],{"class":164},[123,51050,35012],{"class":129},[123,51052,51053],{"class":125,"line":35129},[123,51054,35017],{"class":2673},[123,51056,51057,51059,51061],{"class":125,"line":35135},[123,51058,35022],{"class":129},[123,51060,134],{"class":133},[123,51062,35027],{"class":129},[123,51064,51065],{"class":125,"line":35141},[123,51066,35032],{"class":2673},[123,51068,51069,51071,51073],{"class":125,"line":35147},[123,51070,35037],{"class":129},[123,51072,134],{"class":133},[123,51074,35042],{"class":129},[123,51076,51077],{"class":125,"line":35153},[123,51078,35048],{"class":2673},[123,51080,51081],{"class":125,"line":35159},[123,51082,35054],{"class":129},[123,51084,51085],{"class":125,"line":35165},[123,51086,35060],{"class":2673},[123,51088,51089],{"class":125,"line":35185},[123,51090,35066],{"class":2673},[123,51092,51093,51095,51097],{"class":125,"line":35191},[123,51094,35072],{"class":129},[123,51096,134],{"class":133},[123,51098,35077],{"class":129},[123,51100,51101],{"class":125,"line":35207},[123,51102,35083],{"class":2673},[123,51104,51105,51107,51109,51111,51113,51115,51117],{"class":125,"line":35213},[123,51106,35089],{"class":129},[123,51108,134],{"class":133},[123,51110,35094],{"class":129},[123,51112,35097],{"class":279},[123,51114,134],{"class":133},[123,51116,2825],{"class":164},[123,51118,288],{"class":129},[123,51120,51121],{"class":125,"line":35227},[123,51122,35109],{"class":2673},[123,51124,51125,51127,51129],{"class":125,"line":35233},[123,51126,35115],{"class":129},[123,51128,134],{"class":133},[123,51130,35120],{"class":129},[123,51132,51133],{"class":125,"line":35248},[123,51134,35126],{"class":2673},[123,51136,51137],{"class":125,"line":35254},[123,51138,35132],{"class":129},[123,51140,51141],{"class":125,"line":35263},[123,51142,35138],{"class":2673},[123,51144,51145],{"class":125,"line":35269},[123,51146,35144],{"class":129},[123,51148,51149],{"class":125,"line":35278},[123,51150,35150],{"class":2673},[123,51152,51153],{"class":125,"line":35284},[123,51154,35156],{"class":129},[123,51156,51157],{"class":125,"line":35290},[123,51158,35162],{"class":2673},[123,51160,51161,51163,51165,51167,51169,51171,51173],{"class":125,"line":35299},[123,51162,35168],{"class":129},[123,51164,11909],{"class":133},[123,51166,35173],{"class":129},[123,51168,3060],{"class":133},[123,51170,35178],{"class":129},[123,51172,2799],{"class":164},[123,51174,288],{"class":129},[123,51176,51177],{"class":125,"line":35305},[123,51178,35188],{"class":2673},[123,51180,51181,51183,51185,51187,51189],{"class":125,"line":35316},[123,51182,35194],{"class":129},[123,51184,11909],{"class":133},[123,51186,35199],{"class":129},[123,51188,5391],{"class":133},[123,51190,35204],{"class":129},[123,51192,51193],{"class":125,"line":35322},[123,51194,35210],{"class":2673},[123,51196,51197,51199,51201,51203,51205],{"class":125,"line":35341},[123,51198,35216],{"class":129},[123,51200,11909],{"class":133},[123,51202,35178],{"class":129},[123,51204,2799],{"class":164},[123,51206,288],{"class":129},[123,51208,51209],{"class":125,"line":35347},[123,51210,35230],{"class":2673},[123,51212,51213,51215,51217,51219,51221],{"class":125,"line":35358},[123,51214,5843],{"class":133},[123,51216,35238],{"class":129},[123,51218,1405],{"class":133},[123,51220,34018],{"class":164},[123,51222,35245],{"class":129},[123,51224,51225],{"class":125,"line":35364},[123,51226,35251],{"class":2673},[123,51228,51229,51231,51233],{"class":125,"line":35384},[123,51230,35022],{"class":129},[123,51232,134],{"class":133},[123,51234,35027],{"class":129},[123,51236,51237],{"class":125,"line":35400},[123,51238,35266],{"class":2673},[123,51240,51241,51243,51245],{"class":125,"line":35406},[123,51242,35037],{"class":129},[123,51244,134],{"class":133},[123,51246,35042],{"class":129},[123,51248,51249],{"class":125,"line":35420},[123,51250,35281],{"class":2673},[123,51252,51253],{"class":125,"line":35426},[123,51254,35287],{"class":129},[123,51256,51257],{"class":125,"line":35432},[123,51258,38766],{"class":2673},[123,51260,51261,51263],{"class":125,"line":35443},[123,51262,35293],{"class":133},[123,51264,35296],{"class":129},[123,51266,51267],{"class":125,"line":35449},[123,51268,35302],{"class":2673},[123,51270,51271,51273,51275],{"class":125,"line":35455},[123,51272,38781],{"class":129},[123,51274,134],{"class":133},[123,51276,35077],{"class":129},[123,51278,51279],{"class":125,"line":35465},[123,51280,35319],{"class":2673},[123,51282,51283,51285,51287,51289,51291,51293,51295],{"class":125,"line":35471},[123,51284,38794],{"class":129},[123,51286,134],{"class":133},[123,51288,35094],{"class":129},[123,51290,35097],{"class":279},[123,51292,134],{"class":133},[123,51294,2825],{"class":164},[123,51296,288],{"class":129},[123,51298,51299],{"class":125,"line":35482},[123,51300,35344],{"class":2673},[123,51302,51303,51305,51307],{"class":125,"line":35488},[123,51304,38815],{"class":129},[123,51306,134],{"class":133},[123,51308,35120],{"class":129},[123,51310,51311],{"class":125,"line":35498},[123,51312,35361],{"class":2673},[123,51314,51315,51317,51319,51321,51323,51325,51327],{"class":125,"line":35503},[123,51316,38828],{"class":129},[123,51318,11909],{"class":133},[123,51320,38833],{"class":129},[123,51322,3060],{"class":133},[123,51324,35178],{"class":129},[123,51326,2799],{"class":164},[123,51328,288],{"class":129},[123,51330,51331,51333,51335,51337,51339],{"class":125,"line":35509},[123,51332,38846],{"class":129},[123,51334,11909],{"class":133},[123,51336,35199],{"class":129},[123,51338,5391],{"class":133},[123,51340,35204],{"class":129},[123,51342,51343],{"class":125,"line":35558},[123,51344,38859],{"class":2673},[123,51346,51347,51349,51351,51353,51355],{"class":125,"line":35605},[123,51348,38864],{"class":129},[123,51350,11909],{"class":133},[123,51352,35178],{"class":129},[123,51354,2799],{"class":164},[123,51356,288],{"class":129},[123,51358,51359],{"class":125,"line":35610},[123,51360,35423],{"class":2673},[123,51362,51363],{"class":125,"line":35616},[123,51364,35429],{"class":2673},[123,51366,51367,51369,51371],{"class":125,"line":35635},[123,51368,35435],{"class":129},[123,51370,3187],{"class":133},[123,51372,35440],{"class":129},[123,51374,51375],{"class":125,"line":35641},[123,51376,35446],{"class":2673},[123,51378,51379],{"class":125,"line":35660},[123,51380,35452],{"class":2673},[123,51382,51383,51385,51387],{"class":125,"line":35666},[123,51384,35458],{"class":129},[123,51386,3187],{"class":133},[123,51388,35440],{"class":129},[123,51390,51391],{"class":125,"line":35672},[123,51392,35468],{"class":2673},[123,51394,51395,51397,51399],{"class":125,"line":35682},[123,51396,35474],{"class":129},[123,51398,3187],{"class":133},[123,51400,35479],{"class":129},[123,51402,51403],{"class":125,"line":35687},[123,51404,35485],{"class":2673},[123,51406,51407,51409,51411],{"class":125,"line":35693},[123,51408,35491],{"class":129},[123,51410,3187],{"class":133},[123,51412,35479],{"class":129},[123,51414,51415],{"class":125,"line":35709},[123,51416,232],{"emptyLinePlaceholder":231},[123,51418,51419],{"class":125,"line":35754},[123,51420,35506],{"class":2673},[123,51422,51423,51425,51427,51429,51431,51433,51435,51437,51439,51441,51443,51445,51447,51449,51451,51453,51455,51457,51459,51461],{"class":125,"line":35760},[123,51424,34863],{"class":164},[123,51426,1315],{"class":129},[123,51428,6032],{"class":143},[123,51430,34871],{"class":164},[123,51432,35520],{"class":143},[123,51434,3495],{"class":164},[123,51436,35525],{"class":133},[123,51438,3545],{"class":164},[123,51440,35530],{"class":143},[123,51442,3495],{"class":164},[123,51444,35525],{"class":133},[123,51446,3545],{"class":164},[123,51448,6032],{"class":143},[123,51450,35541],{"class":129},[123,51452,3135],{"class":133},[123,51454,2825],{"class":164},[123,51456,35548],{"class":129},[123,51458,3135],{"class":133},[123,51460,2825],{"class":164},[123,51462,35555],{"class":129},[123,51464,51465,51467,51469,51471,51473,51475,51477,51479,51481,51483,51485,51487,51489,51491,51493,51495,51497,51499,51501,51503],{"class":125,"line":35766},[123,51466,34863],{"class":164},[123,51468,1315],{"class":129},[123,51470,6032],{"class":143},[123,51472,34871],{"class":164},[123,51474,35569],{"class":143},[123,51476,3495],{"class":164},[123,51478,35525],{"class":133},[123,51480,3545],{"class":164},[123,51482,35578],{"class":143},[123,51484,3495],{"class":164},[123,51486,35525],{"class":133},[123,51488,3545],{"class":164},[123,51490,6032],{"class":143},[123,51492,35589],{"class":129},[123,51494,3135],{"class":133},[123,51496,2825],{"class":164},[123,51498,35596],{"class":129},[123,51500,3135],{"class":133},[123,51502,2825],{"class":164},[123,51504,35555],{"class":129},[123,51506,51507],{"class":125,"line":35772},[123,51508,232],{"emptyLinePlaceholder":231},[123,51510,51511],{"class":125,"line":35783},[123,51512,35613],{"class":2673},[123,51514,51515,51517,51519,51521,51523,51525,51527],{"class":125,"line":35789},[123,51516,4940],{"class":133},[123,51518,35621],{"class":129},[123,51520,3135],{"class":133},[123,51522,2825],{"class":164},[123,51524,3539],{"class":129},[123,51526,3559],{"class":133},[123,51528,35632],{"class":129},[123,51530,51531],{"class":125,"line":35795},[123,51532,35638],{"class":2673},[123,51534,51535,51537,51539,51541,51543,51545,51547],{"class":125,"line":35801},[123,51536,35644],{"class":129},[123,51538,2656],{"class":164},[123,51540,134],{"class":133},[123,51542,35651],{"class":129},[123,51544,3135],{"class":133},[123,51546,2825],{"class":164},[123,51548,998],{"class":129},[123,51550,51551],{"class":125,"line":35819},[123,51552,35663],{"class":2673},[123,51554,51555],{"class":125,"line":35833},[123,51556,35669],{"class":2673},[123,51558,51559,51561,51563],{"class":125,"line":35842},[123,51560,35675],{"class":129},[123,51562,134],{"class":133},[123,51564,34726],{"class":129},[123,51566,51567],{"class":125,"line":35851},[123,51568,232],{"emptyLinePlaceholder":231},[123,51570,51571],{"class":125,"line":35860},[123,51572,35690],{"class":2673},[123,51574,51575,51577,51579,51581,51583],{"class":125,"line":35869},[123,51576,35696],{"class":129},[123,51578,134],{"class":133},[123,51580,35701],{"class":129},[123,51582,3135],{"class":133},[123,51584,35706],{"class":129},[123,51586,51587,51589,51591,51593,51595,51597,51599,51601,51603,51605,51607,51609,51611,51613,51615,51617,51619,51621],{"class":125,"line":35875},[123,51588,34863],{"class":164},[123,51590,1315],{"class":129},[123,51592,35716],{"class":143},[123,51594,3495],{"class":164},[123,51596,35721],{"class":133},[123,51598,3545],{"class":164},[123,51600,3147],{"class":143},[123,51602,3495],{"class":164},[123,51604,35721],{"class":133},[123,51606,3545],{"class":164},[123,51608,35734],{"class":143},[123,51610,35737],{"class":129},[123,51612,35740],{"class":133},[123,51614,3506],{"class":164},[123,51616,35745],{"class":129},[123,51618,2935],{"class":133},[123,51620,3506],{"class":164},[123,51622,32913],{"class":129},[123,51624,51625],{"class":125,"line":35881},[123,51626,39143],{"class":2673},[123,51628,51629],{"class":125,"line":35889},[123,51630,39148],{"class":2673},[123,51632,51633,51635,51637],{"class":125,"line":35894},[123,51634,39153],{"class":129},[123,51636,35778],{"class":143},[123,51638,288],{"class":129},[123,51640,51641],{"class":125,"line":35900},[123,51642,35798],{"class":2673},[123,51644,51645,51647,51649,51651,51653,51655],{"class":125,"line":35911},[123,51646,35804],{"class":129},[123,51648,134],{"class":133},[123,51650,35809],{"class":129},[123,51652,35812],{"class":279},[123,51654,134],{"class":133},[123,51656,186],{"class":129},[123,51658,51659,51661,51663,51665],{"class":125,"line":35917},[123,51660,35822],{"class":143},[123,51662,3460],{"class":129},[123,51664,35827],{"class":164},[123,51666,35830],{"class":129},[123,51668,51669,51671],{"class":125,"line":35937},[123,51670,35836],{"class":143},[123,51672,35839],{"class":129},[123,51674,51675,51677],{"class":125,"line":35943},[123,51676,35845],{"class":143},[123,51678,35848],{"class":129},[123,51680,51681,51683],{"class":125,"line":35949},[123,51682,35854],{"class":143},[123,51684,35857],{"class":129},[123,51686,51687,51689],{"class":125,"line":35955},[123,51688,35863],{"class":143},[123,51690,35866],{"class":129},[123,51692,51693],{"class":125,"line":35972},[123,51694,35872],{"class":129},[123,51696,51697],{"class":125,"line":35978},[123,51698,35878],{"class":2673},[123,51700,51701,51703],{"class":125,"line":35984},[123,51702,6529],{"class":133},[123,51704,35886],{"class":129},[123,51706,51707],{"class":125,"line":35990},[123,51708,232],{"emptyLinePlaceholder":231},[123,51710,51711],{"class":125,"line":35996},[123,51712,35897],{"class":2673},[123,51714,51715,51717,51719],{"class":125,"line":36002},[123,51716,34359],{"class":133},[123,51718,35905],{"class":337},[123,51720,35908],{"class":129},[123,51722,51723],{"class":125,"line":36029},[123,51724,35914],{"class":2673},[123,51726,51727,51729,51731,51733,51735,51737,51739,51741],{"class":125,"line":36053},[123,51728,35920],{"class":129},[123,51730,34105],{"class":279},[123,51732,134],{"class":133},[123,51734,1315],{"class":129},[123,51736,2215],{"class":164},[123,51738,2985],{"class":129},[123,51740,2901],{"class":164},[123,51742,32913],{"class":129},[123,51744,51745],{"class":125,"line":36059},[123,51746,35940],{"class":2673},[123,51748,51749],{"class":125,"line":36065},[123,51750,35946],{"class":2673},[123,51752,51753],{"class":125,"line":36071},[123,51754,35952],{"class":2673},[123,51756,51757,51759,51761,51763,51765,51767,51769],{"class":125,"line":36082},[123,51758,34139],{"class":129},[123,51760,2825],{"class":164},[123,51762,2985],{"class":129},[123,51764,2692],{"class":164},[123,51766,2985],{"class":129},[123,51768,2825],{"class":164},[123,51770,288],{"class":129},[123,51772,51773],{"class":125,"line":36093},[123,51774,35975],{"class":2673},[123,51776,51777],{"class":125,"line":36099},[123,51778,35981],{"class":2673},[123,51780,51781],{"class":125,"line":36116},[123,51782,35987],{"class":2673},[123,51784,51785],{"class":125,"line":36139},[123,51786,35993],{"class":2673},[123,51788,51789],{"class":125,"line":36162},[123,51790,35999],{"class":2673},[123,51792,51793,51795,51797,51799,51801,51803,51805,51807,51809],{"class":125,"line":36168},[123,51794,36005],{"class":129},[123,51796,36008],{"class":143},[123,51798,36011],{"class":129},[123,51800,36014],{"class":143},[123,51802,2985],{"class":129},[123,51804,36019],{"class":279},[123,51806,134],{"class":133},[123,51808,36024],{"class":143},[123,51810,288],{"class":129},[123,51812,51813,51815,51817,51819,51821,51823,51825,51827,51829],{"class":125,"line":36173},[123,51814,36005],{"class":129},[123,51816,36008],{"class":143},[123,51818,36036],{"class":129},[123,51820,36039],{"class":143},[123,51822,2985],{"class":129},[123,51824,36019],{"class":279},[123,51826,134],{"class":133},[123,51828,36048],{"class":143},[123,51830,288],{"class":129},[123,51832,51833],{"class":125,"line":36182},[123,51834,36056],{"class":2673},[123,51836,51837],{"class":125,"line":36192},[123,51838,36062],{"class":129},[123,51840,51841],{"class":125,"line":36198},[123,51842,36068],{"class":2673},[123,51844,51845,51847,51849],{"class":125,"line":36203},[123,51846,36074],{"class":129},[123,51848,36077],{"class":143},[123,51850,288],{"class":129},[123,51852,51853,51855,51857],{"class":125,"line":36209},[123,51854,36085],{"class":129},[123,51856,36088],{"class":143},[123,51858,288],{"class":129},[123,51860,51861],{"class":125,"line":36222},[123,51862,36096],{"class":2673},[123,51864,51865,51867,51869,51871,51873,51875,51877],{"class":125,"line":36228},[123,51866,34139],{"class":129},[123,51868,2825],{"class":164},[123,51870,2985],{"class":129},[123,51872,2692],{"class":164},[123,51874,2985],{"class":129},[123,51876,2692],{"class":164},[123,51878,288],{"class":129},[123,51880,51881,51883,51885,51887,51889,51891,51893,51895,51897],{"class":125,"line":36239},[123,51882,36005],{"class":129},[123,51884,36008],{"class":143},[123,51886,36123],{"class":129},[123,51888,36014],{"class":143},[123,51890,2985],{"class":129},[123,51892,36019],{"class":279},[123,51894,134],{"class":133},[123,51896,36134],{"class":143},[123,51898,288],{"class":129},[123,51900,51901,51903,51905,51907,51909,51911,51913,51915,51917],{"class":125,"line":36250},[123,51902,36005],{"class":129},[123,51904,36008],{"class":143},[123,51906,36146],{"class":129},[123,51908,36039],{"class":143},[123,51910,2985],{"class":129},[123,51912,36019],{"class":279},[123,51914,134],{"class":133},[123,51916,36157],{"class":143},[123,51918,288],{"class":129},[123,51920,51921],{"class":125,"line":36269},[123,51922,36165],{"class":2673},[123,51924,51926],{"class":125,"line":51925},219,[123,51927,36062],{"class":129},[123,51929,51931,51933,51935],{"class":125,"line":51930},220,[123,51932,36074],{"class":129},[123,51934,36008],{"class":143},[123,51936,288],{"class":129},[123,51938,51940,51942,51944],{"class":125,"line":51939},221,[123,51941,36085],{"class":129},[123,51943,36187],{"class":143},[123,51945,288],{"class":129},[123,51947,51949],{"class":125,"line":51948},222,[123,51950,36195],{"class":129},[123,51952,51954],{"class":125,"line":51953},223,[123,51955,232],{"emptyLinePlaceholder":231},[123,51957,51959],{"class":125,"line":51958},224,[123,51960,36206],{"class":2673},[123,51962,51964,51966,51968,51970,51972],{"class":125,"line":51963},225,[123,51965,3998],{"class":133},[123,51967,33635],{"class":164},[123,51969,5391],{"class":133},[123,51971,33640],{"class":143},[123,51973,1344],{"class":129},[123,51975,51977],{"class":125,"line":51976},226,[123,51978,36225],{"class":2673},[123,51980,51982,51984,51986],{"class":125,"line":51981},227,[123,51983,46954],{"class":129},[123,51985,134],{"class":133},[123,51987,46959],{"class":129},[123,51989,51991,51993,51995],{"class":125,"line":51990},228,[123,51992,36242],{"class":129},[123,51994,134],{"class":133},[123,51996,36247],{"class":129},[123,51998,52000,52002,52004,52006,52008,52010,52012],{"class":125,"line":51999},229,[123,52001,35804],{"class":129},[123,52003,134],{"class":133},[123,52005,46976],{"class":129},[123,52007,36260],{"class":279},[123,52009,134],{"class":133},[123,52011,3506],{"class":164},[123,52013,288],{"class":129},[123,52015,52017],{"class":125,"line":52016},230,[123,52018,36272],{"class":129},[24425,52020,52022],{"id":52021},"_242测试代码","2.4.2.测试代码",[19,52024,52025],{},"使用测试集进行测试与推理",[113,52027,52029],{"className":115,"code":52028,"language":117,"meta":118,"style":118},"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",[120,52030,52031,52037,52047,52057,52068,52078,52082,52086,52094,52099,52103,52120,52124,52128,52132,52136,52140,52172,52176,52184,52188,52200,52204,52208,52212,52216,52220,52224,52228,52232,52250,52264,52268,52278,52288,52298,52304,52308,52312,52320,52324,52340,52348,52352,52356,52364,52372,52376,52380,52384,52388,52394,52398,52408,52416,52424,52428,52432,52436,52444,52448,52464,52468,52472,52476,52488,52492,52504,52508,52512,52524,52528,52538,52542,52546,52558,52562,52570,52574,52578,52586,52590,52598,52602,52606,52610,52614,52618,52634,52642,52646,52650,52668,52674,52678,52688,52696,52704,52708,52712,52716,52720,52728,52732,52748,52752,52760,52768],{"__ignoreMap":118},[123,52032,52033,52035],{"class":125,"line":126},[123,52034,223],{"class":133},[123,52036,32812],{"class":129},[123,52038,52039,52041,52043,52045],{"class":125,"line":140},[123,52040,223],{"class":133},[123,52042,33829],{"class":129},[123,52044,547],{"class":133},[123,52046,33834],{"class":129},[123,52048,52049,52051,52053,52055],{"class":125,"line":156},[123,52050,391],{"class":133},[123,52052,33812],{"class":129},[123,52054,223],{"class":133},[123,52056,33817],{"class":129},[123,52058,52059,52061,52063,52065],{"class":125,"line":168},[123,52060,391],{"class":133},[123,52062,33783],{"class":129},[123,52064,223],{"class":133},[123,52066,52067],{"class":129}," ImageFolder\n",[123,52069,52070,52072,52074,52076],{"class":125,"line":268},[123,52071,391],{"class":133},[123,52073,34326],{"class":129},[123,52075,223],{"class":133},[123,52077,47048],{"class":129},[123,52079,52080],{"class":125,"line":291},[123,52081,232],{"emptyLinePlaceholder":231},[123,52083,52084],{"class":125,"line":300},[123,52085,36362],{"class":2673},[123,52087,52088,52090,52092],{"class":125,"line":305},[123,52089,34359],{"class":133},[123,52091,36369],{"class":337},[123,52093,34365],{"class":129},[123,52095,52096],{"class":125,"line":316},[123,52097,52098],{"class":2673},"   # 导入自己的数据集，并进行数据处理\n",[123,52100,52101],{"class":125,"line":673},[123,52102,50368],{"class":2673},[123,52104,52105,52107,52109,52111,52113,52115,52118],{"class":125,"line":692},[123,52106,50373],{"class":164},[123,52108,134],{"class":133},[123,52110,3272],{"class":133},[123,52112,2859],{"class":143},[123,52114,3161],{"class":164},[123,52116,52117],{"class":50384},"\u002Fdata\u002Ftest",[123,52119,27555],{"class":143},[123,52121,52122],{"class":125,"line":713},[123,52123,232],{"emptyLinePlaceholder":231},[123,52125,52126],{"class":125,"line":718},[123,52127,50396],{"class":2673},[123,52129,52130],{"class":125,"line":1138},[123,52131,50401],{"class":2673},[123,52133,52134],{"class":125,"line":1429},[123,52135,50406],{"class":2673},[123,52137,52138],{"class":125,"line":1439},[123,52139,50411],{"class":2673},[123,52141,52142,52144,52146,52148,52150,52152,52154,52156,52158,52160,52162,52164,52166,52168,52170],{"class":125,"line":1444},[123,52143,50416],{"class":129},[123,52145,134],{"class":133},[123,52147,50421],{"class":129},[123,52149,50424],{"class":164},[123,52151,2985],{"class":129},[123,52153,50429],{"class":164},[123,52155,2985],{"class":129},[123,52157,50434],{"class":164},[123,52159,50437],{"class":129},[123,52161,50440],{"class":164},[123,52163,2985],{"class":129},[123,52165,50445],{"class":164},[123,52167,2985],{"class":129},[123,52169,50450],{"class":164},[123,52171,444],{"class":129},[123,52173,52174],{"class":125,"line":1453},[123,52175,50457],{"class":2673},[123,52177,52178,52180,52182],{"class":125,"line":1458},[123,52179,50462],{"class":129},[123,52181,134],{"class":133},[123,52183,50467],{"class":129},[123,52185,52186],{"class":125,"line":1476},[123,52187,50472],{"class":2673},[123,52189,52190,52192,52194,52196,52198],{"class":125,"line":1494},[123,52191,50477],{"class":129},[123,52193,33913],{"class":164},[123,52195,2985],{"class":129},[123,52197,33913],{"class":164},[123,52199,45030],{"class":129},[123,52201,52202],{"class":125,"line":1499},[123,52203,50490],{"class":2673},[123,52205,52206],{"class":125,"line":1517},[123,52207,50495],{"class":129},[123,52209,52210],{"class":125,"line":1534},[123,52211,50500],{"class":129},[123,52213,52214],{"class":125,"line":1539},[123,52215,50505],{"class":2673},[123,52217,52218],{"class":125,"line":2080},[123,52219,50510],{"class":2673},[123,52221,52222],{"class":125,"line":2097},[123,52223,232],{"emptyLinePlaceholder":231},[123,52225,52226],{"class":125,"line":2114},[123,52227,50519],{"class":2673},[123,52229,52230],{"class":125,"line":2125},[123,52231,50524],{"class":2673},[123,52233,52234,52236,52238,52240,52242,52244,52246,52248],{"class":125,"line":2130},[123,52235,36376],{"class":129},[123,52237,134],{"class":133},[123,52239,50533],{"class":129},[123,52241,50536],{"class":164},[123,52243,2985],{"class":129},[123,52245,50541],{"class":279},[123,52247,134],{"class":133},[123,52249,50546],{"class":129},[123,52251,52252,52254,52256,52258,52260,52262],{"class":125,"line":5033},[123,52253,36432],{"class":129},[123,52255,134],{"class":133},[123,52257,33946],{"class":129},[123,52259,33949],{"class":279},[123,52261,134],{"class":133},[123,52263,36443],{"class":129},[123,52265,52266],{"class":125,"line":5041},[123,52267,36448],{"class":2673},[123,52269,52270,52272,52274,52276],{"class":125,"line":5046},[123,52271,36453],{"class":279},[123,52273,134],{"class":133},[123,52275,2825],{"class":164},[123,52277,153],{"class":129},[123,52279,52280,52282,52284,52286],{"class":125,"line":5052},[123,52281,36464],{"class":279},[123,52283,134],{"class":133},[123,52285,870],{"class":164},[123,52287,153],{"class":129},[123,52289,52290,52292,52294,52296],{"class":125,"line":5058},[123,52291,36475],{"class":279},[123,52293,134],{"class":133},[123,52295,2799],{"class":164},[123,52297,288],{"class":129},[123,52299,52300,52302],{"class":125,"line":5063},[123,52301,6529],{"class":133},[123,52303,36488],{"class":129},[123,52305,52306],{"class":125,"line":10380},[123,52307,232],{"emptyLinePlaceholder":231},[123,52309,52310],{"class":125,"line":10404},[123,52311,36497],{"class":2673},[123,52313,52314,52316,52318],{"class":125,"line":10409},[123,52315,34359],{"class":133},[123,52317,36504],{"class":337},[123,52319,36507],{"class":129},[123,52321,52322],{"class":125,"line":10415},[123,52323,36512],{"class":2673},[123,52325,52326,52328,52330,52332,52334,52336,52338],{"class":125,"line":10442},[123,52327,33652],{"class":129},[123,52329,134],{"class":133},[123,52331,33659],{"class":143},[123,52333,4158],{"class":133},[123,52335,33664],{"class":129},[123,52337,4155],{"class":133},[123,52339,36529],{"class":143},[123,52341,52342,52344,52346],{"class":125,"line":10447},[123,52343,33704],{"class":129},[123,52345,134],{"class":133},[123,52347,34701],{"class":129},[123,52349,52350],{"class":125,"line":10453},[123,52351,232],{"emptyLinePlaceholder":231},[123,52353,52354],{"class":125,"line":10465},[123,52355,36546],{"class":2673},[123,52357,52358,52360,52362],{"class":125,"line":10477},[123,52359,36551],{"class":129},[123,52361,134],{"class":133},[123,52363,34754],{"class":164},[123,52365,52366,52368,52370],{"class":125,"line":10489},[123,52367,36560],{"class":129},[123,52369,134],{"class":133},[123,52371,5526],{"class":164},[123,52373,52374],{"class":125,"line":12148},[123,52375,232],{"emptyLinePlaceholder":231},[123,52377,52378],{"class":125,"line":12173},[123,52379,36573],{"class":2673},[123,52381,52382],{"class":125,"line":12196},[123,52383,36578],{"class":2673},[123,52385,52386],{"class":125,"line":12220},[123,52387,36583],{"class":2673},[123,52389,52390,52392],{"class":125,"line":12225},[123,52391,36588],{"class":133},[123,52393,35296],{"class":129},[123,52395,52396],{"class":125,"line":12230},[123,52397,36595],{"class":2673},[123,52399,52400,52402,52404,52406],{"class":125,"line":12235},[123,52401,5843],{"class":133},[123,52403,36602],{"class":129},[123,52405,1405],{"class":133},[123,52407,36607],{"class":129},[123,52409,52410,52412,52414],{"class":125,"line":12244},[123,52411,36612],{"class":129},[123,52413,134],{"class":133},[123,52415,36617],{"class":129},[123,52417,52418,52420,52422],{"class":125,"line":12249},[123,52419,36622],{"class":129},[123,52421,134],{"class":133},[123,52423,36627],{"class":129},[123,52425,52426],{"class":125,"line":12255},[123,52427,36632],{"class":2673},[123,52429,52430],{"class":125,"line":12276},[123,52431,35287],{"class":129},[123,52433,52434],{"class":125,"line":12282},[123,52435,36641],{"class":2673},[123,52437,52438,52440,52442],{"class":125,"line":12296},[123,52439,35072],{"class":129},[123,52441,134],{"class":133},[123,52443,36650],{"class":129},[123,52445,52446],{"class":125,"line":12302},[123,52447,36655],{"class":2673},[123,52449,52450,52452,52454,52456,52458,52460,52462],{"class":125,"line":12329},[123,52451,35089],{"class":129},[123,52453,134],{"class":133},[123,52455,35094],{"class":129},[123,52457,35097],{"class":279},[123,52459,134],{"class":133},[123,52461,2825],{"class":164},[123,52463,288],{"class":129},[123,52465,52466],{"class":125,"line":12338},[123,52467,36676],{"class":2673},[123,52469,52470],{"class":125,"line":12344},[123,52471,36681],{"class":2673},[123,52473,52474],{"class":125,"line":12352},[123,52475,36686],{"class":2673},[123,52477,52478,52480,52482,52484,52486],{"class":125,"line":12357},[123,52479,36691],{"class":129},[123,52481,11909],{"class":133},[123,52483,35199],{"class":129},[123,52485,5391],{"class":133},[123,52487,36700],{"class":129},[123,52489,52490],{"class":125,"line":19032},[123,52491,36705],{"class":2673},[123,52493,52494,52496,52498,52500,52502],{"class":125,"line":19038},[123,52495,36710],{"class":129},[123,52497,11909],{"class":133},[123,52499,36715],{"class":129},[123,52501,2799],{"class":164},[123,52503,288],{"class":129},[123,52505,52506],{"class":125,"line":19061},[123,52507,232],{"emptyLinePlaceholder":231},[123,52509,52510],{"class":125,"line":19067},[123,52511,36728],{"class":2673},[123,52513,52514,52516,52518,52520,52522],{"class":125,"line":19090},[123,52515,36733],{"class":129},[123,52517,134],{"class":133},[123,52519,36738],{"class":129},[123,52521,3187],{"class":133},[123,52523,36743],{"class":129},[123,52525,52526],{"class":125,"line":19104},[123,52527,36748],{"class":2673},[123,52529,52530,52532,52534,52536],{"class":125,"line":19124},[123,52531,34863],{"class":164},[123,52533,1315],{"class":129},[123,52535,36757],{"class":143},[123,52537,36760],{"class":129},[123,52539,52540],{"class":125,"line":19130},[123,52541,232],{"emptyLinePlaceholder":231},[123,52543,52544],{"class":125,"line":19141},[123,52545,36769],{"class":2673},[123,52547,52548,52550,52552,52554,52556],{"class":125,"line":19164},[123,52549,3998],{"class":133},[123,52551,33635],{"class":164},[123,52553,5391],{"class":133},[123,52555,33640],{"class":143},[123,52557,1344],{"class":129},[123,52559,52560],{"class":125,"line":19186},[123,52561,36786],{"class":2673},[123,52563,52564,52566,52568],{"class":125,"line":19191},[123,52565,33704],{"class":129},[123,52567,134],{"class":133},[123,52569,46959],{"class":129},[123,52571,52572],{"class":125,"line":19197},[123,52573,36799],{"class":2673},[123,52575,52576],{"class":125,"line":19211},[123,52577,36804],{"class":2673},[123,52579,52580,52582,52584],{"class":125,"line":19224},[123,52581,36809],{"class":129},[123,52583,36812],{"class":143},[123,52585,32913],{"class":129},[123,52587,52588],{"class":125,"line":19229},[123,52589,36819],{"class":2673},[123,52591,52592,52594,52596],{"class":125,"line":19243},[123,52593,36432],{"class":129},[123,52595,134],{"class":133},[123,52597,36828],{"class":129},[123,52599,52600],{"class":125,"line":19248},[123,52601,36833],{"class":2673},[123,52603,52604],{"class":125,"line":19254},[123,52605,36838],{"class":129},[123,52607,52608],{"class":125,"line":19259},[123,52609,232],{"emptyLinePlaceholder":231},[123,52611,52612],{"class":125,"line":19273},[123,52613,36847],{"class":2673},[123,52615,52616],{"class":125,"line":19278},[123,52617,36852],{"class":2673},[123,52619,52620,52622,52624,52626,52628,52630,52632],{"class":125,"line":19283},[123,52621,33652],{"class":129},[123,52623,134],{"class":133},[123,52625,33659],{"class":143},[123,52627,4158],{"class":133},[123,52629,33664],{"class":129},[123,52631,4155],{"class":133},[123,52633,36529],{"class":143},[123,52635,52636,52638,52640],{"class":125,"line":19297},[123,52637,33704],{"class":129},[123,52639,134],{"class":133},[123,52641,34701],{"class":129},[123,52643,52644],{"class":125,"line":19309},[123,52645,36881],{"class":2673},[123,52647,52648],{"class":125,"line":19314},[123,52649,36886],{"class":2673},[123,52651,52652,52654,52656,52658,52661,52663,52666],{"class":125,"line":19327},[123,52653,36891],{"class":129},[123,52655,134],{"class":133},[123,52657,839],{"class":129},[123,52659,52660],{"class":143},"'猫'",[123,52662,2985],{"class":129},[123,52664,52665],{"class":143},"'狗'",[123,52667,998],{"class":129},[123,52669,52670,52672],{"class":125,"line":19332},[123,52671,36588],{"class":133},[123,52673,35296],{"class":129},[123,52675,52676],{"class":125,"line":19337},[123,52677,36956],{"class":2673},[123,52679,52680,52682,52684,52686],{"class":125,"line":19342},[123,52681,5843],{"class":133},[123,52683,36963],{"class":129},[123,52685,1405],{"class":133},[123,52687,36607],{"class":129},[123,52689,52690,52692,52694],{"class":125,"line":19355},[123,52691,35022],{"class":129},[123,52693,134],{"class":133},[123,52695,35027],{"class":129},[123,52697,52698,52700,52702],{"class":125,"line":19360},[123,52699,35037],{"class":129},[123,52701,134],{"class":133},[123,52703,35042],{"class":129},[123,52705,52706],{"class":125,"line":35045},[123,52707,232],{"emptyLinePlaceholder":231},[123,52709,52710],{"class":125,"line":35051},[123,52711,36992],{"class":2673},[123,52713,52714],{"class":125,"line":35057},[123,52715,35287],{"class":129},[123,52717,52718],{"class":125,"line":35063},[123,52719,37001],{"class":2673},[123,52721,52722,52724,52726],{"class":125,"line":35069},[123,52723,35072],{"class":129},[123,52725,134],{"class":133},[123,52727,35077],{"class":129},[123,52729,52730],{"class":125,"line":35080},[123,52731,37014],{"class":2673},[123,52733,52734,52736,52738,52740,52742,52744,52746],{"class":125,"line":35086},[123,52735,35089],{"class":129},[123,52737,134],{"class":133},[123,52739,35094],{"class":129},[123,52741,35097],{"class":279},[123,52743,134],{"class":133},[123,52745,2825],{"class":164},[123,52747,288],{"class":129},[123,52749,52750],{"class":125,"line":35106},[123,52751,37035],{"class":2673},[123,52753,52754,52756,52758],{"class":125,"line":35112},[123,52755,37040],{"class":129},[123,52757,134],{"class":133},[123,52759,37045],{"class":129},[123,52761,52762,52764,52766],{"class":125,"line":35123},[123,52763,37050],{"class":129},[123,52765,134],{"class":133},[123,52767,37055],{"class":129},[123,52769,52770,52772,52774,52776,52778,52780,52782,52784],{"class":125,"line":35129},[123,52771,37060],{"class":164},[123,52773,1315],{"class":129},[123,52775,37065],{"class":143},[123,52777,37068],{"class":129},[123,52779,37071],{"class":143},[123,52781,2985],{"class":129},[123,52783,37076],{"class":143},[123,52785,37079],{"class":129},[2526,52787,52788],{},"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":118,"searchDepth":140,"depth":140,"links":52790},[52791,52792,52793,52794],{"id":33007,"depth":156,"text":33008},{"id":40249,"depth":156,"text":40250},{"id":43680,"depth":156,"text":43681},{"id":47689,"depth":156,"text":47690},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32999,"description":2544},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52801,"title":52802,"body":52803,"description":2544,"extension":2545,"meta":52810,"navigation":231,"path":52811,"seo":52812,"stem":52813,"__hash__":52814},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52804,"toc":52808},[52805],[10,52806,52802],{"id":52807},"_3yolo模型学习",{"title":118,"searchDepth":140,"depth":140,"links":52809},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52802,"description":2544},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52816,"title":52817,"body":52818,"description":52825,"extension":2545,"meta":52826,"navigation":231,"path":52828,"seo":52829,"stem":52830,"__hash__":52831},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52819,"toc":52823},[52820],[19,52821,52822],{},"yolo模型还未补充",{"title":118,"searchDepth":140,"depth":140,"links":52824},[],"深度学习学习",{"category":52827},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52817,"description":52825},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52833,"title":52834,"body":52835,"description":2544,"extension":2545,"meta":52860,"navigation":231,"path":52861,"seo":52862,"stem":52863,"__hash__":52864},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52836,"toc":52858},[52837,52840,52843,52848,52855],[10,52838,52834],{"id":52839},"_1工具",[19,52841,52842],{},"提示错误插件：有问题会提前报错",[19,52844,52845],{},[3929,52846],{"alt":118,"src":52847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52849,52850],{},[2846,52851,52854],{"href":52852,"rel":52853},"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",[26287],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52856,52857],{},"alt键加上下箭头可以实现语句的移动",{"title":118,"searchDepth":140,"depth":140,"links":52859},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52834,"description":2544},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52866,"title":52867,"body":52868,"description":2544,"extension":2545,"meta":55728,"navigation":231,"path":55729,"seo":55730,"stem":55731,"__hash__":55732},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52869,"toc":55679},[52870,52873,52877,52881,52886,52889,52894,52898,52905,52910,52917,52922,52929,52934,52938,52943,52946,52950,52955,52959,52964,52967,52970,52973,52976,52979,52982,52985,52988,52993,52998,53003,53007,53010,53013,53017,53022,53025,53033,53038,53055,53063,53068,53073,53078,53083,53088,53091,53096,53101,53105,53114,53119,53124,53128,53133,53136,53140,53145,53153,53158,53163,53166,53171,53176,53181,53184,53187,53190,53195,53200,53203,53208,53211,53216,53219,53222,53225,53230,53233,53236,53251,53256,53261,53266,53269,53272,53275,53289,53292,53297,53302,53305,53308,53311,53314,53317,53320,53323,53327,53331,53336,53340,53343,53348,53353,53356,53361,53364,53368,53373,53376,53379,53382,53385,53388,53391,53394,53397,53400,53404,53409,53414,53419,53422,53425,53429,53434,53437,53441,53444,53447,53452,53455,53458,53462,53466,53469,53474,53479,53482,53511,53516,53521,53526,53531,53535,53540,53544,53549,53552,53556,53560,53565,53569,53574,53579,53583,53588,53591,53593,53596,53601,53605,53610,53614,53618,53623,53628,53633,53638,53642,53647,53652,53657,53660,53663,53668,53671,53676,53681,53686,53691,53695,54499,54503,54845,54850,54853,54856,54859,54862,54865,54868,54871,54874,54876,54879,54881,54884,54888,54893,54896,54899,54902,54906,54911,54916,54936,54939,54943,54948,54953,54970,54974,55003,55007,55029,55031,55070,55078,55084,55088,55091,55094,55099,55104,55107,55110,55113,55118,55123,55126,55129,55132,55135,55138,55141,55144,55147,55150,55153,55156,55158,55161,55164,55167,55170,55173,55176,55179,55182,55186,55191,55194,55199,55202,55205,55208,55211,55214,55217,55220,55222,55225,55228,55231,55234,55237,55240,55244,55247,55256,55259,55264,55267,55272,55275,55278,55281,55284,55287,55290,55293,55297,55301,55304,55307,55312,55317,55322,55326,55331,55336,55339,55342,55345,55348,55351,55356,55359,55364,55366,55371,55374,55378,55383,55386,55389,55394,55398,55401,55406,55409,55412,55441,55446,55449,55452,55455,55458,55461,55465,55468,55554,55558,55561,55566,55571,55578,55581,55584,55587,55590,55593,55598,55603,55606,55609,55612,55615,55618,55621,55624,55627,55630,55632,55635,55639,55644,55649,55654,55657,55662,55667,55670,55673,55676],[10,52871,52867],{"id":52872},"_2基础语法",[14,52874,52876],{"id":52875},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[2587,52878,52880],{"id":52879},"_211-js组成","2.1.1 js组成",[26,52882,52883],{},[29,52884,52885],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52887,52888],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52890,52891],{"start":140},[29,52892,52893],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[2587,52895,52897],{"id":52896},"_212-js书写位置","2.1.2 js书写位置",[26,52899,52900],{},[29,52901,52902],{},[2759,52903,52904],{},"内部 JavaScript",[19,52906,52907],{},[3929,52908],{"alt":118,"src":52909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52911,52912],{"start":140},[29,52913,52914],{},[2759,52915,52916],{},"外部 JavaScript",[19,52918,52919],{},[3929,52920],{"alt":118,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52923,52924],{"start":156},[29,52925,52926],{},[2759,52927,52928],{},"内联 JavaScript",[19,52930,52931],{},[3929,52932],{"alt":118,"src":52933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[2587,52935,52937],{"id":52936},"_213-javascript注释","2.1.3 JavaScript注释",[19,52939,52940],{},[3929,52941],{"alt":118,"src":52942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52944,52945],{},"alt+shift+a一定要记住！",[2587,52947,52949],{"id":52948},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52951,52952],{},[3929,52953],{"alt":118,"src":52954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[2587,52956,52958],{"id":52957},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52960,52961],{},[29,52962,52963],{},"输出语法：",[19,52965,52966],{},"①document.write('要出的内容')",[19,52968,52969],{},"向body内输出内容；",[19,52971,52972],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52974,52975],{},"②alert('要出的内容')",[19,52977,52978],{},"页面弹出警告对话框",[19,52980,52981],{},"③console.log('控制台打印')",[19,52983,52984],{},"控制台输出语法，程序员调试使用",[19,52986,52987],{},"输入log就行，自动生成：",[19,52989,52990],{},[3929,52991],{"alt":118,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52994,52995],{"start":140},[29,52996,52997],{},"输入语法：",[19,52999,53000],{},[3929,53001],{"alt":118,"src":53002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[2587,53004,53006],{"id":53005},"_2116-字面量","21.1.6 字面量",[19,53008,53009],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,53011,53012],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53014,53016],{"id":53015},"_22-变量","2.2 变量",[26,53018,53019],{},[29,53020,53021],{},"变量声明",[19,53023,53024],{},"let 变量名",[3606,53026,53027,53030],{},[29,53028,53029],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,53031,53032],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,53034,53035],{"start":140},[29,53036,53037],{},"变量赋值",[113,53039,53043],{"className":53040,"code":53041,"language":53042,"meta":118,"style":118},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[120,53044,53045,53050],{"__ignoreMap":118},[123,53046,53047],{"class":125,"line":126},[123,53048,53049],{"class":129},"let age\n",[123,53051,53052],{"class":125,"line":140},[123,53053,53054],{"class":129},"age=18\n",[26,53056,53057,53060],{"start":156},[29,53058,53059],{},"连这些（变量的初始化）：let age=18",[29,53061,53062],{},"更新变量",[19,53064,53065],{},[3929,53066],{"alt":118,"src":53067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,53069,53070],{"start":268},[29,53071,53072],{},"声明多个变量",[19,53074,53075],{},[3929,53076],{"alt":118,"src":53077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,53079,53080],{"start":291},[29,53081,53082],{},"变量命名规则与规范",[19,53084,53085],{},[3929,53086],{"alt":118,"src":53087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,53089,53090],{},"遵守小驼峰！",[26,53092,53093],{"start":300},[29,53094,53095],{},"变量拓展-let和var的区别",[19,53097,53098],{},[3929,53099],{"alt":118,"src":53100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53102,53104],{"id":53103},"_23-数组","2.3 数组",[113,53106,53108],{"className":53040,"code":53107,"language":53042,"meta":118,"style":118},"let arr = []\n",[120,53109,53110],{"__ignoreMap":118},[123,53111,53112],{"class":125,"line":126},[123,53113,53107],{"class":129},[19,53115,53116],{},[3929,53117],{"alt":118,"src":53118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,53120,53121],{},[3929,53122],{"alt":118,"src":53123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53125,53127],{"id":53126},"_24-常量","2.4 常量",[19,53129,53130],{},[3929,53131],{"alt":118,"src":53132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,53134,53135],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53137,53139],{"id":53138},"_25-数据类型","2.5 数据类型",[19,53141,53142],{},[3929,53143],{"alt":118,"src":53144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,53146,53147,53150],{},[29,53148,53149],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,53151,53152],{},"算数运算符：",[19,53154,53155],{},[3929,53156],{"alt":118,"src":53157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,53159,53160],{"start":156},[29,53161,53162],{},"数字类型（Number）",[19,53164,53165],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,53167,53168],{},[3929,53169],{"alt":118,"src":53170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,53172,53173],{"start":168},[29,53174,53175],{},"字符串类型（string）",[19,53177,53178],{},[3929,53179],{"alt":118,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,53182,53183],{},"反引号也是可以使用的",[19,53185,53186],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53188,53189],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,53191,53192],{"start":268},[29,53193,53194],{},"模板字符串",[19,53196,53197],{},[3929,53198],{"alt":118,"src":53199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53201,53202],{},"类似于python的字符串格式化",[26,53204,53205],{"start":291},[29,53206,53207],{},"布尔类型",[19,53209,53210],{},"true 和 false",[26,53212,53213],{"start":300},[29,53214,53215],{},"未定义类型（underfined）",[19,53217,53218],{},"表示没有赋值",[19,53220,53221],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53223,53224],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,53226,53227],{"start":305},[29,53228,53229],{},"null（空类型）",[19,53231,53232],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53234,53235],{},"赋值了，但是内容为空",[113,53237,53239],{"className":53040,"code":53238,"language":53042,"meta":118,"style":118},"typeof null\n输出的是'object'，是一个对象数据类型\n",[120,53240,53241,53246],{"__ignoreMap":118},[123,53242,53243],{"class":125,"line":126},[123,53244,53245],{"class":129},"typeof null\n",[123,53247,53248],{"class":125,"line":140},[123,53249,53250],{"class":129},"输出的是'object'，是一个对象数据类型\n",[26,53252,53253],{"start":316},[29,53254,53255],{},"控制台检测数据类型",[19,53257,53258],{},[3929,53259],{"alt":118,"src":53260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,53262,53263],{"start":673},[29,53264,53265],{},"类型转换",[19,53267,53268],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53270,53271],{},"转换方式：隐式转换和显示转换",[19,53273,53274],{},"①隐式转换",[3606,53276,53277,53280,53283,53286],{},[29,53278,53279],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,53281,53282],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,53284,53285],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,53287,53288],{},"任何数据和字符串相加结果都是字符串",[19,53290,53291],{},"②显示转换",[19,53293,53294],{},[3929,53295],{"alt":118,"src":53296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53298,53299],{},[3929,53300],{"alt":118,"src":53301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53303,53304],{},"在输入的时候要用好隐式转换，简单写起来",[19,53306,53307],{},"let num = +prompt(’请输入数字：‘)",[19,53309,53310],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53312,53313],{},"console.log(parseInt('12.333px'))",[19,53315,53316],{},"输出为：12",[19,53318,53319],{},"console.log(parseInt('a'a'a12.333px'))",[19,53321,53322],{},"输出：NaN",[14,53324,53326],{"id":53325},"_26-运算符","2.6 运算符",[2587,53328,53330],{"id":53329},"_261-赋值运算符","2.6.1 赋值运算符",[19,53332,53333],{},[3929,53334],{"alt":118,"src":53335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[2587,53337,53339],{"id":53338},"_262-一元运算符","2.6.2 一元运算符",[19,53341,53342],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53344,53345],{},[3929,53346],{"alt":118,"src":53347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53349,53350],{},[3929,53351],{"alt":118,"src":53352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53354,53355],{},"两者的区别：",[19,53357,53358],{},[3929,53359],{"alt":118,"src":53360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53362,53363],{},"前置先自加；后置后加，代码执行完之后再加",[2587,53365,53367],{"id":53366},"_263-比较运算符","2.6.3 比较运算符",[19,53369,53370],{},[3929,53371],{"alt":118,"src":53372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53374,53375],{},"比较运算符也有隐式转换",[19,53377,53378],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53380,53381],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53383,53384],{},"要使用三等，开发的时候",[19,53386,53387],{},"NaN不等于任何人，包括它自己",[19,53389,53390],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53392,53393],{},"7\u002F10=0.7",[19,53395,53396],{},"最后：0.5+0.2=0.7",[19,53398,53399],{},"字符串比较，比较的是字符对应的ASCII码",[2587,53401,53403],{"id":53402},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53405,53406],{},[3929,53407],{"alt":118,"src":53408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53410,53411],{},[3929,53412],{"alt":118,"src":53413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53415,53416],{},[3929,53417],{"alt":118,"src":53418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53420,53421],{},"上述题目选D",[19,53423,53424],{},"与真2假1；或真1假2",[2587,53426,53428],{"id":53427},"_265-运算符优先级","2.6.5 运算符优先级",[19,53430,53431],{},[3929,53432],{"alt":118,"src":53433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53435,53436],{},"先算逻辑与，后算逻辑或",[14,53438,53440],{"id":53439},"_27-语句","2.7 语句",[19,53442,53443],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53445,53446],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53448,53449],{},[3929,53450],{"alt":118,"src":53451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53453,53454],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53456,53457],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[2587,53459,53461],{"id":53460},"_271-分支语句","2.7.1 分支语句",[24425,53463,53465],{"id":53464},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53467,53468],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,53470,53471],{},[29,53472,53473],{},"单分支语句",[19,53475,53476],{},[3929,53477],{"alt":118,"src":53478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53480,53481],{},"除了0，所有数字都为真",[113,53483,53485],{"className":53040,"code":53484,"language":53042,"meta":118,"style":118},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[120,53486,53487,53492,53497,53502,53506],{"__ignoreMap":118},[123,53488,53489],{"class":125,"line":126},[123,53490,53491],{"class":129},"if（0) {\n",[123,53493,53494],{"class":125,"line":140},[123,53495,53496],{"class":129},"    let a=1\n",[123,53498,53499],{"class":125,"line":156},[123,53500,53501],{"class":129},"    alert(typeof a)\n",[123,53503,53504],{"class":125,"line":168},[123,53505,171],{"class":129},[123,53507,53508],{"class":125,"line":268},[123,53509,53510],{"class":129},"不输出，括号为假\n",[26,53512,53513],{"start":140},[29,53514,53515],{},"双分支语句",[19,53517,53518],{},[3929,53519],{"alt":118,"src":53520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,53522,53523],{"start":156},[29,53524,53525],{},"多分支语句",[19,53527,53528],{},[3929,53529],{"alt":118,"src":53530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24425,53532,53534],{"id":53533},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53536,53537],{},[3929,53538],{"alt":118,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24425,53541,53543],{"id":53542},"_2713-switch语句","2.7.1.3 switch语句",[19,53545,53546],{},[3929,53547],{"alt":118,"src":53548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53550,53551],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[2587,53553,53555],{"id":53554},"_272-循环语句","2.7.2 循环语句",[24425,53557,53559],{"id":53558},"_2721-断点演示","2.7.2.1 断点演示",[19,53561,53562],{},[3929,53563],{"alt":118,"src":53564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24425,53566,53568],{"id":53567},"_2722-while循环","2.7.2.2 while循环",[19,53570,53571],{},[3929,53572],{"alt":118,"src":53573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53575,53576],{},[3929,53577],{"alt":118,"src":53578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24425,53580,53582],{"id":53581},"_2723-for循环","2.7.2.3 for循环",[19,53584,53585],{},[3929,53586],{"alt":118,"src":53587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53589,53590],{},"for(;;) {",[19,53592,3545],{},[19,53594,53595],{},"表示无限循环",[19,53597,53598],{},[3929,53599],{"alt":118,"src":53600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24425,53602,53604],{"id":53603},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53606,53607],{},[3929,53608],{"alt":118,"src":53609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53611,53613],{"id":53612},"_28-数组","2.8 数组",[2587,53615,53617],{"id":53616},"_281-基础认识","2.8.1 基础认识",[19,53619,53620],{},[3929,53621],{"alt":118,"src":53622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53624,53625],{},[3929,53626],{"alt":118,"src":53627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53629,53630],{},[3929,53631],{"alt":118,"src":53632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53634,53635],{},[3929,53636],{"alt":118,"src":53637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[2587,53639,53641],{"id":53640},"_282-操作数组","2.8.2 操作数组",[19,53643,53644],{},[3929,53645],{"alt":118,"src":53646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,53648,53649],{},[29,53650,53651],{},"添加元素",[19,53653,53654],{},[3929,53655],{"alt":118,"src":53656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53658,53659],{},"console.log(arr.push('green'))",[19,53661,53662],{},"输出结果：为新数组的长度",[19,53664,53665],{},[3929,53666],{"alt":118,"src":53667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53669,53670],{},"push用的非常多，一定要记住",[26,53672,53673],{},[29,53674,53675],{},"删除元素",[19,53677,53678],{},[3929,53679],{"alt":118,"src":53680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53682,53683],{},[3929,53684],{"alt":118,"src":53685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53687,53688],{},[3929,53689],{"alt":118,"src":53690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[2587,53692,53694],{"id":53693},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[113,53696,53698],{"className":53040,"code":53697,"language":53042,"meta":118,"style":118},"\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",[120,53699,53700,53715,53731,53735,53744,53762,53786,53808,53821,53829,53836,53847,53858,53862,53866,53873,53885,53900,53913,53932,53949,53964,53976,53988,54000,54004,54008,54019,54029,54041,54053,54065,54076,54080,54084,54096,54100,54114,54118,54122,54133,54147,54159,54173,54177,54186,54195,54199,54208,54212,54221,54226,54231,54243,54271,54276,54281,54306,54311,54315,54320,54325,54340,54344,54349,54379,54391,54407,54423,54437,54442,54449,54453,54458,54471,54479,54487,54491],{"__ignoreMap":118},[123,53701,53702,53705,53709,53712],{"class":125,"line":126},[123,53703,53704],{"class":129},"\u003C!",[123,53706,53708],{"class":53707},"s9eBZ","DOCTYPE",[123,53710,53711],{"class":337}," html",[123,53713,53714],{"class":129},">\n",[123,53716,53717,53719,53721,53724,53726,53729],{"class":125,"line":140},[123,53718,3509],{"class":129},[123,53720,53042],{"class":53707},[123,53722,53723],{"class":337}," lang",[123,53725,134],{"class":129},[123,53727,53728],{"class":143},"\"en\"",[123,53730,53714],{"class":129},[123,53732,53733],{"class":125,"line":156},[123,53734,232],{"emptyLinePlaceholder":231},[123,53736,53737,53739,53742],{"class":125,"line":168},[123,53738,3509],{"class":129},[123,53740,53741],{"class":53707},"head",[123,53743,53714],{"class":129},[123,53745,53746,53749,53752,53755,53757,53760],{"class":125,"line":268},[123,53747,53748],{"class":129},"    \u003C",[123,53750,53751],{"class":53707},"meta",[123,53753,53754],{"class":337}," charset",[123,53756,134],{"class":129},[123,53758,53759],{"class":143},"\"UTF-8\"",[123,53761,53714],{"class":129},[123,53763,53764,53766,53768,53771,53773,53776,53779,53781,53784],{"class":125,"line":291},[123,53765,53748],{"class":129},[123,53767,53751],{"class":53707},[123,53769,53770],{"class":337}," http-equiv",[123,53772,134],{"class":129},[123,53774,53775],{"class":143},"\"X-UA-Compatible\"",[123,53777,53778],{"class":337}," content",[123,53780,134],{"class":129},[123,53782,53783],{"class":143},"\"IE=edge\"",[123,53785,53714],{"class":129},[123,53787,53788,53790,53792,53794,53796,53799,53801,53803,53806],{"class":125,"line":300},[123,53789,53748],{"class":129},[123,53791,53751],{"class":53707},[123,53793,17350],{"class":337},[123,53795,134],{"class":129},[123,53797,53798],{"class":143},"\"viewport\"",[123,53800,53778],{"class":337},[123,53802,134],{"class":129},[123,53804,53805],{"class":143},"\"width=device-width, initial-scale=1.0\"",[123,53807,53714],{"class":129},[123,53809,53810,53812,53814,53817,53819],{"class":125,"line":305},[123,53811,53748],{"class":129},[123,53813,642],{"class":53707},[123,53815,53816],{"class":129},">Document\u003C\u002F",[123,53818,642],{"class":53707},[123,53820,53714],{"class":129},[123,53822,53823,53825,53827],{"class":125,"line":316},[123,53824,53748],{"class":129},[123,53826,2526],{"class":53707},[123,53828,53714],{"class":129},[123,53830,53831,53834],{"class":125,"line":673},[123,53832,53833],{"class":53707},"        *",[123,53835,137],{"class":129},[123,53837,53838,53841,53843,53845],{"class":125,"line":692},[123,53839,53840],{"class":164},"            margin",[123,53842,147],{"class":129},[123,53844,2799],{"class":164},[123,53846,3760],{"class":129},[123,53848,53849,53852,53854,53856],{"class":125,"line":713},[123,53850,53851],{"class":164},"            padding",[123,53853,147],{"class":129},[123,53855,2799],{"class":164},[123,53857,3760],{"class":129},[123,53859,53860],{"class":125,"line":718},[123,53861,4972],{"class":129},[123,53863,53864],{"class":125,"line":1138},[123,53865,232],{"emptyLinePlaceholder":231},[123,53867,53868,53871],{"class":125,"line":1429},[123,53869,53870],{"class":337},"        .box",[123,53872,137],{"class":129},[123,53874,53875,53878,53880,53883],{"class":125,"line":1439},[123,53876,53877],{"class":164},"            display",[123,53879,147],{"class":129},[123,53881,53882],{"class":164},"flex",[123,53884,3760],{"class":129},[123,53886,53887,53890,53892,53895,53898],{"class":125,"line":1444},[123,53888,53889],{"class":164},"            width",[123,53891,147],{"class":129},[123,53893,53894],{"class":164},"700",[123,53896,53897],{"class":133},"px",[123,53899,3760],{"class":129},[123,53901,53902,53905,53907,53909,53911],{"class":125,"line":1453},[123,53903,53904],{"class":164},"            height",[123,53906,147],{"class":129},[123,53908,6412],{"class":164},[123,53910,53897],{"class":133},[123,53912,3760],{"class":129},[123,53914,53915,53918,53920,53922,53924,53927,53930],{"class":125,"line":1458},[123,53916,53917],{"class":164},"            border-left",[123,53919,147],{"class":129},[123,53921,2825],{"class":164},[123,53923,53897],{"class":133},[123,53925,53926],{"class":164}," solid",[123,53928,53929],{"class":164}," pink",[123,53931,3760],{"class":129},[123,53933,53934,53937,53939,53941,53943,53945,53947],{"class":125,"line":1476},[123,53935,53936],{"class":164},"            border-bottom",[123,53938,147],{"class":129},[123,53940,2825],{"class":164},[123,53942,53897],{"class":133},[123,53944,53926],{"class":164},[123,53946,53929],{"class":164},[123,53948,3760],{"class":129},[123,53950,53951,53953,53955,53957,53959,53962],{"class":125,"line":1494},[123,53952,53840],{"class":164},[123,53954,147],{"class":129},[123,53956,3258],{"class":164},[123,53958,53897],{"class":133},[123,53960,53961],{"class":164}," auto",[123,53963,3760],{"class":129},[123,53965,53966,53969,53971,53974],{"class":125,"line":1499},[123,53967,53968],{"class":164},"            justify-content",[123,53970,147],{"class":129},[123,53972,53973],{"class":164},"space-around",[123,53975,3760],{"class":129},[123,53977,53978,53981,53983,53986],{"class":125,"line":1517},[123,53979,53980],{"class":164},"            align-items",[123,53982,147],{"class":129},[123,53984,53985],{"class":164},"flex-end",[123,53987,3760],{"class":129},[123,53989,53990,53993,53995,53998],{"class":125,"line":1534},[123,53991,53992],{"class":164},"            text-align",[123,53994,147],{"class":129},[123,53996,53997],{"class":164},"center",[123,53999,3760],{"class":129},[123,54001,54002],{"class":125,"line":1539},[123,54003,4972],{"class":129},[123,54005,54006],{"class":125,"line":2080},[123,54007,232],{"emptyLinePlaceholder":231},[123,54009,54010,54012,54014,54017],{"class":125,"line":2097},[123,54011,53870],{"class":337},[123,54013,3559],{"class":133},[123,54015,54016],{"class":53707},"div",[123,54018,137],{"class":129},[123,54020,54021,54023,54025,54027],{"class":125,"line":2114},[123,54022,53877],{"class":164},[123,54024,147],{"class":129},[123,54026,53882],{"class":164},[123,54028,3760],{"class":129},[123,54030,54031,54033,54035,54037,54039],{"class":125,"line":2125},[123,54032,53889],{"class":164},[123,54034,147],{"class":129},[123,54036,3258],{"class":164},[123,54038,53897],{"class":133},[123,54040,3760],{"class":129},[123,54042,54043,54046,54048,54051],{"class":125,"line":2130},[123,54044,54045],{"class":164},"            background-color",[123,54047,147],{"class":129},[123,54049,54050],{"class":164},"pink",[123,54052,3760],{"class":129},[123,54054,54055,54058,54060,54063],{"class":125,"line":5033},[123,54056,54057],{"class":164},"            flex-direction",[123,54059,147],{"class":129},[123,54061,54062],{"class":164},"column",[123,54064,3760],{"class":129},[123,54066,54067,54069,54071,54074],{"class":125,"line":5041},[123,54068,53968],{"class":164},[123,54070,147],{"class":129},[123,54072,54073],{"class":164},"space-between",[123,54075,3760],{"class":129},[123,54077,54078],{"class":125,"line":5046},[123,54079,4972],{"class":129},[123,54081,54082],{"class":125,"line":5052},[123,54083,232],{"emptyLinePlaceholder":231},[123,54085,54086,54088,54091,54094],{"class":125,"line":5058},[123,54087,53870],{"class":337},[123,54089,54090],{"class":53707}," div",[123,54092,54093],{"class":53707}," span",[123,54095,137],{"class":129},[123,54097,54098],{"class":125,"line":5063},[123,54099,232],{"emptyLinePlaceholder":231},[123,54101,54102,54105,54107,54110,54112],{"class":125,"line":10380},[123,54103,54104],{"class":164},"            margin-top",[123,54106,147],{"class":129},[123,54108,54109],{"class":164},"-20",[123,54111,53897],{"class":133},[123,54113,3760],{"class":129},[123,54115,54116],{"class":125,"line":10404},[123,54117,4972],{"class":129},[123,54119,54120],{"class":125,"line":10409},[123,54121,232],{"emptyLinePlaceholder":231},[123,54123,54124,54126,54128,54131],{"class":125,"line":10415},[123,54125,53870],{"class":337},[123,54127,54090],{"class":53707},[123,54129,54130],{"class":53707}," h4",[123,54132,137],{"class":129},[123,54134,54135,54138,54140,54143,54145],{"class":125,"line":10442},[123,54136,54137],{"class":164},"            margin-bottom",[123,54139,147],{"class":129},[123,54141,54142],{"class":164},"-35",[123,54144,53897],{"class":133},[123,54146,3760],{"class":129},[123,54148,54149,54151,54153,54155,54157],{"class":125,"line":10447},[123,54150,53889],{"class":164},[123,54152,147],{"class":129},[123,54154,2963],{"class":164},[123,54156,53897],{"class":133},[123,54158,3760],{"class":129},[123,54160,54161,54164,54166,54169,54171],{"class":125,"line":10453},[123,54162,54163],{"class":164},"            margin-left",[123,54165,147],{"class":129},[123,54167,54168],{"class":164},"-10",[123,54170,53897],{"class":133},[123,54172,3760],{"class":129},[123,54174,54175],{"class":125,"line":10465},[123,54176,4972],{"class":129},[123,54178,54179,54182,54184],{"class":125,"line":10477},[123,54180,54181],{"class":129},"    \u003C\u002F",[123,54183,2526],{"class":53707},[123,54185,53714],{"class":129},[123,54187,54188,54191,54193],{"class":125,"line":10489},[123,54189,54190],{"class":129},"\u003C\u002F",[123,54192,53741],{"class":53707},[123,54194,53714],{"class":129},[123,54196,54197],{"class":125,"line":12148},[123,54198,232],{"emptyLinePlaceholder":231},[123,54200,54201,54203,54206],{"class":125,"line":12173},[123,54202,3509],{"class":129},[123,54204,54205],{"class":53707},"body",[123,54207,53714],{"class":129},[123,54209,54210],{"class":125,"line":12196},[123,54211,232],{"emptyLinePlaceholder":231},[123,54213,54214,54216,54219],{"class":125,"line":12220},[123,54215,53748],{"class":129},[123,54217,54218],{"class":53707},"script",[123,54220,53714],{"class":129},[123,54222,54223],{"class":125,"line":12225},[123,54224,54225],{"class":2673},"        \u002F\u002F 1. 四次弹框效果\n",[123,54227,54228],{"class":125,"line":12230},[123,54229,54230],{"class":2673},"        \u002F\u002F 声明一个新的数组\n",[123,54232,54233,54236,54239,54241],{"class":125,"line":12235},[123,54234,54235],{"class":133},"        let",[123,54237,54238],{"class":129}," arr ",[123,54240,134],{"class":133},[123,54242,1372],{"class":129},[123,54244,54245,54247,54249,54252,54254,54256,54258,54260,54262,54265,54267,54269],{"class":125,"line":12244},[123,54246,5843],{"class":133},[123,54248,4116],{"class":129},[123,54250,54251],{"class":133},"let",[123,54253,11870],{"class":129},[123,54255,134],{"class":133},[123,54257,27540],{"class":164},[123,54259,11877],{"class":129},[123,54261,4053],{"class":133},[123,54263,54264],{"class":164}," 4",[123,54266,5654],{"class":129},[123,54268,4736],{"class":133},[123,54270,14873],{"class":129},[123,54272,54273],{"class":125,"line":12249},[123,54274,54275],{"class":2673},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[123,54277,54278],{"class":125,"line":12255},[123,54279,54280],{"class":2673},"            \u002F\u002F arr.push(num)\n",[123,54282,54283,54286,54289,54291,54294,54296,54299,54301,54304],{"class":125,"line":12276},[123,54284,54285],{"class":129},"            arr.",[123,54287,54288],{"class":337},"push",[123,54290,1315],{"class":129},[123,54292,54293],{"class":337},"prompt",[123,54295,1315],{"class":129},[123,54297,54298],{"class":143},"`请输入第${",[123,54300,3047],{"class":129},[123,54302,54303],{"class":143},"}季度的数据:`",[123,54305,32913],{"class":129},[123,54307,54308],{"class":125,"line":12282},[123,54309,54310],{"class":2673},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[123,54312,54313],{"class":125,"line":12296},[123,54314,4972],{"class":129},[123,54316,54317],{"class":125,"line":12302},[123,54318,54319],{"class":2673},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[123,54321,54322],{"class":125,"line":12329},[123,54323,54324],{"class":2673},"        \u002F\u002F 盒子开头\n",[123,54326,54327,54330,54333,54335,54338],{"class":125,"line":12338},[123,54328,54329],{"class":129},"        document.",[123,54331,54332],{"class":337},"write",[123,54334,1315],{"class":129},[123,54336,54337],{"class":143},"` \u003Cdiv class=\"box\">`",[123,54339,288],{"class":129},[123,54341,54342],{"class":125,"line":12344},[123,54343,232],{"emptyLinePlaceholder":231},[123,54345,54346],{"class":125,"line":12352},[123,54347,54348],{"class":2673},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[123,54350,54351,54353,54355,54357,54359,54361,54363,54365,54367,54370,54373,54375,54377],{"class":125,"line":12357},[123,54352,5843],{"class":133},[123,54354,4116],{"class":129},[123,54356,54251],{"class":133},[123,54358,11870],{"class":129},[123,54360,134],{"class":133},[123,54362,6532],{"class":164},[123,54364,11877],{"class":129},[123,54366,3509],{"class":133},[123,54368,54369],{"class":129}," arr.",[123,54371,54372],{"class":164},"length",[123,54374,5654],{"class":129},[123,54376,4736],{"class":133},[123,54378,14873],{"class":129},[123,54380,54381,54384,54386,54388],{"class":125,"line":19032},[123,54382,54383],{"class":129},"            document.",[123,54385,54332],{"class":337},[123,54387,1315],{"class":129},[123,54389,54390],{"class":143},"`\n",[123,54392,54393,54396,54398,54400,54402,54404],{"class":125,"line":19038},[123,54394,54395],{"class":143},"              \u003Cdiv style=\"height: ${",[123,54397,6319],{"class":129},[123,54399,839],{"class":143},[123,54401,3047],{"class":129},[123,54403,3539],{"class":143},[123,54405,54406],{"class":143},"}px;\">\n",[123,54408,54409,54412,54414,54416,54418,54420],{"class":125,"line":19061},[123,54410,54411],{"class":143},"                \u003Cspan>${",[123,54413,6319],{"class":129},[123,54415,839],{"class":143},[123,54417,3047],{"class":129},[123,54419,3539],{"class":143},[123,54421,54422],{"class":143},"}\u003C\u002Fspan>\n",[123,54424,54425,54428,54430,54432,54434],{"class":125,"line":19067},[123,54426,54427],{"class":143},"                \u003Ch4>第${",[123,54429,3047],{"class":129},[123,54431,47973],{"class":133},[123,54433,27540],{"class":164},[123,54435,54436],{"class":143},"}季度\u003C\u002Fh4>\n",[123,54438,54439],{"class":125,"line":19090},[123,54440,54441],{"class":143},"              \u003C\u002Fdiv>          \n",[123,54443,54444,54447],{"class":125,"line":19104},[123,54445,54446],{"class":143},"            `",[123,54448,288],{"class":129},[123,54450,54451],{"class":125,"line":19124},[123,54452,4972],{"class":129},[123,54454,54455],{"class":125,"line":19130},[123,54456,54457],{"class":2673},"        \u002F\u002F 盒子结尾\n",[123,54459,54460,54462,54464,54466,54469],{"class":125,"line":19141},[123,54461,54329],{"class":129},[123,54463,54332],{"class":337},[123,54465,1315],{"class":129},[123,54467,54468],{"class":143},"` \u003C\u002Fdiv>`",[123,54470,288],{"class":129},[123,54472,54473,54475,54477],{"class":125,"line":19164},[123,54474,54181],{"class":129},[123,54476,54218],{"class":53707},[123,54478,53714],{"class":129},[123,54480,54481,54483,54485],{"class":125,"line":19186},[123,54482,54190],{"class":129},[123,54484,54205],{"class":53707},[123,54486,53714],{"class":129},[123,54488,54489],{"class":125,"line":19191},[123,54490,232],{"emptyLinePlaceholder":231},[123,54492,54493,54495,54497],{"class":125,"line":19197},[123,54494,54190],{"class":129},[123,54496,53042],{"class":53707},[123,54498,53714],{"class":129},[2587,54500,54502],{"id":54501},"_284-冒泡排序","2.8.4 冒泡排序",[113,54504,54506],{"className":53040,"code":54505,"language":53042,"meta":118,"style":118},"\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",[120,54507,54508,54518,54532,54536,54544,54559,54579,54591,54599,54603,54611,54619,54650,54683,54720,54725,54744,54749,54762,54777,54793,54797,54802,54806,54816,54825,54833,54837],{"__ignoreMap":118},[123,54509,54510,54512,54514,54516],{"class":125,"line":126},[123,54511,53704],{"class":129},[123,54513,53708],{"class":53707},[123,54515,53711],{"class":337},[123,54517,53714],{"class":129},[123,54519,54520,54522,54524,54526,54528,54530],{"class":125,"line":140},[123,54521,3509],{"class":129},[123,54523,53042],{"class":53707},[123,54525,53723],{"class":337},[123,54527,134],{"class":129},[123,54529,53728],{"class":143},[123,54531,53714],{"class":129},[123,54533,54534],{"class":125,"line":156},[123,54535,232],{"emptyLinePlaceholder":231},[123,54537,54538,54540,54542],{"class":125,"line":168},[123,54539,3509],{"class":129},[123,54541,53741],{"class":53707},[123,54543,53714],{"class":129},[123,54545,54546,54549,54551,54553,54555,54557],{"class":125,"line":268},[123,54547,54548],{"class":129},"  \u003C",[123,54550,53751],{"class":53707},[123,54552,53754],{"class":337},[123,54554,134],{"class":129},[123,54556,53759],{"class":143},[123,54558,53714],{"class":129},[123,54560,54561,54563,54565,54567,54569,54571,54573,54575,54577],{"class":125,"line":291},[123,54562,54548],{"class":129},[123,54564,53751],{"class":53707},[123,54566,17350],{"class":337},[123,54568,134],{"class":129},[123,54570,53798],{"class":143},[123,54572,53778],{"class":337},[123,54574,134],{"class":129},[123,54576,53805],{"class":143},[123,54578,53714],{"class":129},[123,54580,54581,54583,54585,54587,54589],{"class":125,"line":300},[123,54582,54548],{"class":129},[123,54584,642],{"class":53707},[123,54586,53816],{"class":129},[123,54588,642],{"class":53707},[123,54590,53714],{"class":129},[123,54592,54593,54595,54597],{"class":125,"line":305},[123,54594,54190],{"class":129},[123,54596,53741],{"class":53707},[123,54598,53714],{"class":129},[123,54600,54601],{"class":125,"line":316},[123,54602,232],{"emptyLinePlaceholder":231},[123,54604,54605,54607,54609],{"class":125,"line":673},[123,54606,3509],{"class":129},[123,54608,54205],{"class":53707},[123,54610,53714],{"class":129},[123,54612,54613,54615,54617],{"class":125,"line":692},[123,54614,54548],{"class":129},[123,54616,54218],{"class":53707},[123,54618,53714],{"class":129},[123,54620,54621,54624,54626,54628,54630,54632,54634,54636,54638,54640,54642,54644,54646,54648],{"class":125,"line":713},[123,54622,54623],{"class":133},"    let",[123,54625,54238],{"class":129},[123,54627,134],{"class":133},[123,54629,977],{"class":129},[123,54631,2926],{"class":164},[123,54633,251],{"class":129},[123,54635,2901],{"class":164},[123,54637,251],{"class":129},[123,54639,2686],{"class":164},[123,54641,251],{"class":129},[123,54643,2692],{"class":164},[123,54645,251],{"class":129},[123,54647,2825],{"class":164},[123,54649,998],{"class":129},[123,54651,54652,54654,54656,54658,54660,54662,54664,54666,54668,54670,54672,54675,54677,54679,54681],{"class":125,"line":718},[123,54653,5641],{"class":133},[123,54655,4116],{"class":129},[123,54657,54251],{"class":133},[123,54659,11870],{"class":129},[123,54661,134],{"class":133},[123,54663,6532],{"class":164},[123,54665,11877],{"class":129},[123,54667,3509],{"class":133},[123,54669,54369],{"class":129},[123,54671,54372],{"class":164},[123,54673,54674],{"class":133}," -",[123,54676,27540],{"class":164},[123,54678,5654],{"class":129},[123,54680,4736],{"class":133},[123,54682,14873],{"class":129},[123,54684,54685,54688,54690,54692,54694,54696,54698,54700,54702,54704,54706,54708,54710,54712,54714,54716,54718],{"class":125,"line":1138},[123,54686,54687],{"class":133},"      for",[123,54689,4116],{"class":129},[123,54691,54251],{"class":133},[123,54693,11932],{"class":129},[123,54695,134],{"class":133},[123,54697,6532],{"class":164},[123,54699,11939],{"class":129},[123,54701,3509],{"class":133},[123,54703,54369],{"class":129},[123,54705,54372],{"class":164},[123,54707,54674],{"class":133},[123,54709,11870],{"class":129},[123,54711,3135],{"class":133},[123,54713,27540],{"class":164},[123,54715,11946],{"class":129},[123,54717,4736],{"class":133},[123,54719,14873],{"class":129},[123,54721,54722],{"class":125,"line":1429},[123,54723,54724],{"class":2673},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[123,54726,54727,54729,54732,54734,54737,54739,54741],{"class":125,"line":1439},[123,54728,4940],{"class":133},[123,54730,54731],{"class":129}," (arr[j] ",[123,54733,3559],{"class":133},[123,54735,54736],{"class":129}," arr[j ",[123,54738,3086],{"class":133},[123,54740,27540],{"class":164},[123,54742,54743],{"class":129},"]) {\n",[123,54745,54746],{"class":125,"line":1444},[123,54747,54748],{"class":2673},"          \u002F\u002F 交换两个变量\n",[123,54750,54751,54754,54757,54759],{"class":125,"line":1453},[123,54752,54753],{"class":133},"          let",[123,54755,54756],{"class":129}," tmp ",[123,54758,134],{"class":133},[123,54760,54761],{"class":129}," arr[j]\n",[123,54763,54764,54767,54769,54771,54773,54775],{"class":125,"line":1458},[123,54765,54766],{"class":129},"          arr[j] ",[123,54768,134],{"class":133},[123,54770,54736],{"class":129},[123,54772,3086],{"class":133},[123,54774,27540],{"class":164},[123,54776,998],{"class":129},[123,54778,54779,54782,54784,54786,54788,54790],{"class":125,"line":1476},[123,54780,54781],{"class":129},"          arr[j ",[123,54783,3086],{"class":133},[123,54785,27540],{"class":164},[123,54787,1941],{"class":129},[123,54789,134],{"class":133},[123,54791,54792],{"class":129}," tmp\n",[123,54794,54795],{"class":125,"line":1494},[123,54796,4972],{"class":129},[123,54798,54799],{"class":125,"line":1499},[123,54800,54801],{"class":129},"      }\n",[123,54803,54804],{"class":125,"line":1517},[123,54805,4631],{"class":129},[123,54807,54808,54811,54813],{"class":125,"line":1534},[123,54809,54810],{"class":129},"    document.",[123,54812,54332],{"class":337},[123,54814,54815],{"class":129},"(arr)\n",[123,54817,54818,54821,54823],{"class":125,"line":1539},[123,54819,54820],{"class":129},"  \u003C\u002F",[123,54822,54218],{"class":53707},[123,54824,53714],{"class":129},[123,54826,54827,54829,54831],{"class":125,"line":2080},[123,54828,54190],{"class":129},[123,54830,54205],{"class":53707},[123,54832,53714],{"class":129},[123,54834,54835],{"class":125,"line":2097},[123,54836,232],{"emptyLinePlaceholder":231},[123,54838,54839,54841,54843],{"class":125,"line":2114},[123,54840,54190],{"class":129},[123,54842,53042],{"class":53707},[123,54844,53714],{"class":129},[19,54846,54847],{},[3929,54848],{"alt":118,"src":54849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54851,54852],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54854,54855],{},"let arr = [4, 2, 5, 1, 3]",[19,54857,54858],{},"\u002F\u002F 1.升序排列写法",[19,54860,54861],{},"arr.sort(function (a, b) {",[19,54863,54864],{},"return a - b",[19,54866,54867],{},"})",[19,54869,54870],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54872,54873],{},"\u002F\u002F 降序排列写法",[19,54875,54861],{},[19,54877,54878],{},"return b - a",[19,54880,54867],{},[19,54882,54883],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54885,54887],{"id":54886},"_29-函数","2.9 函数",[19,54889,54890],{},[3929,54891],{"alt":118,"src":54892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54894,54895],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54897,54898],{},"函数的声明用function",[19,54900,54901],{},"函数里边可以嵌套函数",[2587,54903,54905],{"id":54904},"_291-函数传参","2.9.1 函数传参",[19,54907,54908],{},[3929,54909],{"alt":118,"src":54910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54912,54913],{},[3929,54914],{"alt":118,"src":54915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3606,54917,54918,54921,54924,54927,54930,54933],{},[29,54919,54920],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54922,54923],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54925,54926],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54928,54929],{},"开发中尽量保持形参和实参个数一致",[29,54931,54932],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54934,54935],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54937,54938],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[2587,54940,54942],{"id":54941},"_292-函数的返回值","2.9.2 函数的返回值",[19,54944,54945],{},[3929,54946],{"alt":118,"src":54947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54949,54950],{},[3929,54951],{"alt":118,"src":54952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3606,54954,54955,54958,54961,54964,54967],{},[29,54956,54957],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54959,54960],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54962,54963],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54965,54966],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54968,54969],{},"断点调试:进入函数内部看执行过程F11",[2587,54971,54973],{"id":54972},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[113,54975,54977],{"className":53040,"code":54976,"language":53042,"meta":118,"style":118},"    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",[120,54978,54979,54984,54989,54993,54998],{"__ignoreMap":118},[123,54980,54981],{"class":125,"line":126},[123,54982,54983],{"class":129},"    function fn(a, b) {\n",[123,54985,54986],{"class":125,"line":140},[123,54987,54988],{"class":129},"      console.log(a + b);\n",[123,54990,54991],{"class":125,"line":156},[123,54992,4631],{"class":129},[123,54994,54995],{"class":125,"line":168},[123,54996,54997],{"class":129},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[123,54999,55000],{"class":125,"line":268},[123,55001,55002],{"class":129},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[2587,55004,55006],{"id":55005},"_294-作用域","2.9.4 作用域",[3606,55008,55009,55015,55020,55023,55026],{},[29,55010,55011,55012],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2759,55013,55014],{},"作用域",[29,55016,55017],{},[2759,55018,55019],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,55021,55022],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,55024,55025],{},"函数内部可以直接所使用全局变量",[29,55027,55028],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,55030,17063],{},[113,55032,55034],{"className":53040,"code":55033,"language":53042,"meta":118,"style":118},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[120,55035,55036,55041,55046,55050,55055,55060,55065],{"__ignoreMap":118},[123,55037,55038],{"class":125,"line":126},[123,55039,55040],{"class":129},"    function fun() {\n",[123,55042,55043],{"class":125,"line":140},[123,55044,55045],{"class":129},"      num = 10\n",[123,55047,55048],{"class":125,"line":156},[123,55049,4631],{"class":129},[123,55051,55052],{"class":125,"line":168},[123,55053,55054],{"class":129},"    fun()\n",[123,55056,55057],{"class":125,"line":268},[123,55058,55059],{"class":129},"    console.log(num)\n",[123,55061,55062],{"class":125,"line":291},[123,55063,55064],{"class":129},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[123,55066,55067],{"class":125,"line":300},[123,55068,55069],{"class":129},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3606,55071,55072,55075],{},[29,55073,55074],{},"函数内部的形参可以看做是局部变量",[29,55076,55077],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,55079,55080,55081],{},"变量访问原则： ",[2759,55082,55083],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[2587,55085,55087],{"id":55086},"_295-匿名函数","2.9.5 匿名函数",[19,55089,55090],{},"函数可以分为具名函数和匿名函数",[19,55092,55093],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,55095,55096],{},[29,55097,55098],{},"函数表达式",[19,55100,55101],{},[3929,55102],{"alt":118,"src":55103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,55105,55106],{},"里边也可以写参数",[19,55108,55109],{},"具名函数调用位置可以随意调整；",[19,55111,55112],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,55114,55115],{"start":140},[29,55116,55117],{},"立即执行函数",[19,55119,55120],{},[3929,55121],{"alt":118,"src":55122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,55124,55125],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,55127,55128],{},"写法：两个小括号，然后在第一个小括号中写function",[19,55130,55131],{},"(function () {})();",[19,55133,55134],{},"不要落下最后的;",[19,55136,55137],{},"立即执行函数必须要加;",[19,55139,55140],{},"分号写前写后都没问题",[19,55142,55143],{},"写前：",[19,55145,55146],{},"(function() {})()",[19,55148,55149],{},";(function () {})();",[19,55151,55152],{},"写后:",[19,55154,55155],{},"(function() {})();",[19,55157,55131],{},[19,55159,55160],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,55162,55163],{},"还有一种写法：",[19,55165,55166],{},"(function(){}());",[19,55168,55169],{},"或者:",[19,55171,55172],{},"!function(){}();",[19,55174,55175],{},"立即执行函数有时候也是可以加名字的：",[19,55177,55178],{},"(function flexible(window,document) {}(window,document));",[19,55180,55181],{},"省一些调用方法",[2587,55183,55185],{"id":55184},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55187,55188],{},[3929,55189],{"alt":118,"src":55190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55192,55193],{},"这样就不用非得给x,y初始化了",[19,55195,55196],{},[3929,55197],{"alt":118,"src":55198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55200,55201],{},"代码执行时先看左边",[19,55203,55204],{},"例如：console.log(false && 3+5)",[19,55206,55207],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55209,55210],{},"&&都是真时，就返回最后一个真值",[19,55212,55213],{},"console.log(11 && 22)",[19,55215,55216],{},"输出22",[19,55218,55219],{},"逻辑与：遇真则真",[19,55221,17063],{},[19,55223,55224],{},"let age=1",[19,55226,55227],{},"console.log(11 || age++)",[19,55229,55230],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55232,55233],{},"console.log(11 || 22)",[19,55235,55236],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55238,55239],{},"||如果都是假的话，就取最后一个假的值了",[2587,55241,55243],{"id":55242},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55245,55246],{},"显示转换：",[19,55248,55249,55252,55253],{},[2759,55250,55251],{},"记忆","： ",[2759,55254,55255],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55257,55258],{},"空字符串为假，其他字符串全为真",[19,55260,55261],{},[3929,55262],{"alt":118,"src":55263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55265,55266],{},"隐式转换：",[19,55268,55269],{},[3929,55270],{"alt":118,"src":55271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55273,55274],{},"隐式转换:",[19,55276,55277],{},"null+3=3",[19,55279,55280],{},"undefined+3=NaN",[19,55282,55283],{},"null==undefined 输出true,他两个都当0看",[19,55285,55286],{},"null===undefined 输出false",[19,55288,55289],{},"undefined做任何操作都是NaN",[19,55291,55292],{},"NaN不等于NaN，NaN表示计算错误",[14,55294,55296],{"id":55295},"_210-对象","2.10 对象",[2587,55298,55300],{"id":55299},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55302,55303],{},"对象也是一种数据类型，里边的数据是无序的",[19,55305,55306],{},"对象由属性和方法组成",[19,55308,55309],{},[3929,55310],{"alt":118,"src":55311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55313,55314],{},[3929,55315],{"alt":118,"src":55316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55318,55319],{},[3929,55320],{"alt":118,"src":55321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[2587,55323,55325],{"id":55324},"_2102-对象属性","2.10.2 对象属性",[19,55327,55328],{},[3929,55329],{"alt":118,"src":55330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,55332,55333],{},[29,55334,55335],{},"查询对象",[19,55337,55338],{},"对象名.属性 goods.uname",[19,55340,55341],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55343,55344],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55346,55347],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55349,55350],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,55352,55353],{"start":140},[29,55354,55355],{},"重新赋值",[19,55357,55358],{},"对象名.属性=新值",[26,55360,55361],{"start":156},[29,55362,55363],{},"增加新数据",[19,55365,55358],{},[26,55367,55368],{"start":168},[29,55369,55370],{},"删除对象中的属性",[19,55372,55373],{},"delete 对象名.属性",[2587,55375,55377],{"id":55376},"_2103-对象方法","2.10.3 对象方法",[19,55379,55380],{},[3929,55381],{"alt":118,"src":55382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55384,55385],{},"后边跟的是匿名函数",[19,55387,55388],{},"对象外面的叫函数；对象内部的叫方法",[19,55390,55391],{},[3929,55392],{"alt":118,"src":55393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[2587,55395,55397],{"id":55396},"_2104-遍历对象","2.10.4 遍历对象",[19,55399,55400],{},"理解为加括号的python字典遍历",[19,55402,55403],{},[3929,55404],{"alt":118,"src":55405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55407,55408],{},"k是字符串类型",[19,55410,55411],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[113,55413,55415],{"className":53040,"code":55414,"language":53042,"meta":118,"style":118},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[120,55416,55417,55422,55427,55432,55437],{"__ignoreMap":118},[123,55418,55419],{"class":125,"line":126},[123,55420,55421],{"class":129},"   let arr = [1, 2, 3]\n",[123,55423,55424],{"class":125,"line":140},[123,55425,55426],{"class":129},"    for (let k in arr) {\n",[123,55428,55429],{"class":125,"line":156},[123,55430,55431],{"class":129},"      console.log(k)\n",[123,55433,55434],{"class":125,"line":168},[123,55435,55436],{"class":129},"      console.log(arr[k])\n",[123,55438,55439],{"class":125,"line":268},[123,55440,4631],{"class":129},[19,55442,55443],{},[3929,55444],{"alt":118,"src":55445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55447,55448],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55450,55451],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55453,55454],{},"for in 得到的k是属性名",[54218,55456,55457],{},"\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,55459,55460],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[2587,55462,55464],{"id":55463},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55466,55467],{},"数组中放对象信息",[113,55469,55473],{"className":55470,"code":55471,"language":55472,"meta":118,"style":118},"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",[120,55474,55475,55483,55488,55493,55498,55503,55508,55513,55518,55523,55528,55533,55538,55542,55546],{"__ignoreMap":118},[123,55476,55477,55479,55481],{"class":125,"line":126},[123,55478,3509],{"class":129},[123,55480,54218],{"class":53707},[123,55482,53714],{"class":129},[123,55484,55485],{"class":125,"line":140},[123,55486,55487],{"class":129},"    let students = [\n",[123,55489,55490],{"class":125,"line":156},[123,55491,55492],{"class":129},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[123,55494,55495],{"class":125,"line":168},[123,55496,55497],{"class":129},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[123,55499,55500],{"class":125,"line":268},[123,55501,55502],{"class":129},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[123,55504,55505],{"class":125,"line":291},[123,55506,55507],{"class":129},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[123,55509,55510],{"class":125,"line":300},[123,55511,55512],{"class":129},"    ]\n",[123,55514,55515],{"class":125,"line":305},[123,55516,55517],{"class":129},"    for (let i = 0; i \u003C students.length; i++) {\n",[123,55519,55520],{"class":125,"line":316},[123,55521,55522],{"class":129},"      for (let k in students[i]) {\n",[123,55524,55525],{"class":125,"line":673},[123,55526,55527],{"class":129},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[123,55529,55530],{"class":125,"line":692},[123,55531,55532],{"class":129},"        \u002F\u002F输出每个人的名字：\n",[123,55534,55535],{"class":125,"line":713},[123,55536,55537],{"class":129},"        \u002F\u002Fconsole.log(students[i].name)\n",[123,55539,55540],{"class":125,"line":718},[123,55541,54801],{"class":129},[123,55543,55544],{"class":125,"line":1138},[123,55545,4631],{"class":129},[123,55547,55548,55550,55552],{"class":125,"line":1429},[123,55549,54820],{"class":129},[123,55551,54218],{"class":53707},[123,55553,53714],{"class":129},[2587,55555,55557],{"id":55556},"_2106-内置对象","2.10.6 内置对象",[19,55559,55560],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,55562,55563],{},[29,55564,55565],{},"数学对象Math",[19,55567,55568],{},[3929,55569],{"alt":118,"src":55570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55572,55573],{},[2846,55574,55577],{"href":55575,"rel":55576},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26287],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55579,55580],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55582,55583],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55585,55586],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55588,55589],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55591,55592],{},"null属于对象数据类型",[26,55594,55595],{"start":140},[29,55596,55597],{},"生成任意范围随机数",[19,55599,55600],{},[3929,55601],{"alt":118,"src":55602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55604,55605],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55607,55608],{},"乘以几就取不到几",[19,55610,55611],{},"取数组中的随机元素：",[19,55613,55614],{},"let arr = ['red', 'green', 'blue']",[19,55616,55617],{},"let random = Math.floor(Math.random() * arr.length)",[19,55619,55620],{},"console.log(arr[random])",[19,55622,55623],{},"这个函数得到的是全闭区间",[19,55625,55626],{},"function getRandom(N, M) {",[19,55628,55629],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55631,3545],{},[19,55633,55634],{},"console.log(getRandom(4, 8))",[2587,55636,55638],{"id":55637},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55640,55641],{},[3929,55642],{"alt":118,"src":55643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55645,55646],{},[3929,55647],{"alt":118,"src":55648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55650,55651],{},[3929,55652],{"alt":118,"src":55653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55655,55656],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55658,55659],{},[3929,55660],{"alt":118,"src":55661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55663,55664],{},[3929,55665],{"alt":118,"src":55666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55668,55669],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55671,55672],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55674,55675],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2526,55677,55678],{},"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":118,"searchDepth":140,"depth":140,"links":55680},[55681,55689,55690,55691,55692,55693,55700,55704,55710,55719],{"id":52875,"depth":140,"text":52876,"children":55682},[55683,55684,55685,55686,55687,55688],{"id":52879,"depth":156,"text":52880},{"id":52896,"depth":156,"text":52897},{"id":52936,"depth":156,"text":52937},{"id":52948,"depth":156,"text":52949},{"id":52957,"depth":156,"text":52958},{"id":53005,"depth":156,"text":53006},{"id":53015,"depth":140,"text":53016},{"id":53103,"depth":140,"text":53104},{"id":53126,"depth":140,"text":53127},{"id":53138,"depth":140,"text":53139},{"id":53325,"depth":140,"text":53326,"children":55694},[55695,55696,55697,55698,55699],{"id":53329,"depth":156,"text":53330},{"id":53338,"depth":156,"text":53339},{"id":53366,"depth":156,"text":53367},{"id":53402,"depth":156,"text":53403},{"id":53427,"depth":156,"text":53428},{"id":53439,"depth":140,"text":53440,"children":55701},[55702,55703],{"id":53460,"depth":156,"text":53461},{"id":53554,"depth":156,"text":53555},{"id":53612,"depth":140,"text":53613,"children":55705},[55706,55707,55708,55709],{"id":53616,"depth":156,"text":53617},{"id":53640,"depth":156,"text":53641},{"id":53693,"depth":156,"text":53694},{"id":54501,"depth":156,"text":54502},{"id":54886,"depth":140,"text":54887,"children":55711},[55712,55713,55714,55715,55716,55717,55718],{"id":54904,"depth":156,"text":54905},{"id":54941,"depth":156,"text":54942},{"id":54972,"depth":156,"text":54973},{"id":55005,"depth":156,"text":55006},{"id":55086,"depth":156,"text":55087},{"id":55184,"depth":156,"text":55185},{"id":55242,"depth":156,"text":55243},{"id":55295,"depth":140,"text":55296,"children":55720},[55721,55722,55723,55724,55725,55726,55727],{"id":55299,"depth":156,"text":55300},{"id":55324,"depth":156,"text":55325},{"id":55376,"depth":156,"text":55377},{"id":55396,"depth":156,"text":55397},{"id":55463,"depth":156,"text":55464},{"id":55556,"depth":156,"text":55557},{"id":55637,"depth":156,"text":55638},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52867,"description":2544},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55734,"title":55735,"body":55736,"description":2544,"extension":2545,"meta":79073,"navigation":231,"path":79074,"seo":79075,"stem":79076,"__hash__":79077},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55737,"toc":79013},[55738,55741,55744,55747,55752,55755,55758,55761,55765,55769,55775,55780,55788,55795,55798,55802,55807,55812,55817,55820,55823,55834,55837,55841,55844,55847,55852,55857,55862,55865,55868,55960,55963,55968,55971,55976,55979,55982,55987,55990,55995,55999,56002,56016,56020,56025,56028,56031,56035,56040,56043,56047,56051,56056,56060,56065,56068,56071,56074,56077,56080,56083,56088,56093,56121,56124,56127,56130,56135,56138,56141,56144,56147,56151,56180,56184,56189,56194,56197,56200,56203,56208,56323,56328,56333,56494,56499,56502,56506,56511,56516,56519,56522,56525,56528,56531,56534,56537,56540,56543,56546,56549,56552,56555,56558,56560,56563,56566,56569,56574,56578,56975,56978,56984,56988,56993,58274,58279,58282,58285,58288,58293,59489,59493,59499,59504,59507,59512,59517,59521,59525,59530,59533,59538,59541,59544,59548,60456,60459,60463,60684,60687,60690,60693,60919,60922,61146,61149,61153,61158,61161,61164,61392,61395,61428,61431,61435,61440,61444,61447,61450,61453,61456,61459,61462,61465,61470,62750,62754,62757,63850,63854,63857,63860,63863,63866,63870,63873,63876,63878,63886,65366,65370,65373,65376,65379,65588,65591,65595,65599,65604,65609,65612,65615,65620,65624,65629,65632,65741,65745,65750,65755,65758,65761,65765,65770,65775,65780,65783,65786,65797,65800,65805,65810,65813,65816,65889,65893,65898,65901,65903,65914,65918,65923,67249,67252,67255,67258,67260,67263,67266,67269,67272,67275,67278,67281,67284,67287,67290,67293,67296,67298,67300,67303,67307,68401,68404,68407,68423,68437,68440,68445,68451,68456,68460,68464,68469,68473,68478,68920,68925,68928,68932,68937,68940,68943,68947,68952,68956,68961,68966,68970,68975,68980,68983,68988,68993,68997,69002,69007,69111,69114,69118,69123,69489,69492,69495,69498,69501,69504,69507,69510,69513,70809,70813,70818,70823,70826,70829,70832,70835,70837,70842,70847,70850,70854,70859,70864,70869,70872,70875,70878,70881,70884,70889,70892,70896,70901,70906,70910,70915,70918,70923,70926,70929,70932,70935,70938,70943,70946,70949,70952,70955,70959,70964,70967,70971,70976,70979,70982,70986,71015,71018,71022,71026,71031,71035,71040,71043,71046,71049,71052,71055,71058,71061,71064,71067,71070,71073,71076,71079,71082,71086,71091,71096,71099,71103,71107,71112,71115,71119,71122,71125,71130,71135,71140,71145,71150,71153,71156,71161,71166,71170,71175,71178,71183,71186,71189,71192,71195,71200,71203,71212,71216,71221,71224,71227,71231,71234,71239,71243,71246,71252,71258,71262,71288,71291,72851,72854,73350,73353,73358,73363,73368,73372,73377,73382,73387,73391,73396,73399,73402,73405,73408,73412,73415,73420,73423,73428,73432,73437,73440,73445,73450,73455,73458,73461,73466,73471,73474,73477,73481,73484,73489,73492,73497,73500,73505,73510,73515,73518,73523,73588,73591,73602,73606,73611,73783,73787,73792,73795,73798,73801,73805,73816,73820,73823,73828,73833,73836,73839,73842,73845,73848,73850,73853,73856,73859,73864,73867,73872,73875,73879,73882,73885,73899,73903,73906,73961,73966,73969,73972,73977,73980,73984,73989,74119,74123,74128,74133,74214,74219,74223,74226,74231,74236,74242,74245,74248,74251,74255,74260,74263,74274,74278,74295,77342,77346,77349,77352,77355,77376,77380,77383,77391,77394,77399,77402,77405,77410,77415,77419,77440,77444,77449,77452,77455,77458,77461,77465,77470,77473,77477,77482,77485,77490,77493,77498,77501,77506,78709,78713,78718,78721,78726,79010],[10,55739,55735],{"id":55740},"_3web-apis",[19,55742,55743],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55745,55746],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55748,55749],{},[3929,55750],{"alt":118,"src":55751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55753,55754],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55756,55757],{},"建议数组和对象使用 const 来声明",[19,55759,55760],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55762,55764],{"id":55763},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[2587,55766,55768],{"id":55767},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55770,55771,55774],{},[120,55772,55773],{},"document"," = HTML 文件解析后的对象化表示；",[19,55776,55777,55779],{},[120,55778,55773],{}," ≠ HTML 文件本身",[19,55781,55782,55787],{},[2759,55783,55784],{},[120,55785,55786],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55789,55790,55794],{},[2759,55791,55792],{},[120,55793,55773],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55796,55797],{},"document实际上为window.document的简写",[2587,55799,55801],{"id":55800},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55803,55804],{},[3929,55805],{"alt":118,"src":55806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55808,55809],{},[3929,55810],{"alt":118,"src":55811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55813,55814],{},[3929,55815],{"alt":118,"src":55816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55818,55819],{},"console.dir()",[19,55821,55822],{},"dir用来打印对象",[3606,55824,55825,55828,55831],{},[29,55826,55827],{},"任何一个标签，都是一个对象",[29,55829,55830],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55832,55833],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55835,55836],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[2587,55838,55840],{"id":55839},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55842,55843],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55845,55846],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55848,55849],{},[2759,55850,55851],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55853,55854],{},[29,55855,55856],{},"利用CSS选择器来获取标签元素",[19,55858,55859],{},[3929,55860],{"alt":118,"src":55861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55863,55864],{},"里边的选择器必须必须加引号！！！",[19,55866,55867],{},"只选择第一个元素",[113,55869,55871],{"className":55470,"code":55870,"language":55472,"meta":118,"style":118},"\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",[120,55872,55873,55881,55902,55921,55929,55934,55939,55944,55952],{"__ignoreMap":118},[123,55874,55875,55877,55879],{"class":125,"line":126},[123,55876,3509],{"class":129},[123,55878,54205],{"class":53707},[123,55880,53714],{"class":129},[123,55882,55883,55885,55887,55890,55892,55895,55898,55900],{"class":125,"line":140},[123,55884,54548],{"class":129},[123,55886,54016],{"class":53707},[123,55888,55889],{"class":337}," class",[123,55891,134],{"class":129},[123,55893,55894],{"class":143},"\"box\"",[123,55896,55897],{"class":129},">123\u003C\u002F",[123,55899,54016],{"class":53707},[123,55901,53714],{"class":129},[123,55903,55904,55906,55908,55910,55912,55914,55917,55919],{"class":125,"line":156},[123,55905,54548],{"class":129},[123,55907,54016],{"class":53707},[123,55909,55889],{"class":337},[123,55911,134],{"class":129},[123,55913,55894],{"class":143},[123,55915,55916],{"class":129},">456\u003C\u002F",[123,55918,54016],{"class":53707},[123,55920,53714],{"class":129},[123,55922,55923,55925,55927],{"class":125,"line":168},[123,55924,54548],{"class":129},[123,55926,54218],{"class":53707},[123,55928,53714],{"class":129},[123,55930,55931],{"class":125,"line":268},[123,55932,55933],{"class":129},"    \u002F\u002F 1.获取匹配的第一个元素\n",[123,55935,55936],{"class":125,"line":291},[123,55937,55938],{"class":129},"    const box = document.querySelector('div')\n",[123,55940,55941],{"class":125,"line":300},[123,55942,55943],{"class":129},"    console.dir(box)\n",[123,55945,55946,55948,55950],{"class":125,"line":305},[123,55947,54820],{"class":129},[123,55949,54218],{"class":53707},[123,55951,53714],{"class":129},[123,55953,55954,55956,55958],{"class":125,"line":316},[123,55955,54190],{"class":129},[123,55957,54205],{"class":53707},[123,55959,53714],{"class":129},[19,55961,55962],{},"只选123，不选456",[19,55964,55965],{},[3929,55966],{"alt":118,"src":55967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55969,55970],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55972,55973],{},[3929,55974],{"alt":118,"src":55975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55977,55978],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55980,55981],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55983,55984],{"start":140},[29,55985,55986],{},"其他方法来获取标签元素",[19,55988,55989],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55991,55992],{},[3929,55993],{"alt":118,"src":55994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[2587,55996,55998],{"id":55997},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,56000,56001],{},"设置修改DOM元素内容有两种方式：",[3606,56003,56004,56007,56010,56013],{},[29,56005,56006],{},"元素.innerText=''",[29,56008,56009],{},"元素.innerHTML=''",[29,56011,56012],{},"不写字符串输出数字也是可以的",[29,56014,56015],{},"元素.innerHtml=1",[24425,56017,56019],{"id":56018},"_3131-innertext","3.1.3.1 innerText",[19,56021,56022],{},[3929,56023],{"alt":118,"src":56024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,56026,56027],{},"思路：实现了修改盒子中的内容！",[19,56029,56030],{},"它只显示纯文本，不解析标签",[24425,56032,56034],{"id":56033},"_3132-innerhtml","3.1.3.2 innerHTML",[19,56036,56037],{},[3929,56038],{"alt":118,"src":56039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,56041,56042],{},"相比于innerText，他的强大之处在于可以解析标签",[2587,56044,56046],{"id":56045},"_314-操作元素属性","3.1.4 操作元素属性",[24425,56048,56050],{"id":56049},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,56052,56053],{},[3929,56054],{"alt":118,"src":56055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24425,56057,56059],{"id":56058},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,56061,56062],{},[3929,56063],{"alt":118,"src":56064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,56066,56067],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,56069,56070],{},"div.style.backgroundColor = 'hotpink'",[19,56072,56073],{},"如果按照css的写法，-表示减，就会出错",[19,56075,56076],{},"body元素不需要再获取，直接用就行！！！！！！",[19,56078,56079],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,56081,56082],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,56084,56085],{},[3929,56086],{"alt":118,"src":56087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,56089,56090],{},[3929,56091],{"alt":118,"src":56092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,56094,56095,56098,56101,56104,56107,56110],{},[29,56096,56097],{},"className这个方式就是修改很多样式的时候来使用的！",[29,56099,56100],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,56102,56103],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,56105,56106],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,56108,56109],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,56111,56112,56113,56118],{},"解析标签的时候就变为了",[54016,56114],{"className":56115},[56116,56117],"nav","box",[56119,56120],"br",{},[19,56122,56123],{},"例子：",[54016,56125],{"className":56126},[56116],[54218,56128,56129],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,56131,56132],{},[3929,56133],{"alt":118,"src":56134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,56136,56137],{},"追加和删除类名用classList",[19,56139,56140],{},"常用于类似于开关的操作",[19,56142,56143],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,56145,56146],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24425,56148,56150],{"id":56149},"_3143-牢记点","3.1.4.3 牢记点",[26,56152,56153,56156,56159,56162,56165,56168,56171,56174,56177],{},[29,56154,56155],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,56157,56158],{},"使用style属性操作css时不要忘记引号",[29,56160,56161],{},"使用className或者classList时也不要忘记引号",[29,56163,56164],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,56166,56167],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,56169,56170],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,56172,56173],{},"若： let arr=['1','2',3] arr[0]=1",[29,56175,56176],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,56178,56179],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[2587,56181,56183],{"id":56182},"_315-操作表单元素","3.1.5 操作表单元素",[26,56185,56186],{},[29,56187,56188],{},"天生的属性",[19,56190,56191],{},[3929,56192],{"alt":118,"src":56193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56195,56196],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56198,56199],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56201,56202],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56204,56205],{},[3929,56206],{"alt":118,"src":56207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[113,56209,56211],{"className":53040,"code":56210,"language":53042,"meta":118,"style":118},"在复选框中如果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",[120,56212,56213,56218,56250,56255,56260,56265,56270,56274,56279,56284,56301,56313,56318],{"__ignoreMap":118},[123,56214,56215],{"class":125,"line":126},[123,56216,56217],{"class":129},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[123,56219,56220,56222,56225,56228,56230,56233,56235,56237,56239,56241,56243,56245,56248],{"class":125,"line":140},[123,56221,3509],{"class":129},[123,56223,56224],{"class":53707},"input",[123,56226,56227],{"class":337}," type",[123,56229,134],{"class":129},[123,56231,56232],{"class":143},"\"checkbox\"",[123,56234,17350],{"class":337},[123,56236,134],{"class":129},[123,56238,1629],{"class":143},[123,56240,17389],{"class":337},[123,56242,134],{"class":129},[123,56244,1629],{"class":143},[123,56246,56247],{"class":337}," checked",[123,56249,53714],{"class":129},[123,56251,56252],{"class":125,"line":156},[123,56253,56254],{"class":129},"不选的话：\n",[123,56256,56257],{"class":125,"line":168},[123,56258,56259],{"class":129},"const input = document.querySelector('input')\n",[123,56261,56262],{"class":125,"line":268},[123,56263,56264],{"class":129},"input.checked=false\n",[123,56266,56267],{"class":125,"line":291},[123,56268,56269],{"class":129},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[123,56271,56272],{"class":125,"line":300},[123,56273,232],{"emptyLinePlaceholder":231},[123,56275,56276],{"class":125,"line":305},[123,56277,56278],{"class":129},"禁用按钮：\n",[123,56280,56281],{"class":125,"line":316},[123,56282,56283],{"class":129},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[123,56285,56286,56288,56291,56294,56297,56299],{"class":125,"line":673},[123,56287,3509],{"class":129},[123,56289,56290],{"class":53707},"button",[123,56292,56293],{"class":337}," disabled",[123,56295,56296],{"class":129},">点击\u003C\u002F",[123,56298,56290],{"class":53707},[123,56300,53714],{"class":129},[123,56302,56303,56305,56307,56309,56311],{"class":125,"line":692},[123,56304,3509],{"class":129},[123,56306,56290],{"class":53707},[123,56308,56296],{"class":129},[123,56310,56290],{"class":53707},[123,56312,53714],{"class":129},[123,56314,56315],{"class":125,"line":713},[123,56316,56317],{"class":129},"const bt = document.querySelector('button')\n",[123,56319,56320],{"class":125,"line":718},[123,56321,56322],{"class":129},"bt.disabled = false\n",[26,56324,56325],{"start":140},[29,56326,56327],{},"自定义属性",[19,56329,56330],{},[3929,56331],{"alt":118,"src":56332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[113,56334,56336],{"className":55470,"code":56335,"language":55472,"meta":118,"style":118},"\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",[120,56337,56338,56346,56374,56393,56412,56431,56450,56458,56463,56468,56473,56478,56486],{"__ignoreMap":118},[123,56339,56340,56342,56344],{"class":125,"line":126},[123,56341,3509],{"class":129},[123,56343,54205],{"class":53707},[123,56345,53714],{"class":129},[123,56347,56348,56350,56352,56355,56357,56359,56362,56364,56367,56370,56372],{"class":125,"line":140},[123,56349,54548],{"class":129},[123,56351,54016],{"class":53707},[123,56353,56354],{"class":337}," data-id",[123,56356,134],{"class":129},[123,56358,6118],{"class":143},[123,56360,56361],{"class":337}," data-spm",[123,56363,134],{"class":129},[123,56365,56366],{"class":143},"\"我不知道\"",[123,56368,56369],{"class":129},">1\u003C\u002F",[123,56371,54016],{"class":53707},[123,56373,53714],{"class":129},[123,56375,56376,56378,56380,56382,56384,56386,56389,56391],{"class":125,"line":156},[123,56377,54548],{"class":129},[123,56379,54016],{"class":53707},[123,56381,56354],{"class":337},[123,56383,134],{"class":129},[123,56385,6141],{"class":143},[123,56387,56388],{"class":129},">2\u003C\u002F",[123,56390,54016],{"class":53707},[123,56392,53714],{"class":129},[123,56394,56395,56397,56399,56401,56403,56405,56408,56410],{"class":125,"line":168},[123,56396,54548],{"class":129},[123,56398,54016],{"class":53707},[123,56400,56354],{"class":337},[123,56402,134],{"class":129},[123,56404,6154],{"class":143},[123,56406,56407],{"class":129},">3\u003C\u002F",[123,56409,54016],{"class":53707},[123,56411,53714],{"class":129},[123,56413,56414,56416,56418,56420,56422,56424,56427,56429],{"class":125,"line":268},[123,56415,54548],{"class":129},[123,56417,54016],{"class":53707},[123,56419,56354],{"class":337},[123,56421,134],{"class":129},[123,56423,6167],{"class":143},[123,56425,56426],{"class":129},">4\u003C\u002F",[123,56428,54016],{"class":53707},[123,56430,53714],{"class":129},[123,56432,56433,56435,56437,56439,56441,56443,56446,56448],{"class":125,"line":291},[123,56434,54548],{"class":129},[123,56436,54016],{"class":53707},[123,56438,56354],{"class":337},[123,56440,134],{"class":129},[123,56442,6187],{"class":143},[123,56444,56445],{"class":129},">5\u003C\u002F",[123,56447,54016],{"class":53707},[123,56449,53714],{"class":129},[123,56451,56452,56454,56456],{"class":125,"line":300},[123,56453,54548],{"class":129},[123,56455,54218],{"class":53707},[123,56457,53714],{"class":129},[123,56459,56460],{"class":125,"line":305},[123,56461,56462],{"class":129},"    const one = document.querySelector('div')\n",[123,56464,56465],{"class":125,"line":316},[123,56466,56467],{"class":129},"    console.log(one.dataset)\n",[123,56469,56470],{"class":125,"line":673},[123,56471,56472],{"class":129},"    console.log(one.dataset.id)\n",[123,56474,56475],{"class":125,"line":692},[123,56476,56477],{"class":129},"    console.log(one.dataset.spm)\n",[123,56479,56480,56482,56484],{"class":125,"line":713},[123,56481,54820],{"class":129},[123,56483,54218],{"class":53707},[123,56485,53714],{"class":129},[123,56487,56488,56490,56492],{"class":125,"line":718},[123,56489,54190],{"class":129},[123,56491,54205],{"class":53707},[123,56493,53714],{"class":129},[19,56495,56496],{},[3929,56497],{"alt":118,"src":56498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56500,56501],{},"document.querySelector选择的是第一个对象（元素）",[2587,56503,56505],{"id":56504},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56507,56508],{},[3929,56509],{"alt":118,"src":56510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56512,56513],{},[3929,56514],{"alt":118,"src":56515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56517,56518],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54218,56520,56521],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56523,56524],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54218,56526,56527],{},"\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,56529,56530],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56532,56533],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56535,56536],{},"单位为毫秒！！！",[19,56538,56539],{},"可以搭配匿名函数来用！！！",[19,56541,56542],{},"setInterval(function () {",[19,56544,56545],{},"alert('两秒执行一次')",[19,56547,56548],{},"}, 2000)",[19,56550,56551],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56553,56554],{},"function fn() {",[19,56556,56557],{},"document.write(1)",[19,56559,3545],{},[19,56561,56562],{},"setInterval(fn, 1000)",[19,56564,56565],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56567,56568],{},"setInterval('fn()', 1000)",[19,56570,56571],{},[3929,56572],{"alt":118,"src":56573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24425,56575,56577],{"id":56576},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[113,56579,56581],{"className":53040,"code":56580,"language":53042,"meta":118,"style":118},"\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",[120,56582,56583,56593,56607,56611,56619,56633,56653,56665,56673,56677,56685,56722,56727,56732,56737,56745,56753,56775,56783,56788,56810,56815,56820,56831,56836,56856,56864,56879,56894,56905,56910,56920,56930,56934,56943,56947,56955,56963,56967],{"__ignoreMap":118},[123,56584,56585,56587,56589,56591],{"class":125,"line":126},[123,56586,53704],{"class":129},[123,56588,53708],{"class":53707},[123,56590,53711],{"class":337},[123,56592,53714],{"class":129},[123,56594,56595,56597,56599,56601,56603,56605],{"class":125,"line":140},[123,56596,3509],{"class":129},[123,56598,53042],{"class":53707},[123,56600,53723],{"class":337},[123,56602,134],{"class":129},[123,56604,53728],{"class":143},[123,56606,53714],{"class":129},[123,56608,56609],{"class":125,"line":156},[123,56610,232],{"emptyLinePlaceholder":231},[123,56612,56613,56615,56617],{"class":125,"line":168},[123,56614,3509],{"class":129},[123,56616,53741],{"class":53707},[123,56618,53714],{"class":129},[123,56620,56621,56623,56625,56627,56629,56631],{"class":125,"line":268},[123,56622,54548],{"class":129},[123,56624,53751],{"class":53707},[123,56626,53754],{"class":337},[123,56628,134],{"class":129},[123,56630,53759],{"class":143},[123,56632,53714],{"class":129},[123,56634,56635,56637,56639,56641,56643,56645,56647,56649,56651],{"class":125,"line":291},[123,56636,54548],{"class":129},[123,56638,53751],{"class":53707},[123,56640,17350],{"class":337},[123,56642,134],{"class":129},[123,56644,53798],{"class":143},[123,56646,53778],{"class":337},[123,56648,134],{"class":129},[123,56650,53805],{"class":143},[123,56652,53714],{"class":129},[123,56654,56655,56657,56659,56661,56663],{"class":125,"line":300},[123,56656,54548],{"class":129},[123,56658,642],{"class":53707},[123,56660,53816],{"class":129},[123,56662,642],{"class":53707},[123,56664,53714],{"class":129},[123,56666,56667,56669,56671],{"class":125,"line":305},[123,56668,54190],{"class":129},[123,56670,53741],{"class":53707},[123,56672,53714],{"class":129},[123,56674,56675],{"class":125,"line":316},[123,56676,232],{"emptyLinePlaceholder":231},[123,56678,56679,56681,56683],{"class":125,"line":673},[123,56680,3509],{"class":129},[123,56682,54205],{"class":53707},[123,56684,53714],{"class":129},[123,56686,56687,56689,56692,56694,56696,56698,56700,56702,56704,56707,56709,56712,56715,56717,56720],{"class":125,"line":692},[123,56688,54548],{"class":129},[123,56690,56691],{"class":53707},"textarea",[123,56693,17350],{"class":337},[123,56695,134],{"class":129},[123,56697,1629],{"class":143},[123,56699,17389],{"class":337},[123,56701,134],{"class":129},[123,56703,1629],{"class":143},[123,56705,56706],{"class":337}," cols",[123,56708,134],{"class":129},[123,56710,56711],{"class":143},"\"30\"",[123,56713,56714],{"class":337}," rows",[123,56716,134],{"class":129},[123,56718,56719],{"class":143},"\"10\"",[123,56721,53714],{"class":129},[123,56723,56724],{"class":125,"line":713},[123,56725,56726],{"class":129},"        用户注册协议\n",[123,56728,56729],{"class":125,"line":718},[123,56730,56731],{"class":129},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[123,56733,56734],{"class":125,"line":1138},[123,56735,56736],{"class":129},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[123,56738,56739,56741,56743],{"class":125,"line":1429},[123,56740,54181],{"class":129},[123,56742,56691],{"class":53707},[123,56744,53714],{"class":129},[123,56746,56747,56749,56751],{"class":125,"line":1439},[123,56748,54548],{"class":129},[123,56750,56119],{"class":53707},[123,56752,53714],{"class":129},[123,56754,56755,56757,56759,56761,56763,56766,56768,56771,56773],{"class":125,"line":1444},[123,56756,54548],{"class":129},[123,56758,56290],{"class":53707},[123,56760,55889],{"class":337},[123,56762,134],{"class":129},[123,56764,56765],{"class":143},"\"btn\"",[123,56767,56293],{"class":337},[123,56769,56770],{"class":129},">我已经阅读用户协议(5)\u003C\u002F",[123,56772,56290],{"class":53707},[123,56774,53714],{"class":129},[123,56776,56777,56779,56781],{"class":125,"line":1453},[123,56778,54548],{"class":129},[123,56780,54218],{"class":53707},[123,56782,53714],{"class":129},[123,56784,56785],{"class":125,"line":1458},[123,56786,56787],{"class":2673},"    \u002F\u002F 1. 获取元素\n",[123,56789,56790,56792,56795,56797,56800,56803,56805,56808],{"class":125,"line":1476},[123,56791,13653],{"class":133},[123,56793,56794],{"class":164}," btn",[123,56796,15995],{"class":133},[123,56798,56799],{"class":129}," document.",[123,56801,56802],{"class":337},"querySelector",[123,56804,1315],{"class":129},[123,56806,56807],{"class":143},"'.btn'",[123,56809,288],{"class":129},[123,56811,56812],{"class":125,"line":1494},[123,56813,56814],{"class":2673},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[123,56816,56817],{"class":125,"line":1499},[123,56818,56819],{"class":2673},"    \u002F\u002F 2. 倒计时\n",[123,56821,56822,56824,56826,56828],{"class":125,"line":1517},[123,56823,54623],{"class":133},[123,56825,11870],{"class":129},[123,56827,134],{"class":133},[123,56829,56830],{"class":164}," 5\n",[123,56832,56833],{"class":125,"line":1534},[123,56834,56835],{"class":2673},"    \u002F\u002F 2.1 开启定时器\n",[123,56837,56838,56840,56843,56845,56848,56850,56853],{"class":125,"line":1539},[123,56839,54623],{"class":133},[123,56841,56842],{"class":129}," n ",[123,56844,134],{"class":133},[123,56846,56847],{"class":337}," setInterval",[123,56849,1315],{"class":129},[123,56851,56852],{"class":133},"function",[123,56854,56855],{"class":129}," () {\n",[123,56857,56858,56861],{"class":125,"line":2080},[123,56859,56860],{"class":129},"      i",[123,56862,56863],{"class":133},"--\n",[123,56865,56866,56869,56871,56874,56876],{"class":125,"line":2097},[123,56867,56868],{"class":129},"      btn.innerHTML ",[123,56870,134],{"class":133},[123,56872,56873],{"class":143}," `我已经阅读用户协议(${",[123,56875,3047],{"class":129},[123,56877,56878],{"class":143},"})`\n",[123,56880,56881,56884,56887,56890,56892],{"class":125,"line":2114},[123,56882,56883],{"class":133},"      if",[123,56885,56886],{"class":129}," (i ",[123,56888,56889],{"class":133},"===",[123,56891,6532],{"class":164},[123,56893,14873],{"class":129},[123,56895,56896,56899,56902],{"class":125,"line":2125},[123,56897,56898],{"class":337},"        clearInterval",[123,56900,56901],{"class":129},"(n)  ",[123,56903,56904],{"class":2673},"\u002F\u002F 关闭定时器\n",[123,56906,56907],{"class":125,"line":2130},[123,56908,56909],{"class":2673},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[123,56911,56912,56915,56917],{"class":125,"line":5033},[123,56913,56914],{"class":129},"        btn.disabled ",[123,56916,134],{"class":133},[123,56918,56919],{"class":164}," false\n",[123,56921,56922,56925,56927],{"class":125,"line":5041},[123,56923,56924],{"class":129},"        btn.innerHTML ",[123,56926,134],{"class":133},[123,56928,56929],{"class":143}," '同意'\n",[123,56931,56932],{"class":125,"line":5046},[123,56933,54801],{"class":129},[123,56935,56936,56939,56941],{"class":125,"line":5052},[123,56937,56938],{"class":129},"    }, ",[123,56940,8843],{"class":164},[123,56942,288],{"class":129},[123,56944,56945],{"class":125,"line":5058},[123,56946,232],{"emptyLinePlaceholder":231},[123,56948,56949,56951,56953],{"class":125,"line":5063},[123,56950,54820],{"class":129},[123,56952,54218],{"class":53707},[123,56954,53714],{"class":129},[123,56956,56957,56959,56961],{"class":125,"line":10380},[123,56958,54190],{"class":129},[123,56960,54205],{"class":53707},[123,56962,53714],{"class":129},[123,56964,56965],{"class":125,"line":10404},[123,56966,232],{"emptyLinePlaceholder":231},[123,56968,56969,56971,56973],{"class":125,"line":10409},[123,56970,54190],{"class":129},[123,56972,53042],{"class":53707},[123,56974,53714],{"class":129},[19,56976,56977],{},"不要一直想着用死循环,避免死循环",[19,56979,56980,56983],{},[120,56981,56982],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24425,56985,56987],{"id":56986},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56989,56990],{},[29,56991,56992],{},"法1",[113,56994,56996],{"className":53040,"code":56995,"language":53042,"meta":118,"style":118},"\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",[120,56997,56998,57008,57022,57026,57034,57048,57068,57080,57088,57094,57105,57116,57120,57124,57131,57143,57147,57151,57158,57170,57184,57197,57211,57215,57219,57226,57237,57248,57259,57271,57283,57295,57299,57303,57311,57321,57334,57346,57359,57363,57367,57374,57384,57396,57408,57419,57430,57440,57452,57464,57468,57472,57481,57493,57505,57533,57546,57550,57554,57561,57572,57576,57584,57592,57596,57604,57618,57633,57657,57665,57680,57693,57701,57722,57734,57746,57758,57770,57782,57794,57806,57815,57823,57831,57839,57850,57873,57892,57911,57930,57949,57968,57987,58007,58011,58031,58050,58070,58091,58102,58119,58129,58139,58149,58154,58159,58164,58169,58194,58207,58211,58234,58238,58246,58254,58262,58266],{"__ignoreMap":118},[123,56999,57000,57002,57004,57006],{"class":125,"line":126},[123,57001,53704],{"class":129},[123,57003,53708],{"class":53707},[123,57005,53711],{"class":337},[123,57007,53714],{"class":129},[123,57009,57010,57012,57014,57016,57018,57020],{"class":125,"line":140},[123,57011,3509],{"class":129},[123,57013,53042],{"class":53707},[123,57015,53723],{"class":337},[123,57017,134],{"class":129},[123,57019,53728],{"class":143},[123,57021,53714],{"class":129},[123,57023,57024],{"class":125,"line":156},[123,57025,232],{"emptyLinePlaceholder":231},[123,57027,57028,57030,57032],{"class":125,"line":168},[123,57029,3509],{"class":129},[123,57031,53741],{"class":53707},[123,57033,53714],{"class":129},[123,57035,57036,57038,57040,57042,57044,57046],{"class":125,"line":268},[123,57037,54548],{"class":129},[123,57039,53751],{"class":53707},[123,57041,53754],{"class":337},[123,57043,134],{"class":129},[123,57045,53759],{"class":143},[123,57047,53714],{"class":129},[123,57049,57050,57052,57054,57056,57058,57060,57062,57064,57066],{"class":125,"line":291},[123,57051,54548],{"class":129},[123,57053,53751],{"class":53707},[123,57055,17350],{"class":337},[123,57057,134],{"class":129},[123,57059,53798],{"class":143},[123,57061,53778],{"class":337},[123,57063,134],{"class":129},[123,57065,53805],{"class":143},[123,57067,53714],{"class":129},[123,57069,57070,57072,57074,57076,57078],{"class":125,"line":300},[123,57071,54548],{"class":129},[123,57073,642],{"class":53707},[123,57075,53816],{"class":129},[123,57077,642],{"class":53707},[123,57079,53714],{"class":129},[123,57081,57082,57084,57086],{"class":125,"line":305},[123,57083,54548],{"class":129},[123,57085,2526],{"class":53707},[123,57087,53714],{"class":129},[123,57089,57090,57092],{"class":125,"line":316},[123,57091,8836],{"class":53707},[123,57093,137],{"class":129},[123,57095,57096,57099,57101,57103],{"class":125,"line":673},[123,57097,57098],{"class":164},"      padding",[123,57100,147],{"class":129},[123,57102,2799],{"class":164},[123,57104,3760],{"class":129},[123,57106,57107,57110,57112,57114],{"class":125,"line":692},[123,57108,57109],{"class":164},"      margin",[123,57111,147],{"class":129},[123,57113,2799],{"class":164},[123,57115,3760],{"class":129},[123,57117,57118],{"class":125,"line":713},[123,57119,4631],{"class":129},[123,57121,57122],{"class":125,"line":718},[123,57123,232],{"emptyLinePlaceholder":231},[123,57125,57126,57129],{"class":125,"line":1138},[123,57127,57128],{"class":53707},"    li",[123,57130,137],{"class":129},[123,57132,57133,57136,57138,57141],{"class":125,"line":1429},[123,57134,57135],{"class":164},"      list-style",[123,57137,147],{"class":129},[123,57139,57140],{"class":164},"none",[123,57142,3760],{"class":129},[123,57144,57145],{"class":125,"line":1439},[123,57146,4631],{"class":129},[123,57148,57149],{"class":125,"line":1444},[123,57150,232],{"emptyLinePlaceholder":231},[123,57152,57153,57156],{"class":125,"line":1453},[123,57154,57155],{"class":337},"    .box",[123,57157,137],{"class":129},[123,57159,57160,57163,57165,57168],{"class":125,"line":1458},[123,57161,57162],{"class":164},"      position",[123,57164,147],{"class":129},[123,57166,57167],{"class":164},"relative",[123,57169,3760],{"class":129},[123,57171,57172,57175,57177,57180,57182],{"class":125,"line":1476},[123,57173,57174],{"class":164},"      width",[123,57176,147],{"class":129},[123,57178,57179],{"class":164},"976",[123,57181,53897],{"class":133},[123,57183,3760],{"class":129},[123,57185,57186,57189,57191,57193,57195],{"class":125,"line":1494},[123,57187,57188],{"class":164},"      height",[123,57190,147],{"class":129},[123,57192,4006],{"class":164},[123,57194,53897],{"class":133},[123,57196,3760],{"class":129},[123,57198,57199,57201,57203,57205,57207,57209],{"class":125,"line":1499},[123,57200,57109],{"class":164},[123,57202,147],{"class":129},[123,57204,259],{"class":164},[123,57206,53897],{"class":133},[123,57208,53961],{"class":164},[123,57210,3760],{"class":129},[123,57212,57213],{"class":125,"line":1517},[123,57214,4631],{"class":129},[123,57216,57217],{"class":125,"line":1534},[123,57218,232],{"emptyLinePlaceholder":231},[123,57220,57221,57224],{"class":125,"line":1539},[123,57222,57223],{"class":337},"    .slider-footer",[123,57225,137],{"class":129},[123,57227,57228,57230,57232,57235],{"class":125,"line":2080},[123,57229,57162],{"class":164},[123,57231,147],{"class":129},[123,57233,57234],{"class":164},"absolute",[123,57236,3760],{"class":129},[123,57238,57239,57242,57244,57246],{"class":125,"line":2097},[123,57240,57241],{"class":164},"      left",[123,57243,147],{"class":129},[123,57245,2799],{"class":164},[123,57247,3760],{"class":129},[123,57249,57250,57253,57255,57257],{"class":125,"line":2114},[123,57251,57252],{"class":164},"      bottom",[123,57254,147],{"class":129},[123,57256,2799],{"class":164},[123,57258,3760],{"class":129},[123,57260,57261,57263,57265,57267,57269],{"class":125,"line":2125},[123,57262,57174],{"class":164},[123,57264,147],{"class":129},[123,57266,259],{"class":164},[123,57268,2935],{"class":133},[123,57270,3760],{"class":129},[123,57272,57273,57275,57277,57279,57281],{"class":125,"line":2130},[123,57274,57188],{"class":164},[123,57276,147],{"class":129},[123,57278,3178],{"class":164},[123,57280,2935],{"class":133},[123,57282,3760],{"class":129},[123,57284,57285,57288,57290,57293],{"class":125,"line":5033},[123,57286,57287],{"class":164},"      background-color",[123,57289,147],{"class":129},[123,57291,57292],{"class":164},"skyblue",[123,57294,3760],{"class":129},[123,57296,57297],{"class":125,"line":5041},[123,57298,4631],{"class":129},[123,57300,57301],{"class":125,"line":5046},[123,57302,232],{"emptyLinePlaceholder":231},[123,57304,57305,57307,57309],{"class":125,"line":5052},[123,57306,57223],{"class":337},[123,57308,9258],{"class":53707},[123,57310,137],{"class":129},[123,57312,57313,57315,57317,57319],{"class":125,"line":5058},[123,57314,57162],{"class":164},[123,57316,147],{"class":129},[123,57318,57234],{"class":164},[123,57320,3760],{"class":129},[123,57322,57323,57326,57328,57330,57332],{"class":125,"line":5063},[123,57324,57325],{"class":164},"      font-size",[123,57327,147],{"class":129},[123,57329,3500],{"class":164},[123,57331,53897],{"class":133},[123,57333,3760],{"class":129},[123,57335,57336,57338,57340,57342,57344],{"class":125,"line":10380},[123,57337,57241],{"class":164},[123,57339,147],{"class":129},[123,57341,3302],{"class":164},[123,57343,53897],{"class":133},[123,57345,3760],{"class":129},[123,57347,57348,57351,57353,57355,57357],{"class":125,"line":10404},[123,57349,57350],{"class":164},"      top",[123,57352,147],{"class":129},[123,57354,2926],{"class":164},[123,57356,53897],{"class":133},[123,57358,3760],{"class":129},[123,57360,57361],{"class":125,"line":10409},[123,57362,4631],{"class":129},[123,57364,57365],{"class":125,"line":10415},[123,57366,232],{"emptyLinePlaceholder":231},[123,57368,57369,57372],{"class":125,"line":10442},[123,57370,57371],{"class":53707},"    ul",[123,57373,137],{"class":129},[123,57375,57376,57378,57380,57382],{"class":125,"line":10447},[123,57377,57162],{"class":164},[123,57379,147],{"class":129},[123,57381,57234],{"class":164},[123,57383,3760],{"class":129},[123,57385,57386,57388,57390,57392,57394],{"class":125,"line":10453},[123,57387,57350],{"class":164},[123,57389,147],{"class":129},[123,57391,3383],{"class":164},[123,57393,53897],{"class":133},[123,57395,3760],{"class":129},[123,57397,57398,57400,57402,57404,57406],{"class":125,"line":10465},[123,57399,57241],{"class":164},[123,57401,147],{"class":129},[123,57403,3302],{"class":164},[123,57405,53897],{"class":133},[123,57407,3760],{"class":129},[123,57409,57410,57413,57415,57417],{"class":125,"line":10477},[123,57411,57412],{"class":164},"      display",[123,57414,147],{"class":129},[123,57416,53882],{"class":164},[123,57418,3760],{"class":129},[123,57420,57421,57424,57426,57428],{"class":125,"line":10489},[123,57422,57423],{"class":164},"      justify-content",[123,57425,147],{"class":129},[123,57427,54073],{"class":164},[123,57429,3760],{"class":129},[123,57431,57432,57434,57436,57438],{"class":125,"line":12148},[123,57433,57162],{"class":164},[123,57435,147],{"class":129},[123,57437,57234],{"class":164},[123,57439,3760],{"class":129},[123,57441,57442,57444,57446,57448,57450],{"class":125,"line":12173},[123,57443,57174],{"class":164},[123,57445,147],{"class":129},[123,57447,6431],{"class":164},[123,57449,53897],{"class":133},[123,57451,3760],{"class":129},[123,57453,57454,57456,57458,57460,57462],{"class":125,"line":12196},[123,57455,57188],{"class":164},[123,57457,147],{"class":129},[123,57459,3302],{"class":164},[123,57461,53897],{"class":133},[123,57463,3760],{"class":129},[123,57465,57466],{"class":125,"line":12220},[123,57467,4631],{"class":129},[123,57469,57470],{"class":125,"line":12225},[123,57471,232],{"emptyLinePlaceholder":231},[123,57473,57474,57476,57479],{"class":125,"line":12230},[123,57475,57371],{"class":53707},[123,57477,57478],{"class":53707}," li",[123,57480,137],{"class":129},[123,57482,57483,57485,57487,57489,57491],{"class":125,"line":12235},[123,57484,57174],{"class":164},[123,57486,147],{"class":129},[123,57488,3302],{"class":164},[123,57490,53897],{"class":133},[123,57492,3760],{"class":129},[123,57494,57495,57497,57499,57501,57503],{"class":125,"line":12244},[123,57496,57188],{"class":164},[123,57498,147],{"class":129},[123,57500,3302],{"class":164},[123,57502,53897],{"class":133},[123,57504,3760],{"class":129},[123,57506,57507,57509,57511,57514,57516,57518,57520,57522,57524,57526,57528,57531],{"class":125,"line":12249},[123,57508,57287],{"class":164},[123,57510,147],{"class":129},[123,57512,57513],{"class":164},"rgba",[123,57515,1315],{"class":129},[123,57517,2799],{"class":164},[123,57519,251],{"class":129},[123,57521,2799],{"class":164},[123,57523,251],{"class":129},[123,57525,2799],{"class":164},[123,57527,251],{"class":129},[123,57529,57530],{"class":164},".4",[123,57532,5161],{"class":129},[123,57534,57535,57538,57540,57542,57544],{"class":125,"line":12255},[123,57536,57537],{"class":164},"      border-radius",[123,57539,147],{"class":129},[123,57541,2193],{"class":164},[123,57543,53897],{"class":133},[123,57545,3760],{"class":129},[123,57547,57548],{"class":125,"line":12276},[123,57549,4631],{"class":129},[123,57551,57552],{"class":125,"line":12282},[123,57553,232],{"emptyLinePlaceholder":231},[123,57555,57556,57559],{"class":125,"line":12296},[123,57557,57558],{"class":337},"    .activate",[123,57560,137],{"class":129},[123,57562,57563,57565,57567,57570],{"class":125,"line":12302},[123,57564,57287],{"class":164},[123,57566,147],{"class":129},[123,57568,57569],{"class":164},"#f7f7f7",[123,57571,3760],{"class":129},[123,57573,57574],{"class":125,"line":12329},[123,57575,4631],{"class":129},[123,57577,57578,57580,57582],{"class":125,"line":12338},[123,57579,54820],{"class":129},[123,57581,2526],{"class":53707},[123,57583,53714],{"class":129},[123,57585,57586,57588,57590],{"class":125,"line":12344},[123,57587,54190],{"class":129},[123,57589,53741],{"class":53707},[123,57591,53714],{"class":129},[123,57593,57594],{"class":125,"line":12352},[123,57595,232],{"emptyLinePlaceholder":231},[123,57597,57598,57600,57602],{"class":125,"line":12357},[123,57599,3509],{"class":129},[123,57601,54205],{"class":53707},[123,57603,53714],{"class":129},[123,57605,57606,57608,57610,57612,57614,57616],{"class":125,"line":19032},[123,57607,54548],{"class":129},[123,57609,54016],{"class":53707},[123,57611,55889],{"class":337},[123,57613,134],{"class":129},[123,57615,55894],{"class":143},[123,57617,53714],{"class":129},[123,57619,57620,57622,57624,57626,57628,57631],{"class":125,"line":19038},[123,57621,53748],{"class":129},[123,57623,54016],{"class":53707},[123,57625,55889],{"class":337},[123,57627,134],{"class":129},[123,57629,57630],{"class":143},"\"slider-wrapper\"",[123,57632,53714],{"class":129},[123,57634,57635,57638,57640,57643,57645,57648,57651,57653,57655],{"class":125,"line":19061},[123,57636,57637],{"class":129},"      \u003C",[123,57639,3929],{"class":53707},[123,57641,57642],{"class":337}," src",[123,57644,134],{"class":129},[123,57646,57647],{"class":143},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[123,57649,57650],{"class":337}," alt",[123,57652,134],{"class":129},[123,57654,1629],{"class":143},[123,57656,53714],{"class":129},[123,57658,57659,57661,57663],{"class":125,"line":19067},[123,57660,54181],{"class":129},[123,57662,54016],{"class":53707},[123,57664,53714],{"class":129},[123,57666,57667,57669,57671,57673,57675,57678],{"class":125,"line":19090},[123,57668,53748],{"class":129},[123,57670,54016],{"class":53707},[123,57672,55889],{"class":337},[123,57674,134],{"class":129},[123,57676,57677],{"class":143},"\"slider-footer\"",[123,57679,53714],{"class":129},[123,57681,57682,57684,57686,57689,57691],{"class":125,"line":19104},[123,57683,57637],{"class":129},[123,57685,19],{"class":53707},[123,57687,57688],{"class":129},">对人类来说会不会太超前了?\u003C\u002F",[123,57690,19],{"class":53707},[123,57692,53714],{"class":129},[123,57694,57695,57697,57699],{"class":125,"line":19124},[123,57696,57637],{"class":129},[123,57698,3606],{"class":53707},[123,57700,53714],{"class":129},[123,57702,57703,57706,57708,57710,57712,57715,57718,57720],{"class":125,"line":19130},[123,57704,57705],{"class":129},"        \u003C",[123,57707,29],{"class":53707},[123,57709,55889],{"class":337},[123,57711,134],{"class":129},[123,57713,57714],{"class":143},"\"activate\"",[123,57716,57717],{"class":129},">\u003C\u002F",[123,57719,29],{"class":53707},[123,57721,53714],{"class":129},[123,57723,57724,57726,57728,57730,57732],{"class":125,"line":19141},[123,57725,57705],{"class":129},[123,57727,29],{"class":53707},[123,57729,57717],{"class":129},[123,57731,29],{"class":53707},[123,57733,53714],{"class":129},[123,57735,57736,57738,57740,57742,57744],{"class":125,"line":19164},[123,57737,57705],{"class":129},[123,57739,29],{"class":53707},[123,57741,57717],{"class":129},[123,57743,29],{"class":53707},[123,57745,53714],{"class":129},[123,57747,57748,57750,57752,57754,57756],{"class":125,"line":19186},[123,57749,57705],{"class":129},[123,57751,29],{"class":53707},[123,57753,57717],{"class":129},[123,57755,29],{"class":53707},[123,57757,53714],{"class":129},[123,57759,57760,57762,57764,57766,57768],{"class":125,"line":19191},[123,57761,57705],{"class":129},[123,57763,29],{"class":53707},[123,57765,57717],{"class":129},[123,57767,29],{"class":53707},[123,57769,53714],{"class":129},[123,57771,57772,57774,57776,57778,57780],{"class":125,"line":19197},[123,57773,57705],{"class":129},[123,57775,29],{"class":53707},[123,57777,57717],{"class":129},[123,57779,29],{"class":53707},[123,57781,53714],{"class":129},[123,57783,57784,57786,57788,57790,57792],{"class":125,"line":19211},[123,57785,57705],{"class":129},[123,57787,29],{"class":53707},[123,57789,57717],{"class":129},[123,57791,29],{"class":53707},[123,57793,53714],{"class":129},[123,57795,57796,57798,57800,57802,57804],{"class":125,"line":19224},[123,57797,57705],{"class":129},[123,57799,29],{"class":53707},[123,57801,57717],{"class":129},[123,57803,29],{"class":53707},[123,57805,53714],{"class":129},[123,57807,57808,57811,57813],{"class":125,"line":19229},[123,57809,57810],{"class":129},"      \u003C\u002F",[123,57812,3606],{"class":53707},[123,57814,53714],{"class":129},[123,57816,57817,57819,57821],{"class":125,"line":19243},[123,57818,54181],{"class":129},[123,57820,54016],{"class":53707},[123,57822,53714],{"class":129},[123,57824,57825,57827,57829],{"class":125,"line":19248},[123,57826,54820],{"class":129},[123,57828,54016],{"class":53707},[123,57830,53714],{"class":129},[123,57832,57833,57835,57837],{"class":125,"line":19254},[123,57834,54548],{"class":129},[123,57836,54218],{"class":53707},[123,57838,53714],{"class":129},[123,57840,57841,57843,57846,57848],{"class":125,"line":19259},[123,57842,13653],{"class":133},[123,57844,57845],{"class":164}," arrImage",[123,57847,15995],{"class":133},[123,57849,1587],{"class":129},[123,57851,57852,57855,57858,57861,57864,57867,57870],{"class":125,"line":19273},[123,57853,57854],{"class":129},"      { url: ",[123,57856,57857],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[123,57859,57860],{"class":129},", title: ",[123,57862,57863],{"class":143},"'对人类来说会不会太超前了?'",[123,57865,57866],{"class":129},", color: ",[123,57868,57869],{"class":143},"'rgba(100,67,68)'",[123,57871,57872],{"class":129}," },\n",[123,57874,57875,57877,57880,57882,57885,57887,57890],{"class":125,"line":19278},[123,57876,57854],{"class":129},[123,57878,57879],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[123,57881,57860],{"class":129},[123,57883,57884],{"class":143},"'开启剑与雪的黑暗传说!'",[123,57886,57866],{"class":129},[123,57888,57889],{"class":143},"'rgba(43,35,26)'",[123,57891,57872],{"class":129},[123,57893,57894,57896,57899,57901,57904,57906,57909],{"class":125,"line":19283},[123,57895,57854],{"class":129},[123,57897,57898],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[123,57900,57860],{"class":129},[123,57902,57903],{"class":143},"'真正的jo厨出现了!'",[123,57905,57866],{"class":129},[123,57907,57908],{"class":143},"'rgba(36,31,33)'",[123,57910,57872],{"class":129},[123,57912,57913,57915,57918,57920,57923,57925,57928],{"class":125,"line":19297},[123,57914,57854],{"class":129},[123,57916,57917],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[123,57919,57860],{"class":129},[123,57921,57922],{"class":143},"'李玉刚:让世界通过b站看到东方大国文化'",[123,57924,57866],{"class":129},[123,57926,57927],{"class":143},"'rgba(139,98,66)'",[123,57929,57872],{"class":129},[123,57931,57932,57934,57937,57939,57942,57944,57947],{"class":125,"line":19309},[123,57933,57854],{"class":129},[123,57935,57936],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[123,57938,57860],{"class":129},[123,57940,57941],{"class":143},"'快来分享你的寒假日常吧'",[123,57943,57866],{"class":129},[123,57945,57946],{"class":143},"'rgba(67,90,92)'",[123,57948,57872],{"class":129},[123,57950,57951,57953,57956,57958,57961,57963,57966],{"class":125,"line":19314},[123,57952,57854],{"class":129},[123,57954,57955],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[123,57957,57860],{"class":129},[123,57959,57960],{"class":143},"'哔哩哔哩小年YEAR'",[123,57962,57866],{"class":129},[123,57964,57965],{"class":143},"'rgba(166,131,143)'",[123,57967,57872],{"class":129},[123,57969,57970,57972,57975,57977,57980,57982,57985],{"class":125,"line":19327},[123,57971,57854],{"class":129},[123,57973,57974],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[123,57976,57860],{"class":129},[123,57978,57979],{"class":143},"'一站式解决你的电脑配置问题'",[123,57981,57866],{"class":129},[123,57983,57984],{"class":143},"'rgba(53,29,25)'",[123,57986,57872],{"class":129},[123,57988,57989,57991,57994,57996,57999,58001,58004],{"class":125,"line":19332},[123,57990,57854],{"class":129},[123,57992,57993],{"class":143},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[123,57995,57860],{"class":129},[123,57997,57998],{"class":143},"'谁不想和小猫咪贴贴呢?'",[123,58000,57866],{"class":129},[123,58002,58003],{"class":143},"'rgba(99,72,114)'",[123,58005,58006],{"class":129}," }\n",[123,58008,58009],{"class":125,"line":19337},[123,58010,55512],{"class":129},[123,58012,58013,58015,58018,58020,58022,58024,58026,58029],{"class":125,"line":19342},[123,58014,13653],{"class":133},[123,58016,58017],{"class":164}," img",[123,58019,15995],{"class":133},[123,58021,56799],{"class":129},[123,58023,56802],{"class":337},[123,58025,1315],{"class":129},[123,58027,58028],{"class":143},"'.slider-wrapper img'",[123,58030,288],{"class":129},[123,58032,58033,58035,58037,58039,58041,58043,58045,58048],{"class":125,"line":19355},[123,58034,13653],{"class":133},[123,58036,9258],{"class":164},[123,58038,15995],{"class":133},[123,58040,56799],{"class":129},[123,58042,56802],{"class":337},[123,58044,1315],{"class":129},[123,58046,58047],{"class":143},"'.slider-footer p'",[123,58049,288],{"class":129},[123,58051,58052,58054,58057,58059,58061,58063,58065,58068],{"class":125,"line":19360},[123,58053,13653],{"class":133},[123,58055,58056],{"class":164}," color",[123,58058,15995],{"class":133},[123,58060,56799],{"class":129},[123,58062,56802],{"class":337},[123,58064,1315],{"class":129},[123,58066,58067],{"class":143},"'.slider-footer'",[123,58069,288],{"class":129},[123,58071,58072,58074,58077,58079,58081,58084,58086,58089],{"class":125,"line":35045},[123,58073,13653],{"class":133},[123,58075,58076],{"class":164}," lis",[123,58078,15995],{"class":133},[123,58080,56799],{"class":129},[123,58082,58083],{"class":337},"querySelectorAll",[123,58085,1315],{"class":129},[123,58087,58088],{"class":143},"'.slider-footer ul li'",[123,58090,288],{"class":129},[123,58092,58093,58095,58097,58099],{"class":125,"line":35051},[123,58094,54623],{"class":133},[123,58096,11870],{"class":129},[123,58098,134],{"class":133},[123,58100,58101],{"class":164}," 1\n",[123,58103,58104,58106,58109,58111,58113,58115,58117],{"class":125,"line":35057},[123,58105,54623],{"class":133},[123,58107,58108],{"class":129}," timer ",[123,58110,134],{"class":133},[123,58112,56847],{"class":337},[123,58114,1315],{"class":129},[123,58116,56852],{"class":133},[123,58118,56855],{"class":129},[123,58120,58121,58124,58126],{"class":125,"line":35063},[123,58122,58123],{"class":129},"      img.src ",[123,58125,134],{"class":133},[123,58127,58128],{"class":129}," arrImage[i].url\n",[123,58130,58131,58134,58136],{"class":125,"line":35069},[123,58132,58133],{"class":129},"      p.innerHTML ",[123,58135,134],{"class":133},[123,58137,58138],{"class":129}," arrImage[i].title\n",[123,58140,58141,58144,58146],{"class":125,"line":35080},[123,58142,58143],{"class":129},"      color.style.backgroundColor ",[123,58145,134],{"class":133},[123,58147,58148],{"class":129}," arrImage[i].color\n",[123,58150,58151],{"class":125,"line":35086},[123,58152,58153],{"class":2673},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[123,58155,58156],{"class":125,"line":35106},[123,58157,58158],{"class":2673},"      \u002F\u002F li.classList.add('activate')\n",[123,58160,58161],{"class":125,"line":35112},[123,58162,58163],{"class":2673},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[123,58165,58166],{"class":125,"line":35123},[123,58167,58168],{"class":2673},"      \u002F\u002F lis[i].classList.remove('activate')\n",[123,58170,58171,58174,58176,58178,58181,58184,58187,58189,58192],{"class":125,"line":35129},[123,58172,58173],{"class":129},"      document.",[123,58175,56802],{"class":337},[123,58177,1315],{"class":129},[123,58179,58180],{"class":143},"'.activate'",[123,58182,58183],{"class":129},")?.classList.",[123,58185,58186],{"class":337},"toggle",[123,58188,1315],{"class":129},[123,58190,58191],{"class":143},"'activate'",[123,58193,288],{"class":129},[123,58195,58196,58199,58201,58203,58205],{"class":125,"line":35135},[123,58197,58198],{"class":129},"      lis[i].classList.",[123,58200,7767],{"class":337},[123,58202,1315],{"class":129},[123,58204,58191],{"class":143},[123,58206,288],{"class":129},[123,58208,58209],{"class":125,"line":35141},[123,58210,232],{"emptyLinePlaceholder":231},[123,58212,58213,58216,58218,58220,58222,58224,58226,58228,58231],{"class":125,"line":35147},[123,58214,58215],{"class":129},"      i ",[123,58217,134],{"class":133},[123,58219,56886],{"class":129},[123,58221,3086],{"class":133},[123,58223,27540],{"class":164},[123,58225,1336],{"class":129},[123,58227,2935],{"class":133},[123,58229,58230],{"class":129}," arrImage.",[123,58232,58233],{"class":164},"length\n",[123,58235,58236],{"class":125,"line":35153},[123,58237,232],{"emptyLinePlaceholder":231},[123,58239,58240,58242,58244],{"class":125,"line":35159},[123,58241,56938],{"class":129},[123,58243,8843],{"class":164},[123,58245,288],{"class":129},[123,58247,58248,58250,58252],{"class":125,"line":35165},[123,58249,54820],{"class":129},[123,58251,54218],{"class":53707},[123,58253,53714],{"class":129},[123,58255,58256,58258,58260],{"class":125,"line":35185},[123,58257,54190],{"class":129},[123,58259,54205],{"class":53707},[123,58261,53714],{"class":129},[123,58263,58264],{"class":125,"line":35191},[123,58265,232],{"emptyLinePlaceholder":231},[123,58267,58268,58270,58272],{"class":125,"line":35207},[123,58269,54190],{"class":129},[123,58271,53042],{"class":53707},[123,58273,53714],{"class":129},[19,58275,58276],{},[3929,58277],{"alt":118,"src":58278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58280,58281],{},"?.就是短路保护,确保输出正常进行",[19,58283,58284],{},"不要忘记取余%,有时候可以用",[19,58286,58287],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,58289,58290],{"start":140},[29,58291,58292],{},"法2",[113,58294,58296],{"className":53040,"code":58295,"language":53042,"meta":118,"style":118},"\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",[120,58297,58298,58308,58322,58326,58334,58348,58368,58380,58388,58394,58404,58414,58418,58422,58428,58438,58442,58446,58452,58462,58474,58486,58500,58504,58508,58514,58524,58534,58544,58556,58568,58578,58582,58586,58594,58604,58616,58628,58640,58644,58648,58654,58664,58676,58688,58698,58708,58718,58730,58742,58746,58750,58758,58770,58782,58808,58820,58824,58828,58834,58844,58848,58856,58864,58868,58876,58890,58904,58924,58932,58946,58958,58966,58984,58996,59008,59020,59032,59044,59056,59068,59076,59084,59092,59100,59111,59127,59143,59159,59175,59191,59207,59223,59239,59243,59248,59266,59284,59294,59299,59304,59315,59321,59336,59345,59349,59354,59363,59368,59377,59382,59387,59392,59415,59445,59449,59457,59461,59469,59477,59481],{"__ignoreMap":118},[123,58299,58300,58302,58304,58306],{"class":125,"line":126},[123,58301,53704],{"class":129},[123,58303,53708],{"class":53707},[123,58305,53711],{"class":337},[123,58307,53714],{"class":129},[123,58309,58310,58312,58314,58316,58318,58320],{"class":125,"line":140},[123,58311,3509],{"class":129},[123,58313,53042],{"class":53707},[123,58315,53723],{"class":337},[123,58317,134],{"class":129},[123,58319,53728],{"class":143},[123,58321,53714],{"class":129},[123,58323,58324],{"class":125,"line":156},[123,58325,232],{"emptyLinePlaceholder":231},[123,58327,58328,58330,58332],{"class":125,"line":168},[123,58329,3509],{"class":129},[123,58331,53741],{"class":53707},[123,58333,53714],{"class":129},[123,58335,58336,58338,58340,58342,58344,58346],{"class":125,"line":268},[123,58337,54548],{"class":129},[123,58339,53751],{"class":53707},[123,58341,53754],{"class":337},[123,58343,134],{"class":129},[123,58345,53759],{"class":143},[123,58347,53714],{"class":129},[123,58349,58350,58352,58354,58356,58358,58360,58362,58364,58366],{"class":125,"line":291},[123,58351,54548],{"class":129},[123,58353,53751],{"class":53707},[123,58355,17350],{"class":337},[123,58357,134],{"class":129},[123,58359,53798],{"class":143},[123,58361,53778],{"class":337},[123,58363,134],{"class":129},[123,58365,53805],{"class":143},[123,58367,53714],{"class":129},[123,58369,58370,58372,58374,58376,58378],{"class":125,"line":300},[123,58371,54548],{"class":129},[123,58373,642],{"class":53707},[123,58375,53816],{"class":129},[123,58377,642],{"class":53707},[123,58379,53714],{"class":129},[123,58381,58382,58384,58386],{"class":125,"line":305},[123,58383,54548],{"class":129},[123,58385,2526],{"class":53707},[123,58387,53714],{"class":129},[123,58389,58390,58392],{"class":125,"line":316},[123,58391,8836],{"class":53707},[123,58393,137],{"class":129},[123,58395,58396,58398,58400,58402],{"class":125,"line":673},[123,58397,57098],{"class":164},[123,58399,147],{"class":129},[123,58401,2799],{"class":164},[123,58403,3760],{"class":129},[123,58405,58406,58408,58410,58412],{"class":125,"line":692},[123,58407,57109],{"class":164},[123,58409,147],{"class":129},[123,58411,2799],{"class":164},[123,58413,3760],{"class":129},[123,58415,58416],{"class":125,"line":713},[123,58417,4631],{"class":129},[123,58419,58420],{"class":125,"line":718},[123,58421,232],{"emptyLinePlaceholder":231},[123,58423,58424,58426],{"class":125,"line":1138},[123,58425,57128],{"class":53707},[123,58427,137],{"class":129},[123,58429,58430,58432,58434,58436],{"class":125,"line":1429},[123,58431,57135],{"class":164},[123,58433,147],{"class":129},[123,58435,57140],{"class":164},[123,58437,3760],{"class":129},[123,58439,58440],{"class":125,"line":1439},[123,58441,4631],{"class":129},[123,58443,58444],{"class":125,"line":1444},[123,58445,232],{"emptyLinePlaceholder":231},[123,58447,58448,58450],{"class":125,"line":1453},[123,58449,57155],{"class":337},[123,58451,137],{"class":129},[123,58453,58454,58456,58458,58460],{"class":125,"line":1458},[123,58455,57162],{"class":164},[123,58457,147],{"class":129},[123,58459,57167],{"class":164},[123,58461,3760],{"class":129},[123,58463,58464,58466,58468,58470,58472],{"class":125,"line":1476},[123,58465,57174],{"class":164},[123,58467,147],{"class":129},[123,58469,57179],{"class":164},[123,58471,53897],{"class":133},[123,58473,3760],{"class":129},[123,58475,58476,58478,58480,58482,58484],{"class":125,"line":1494},[123,58477,57188],{"class":164},[123,58479,147],{"class":129},[123,58481,4006],{"class":164},[123,58483,53897],{"class":133},[123,58485,3760],{"class":129},[123,58487,58488,58490,58492,58494,58496,58498],{"class":125,"line":1499},[123,58489,57109],{"class":164},[123,58491,147],{"class":129},[123,58493,259],{"class":164},[123,58495,53897],{"class":133},[123,58497,53961],{"class":164},[123,58499,3760],{"class":129},[123,58501,58502],{"class":125,"line":1517},[123,58503,4631],{"class":129},[123,58505,58506],{"class":125,"line":1534},[123,58507,232],{"emptyLinePlaceholder":231},[123,58509,58510,58512],{"class":125,"line":1539},[123,58511,57223],{"class":337},[123,58513,137],{"class":129},[123,58515,58516,58518,58520,58522],{"class":125,"line":2080},[123,58517,57162],{"class":164},[123,58519,147],{"class":129},[123,58521,57234],{"class":164},[123,58523,3760],{"class":129},[123,58525,58526,58528,58530,58532],{"class":125,"line":2097},[123,58527,57241],{"class":164},[123,58529,147],{"class":129},[123,58531,2799],{"class":164},[123,58533,3760],{"class":129},[123,58535,58536,58538,58540,58542],{"class":125,"line":2114},[123,58537,57252],{"class":164},[123,58539,147],{"class":129},[123,58541,2799],{"class":164},[123,58543,3760],{"class":129},[123,58545,58546,58548,58550,58552,58554],{"class":125,"line":2125},[123,58547,57174],{"class":164},[123,58549,147],{"class":129},[123,58551,259],{"class":164},[123,58553,2935],{"class":133},[123,58555,3760],{"class":129},[123,58557,58558,58560,58562,58564,58566],{"class":125,"line":2130},[123,58559,57188],{"class":164},[123,58561,147],{"class":129},[123,58563,3178],{"class":164},[123,58565,2935],{"class":133},[123,58567,3760],{"class":129},[123,58569,58570,58572,58574,58576],{"class":125,"line":5033},[123,58571,57287],{"class":164},[123,58573,147],{"class":129},[123,58575,57292],{"class":164},[123,58577,3760],{"class":129},[123,58579,58580],{"class":125,"line":5041},[123,58581,4631],{"class":129},[123,58583,58584],{"class":125,"line":5046},[123,58585,232],{"emptyLinePlaceholder":231},[123,58587,58588,58590,58592],{"class":125,"line":5052},[123,58589,57223],{"class":337},[123,58591,9258],{"class":53707},[123,58593,137],{"class":129},[123,58595,58596,58598,58600,58602],{"class":125,"line":5058},[123,58597,57162],{"class":164},[123,58599,147],{"class":129},[123,58601,57234],{"class":164},[123,58603,3760],{"class":129},[123,58605,58606,58608,58610,58612,58614],{"class":125,"line":5063},[123,58607,57325],{"class":164},[123,58609,147],{"class":129},[123,58611,3500],{"class":164},[123,58613,53897],{"class":133},[123,58615,3760],{"class":129},[123,58617,58618,58620,58622,58624,58626],{"class":125,"line":10380},[123,58619,57241],{"class":164},[123,58621,147],{"class":129},[123,58623,3302],{"class":164},[123,58625,53897],{"class":133},[123,58627,3760],{"class":129},[123,58629,58630,58632,58634,58636,58638],{"class":125,"line":10404},[123,58631,57350],{"class":164},[123,58633,147],{"class":129},[123,58635,2926],{"class":164},[123,58637,53897],{"class":133},[123,58639,3760],{"class":129},[123,58641,58642],{"class":125,"line":10409},[123,58643,4631],{"class":129},[123,58645,58646],{"class":125,"line":10415},[123,58647,232],{"emptyLinePlaceholder":231},[123,58649,58650,58652],{"class":125,"line":10442},[123,58651,57371],{"class":53707},[123,58653,137],{"class":129},[123,58655,58656,58658,58660,58662],{"class":125,"line":10447},[123,58657,57162],{"class":164},[123,58659,147],{"class":129},[123,58661,57234],{"class":164},[123,58663,3760],{"class":129},[123,58665,58666,58668,58670,58672,58674],{"class":125,"line":10453},[123,58667,57350],{"class":164},[123,58669,147],{"class":129},[123,58671,3383],{"class":164},[123,58673,53897],{"class":133},[123,58675,3760],{"class":129},[123,58677,58678,58680,58682,58684,58686],{"class":125,"line":10465},[123,58679,57241],{"class":164},[123,58681,147],{"class":129},[123,58683,3302],{"class":164},[123,58685,53897],{"class":133},[123,58687,3760],{"class":129},[123,58689,58690,58692,58694,58696],{"class":125,"line":10477},[123,58691,57412],{"class":164},[123,58693,147],{"class":129},[123,58695,53882],{"class":164},[123,58697,3760],{"class":129},[123,58699,58700,58702,58704,58706],{"class":125,"line":10489},[123,58701,57423],{"class":164},[123,58703,147],{"class":129},[123,58705,54073],{"class":164},[123,58707,3760],{"class":129},[123,58709,58710,58712,58714,58716],{"class":125,"line":12148},[123,58711,57162],{"class":164},[123,58713,147],{"class":129},[123,58715,57234],{"class":164},[123,58717,3760],{"class":129},[123,58719,58720,58722,58724,58726,58728],{"class":125,"line":12173},[123,58721,57174],{"class":164},[123,58723,147],{"class":129},[123,58725,6431],{"class":164},[123,58727,53897],{"class":133},[123,58729,3760],{"class":129},[123,58731,58732,58734,58736,58738,58740],{"class":125,"line":12196},[123,58733,57188],{"class":164},[123,58735,147],{"class":129},[123,58737,3302],{"class":164},[123,58739,53897],{"class":133},[123,58741,3760],{"class":129},[123,58743,58744],{"class":125,"line":12220},[123,58745,4631],{"class":129},[123,58747,58748],{"class":125,"line":12225},[123,58749,232],{"emptyLinePlaceholder":231},[123,58751,58752,58754,58756],{"class":125,"line":12230},[123,58753,57371],{"class":53707},[123,58755,57478],{"class":53707},[123,58757,137],{"class":129},[123,58759,58760,58762,58764,58766,58768],{"class":125,"line":12235},[123,58761,57174],{"class":164},[123,58763,147],{"class":129},[123,58765,3302],{"class":164},[123,58767,53897],{"class":133},[123,58769,3760],{"class":129},[123,58771,58772,58774,58776,58778,58780],{"class":125,"line":12244},[123,58773,57188],{"class":164},[123,58775,147],{"class":129},[123,58777,3302],{"class":164},[123,58779,53897],{"class":133},[123,58781,3760],{"class":129},[123,58783,58784,58786,58788,58790,58792,58794,58796,58798,58800,58802,58804,58806],{"class":125,"line":12249},[123,58785,57287],{"class":164},[123,58787,147],{"class":129},[123,58789,57513],{"class":164},[123,58791,1315],{"class":129},[123,58793,2799],{"class":164},[123,58795,251],{"class":129},[123,58797,2799],{"class":164},[123,58799,251],{"class":129},[123,58801,2799],{"class":164},[123,58803,251],{"class":129},[123,58805,57530],{"class":164},[123,58807,5161],{"class":129},[123,58809,58810,58812,58814,58816,58818],{"class":125,"line":12255},[123,58811,57537],{"class":164},[123,58813,147],{"class":129},[123,58815,2193],{"class":164},[123,58817,53897],{"class":133},[123,58819,3760],{"class":129},[123,58821,58822],{"class":125,"line":12276},[123,58823,4631],{"class":129},[123,58825,58826],{"class":125,"line":12282},[123,58827,232],{"emptyLinePlaceholder":231},[123,58829,58830,58832],{"class":125,"line":12296},[123,58831,57558],{"class":337},[123,58833,137],{"class":129},[123,58835,58836,58838,58840,58842],{"class":125,"line":12302},[123,58837,57287],{"class":164},[123,58839,147],{"class":129},[123,58841,57569],{"class":164},[123,58843,3760],{"class":129},[123,58845,58846],{"class":125,"line":12329},[123,58847,4631],{"class":129},[123,58849,58850,58852,58854],{"class":125,"line":12338},[123,58851,54820],{"class":129},[123,58853,2526],{"class":53707},[123,58855,53714],{"class":129},[123,58857,58858,58860,58862],{"class":125,"line":12344},[123,58859,54190],{"class":129},[123,58861,53741],{"class":53707},[123,58863,53714],{"class":129},[123,58865,58866],{"class":125,"line":12352},[123,58867,232],{"emptyLinePlaceholder":231},[123,58869,58870,58872,58874],{"class":125,"line":12357},[123,58871,3509],{"class":129},[123,58873,54205],{"class":53707},[123,58875,53714],{"class":129},[123,58877,58878,58880,58882,58884,58886,58888],{"class":125,"line":19032},[123,58879,54548],{"class":129},[123,58881,54016],{"class":53707},[123,58883,55889],{"class":337},[123,58885,134],{"class":129},[123,58887,55894],{"class":143},[123,58889,53714],{"class":129},[123,58891,58892,58894,58896,58898,58900,58902],{"class":125,"line":19038},[123,58893,53748],{"class":129},[123,58895,54016],{"class":53707},[123,58897,55889],{"class":337},[123,58899,134],{"class":129},[123,58901,57630],{"class":143},[123,58903,53714],{"class":129},[123,58905,58906,58908,58910,58912,58914,58916,58918,58920,58922],{"class":125,"line":19061},[123,58907,57637],{"class":129},[123,58909,3929],{"class":53707},[123,58911,57642],{"class":337},[123,58913,134],{"class":129},[123,58915,57647],{"class":143},[123,58917,57650],{"class":337},[123,58919,134],{"class":129},[123,58921,1629],{"class":143},[123,58923,53714],{"class":129},[123,58925,58926,58928,58930],{"class":125,"line":19067},[123,58927,54181],{"class":129},[123,58929,54016],{"class":53707},[123,58931,53714],{"class":129},[123,58933,58934,58936,58938,58940,58942,58944],{"class":125,"line":19090},[123,58935,53748],{"class":129},[123,58937,54016],{"class":53707},[123,58939,55889],{"class":337},[123,58941,134],{"class":129},[123,58943,57677],{"class":143},[123,58945,53714],{"class":129},[123,58947,58948,58950,58952,58954,58956],{"class":125,"line":19104},[123,58949,57637],{"class":129},[123,58951,19],{"class":53707},[123,58953,57688],{"class":129},[123,58955,19],{"class":53707},[123,58957,53714],{"class":129},[123,58959,58960,58962,58964],{"class":125,"line":19124},[123,58961,57637],{"class":129},[123,58963,3606],{"class":53707},[123,58965,53714],{"class":129},[123,58967,58968,58970,58972,58974,58976,58978,58980,58982],{"class":125,"line":19130},[123,58969,57705],{"class":129},[123,58971,29],{"class":53707},[123,58973,55889],{"class":337},[123,58975,134],{"class":129},[123,58977,57714],{"class":143},[123,58979,57717],{"class":129},[123,58981,29],{"class":53707},[123,58983,53714],{"class":129},[123,58985,58986,58988,58990,58992,58994],{"class":125,"line":19141},[123,58987,57705],{"class":129},[123,58989,29],{"class":53707},[123,58991,57717],{"class":129},[123,58993,29],{"class":53707},[123,58995,53714],{"class":129},[123,58997,58998,59000,59002,59004,59006],{"class":125,"line":19164},[123,58999,57705],{"class":129},[123,59001,29],{"class":53707},[123,59003,57717],{"class":129},[123,59005,29],{"class":53707},[123,59007,53714],{"class":129},[123,59009,59010,59012,59014,59016,59018],{"class":125,"line":19186},[123,59011,57705],{"class":129},[123,59013,29],{"class":53707},[123,59015,57717],{"class":129},[123,59017,29],{"class":53707},[123,59019,53714],{"class":129},[123,59021,59022,59024,59026,59028,59030],{"class":125,"line":19191},[123,59023,57705],{"class":129},[123,59025,29],{"class":53707},[123,59027,57717],{"class":129},[123,59029,29],{"class":53707},[123,59031,53714],{"class":129},[123,59033,59034,59036,59038,59040,59042],{"class":125,"line":19197},[123,59035,57705],{"class":129},[123,59037,29],{"class":53707},[123,59039,57717],{"class":129},[123,59041,29],{"class":53707},[123,59043,53714],{"class":129},[123,59045,59046,59048,59050,59052,59054],{"class":125,"line":19211},[123,59047,57705],{"class":129},[123,59049,29],{"class":53707},[123,59051,57717],{"class":129},[123,59053,29],{"class":53707},[123,59055,53714],{"class":129},[123,59057,59058,59060,59062,59064,59066],{"class":125,"line":19224},[123,59059,57705],{"class":129},[123,59061,29],{"class":53707},[123,59063,57717],{"class":129},[123,59065,29],{"class":53707},[123,59067,53714],{"class":129},[123,59069,59070,59072,59074],{"class":125,"line":19229},[123,59071,57810],{"class":129},[123,59073,3606],{"class":53707},[123,59075,53714],{"class":129},[123,59077,59078,59080,59082],{"class":125,"line":19243},[123,59079,54181],{"class":129},[123,59081,54016],{"class":53707},[123,59083,53714],{"class":129},[123,59085,59086,59088,59090],{"class":125,"line":19248},[123,59087,54820],{"class":129},[123,59089,54016],{"class":53707},[123,59091,53714],{"class":129},[123,59093,59094,59096,59098],{"class":125,"line":19254},[123,59095,54548],{"class":129},[123,59097,54218],{"class":53707},[123,59099,53714],{"class":129},[123,59101,59102,59104,59107,59109],{"class":125,"line":19259},[123,59103,13653],{"class":133},[123,59105,59106],{"class":164}," sliderData",[123,59108,15995],{"class":133},[123,59110,1587],{"class":129},[123,59112,59113,59115,59117,59119,59121,59123,59125],{"class":125,"line":19273},[123,59114,57854],{"class":129},[123,59116,57857],{"class":143},[123,59118,57860],{"class":129},[123,59120,57863],{"class":143},[123,59122,57866],{"class":129},[123,59124,57869],{"class":143},[123,59126,57872],{"class":129},[123,59128,59129,59131,59133,59135,59137,59139,59141],{"class":125,"line":19278},[123,59130,57854],{"class":129},[123,59132,57879],{"class":143},[123,59134,57860],{"class":129},[123,59136,57884],{"class":143},[123,59138,57866],{"class":129},[123,59140,57889],{"class":143},[123,59142,57872],{"class":129},[123,59144,59145,59147,59149,59151,59153,59155,59157],{"class":125,"line":19283},[123,59146,57854],{"class":129},[123,59148,57898],{"class":143},[123,59150,57860],{"class":129},[123,59152,57903],{"class":143},[123,59154,57866],{"class":129},[123,59156,57908],{"class":143},[123,59158,57872],{"class":129},[123,59160,59161,59163,59165,59167,59169,59171,59173],{"class":125,"line":19297},[123,59162,57854],{"class":129},[123,59164,57917],{"class":143},[123,59166,57860],{"class":129},[123,59168,57922],{"class":143},[123,59170,57866],{"class":129},[123,59172,57927],{"class":143},[123,59174,57872],{"class":129},[123,59176,59177,59179,59181,59183,59185,59187,59189],{"class":125,"line":19309},[123,59178,57854],{"class":129},[123,59180,57936],{"class":143},[123,59182,57860],{"class":129},[123,59184,57941],{"class":143},[123,59186,57866],{"class":129},[123,59188,57946],{"class":143},[123,59190,57872],{"class":129},[123,59192,59193,59195,59197,59199,59201,59203,59205],{"class":125,"line":19314},[123,59194,57854],{"class":129},[123,59196,57955],{"class":143},[123,59198,57860],{"class":129},[123,59200,57960],{"class":143},[123,59202,57866],{"class":129},[123,59204,57965],{"class":143},[123,59206,57872],{"class":129},[123,59208,59209,59211,59213,59215,59217,59219,59221],{"class":125,"line":19327},[123,59210,57854],{"class":129},[123,59212,57974],{"class":143},[123,59214,57860],{"class":129},[123,59216,57979],{"class":143},[123,59218,57866],{"class":129},[123,59220,57984],{"class":143},[123,59222,57872],{"class":129},[123,59224,59225,59227,59229,59231,59233,59235,59237],{"class":125,"line":19332},[123,59226,57854],{"class":129},[123,59228,57993],{"class":143},[123,59230,57860],{"class":129},[123,59232,57998],{"class":143},[123,59234,57866],{"class":129},[123,59236,58003],{"class":143},[123,59238,58006],{"class":129},[123,59240,59241],{"class":125,"line":19337},[123,59242,55512],{"class":129},[123,59244,59245],{"class":125,"line":19342},[123,59246,59247],{"class":2673},"    \u002F\u002F 1.获取元素\n",[123,59249,59250,59252,59254,59256,59258,59260,59262,59264],{"class":125,"line":19355},[123,59251,13653],{"class":133},[123,59253,58017],{"class":164},[123,59255,15995],{"class":133},[123,59257,56799],{"class":129},[123,59259,56802],{"class":337},[123,59261,1315],{"class":129},[123,59263,58028],{"class":143},[123,59265,288],{"class":129},[123,59267,59268,59270,59272,59274,59276,59278,59280,59282],{"class":125,"line":19360},[123,59269,13653],{"class":133},[123,59271,9258],{"class":164},[123,59273,15995],{"class":133},[123,59275,56799],{"class":129},[123,59277,56802],{"class":337},[123,59279,1315],{"class":129},[123,59281,58047],{"class":143},[123,59283,288],{"class":129},[123,59285,59286,59288,59290,59292],{"class":125,"line":35045},[123,59287,54623],{"class":133},[123,59289,11870],{"class":129},[123,59291,134],{"class":133},[123,59293,49740],{"class":164},[123,59295,59296],{"class":125,"line":35051},[123,59297,59298],{"class":2673},"    \u002F\u002F 2.开启定时器\n",[123,59300,59301],{"class":125,"line":35057},[123,59302,59303],{"class":2673},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[123,59305,59306,59309,59311,59313],{"class":125,"line":35063},[123,59307,59308],{"class":337},"    setInterval",[123,59310,1315],{"class":129},[123,59312,56852],{"class":133},[123,59314,56855],{"class":129},[123,59316,59317,59319],{"class":125,"line":35069},[123,59318,56860],{"class":129},[123,59320,5144],{"class":133},[123,59322,59323,59325,59327,59329,59332,59334],{"class":125,"line":35080},[123,59324,56883],{"class":133},[123,59326,56886],{"class":129},[123,59328,4164],{"class":133},[123,59330,59331],{"class":129}," sliderData.",[123,59333,54372],{"class":164},[123,59335,14873],{"class":129},[123,59337,59338,59341,59343],{"class":125,"line":35086},[123,59339,59340],{"class":129},"        i ",[123,59342,134],{"class":133},[123,59344,49740],{"class":164},[123,59346,59347],{"class":125,"line":35106},[123,59348,54801],{"class":129},[123,59350,59351],{"class":125,"line":35112},[123,59352,59353],{"class":2673},"      \u002F\u002F 更换图片路径\n",[123,59355,59356,59358,59360],{"class":125,"line":35123},[123,59357,58123],{"class":129},[123,59359,134],{"class":133},[123,59361,59362],{"class":129}," sliderData[i].url\n",[123,59364,59365],{"class":125,"line":35129},[123,59366,59367],{"class":2673},"      \u002F\u002F 把文字写到p里面\n",[123,59369,59370,59372,59374],{"class":125,"line":35135},[123,59371,58133],{"class":129},[123,59373,134],{"class":133},[123,59375,59376],{"class":129}," sliderData[i].title\n",[123,59378,59379],{"class":125,"line":35141},[123,59380,59381],{"class":2673},"      \u002F\u002F 小圆点\n",[123,59383,59384],{"class":125,"line":35147},[123,59385,59386],{"class":2673},"      \u002F\u002F 先删除以前的active\n",[123,59388,59389],{"class":125,"line":35153},[123,59390,59391],{"class":2673},"      \u002F\u002F 只让当前li添加active\n",[123,59393,59394,59396,59398,59400,59403,59406,59409,59411,59413],{"class":125,"line":35159},[123,59395,58173],{"class":129},[123,59397,56802],{"class":337},[123,59399,1315],{"class":129},[123,59401,59402],{"class":143},"'.slider-footer .activate'",[123,59404,59405],{"class":129},").classList.",[123,59407,59408],{"class":337},"remove",[123,59410,1315],{"class":129},[123,59412,58191],{"class":143},[123,59414,288],{"class":129},[123,59416,59417,59419,59421,59423,59426,59428,59430,59432,59435,59437,59439,59441,59443],{"class":125,"line":35165},[123,59418,58173],{"class":129},[123,59420,56802],{"class":337},[123,59422,1315],{"class":129},[123,59424,59425],{"class":143},"`.slider-footer ul li:nth-child(${",[123,59427,3047],{"class":129},[123,59429,47973],{"class":133},[123,59431,27540],{"class":164},[123,59433,59434],{"class":143},"})`",[123,59436,59405],{"class":129},[123,59438,7767],{"class":337},[123,59440,1315],{"class":129},[123,59442,58191],{"class":143},[123,59444,288],{"class":129},[123,59446,59447],{"class":125,"line":35185},[123,59448,232],{"emptyLinePlaceholder":231},[123,59450,59451,59453,59455],{"class":125,"line":35191},[123,59452,56938],{"class":129},[123,59454,8843],{"class":164},[123,59456,288],{"class":129},[123,59458,59459],{"class":125,"line":35207},[123,59460,232],{"emptyLinePlaceholder":231},[123,59462,59463,59465,59467],{"class":125,"line":35213},[123,59464,54820],{"class":129},[123,59466,54218],{"class":53707},[123,59468,53714],{"class":129},[123,59470,59471,59473,59475],{"class":125,"line":35227},[123,59472,54190],{"class":129},[123,59474,54205],{"class":53707},[123,59476,53714],{"class":129},[123,59478,59479],{"class":125,"line":35233},[123,59480,232],{"emptyLinePlaceholder":231},[123,59482,59483,59485,59487],{"class":125,"line":35248},[123,59484,54190],{"class":129},[123,59486,53042],{"class":53707},[123,59488,53714],{"class":129},[2587,59490,59492],{"id":59491},"_317-重要知识点","3.1.7 重要知识点",[19,59494,59495,59496],{},"浏览器在渲染文本时， ",[2759,59497,59498],{},"没有空格或换行符就没有“断行点”",[19,59500,59501],{},[3929,59502],{"alt":118,"src":59503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59505,59506],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59508,59509],{},[3929,59510],{"alt":118,"src":59511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59513,59514],{},[3929,59515],{"alt":118,"src":59516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59518,59520],{"id":59519},"_32-dom事件基础","3.2 DOM事件基础",[2587,59522,59524],{"id":59523},"_321-事件监听","3.2.1 事件监听",[19,59526,59527],{},[3929,59528],{"alt":118,"src":59529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59531,59532],{},"事件监听有响应的发生",[19,59534,59535],{},[3929,59536],{"alt":118,"src":59537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59539,59540],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59542,59543],{},"对于有名函数,要执行的函数名后边不要加()",[2587,59545,59547],{"id":59546},"_322-随机点名案例","3.2.2 随机点名案例",[113,59549,59551],{"className":53040,"code":59550,"language":53042,"meta":118,"style":118},"\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",[120,59552,59553,59563,59577,59581,59589,59603,59623,59635,59643,59649,59659,59669,59673,59677,59684,59695,59699,59703,59709,59721,59735,59745,59757,59770,59774,59778,59785,59789,59802,59814,59826,59830,59834,59838,59845,59855,59859,59863,59872,59884,59896,59911,59915,59923,59931,59935,59943,59956,59970,59983,60003,60011,60026,60046,60066,60074,60078,60086,60091,60127,60147,60152,60171,60176,60187,60192,60203,60208,60227,60242,60247,60273,60283,60292,60297,60313,60318,60323,60328,60343,60347,60351,60356,60375,60392,60400,60405,60420,60424,60428,60436,60444,60448],{"__ignoreMap":118},[123,59554,59555,59557,59559,59561],{"class":125,"line":126},[123,59556,53704],{"class":129},[123,59558,53708],{"class":53707},[123,59560,53711],{"class":337},[123,59562,53714],{"class":129},[123,59564,59565,59567,59569,59571,59573,59575],{"class":125,"line":140},[123,59566,3509],{"class":129},[123,59568,53042],{"class":53707},[123,59570,53723],{"class":337},[123,59572,134],{"class":129},[123,59574,53728],{"class":143},[123,59576,53714],{"class":129},[123,59578,59579],{"class":125,"line":156},[123,59580,232],{"emptyLinePlaceholder":231},[123,59582,59583,59585,59587],{"class":125,"line":168},[123,59584,3509],{"class":129},[123,59586,53741],{"class":53707},[123,59588,53714],{"class":129},[123,59590,59591,59593,59595,59597,59599,59601],{"class":125,"line":268},[123,59592,54548],{"class":129},[123,59594,53751],{"class":53707},[123,59596,53754],{"class":337},[123,59598,134],{"class":129},[123,59600,53759],{"class":143},[123,59602,53714],{"class":129},[123,59604,59605,59607,59609,59611,59613,59615,59617,59619,59621],{"class":125,"line":291},[123,59606,54548],{"class":129},[123,59608,53751],{"class":53707},[123,59610,17350],{"class":337},[123,59612,134],{"class":129},[123,59614,53798],{"class":143},[123,59616,53778],{"class":337},[123,59618,134],{"class":129},[123,59620,53805],{"class":143},[123,59622,53714],{"class":129},[123,59624,59625,59627,59629,59631,59633],{"class":125,"line":300},[123,59626,54548],{"class":129},[123,59628,642],{"class":53707},[123,59630,53816],{"class":129},[123,59632,642],{"class":53707},[123,59634,53714],{"class":129},[123,59636,59637,59639,59641],{"class":125,"line":305},[123,59638,54548],{"class":129},[123,59640,2526],{"class":53707},[123,59642,53714],{"class":129},[123,59644,59645,59647],{"class":125,"line":316},[123,59646,8836],{"class":53707},[123,59648,137],{"class":129},[123,59650,59651,59653,59655,59657],{"class":125,"line":673},[123,59652,57109],{"class":164},[123,59654,147],{"class":129},[123,59656,2799],{"class":164},[123,59658,3760],{"class":129},[123,59660,59661,59663,59665,59667],{"class":125,"line":692},[123,59662,57098],{"class":164},[123,59664,147],{"class":129},[123,59666,2799],{"class":164},[123,59668,3760],{"class":129},[123,59670,59671],{"class":125,"line":713},[123,59672,4631],{"class":129},[123,59674,59675],{"class":125,"line":718},[123,59676,232],{"emptyLinePlaceholder":231},[123,59678,59679,59682],{"class":125,"line":1138},[123,59680,59681],{"class":53707},"    h2",[123,59683,137],{"class":129},[123,59685,59686,59689,59691,59693],{"class":125,"line":1429},[123,59687,59688],{"class":164},"      text-align",[123,59690,147],{"class":129},[123,59692,53997],{"class":164},[123,59694,3760],{"class":129},[123,59696,59697],{"class":125,"line":1439},[123,59698,4631],{"class":129},[123,59700,59701],{"class":125,"line":1444},[123,59702,232],{"emptyLinePlaceholder":231},[123,59704,59705,59707],{"class":125,"line":1453},[123,59706,57155],{"class":337},[123,59708,137],{"class":129},[123,59710,59711,59713,59715,59717,59719],{"class":125,"line":1458},[123,59712,57174],{"class":164},[123,59714,147],{"class":129},[123,59716,4006],{"class":164},[123,59718,53897],{"class":133},[123,59720,3760],{"class":129},[123,59722,59723,59725,59727,59729,59731,59733],{"class":125,"line":1476},[123,59724,57109],{"class":164},[123,59726,147],{"class":129},[123,59728,3258],{"class":164},[123,59730,53897],{"class":133},[123,59732,53961],{"class":164},[123,59734,3760],{"class":129},[123,59736,59737,59739,59741,59743],{"class":125,"line":1494},[123,59738,57412],{"class":164},[123,59740,147],{"class":129},[123,59742,53882],{"class":164},[123,59744,3760],{"class":129},[123,59746,59747,59749,59751,59753,59755],{"class":125,"line":1499},[123,59748,57325],{"class":164},[123,59750,147],{"class":129},[123,59752,3426],{"class":164},[123,59754,53897],{"class":133},[123,59756,3760],{"class":129},[123,59758,59759,59762,59764,59766,59768],{"class":125,"line":1517},[123,59760,59761],{"class":164},"      line-height",[123,59763,147],{"class":129},[123,59765,3007],{"class":164},[123,59767,53897],{"class":133},[123,59769,3760],{"class":129},[123,59771,59772],{"class":125,"line":1534},[123,59773,4631],{"class":129},[123,59775,59776],{"class":125,"line":1539},[123,59777,232],{"emptyLinePlaceholder":231},[123,59779,59780,59783],{"class":125,"line":2080},[123,59781,59782],{"class":337},"    .qs",[123,59784,137],{"class":129},[123,59786,59787],{"class":125,"line":2097},[123,59788,232],{"emptyLinePlaceholder":231},[123,59790,59791,59793,59795,59798,59800],{"class":125,"line":2114},[123,59792,57174],{"class":164},[123,59794,147],{"class":129},[123,59796,59797],{"class":164},"450",[123,59799,53897],{"class":133},[123,59801,3760],{"class":129},[123,59803,59804,59806,59808,59810,59812],{"class":125,"line":2125},[123,59805,57188],{"class":164},[123,59807,147],{"class":129},[123,59809,3007],{"class":164},[123,59811,53897],{"class":133},[123,59813,3760],{"class":129},[123,59815,59816,59819,59821,59824],{"class":125,"line":2130},[123,59817,59818],{"class":164},"      color",[123,59820,147],{"class":129},[123,59822,59823],{"class":164},"red",[123,59825,3760],{"class":129},[123,59827,59828],{"class":125,"line":5033},[123,59829,232],{"emptyLinePlaceholder":231},[123,59831,59832],{"class":125,"line":5041},[123,59833,4631],{"class":129},[123,59835,59836],{"class":125,"line":5046},[123,59837,232],{"emptyLinePlaceholder":231},[123,59839,59840,59843],{"class":125,"line":5052},[123,59841,59842],{"class":337},"    .btns",[123,59844,137],{"class":129},[123,59846,59847,59849,59851,59853],{"class":125,"line":5058},[123,59848,59688],{"class":164},[123,59850,147],{"class":129},[123,59852,53997],{"class":164},[123,59854,3760],{"class":129},[123,59856,59857],{"class":125,"line":5063},[123,59858,4631],{"class":129},[123,59860,59861],{"class":125,"line":10380},[123,59862,232],{"emptyLinePlaceholder":231},[123,59864,59865,59867,59870],{"class":125,"line":10404},[123,59866,59842],{"class":337},[123,59868,59869],{"class":53707}," button",[123,59871,137],{"class":129},[123,59873,59874,59876,59878,59880,59882],{"class":125,"line":10409},[123,59875,57174],{"class":164},[123,59877,147],{"class":129},[123,59879,462],{"class":164},[123,59881,53897],{"class":133},[123,59883,3760],{"class":129},[123,59885,59886,59888,59890,59892,59894],{"class":125,"line":10415},[123,59887,57188],{"class":164},[123,59889,147],{"class":129},[123,59891,2881],{"class":164},[123,59893,53897],{"class":133},[123,59895,3760],{"class":129},[123,59897,59898,59900,59902,59904,59907,59909],{"class":125,"line":10442},[123,59899,57109],{"class":164},[123,59901,147],{"class":129},[123,59903,2799],{"class":164},[123,59905,59906],{"class":164}," 50",[123,59908,53897],{"class":133},[123,59910,3760],{"class":129},[123,59912,59913],{"class":125,"line":10447},[123,59914,4631],{"class":129},[123,59916,59917,59919,59921],{"class":125,"line":10453},[123,59918,54820],{"class":129},[123,59920,2526],{"class":53707},[123,59922,53714],{"class":129},[123,59924,59925,59927,59929],{"class":125,"line":10465},[123,59926,54190],{"class":129},[123,59928,53741],{"class":53707},[123,59930,53714],{"class":129},[123,59932,59933],{"class":125,"line":10477},[123,59934,232],{"emptyLinePlaceholder":231},[123,59936,59937,59939,59941],{"class":125,"line":10489},[123,59938,3509],{"class":129},[123,59940,54205],{"class":53707},[123,59942,53714],{"class":129},[123,59944,59945,59947,59949,59952,59954],{"class":125,"line":12148},[123,59946,54548],{"class":129},[123,59948,14],{"class":53707},[123,59950,59951],{"class":129},">随机点名\u003C\u002F",[123,59953,14],{"class":53707},[123,59955,53714],{"class":129},[123,59957,59958,59960,59962,59964,59966,59968],{"class":125,"line":12173},[123,59959,54548],{"class":129},[123,59961,54016],{"class":53707},[123,59963,55889],{"class":337},[123,59965,134],{"class":129},[123,59967,55894],{"class":143},[123,59969,53714],{"class":129},[123,59971,59972,59974,59976,59979,59981],{"class":125,"line":12196},[123,59973,53748],{"class":129},[123,59975,123],{"class":53707},[123,59977,59978],{"class":129},">名字是：\u003C\u002F",[123,59980,123],{"class":53707},[123,59982,53714],{"class":129},[123,59984,59985,59987,59989,59991,59993,59996,59999,60001],{"class":125,"line":12220},[123,59986,53748],{"class":129},[123,59988,54016],{"class":53707},[123,59990,55889],{"class":337},[123,59992,134],{"class":129},[123,59994,59995],{"class":143},"\"qs\"",[123,59997,59998],{"class":129},">这里显示姓名\u003C\u002F",[123,60000,54016],{"class":53707},[123,60002,53714],{"class":129},[123,60004,60005,60007,60009],{"class":125,"line":12225},[123,60006,54820],{"class":129},[123,60008,54016],{"class":53707},[123,60010,53714],{"class":129},[123,60012,60013,60015,60017,60019,60021,60024],{"class":125,"line":12230},[123,60014,54548],{"class":129},[123,60016,54016],{"class":53707},[123,60018,55889],{"class":337},[123,60020,134],{"class":129},[123,60022,60023],{"class":143},"\"btns\"",[123,60025,53714],{"class":129},[123,60027,60028,60030,60032,60034,60036,60039,60042,60044],{"class":125,"line":12235},[123,60029,53748],{"class":129},[123,60031,56290],{"class":53707},[123,60033,55889],{"class":337},[123,60035,134],{"class":129},[123,60037,60038],{"class":143},"\"start\"",[123,60040,60041],{"class":129},">开始\u003C\u002F",[123,60043,56290],{"class":53707},[123,60045,53714],{"class":129},[123,60047,60048,60050,60052,60054,60056,60059,60062,60064],{"class":125,"line":12244},[123,60049,53748],{"class":129},[123,60051,56290],{"class":53707},[123,60053,55889],{"class":337},[123,60055,134],{"class":129},[123,60057,60058],{"class":143},"\"end\"",[123,60060,60061],{"class":129},">结束\u003C\u002F",[123,60063,56290],{"class":53707},[123,60065,53714],{"class":129},[123,60067,60068,60070,60072],{"class":125,"line":12249},[123,60069,54820],{"class":129},[123,60071,54016],{"class":53707},[123,60073,53714],{"class":129},[123,60075,60076],{"class":125,"line":12255},[123,60077,232],{"emptyLinePlaceholder":231},[123,60079,60080,60082,60084],{"class":125,"line":12276},[123,60081,54548],{"class":129},[123,60083,54218],{"class":53707},[123,60085,53714],{"class":129},[123,60087,60088],{"class":125,"line":12282},[123,60089,60090],{"class":2673},"    \u002F\u002F 数据数组\n",[123,60092,60093,60095,60098,60100,60102,60105,60107,60110,60112,60115,60117,60120,60122,60125],{"class":125,"line":12296},[123,60094,13653],{"class":133},[123,60096,60097],{"class":164}," arr",[123,60099,15995],{"class":133},[123,60101,977],{"class":129},[123,60103,60104],{"class":143},"'马超'",[123,60106,251],{"class":129},[123,60108,60109],{"class":143},"'黄忠'",[123,60111,251],{"class":129},[123,60113,60114],{"class":143},"'赵云'",[123,60116,251],{"class":129},[123,60118,60119],{"class":143},"'关羽'",[123,60121,251],{"class":129},[123,60123,60124],{"class":143},"'张飞'",[123,60126,998],{"class":129},[123,60128,60129,60131,60134,60136,60138,60140,60142,60145],{"class":125,"line":12302},[123,60130,13653],{"class":133},[123,60132,60133],{"class":164}," qs",[123,60135,15995],{"class":133},[123,60137,56799],{"class":129},[123,60139,56802],{"class":337},[123,60141,1315],{"class":129},[123,60143,60144],{"class":143},"'.qs'",[123,60146,288],{"class":129},[123,60148,60149],{"class":125,"line":12329},[123,60150,60151],{"class":2673},"    \u002F\u002F 1.业务1.开始按钮模块\n",[123,60153,60154,60156,60158,60160,60162,60164,60166,60169],{"class":125,"line":12338},[123,60155,13653],{"class":133},[123,60157,6623],{"class":164},[123,60159,15995],{"class":133},[123,60161,56799],{"class":129},[123,60163,56802],{"class":337},[123,60165,1315],{"class":129},[123,60167,60168],{"class":143},"'.start'",[123,60170,288],{"class":129},[123,60172,60173],{"class":125,"line":12344},[123,60174,60175],{"class":2673},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[123,60177,60178,60180,60183,60185],{"class":125,"line":12352},[123,60179,54623],{"class":133},[123,60181,60182],{"class":129}," timerId ",[123,60184,134],{"class":133},[123,60186,49740],{"class":164},[123,60188,60189],{"class":125,"line":12357},[123,60190,60191],{"class":2673},"    \u002F\u002F 随机号要全局变量\n",[123,60193,60194,60196,60199,60201],{"class":125,"line":19032},[123,60195,54623],{"class":133},[123,60197,60198],{"class":129}," random ",[123,60200,134],{"class":133},[123,60202,49740],{"class":164},[123,60204,60205],{"class":125,"line":19038},[123,60206,60207],{"class":2673},"    \u002F\u002F 1.1 添加点击事件\n",[123,60209,60210,60213,60216,60218,60221,60223,60225],{"class":125,"line":19061},[123,60211,60212],{"class":129},"    start.",[123,60214,60215],{"class":337},"addEventListener",[123,60217,1315],{"class":129},[123,60219,60220],{"class":143},"'click'",[123,60222,251],{"class":129},[123,60224,56852],{"class":133},[123,60226,56855],{"class":129},[123,60228,60229,60232,60234,60236,60238,60240],{"class":125,"line":19067},[123,60230,60231],{"class":129},"      timerId ",[123,60233,134],{"class":133},[123,60235,56847],{"class":337},[123,60237,1315],{"class":129},[123,60239,56852],{"class":133},[123,60241,56855],{"class":129},[123,60243,60244],{"class":125,"line":19090},[123,60245,60246],{"class":2673},"        \u002F\u002F 随机数\n",[123,60248,60249,60252,60254,60257,60260,60263,60265,60267,60269,60271],{"class":125,"line":19104},[123,60250,60251],{"class":129},"        random ",[123,60253,134],{"class":133},[123,60255,60256],{"class":337}," parseInt",[123,60258,60259],{"class":129},"(Math.",[123,60261,60262],{"class":337},"random",[123,60264,15481],{"class":129},[123,60266,3060],{"class":133},[123,60268,54369],{"class":129},[123,60270,54372],{"class":164},[123,60272,288],{"class":129},[123,60274,60275,60278,60280],{"class":125,"line":19124},[123,60276,60277],{"class":129},"        qs.innerHTML ",[123,60279,134],{"class":133},[123,60281,60282],{"class":129}," arr[random]\n",[123,60284,60285,60288,60290],{"class":125,"line":19130},[123,60286,60287],{"class":129},"      }, ",[123,60289,2881],{"class":164},[123,60291,288],{"class":129},[123,60293,60294],{"class":125,"line":19141},[123,60295,60296],{"class":2673},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[123,60298,60299,60301,60304,60306,60309,60311],{"class":125,"line":19164},[123,60300,56883],{"class":133},[123,60302,60303],{"class":129}," (arr.",[123,60305,54372],{"class":164},[123,60307,60308],{"class":133}," ===",[123,60310,27540],{"class":164},[123,60312,14873],{"class":129},[123,60314,60315],{"class":125,"line":19186},[123,60316,60317],{"class":2673},"        \u002F\u002F start.disabled = true\n",[123,60319,60320],{"class":125,"line":19191},[123,60321,60322],{"class":2673},"        \u002F\u002F end.disabled = true\n",[123,60324,60325],{"class":125,"line":19197},[123,60326,60327],{"class":2673},"        \u002F\u002F 可以合起来写\n",[123,60329,60330,60333,60335,60338,60340],{"class":125,"line":19211},[123,60331,60332],{"class":129},"        start.disabled ",[123,60334,134],{"class":133},[123,60336,60337],{"class":129}," end.disabled ",[123,60339,134],{"class":133},[123,60341,60342],{"class":164}," true\n",[123,60344,60345],{"class":125,"line":19224},[123,60346,54801],{"class":129},[123,60348,60349],{"class":125,"line":19229},[123,60350,35872],{"class":129},[123,60352,60353],{"class":125,"line":19243},[123,60354,60355],{"class":2673},"    \u002F\u002F 1.2 关闭按钮模块\n",[123,60357,60358,60360,60362,60364,60366,60368,60370,60373],{"class":125,"line":19248},[123,60359,13653],{"class":133},[123,60361,6639],{"class":164},[123,60363,15995],{"class":133},[123,60365,56799],{"class":129},[123,60367,56802],{"class":337},[123,60369,1315],{"class":129},[123,60371,60372],{"class":143},"'.end'",[123,60374,288],{"class":129},[123,60376,60377,60380,60382,60384,60386,60388,60390],{"class":125,"line":19254},[123,60378,60379],{"class":129},"    end.",[123,60381,60215],{"class":337},[123,60383,1315],{"class":129},[123,60385,60220],{"class":143},[123,60387,251],{"class":129},[123,60389,56852],{"class":133},[123,60391,56855],{"class":129},[123,60393,60394,60397],{"class":125,"line":19259},[123,60395,60396],{"class":337},"      clearInterval",[123,60398,60399],{"class":129},"(timerId)\n",[123,60401,60402],{"class":125,"line":19273},[123,60403,60404],{"class":2673},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[123,60406,60407,60410,60413,60416,60418],{"class":125,"line":19278},[123,60408,60409],{"class":129},"      arr.",[123,60411,60412],{"class":337},"splice",[123,60414,60415],{"class":129},"(random, ",[123,60417,2825],{"class":164},[123,60419,288],{"class":129},[123,60421,60422],{"class":125,"line":19283},[123,60423,35872],{"class":129},[123,60425,60426],{"class":125,"line":19297},[123,60427,232],{"emptyLinePlaceholder":231},[123,60429,60430,60432,60434],{"class":125,"line":19309},[123,60431,54820],{"class":129},[123,60433,54218],{"class":53707},[123,60435,53714],{"class":129},[123,60437,60438,60440,60442],{"class":125,"line":19314},[123,60439,54190],{"class":129},[123,60441,54205],{"class":53707},[123,60443,53714],{"class":129},[123,60445,60446],{"class":125,"line":19327},[123,60447,232],{"emptyLinePlaceholder":231},[123,60449,60450,60452,60454],{"class":125,"line":19332},[123,60451,54190],{"class":129},[123,60453,53042],{"class":53707},[123,60455,53714],{"class":129},[19,60457,60458],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[2587,60460,60462],{"id":60461},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[113,60464,60466],{"className":53040,"code":60465,"language":53042,"meta":118,"style":118},"\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",[120,60467,60468,60478,60492,60496,60504,60518,60538,60550,60558,60562,60570,60582,60590,60609,60626,60642,60652,60656,60664,60672,60676],{"__ignoreMap":118},[123,60469,60470,60472,60474,60476],{"class":125,"line":126},[123,60471,53704],{"class":129},[123,60473,53708],{"class":53707},[123,60475,53711],{"class":337},[123,60477,53714],{"class":129},[123,60479,60480,60482,60484,60486,60488,60490],{"class":125,"line":140},[123,60481,3509],{"class":129},[123,60483,53042],{"class":53707},[123,60485,53723],{"class":337},[123,60487,134],{"class":129},[123,60489,53728],{"class":143},[123,60491,53714],{"class":129},[123,60493,60494],{"class":125,"line":156},[123,60495,232],{"emptyLinePlaceholder":231},[123,60497,60498,60500,60502],{"class":125,"line":168},[123,60499,3509],{"class":129},[123,60501,53741],{"class":53707},[123,60503,53714],{"class":129},[123,60505,60506,60508,60510,60512,60514,60516],{"class":125,"line":268},[123,60507,54548],{"class":129},[123,60509,53751],{"class":53707},[123,60511,53754],{"class":337},[123,60513,134],{"class":129},[123,60515,53759],{"class":143},[123,60517,53714],{"class":129},[123,60519,60520,60522,60524,60526,60528,60530,60532,60534,60536],{"class":125,"line":291},[123,60521,54548],{"class":129},[123,60523,53751],{"class":53707},[123,60525,17350],{"class":337},[123,60527,134],{"class":129},[123,60529,53798],{"class":143},[123,60531,53778],{"class":337},[123,60533,134],{"class":129},[123,60535,53805],{"class":143},[123,60537,53714],{"class":129},[123,60539,60540,60542,60544,60546,60548],{"class":125,"line":300},[123,60541,54548],{"class":129},[123,60543,642],{"class":53707},[123,60545,53816],{"class":129},[123,60547,642],{"class":53707},[123,60549,53714],{"class":129},[123,60551,60552,60554,60556],{"class":125,"line":305},[123,60553,54190],{"class":129},[123,60555,53741],{"class":53707},[123,60557,53714],{"class":129},[123,60559,60560],{"class":125,"line":316},[123,60561,232],{"emptyLinePlaceholder":231},[123,60563,60564,60566,60568],{"class":125,"line":673},[123,60565,3509],{"class":129},[123,60567,54205],{"class":53707},[123,60569,53714],{"class":129},[123,60571,60572,60574,60576,60578,60580],{"class":125,"line":692},[123,60573,54548],{"class":129},[123,60575,56290],{"class":53707},[123,60577,56296],{"class":129},[123,60579,56290],{"class":53707},[123,60581,53714],{"class":129},[123,60583,60584,60586,60588],{"class":125,"line":713},[123,60585,54548],{"class":129},[123,60587,54218],{"class":53707},[123,60589,53714],{"class":129},[123,60591,60592,60594,60596,60598,60600,60602,60604,60607],{"class":125,"line":718},[123,60593,13653],{"class":133},[123,60595,56794],{"class":164},[123,60597,15995],{"class":133},[123,60599,56799],{"class":129},[123,60601,56802],{"class":337},[123,60603,1315],{"class":129},[123,60605,60606],{"class":143},"'button'",[123,60608,288],{"class":129},[123,60610,60611,60614,60616,60618,60620,60622,60624],{"class":125,"line":1138},[123,60612,60613],{"class":129},"    btn.",[123,60615,60215],{"class":337},[123,60617,1315],{"class":129},[123,60619,60220],{"class":143},[123,60621,251],{"class":129},[123,60623,56852],{"class":133},[123,60625,56855],{"class":129},[123,60627,60628,60631,60633,60635,60638,60640],{"class":125,"line":1429},[123,60629,60630],{"class":133},"      const",[123,60632,4684],{"class":164},[123,60634,15995],{"class":133},[123,60636,60637],{"class":129}," Math.",[123,60639,60262],{"class":337},[123,60641,4420],{"class":129},[123,60643,60644,60647,60650],{"class":125,"line":1439},[123,60645,60646],{"class":129},"      console.",[123,60648,60649],{"class":337},"log",[123,60651,2630],{"class":129},[123,60653,60654],{"class":125,"line":1444},[123,60655,35872],{"class":129},[123,60657,60658,60660,60662],{"class":125,"line":1453},[123,60659,54820],{"class":129},[123,60661,54218],{"class":53707},[123,60663,53714],{"class":129},[123,60665,60666,60668,60670],{"class":125,"line":1458},[123,60667,54190],{"class":129},[123,60669,54205],{"class":53707},[123,60671,53714],{"class":129},[123,60673,60674],{"class":125,"line":1476},[123,60675,232],{"emptyLinePlaceholder":231},[123,60677,60678,60680,60682],{"class":125,"line":1494},[123,60679,54190],{"class":129},[123,60681,53042],{"class":53707},[123,60683,53714],{"class":129},[19,60685,60686],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60688,60689],{},"常量不可以重新赋值",[19,60691,60692],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[113,60694,60696],{"className":53040,"code":60695,"language":53042,"meta":118,"style":118},"\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",[120,60697,60698,60708,60722,60726,60734,60748,60768,60780,60788,60792,60800,60812,60820,60831,60849,60865,60879,60887,60891,60899,60907,60911],{"__ignoreMap":118},[123,60699,60700,60702,60704,60706],{"class":125,"line":126},[123,60701,53704],{"class":129},[123,60703,53708],{"class":53707},[123,60705,53711],{"class":337},[123,60707,53714],{"class":129},[123,60709,60710,60712,60714,60716,60718,60720],{"class":125,"line":140},[123,60711,3509],{"class":129},[123,60713,53042],{"class":53707},[123,60715,53723],{"class":337},[123,60717,134],{"class":129},[123,60719,53728],{"class":143},[123,60721,53714],{"class":129},[123,60723,60724],{"class":125,"line":156},[123,60725,232],{"emptyLinePlaceholder":231},[123,60727,60728,60730,60732],{"class":125,"line":168},[123,60729,3509],{"class":129},[123,60731,53741],{"class":53707},[123,60733,53714],{"class":129},[123,60735,60736,60738,60740,60742,60744,60746],{"class":125,"line":268},[123,60737,54548],{"class":129},[123,60739,53751],{"class":53707},[123,60741,53754],{"class":337},[123,60743,134],{"class":129},[123,60745,53759],{"class":143},[123,60747,53714],{"class":129},[123,60749,60750,60752,60754,60756,60758,60760,60762,60764,60766],{"class":125,"line":291},[123,60751,54548],{"class":129},[123,60753,53751],{"class":53707},[123,60755,17350],{"class":337},[123,60757,134],{"class":129},[123,60759,53798],{"class":143},[123,60761,53778],{"class":337},[123,60763,134],{"class":129},[123,60765,53805],{"class":143},[123,60767,53714],{"class":129},[123,60769,60770,60772,60774,60776,60778],{"class":125,"line":300},[123,60771,54548],{"class":129},[123,60773,642],{"class":53707},[123,60775,53816],{"class":129},[123,60777,642],{"class":53707},[123,60779,53714],{"class":129},[123,60781,60782,60784,60786],{"class":125,"line":305},[123,60783,54190],{"class":129},[123,60785,53741],{"class":53707},[123,60787,53714],{"class":129},[123,60789,60790],{"class":125,"line":316},[123,60791,232],{"emptyLinePlaceholder":231},[123,60793,60794,60796,60798],{"class":125,"line":673},[123,60795,3509],{"class":129},[123,60797,54205],{"class":53707},[123,60799,53714],{"class":129},[123,60801,60802,60804,60806,60808,60810],{"class":125,"line":692},[123,60803,54548],{"class":129},[123,60805,56290],{"class":53707},[123,60807,56296],{"class":129},[123,60809,56290],{"class":53707},[123,60811,53714],{"class":129},[123,60813,60814,60816,60818],{"class":125,"line":713},[123,60815,54548],{"class":129},[123,60817,54218],{"class":53707},[123,60819,53714],{"class":129},[123,60821,60822,60824,60826,60828],{"class":125,"line":718},[123,60823,13653],{"class":133},[123,60825,4684],{"class":164},[123,60827,15995],{"class":133},[123,60829,60830],{"class":164}," 10\n",[123,60832,60833,60835,60837,60839,60841,60843,60845,60847],{"class":125,"line":1138},[123,60834,13653],{"class":133},[123,60836,56794],{"class":164},[123,60838,15995],{"class":133},[123,60840,56799],{"class":129},[123,60842,56802],{"class":337},[123,60844,1315],{"class":129},[123,60846,60606],{"class":143},[123,60848,288],{"class":129},[123,60850,60851,60853,60855,60857,60859,60861,60863],{"class":125,"line":1429},[123,60852,60613],{"class":129},[123,60854,60215],{"class":337},[123,60856,1315],{"class":129},[123,60858,60220],{"class":143},[123,60860,251],{"class":129},[123,60862,56852],{"class":133},[123,60864,56855],{"class":129},[123,60866,60867,60869,60871,60873,60875,60877],{"class":125,"line":1439},[123,60868,60630],{"class":133},[123,60870,4684],{"class":164},[123,60872,15995],{"class":133},[123,60874,60637],{"class":129},[123,60876,60262],{"class":337},[123,60878,4420],{"class":129},[123,60880,60881,60883,60885],{"class":125,"line":1444},[123,60882,60646],{"class":129},[123,60884,60649],{"class":337},[123,60886,2630],{"class":129},[123,60888,60889],{"class":125,"line":1453},[123,60890,35872],{"class":129},[123,60892,60893,60895,60897],{"class":125,"line":1458},[123,60894,54820],{"class":129},[123,60896,54218],{"class":53707},[123,60898,53714],{"class":129},[123,60900,60901,60903,60905],{"class":125,"line":1476},[123,60902,54190],{"class":129},[123,60904,54205],{"class":53707},[123,60906,53714],{"class":129},[123,60908,60909],{"class":125,"line":1494},[123,60910,232],{"emptyLinePlaceholder":231},[123,60912,60913,60915,60917],{"class":125,"line":1499},[123,60914,54190],{"class":129},[123,60916,53042],{"class":53707},[123,60918,53714],{"class":129},[19,60920,60921],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[113,60923,60925],{"className":53040,"code":60924,"language":53042,"meta":118,"style":118},"\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",[120,60926,60927,60937,60951,60955,60963,60977,60997,61009,61017,61021,61029,61041,61049,61059,61077,61093,61106,61114,61118,61126,61134,61138],{"__ignoreMap":118},[123,60928,60929,60931,60933,60935],{"class":125,"line":126},[123,60930,53704],{"class":129},[123,60932,53708],{"class":53707},[123,60934,53711],{"class":337},[123,60936,53714],{"class":129},[123,60938,60939,60941,60943,60945,60947,60949],{"class":125,"line":140},[123,60940,3509],{"class":129},[123,60942,53042],{"class":53707},[123,60944,53723],{"class":337},[123,60946,134],{"class":129},[123,60948,53728],{"class":143},[123,60950,53714],{"class":129},[123,60952,60953],{"class":125,"line":156},[123,60954,232],{"emptyLinePlaceholder":231},[123,60956,60957,60959,60961],{"class":125,"line":168},[123,60958,3509],{"class":129},[123,60960,53741],{"class":53707},[123,60962,53714],{"class":129},[123,60964,60965,60967,60969,60971,60973,60975],{"class":125,"line":268},[123,60966,54548],{"class":129},[123,60968,53751],{"class":53707},[123,60970,53754],{"class":337},[123,60972,134],{"class":129},[123,60974,53759],{"class":143},[123,60976,53714],{"class":129},[123,60978,60979,60981,60983,60985,60987,60989,60991,60993,60995],{"class":125,"line":291},[123,60980,54548],{"class":129},[123,60982,53751],{"class":53707},[123,60984,17350],{"class":337},[123,60986,134],{"class":129},[123,60988,53798],{"class":143},[123,60990,53778],{"class":337},[123,60992,134],{"class":129},[123,60994,53805],{"class":143},[123,60996,53714],{"class":129},[123,60998,60999,61001,61003,61005,61007],{"class":125,"line":300},[123,61000,54548],{"class":129},[123,61002,642],{"class":53707},[123,61004,53816],{"class":129},[123,61006,642],{"class":53707},[123,61008,53714],{"class":129},[123,61010,61011,61013,61015],{"class":125,"line":305},[123,61012,54190],{"class":129},[123,61014,53741],{"class":53707},[123,61016,53714],{"class":129},[123,61018,61019],{"class":125,"line":316},[123,61020,232],{"emptyLinePlaceholder":231},[123,61022,61023,61025,61027],{"class":125,"line":673},[123,61024,3509],{"class":129},[123,61026,54205],{"class":53707},[123,61028,53714],{"class":129},[123,61030,61031,61033,61035,61037,61039],{"class":125,"line":692},[123,61032,54548],{"class":129},[123,61034,56290],{"class":53707},[123,61036,56296],{"class":129},[123,61038,56290],{"class":53707},[123,61040,53714],{"class":129},[123,61042,61043,61045,61047],{"class":125,"line":713},[123,61044,54548],{"class":129},[123,61046,54218],{"class":53707},[123,61048,53714],{"class":129},[123,61050,61051,61053,61055,61057],{"class":125,"line":718},[123,61052,13653],{"class":133},[123,61054,4684],{"class":164},[123,61056,15995],{"class":133},[123,61058,60830],{"class":164},[123,61060,61061,61063,61065,61067,61069,61071,61073,61075],{"class":125,"line":1138},[123,61062,13653],{"class":133},[123,61064,56794],{"class":164},[123,61066,15995],{"class":133},[123,61068,56799],{"class":129},[123,61070,56802],{"class":337},[123,61072,1315],{"class":129},[123,61074,60606],{"class":143},[123,61076,288],{"class":129},[123,61078,61079,61081,61083,61085,61087,61089,61091],{"class":125,"line":1429},[123,61080,60613],{"class":129},[123,61082,60215],{"class":337},[123,61084,1315],{"class":129},[123,61086,60220],{"class":143},[123,61088,251],{"class":129},[123,61090,56852],{"class":133},[123,61092,56855],{"class":129},[123,61094,61095,61098,61100,61102,61104],{"class":125,"line":1439},[123,61096,61097],{"class":129},"      num ",[123,61099,134],{"class":133},[123,61101,60637],{"class":129},[123,61103,60262],{"class":337},[123,61105,4420],{"class":129},[123,61107,61108,61110,61112],{"class":125,"line":1444},[123,61109,60646],{"class":129},[123,61111,60649],{"class":337},[123,61113,2630],{"class":129},[123,61115,61116],{"class":125,"line":1453},[123,61117,35872],{"class":129},[123,61119,61120,61122,61124],{"class":125,"line":1458},[123,61121,54820],{"class":129},[123,61123,54218],{"class":53707},[123,61125,53714],{"class":129},[123,61127,61128,61130,61132],{"class":125,"line":1476},[123,61129,54190],{"class":129},[123,61131,54205],{"class":53707},[123,61133,53714],{"class":129},[123,61135,61136],{"class":125,"line":1494},[123,61137,232],{"emptyLinePlaceholder":231},[123,61139,61140,61142,61144],{"class":125,"line":1499},[123,61141,54190],{"class":129},[123,61143,53042],{"class":53707},[123,61145,53714],{"class":129},[19,61147,61148],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[2587,61150,61152],{"id":61151},"_324-事件监听版本","3.2.4 事件监听版本",[19,61154,61155],{},[3929,61156],{"alt":118,"src":61157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,61159,61160],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,61162,61163],{},"这种方式会覆盖前边的事件监听:",[113,61165,61167],{"className":53040,"code":61166,"language":53042,"meta":118,"style":118},"\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",[120,61168,61169,61179,61193,61197,61205,61219,61239,61251,61259,61263,61271,61283,61291,61309,61323,61334,61338,61350,61360,61364,61372,61380,61384],{"__ignoreMap":118},[123,61170,61171,61173,61175,61177],{"class":125,"line":126},[123,61172,53704],{"class":129},[123,61174,53708],{"class":53707},[123,61176,53711],{"class":337},[123,61178,53714],{"class":129},[123,61180,61181,61183,61185,61187,61189,61191],{"class":125,"line":140},[123,61182,3509],{"class":129},[123,61184,53042],{"class":53707},[123,61186,53723],{"class":337},[123,61188,134],{"class":129},[123,61190,53728],{"class":143},[123,61192,53714],{"class":129},[123,61194,61195],{"class":125,"line":156},[123,61196,232],{"emptyLinePlaceholder":231},[123,61198,61199,61201,61203],{"class":125,"line":168},[123,61200,3509],{"class":129},[123,61202,53741],{"class":53707},[123,61204,53714],{"class":129},[123,61206,61207,61209,61211,61213,61215,61217],{"class":125,"line":268},[123,61208,54548],{"class":129},[123,61210,53751],{"class":53707},[123,61212,53754],{"class":337},[123,61214,134],{"class":129},[123,61216,53759],{"class":143},[123,61218,53714],{"class":129},[123,61220,61221,61223,61225,61227,61229,61231,61233,61235,61237],{"class":125,"line":291},[123,61222,54548],{"class":129},[123,61224,53751],{"class":53707},[123,61226,17350],{"class":337},[123,61228,134],{"class":129},[123,61230,53798],{"class":143},[123,61232,53778],{"class":337},[123,61234,134],{"class":129},[123,61236,53805],{"class":143},[123,61238,53714],{"class":129},[123,61240,61241,61243,61245,61247,61249],{"class":125,"line":300},[123,61242,54548],{"class":129},[123,61244,642],{"class":53707},[123,61246,53816],{"class":129},[123,61248,642],{"class":53707},[123,61250,53714],{"class":129},[123,61252,61253,61255,61257],{"class":125,"line":305},[123,61254,54190],{"class":129},[123,61256,53741],{"class":53707},[123,61258,53714],{"class":129},[123,61260,61261],{"class":125,"line":316},[123,61262,232],{"emptyLinePlaceholder":231},[123,61264,61265,61267,61269],{"class":125,"line":673},[123,61266,3509],{"class":129},[123,61268,54205],{"class":53707},[123,61270,53714],{"class":129},[123,61272,61273,61275,61277,61279,61281],{"class":125,"line":692},[123,61274,54548],{"class":129},[123,61276,56290],{"class":53707},[123,61278,56296],{"class":129},[123,61280,56290],{"class":53707},[123,61282,53714],{"class":129},[123,61284,61285,61287,61289],{"class":125,"line":713},[123,61286,54548],{"class":129},[123,61288,54218],{"class":53707},[123,61290,53714],{"class":129},[123,61292,61293,61295,61297,61299,61301,61303,61305,61307],{"class":125,"line":718},[123,61294,13653],{"class":133},[123,61296,56794],{"class":164},[123,61298,15995],{"class":133},[123,61300,56799],{"class":129},[123,61302,56802],{"class":337},[123,61304,1315],{"class":129},[123,61306,60606],{"class":143},[123,61308,288],{"class":129},[123,61310,61311,61313,61316,61318,61321],{"class":125,"line":1138},[123,61312,60613],{"class":129},[123,61314,61315],{"class":337},"onclick",[123,61317,15995],{"class":133},[123,61319,61320],{"class":133}," function",[123,61322,56855],{"class":129},[123,61324,61325,61328,61330,61332],{"class":125,"line":1429},[123,61326,61327],{"class":337},"      alert",[123,61329,1315],{"class":129},[123,61331,3077],{"class":164},[123,61333,288],{"class":129},[123,61335,61336],{"class":125,"line":1439},[123,61337,4631],{"class":129},[123,61339,61340,61342,61344,61346,61348],{"class":125,"line":1444},[123,61341,60613],{"class":129},[123,61343,61315],{"class":337},[123,61345,15995],{"class":133},[123,61347,61320],{"class":133},[123,61349,56855],{"class":129},[123,61351,61352,61354,61356,61358],{"class":125,"line":1453},[123,61353,61327],{"class":337},[123,61355,1315],{"class":129},[123,61357,3352],{"class":164},[123,61359,288],{"class":129},[123,61361,61362],{"class":125,"line":1458},[123,61363,4631],{"class":129},[123,61365,61366,61368,61370],{"class":125,"line":1476},[123,61367,54820],{"class":129},[123,61369,54218],{"class":53707},[123,61371,53714],{"class":129},[123,61373,61374,61376,61378],{"class":125,"line":1494},[123,61375,54190],{"class":129},[123,61377,54205],{"class":53707},[123,61379,53714],{"class":129},[123,61381,61382],{"class":125,"line":1499},[123,61383,232],{"emptyLinePlaceholder":231},[123,61385,61386,61388,61390],{"class":125,"line":1517},[123,61387,54190],{"class":129},[123,61389,53042],{"class":53707},[123,61391,53714],{"class":129},[19,61393,61394],{},"只要点击就输出结果为22,前边11被覆盖了",[113,61396,61398],{"className":53040,"code":61397,"language":53042,"meta":118,"style":118},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[120,61399,61400,61405,61410,61414,61419,61424],{"__ignoreMap":118},[123,61401,61402],{"class":125,"line":126},[123,61403,61404],{"class":129},"  btn.addEventListener('click', function () {\n",[123,61406,61407],{"class":125,"line":140},[123,61408,61409],{"class":129},"      alert(11)\n",[123,61411,61412],{"class":125,"line":156},[123,61413,35872],{"class":129},[123,61415,61416],{"class":125,"line":168},[123,61417,61418],{"class":129},"    btn.addEventListener('click', function () {\n",[123,61420,61421],{"class":125,"line":268},[123,61422,61423],{"class":129},"      alert(22)\n",[123,61425,61426],{"class":125,"line":291},[123,61427,35872],{"class":129},[19,61429,61430],{},"点击第一次输出11,第二次点击为22",[2587,61432,61434],{"id":61433},"_325-事件类型","3.2.5 事件类型",[19,61436,61437],{},[3929,61438],{"alt":118,"src":61439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24425,61441,61443],{"id":61442},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61445,61446],{},"补充知识:",[19,61448,61449],{},"轮播图自动播放模块,可以使用",[19,61451,61452],{},"let timerId = setInterval(function () {",[19,61454,61455],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61457,61458],{},"用js方法模拟进行点击事件,click必须加()",[19,61460,61461],{},"next.click()",[19,61463,61464],{},"}, 1000)",[19,61466,61467],{},[3929,61468],{"alt":118,"src":61469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[113,61471,61473],{"className":55470,"code":61472,"language":55472,"meta":118,"style":118},"\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",[120,61474,61475,61479,61489,61503,61507,61515,61530,61550,61570,61583,61591,61596,61601,61605,61609,61614,61619,61624,61629,61633,61637,61642,61647,61652,61656,61660,61665,61669,61674,61679,61683,61687,61692,61697,61702,61707,61712,61716,61720,61725,61730,61735,61740,61745,61749,61753,61758,61763,61768,61773,61778,61783,61788,61793,61798,61803,61807,61811,61816,61821,61825,61829,61834,61839,61843,61848,61853,61857,61861,61866,61870,61875,61880,61884,61889,61893,61897,61902,61907,61912,61917,61922,61927,61932,61936,61940,61944,61949,61954,61959,61964,61968,61976,61984,61988,61996,62011,62025,62046,62054,62068,62081,62096,62115,62127,62139,62151,62163,62175,62187,62199,62207,62222,62246,62270,62278,62286,62294,62302,62307,62312,62317,62322,62327,62332,62337,62342,62347,62352,62356,62361,62366,62371,62376,62381,62386,62391,62396,62401,62405,62410,62415,62420,62425,62430,62435,62440,62445,62450,62455,62460,62465,62469,62473,62478,62483,62488,62492,62497,62502,62507,62512,62517,62521,62526,62530,62534,62538,62542,62546,62550,62555,62560,62565,62570,62575,62580,62585,62590,62595,62599,62603,62608,62613,62618,62623,62628,62632,62637,62642,62647,62652,62657,62662,62666,62670,62675,62679,62684,62688,62693,62698,62703,62708,62713,62718,62722,62730,62738,62742],{"__ignoreMap":118},[123,61476,61477],{"class":125,"line":126},[123,61478,232],{"emptyLinePlaceholder":231},[123,61480,61481,61483,61485,61487],{"class":125,"line":140},[123,61482,53704],{"class":129},[123,61484,53708],{"class":133},[123,61486,53711],{"class":164},[123,61488,53714],{"class":129},[123,61490,61491,61493,61495,61497,61499,61501],{"class":125,"line":156},[123,61492,3509],{"class":129},[123,61494,53042],{"class":53707},[123,61496,53723],{"class":337},[123,61498,134],{"class":129},[123,61500,53728],{"class":143},[123,61502,53714],{"class":129},[123,61504,61505],{"class":125,"line":168},[123,61506,232],{"emptyLinePlaceholder":231},[123,61508,61509,61511,61513],{"class":125,"line":268},[123,61510,3509],{"class":129},[123,61512,53741],{"class":53707},[123,61514,53714],{"class":129},[123,61516,61517,61519,61521,61523,61525,61527],{"class":125,"line":291},[123,61518,54548],{"class":129},[123,61520,53751],{"class":53707},[123,61522,53754],{"class":337},[123,61524,134],{"class":129},[123,61526,53759],{"class":143},[123,61528,61529],{"class":129}," \u002F>\n",[123,61531,61532,61534,61536,61538,61540,61542,61544,61546,61548],{"class":125,"line":300},[123,61533,54548],{"class":129},[123,61535,53751],{"class":53707},[123,61537,53770],{"class":337},[123,61539,134],{"class":129},[123,61541,53775],{"class":143},[123,61543,53778],{"class":337},[123,61545,134],{"class":129},[123,61547,53783],{"class":143},[123,61549,61529],{"class":129},[123,61551,61552,61554,61556,61558,61560,61562,61564,61566,61568],{"class":125,"line":305},[123,61553,54548],{"class":129},[123,61555,53751],{"class":53707},[123,61557,17350],{"class":337},[123,61559,134],{"class":129},[123,61561,53798],{"class":143},[123,61563,53778],{"class":337},[123,61565,134],{"class":129},[123,61567,53805],{"class":143},[123,61569,61529],{"class":129},[123,61571,61572,61574,61576,61579,61581],{"class":125,"line":316},[123,61573,54548],{"class":129},[123,61575,642],{"class":53707},[123,61577,61578],{"class":129},">轮播图点击切换\u003C\u002F",[123,61580,642],{"class":53707},[123,61582,53714],{"class":129},[123,61584,61585,61587,61589],{"class":125,"line":673},[123,61586,54548],{"class":129},[123,61588,2526],{"class":53707},[123,61590,53714],{"class":129},[123,61592,61593],{"class":125,"line":692},[123,61594,61595],{"class":129},"    * {\n",[123,61597,61598],{"class":125,"line":713},[123,61599,61600],{"class":129},"      box-sizing: border-box;\n",[123,61602,61603],{"class":125,"line":718},[123,61604,4631],{"class":129},[123,61606,61607],{"class":125,"line":1138},[123,61608,232],{"emptyLinePlaceholder":231},[123,61610,61611],{"class":125,"line":1429},[123,61612,61613],{"class":129},"    .slider {\n",[123,61615,61616],{"class":125,"line":1439},[123,61617,61618],{"class":129},"      width: 560px;\n",[123,61620,61621],{"class":125,"line":1444},[123,61622,61623],{"class":129},"      height: 400px;\n",[123,61625,61626],{"class":125,"line":1453},[123,61627,61628],{"class":129},"      overflow: hidden;\n",[123,61630,61631],{"class":125,"line":1458},[123,61632,4631],{"class":129},[123,61634,61635],{"class":125,"line":1476},[123,61636,232],{"emptyLinePlaceholder":231},[123,61638,61639],{"class":125,"line":1494},[123,61640,61641],{"class":129},"    .slider-wrapper {\n",[123,61643,61644],{"class":125,"line":1499},[123,61645,61646],{"class":129},"      width: 100%;\n",[123,61648,61649],{"class":125,"line":1517},[123,61650,61651],{"class":129},"      height: 320px;\n",[123,61653,61654],{"class":125,"line":1534},[123,61655,4631],{"class":129},[123,61657,61658],{"class":125,"line":1539},[123,61659,232],{"emptyLinePlaceholder":231},[123,61661,61662],{"class":125,"line":2080},[123,61663,61664],{"class":129},"    .slider-wrapper img {\n",[123,61666,61667],{"class":125,"line":2097},[123,61668,61646],{"class":129},[123,61670,61671],{"class":125,"line":2114},[123,61672,61673],{"class":129},"      height: 100%;\n",[123,61675,61676],{"class":125,"line":2125},[123,61677,61678],{"class":129},"      display: block;\n",[123,61680,61681],{"class":125,"line":2130},[123,61682,4631],{"class":129},[123,61684,61685],{"class":125,"line":5033},[123,61686,232],{"emptyLinePlaceholder":231},[123,61688,61689],{"class":125,"line":5041},[123,61690,61691],{"class":129},"    .slider-footer {\n",[123,61693,61694],{"class":125,"line":5046},[123,61695,61696],{"class":129},"      height: 80px;\n",[123,61698,61699],{"class":125,"line":5052},[123,61700,61701],{"class":129},"      background-color: rgb(100, 67, 68);\n",[123,61703,61704],{"class":125,"line":5058},[123,61705,61706],{"class":129},"      padding: 12px 12px 0 12px;\n",[123,61708,61709],{"class":125,"line":5063},[123,61710,61711],{"class":129},"      position: relative;\n",[123,61713,61714],{"class":125,"line":10380},[123,61715,4631],{"class":129},[123,61717,61718],{"class":125,"line":10404},[123,61719,232],{"emptyLinePlaceholder":231},[123,61721,61722],{"class":125,"line":10409},[123,61723,61724],{"class":129},"    .slider-footer .toggle {\n",[123,61726,61727],{"class":125,"line":10415},[123,61728,61729],{"class":129},"      position: absolute;\n",[123,61731,61732],{"class":125,"line":10442},[123,61733,61734],{"class":129},"      right: 0;\n",[123,61736,61737],{"class":125,"line":10447},[123,61738,61739],{"class":129},"      top: 12px;\n",[123,61741,61742],{"class":125,"line":10453},[123,61743,61744],{"class":129},"      display: flex;\n",[123,61746,61747],{"class":125,"line":10465},[123,61748,4631],{"class":129},[123,61750,61751],{"class":125,"line":10477},[123,61752,232],{"emptyLinePlaceholder":231},[123,61754,61755],{"class":125,"line":10489},[123,61756,61757],{"class":129},"    .slider-footer .toggle button {\n",[123,61759,61760],{"class":125,"line":12148},[123,61761,61762],{"class":129},"      margin-right: 12px;\n",[123,61764,61765],{"class":125,"line":12173},[123,61766,61767],{"class":129},"      width: 28px;\n",[123,61769,61770],{"class":125,"line":12196},[123,61771,61772],{"class":129},"      height: 28px;\n",[123,61774,61775],{"class":125,"line":12220},[123,61776,61777],{"class":129},"      appearance: none;\n",[123,61779,61780],{"class":125,"line":12225},[123,61781,61782],{"class":129},"      border: none;\n",[123,61784,61785],{"class":125,"line":12230},[123,61786,61787],{"class":129},"      background: rgba(255, 255, 255, 0.1);\n",[123,61789,61790],{"class":125,"line":12235},[123,61791,61792],{"class":129},"      color: #fff;\n",[123,61794,61795],{"class":125,"line":12244},[123,61796,61797],{"class":129},"      border-radius: 4px;\n",[123,61799,61800],{"class":125,"line":12249},[123,61801,61802],{"class":129},"      cursor: pointer;\n",[123,61804,61805],{"class":125,"line":12255},[123,61806,4631],{"class":129},[123,61808,61809],{"class":125,"line":12276},[123,61810,232],{"emptyLinePlaceholder":231},[123,61812,61813],{"class":125,"line":12282},[123,61814,61815],{"class":129},"    .slider-footer .toggle button:hover {\n",[123,61817,61818],{"class":125,"line":12296},[123,61819,61820],{"class":129},"      background: rgba(255, 255, 255, 0.2);\n",[123,61822,61823],{"class":125,"line":12302},[123,61824,4631],{"class":129},[123,61826,61827],{"class":125,"line":12329},[123,61828,232],{"emptyLinePlaceholder":231},[123,61830,61831],{"class":125,"line":12338},[123,61832,61833],{"class":129},"    .slider-footer p {\n",[123,61835,61836],{"class":125,"line":12344},[123,61837,61838],{"class":129},"      margin: 0;\n",[123,61840,61841],{"class":125,"line":12352},[123,61842,61792],{"class":129},[123,61844,61845],{"class":125,"line":12357},[123,61846,61847],{"class":129},"      font-size: 18px;\n",[123,61849,61850],{"class":125,"line":19032},[123,61851,61852],{"class":129},"      margin-bottom: 10px;\n",[123,61854,61855],{"class":125,"line":19038},[123,61856,4631],{"class":129},[123,61858,61859],{"class":125,"line":19061},[123,61860,232],{"emptyLinePlaceholder":231},[123,61862,61863],{"class":125,"line":19067},[123,61864,61865],{"class":129},"    .slider-indicator {\n",[123,61867,61868],{"class":125,"line":19090},[123,61869,61838],{"class":129},[123,61871,61872],{"class":125,"line":19104},[123,61873,61874],{"class":129},"      padding: 0;\n",[123,61876,61877],{"class":125,"line":19124},[123,61878,61879],{"class":129},"      list-style: none;\n",[123,61881,61882],{"class":125,"line":19130},[123,61883,61744],{"class":129},[123,61885,61886],{"class":125,"line":19141},[123,61887,61888],{"class":129},"      align-items: center;\n",[123,61890,61891],{"class":125,"line":19164},[123,61892,4631],{"class":129},[123,61894,61895],{"class":125,"line":19186},[123,61896,232],{"emptyLinePlaceholder":231},[123,61898,61899],{"class":125,"line":19191},[123,61900,61901],{"class":129},"    .slider-indicator li {\n",[123,61903,61904],{"class":125,"line":19197},[123,61905,61906],{"class":129},"      width: 8px;\n",[123,61908,61909],{"class":125,"line":19211},[123,61910,61911],{"class":129},"      height: 8px;\n",[123,61913,61914],{"class":125,"line":19224},[123,61915,61916],{"class":129},"      margin: 4px;\n",[123,61918,61919],{"class":125,"line":19229},[123,61920,61921],{"class":129},"      border-radius: 50%;\n",[123,61923,61924],{"class":125,"line":19243},[123,61925,61926],{"class":129},"      background: #fff;\n",[123,61928,61929],{"class":125,"line":19248},[123,61930,61931],{"class":129},"      opacity: 0.4;\n",[123,61933,61934],{"class":125,"line":19254},[123,61935,61802],{"class":129},[123,61937,61938],{"class":125,"line":19259},[123,61939,4631],{"class":129},[123,61941,61942],{"class":125,"line":19273},[123,61943,232],{"emptyLinePlaceholder":231},[123,61945,61946],{"class":125,"line":19278},[123,61947,61948],{"class":129},"    .slider-indicator li.active {\n",[123,61950,61951],{"class":125,"line":19283},[123,61952,61953],{"class":129},"      width: 12px;\n",[123,61955,61956],{"class":125,"line":19297},[123,61957,61958],{"class":129},"      height: 12px;\n",[123,61960,61961],{"class":125,"line":19309},[123,61962,61963],{"class":129},"      opacity: 1;\n",[123,61965,61966],{"class":125,"line":19314},[123,61967,4631],{"class":129},[123,61969,61970,61972,61974],{"class":125,"line":19327},[123,61971,54820],{"class":129},[123,61973,2526],{"class":53707},[123,61975,53714],{"class":129},[123,61977,61978,61980,61982],{"class":125,"line":19332},[123,61979,54190],{"class":129},[123,61981,53741],{"class":53707},[123,61983,53714],{"class":129},[123,61985,61986],{"class":125,"line":19337},[123,61987,232],{"emptyLinePlaceholder":231},[123,61989,61990,61992,61994],{"class":125,"line":19342},[123,61991,3509],{"class":129},[123,61993,54205],{"class":53707},[123,61995,53714],{"class":129},[123,61997,61998,62000,62002,62004,62006,62009],{"class":125,"line":19355},[123,61999,54548],{"class":129},[123,62001,54016],{"class":53707},[123,62003,55889],{"class":337},[123,62005,134],{"class":129},[123,62007,62008],{"class":143},"\"slider\"",[123,62010,53714],{"class":129},[123,62012,62013,62015,62017,62019,62021,62023],{"class":125,"line":19360},[123,62014,53748],{"class":129},[123,62016,54016],{"class":53707},[123,62018,55889],{"class":337},[123,62020,134],{"class":129},[123,62022,57630],{"class":143},[123,62024,53714],{"class":129},[123,62026,62027,62029,62031,62033,62035,62038,62040,62042,62044],{"class":125,"line":35045},[123,62028,57637],{"class":129},[123,62030,3929],{"class":53707},[123,62032,57642],{"class":337},[123,62034,134],{"class":129},[123,62036,62037],{"class":143},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[123,62039,57650],{"class":337},[123,62041,134],{"class":129},[123,62043,1629],{"class":143},[123,62045,61529],{"class":129},[123,62047,62048,62050,62052],{"class":125,"line":35051},[123,62049,54181],{"class":129},[123,62051,54016],{"class":53707},[123,62053,53714],{"class":129},[123,62055,62056,62058,62060,62062,62064,62066],{"class":125,"line":35057},[123,62057,53748],{"class":129},[123,62059,54016],{"class":53707},[123,62061,55889],{"class":337},[123,62063,134],{"class":129},[123,62065,57677],{"class":143},[123,62067,53714],{"class":129},[123,62069,62070,62072,62074,62077,62079],{"class":125,"line":35063},[123,62071,57637],{"class":129},[123,62073,19],{"class":53707},[123,62075,62076],{"class":129},">对人类来说会不会太超前了？\u003C\u002F",[123,62078,19],{"class":53707},[123,62080,53714],{"class":129},[123,62082,62083,62085,62087,62089,62091,62094],{"class":125,"line":35069},[123,62084,57637],{"class":129},[123,62086,3606],{"class":53707},[123,62088,55889],{"class":337},[123,62090,134],{"class":129},[123,62092,62093],{"class":143},"\"slider-indicator\"",[123,62095,53714],{"class":129},[123,62097,62098,62100,62102,62104,62106,62109,62111,62113],{"class":125,"line":35080},[123,62099,57705],{"class":129},[123,62101,29],{"class":53707},[123,62103,55889],{"class":337},[123,62105,134],{"class":129},[123,62107,62108],{"class":143},"\"active\"",[123,62110,57717],{"class":129},[123,62112,29],{"class":53707},[123,62114,53714],{"class":129},[123,62116,62117,62119,62121,62123,62125],{"class":125,"line":35086},[123,62118,57705],{"class":129},[123,62120,29],{"class":53707},[123,62122,57717],{"class":129},[123,62124,29],{"class":53707},[123,62126,53714],{"class":129},[123,62128,62129,62131,62133,62135,62137],{"class":125,"line":35106},[123,62130,57705],{"class":129},[123,62132,29],{"class":53707},[123,62134,57717],{"class":129},[123,62136,29],{"class":53707},[123,62138,53714],{"class":129},[123,62140,62141,62143,62145,62147,62149],{"class":125,"line":35112},[123,62142,57705],{"class":129},[123,62144,29],{"class":53707},[123,62146,57717],{"class":129},[123,62148,29],{"class":53707},[123,62150,53714],{"class":129},[123,62152,62153,62155,62157,62159,62161],{"class":125,"line":35123},[123,62154,57705],{"class":129},[123,62156,29],{"class":53707},[123,62158,57717],{"class":129},[123,62160,29],{"class":53707},[123,62162,53714],{"class":129},[123,62164,62165,62167,62169,62171,62173],{"class":125,"line":35129},[123,62166,57705],{"class":129},[123,62168,29],{"class":53707},[123,62170,57717],{"class":129},[123,62172,29],{"class":53707},[123,62174,53714],{"class":129},[123,62176,62177,62179,62181,62183,62185],{"class":125,"line":35135},[123,62178,57705],{"class":129},[123,62180,29],{"class":53707},[123,62182,57717],{"class":129},[123,62184,29],{"class":53707},[123,62186,53714],{"class":129},[123,62188,62189,62191,62193,62195,62197],{"class":125,"line":35141},[123,62190,57705],{"class":129},[123,62192,29],{"class":53707},[123,62194,57717],{"class":129},[123,62196,29],{"class":53707},[123,62198,53714],{"class":129},[123,62200,62201,62203,62205],{"class":125,"line":35147},[123,62202,57810],{"class":129},[123,62204,3606],{"class":53707},[123,62206,53714],{"class":129},[123,62208,62209,62211,62213,62215,62217,62220],{"class":125,"line":35153},[123,62210,57637],{"class":129},[123,62212,54016],{"class":53707},[123,62214,55889],{"class":337},[123,62216,134],{"class":129},[123,62218,62219],{"class":143},"\"toggle\"",[123,62221,53714],{"class":129},[123,62223,62224,62226,62228,62230,62232,62235,62237,62240,62242,62244],{"class":125,"line":35159},[123,62225,57705],{"class":129},[123,62227,56290],{"class":53707},[123,62229,55889],{"class":337},[123,62231,134],{"class":129},[123,62233,62234],{"class":143},"\"prev\"",[123,62236,3559],{"class":129},[123,62238,62239],{"class":164},"&lt;",[123,62241,54190],{"class":129},[123,62243,56290],{"class":53707},[123,62245,53714],{"class":129},[123,62247,62248,62250,62252,62254,62256,62259,62261,62264,62266,62268],{"class":125,"line":35165},[123,62249,57705],{"class":129},[123,62251,56290],{"class":53707},[123,62253,55889],{"class":337},[123,62255,134],{"class":129},[123,62257,62258],{"class":143},"\"next\"",[123,62260,3559],{"class":129},[123,62262,62263],{"class":164},"&gt;",[123,62265,54190],{"class":129},[123,62267,56290],{"class":53707},[123,62269,53714],{"class":129},[123,62271,62272,62274,62276],{"class":125,"line":35185},[123,62273,57810],{"class":129},[123,62275,54016],{"class":53707},[123,62277,53714],{"class":129},[123,62279,62280,62282,62284],{"class":125,"line":35191},[123,62281,54181],{"class":129},[123,62283,54016],{"class":53707},[123,62285,53714],{"class":129},[123,62287,62288,62290,62292],{"class":125,"line":35207},[123,62289,54820],{"class":129},[123,62291,54016],{"class":53707},[123,62293,53714],{"class":129},[123,62295,62296,62298,62300],{"class":125,"line":35213},[123,62297,54548],{"class":129},[123,62299,54218],{"class":53707},[123,62301,53714],{"class":129},[123,62303,62304],{"class":125,"line":35227},[123,62305,62306],{"class":129},"    \u002F\u002F 1. 初始数据\n",[123,62308,62309],{"class":125,"line":35233},[123,62310,62311],{"class":129},"    const data = [\n",[123,62313,62314],{"class":125,"line":35248},[123,62315,62316],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[123,62318,62319],{"class":125,"line":35254},[123,62320,62321],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[123,62323,62324],{"class":125,"line":35263},[123,62325,62326],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[123,62328,62329],{"class":125,"line":35269},[123,62330,62331],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[123,62333,62334],{"class":125,"line":35278},[123,62335,62336],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[123,62338,62339],{"class":125,"line":35284},[123,62340,62341],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[123,62343,62344],{"class":125,"line":35290},[123,62345,62346],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[123,62348,62349],{"class":125,"line":35299},[123,62350,62351],{"class":129},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[123,62353,62354],{"class":125,"line":35305},[123,62355,55512],{"class":129},[123,62357,62358],{"class":125,"line":35316},[123,62359,62360],{"class":129},"    \u002F\u002F 获取元素\n",[123,62362,62363],{"class":125,"line":35322},[123,62364,62365],{"class":129},"    const img = document.querySelector('.slider-wrapper img')\n",[123,62367,62368],{"class":125,"line":35341},[123,62369,62370],{"class":129},"    const p = document.querySelector('.slider-footer p')\n",[123,62372,62373],{"class":125,"line":35347},[123,62374,62375],{"class":129},"    const footer = document.querySelector('.slider-footer')\n",[123,62377,62378],{"class":125,"line":35358},[123,62379,62380],{"class":129},"    \u002F\u002F 1. 右按钮业务\n",[123,62382,62383],{"class":125,"line":35364},[123,62384,62385],{"class":129},"    \u002F\u002F 1.1 获取右侧按钮 \n",[123,62387,62388],{"class":125,"line":35384},[123,62389,62390],{"class":129},"    const next = document.querySelector('.next')\n",[123,62392,62393],{"class":125,"line":35400},[123,62394,62395],{"class":129},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[123,62397,62398],{"class":125,"line":35406},[123,62399,62400],{"class":129},"    \u002F\u002F 1.2 注册点击事件\n",[123,62402,62403],{"class":125,"line":35420},[123,62404,232],{"emptyLinePlaceholder":231},[123,62406,62407],{"class":125,"line":35426},[123,62408,62409],{"class":129},"    next.addEventListener('click', function () {\n",[123,62411,62412],{"class":125,"line":35432},[123,62413,62414],{"class":129},"      \u002F\u002F console.log(11)\n",[123,62416,62417],{"class":125,"line":35443},[123,62418,62419],{"class":129},"      i++\n",[123,62421,62422],{"class":125,"line":35449},[123,62423,62424],{"class":129},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[123,62426,62427],{"class":125,"line":35455},[123,62428,62429],{"class":129},"      \u002F\u002F if (i >= 8) {\n",[123,62431,62432],{"class":125,"line":35465},[123,62433,62434],{"class":129},"      \u002F\u002F   i = 0\n",[123,62436,62437],{"class":125,"line":35471},[123,62438,62439],{"class":129},"      \u002F\u002F }\n",[123,62441,62442],{"class":125,"line":35482},[123,62443,62444],{"class":129},"      i = i >= data.length ? 0 : i\n",[123,62446,62447],{"class":125,"line":35488},[123,62448,62449],{"class":129},"      \u002F\u002F 1.3 得到对应的对象\n",[123,62451,62452],{"class":125,"line":35498},[123,62453,62454],{"class":129},"      \u002F\u002F console.log(data[i])\n",[123,62456,62457],{"class":125,"line":35503},[123,62458,62459],{"class":129},"      \u002F\u002F 调用函数\n",[123,62461,62462],{"class":125,"line":35509},[123,62463,62464],{"class":129},"      toggle()\n",[123,62466,62467],{"class":125,"line":35558},[123,62468,35872],{"class":129},[123,62470,62471],{"class":125,"line":35605},[123,62472,232],{"emptyLinePlaceholder":231},[123,62474,62475],{"class":125,"line":35610},[123,62476,62477],{"class":129},"    \u002F\u002F 2. 左侧按钮业务\n",[123,62479,62480],{"class":125,"line":35616},[123,62481,62482],{"class":129},"    \u002F\u002F 2.1 获取左侧按钮 \n",[123,62484,62485],{"class":125,"line":35635},[123,62486,62487],{"class":129},"    const prev = document.querySelector('.prev')\n",[123,62489,62490],{"class":125,"line":35641},[123,62491,62400],{"class":129},[123,62493,62494],{"class":125,"line":35660},[123,62495,62496],{"class":129},"    prev.addEventListener('click', function () {\n",[123,62498,62499],{"class":125,"line":35666},[123,62500,62501],{"class":129},"      i--\n",[123,62503,62504],{"class":125,"line":35672},[123,62505,62506],{"class":129},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[123,62508,62509],{"class":125,"line":35682},[123,62510,62511],{"class":129},"      \u002F\u002F if (i \u003C 0) {\n",[123,62513,62514],{"class":125,"line":35687},[123,62515,62516],{"class":129},"      \u002F\u002F   i = 7\n",[123,62518,62519],{"class":125,"line":35693},[123,62520,62439],{"class":129},[123,62522,62523],{"class":125,"line":35709},[123,62524,62525],{"class":129},"      i = i \u003C 0 ? data.length - 1 : i\n",[123,62527,62528],{"class":125,"line":35754},[123,62529,62449],{"class":129},[123,62531,62532],{"class":125,"line":35760},[123,62533,62454],{"class":129},[123,62535,62536],{"class":125,"line":35766},[123,62537,62459],{"class":129},[123,62539,62540],{"class":125,"line":35772},[123,62541,62464],{"class":129},[123,62543,62544],{"class":125,"line":35783},[123,62545,35872],{"class":129},[123,62547,62548],{"class":125,"line":35789},[123,62549,232],{"emptyLinePlaceholder":231},[123,62551,62552],{"class":125,"line":35795},[123,62553,62554],{"class":129},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[123,62556,62557],{"class":125,"line":35801},[123,62558,62559],{"class":129},"    function toggle() {\n",[123,62561,62562],{"class":125,"line":35819},[123,62563,62564],{"class":129},"      \u002F\u002F 1.4 渲染对应的数据\n",[123,62566,62567],{"class":125,"line":35833},[123,62568,62569],{"class":129},"      img.src = data[i].url\n",[123,62571,62572],{"class":125,"line":35842},[123,62573,62574],{"class":129},"      p.innerHTML = data[i].title\n",[123,62576,62577],{"class":125,"line":35851},[123,62578,62579],{"class":129},"      footer.style.backgroundColor = data[i].color\n",[123,62581,62582],{"class":125,"line":35860},[123,62583,62584],{"class":129},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[123,62586,62587],{"class":125,"line":35869},[123,62588,62589],{"class":129},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[123,62591,62592],{"class":125,"line":35875},[123,62593,62594],{"class":129},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[123,62596,62597],{"class":125,"line":35881},[123,62598,4631],{"class":129},[123,62600,62601],{"class":125,"line":35889},[123,62602,232],{"emptyLinePlaceholder":231},[123,62604,62605],{"class":125,"line":35894},[123,62606,62607],{"class":129},"    \u002F\u002F 3. 自动播放模块\n",[123,62609,62610],{"class":125,"line":35900},[123,62611,62612],{"class":129},"    let timerId = setInterval(function () {\n",[123,62614,62615],{"class":125,"line":35911},[123,62616,62617],{"class":129},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[123,62619,62620],{"class":125,"line":35917},[123,62621,62622],{"class":129},"      next.click()\n",[123,62624,62625],{"class":125,"line":35937},[123,62626,62627],{"class":129},"    }, 1000)\n",[123,62629,62630],{"class":125,"line":35943},[123,62631,232],{"emptyLinePlaceholder":231},[123,62633,62634],{"class":125,"line":35949},[123,62635,62636],{"class":129},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[123,62638,62639],{"class":125,"line":35955},[123,62640,62641],{"class":129},"    const slider = document.querySelector('.slider')\n",[123,62643,62644],{"class":125,"line":35972},[123,62645,62646],{"class":129},"    \u002F\u002F 注册事件\n",[123,62648,62649],{"class":125,"line":35978},[123,62650,62651],{"class":129},"    slider.addEventListener('mouseenter', function () {\n",[123,62653,62654],{"class":125,"line":35984},[123,62655,62656],{"class":129},"      \u002F\u002F 停止定时器\n",[123,62658,62659],{"class":125,"line":35990},[123,62660,62661],{"class":129},"      clearInterval(timerId)\n",[123,62663,62664],{"class":125,"line":35996},[123,62665,35872],{"class":129},[123,62667,62668],{"class":125,"line":36002},[123,62669,232],{"emptyLinePlaceholder":231},[123,62671,62672],{"class":125,"line":36029},[123,62673,62674],{"class":129},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[123,62676,62677],{"class":125,"line":36053},[123,62678,62646],{"class":129},[123,62680,62681],{"class":125,"line":36059},[123,62682,62683],{"class":129},"    slider.addEventListener('mouseleave', function () {\n",[123,62685,62686],{"class":125,"line":36065},[123,62687,62656],{"class":129},[123,62689,62690],{"class":125,"line":36071},[123,62691,62692],{"class":129},"      if (timerId) clearInterval(timerId)\n",[123,62694,62695],{"class":125,"line":36082},[123,62696,62697],{"class":129},"      \u002F\u002F 开启定时器\n",[123,62699,62700],{"class":125,"line":36093},[123,62701,62702],{"class":129},"      timerId = setInterval(function () {\n",[123,62704,62705],{"class":125,"line":36099},[123,62706,62707],{"class":129},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[123,62709,62710],{"class":125,"line":36116},[123,62711,62712],{"class":129},"        next.click()\n",[123,62714,62715],{"class":125,"line":36139},[123,62716,62717],{"class":129},"      }, 1000)\n",[123,62719,62720],{"class":125,"line":36162},[123,62721,35872],{"class":129},[123,62723,62724,62726,62728],{"class":125,"line":36168},[123,62725,54820],{"class":129},[123,62727,54218],{"class":53707},[123,62729,53714],{"class":129},[123,62731,62732,62734,62736],{"class":125,"line":36173},[123,62733,54190],{"class":129},[123,62735,54205],{"class":53707},[123,62737,53714],{"class":129},[123,62739,62740],{"class":125,"line":36182},[123,62741,232],{"emptyLinePlaceholder":231},[123,62743,62744,62746,62748],{"class":125,"line":36192},[123,62745,54190],{"class":129},[123,62747,53042],{"class":53707},[123,62749,53714],{"class":129},[24425,62751,62753],{"id":62752},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62755,62756],{},"小米搜索框案例：",[113,62758,62760],{"className":53040,"code":62759,"language":53042,"meta":118,"style":118},"\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",[120,62761,62762,62772,62786,62790,62798,62812,62832,62852,62864,62872,62878,62888,62898,62910,62914,62918,62925,62929,62940,62944,62948,62955,62966,62979,62993,62997,63001,63010,63022,63034,63048,63061,63074,63092,63103,63107,63111,63120,63137,63141,63145,63152,63162,63172,63183,63196,63208,63224,63235,63247,63251,63255,63263,63274,63291,63303,63315,63326,63330,63334,63345,63356,63360,63368,63372,63380,63384,63392,63407,63430,63445,63476,63503,63530,63557,63584,63611,63638,63647,63655,63663,63668,63688,63708,63713,63718,63736,63741,63751,63756,63770,63775,63780,63797,63806,63818,63822,63830,63838,63842],{"__ignoreMap":118},[123,62763,62764,62766,62768,62770],{"class":125,"line":126},[123,62765,53704],{"class":129},[123,62767,53708],{"class":53707},[123,62769,53711],{"class":337},[123,62771,53714],{"class":129},[123,62773,62774,62776,62778,62780,62782,62784],{"class":125,"line":140},[123,62775,3509],{"class":129},[123,62777,53042],{"class":53707},[123,62779,53723],{"class":337},[123,62781,134],{"class":129},[123,62783,53728],{"class":143},[123,62785,53714],{"class":129},[123,62787,62788],{"class":125,"line":156},[123,62789,232],{"emptyLinePlaceholder":231},[123,62791,62792,62794,62796],{"class":125,"line":168},[123,62793,3509],{"class":129},[123,62795,53741],{"class":53707},[123,62797,53714],{"class":129},[123,62799,62800,62802,62804,62806,62808,62810],{"class":125,"line":268},[123,62801,53748],{"class":129},[123,62803,53751],{"class":53707},[123,62805,53754],{"class":337},[123,62807,134],{"class":129},[123,62809,53759],{"class":143},[123,62811,53714],{"class":129},[123,62813,62814,62816,62818,62820,62822,62824,62826,62828,62830],{"class":125,"line":291},[123,62815,53748],{"class":129},[123,62817,53751],{"class":53707},[123,62819,53770],{"class":337},[123,62821,134],{"class":129},[123,62823,53775],{"class":143},[123,62825,53778],{"class":337},[123,62827,134],{"class":129},[123,62829,53783],{"class":143},[123,62831,53714],{"class":129},[123,62833,62834,62836,62838,62840,62842,62844,62846,62848,62850],{"class":125,"line":300},[123,62835,53748],{"class":129},[123,62837,53751],{"class":53707},[123,62839,17350],{"class":337},[123,62841,134],{"class":129},[123,62843,53798],{"class":143},[123,62845,53778],{"class":337},[123,62847,134],{"class":129},[123,62849,53805],{"class":143},[123,62851,53714],{"class":129},[123,62853,62854,62856,62858,62860,62862],{"class":125,"line":305},[123,62855,53748],{"class":129},[123,62857,642],{"class":53707},[123,62859,53816],{"class":129},[123,62861,642],{"class":53707},[123,62863,53714],{"class":129},[123,62865,62866,62868,62870],{"class":125,"line":316},[123,62867,53748],{"class":129},[123,62869,2526],{"class":53707},[123,62871,53714],{"class":129},[123,62873,62874,62876],{"class":125,"line":673},[123,62875,53833],{"class":53707},[123,62877,137],{"class":129},[123,62879,62880,62882,62884,62886],{"class":125,"line":692},[123,62881,53840],{"class":164},[123,62883,147],{"class":129},[123,62885,2799],{"class":164},[123,62887,3760],{"class":129},[123,62889,62890,62892,62894,62896],{"class":125,"line":713},[123,62891,53851],{"class":164},[123,62893,147],{"class":129},[123,62895,2799],{"class":164},[123,62897,3760],{"class":129},[123,62899,62900,62903,62905,62908],{"class":125,"line":718},[123,62901,62902],{"class":164},"            box-sizing",[123,62904,147],{"class":129},[123,62906,62907],{"class":164},"border-box",[123,62909,3760],{"class":129},[123,62911,62912],{"class":125,"line":1138},[123,62913,4972],{"class":129},[123,62915,62916],{"class":125,"line":1429},[123,62917,232],{"emptyLinePlaceholder":231},[123,62919,62920,62923],{"class":125,"line":1439},[123,62921,62922],{"class":53707},"        ul",[123,62924,137],{"class":129},[123,62926,62927],{"class":125,"line":1444},[123,62928,232],{"emptyLinePlaceholder":231},[123,62930,62931,62934,62936,62938],{"class":125,"line":1453},[123,62932,62933],{"class":164},"            list-style",[123,62935,147],{"class":129},[123,62937,57140],{"class":164},[123,62939,3760],{"class":129},[123,62941,62942],{"class":125,"line":1458},[123,62943,4972],{"class":129},[123,62945,62946],{"class":125,"line":1476},[123,62947,232],{"emptyLinePlaceholder":231},[123,62949,62950,62953],{"class":125,"line":1494},[123,62951,62952],{"class":337},"        .mi",[123,62954,137],{"class":129},[123,62956,62957,62960,62962,62964],{"class":125,"line":1499},[123,62958,62959],{"class":164},"            position",[123,62961,147],{"class":129},[123,62963,57167],{"class":164},[123,62965,3760],{"class":129},[123,62967,62968,62970,62972,62975,62977],{"class":125,"line":1517},[123,62969,53889],{"class":164},[123,62971,147],{"class":129},[123,62973,62974],{"class":164},"223",[123,62976,53897],{"class":133},[123,62978,3760],{"class":129},[123,62980,62981,62983,62985,62987,62989,62991],{"class":125,"line":1534},[123,62982,53840],{"class":164},[123,62984,147],{"class":129},[123,62986,259],{"class":164},[123,62988,53897],{"class":133},[123,62990,53961],{"class":164},[123,62992,3760],{"class":129},[123,62994,62995],{"class":125,"line":1539},[123,62996,4972],{"class":129},[123,62998,62999],{"class":125,"line":2080},[123,63000,232],{"emptyLinePlaceholder":231},[123,63002,63003,63005,63008],{"class":125,"line":2097},[123,63004,62952],{"class":337},[123,63006,63007],{"class":53707}," input",[123,63009,137],{"class":129},[123,63011,63012,63014,63016,63018,63020],{"class":125,"line":2114},[123,63013,53889],{"class":164},[123,63015,147],{"class":129},[123,63017,62974],{"class":164},[123,63019,53897],{"class":133},[123,63021,3760],{"class":129},[123,63023,63024,63026,63028,63030,63032],{"class":125,"line":2125},[123,63025,53904],{"class":164},[123,63027,147],{"class":129},[123,63029,3210],{"class":164},[123,63031,53897],{"class":133},[123,63033,3760],{"class":129},[123,63035,63036,63038,63040,63042,63044,63046],{"class":125,"line":2130},[123,63037,53851],{"class":164},[123,63039,147],{"class":129},[123,63041,2799],{"class":164},[123,63043,4482],{"class":164},[123,63045,53897],{"class":133},[123,63047,3760],{"class":129},[123,63049,63050,63053,63055,63057,63059],{"class":125,"line":5033},[123,63051,63052],{"class":164},"            font-size",[123,63054,147],{"class":129},[123,63056,3152],{"class":164},[123,63058,53897],{"class":133},[123,63060,3760],{"class":129},[123,63062,63063,63066,63068,63070,63072],{"class":125,"line":5041},[123,63064,63065],{"class":164},"            line-height",[123,63067,147],{"class":129},[123,63069,3210],{"class":164},[123,63071,53897],{"class":133},[123,63073,3760],{"class":129},[123,63075,63076,63079,63081,63083,63085,63087,63090],{"class":125,"line":5046},[123,63077,63078],{"class":164},"            border",[123,63080,147],{"class":129},[123,63082,2825],{"class":164},[123,63084,53897],{"class":133},[123,63086,53926],{"class":164},[123,63088,63089],{"class":164}," #e0e0e0",[123,63091,3760],{"class":129},[123,63093,63094,63097,63099,63101],{"class":125,"line":5052},[123,63095,63096],{"class":164},"            outline",[123,63098,147],{"class":129},[123,63100,57140],{"class":164},[123,63102,3760],{"class":129},[123,63104,63105],{"class":125,"line":5058},[123,63106,4972],{"class":129},[123,63108,63109],{"class":125,"line":5063},[123,63110,232],{"emptyLinePlaceholder":231},[123,63112,63113,63115,63118],{"class":125,"line":10380},[123,63114,62952],{"class":337},[123,63116,63117],{"class":337}," .search",[123,63119,137],{"class":129},[123,63121,63122,63124,63126,63128,63130,63132,63135],{"class":125,"line":10404},[123,63123,63078],{"class":164},[123,63125,147],{"class":129},[123,63127,2825],{"class":164},[123,63129,53897],{"class":133},[123,63131,53926],{"class":164},[123,63133,63134],{"class":164}," #ff6700",[123,63136,3760],{"class":129},[123,63138,63139],{"class":125,"line":10409},[123,63140,4972],{"class":129},[123,63142,63143],{"class":125,"line":10415},[123,63144,232],{"emptyLinePlaceholder":231},[123,63146,63147,63150],{"class":125,"line":10442},[123,63148,63149],{"class":337},"        .result-list",[123,63151,137],{"class":129},[123,63153,63154,63156,63158,63160],{"class":125,"line":10447},[123,63155,53877],{"class":164},[123,63157,147],{"class":129},[123,63159,57140],{"class":164},[123,63161,3760],{"class":129},[123,63163,63164,63166,63168,63170],{"class":125,"line":10453},[123,63165,62959],{"class":164},[123,63167,147],{"class":129},[123,63169,57234],{"class":164},[123,63171,3760],{"class":129},[123,63173,63174,63177,63179,63181],{"class":125,"line":10465},[123,63175,63176],{"class":164},"            left",[123,63178,147],{"class":129},[123,63180,2799],{"class":164},[123,63182,3760],{"class":129},[123,63184,63185,63188,63190,63192,63194],{"class":125,"line":10477},[123,63186,63187],{"class":164},"            top",[123,63189,147],{"class":129},[123,63191,3210],{"class":164},[123,63193,53897],{"class":133},[123,63195,3760],{"class":129},[123,63197,63198,63200,63202,63204,63206],{"class":125,"line":10489},[123,63199,53889],{"class":164},[123,63201,147],{"class":129},[123,63203,62974],{"class":164},[123,63205,53897],{"class":133},[123,63207,3760],{"class":129},[123,63209,63210,63212,63214,63216,63218,63220,63222],{"class":125,"line":12148},[123,63211,63078],{"class":164},[123,63213,147],{"class":129},[123,63215,2825],{"class":164},[123,63217,53897],{"class":133},[123,63219,53926],{"class":164},[123,63221,63134],{"class":164},[123,63223,3760],{"class":129},[123,63225,63226,63229,63231,63233],{"class":125,"line":12173},[123,63227,63228],{"class":164},"            border-top",[123,63230,147],{"class":129},[123,63232,2799],{"class":164},[123,63234,3760],{"class":129},[123,63236,63237,63240,63242,63245],{"class":125,"line":12196},[123,63238,63239],{"class":164},"            background",[123,63241,147],{"class":129},[123,63243,63244],{"class":164},"#fff",[123,63246,3760],{"class":129},[123,63248,63249],{"class":125,"line":12220},[123,63250,4972],{"class":129},[123,63252,63253],{"class":125,"line":12225},[123,63254,232],{"emptyLinePlaceholder":231},[123,63256,63257,63259,63261],{"class":125,"line":12230},[123,63258,63149],{"class":337},[123,63260,3865],{"class":53707},[123,63262,137],{"class":129},[123,63264,63265,63267,63269,63272],{"class":125,"line":12235},[123,63266,53877],{"class":164},[123,63268,147],{"class":129},[123,63270,63271],{"class":164},"block",[123,63273,3760],{"class":129},[123,63275,63276,63278,63280,63282,63284,63287,63289],{"class":125,"line":12244},[123,63277,53851],{"class":164},[123,63279,147],{"class":129},[123,63281,2951],{"class":164},[123,63283,53897],{"class":133},[123,63285,63286],{"class":164}," 15",[123,63288,53897],{"class":133},[123,63290,3760],{"class":129},[123,63292,63293,63295,63297,63299,63301],{"class":125,"line":12249},[123,63294,63052],{"class":164},[123,63296,147],{"class":129},[123,63298,2215],{"class":164},[123,63300,53897],{"class":133},[123,63302,3760],{"class":129},[123,63304,63305,63308,63310,63313],{"class":125,"line":12255},[123,63306,63307],{"class":164},"            color",[123,63309,147],{"class":129},[123,63311,63312],{"class":164},"#424242",[123,63314,3760],{"class":129},[123,63316,63317,63320,63322,63324],{"class":125,"line":12276},[123,63318,63319],{"class":164},"            text-decoration",[123,63321,147],{"class":129},[123,63323,57140],{"class":164},[123,63325,3760],{"class":129},[123,63327,63328],{"class":125,"line":12282},[123,63329,4972],{"class":129},[123,63331,63332],{"class":125,"line":12296},[123,63333,232],{"emptyLinePlaceholder":231},[123,63335,63336,63338,63340,63343],{"class":125,"line":12302},[123,63337,63149],{"class":337},[123,63339,3865],{"class":53707},[123,63341,63342],{"class":337},":hover",[123,63344,137],{"class":129},[123,63346,63347,63349,63351,63354],{"class":125,"line":12329},[123,63348,54045],{"class":164},[123,63350,147],{"class":129},[123,63352,63353],{"class":164},"#eee",[123,63355,3760],{"class":129},[123,63357,63358],{"class":125,"line":12338},[123,63359,4972],{"class":129},[123,63361,63362,63364,63366],{"class":125,"line":12344},[123,63363,54181],{"class":129},[123,63365,2526],{"class":53707},[123,63367,53714],{"class":129},[123,63369,63370],{"class":125,"line":12352},[123,63371,232],{"emptyLinePlaceholder":231},[123,63373,63374,63376,63378],{"class":125,"line":12357},[123,63375,54190],{"class":129},[123,63377,53741],{"class":53707},[123,63379,53714],{"class":129},[123,63381,63382],{"class":125,"line":19032},[123,63383,232],{"emptyLinePlaceholder":231},[123,63385,63386,63388,63390],{"class":125,"line":19038},[123,63387,3509],{"class":129},[123,63389,54205],{"class":53707},[123,63391,53714],{"class":129},[123,63393,63394,63396,63398,63400,63402,63405],{"class":125,"line":19061},[123,63395,53748],{"class":129},[123,63397,54016],{"class":53707},[123,63399,55889],{"class":337},[123,63401,134],{"class":129},[123,63403,63404],{"class":143},"\"mi\"",[123,63406,53714],{"class":129},[123,63408,63409,63411,63413,63415,63417,63420,63423,63425,63428],{"class":125,"line":19067},[123,63410,57705],{"class":129},[123,63412,56224],{"class":53707},[123,63414,56227],{"class":337},[123,63416,134],{"class":129},[123,63418,63419],{"class":143},"\"search\"",[123,63421,63422],{"class":337}," placeholder",[123,63424,134],{"class":129},[123,63426,63427],{"class":143},"\"小米笔记本\"",[123,63429,53714],{"class":129},[123,63431,63432,63434,63436,63438,63440,63443],{"class":125,"line":19090},[123,63433,57705],{"class":129},[123,63435,3606],{"class":53707},[123,63437,55889],{"class":337},[123,63439,134],{"class":129},[123,63441,63442],{"class":143},"\"result-list\"",[123,63444,53714],{"class":129},[123,63446,63447,63450,63452,63455,63457,63460,63462,63465,63468,63470,63472,63474],{"class":125,"line":19104},[123,63448,63449],{"class":129},"            \u003C",[123,63451,29],{"class":53707},[123,63453,63454],{"class":129},">\u003C",[123,63456,2846],{"class":53707},[123,63458,63459],{"class":337}," href",[123,63461,134],{"class":129},[123,63463,63464],{"class":143},"\"#\"",[123,63466,63467],{"class":129},">全部商品\u003C\u002F",[123,63469,2846],{"class":53707},[123,63471,57717],{"class":129},[123,63473,29],{"class":53707},[123,63475,53714],{"class":129},[123,63477,63478,63480,63482,63484,63486,63488,63490,63492,63495,63497,63499,63501],{"class":125,"line":19124},[123,63479,63449],{"class":129},[123,63481,29],{"class":53707},[123,63483,63454],{"class":129},[123,63485,2846],{"class":53707},[123,63487,63459],{"class":337},[123,63489,134],{"class":129},[123,63491,63464],{"class":143},[123,63493,63494],{"class":129},">小米11\u003C\u002F",[123,63496,2846],{"class":53707},[123,63498,57717],{"class":129},[123,63500,29],{"class":53707},[123,63502,53714],{"class":129},[123,63504,63505,63507,63509,63511,63513,63515,63517,63519,63522,63524,63526,63528],{"class":125,"line":19130},[123,63506,63449],{"class":129},[123,63508,29],{"class":53707},[123,63510,63454],{"class":129},[123,63512,2846],{"class":53707},[123,63514,63459],{"class":337},[123,63516,134],{"class":129},[123,63518,63464],{"class":143},[123,63520,63521],{"class":129},">小米10S\u003C\u002F",[123,63523,2846],{"class":53707},[123,63525,57717],{"class":129},[123,63527,29],{"class":53707},[123,63529,53714],{"class":129},[123,63531,63532,63534,63536,63538,63540,63542,63544,63546,63549,63551,63553,63555],{"class":125,"line":19141},[123,63533,63449],{"class":129},[123,63535,29],{"class":53707},[123,63537,63454],{"class":129},[123,63539,2846],{"class":53707},[123,63541,63459],{"class":337},[123,63543,134],{"class":129},[123,63545,63464],{"class":143},[123,63547,63548],{"class":129},">小米笔记本\u003C\u002F",[123,63550,2846],{"class":53707},[123,63552,57717],{"class":129},[123,63554,29],{"class":53707},[123,63556,53714],{"class":129},[123,63558,63559,63561,63563,63565,63567,63569,63571,63573,63576,63578,63580,63582],{"class":125,"line":19164},[123,63560,63449],{"class":129},[123,63562,29],{"class":53707},[123,63564,63454],{"class":129},[123,63566,2846],{"class":53707},[123,63568,63459],{"class":337},[123,63570,134],{"class":129},[123,63572,63464],{"class":143},[123,63574,63575],{"class":129},">小米手机\u003C\u002F",[123,63577,2846],{"class":53707},[123,63579,57717],{"class":129},[123,63581,29],{"class":53707},[123,63583,53714],{"class":129},[123,63585,63586,63588,63590,63592,63594,63596,63598,63600,63603,63605,63607,63609],{"class":125,"line":19186},[123,63587,63449],{"class":129},[123,63589,29],{"class":53707},[123,63591,63454],{"class":129},[123,63593,2846],{"class":53707},[123,63595,63459],{"class":337},[123,63597,134],{"class":129},[123,63599,63464],{"class":143},[123,63601,63602],{"class":129},">黑鲨4\u003C\u002F",[123,63604,2846],{"class":53707},[123,63606,57717],{"class":129},[123,63608,29],{"class":53707},[123,63610,53714],{"class":129},[123,63612,63613,63615,63617,63619,63621,63623,63625,63627,63630,63632,63634,63636],{"class":125,"line":19191},[123,63614,63449],{"class":129},[123,63616,29],{"class":53707},[123,63618,63454],{"class":129},[123,63620,2846],{"class":53707},[123,63622,63459],{"class":337},[123,63624,134],{"class":129},[123,63626,63464],{"class":143},[123,63628,63629],{"class":129},">空调\u003C\u002F",[123,63631,2846],{"class":53707},[123,63633,57717],{"class":129},[123,63635,29],{"class":53707},[123,63637,53714],{"class":129},[123,63639,63640,63643,63645],{"class":125,"line":19197},[123,63641,63642],{"class":129},"        \u003C\u002F",[123,63644,3606],{"class":53707},[123,63646,53714],{"class":129},[123,63648,63649,63651,63653],{"class":125,"line":19211},[123,63650,54181],{"class":129},[123,63652,54016],{"class":53707},[123,63654,53714],{"class":129},[123,63656,63657,63659,63661],{"class":125,"line":19224},[123,63658,53748],{"class":129},[123,63660,54218],{"class":53707},[123,63662,53714],{"class":129},[123,63664,63665],{"class":125,"line":19229},[123,63666,63667],{"class":2673},"        \u002F\u002F 1. 获取元素\n",[123,63669,63670,63673,63675,63677,63679,63681,63683,63686],{"class":125,"line":19243},[123,63671,63672],{"class":133},"        const",[123,63674,63007],{"class":164},[123,63676,15995],{"class":133},[123,63678,56799],{"class":129},[123,63680,56802],{"class":337},[123,63682,1315],{"class":129},[123,63684,63685],{"class":143},"'[type=search]'",[123,63687,288],{"class":129},[123,63689,63690,63692,63695,63697,63699,63701,63703,63706],{"class":125,"line":19248},[123,63691,63672],{"class":133},[123,63693,63694],{"class":164}," ul",[123,63696,15995],{"class":133},[123,63698,56799],{"class":129},[123,63700,56802],{"class":337},[123,63702,1315],{"class":129},[123,63704,63705],{"class":143},"'.result-list'",[123,63707,288],{"class":129},[123,63709,63710],{"class":125,"line":19254},[123,63711,63712],{"class":2673},"        \u002F\u002F console.log(input)\n",[123,63714,63715],{"class":125,"line":19259},[123,63716,63717],{"class":2673},"        \u002F\u002F 2. 监听事件 获得焦点\n",[123,63719,63720,63723,63725,63727,63730,63732,63734],{"class":125,"line":19273},[123,63721,63722],{"class":129},"        input.",[123,63724,60215],{"class":337},[123,63726,1315],{"class":129},[123,63728,63729],{"class":143},"'focus'",[123,63731,251],{"class":129},[123,63733,56852],{"class":133},[123,63735,56855],{"class":129},[123,63737,63738],{"class":125,"line":19278},[123,63739,63740],{"class":2673},"            \u002F\u002F ul显示\n",[123,63742,63743,63746,63748],{"class":125,"line":19283},[123,63744,63745],{"class":129},"            ul.style.display ",[123,63747,134],{"class":133},[123,63749,63750],{"class":143}," 'block'\n",[123,63752,63753],{"class":125,"line":19297},[123,63754,63755],{"class":2673},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[123,63757,63758,63761,63763,63765,63768],{"class":125,"line":19309},[123,63759,63760],{"class":129},"            input.classList.",[123,63762,7767],{"class":337},[123,63764,1315],{"class":129},[123,63766,63767],{"class":143},"'search'",[123,63769,288],{"class":129},[123,63771,63772],{"class":125,"line":19314},[123,63773,63774],{"class":129},"        })\n",[123,63776,63777],{"class":125,"line":19327},[123,63778,63779],{"class":2673},"        \u002F\u002F 3. 监听事件 失去焦点\n",[123,63781,63782,63784,63786,63788,63791,63793,63795],{"class":125,"line":19332},[123,63783,63722],{"class":129},[123,63785,60215],{"class":337},[123,63787,1315],{"class":129},[123,63789,63790],{"class":143},"'blur'",[123,63792,251],{"class":129},[123,63794,56852],{"class":133},[123,63796,56855],{"class":129},[123,63798,63799,63801,63803],{"class":125,"line":19337},[123,63800,63745],{"class":129},[123,63802,134],{"class":133},[123,63804,63805],{"class":143}," 'none'\n",[123,63807,63808,63810,63812,63814,63816],{"class":125,"line":19342},[123,63809,63760],{"class":129},[123,63811,59408],{"class":337},[123,63813,1315],{"class":129},[123,63815,63767],{"class":143},[123,63817,288],{"class":129},[123,63819,63820],{"class":125,"line":19355},[123,63821,63774],{"class":129},[123,63823,63824,63826,63828],{"class":125,"line":19360},[123,63825,54181],{"class":129},[123,63827,54218],{"class":53707},[123,63829,53714],{"class":129},[123,63831,63832,63834,63836],{"class":125,"line":35045},[123,63833,54190],{"class":129},[123,63835,54205],{"class":53707},[123,63837,53714],{"class":129},[123,63839,63840],{"class":125,"line":35051},[123,63841,232],{"emptyLinePlaceholder":231},[123,63843,63844,63846,63848],{"class":125,"line":35057},[123,63845,54190],{"class":129},[123,63847,53042],{"class":53707},[123,63849,53714],{"class":129},[24425,63851,63853],{"id":63852},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63855,63856],{},"评论字数统计案例",[19,63858,63859],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63861,63862],{},"牢记focus伪类选择器",[53751,63864],{"charSet":63865},"UTF-8",[53751,63867],{"name":63868,"content":63869},"viewport","width=device-width, initial-scale=1.0",[642,63871,63872],{},"Document",[2526,63874,63875],{},"\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",[56224,63877],{"type":7621},[3606,63879,63880,63883],{},[29,63881,63882],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63884,63885],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[113,63887,63889],{"className":53040,"code":63888,"language":53042,"meta":118,"style":118},"\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",[120,63890,63891,63901,63915,63919,63927,63941,63961,63981,63994,64002,64009,64022,64036,64046,64056,64060,64064,64071,64083,64095,64107,64119,64148,64161,64165,64169,64178,64189,64201,64212,64223,64235,64246,64258,64274,64286,64290,64294,64305,64316,64326,64338,64342,64346,64354,64365,64375,64386,64398,64411,64423,64435,64439,64443,64452,64464,64475,64488,64499,64513,64517,64521,64528,64540,64552,64562,64566,64570,64579,64591,64601,64605,64609,64620,64630,64649,64662,64666,64670,64680,64690,64694,64698,64709,64720,64732,64744,64748,64752,64763,64774,64788,64792,64796,64807,64817,64829,64833,64841,64849,64853,64861,64876,64895,64935,64948,64956,64970,64990,64998,65013,65036,65054,65069,65088,65108,65128,65136,65144,65152,65160,65180,65200,65205,65222,65231,65235,65240,65256,65264,65268,65273,65290,65295,65320,65324,65328,65333,65338,65346,65354,65358],{"__ignoreMap":118},[123,63892,63893,63895,63897,63899],{"class":125,"line":126},[123,63894,53704],{"class":129},[123,63896,53708],{"class":53707},[123,63898,53711],{"class":337},[123,63900,53714],{"class":129},[123,63902,63903,63905,63907,63909,63911,63913],{"class":125,"line":140},[123,63904,3509],{"class":129},[123,63906,53042],{"class":53707},[123,63908,53723],{"class":337},[123,63910,134],{"class":129},[123,63912,53728],{"class":143},[123,63914,53714],{"class":129},[123,63916,63917],{"class":125,"line":156},[123,63918,232],{"emptyLinePlaceholder":231},[123,63920,63921,63923,63925],{"class":125,"line":168},[123,63922,3509],{"class":129},[123,63924,53741],{"class":53707},[123,63926,53714],{"class":129},[123,63928,63929,63931,63933,63935,63937,63939],{"class":125,"line":268},[123,63930,54548],{"class":129},[123,63932,53751],{"class":53707},[123,63934,53754],{"class":337},[123,63936,134],{"class":129},[123,63938,53759],{"class":143},[123,63940,53714],{"class":129},[123,63942,63943,63945,63947,63949,63951,63953,63955,63957,63959],{"class":125,"line":291},[123,63944,54548],{"class":129},[123,63946,53751],{"class":53707},[123,63948,53770],{"class":337},[123,63950,134],{"class":129},[123,63952,53775],{"class":143},[123,63954,53778],{"class":337},[123,63956,134],{"class":129},[123,63958,53783],{"class":143},[123,63960,53714],{"class":129},[123,63962,63963,63965,63967,63969,63971,63973,63975,63977,63979],{"class":125,"line":300},[123,63964,54548],{"class":129},[123,63966,53751],{"class":53707},[123,63968,17350],{"class":337},[123,63970,134],{"class":129},[123,63972,53798],{"class":143},[123,63974,53778],{"class":337},[123,63976,134],{"class":129},[123,63978,53805],{"class":143},[123,63980,53714],{"class":129},[123,63982,63983,63985,63987,63990,63992],{"class":125,"line":305},[123,63984,54548],{"class":129},[123,63986,642],{"class":53707},[123,63988,63989],{"class":129},">评论回车发布\u003C\u002F",[123,63991,642],{"class":53707},[123,63993,53714],{"class":129},[123,63995,63996,63998,64000],{"class":125,"line":316},[123,63997,54548],{"class":129},[123,63999,2526],{"class":53707},[123,64001,53714],{"class":129},[123,64003,64004,64007],{"class":125,"line":673},[123,64005,64006],{"class":337},"    .wrapper",[123,64008,137],{"class":129},[123,64010,64011,64014,64016,64018,64020],{"class":125,"line":692},[123,64012,64013],{"class":164},"      min-width",[123,64015,147],{"class":129},[123,64017,6426],{"class":164},[123,64019,53897],{"class":133},[123,64021,3760],{"class":129},[123,64023,64024,64027,64029,64032,64034],{"class":125,"line":713},[123,64025,64026],{"class":164},"      max-width",[123,64028,147],{"class":129},[123,64030,64031],{"class":164},"800",[123,64033,53897],{"class":133},[123,64035,3760],{"class":129},[123,64037,64038,64040,64042,64044],{"class":125,"line":718},[123,64039,57412],{"class":164},[123,64041,147],{"class":129},[123,64043,53882],{"class":164},[123,64045,3760],{"class":129},[123,64047,64048,64050,64052,64054],{"class":125,"line":1138},[123,64049,57423],{"class":164},[123,64051,147],{"class":129},[123,64053,53985],{"class":164},[123,64055,3760],{"class":129},[123,64057,64058],{"class":125,"line":1429},[123,64059,4631],{"class":129},[123,64061,64062],{"class":125,"line":1439},[123,64063,232],{"emptyLinePlaceholder":231},[123,64065,64066,64069],{"class":125,"line":1444},[123,64067,64068],{"class":337},"    .avatar",[123,64070,137],{"class":129},[123,64072,64073,64075,64077,64079,64081],{"class":125,"line":1453},[123,64074,57174],{"class":164},[123,64076,147],{"class":129},[123,64078,3210],{"class":164},[123,64080,53897],{"class":133},[123,64082,3760],{"class":129},[123,64084,64085,64087,64089,64091,64093],{"class":125,"line":1458},[123,64086,57188],{"class":164},[123,64088,147],{"class":129},[123,64090,3210],{"class":164},[123,64092,53897],{"class":133},[123,64094,3760],{"class":129},[123,64096,64097,64099,64101,64103,64105],{"class":125,"line":1476},[123,64098,57537],{"class":164},[123,64100,147],{"class":129},[123,64102,3258],{"class":164},[123,64104,2935],{"class":133},[123,64106,3760],{"class":129},[123,64108,64109,64112,64114,64117],{"class":125,"line":1494},[123,64110,64111],{"class":164},"      overflow",[123,64113,147],{"class":129},[123,64115,64116],{"class":164},"hidden",[123,64118,3760],{"class":129},[123,64120,64121,64124,64126,64129,64131,64134,64136,64139,64141,64143,64146],{"class":125,"line":1499},[123,64122,64123],{"class":164},"      background",[123,64125,147],{"class":129},[123,64127,64128],{"class":164},"url",[123,64130,1315],{"class":129},[123,64132,64133],{"class":279},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[123,64135,1336],{"class":129},[123,64137,64138],{"class":164},"no-repeat",[123,64140,19572],{"class":164},[123,64142,27400],{"class":129},[123,64144,64145],{"class":164},"cover",[123,64147,3760],{"class":129},[123,64149,64150,64153,64155,64157,64159],{"class":125,"line":1517},[123,64151,64152],{"class":164},"      margin-right",[123,64154,147],{"class":129},[123,64156,3302],{"class":164},[123,64158,53897],{"class":133},[123,64160,3760],{"class":129},[123,64162,64163],{"class":125,"line":1534},[123,64164,4631],{"class":129},[123,64166,64167],{"class":125,"line":1539},[123,64168,232],{"emptyLinePlaceholder":231},[123,64170,64171,64173,64176],{"class":125,"line":2080},[123,64172,64006],{"class":337},[123,64174,64175],{"class":53707}," textarea",[123,64177,137],{"class":129},[123,64179,64180,64183,64185,64187],{"class":125,"line":2097},[123,64181,64182],{"class":164},"      outline",[123,64184,147],{"class":129},[123,64186,57140],{"class":164},[123,64188,3760],{"class":129},[123,64190,64191,64194,64196,64199],{"class":125,"line":2114},[123,64192,64193],{"class":164},"      border-color",[123,64195,147],{"class":129},[123,64197,64198],{"class":164},"transparent",[123,64200,3760],{"class":129},[123,64202,64203,64206,64208,64210],{"class":125,"line":2125},[123,64204,64205],{"class":164},"      resize",[123,64207,147],{"class":129},[123,64209,57140],{"class":164},[123,64211,3760],{"class":129},[123,64213,64214,64216,64218,64221],{"class":125,"line":2130},[123,64215,64123],{"class":164},[123,64217,147],{"class":129},[123,64219,64220],{"class":164},"#f5f5f5",[123,64222,3760],{"class":129},[123,64224,64225,64227,64229,64231,64233],{"class":125,"line":5033},[123,64226,57537],{"class":164},[123,64228,147],{"class":129},[123,64230,2901],{"class":164},[123,64232,53897],{"class":133},[123,64234,3760],{"class":129},[123,64236,64237,64240,64242,64244],{"class":125,"line":5041},[123,64238,64239],{"class":164},"      flex",[123,64241,147],{"class":129},[123,64243,2825],{"class":164},[123,64245,3760],{"class":129},[123,64247,64248,64250,64252,64254,64256],{"class":125,"line":5046},[123,64249,57098],{"class":164},[123,64251,147],{"class":129},[123,64253,2193],{"class":164},[123,64255,53897],{"class":133},[123,64257,3760],{"class":129},[123,64259,64260,64263,64265,64267,64270,64272],{"class":125,"line":5052},[123,64261,64262],{"class":164},"      transition",[123,64264,147],{"class":129},[123,64266,30542],{"class":164},[123,64268,64269],{"class":164}," 0.5",[123,64271,3297],{"class":133},[123,64273,3760],{"class":129},[123,64275,64276,64278,64280,64282,64284],{"class":125,"line":5058},[123,64277,57188],{"class":164},[123,64279,147],{"class":129},[123,64281,3550],{"class":164},[123,64283,53897],{"class":133},[123,64285,3760],{"class":129},[123,64287,64288],{"class":125,"line":5063},[123,64289,4631],{"class":129},[123,64291,64292],{"class":125,"line":10380},[123,64293,232],{"emptyLinePlaceholder":231},[123,64295,64296,64298,64300,64303],{"class":125,"line":10404},[123,64297,64006],{"class":337},[123,64299,64175],{"class":53707},[123,64301,64302],{"class":337},":focus",[123,64304,137],{"class":129},[123,64306,64307,64309,64311,64314],{"class":125,"line":10409},[123,64308,64193],{"class":164},[123,64310,147],{"class":129},[123,64312,64313],{"class":164},"#e4e4e4",[123,64315,3760],{"class":129},[123,64317,64318,64320,64322,64324],{"class":125,"line":10415},[123,64319,64123],{"class":164},[123,64321,147],{"class":129},[123,64323,63244],{"class":164},[123,64325,3760],{"class":129},[123,64327,64328,64330,64332,64334,64336],{"class":125,"line":10442},[123,64329,57188],{"class":164},[123,64331,147],{"class":129},[123,64333,3258],{"class":164},[123,64335,53897],{"class":133},[123,64337,3760],{"class":129},[123,64339,64340],{"class":125,"line":10447},[123,64341,4631],{"class":129},[123,64343,64344],{"class":125,"line":10453},[123,64345,232],{"emptyLinePlaceholder":231},[123,64347,64348,64350,64352],{"class":125,"line":10465},[123,64349,64006],{"class":337},[123,64351,59869],{"class":53707},[123,64353,137],{"class":129},[123,64355,64356,64358,64360,64363],{"class":125,"line":10477},[123,64357,64123],{"class":164},[123,64359,147],{"class":129},[123,64361,64362],{"class":164},"#00aeec",[123,64364,3760],{"class":129},[123,64366,64367,64369,64371,64373],{"class":125,"line":10489},[123,64368,59818],{"class":164},[123,64370,147],{"class":129},[123,64372,63244],{"class":164},[123,64374,3760],{"class":129},[123,64376,64377,64380,64382,64384],{"class":125,"line":12148},[123,64378,64379],{"class":164},"      border",[123,64381,147],{"class":129},[123,64383,57140],{"class":164},[123,64385,3760],{"class":129},[123,64387,64388,64390,64392,64394,64396],{"class":125,"line":12173},[123,64389,57537],{"class":164},[123,64391,147],{"class":129},[123,64393,2901],{"class":164},[123,64395,53897],{"class":133},[123,64397,3760],{"class":129},[123,64399,64400,64403,64405,64407,64409],{"class":125,"line":12196},[123,64401,64402],{"class":164},"      margin-left",[123,64404,147],{"class":129},[123,64406,2193],{"class":164},[123,64408,53897],{"class":133},[123,64410,3760],{"class":129},[123,64412,64413,64415,64417,64419,64421],{"class":125,"line":12220},[123,64414,57174],{"class":164},[123,64416,147],{"class":129},[123,64418,2963],{"class":164},[123,64420,53897],{"class":133},[123,64422,3760],{"class":129},[123,64424,64425,64428,64430,64433],{"class":125,"line":12225},[123,64426,64427],{"class":164},"      cursor",[123,64429,147],{"class":129},[123,64431,64432],{"class":164},"pointer",[123,64434,3760],{"class":129},[123,64436,64437],{"class":125,"line":12230},[123,64438,4631],{"class":129},[123,64440,64441],{"class":125,"line":12235},[123,64442,232],{"emptyLinePlaceholder":231},[123,64444,64445,64447,64450],{"class":125,"line":12244},[123,64446,64006],{"class":337},[123,64448,64449],{"class":337}," .total",[123,64451,137],{"class":129},[123,64453,64454,64456,64458,64460,64462],{"class":125,"line":12249},[123,64455,64152],{"class":164},[123,64457,147],{"class":129},[123,64459,1068],{"class":164},[123,64461,53897],{"class":133},[123,64463,3760],{"class":129},[123,64465,64466,64468,64470,64473],{"class":125,"line":12255},[123,64467,59818],{"class":164},[123,64469,147],{"class":129},[123,64471,64472],{"class":164},"#999",[123,64474,3760],{"class":129},[123,64476,64477,64480,64482,64484,64486],{"class":125,"line":12276},[123,64478,64479],{"class":164},"      margin-top",[123,64481,147],{"class":129},[123,64483,2926],{"class":164},[123,64485,53897],{"class":133},[123,64487,3760],{"class":129},[123,64489,64490,64493,64495,64497],{"class":125,"line":12282},[123,64491,64492],{"class":164},"      opacity",[123,64494,147],{"class":129},[123,64496,2799],{"class":164},[123,64498,3760],{"class":129},[123,64500,64501,64503,64505,64507,64509,64511],{"class":125,"line":12296},[123,64502,64262],{"class":164},[123,64504,147],{"class":129},[123,64506,30542],{"class":164},[123,64508,64269],{"class":164},[123,64510,3297],{"class":133},[123,64512,3760],{"class":129},[123,64514,64515],{"class":125,"line":12302},[123,64516,4631],{"class":129},[123,64518,64519],{"class":125,"line":12329},[123,64520,232],{"emptyLinePlaceholder":231},[123,64522,64523,64526],{"class":125,"line":12338},[123,64524,64525],{"class":337},"    .list",[123,64527,137],{"class":129},[123,64529,64530,64532,64534,64536,64538],{"class":125,"line":12344},[123,64531,64013],{"class":164},[123,64533,147],{"class":129},[123,64535,6426],{"class":164},[123,64537,53897],{"class":133},[123,64539,3760],{"class":129},[123,64541,64542,64544,64546,64548,64550],{"class":125,"line":12352},[123,64543,64026],{"class":164},[123,64545,147],{"class":129},[123,64547,64031],{"class":164},[123,64549,53897],{"class":133},[123,64551,3760],{"class":129},[123,64553,64554,64556,64558,64560],{"class":125,"line":12357},[123,64555,57412],{"class":164},[123,64557,147],{"class":129},[123,64559,53882],{"class":164},[123,64561,3760],{"class":129},[123,64563,64564],{"class":125,"line":19032},[123,64565,4631],{"class":129},[123,64567,64568],{"class":125,"line":19038},[123,64569,232],{"emptyLinePlaceholder":231},[123,64571,64572,64574,64577],{"class":125,"line":19061},[123,64573,64525],{"class":337},[123,64575,64576],{"class":337}," .item",[123,64578,137],{"class":129},[123,64580,64581,64583,64585,64587,64589],{"class":125,"line":19067},[123,64582,57174],{"class":164},[123,64584,147],{"class":129},[123,64586,259],{"class":164},[123,64588,2935],{"class":133},[123,64590,3760],{"class":129},[123,64592,64593,64595,64597,64599],{"class":125,"line":19090},[123,64594,57412],{"class":164},[123,64596,147],{"class":129},[123,64598,53882],{"class":164},[123,64600,3760],{"class":129},[123,64602,64603],{"class":125,"line":19104},[123,64604,4631],{"class":129},[123,64606,64607],{"class":125,"line":19124},[123,64608,232],{"emptyLinePlaceholder":231},[123,64610,64611,64613,64615,64618],{"class":125,"line":19130},[123,64612,64525],{"class":337},[123,64614,64576],{"class":337},[123,64616,64617],{"class":337}," .info",[123,64619,137],{"class":129},[123,64621,64622,64624,64626,64628],{"class":125,"line":19141},[123,64623,64239],{"class":164},[123,64625,147],{"class":129},[123,64627,2825],{"class":164},[123,64629,3760],{"class":129},[123,64631,64632,64635,64637,64639,64641,64644,64647],{"class":125,"line":19164},[123,64633,64634],{"class":164},"      border-bottom",[123,64636,147],{"class":129},[123,64638,2825],{"class":164},[123,64640,53897],{"class":133},[123,64642,64643],{"class":164}," dashed",[123,64645,64646],{"class":164}," #e4e4e4",[123,64648,3760],{"class":129},[123,64650,64651,64654,64656,64658,64660],{"class":125,"line":19186},[123,64652,64653],{"class":164},"      padding-bottom",[123,64655,147],{"class":129},[123,64657,2193],{"class":164},[123,64659,53897],{"class":133},[123,64661,3760],{"class":129},[123,64663,64664],{"class":125,"line":19191},[123,64665,4631],{"class":129},[123,64667,64668],{"class":125,"line":19197},[123,64669,232],{"emptyLinePlaceholder":231},[123,64671,64672,64674,64676,64678],{"class":125,"line":19211},[123,64673,64525],{"class":337},[123,64675,64576],{"class":337},[123,64677,9258],{"class":53707},[123,64679,137],{"class":129},[123,64681,64682,64684,64686,64688],{"class":125,"line":19224},[123,64683,57109],{"class":164},[123,64685,147],{"class":129},[123,64687,2799],{"class":164},[123,64689,3760],{"class":129},[123,64691,64692],{"class":125,"line":19229},[123,64693,4631],{"class":129},[123,64695,64696],{"class":125,"line":19243},[123,64697,232],{"emptyLinePlaceholder":231},[123,64699,64700,64702,64704,64707],{"class":125,"line":19248},[123,64701,64525],{"class":337},[123,64703,64576],{"class":337},[123,64705,64706],{"class":337}," .name",[123,64708,137],{"class":129},[123,64710,64711,64713,64715,64718],{"class":125,"line":19254},[123,64712,59818],{"class":164},[123,64714,147],{"class":129},[123,64716,64717],{"class":164},"#FB7299",[123,64719,3760],{"class":129},[123,64721,64722,64724,64726,64728,64730],{"class":125,"line":19259},[123,64723,57325],{"class":164},[123,64725,147],{"class":129},[123,64727,3152],{"class":164},[123,64729,53897],{"class":133},[123,64731,3760],{"class":129},[123,64733,64734,64737,64739,64742],{"class":125,"line":19273},[123,64735,64736],{"class":164},"      font-weight",[123,64738,147],{"class":129},[123,64740,64741],{"class":164},"bold",[123,64743,3760],{"class":129},[123,64745,64746],{"class":125,"line":19278},[123,64747,4631],{"class":129},[123,64749,64750],{"class":125,"line":19283},[123,64751,232],{"emptyLinePlaceholder":231},[123,64753,64754,64756,64758,64761],{"class":125,"line":19297},[123,64755,64525],{"class":337},[123,64757,64576],{"class":337},[123,64759,64760],{"class":337}," .text",[123,64762,137],{"class":129},[123,64764,64765,64767,64769,64772],{"class":125,"line":19309},[123,64766,59818],{"class":164},[123,64768,147],{"class":129},[123,64770,64771],{"class":164},"#333",[123,64773,3760],{"class":129},[123,64775,64776,64778,64780,64782,64784,64786],{"class":125,"line":19314},[123,64777,57098],{"class":164},[123,64779,147],{"class":129},[123,64781,2193],{"class":164},[123,64783,53897],{"class":133},[123,64785,6532],{"class":164},[123,64787,3760],{"class":129},[123,64789,64790],{"class":125,"line":19327},[123,64791,4631],{"class":129},[123,64793,64794],{"class":125,"line":19332},[123,64795,232],{"emptyLinePlaceholder":231},[123,64797,64798,64800,64802,64805],{"class":125,"line":19337},[123,64799,64525],{"class":337},[123,64801,64576],{"class":337},[123,64803,64804],{"class":337}," .time",[123,64806,137],{"class":129},[123,64808,64809,64811,64813,64815],{"class":125,"line":19342},[123,64810,59818],{"class":164},[123,64812,147],{"class":129},[123,64814,64472],{"class":164},[123,64816,3760],{"class":129},[123,64818,64819,64821,64823,64825,64827],{"class":125,"line":19355},[123,64820,57325],{"class":164},[123,64822,147],{"class":129},[123,64824,2215],{"class":164},[123,64826,53897],{"class":133},[123,64828,3760],{"class":129},[123,64830,64831],{"class":125,"line":19360},[123,64832,4631],{"class":129},[123,64834,64835,64837,64839],{"class":125,"line":35045},[123,64836,54820],{"class":129},[123,64838,2526],{"class":53707},[123,64840,53714],{"class":129},[123,64842,64843,64845,64847],{"class":125,"line":35051},[123,64844,54190],{"class":129},[123,64846,53741],{"class":53707},[123,64848,53714],{"class":129},[123,64850,64851],{"class":125,"line":35057},[123,64852,232],{"emptyLinePlaceholder":231},[123,64854,64855,64857,64859],{"class":125,"line":35063},[123,64856,3509],{"class":129},[123,64858,54205],{"class":53707},[123,64860,53714],{"class":129},[123,64862,64863,64865,64867,64869,64871,64874],{"class":125,"line":35069},[123,64864,54548],{"class":129},[123,64866,54016],{"class":53707},[123,64868,55889],{"class":337},[123,64870,134],{"class":129},[123,64872,64873],{"class":143},"\"wrapper\"",[123,64875,53714],{"class":129},[123,64877,64878,64880,64882,64884,64886,64889,64891,64893],{"class":125,"line":35080},[123,64879,53748],{"class":129},[123,64881,3047],{"class":53707},[123,64883,55889],{"class":337},[123,64885,134],{"class":129},[123,64887,64888],{"class":143},"\"avatar\"",[123,64890,57717],{"class":129},[123,64892,3047],{"class":53707},[123,64894,53714],{"class":129},[123,64896,64897,64899,64901,64903,64905,64908,64910,64912,64915,64917,64919,64921,64924,64926,64929,64931,64933],{"class":125,"line":35086},[123,64898,53748],{"class":129},[123,64900,56691],{"class":53707},[123,64902,17389],{"class":337},[123,64904,134],{"class":129},[123,64906,64907],{"class":143},"\"tx\"",[123,64909,63422],{"class":337},[123,64911,134],{"class":129},[123,64913,64914],{"class":143},"\"发一条友善的评论\"",[123,64916,56714],{"class":337},[123,64918,134],{"class":129},[123,64920,6141],{"class":143},[123,64922,64923],{"class":337}," maxlength",[123,64925,134],{"class":129},[123,64927,64928],{"class":143},"\"200\"",[123,64930,57717],{"class":129},[123,64932,56691],{"class":53707},[123,64934,53714],{"class":129},[123,64936,64937,64939,64941,64944,64946],{"class":125,"line":35106},[123,64938,53748],{"class":129},[123,64940,56290],{"class":53707},[123,64942,64943],{"class":129},">发布\u003C\u002F",[123,64945,56290],{"class":53707},[123,64947,53714],{"class":129},[123,64949,64950,64952,64954],{"class":125,"line":35112},[123,64951,54820],{"class":129},[123,64953,54016],{"class":53707},[123,64955,53714],{"class":129},[123,64957,64958,64960,64962,64964,64966,64968],{"class":125,"line":35123},[123,64959,54548],{"class":129},[123,64961,54016],{"class":53707},[123,64963,55889],{"class":337},[123,64965,134],{"class":129},[123,64967,64873],{"class":143},[123,64969,53714],{"class":129},[123,64971,64972,64974,64976,64978,64980,64983,64986,64988],{"class":125,"line":35129},[123,64973,53748],{"class":129},[123,64975,123],{"class":53707},[123,64977,55889],{"class":337},[123,64979,134],{"class":129},[123,64981,64982],{"class":143},"\"total\"",[123,64984,64985],{"class":129},">0\u002F200字\u003C\u002F",[123,64987,123],{"class":53707},[123,64989,53714],{"class":129},[123,64991,64992,64994,64996],{"class":125,"line":35135},[123,64993,54820],{"class":129},[123,64995,54016],{"class":53707},[123,64997,53714],{"class":129},[123,64999,65000,65002,65004,65006,65008,65011],{"class":125,"line":35141},[123,65001,54548],{"class":129},[123,65003,54016],{"class":53707},[123,65005,55889],{"class":337},[123,65007,134],{"class":129},[123,65009,65010],{"class":143},"\"list\"",[123,65012,53714],{"class":129},[123,65014,65015,65017,65019,65021,65023,65026,65029,65031,65034],{"class":125,"line":35147},[123,65016,53748],{"class":129},[123,65018,54016],{"class":53707},[123,65020,55889],{"class":337},[123,65022,134],{"class":129},[123,65024,65025],{"class":143},"\"item\"",[123,65027,65028],{"class":337}," style",[123,65030,134],{"class":129},[123,65032,65033],{"class":143},"\"display: none;\"",[123,65035,53714],{"class":129},[123,65037,65038,65040,65042,65044,65046,65048,65050,65052],{"class":125,"line":35153},[123,65039,57637],{"class":129},[123,65041,3047],{"class":53707},[123,65043,55889],{"class":337},[123,65045,134],{"class":129},[123,65047,64888],{"class":143},[123,65049,57717],{"class":129},[123,65051,3047],{"class":53707},[123,65053,53714],{"class":129},[123,65055,65056,65058,65060,65062,65064,65067],{"class":125,"line":35159},[123,65057,57637],{"class":129},[123,65059,54016],{"class":53707},[123,65061,55889],{"class":337},[123,65063,134],{"class":129},[123,65065,65066],{"class":143},"\"info\"",[123,65068,53714],{"class":129},[123,65070,65071,65073,65075,65077,65079,65081,65084,65086],{"class":125,"line":35165},[123,65072,57705],{"class":129},[123,65074,19],{"class":53707},[123,65076,55889],{"class":337},[123,65078,134],{"class":129},[123,65080,244],{"class":143},[123,65082,65083],{"class":129},">清风徐来\u003C\u002F",[123,65085,19],{"class":53707},[123,65087,53714],{"class":129},[123,65089,65090,65092,65094,65096,65098,65101,65104,65106],{"class":125,"line":35185},[123,65091,57705],{"class":129},[123,65093,19],{"class":53707},[123,65095,55889],{"class":337},[123,65097,134],{"class":129},[123,65099,65100],{"class":143},"\"text\"",[123,65102,65103],{"class":129},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[123,65105,19],{"class":53707},[123,65107,53714],{"class":129},[123,65109,65110,65112,65114,65116,65118,65121,65124,65126],{"class":125,"line":35191},[123,65111,57705],{"class":129},[123,65113,19],{"class":53707},[123,65115,55889],{"class":337},[123,65117,134],{"class":129},[123,65119,65120],{"class":143},"\"time\"",[123,65122,65123],{"class":129},">2022-10-10 20:29:21\u003C\u002F",[123,65125,19],{"class":53707},[123,65127,53714],{"class":129},[123,65129,65130,65132,65134],{"class":125,"line":35207},[123,65131,57810],{"class":129},[123,65133,54016],{"class":53707},[123,65135,53714],{"class":129},[123,65137,65138,65140,65142],{"class":125,"line":35213},[123,65139,54181],{"class":129},[123,65141,54016],{"class":53707},[123,65143,53714],{"class":129},[123,65145,65146,65148,65150],{"class":125,"line":35227},[123,65147,54820],{"class":129},[123,65149,54016],{"class":53707},[123,65151,53714],{"class":129},[123,65153,65154,65156,65158],{"class":125,"line":35233},[123,65155,54548],{"class":129},[123,65157,54218],{"class":53707},[123,65159,53714],{"class":129},[123,65161,65162,65164,65167,65169,65171,65173,65175,65178],{"class":125,"line":35248},[123,65163,13653],{"class":133},[123,65165,65166],{"class":164}," tx",[123,65168,15995],{"class":133},[123,65170,56799],{"class":129},[123,65172,56802],{"class":337},[123,65174,1315],{"class":129},[123,65176,65177],{"class":143},"'#tx'",[123,65179,288],{"class":129},[123,65181,65182,65184,65187,65189,65191,65193,65195,65198],{"class":125,"line":35254},[123,65183,13653],{"class":133},[123,65185,65186],{"class":164}," total",[123,65188,15995],{"class":133},[123,65190,56799],{"class":129},[123,65192,56802],{"class":337},[123,65194,1315],{"class":129},[123,65196,65197],{"class":143},"'.total'",[123,65199,288],{"class":129},[123,65201,65202],{"class":125,"line":35263},[123,65203,65204],{"class":2673},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[123,65206,65207,65210,65212,65214,65216,65218,65220],{"class":125,"line":35269},[123,65208,65209],{"class":129},"    tx.",[123,65211,60215],{"class":337},[123,65213,1315],{"class":129},[123,65215,63729],{"class":143},[123,65217,251],{"class":129},[123,65219,56852],{"class":133},[123,65221,56855],{"class":129},[123,65223,65224,65227,65229],{"class":125,"line":35278},[123,65225,65226],{"class":129},"      total.style.opacity ",[123,65228,134],{"class":133},[123,65230,58101],{"class":164},[123,65232,65233],{"class":125,"line":35284},[123,65234,35872],{"class":129},[123,65236,65237],{"class":125,"line":35290},[123,65238,65239],{"class":2673},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[123,65241,65242,65244,65246,65248,65250,65252,65254],{"class":125,"line":35299},[123,65243,65209],{"class":129},[123,65245,60215],{"class":337},[123,65247,1315],{"class":129},[123,65249,63790],{"class":143},[123,65251,251],{"class":129},[123,65253,56852],{"class":133},[123,65255,56855],{"class":129},[123,65257,65258,65260,65262],{"class":125,"line":35305},[123,65259,65226],{"class":129},[123,65261,134],{"class":133},[123,65263,49740],{"class":164},[123,65265,65266],{"class":125,"line":35316},[123,65267,35872],{"class":129},[123,65269,65270],{"class":125,"line":35322},[123,65271,65272],{"class":2673},"    \u002F\u002F 3. 检测用户输入\n",[123,65274,65275,65277,65279,65281,65284,65286,65288],{"class":125,"line":35341},[123,65276,65209],{"class":129},[123,65278,60215],{"class":337},[123,65280,1315],{"class":129},[123,65282,65283],{"class":143},"'input'",[123,65285,251],{"class":129},[123,65287,56852],{"class":133},[123,65289,56855],{"class":129},[123,65291,65292],{"class":125,"line":35347},[123,65293,65294],{"class":2673},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[123,65296,65297,65300,65302,65305,65308,65310,65313,65315,65317],{"class":125,"line":35358},[123,65298,65299],{"class":129},"      total.innerHTML ",[123,65301,134],{"class":133},[123,65303,65304],{"class":143}," `${",[123,65306,65307],{"class":129},"tx",[123,65309,3161],{"class":143},[123,65311,65312],{"class":129},"value",[123,65314,3161],{"class":143},[123,65316,54372],{"class":164},[123,65318,65319],{"class":143},"}\u002F200字`\n",[123,65321,65322],{"class":125,"line":35364},[123,65323,35872],{"class":129},[123,65325,65326],{"class":125,"line":35384},[123,65327,232],{"emptyLinePlaceholder":231},[123,65329,65330],{"class":125,"line":35400},[123,65331,65332],{"class":2673},"    \u002F\u002F const str = 'andy'\n",[123,65334,65335],{"class":125,"line":35406},[123,65336,65337],{"class":2673},"    \u002F\u002F console.log(str.length)\n",[123,65339,65340,65342,65344],{"class":125,"line":35420},[123,65341,54820],{"class":129},[123,65343,54218],{"class":53707},[123,65345,53714],{"class":129},[123,65347,65348,65350,65352],{"class":125,"line":35426},[123,65349,54190],{"class":129},[123,65351,54205],{"class":53707},[123,65353,53714],{"class":129},[123,65355,65356],{"class":125,"line":35432},[123,65357,232],{"emptyLinePlaceholder":231},[123,65359,65360,65362,65364],{"class":125,"line":35443},[123,65361,54190],{"class":129},[123,65363,53042],{"class":53707},[123,65365,53714],{"class":129},[24425,65367,65369],{"id":65368},"_3254-change事件","3.2.5.4 change事件",[19,65371,65372],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65374,65375],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65377,65378],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[113,65380,65382],{"className":53040,"code":65381,"language":53042,"meta":118,"style":118},"\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",[120,65383,65384,65394,65408,65412,65420,65434,65454,65466,65474,65478,65486,65500,65508,65526,65544,65556,65560,65568,65576,65580],{"__ignoreMap":118},[123,65385,65386,65388,65390,65392],{"class":125,"line":126},[123,65387,53704],{"class":129},[123,65389,53708],{"class":53707},[123,65391,53711],{"class":337},[123,65393,53714],{"class":129},[123,65395,65396,65398,65400,65402,65404,65406],{"class":125,"line":140},[123,65397,3509],{"class":129},[123,65399,53042],{"class":53707},[123,65401,53723],{"class":337},[123,65403,134],{"class":129},[123,65405,53728],{"class":143},[123,65407,53714],{"class":129},[123,65409,65410],{"class":125,"line":156},[123,65411,232],{"emptyLinePlaceholder":231},[123,65413,65414,65416,65418],{"class":125,"line":168},[123,65415,3509],{"class":129},[123,65417,53741],{"class":53707},[123,65419,53714],{"class":129},[123,65421,65422,65424,65426,65428,65430,65432],{"class":125,"line":268},[123,65423,54548],{"class":129},[123,65425,53751],{"class":53707},[123,65427,53754],{"class":337},[123,65429,134],{"class":129},[123,65431,53759],{"class":143},[123,65433,53714],{"class":129},[123,65435,65436,65438,65440,65442,65444,65446,65448,65450,65452],{"class":125,"line":291},[123,65437,54548],{"class":129},[123,65439,53751],{"class":53707},[123,65441,17350],{"class":337},[123,65443,134],{"class":129},[123,65445,53798],{"class":143},[123,65447,53778],{"class":337},[123,65449,134],{"class":129},[123,65451,53805],{"class":143},[123,65453,53714],{"class":129},[123,65455,65456,65458,65460,65462,65464],{"class":125,"line":300},[123,65457,54548],{"class":129},[123,65459,642],{"class":53707},[123,65461,53816],{"class":129},[123,65463,642],{"class":53707},[123,65465,53714],{"class":129},[123,65467,65468,65470,65472],{"class":125,"line":305},[123,65469,54190],{"class":129},[123,65471,53741],{"class":53707},[123,65473,53714],{"class":129},[123,65475,65476],{"class":125,"line":316},[123,65477,232],{"emptyLinePlaceholder":231},[123,65479,65480,65482,65484],{"class":125,"line":673},[123,65481,3509],{"class":129},[123,65483,54205],{"class":53707},[123,65485,53714],{"class":129},[123,65487,65488,65490,65492,65494,65496,65498],{"class":125,"line":692},[123,65489,54548],{"class":129},[123,65491,56224],{"class":53707},[123,65493,56227],{"class":337},[123,65495,134],{"class":129},[123,65497,65100],{"class":143},[123,65499,53714],{"class":129},[123,65501,65502,65504,65506],{"class":125,"line":713},[123,65503,54548],{"class":129},[123,65505,54218],{"class":53707},[123,65507,53714],{"class":129},[123,65509,65510,65512,65514,65516,65518,65520,65522,65524],{"class":125,"line":718},[123,65511,13653],{"class":133},[123,65513,63007],{"class":164},[123,65515,15995],{"class":133},[123,65517,56799],{"class":129},[123,65519,56802],{"class":337},[123,65521,1315],{"class":129},[123,65523,65283],{"class":143},[123,65525,288],{"class":129},[123,65527,65528,65531,65533,65535,65538,65540,65542],{"class":125,"line":1138},[123,65529,65530],{"class":129},"    input.",[123,65532,60215],{"class":337},[123,65534,1315],{"class":129},[123,65536,65537],{"class":143},"'change'",[123,65539,251],{"class":129},[123,65541,56852],{"class":133},[123,65543,56855],{"class":129},[123,65545,65546,65548,65550,65552,65554],{"class":125,"line":1429},[123,65547,60646],{"class":129},[123,65549,60649],{"class":337},[123,65551,1315],{"class":129},[123,65553,3196],{"class":164},[123,65555,288],{"class":129},[123,65557,65558],{"class":125,"line":1439},[123,65559,35872],{"class":129},[123,65561,65562,65564,65566],{"class":125,"line":1444},[123,65563,54820],{"class":129},[123,65565,54218],{"class":53707},[123,65567,53714],{"class":129},[123,65569,65570,65572,65574],{"class":125,"line":1453},[123,65571,54190],{"class":129},[123,65573,54205],{"class":53707},[123,65575,53714],{"class":129},[123,65577,65578],{"class":125,"line":1458},[123,65579,232],{"emptyLinePlaceholder":231},[123,65581,65582,65584,65586],{"class":125,"line":1476},[123,65583,54190],{"class":129},[123,65585,53042],{"class":53707},[123,65587,53714],{"class":129},[19,65589,65590],{},"总结：内容发生改变才回去触发",[2587,65592,65594],{"id":65593},"_326-事件对象","3.2.6 事件对象",[24425,65596,65598],{"id":65597},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65600,65601],{},[3929,65602],{"alt":118,"src":65603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65605,65606],{},[3929,65607],{"alt":118,"src":65608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65610,65611],{},"点击一次，就输出了事件对象，它是个对象",[19,65613,65614],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65616,65617],{},[3929,65618],{"alt":118,"src":65619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24425,65621,65623],{"id":65622},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65625,65626],{},[3929,65627],{"alt":118,"src":65628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65630,65631],{},"实现按特殊字符才是实现打印输出效果：",[113,65633,65635],{"className":55470,"code":65634,"language":55472,"meta":118,"style":118},"\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",[120,65636,65637,65645,65650,65664,65672,65677,65682,65687,65692,65697,65702,65707,65712,65717,65721,65725,65733],{"__ignoreMap":118},[123,65638,65639,65641,65643],{"class":125,"line":126},[123,65640,3509],{"class":129},[123,65642,54205],{"class":53707},[123,65644,53714],{"class":129},[123,65646,65647],{"class":125,"line":140},[123,65648,65649],{"class":2673},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[123,65651,65652,65654,65656,65658,65660,65662],{"class":125,"line":156},[123,65653,54548],{"class":129},[123,65655,56224],{"class":53707},[123,65657,56227],{"class":337},[123,65659,134],{"class":129},[123,65661,65100],{"class":143},[123,65663,53714],{"class":129},[123,65665,65666,65668,65670],{"class":125,"line":168},[123,65667,54548],{"class":129},[123,65669,54218],{"class":53707},[123,65671,53714],{"class":129},[123,65673,65674],{"class":125,"line":268},[123,65675,65676],{"class":129},"    \u002F\u002F const btn = document.querySelector('button')\n",[123,65678,65679],{"class":125,"line":291},[123,65680,65681],{"class":129},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[123,65683,65684],{"class":125,"line":300},[123,65685,65686],{"class":129},"    \u002F\u002F   console.log(e);\n",[123,65688,65689],{"class":125,"line":305},[123,65690,65691],{"class":129},"    \u002F\u002F })\n",[123,65693,65694],{"class":125,"line":316},[123,65695,65696],{"class":129},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[123,65698,65699],{"class":125,"line":673},[123,65700,65701],{"class":129},"    const input = document.querySelector('input')\n",[123,65703,65704],{"class":125,"line":692},[123,65705,65706],{"class":129},"    input.addEventListener('keyup', function (e) {\n",[123,65708,65709],{"class":125,"line":713},[123,65710,65711],{"class":129},"      if (e.key === 'Enter') {\n",[123,65713,65714],{"class":125,"line":718},[123,65715,65716],{"class":129},"        console.log('我按下了回车键')\n",[123,65718,65719],{"class":125,"line":1138},[123,65720,54801],{"class":129},[123,65722,65723],{"class":125,"line":1429},[123,65724,35872],{"class":129},[123,65726,65727,65729,65731],{"class":125,"line":1439},[123,65728,54820],{"class":129},[123,65730,54218],{"class":53707},[123,65732,53714],{"class":129},[123,65734,65735,65737,65739],{"class":125,"line":1444},[123,65736,54190],{"class":129},[123,65738,54205],{"class":53707},[123,65740,53714],{"class":129},[24425,65742,65744],{"id":65743},"_3263-trim方法","3.2.6.3 trim方法",[19,65746,65747],{},[3929,65748],{"alt":118,"src":65749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65751,65752],{},[3929,65753],{"alt":118,"src":65754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65756,65757],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65759,65760],{},"str.trim()",[2587,65762,65764],{"id":65763},"_327-环境对象","3.2.7 环境对象",[19,65766,65767],{},[3929,65768],{"alt":118,"src":65769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65771,65772],{},[3929,65773],{"alt":118,"src":65774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65776,65777],{},[3929,65778],{"alt":118,"src":65779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65781,65782],{},"实际函数调用是window.fn()",[19,65784,65785],{},"普通函数里面this指向的是window",[3606,65787,65788,65791,65794],{},[29,65789,65790],{},"在普通函数下，this指向的是window",[29,65792,65793],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65795,65796],{},"箭头函数没有this",[19,65798,65799],{},"粗略记法就是：谁调用，this就指向谁",[19,65801,65802],{},[3929,65803],{"alt":118,"src":65804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65806,65807],{},[3929,65808],{"alt":118,"src":65809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65811,65812],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65814,65815],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[113,65817,65819],{"className":55470,"code":65818,"language":55472,"meta":118,"style":118},"\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",[120,65820,65821,65829,65841,65849,65854,65859,65864,65869,65873,65881],{"__ignoreMap":118},[123,65822,65823,65825,65827],{"class":125,"line":126},[123,65824,3509],{"class":129},[123,65826,54205],{"class":53707},[123,65828,53714],{"class":129},[123,65830,65831,65833,65835,65837,65839],{"class":125,"line":140},[123,65832,54548],{"class":129},[123,65834,56290],{"class":53707},[123,65836,56296],{"class":129},[123,65838,56290],{"class":53707},[123,65840,53714],{"class":129},[123,65842,65843,65845,65847],{"class":125,"line":156},[123,65844,54548],{"class":129},[123,65846,54218],{"class":53707},[123,65848,53714],{"class":129},[123,65850,65851],{"class":125,"line":168},[123,65852,65853],{"class":129},"    const button = document.querySelector('button')\n",[123,65855,65856],{"class":125,"line":268},[123,65857,65858],{"class":129},"    button.addEventListener('click', function () {\n",[123,65860,65861],{"class":125,"line":291},[123,65862,65863],{"class":129},"      \u002F\u002F console.log(this);\n",[123,65865,65866],{"class":125,"line":300},[123,65867,65868],{"class":129},"      this.style.color = 'pink'\n",[123,65870,65871],{"class":125,"line":305},[123,65872,35872],{"class":129},[123,65874,65875,65877,65879],{"class":125,"line":316},[123,65876,54820],{"class":129},[123,65878,54218],{"class":53707},[123,65880,53714],{"class":129},[123,65882,65883,65885,65887],{"class":125,"line":673},[123,65884,54190],{"class":129},[123,65886,54205],{"class":53707},[123,65888,53714],{"class":129},[2587,65890,65892],{"id":65891},"_328-回调函数","3.2.8 回调函数",[19,65894,65895],{},[3929,65896],{"alt":118,"src":65897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65899,65900],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65902,13764],{},[3606,65904,65905,65908,65911],{},[29,65906,65907],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65909,65910],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65912,65913],{},"使用匿名函数做为回调函数比较常见",[2587,65915,65917],{"id":65916},"_329-tab栏切换","3.2.9 tab栏切换",[19,65919,65920],{},[3929,65921],{"alt":118,"src":65922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[113,65924,65926],{"className":53040,"code":65925,"language":53042,"meta":118,"style":118},"\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",[120,65927,65928,65938,65952,65956,65964,65978,65998,66018,66031,66039,66045,66055,66065,66069,66073,66080,66093,66106,66118,66134,66138,66142,66149,66161,66173,66185,66195,66205,66209,66213,66222,66234,66245,66257,66261,66265,66273,66283,66293,66303,66307,66311,66321,66335,66347,66351,66355,66367,66378,66395,66405,66409,66413,66428,66439,66449,66453,66457,66464,66479,66483,66487,66495,66505,66509,66513,66522,66532,66536,66544,66552,66556,66564,66579,66594,66607,66615,66649,66676,66703,66730,66757,66765,66773,66788,66825,66860,66895,66930,66965,66973,66981,66989,66994,66999,67019,67024,67053,67058,67063,67081,67086,67091,67096,67118,67123,67139,67143,67148,67153,67174,67179,67208,67212,67217,67221,67229,67237,67241],{"__ignoreMap":118},[123,65929,65930,65932,65934,65936],{"class":125,"line":126},[123,65931,53704],{"class":129},[123,65933,53708],{"class":53707},[123,65935,53711],{"class":337},[123,65937,53714],{"class":129},[123,65939,65940,65942,65944,65946,65948,65950],{"class":125,"line":140},[123,65941,3509],{"class":129},[123,65943,53042],{"class":53707},[123,65945,53723],{"class":337},[123,65947,134],{"class":129},[123,65949,53728],{"class":143},[123,65951,53714],{"class":129},[123,65953,65954],{"class":125,"line":156},[123,65955,232],{"emptyLinePlaceholder":231},[123,65957,65958,65960,65962],{"class":125,"line":168},[123,65959,3509],{"class":129},[123,65961,53741],{"class":53707},[123,65963,53714],{"class":129},[123,65965,65966,65968,65970,65972,65974,65976],{"class":125,"line":268},[123,65967,54548],{"class":129},[123,65969,53751],{"class":53707},[123,65971,53754],{"class":337},[123,65973,134],{"class":129},[123,65975,53759],{"class":143},[123,65977,61529],{"class":129},[123,65979,65980,65982,65984,65986,65988,65990,65992,65994,65996],{"class":125,"line":291},[123,65981,54548],{"class":129},[123,65983,53751],{"class":53707},[123,65985,53770],{"class":337},[123,65987,134],{"class":129},[123,65989,53775],{"class":143},[123,65991,53778],{"class":337},[123,65993,134],{"class":129},[123,65995,53783],{"class":143},[123,65997,61529],{"class":129},[123,65999,66000,66002,66004,66006,66008,66010,66012,66014,66016],{"class":125,"line":300},[123,66001,54548],{"class":129},[123,66003,53751],{"class":53707},[123,66005,17350],{"class":337},[123,66007,134],{"class":129},[123,66009,53798],{"class":143},[123,66011,53778],{"class":337},[123,66013,134],{"class":129},[123,66015,53805],{"class":143},[123,66017,61529],{"class":129},[123,66019,66020,66022,66024,66027,66029],{"class":125,"line":305},[123,66021,54548],{"class":129},[123,66023,642],{"class":53707},[123,66025,66026],{"class":129},">tab栏切换\u003C\u002F",[123,66028,642],{"class":53707},[123,66030,53714],{"class":129},[123,66032,66033,66035,66037],{"class":125,"line":316},[123,66034,54548],{"class":129},[123,66036,2526],{"class":53707},[123,66038,53714],{"class":129},[123,66040,66041,66043],{"class":125,"line":673},[123,66042,8836],{"class":53707},[123,66044,137],{"class":129},[123,66046,66047,66049,66051,66053],{"class":125,"line":692},[123,66048,57109],{"class":164},[123,66050,147],{"class":129},[123,66052,2799],{"class":164},[123,66054,3760],{"class":129},[123,66056,66057,66059,66061,66063],{"class":125,"line":713},[123,66058,57098],{"class":164},[123,66060,147],{"class":129},[123,66062,2799],{"class":164},[123,66064,3760],{"class":129},[123,66066,66067],{"class":125,"line":718},[123,66068,4631],{"class":129},[123,66070,66071],{"class":125,"line":1138},[123,66072,232],{"emptyLinePlaceholder":231},[123,66074,66075,66078],{"class":125,"line":1429},[123,66076,66077],{"class":337},"    .tab",[123,66079,137],{"class":129},[123,66081,66082,66084,66086,66089,66091],{"class":125,"line":1439},[123,66083,57174],{"class":164},[123,66085,147],{"class":129},[123,66087,66088],{"class":164},"590",[123,66090,53897],{"class":133},[123,66092,3760],{"class":129},[123,66094,66095,66097,66099,66102,66104],{"class":125,"line":1444},[123,66096,57188],{"class":164},[123,66098,147],{"class":129},[123,66100,66101],{"class":164},"340",[123,66103,53897],{"class":133},[123,66105,3760],{"class":129},[123,66107,66108,66110,66112,66114,66116],{"class":125,"line":1453},[123,66109,57109],{"class":164},[123,66111,147],{"class":129},[123,66113,3302],{"class":164},[123,66115,53897],{"class":133},[123,66117,3760],{"class":129},[123,66119,66120,66122,66124,66126,66128,66130,66132],{"class":125,"line":1458},[123,66121,64379],{"class":164},[123,66123,147],{"class":129},[123,66125,2825],{"class":164},[123,66127,53897],{"class":133},[123,66129,53926],{"class":164},[123,66131,64646],{"class":164},[123,66133,3760],{"class":129},[123,66135,66136],{"class":125,"line":1476},[123,66137,4631],{"class":129},[123,66139,66140],{"class":125,"line":1494},[123,66141,232],{"emptyLinePlaceholder":231},[123,66143,66144,66147],{"class":125,"line":1499},[123,66145,66146],{"class":337},"    .tab-nav",[123,66148,137],{"class":129},[123,66150,66151,66153,66155,66157,66159],{"class":125,"line":1517},[123,66152,57174],{"class":164},[123,66154,147],{"class":129},[123,66156,259],{"class":164},[123,66158,2935],{"class":133},[123,66160,3760],{"class":129},[123,66162,66163,66165,66167,66169,66171],{"class":125,"line":1534},[123,66164,57188],{"class":164},[123,66166,147],{"class":129},[123,66168,3506],{"class":164},[123,66170,53897],{"class":133},[123,66172,3760],{"class":129},[123,66174,66175,66177,66179,66181,66183],{"class":125,"line":1539},[123,66176,59761],{"class":164},[123,66178,147],{"class":129},[123,66180,3506],{"class":164},[123,66182,53897],{"class":133},[123,66184,3760],{"class":129},[123,66186,66187,66189,66191,66193],{"class":125,"line":2080},[123,66188,57412],{"class":164},[123,66190,147],{"class":129},[123,66192,53882],{"class":164},[123,66194,3760],{"class":129},[123,66196,66197,66199,66201,66203],{"class":125,"line":2097},[123,66198,57423],{"class":164},[123,66200,147],{"class":129},[123,66202,54073],{"class":164},[123,66204,3760],{"class":129},[123,66206,66207],{"class":125,"line":2114},[123,66208,4631],{"class":129},[123,66210,66211],{"class":125,"line":2125},[123,66212,232],{"emptyLinePlaceholder":231},[123,66214,66215,66217,66220],{"class":125,"line":2130},[123,66216,66146],{"class":337},[123,66218,66219],{"class":53707}," h3",[123,66221,137],{"class":129},[123,66223,66224,66226,66228,66230,66232],{"class":125,"line":5033},[123,66225,57325],{"class":164},[123,66227,147],{"class":129},[123,66229,3402],{"class":164},[123,66231,53897],{"class":133},[123,66233,3760],{"class":129},[123,66235,66236,66238,66240,66243],{"class":125,"line":5041},[123,66237,64736],{"class":164},[123,66239,147],{"class":129},[123,66241,66242],{"class":164},"normal",[123,66244,3760],{"class":129},[123,66246,66247,66249,66251,66253,66255],{"class":125,"line":5046},[123,66248,64402],{"class":164},[123,66250,147],{"class":129},[123,66252,3302],{"class":164},[123,66254,53897],{"class":133},[123,66256,3760],{"class":129},[123,66258,66259],{"class":125,"line":5052},[123,66260,4631],{"class":129},[123,66262,66263],{"class":125,"line":5058},[123,66264,232],{"emptyLinePlaceholder":231},[123,66266,66267,66269,66271],{"class":125,"line":5063},[123,66268,66146],{"class":337},[123,66270,63694],{"class":53707},[123,66272,137],{"class":129},[123,66274,66275,66277,66279,66281],{"class":125,"line":10380},[123,66276,57135],{"class":164},[123,66278,147],{"class":129},[123,66280,57140],{"class":164},[123,66282,3760],{"class":129},[123,66284,66285,66287,66289,66291],{"class":125,"line":10404},[123,66286,57412],{"class":164},[123,66288,147],{"class":129},[123,66290,53882],{"class":164},[123,66292,3760],{"class":129},[123,66294,66295,66297,66299,66301],{"class":125,"line":10409},[123,66296,57423],{"class":164},[123,66298,147],{"class":129},[123,66300,53985],{"class":164},[123,66302,3760],{"class":129},[123,66304,66305],{"class":125,"line":10415},[123,66306,4631],{"class":129},[123,66308,66309],{"class":125,"line":10442},[123,66310,232],{"emptyLinePlaceholder":231},[123,66312,66313,66315,66317,66319],{"class":125,"line":10447},[123,66314,66146],{"class":337},[123,66316,63694],{"class":53707},[123,66318,57478],{"class":53707},[123,66320,137],{"class":129},[123,66322,66323,66325,66327,66329,66331,66333],{"class":125,"line":10453},[123,66324,57109],{"class":164},[123,66326,147],{"class":129},[123,66328,2799],{"class":164},[123,66330,11382],{"class":164},[123,66332,53897],{"class":133},[123,66334,3760],{"class":129},[123,66336,66337,66339,66341,66343,66345],{"class":125,"line":10465},[123,66338,57325],{"class":164},[123,66340,147],{"class":129},[123,66342,3152],{"class":164},[123,66344,53897],{"class":133},[123,66346,3760],{"class":129},[123,66348,66349],{"class":125,"line":10477},[123,66350,4631],{"class":129},[123,66352,66353],{"class":125,"line":10489},[123,66354,232],{"emptyLinePlaceholder":231},[123,66356,66357,66359,66361,66363,66365],{"class":125,"line":12148},[123,66358,66146],{"class":337},[123,66360,63694],{"class":53707},[123,66362,57478],{"class":53707},[123,66364,3865],{"class":53707},[123,66366,137],{"class":129},[123,66368,66369,66372,66374,66376],{"class":125,"line":12173},[123,66370,66371],{"class":164},"      text-decoration",[123,66373,147],{"class":129},[123,66375,57140],{"class":164},[123,66377,3760],{"class":129},[123,66379,66380,66382,66384,66386,66388,66390,66393],{"class":125,"line":12196},[123,66381,64634],{"class":164},[123,66383,147],{"class":129},[123,66385,2692],{"class":164},[123,66387,53897],{"class":133},[123,66389,53926],{"class":164},[123,66391,66392],{"class":164}," transparent",[123,66394,3760],{"class":129},[123,66396,66397,66399,66401,66403],{"class":125,"line":12220},[123,66398,59818],{"class":164},[123,66400,147],{"class":129},[123,66402,64771],{"class":164},[123,66404,3760],{"class":129},[123,66406,66407],{"class":125,"line":12225},[123,66408,4631],{"class":129},[123,66410,66411],{"class":125,"line":12230},[123,66412,232],{"emptyLinePlaceholder":231},[123,66414,66415,66417,66419,66421,66423,66426],{"class":125,"line":12235},[123,66416,66146],{"class":337},[123,66418,63694],{"class":53707},[123,66420,57478],{"class":53707},[123,66422,3865],{"class":53707},[123,66424,66425],{"class":337},".active",[123,66427,137],{"class":129},[123,66429,66430,66432,66434,66437],{"class":125,"line":12244},[123,66431,64193],{"class":164},[123,66433,147],{"class":129},[123,66435,66436],{"class":164},"#e1251b",[123,66438,3760],{"class":129},[123,66440,66441,66443,66445,66447],{"class":125,"line":12249},[123,66442,59818],{"class":164},[123,66444,147],{"class":129},[123,66446,66436],{"class":164},[123,66448,3760],{"class":129},[123,66450,66451],{"class":125,"line":12255},[123,66452,4631],{"class":129},[123,66454,66455],{"class":125,"line":12276},[123,66456,232],{"emptyLinePlaceholder":231},[123,66458,66459,66462],{"class":125,"line":12282},[123,66460,66461],{"class":337},"    .tab-content",[123,66463,137],{"class":129},[123,66465,66466,66468,66470,66472,66475,66477],{"class":125,"line":12296},[123,66467,57098],{"class":164},[123,66469,147],{"class":129},[123,66471,2799],{"class":164},[123,66473,66474],{"class":164}," 16",[123,66476,53897],{"class":133},[123,66478,3760],{"class":129},[123,66480,66481],{"class":125,"line":12302},[123,66482,4631],{"class":129},[123,66484,66485],{"class":125,"line":12329},[123,66486,232],{"emptyLinePlaceholder":231},[123,66488,66489,66491,66493],{"class":125,"line":12338},[123,66490,66461],{"class":337},[123,66492,64576],{"class":337},[123,66494,137],{"class":129},[123,66496,66497,66499,66501,66503],{"class":125,"line":12344},[123,66498,57412],{"class":164},[123,66500,147],{"class":129},[123,66502,57140],{"class":164},[123,66504,3760],{"class":129},[123,66506,66507],{"class":125,"line":12352},[123,66508,4631],{"class":129},[123,66510,66511],{"class":125,"line":12357},[123,66512,232],{"emptyLinePlaceholder":231},[123,66514,66515,66517,66520],{"class":125,"line":19032},[123,66516,66461],{"class":337},[123,66518,66519],{"class":337}," .item.active",[123,66521,137],{"class":129},[123,66523,66524,66526,66528,66530],{"class":125,"line":19038},[123,66525,57412],{"class":164},[123,66527,147],{"class":129},[123,66529,63271],{"class":164},[123,66531,3760],{"class":129},[123,66533,66534],{"class":125,"line":19061},[123,66535,4631],{"class":129},[123,66537,66538,66540,66542],{"class":125,"line":19067},[123,66539,54820],{"class":129},[123,66541,2526],{"class":53707},[123,66543,53714],{"class":129},[123,66545,66546,66548,66550],{"class":125,"line":19090},[123,66547,54190],{"class":129},[123,66549,53741],{"class":53707},[123,66551,53714],{"class":129},[123,66553,66554],{"class":125,"line":19104},[123,66555,232],{"emptyLinePlaceholder":231},[123,66557,66558,66560,66562],{"class":125,"line":19124},[123,66559,3509],{"class":129},[123,66561,54205],{"class":53707},[123,66563,53714],{"class":129},[123,66565,66566,66568,66570,66572,66574,66577],{"class":125,"line":19130},[123,66567,54548],{"class":129},[123,66569,54016],{"class":53707},[123,66571,55889],{"class":337},[123,66573,134],{"class":129},[123,66575,66576],{"class":143},"\"tab\"",[123,66578,53714],{"class":129},[123,66580,66581,66583,66585,66587,66589,66592],{"class":125,"line":19141},[123,66582,53748],{"class":129},[123,66584,54016],{"class":53707},[123,66586,55889],{"class":337},[123,66588,134],{"class":129},[123,66590,66591],{"class":143},"\"tab-nav\"",[123,66593,53714],{"class":129},[123,66595,66596,66598,66600,66603,66605],{"class":125,"line":19164},[123,66597,57637],{"class":129},[123,66599,2587],{"class":53707},[123,66601,66602],{"class":129},">每日特价\u003C\u002F",[123,66604,2587],{"class":53707},[123,66606,53714],{"class":129},[123,66608,66609,66611,66613],{"class":125,"line":19186},[123,66610,57637],{"class":129},[123,66612,3606],{"class":53707},[123,66614,53714],{"class":129},[123,66616,66617,66619,66621,66623,66625,66627,66629,66631,66633,66635,66638,66641,66643,66645,66647],{"class":125,"line":19191},[123,66618,57705],{"class":129},[123,66620,29],{"class":53707},[123,66622,63454],{"class":129},[123,66624,2846],{"class":53707},[123,66626,55889],{"class":337},[123,66628,134],{"class":129},[123,66630,62108],{"class":143},[123,66632,63459],{"class":337},[123,66634,134],{"class":129},[123,66636,66637],{"class":143},"\"javascript:;\"",[123,66639,66640],{"class":129},">精选\u003C\u002F",[123,66642,2846],{"class":53707},[123,66644,57717],{"class":129},[123,66646,29],{"class":53707},[123,66648,53714],{"class":129},[123,66650,66651,66653,66655,66657,66659,66661,66663,66665,66668,66670,66672,66674],{"class":125,"line":19197},[123,66652,57705],{"class":129},[123,66654,29],{"class":53707},[123,66656,63454],{"class":129},[123,66658,2846],{"class":53707},[123,66660,63459],{"class":337},[123,66662,134],{"class":129},[123,66664,66637],{"class":143},[123,66666,66667],{"class":129},">美食\u003C\u002F",[123,66669,2846],{"class":53707},[123,66671,57717],{"class":129},[123,66673,29],{"class":53707},[123,66675,53714],{"class":129},[123,66677,66678,66680,66682,66684,66686,66688,66690,66692,66695,66697,66699,66701],{"class":125,"line":19211},[123,66679,57705],{"class":129},[123,66681,29],{"class":53707},[123,66683,63454],{"class":129},[123,66685,2846],{"class":53707},[123,66687,63459],{"class":337},[123,66689,134],{"class":129},[123,66691,66637],{"class":143},[123,66693,66694],{"class":129},">百货\u003C\u002F",[123,66696,2846],{"class":53707},[123,66698,57717],{"class":129},[123,66700,29],{"class":53707},[123,66702,53714],{"class":129},[123,66704,66705,66707,66709,66711,66713,66715,66717,66719,66722,66724,66726,66728],{"class":125,"line":19224},[123,66706,57705],{"class":129},[123,66708,29],{"class":53707},[123,66710,63454],{"class":129},[123,66712,2846],{"class":53707},[123,66714,63459],{"class":337},[123,66716,134],{"class":129},[123,66718,66637],{"class":143},[123,66720,66721],{"class":129},">个护\u003C\u002F",[123,66723,2846],{"class":53707},[123,66725,57717],{"class":129},[123,66727,29],{"class":53707},[123,66729,53714],{"class":129},[123,66731,66732,66734,66736,66738,66740,66742,66744,66746,66749,66751,66753,66755],{"class":125,"line":19229},[123,66733,57705],{"class":129},[123,66735,29],{"class":53707},[123,66737,63454],{"class":129},[123,66739,2846],{"class":53707},[123,66741,63459],{"class":337},[123,66743,134],{"class":129},[123,66745,66637],{"class":143},[123,66747,66748],{"class":129},">预告\u003C\u002F",[123,66750,2846],{"class":53707},[123,66752,57717],{"class":129},[123,66754,29],{"class":53707},[123,66756,53714],{"class":129},[123,66758,66759,66761,66763],{"class":125,"line":19243},[123,66760,57810],{"class":129},[123,66762,3606],{"class":53707},[123,66764,53714],{"class":129},[123,66766,66767,66769,66771],{"class":125,"line":19248},[123,66768,54181],{"class":129},[123,66770,54016],{"class":53707},[123,66772,53714],{"class":129},[123,66774,66775,66777,66779,66781,66783,66786],{"class":125,"line":19254},[123,66776,53748],{"class":129},[123,66778,54016],{"class":53707},[123,66780,55889],{"class":337},[123,66782,134],{"class":129},[123,66784,66785],{"class":143},"\"tab-content\"",[123,66787,53714],{"class":129},[123,66789,66790,66792,66794,66796,66798,66801,66803,66805,66807,66809,66812,66814,66816,66818,66821,66823],{"class":125,"line":19259},[123,66791,57637],{"class":129},[123,66793,54016],{"class":53707},[123,66795,55889],{"class":337},[123,66797,134],{"class":129},[123,66799,66800],{"class":143},"\"item active\"",[123,66802,63454],{"class":129},[123,66804,3929],{"class":53707},[123,66806,57642],{"class":337},[123,66808,134],{"class":129},[123,66810,66811],{"class":143},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[123,66813,57650],{"class":337},[123,66815,134],{"class":129},[123,66817,1629],{"class":143},[123,66819,66820],{"class":129}," \u002F>\u003C\u002F",[123,66822,54016],{"class":53707},[123,66824,53714],{"class":129},[123,66826,66827,66829,66831,66833,66835,66837,66839,66841,66843,66845,66848,66850,66852,66854,66856,66858],{"class":125,"line":19273},[123,66828,57637],{"class":129},[123,66830,54016],{"class":53707},[123,66832,55889],{"class":337},[123,66834,134],{"class":129},[123,66836,65025],{"class":143},[123,66838,63454],{"class":129},[123,66840,3929],{"class":53707},[123,66842,57642],{"class":337},[123,66844,134],{"class":129},[123,66846,66847],{"class":143},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[123,66849,57650],{"class":337},[123,66851,134],{"class":129},[123,66853,1629],{"class":143},[123,66855,66820],{"class":129},[123,66857,54016],{"class":53707},[123,66859,53714],{"class":129},[123,66861,66862,66864,66866,66868,66870,66872,66874,66876,66878,66880,66883,66885,66887,66889,66891,66893],{"class":125,"line":19278},[123,66863,57637],{"class":129},[123,66865,54016],{"class":53707},[123,66867,55889],{"class":337},[123,66869,134],{"class":129},[123,66871,65025],{"class":143},[123,66873,63454],{"class":129},[123,66875,3929],{"class":53707},[123,66877,57642],{"class":337},[123,66879,134],{"class":129},[123,66881,66882],{"class":143},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[123,66884,57650],{"class":337},[123,66886,134],{"class":129},[123,66888,1629],{"class":143},[123,66890,66820],{"class":129},[123,66892,54016],{"class":53707},[123,66894,53714],{"class":129},[123,66896,66897,66899,66901,66903,66905,66907,66909,66911,66913,66915,66918,66920,66922,66924,66926,66928],{"class":125,"line":19283},[123,66898,57637],{"class":129},[123,66900,54016],{"class":53707},[123,66902,55889],{"class":337},[123,66904,134],{"class":129},[123,66906,65025],{"class":143},[123,66908,63454],{"class":129},[123,66910,3929],{"class":53707},[123,66912,57642],{"class":337},[123,66914,134],{"class":129},[123,66916,66917],{"class":143},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[123,66919,57650],{"class":337},[123,66921,134],{"class":129},[123,66923,1629],{"class":143},[123,66925,66820],{"class":129},[123,66927,54016],{"class":53707},[123,66929,53714],{"class":129},[123,66931,66932,66934,66936,66938,66940,66942,66944,66946,66948,66950,66953,66955,66957,66959,66961,66963],{"class":125,"line":19297},[123,66933,57637],{"class":129},[123,66935,54016],{"class":53707},[123,66937,55889],{"class":337},[123,66939,134],{"class":129},[123,66941,65025],{"class":143},[123,66943,63454],{"class":129},[123,66945,3929],{"class":53707},[123,66947,57642],{"class":337},[123,66949,134],{"class":129},[123,66951,66952],{"class":143},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[123,66954,57650],{"class":337},[123,66956,134],{"class":129},[123,66958,1629],{"class":143},[123,66960,66820],{"class":129},[123,66962,54016],{"class":53707},[123,66964,53714],{"class":129},[123,66966,66967,66969,66971],{"class":125,"line":19309},[123,66968,54181],{"class":129},[123,66970,54016],{"class":53707},[123,66972,53714],{"class":129},[123,66974,66975,66977,66979],{"class":125,"line":19314},[123,66976,54820],{"class":129},[123,66978,54016],{"class":53707},[123,66980,53714],{"class":129},[123,66982,66983,66985,66987],{"class":125,"line":19327},[123,66984,54548],{"class":129},[123,66986,54218],{"class":53707},[123,66988,53714],{"class":129},[123,66990,66991],{"class":125,"line":19332},[123,66992,66993],{"class":2673},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[123,66995,66996],{"class":125,"line":19337},[123,66997,66998],{"class":2673},"    \u002F\u002F 1.1 获取 a 元素 \n",[123,67000,67001,67003,67006,67008,67010,67012,67014,67017],{"class":125,"line":19342},[123,67002,13653],{"class":133},[123,67004,67005],{"class":164}," as",[123,67007,15995],{"class":133},[123,67009,56799],{"class":129},[123,67011,58083],{"class":337},[123,67013,1315],{"class":129},[123,67015,67016],{"class":143},"'.tab-nav a'",[123,67018,288],{"class":129},[123,67020,67021],{"class":125,"line":19355},[123,67022,67023],{"class":2673},"    \u002F\u002F console.log(as) \n",[123,67025,67026,67028,67030,67032,67034,67036,67038,67040,67042,67045,67047,67049,67051],{"class":125,"line":19360},[123,67027,5641],{"class":133},[123,67029,4116],{"class":129},[123,67031,54251],{"class":133},[123,67033,11870],{"class":129},[123,67035,134],{"class":133},[123,67037,6532],{"class":164},[123,67039,11877],{"class":129},[123,67041,3509],{"class":133},[123,67043,67044],{"class":129}," as.",[123,67046,54372],{"class":164},[123,67048,5654],{"class":129},[123,67050,4736],{"class":133},[123,67052,14873],{"class":129},[123,67054,67055],{"class":125,"line":35045},[123,67056,67057],{"class":2673},"      \u002F\u002F console.log(as[i])\n",[123,67059,67060],{"class":125,"line":35051},[123,67061,67062],{"class":2673},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[123,67064,67065,67068,67070,67072,67075,67077,67079],{"class":125,"line":35057},[123,67066,67067],{"class":129},"      as[i].",[123,67069,60215],{"class":337},[123,67071,1315],{"class":129},[123,67073,67074],{"class":143},"'mouseenter'",[123,67076,251],{"class":129},[123,67078,56852],{"class":133},[123,67080,56855],{"class":129},[123,67082,67083],{"class":125,"line":35063},[123,67084,67085],{"class":2673},"        \u002F\u002F console.log('鼠标经过')\n",[123,67087,67088],{"class":125,"line":35069},[123,67089,67090],{"class":2673},"        \u002F\u002F 排他思想  \n",[123,67092,67093],{"class":125,"line":35080},[123,67094,67095],{"class":2673},"        \u002F\u002F 干掉别人 移除类active\n",[123,67097,67098,67100,67102,67104,67107,67109,67111,67113,67116],{"class":125,"line":35086},[123,67099,54329],{"class":129},[123,67101,56802],{"class":337},[123,67103,1315],{"class":129},[123,67105,67106],{"class":143},"'.tab-nav .active'",[123,67108,59405],{"class":129},[123,67110,59408],{"class":337},[123,67112,1315],{"class":129},[123,67114,67115],{"class":143},"'active'",[123,67117,288],{"class":129},[123,67119,67120],{"class":125,"line":35106},[123,67121,67122],{"class":2673},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[123,67124,67125,67128,67131,67133,67135,67137],{"class":125,"line":35112},[123,67126,67127],{"class":164},"        this",[123,67129,67130],{"class":129},".classList.",[123,67132,7767],{"class":337},[123,67134,1315],{"class":129},[123,67136,67115],{"class":143},[123,67138,288],{"class":129},[123,67140,67141],{"class":125,"line":35123},[123,67142,232],{"emptyLinePlaceholder":231},[123,67144,67145],{"class":125,"line":35129},[123,67146,67147],{"class":2673},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[123,67149,67150],{"class":125,"line":35135},[123,67151,67152],{"class":2673},"        \u002F\u002F 干掉别人\n",[123,67154,67155,67157,67159,67161,67164,67166,67168,67170,67172],{"class":125,"line":35141},[123,67156,54329],{"class":129},[123,67158,56802],{"class":337},[123,67160,1315],{"class":129},[123,67162,67163],{"class":143},"'.tab-content .active'",[123,67165,59405],{"class":129},[123,67167,59408],{"class":337},[123,67169,1315],{"class":129},[123,67171,67115],{"class":143},[123,67173,288],{"class":129},[123,67175,67176],{"class":125,"line":35147},[123,67177,67178],{"class":2673},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[123,67180,67181,67183,67185,67187,67190,67192,67194,67196,67198,67200,67202,67204,67206],{"class":125,"line":35153},[123,67182,54329],{"class":129},[123,67184,56802],{"class":337},[123,67186,1315],{"class":129},[123,67188,67189],{"class":143},"`.tab-content .item:nth-child(${",[123,67191,3047],{"class":129},[123,67193,47973],{"class":133},[123,67195,27540],{"class":164},[123,67197,59434],{"class":143},[123,67199,59405],{"class":129},[123,67201,7767],{"class":337},[123,67203,1315],{"class":129},[123,67205,67115],{"class":143},[123,67207,288],{"class":129},[123,67209,67210],{"class":125,"line":35159},[123,67211,232],{"emptyLinePlaceholder":231},[123,67213,67214],{"class":125,"line":35165},[123,67215,67216],{"class":129},"      })\n",[123,67218,67219],{"class":125,"line":35185},[123,67220,4631],{"class":129},[123,67222,67223,67225,67227],{"class":125,"line":35191},[123,67224,54820],{"class":129},[123,67226,54218],{"class":53707},[123,67228,53714],{"class":129},[123,67230,67231,67233,67235],{"class":125,"line":35207},[123,67232,54190],{"class":129},[123,67234,54205],{"class":53707},[123,67236,53714],{"class":129},[123,67238,67239],{"class":125,"line":35213},[123,67240,232],{"emptyLinePlaceholder":231},[123,67242,67243,67245,67247],{"class":125,"line":35227},[123,67244,54190],{"class":129},[123,67246,53042],{"class":53707},[123,67248,53714],{"class":129},[19,67250,67251],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67253,67254],{},"在监听事件中，this指向的就是他的调用者",[19,67256,67257],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67259,56123],{},[19,67261,67262],{},"(function () {",[19,67264,67265],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67267,67268],{},"list.addEventListener('click', function (e) {",[19,67270,67271],{},"if (e.target.tagName === 'A') {",[19,67273,67274],{},"\u002F\u002F 排他思想",[19,67276,67277],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67279,67280],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67282,67283],{},"\u002F\u002F console.log(old);",[19,67285,67286],{},"\u002F\u002F 判断",[19,67288,67289],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67291,67292],{},"if (old) old.classList.remove('active')",[19,67294,67295],{},"e.target.classList.add('active')",[19,67297,3545],{},[19,67299,54867],{},[19,67301,67302],{},"})();",[2587,67304,67306],{"id":67305},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[113,67308,67310],{"className":53040,"code":67309,"language":53042,"meta":118,"style":118},"\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",[120,67311,67312,67322,67326,67334,67338,67352,67366,67378,67386,67392,67402,67412,67416,67420,67427,67439,67450,67467,67480,67494,67504,67508,67512,67519,67530,67548,67558,67570,67574,67578,67585,67602,67613,67625,67629,67633,67640,67652,67656,67664,67672,67676,67684,67692,67700,67715,67759,67767,67780,67793,67806,67814,67822,67830,67858,67866,67878,67891,67904,67912,67920,67928,67954,67962,67975,67987,68000,68008,68016,68024,68050,68058,68071,68083,68096,68104,68112,68120,68125,68145,68150,68170,68175,68192,68197,68205,68210,68239,68252,68256,68260,68265,68269,68297,68302,68319,68324,68329,68334,68339,68365,68369,68373,68381,68389,68393],{"__ignoreMap":118},[123,67313,67314,67316,67318,67320],{"class":125,"line":126},[123,67315,53704],{"class":129},[123,67317,53708],{"class":53707},[123,67319,53711],{"class":337},[123,67321,53714],{"class":129},[123,67323,67324],{"class":125,"line":140},[123,67325,232],{"emptyLinePlaceholder":231},[123,67327,67328,67330,67332],{"class":125,"line":156},[123,67329,3509],{"class":129},[123,67331,53042],{"class":53707},[123,67333,53714],{"class":129},[123,67335,67336],{"class":125,"line":168},[123,67337,232],{"emptyLinePlaceholder":231},[123,67339,67340,67342,67344,67346,67348,67350],{"class":125,"line":268},[123,67341,3509],{"class":129},[123,67343,53741],{"class":53707},[123,67345,53723],{"class":337},[123,67347,134],{"class":129},[123,67349,53728],{"class":143},[123,67351,53714],{"class":129},[123,67353,67354,67356,67358,67360,67362,67364],{"class":125,"line":291},[123,67355,54548],{"class":129},[123,67357,53751],{"class":53707},[123,67359,53754],{"class":337},[123,67361,134],{"class":129},[123,67363,53759],{"class":143},[123,67365,53714],{"class":129},[123,67367,67368,67370,67372,67374,67376],{"class":125,"line":300},[123,67369,54548],{"class":129},[123,67371,642],{"class":53707},[123,67373,57717],{"class":129},[123,67375,642],{"class":53707},[123,67377,53714],{"class":129},[123,67379,67380,67382,67384],{"class":125,"line":305},[123,67381,54548],{"class":129},[123,67383,2526],{"class":53707},[123,67385,53714],{"class":129},[123,67387,67388,67390],{"class":125,"line":316},[123,67389,8836],{"class":53707},[123,67391,137],{"class":129},[123,67393,67394,67396,67398,67400],{"class":125,"line":673},[123,67395,57109],{"class":164},[123,67397,147],{"class":129},[123,67399,2799],{"class":164},[123,67401,3760],{"class":129},[123,67403,67404,67406,67408,67410],{"class":125,"line":692},[123,67405,57098],{"class":164},[123,67407,147],{"class":129},[123,67409,2799],{"class":164},[123,67411,3760],{"class":129},[123,67413,67414],{"class":125,"line":713},[123,67415,4631],{"class":129},[123,67417,67418],{"class":125,"line":718},[123,67419,232],{"emptyLinePlaceholder":231},[123,67421,67422,67425],{"class":125,"line":1138},[123,67423,67424],{"class":53707},"    table",[123,67426,137],{"class":129},[123,67428,67429,67432,67434,67437],{"class":125,"line":1429},[123,67430,67431],{"class":164},"      border-collapse",[123,67433,147],{"class":129},[123,67435,67436],{"class":164},"collapse",[123,67438,3760],{"class":129},[123,67440,67441,67444,67446,67448],{"class":125,"line":1439},[123,67442,67443],{"class":164},"      border-spacing",[123,67445,147],{"class":129},[123,67447,2799],{"class":164},[123,67449,3760],{"class":129},[123,67451,67452,67454,67456,67458,67460,67462,67465],{"class":125,"line":1444},[123,67453,64379],{"class":164},[123,67455,147],{"class":129},[123,67457,2825],{"class":164},[123,67459,53897],{"class":133},[123,67461,53926],{"class":164},[123,67463,67464],{"class":164}," #c0c0c0",[123,67466,3760],{"class":129},[123,67468,67469,67471,67473,67476,67478],{"class":125,"line":1453},[123,67470,57174],{"class":164},[123,67472,147],{"class":129},[123,67474,67475],{"class":164},"500",[123,67477,53897],{"class":133},[123,67479,3760],{"class":129},[123,67481,67482,67484,67486,67488,67490,67492],{"class":125,"line":1458},[123,67483,57109],{"class":164},[123,67485,147],{"class":129},[123,67487,259],{"class":164},[123,67489,53897],{"class":133},[123,67491,53961],{"class":164},[123,67493,3760],{"class":129},[123,67495,67496,67498,67500,67502],{"class":125,"line":1476},[123,67497,59688],{"class":164},[123,67499,147],{"class":129},[123,67501,53997],{"class":164},[123,67503,3760],{"class":129},[123,67505,67506],{"class":125,"line":1494},[123,67507,4631],{"class":129},[123,67509,67510],{"class":125,"line":1499},[123,67511,232],{"emptyLinePlaceholder":231},[123,67513,67514,67517],{"class":125,"line":1517},[123,67515,67516],{"class":53707},"    th",[123,67518,137],{"class":129},[123,67520,67521,67523,67525,67528],{"class":125,"line":1534},[123,67522,57287],{"class":164},[123,67524,147],{"class":129},[123,67526,67527],{"class":164},"#09c",[123,67529,3760],{"class":129},[123,67531,67532,67535,67537,67539,67541,67543,67546],{"class":125,"line":1539},[123,67533,67534],{"class":164},"      font",[123,67536,147],{"class":129},[123,67538,64741],{"class":164},[123,67540,66474],{"class":164},[123,67542,53897],{"class":133},[123,67544,67545],{"class":143}," \"微软雅黑\"",[123,67547,3760],{"class":129},[123,67549,67550,67552,67554,67556],{"class":125,"line":2080},[123,67551,59818],{"class":164},[123,67553,147],{"class":129},[123,67555,63244],{"class":164},[123,67557,3760],{"class":129},[123,67559,67560,67562,67564,67566,67568],{"class":125,"line":2097},[123,67561,57188],{"class":164},[123,67563,147],{"class":129},[123,67565,3402],{"class":164},[123,67567,53897],{"class":133},[123,67569,3760],{"class":129},[123,67571,67572],{"class":125,"line":2114},[123,67573,4631],{"class":129},[123,67575,67576],{"class":125,"line":2125},[123,67577,232],{"emptyLinePlaceholder":231},[123,67579,67580,67583],{"class":125,"line":2130},[123,67581,67582],{"class":53707},"    td",[123,67584,137],{"class":129},[123,67586,67587,67589,67591,67593,67595,67597,67600],{"class":125,"line":5033},[123,67588,64379],{"class":164},[123,67590,147],{"class":129},[123,67592,2825],{"class":164},[123,67594,53897],{"class":133},[123,67596,53926],{"class":164},[123,67598,67599],{"class":164}," #d0d0d0",[123,67601,3760],{"class":129},[123,67603,67604,67606,67608,67611],{"class":125,"line":5041},[123,67605,59818],{"class":164},[123,67607,147],{"class":129},[123,67609,67610],{"class":164},"#404060",[123,67612,3760],{"class":129},[123,67614,67615,67617,67619,67621,67623],{"class":125,"line":5046},[123,67616,57098],{"class":164},[123,67618,147],{"class":129},[123,67620,2193],{"class":164},[123,67622,53897],{"class":133},[123,67624,3760],{"class":129},[123,67626,67627],{"class":125,"line":5052},[123,67628,4631],{"class":129},[123,67630,67631],{"class":125,"line":5058},[123,67632,232],{"emptyLinePlaceholder":231},[123,67634,67635,67638],{"class":125,"line":5063},[123,67636,67637],{"class":337},"    .allCheck",[123,67639,137],{"class":129},[123,67641,67642,67644,67646,67648,67650],{"class":125,"line":10380},[123,67643,57174],{"class":164},[123,67645,147],{"class":129},[123,67647,1068],{"class":164},[123,67649,53897],{"class":133},[123,67651,3760],{"class":129},[123,67653,67654],{"class":125,"line":10404},[123,67655,4631],{"class":129},[123,67657,67658,67660,67662],{"class":125,"line":10409},[123,67659,54820],{"class":129},[123,67661,2526],{"class":53707},[123,67663,53714],{"class":129},[123,67665,67666,67668,67670],{"class":125,"line":10415},[123,67667,54190],{"class":129},[123,67669,53741],{"class":53707},[123,67671,53714],{"class":129},[123,67673,67674],{"class":125,"line":10442},[123,67675,232],{"emptyLinePlaceholder":231},[123,67677,67678,67680,67682],{"class":125,"line":10447},[123,67679,3509],{"class":129},[123,67681,54205],{"class":53707},[123,67683,53714],{"class":129},[123,67685,67686,67688,67690],{"class":125,"line":10453},[123,67687,54548],{"class":129},[123,67689,48],{"class":53707},[123,67691,53714],{"class":129},[123,67693,67694,67696,67698],{"class":125,"line":10465},[123,67695,53748],{"class":129},[123,67697,54],{"class":53707},[123,67699,53714],{"class":129},[123,67701,67702,67704,67706,67708,67710,67713],{"class":125,"line":10477},[123,67703,57637],{"class":129},[123,67705,57],{"class":53707},[123,67707,55889],{"class":337},[123,67709,134],{"class":129},[123,67711,67712],{"class":143},"\"allCheck\"",[123,67714,53714],{"class":129},[123,67716,67717,67719,67721,67723,67725,67727,67729,67731,67733,67735,67737,67740,67743,67745,67747,67749,67752,67755,67757],{"class":125,"line":10489},[123,67718,57705],{"class":129},[123,67720,56224],{"class":53707},[123,67722,56227],{"class":337},[123,67724,134],{"class":129},[123,67726,56232],{"class":143},[123,67728,17350],{"class":337},[123,67730,134],{"class":129},[123,67732,1629],{"class":143},[123,67734,17389],{"class":337},[123,67736,134],{"class":129},[123,67738,67739],{"class":143},"\"checkAll\"",[123,67741,67742],{"class":129},"> \u003C",[123,67744,123],{"class":53707},[123,67746,55889],{"class":337},[123,67748,134],{"class":129},[123,67750,67751],{"class":143},"\"all\"",[123,67753,67754],{"class":129},">全选\u003C\u002F",[123,67756,123],{"class":53707},[123,67758,53714],{"class":129},[123,67760,67761,67763,67765],{"class":125,"line":12148},[123,67762,57810],{"class":129},[123,67764,57],{"class":53707},[123,67766,53714],{"class":129},[123,67768,67769,67771,67773,67776,67778],{"class":125,"line":12173},[123,67770,57637],{"class":129},[123,67772,57],{"class":53707},[123,67774,67775],{"class":129},">商品\u003C\u002F",[123,67777,57],{"class":53707},[123,67779,53714],{"class":129},[123,67781,67782,67784,67786,67789,67791],{"class":125,"line":12196},[123,67783,57637],{"class":129},[123,67785,57],{"class":53707},[123,67787,67788],{"class":129},">商家\u003C\u002F",[123,67790,57],{"class":53707},[123,67792,53714],{"class":129},[123,67794,67795,67797,67799,67802,67804],{"class":125,"line":12220},[123,67796,57637],{"class":129},[123,67798,57],{"class":53707},[123,67800,67801],{"class":129},">价格\u003C\u002F",[123,67803,57],{"class":53707},[123,67805,53714],{"class":129},[123,67807,67808,67810,67812],{"class":125,"line":12225},[123,67809,54181],{"class":129},[123,67811,54],{"class":53707},[123,67813,53714],{"class":129},[123,67815,67816,67818,67820],{"class":125,"line":12230},[123,67817,53748],{"class":129},[123,67819,54],{"class":53707},[123,67821,53714],{"class":129},[123,67823,67824,67826,67828],{"class":125,"line":12235},[123,67825,57637],{"class":129},[123,67827,69],{"class":53707},[123,67829,53714],{"class":129},[123,67831,67832,67834,67836,67838,67840,67842,67844,67846,67849,67851,67853,67856],{"class":125,"line":12244},[123,67833,57705],{"class":129},[123,67835,56224],{"class":53707},[123,67837,56227],{"class":337},[123,67839,134],{"class":129},[123,67841,56232],{"class":143},[123,67843,17350],{"class":337},[123,67845,134],{"class":129},[123,67847,67848],{"class":143},"\"check\"",[123,67850,55889],{"class":337},[123,67852,134],{"class":129},[123,67854,67855],{"class":143},"\"ck\"",[123,67857,53714],{"class":129},[123,67859,67860,67862,67864],{"class":125,"line":12249},[123,67861,57810],{"class":129},[123,67863,69],{"class":53707},[123,67865,53714],{"class":129},[123,67867,67868,67870,67872,67874,67876],{"class":125,"line":12255},[123,67869,57637],{"class":129},[123,67871,69],{"class":53707},[123,67873,63575],{"class":129},[123,67875,69],{"class":53707},[123,67877,53714],{"class":129},[123,67879,67880,67882,67884,67887,67889],{"class":125,"line":12276},[123,67881,57637],{"class":129},[123,67883,69],{"class":53707},[123,67885,67886],{"class":129},">小米\u003C\u002F",[123,67888,69],{"class":53707},[123,67890,53714],{"class":129},[123,67892,67893,67895,67897,67900,67902],{"class":125,"line":12282},[123,67894,57637],{"class":129},[123,67896,69],{"class":53707},[123,67898,67899],{"class":129},">￥1999\u003C\u002F",[123,67901,69],{"class":53707},[123,67903,53714],{"class":129},[123,67905,67906,67908,67910],{"class":125,"line":12296},[123,67907,54181],{"class":129},[123,67909,54],{"class":53707},[123,67911,53714],{"class":129},[123,67913,67914,67916,67918],{"class":125,"line":12302},[123,67915,53748],{"class":129},[123,67917,54],{"class":53707},[123,67919,53714],{"class":129},[123,67921,67922,67924,67926],{"class":125,"line":12329},[123,67923,57637],{"class":129},[123,67925,69],{"class":53707},[123,67927,53714],{"class":129},[123,67929,67930,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950,67952],{"class":125,"line":12338},[123,67931,57705],{"class":129},[123,67933,56224],{"class":53707},[123,67935,56227],{"class":337},[123,67937,134],{"class":129},[123,67939,56232],{"class":143},[123,67941,17350],{"class":337},[123,67943,134],{"class":129},[123,67945,67848],{"class":143},[123,67947,55889],{"class":337},[123,67949,134],{"class":129},[123,67951,67855],{"class":143},[123,67953,53714],{"class":129},[123,67955,67956,67958,67960],{"class":125,"line":12344},[123,67957,57810],{"class":129},[123,67959,69],{"class":53707},[123,67961,53714],{"class":129},[123,67963,67964,67966,67968,67971,67973],{"class":125,"line":12352},[123,67965,57637],{"class":129},[123,67967,69],{"class":53707},[123,67969,67970],{"class":129},">小米净水器\u003C\u002F",[123,67972,69],{"class":53707},[123,67974,53714],{"class":129},[123,67976,67977,67979,67981,67983,67985],{"class":125,"line":12357},[123,67978,57637],{"class":129},[123,67980,69],{"class":53707},[123,67982,67886],{"class":129},[123,67984,69],{"class":53707},[123,67986,53714],{"class":129},[123,67988,67989,67991,67993,67996,67998],{"class":125,"line":19032},[123,67990,57637],{"class":129},[123,67992,69],{"class":53707},[123,67994,67995],{"class":129},">￥4999\u003C\u002F",[123,67997,69],{"class":53707},[123,67999,53714],{"class":129},[123,68001,68002,68004,68006],{"class":125,"line":19038},[123,68003,54181],{"class":129},[123,68005,54],{"class":53707},[123,68007,53714],{"class":129},[123,68009,68010,68012,68014],{"class":125,"line":19061},[123,68011,53748],{"class":129},[123,68013,54],{"class":53707},[123,68015,53714],{"class":129},[123,68017,68018,68020,68022],{"class":125,"line":19067},[123,68019,57637],{"class":129},[123,68021,69],{"class":53707},[123,68023,53714],{"class":129},[123,68025,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048],{"class":125,"line":19090},[123,68027,57705],{"class":129},[123,68029,56224],{"class":53707},[123,68031,56227],{"class":337},[123,68033,134],{"class":129},[123,68035,56232],{"class":143},[123,68037,17350],{"class":337},[123,68039,134],{"class":129},[123,68041,67848],{"class":143},[123,68043,55889],{"class":337},[123,68045,134],{"class":129},[123,68047,67855],{"class":143},[123,68049,53714],{"class":129},[123,68051,68052,68054,68056],{"class":125,"line":19104},[123,68053,57810],{"class":129},[123,68055,69],{"class":53707},[123,68057,53714],{"class":129},[123,68059,68060,68062,68064,68067,68069],{"class":125,"line":19124},[123,68061,57637],{"class":129},[123,68063,69],{"class":53707},[123,68065,68066],{"class":129},">小米电视\u003C\u002F",[123,68068,69],{"class":53707},[123,68070,53714],{"class":129},[123,68072,68073,68075,68077,68079,68081],{"class":125,"line":19130},[123,68074,57637],{"class":129},[123,68076,69],{"class":53707},[123,68078,67886],{"class":129},[123,68080,69],{"class":53707},[123,68082,53714],{"class":129},[123,68084,68085,68087,68089,68092,68094],{"class":125,"line":19141},[123,68086,57637],{"class":129},[123,68088,69],{"class":53707},[123,68090,68091],{"class":129},">￥5999\u003C\u002F",[123,68093,69],{"class":53707},[123,68095,53714],{"class":129},[123,68097,68098,68100,68102],{"class":125,"line":19164},[123,68099,54181],{"class":129},[123,68101,54],{"class":53707},[123,68103,53714],{"class":129},[123,68105,68106,68108,68110],{"class":125,"line":19186},[123,68107,54820],{"class":129},[123,68109,48],{"class":53707},[123,68111,53714],{"class":129},[123,68113,68114,68116,68118],{"class":125,"line":19191},[123,68115,54548],{"class":129},[123,68117,54218],{"class":53707},[123,68119,53714],{"class":129},[123,68121,68122],{"class":125,"line":19197},[123,68123,68124],{"class":2673},"    \u002F\u002F 1. 获取大复选框\n",[123,68126,68127,68129,68132,68134,68136,68138,68140,68143],{"class":125,"line":19211},[123,68128,13653],{"class":133},[123,68130,68131],{"class":164}," checkAll",[123,68133,15995],{"class":133},[123,68135,56799],{"class":129},[123,68137,56802],{"class":337},[123,68139,1315],{"class":129},[123,68141,68142],{"class":143},"'#checkAll'",[123,68144,288],{"class":129},[123,68146,68147],{"class":125,"line":19224},[123,68148,68149],{"class":2673},"    \u002F\u002F 2. 获取所有的小复选框\n",[123,68151,68152,68154,68157,68159,68161,68163,68165,68168],{"class":125,"line":19229},[123,68153,13653],{"class":133},[123,68155,68156],{"class":164}," cks",[123,68158,15995],{"class":133},[123,68160,56799],{"class":129},[123,68162,58083],{"class":337},[123,68164,1315],{"class":129},[123,68166,68167],{"class":143},"'.ck'",[123,68169,288],{"class":129},[123,68171,68172],{"class":125,"line":19243},[123,68173,68174],{"class":2673},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[123,68176,68177,68180,68182,68184,68186,68188,68190],{"class":125,"line":19248},[123,68178,68179],{"class":129},"    checkAll.",[123,68181,60215],{"class":337},[123,68183,1315],{"class":129},[123,68185,60220],{"class":143},[123,68187,251],{"class":129},[123,68189,56852],{"class":133},[123,68191,56855],{"class":129},[123,68193,68194],{"class":125,"line":19254},[123,68195,68196],{"class":2673},"      \u002F\u002F 得到当前大复选框的选中状态\n",[123,68198,68199,68202],{"class":125,"line":19259},[123,68200,68201],{"class":2673},"      \u002F\u002F console.log(checkAll.checked)",[123,68203,68204],{"class":2673},"  \u002F\u002F 得到 是 true 或者是 false\n",[123,68206,68207],{"class":125,"line":19273},[123,68208,68209],{"class":2673},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[123,68211,68212,68214,68216,68218,68220,68222,68224,68226,68228,68231,68233,68235,68237],{"class":125,"line":19278},[123,68213,54687],{"class":133},[123,68215,4116],{"class":129},[123,68217,54251],{"class":133},[123,68219,11870],{"class":129},[123,68221,134],{"class":133},[123,68223,6532],{"class":164},[123,68225,11877],{"class":129},[123,68227,3509],{"class":133},[123,68229,68230],{"class":129}," cks.",[123,68232,54372],{"class":164},[123,68234,5654],{"class":129},[123,68236,4736],{"class":133},[123,68238,14873],{"class":129},[123,68240,68241,68244,68246,68249],{"class":125,"line":19283},[123,68242,68243],{"class":129},"        cks[i].checked ",[123,68245,134],{"class":133},[123,68247,68248],{"class":164}," this",[123,68250,68251],{"class":129},".checked\n",[123,68253,68254],{"class":125,"line":19297},[123,68255,54801],{"class":129},[123,68257,68258],{"class":125,"line":19309},[123,68259,35872],{"class":129},[123,68261,68262],{"class":125,"line":19314},[123,68263,68264],{"class":2673},"    \u002F\u002F 5. 小复选框控制大复选框\n",[123,68266,68267],{"class":125,"line":19327},[123,68268,232],{"emptyLinePlaceholder":231},[123,68270,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68293,68295],{"class":125,"line":19332},[123,68272,5641],{"class":133},[123,68274,4116],{"class":129},[123,68276,54251],{"class":133},[123,68278,11870],{"class":129},[123,68280,134],{"class":133},[123,68282,6532],{"class":164},[123,68284,11877],{"class":129},[123,68286,3509],{"class":133},[123,68288,68230],{"class":129},[123,68290,54372],{"class":164},[123,68292,5654],{"class":129},[123,68294,4736],{"class":133},[123,68296,14873],{"class":129},[123,68298,68299],{"class":125,"line":19337},[123,68300,68301],{"class":2673},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[123,68303,68304,68307,68309,68311,68313,68315,68317],{"class":125,"line":19342},[123,68305,68306],{"class":129},"      cks[i].",[123,68308,60215],{"class":337},[123,68310,1315],{"class":129},[123,68312,60220],{"class":143},[123,68314,251],{"class":129},[123,68316,56852],{"class":133},[123,68318,56855],{"class":129},[123,68320,68321],{"class":125,"line":19355},[123,68322,68323],{"class":2673},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[123,68325,68326],{"class":125,"line":19360},[123,68327,68328],{"class":2673},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[123,68330,68331],{"class":125,"line":35045},[123,68332,68333],{"class":2673},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[123,68335,68336],{"class":125,"line":35051},[123,68337,68338],{"class":2673},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[123,68340,68341,68344,68346,68348,68350,68352,68355,68357,68359,68361,68363],{"class":125,"line":35057},[123,68342,68343],{"class":129},"        checkAll.checked ",[123,68345,134],{"class":133},[123,68347,56799],{"class":129},[123,68349,58083],{"class":337},[123,68351,1315],{"class":129},[123,68353,68354],{"class":143},"'.ck:checked'",[123,68356,33241],{"class":129},[123,68358,54372],{"class":164},[123,68360,60308],{"class":133},[123,68362,68230],{"class":129},[123,68364,58233],{"class":164},[123,68366,68367],{"class":125,"line":35063},[123,68368,67216],{"class":129},[123,68370,68371],{"class":125,"line":35069},[123,68372,4631],{"class":129},[123,68374,68375,68377,68379],{"class":125,"line":35080},[123,68376,54820],{"class":129},[123,68378,54218],{"class":53707},[123,68380,53714],{"class":129},[123,68382,68383,68385,68387],{"class":125,"line":35086},[123,68384,54190],{"class":129},[123,68386,54205],{"class":53707},[123,68388,53714],{"class":129},[123,68390,68391],{"class":125,"line":35106},[123,68392,232],{"emptyLinePlaceholder":231},[123,68394,68395,68397,68399],{"class":125,"line":35112},[123,68396,54190],{"class":129},[123,68398,53042],{"class":53707},[123,68400,53714],{"class":129},[19,68402,68403],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68405,68406],{},"用好之间比较得到的布尔值！！！",[19,68408,68409,68410,68413,68414,4116,68417,3187,68419,68422],{},"在 JS 里访问的时候，",[120,68411,68412],{},"checkbox.checked"," 是一个 ",[2759,68415,68416],{},"布尔值",[120,68418,3829],{},[120,68420,68421],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68424,68425,68426,68429,68430],{},"HTML 的 ",[120,68427,68428],{},"checked=\"checked\""," 只是 ",[2759,68431,68432,68433,68436],{},"初始值；JS 的 ",[120,68434,68435],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68438,68439],{},"：checked是一个伪类选择器",[19,68441,68442],{},[3929,68443],{"alt":118,"src":68444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68446,68447,68450],{},[68448,68449],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68452,68453],{},[3929,68454],{"alt":118,"src":68455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68457,68459],{"id":68458},"_33-dom事件进阶","3.3 DOM事件进阶",[2587,68461,68463],{"id":68462},"_331-事件流","3.3.1 事件流",[19,68465,68466],{},[3929,68467],{"alt":118,"src":68468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24425,68470,68472],{"id":68471},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68474,68475],{},[3929,68476],{"alt":118,"src":68477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[113,68479,68481],{"className":53040,"code":68480,"language":53042,"meta":118,"style":118},"\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",[120,68482,68483,68493,68507,68511,68519,68533,68553,68565,68573,68580,68592,68604,68614,68618,68622,68629,68641,68653,68663,68667,68675,68683,68687,68695,68710,68729,68737,68745,68765,68785,68801,68812,68820,68837,68848,68856,68873,68884,68892,68900,68908,68912],{"__ignoreMap":118},[123,68484,68485,68487,68489,68491],{"class":125,"line":126},[123,68486,53704],{"class":129},[123,68488,53708],{"class":53707},[123,68490,53711],{"class":337},[123,68492,53714],{"class":129},[123,68494,68495,68497,68499,68501,68503,68505],{"class":125,"line":140},[123,68496,3509],{"class":129},[123,68498,53042],{"class":53707},[123,68500,53723],{"class":337},[123,68502,134],{"class":129},[123,68504,53728],{"class":143},[123,68506,53714],{"class":129},[123,68508,68509],{"class":125,"line":156},[123,68510,232],{"emptyLinePlaceholder":231},[123,68512,68513,68515,68517],{"class":125,"line":168},[123,68514,3509],{"class":129},[123,68516,53741],{"class":53707},[123,68518,53714],{"class":129},[123,68520,68521,68523,68525,68527,68529,68531],{"class":125,"line":268},[123,68522,54548],{"class":129},[123,68524,53751],{"class":53707},[123,68526,53754],{"class":337},[123,68528,134],{"class":129},[123,68530,53759],{"class":143},[123,68532,53714],{"class":129},[123,68534,68535,68537,68539,68541,68543,68545,68547,68549,68551],{"class":125,"line":291},[123,68536,54548],{"class":129},[123,68538,53751],{"class":53707},[123,68540,17350],{"class":337},[123,68542,134],{"class":129},[123,68544,53798],{"class":143},[123,68546,53778],{"class":337},[123,68548,134],{"class":129},[123,68550,53805],{"class":143},[123,68552,53714],{"class":129},[123,68554,68555,68557,68559,68561,68563],{"class":125,"line":300},[123,68556,54548],{"class":129},[123,68558,642],{"class":53707},[123,68560,53816],{"class":129},[123,68562,642],{"class":53707},[123,68564,53714],{"class":129},[123,68566,68567,68569,68571],{"class":125,"line":305},[123,68568,54548],{"class":129},[123,68570,2526],{"class":53707},[123,68572,53714],{"class":129},[123,68574,68575,68578],{"class":125,"line":316},[123,68576,68577],{"class":337},"    .father",[123,68579,137],{"class":129},[123,68581,68582,68584,68586,68588,68590],{"class":125,"line":673},[123,68583,57174],{"class":164},[123,68585,147],{"class":129},[123,68587,67475],{"class":164},[123,68589,53897],{"class":133},[123,68591,3760],{"class":129},[123,68593,68594,68596,68598,68600,68602],{"class":125,"line":692},[123,68595,57188],{"class":164},[123,68597,147],{"class":129},[123,68599,67475],{"class":164},[123,68601,53897],{"class":133},[123,68603,3760],{"class":129},[123,68605,68606,68608,68610,68612],{"class":125,"line":713},[123,68607,57287],{"class":164},[123,68609,147],{"class":129},[123,68611,54050],{"class":164},[123,68613,3760],{"class":129},[123,68615,68616],{"class":125,"line":718},[123,68617,4631],{"class":129},[123,68619,68620],{"class":125,"line":1138},[123,68621,232],{"emptyLinePlaceholder":231},[123,68623,68624,68627],{"class":125,"line":1429},[123,68625,68626],{"class":337},"    .son",[123,68628,137],{"class":129},[123,68630,68631,68633,68635,68637,68639],{"class":125,"line":1439},[123,68632,57174],{"class":164},[123,68634,147],{"class":129},[123,68636,1045],{"class":164},[123,68638,53897],{"class":133},[123,68640,3760],{"class":129},[123,68642,68643,68645,68647,68649,68651],{"class":125,"line":1444},[123,68644,57188],{"class":164},[123,68646,147],{"class":129},[123,68648,1045],{"class":164},[123,68650,53897],{"class":133},[123,68652,3760],{"class":129},[123,68654,68655,68657,68659,68661],{"class":125,"line":1453},[123,68656,57287],{"class":164},[123,68658,147],{"class":129},[123,68660,57292],{"class":164},[123,68662,3760],{"class":129},[123,68664,68665],{"class":125,"line":1458},[123,68666,4631],{"class":129},[123,68668,68669,68671,68673],{"class":125,"line":1476},[123,68670,54820],{"class":129},[123,68672,2526],{"class":53707},[123,68674,53714],{"class":129},[123,68676,68677,68679,68681],{"class":125,"line":1494},[123,68678,54190],{"class":129},[123,68680,53741],{"class":53707},[123,68682,53714],{"class":129},[123,68684,68685],{"class":125,"line":1499},[123,68686,232],{"emptyLinePlaceholder":231},[123,68688,68689,68691,68693],{"class":125,"line":1517},[123,68690,3509],{"class":129},[123,68692,54205],{"class":53707},[123,68694,53714],{"class":129},[123,68696,68697,68699,68701,68703,68705,68708],{"class":125,"line":1534},[123,68698,54548],{"class":129},[123,68700,54016],{"class":53707},[123,68702,55889],{"class":337},[123,68704,134],{"class":129},[123,68706,68707],{"class":143},"\"father\"",[123,68709,53714],{"class":129},[123,68711,68712,68714,68716,68718,68720,68723,68725,68727],{"class":125,"line":1539},[123,68713,53748],{"class":129},[123,68715,54016],{"class":53707},[123,68717,55889],{"class":337},[123,68719,134],{"class":129},[123,68721,68722],{"class":143},"\"son\"",[123,68724,57717],{"class":129},[123,68726,54016],{"class":53707},[123,68728,53714],{"class":129},[123,68730,68731,68733,68735],{"class":125,"line":2080},[123,68732,54820],{"class":129},[123,68734,54016],{"class":53707},[123,68736,53714],{"class":129},[123,68738,68739,68741,68743],{"class":125,"line":2097},[123,68740,54548],{"class":129},[123,68742,54218],{"class":53707},[123,68744,53714],{"class":129},[123,68746,68747,68749,68752,68754,68756,68758,68760,68763],{"class":125,"line":2114},[123,68748,13653],{"class":133},[123,68750,68751],{"class":164}," fa",[123,68753,15995],{"class":133},[123,68755,56799],{"class":129},[123,68757,56802],{"class":337},[123,68759,1315],{"class":129},[123,68761,68762],{"class":143},"'.father'",[123,68764,288],{"class":129},[123,68766,68767,68769,68772,68774,68776,68778,68780,68783],{"class":125,"line":2125},[123,68768,13653],{"class":133},[123,68770,68771],{"class":164}," son",[123,68773,15995],{"class":133},[123,68775,56799],{"class":129},[123,68777,56802],{"class":337},[123,68779,1315],{"class":129},[123,68781,68782],{"class":143},"'.son'",[123,68784,288],{"class":129},[123,68786,68787,68789,68791,68793,68795,68797,68799],{"class":125,"line":2130},[123,68788,54810],{"class":129},[123,68790,60215],{"class":337},[123,68792,1315],{"class":129},[123,68794,60220],{"class":143},[123,68796,251],{"class":129},[123,68798,56852],{"class":133},[123,68800,56855],{"class":129},[123,68802,68803,68805,68807,68810],{"class":125,"line":5033},[123,68804,61327],{"class":337},[123,68806,1315],{"class":129},[123,68808,68809],{"class":143},"'woshiu1'",[123,68811,288],{"class":129},[123,68813,68814,68816,68818],{"class":125,"line":5041},[123,68815,56938],{"class":129},[123,68817,3829],{"class":164},[123,68819,288],{"class":129},[123,68821,68822,68825,68827,68829,68831,68833,68835],{"class":125,"line":5046},[123,68823,68824],{"class":129},"    fa.",[123,68826,60215],{"class":337},[123,68828,1315],{"class":129},[123,68830,60220],{"class":143},[123,68832,251],{"class":129},[123,68834,56852],{"class":133},[123,68836,56855],{"class":129},[123,68838,68839,68841,68843,68846],{"class":125,"line":5052},[123,68840,61327],{"class":337},[123,68842,1315],{"class":129},[123,68844,68845],{"class":143},"'1'",[123,68847,288],{"class":129},[123,68849,68850,68852,68854],{"class":125,"line":5058},[123,68851,56938],{"class":129},[123,68853,3829],{"class":164},[123,68855,288],{"class":129},[123,68857,68858,68861,68863,68865,68867,68869,68871],{"class":125,"line":5063},[123,68859,68860],{"class":129},"    son.",[123,68862,60215],{"class":337},[123,68864,1315],{"class":129},[123,68866,60220],{"class":143},[123,68868,251],{"class":129},[123,68870,56852],{"class":133},[123,68872,56855],{"class":129},[123,68874,68875,68877,68879,68882],{"class":125,"line":10380},[123,68876,61327],{"class":337},[123,68878,1315],{"class":129},[123,68880,68881],{"class":143},"'2'",[123,68883,288],{"class":129},[123,68885,68886,68888,68890],{"class":125,"line":10404},[123,68887,56938],{"class":129},[123,68889,3829],{"class":164},[123,68891,288],{"class":129},[123,68893,68894,68896,68898],{"class":125,"line":10409},[123,68895,54820],{"class":129},[123,68897,54218],{"class":53707},[123,68899,53714],{"class":129},[123,68901,68902,68904,68906],{"class":125,"line":10415},[123,68903,54190],{"class":129},[123,68905,54205],{"class":53707},[123,68907,53714],{"class":129},[123,68909,68910],{"class":125,"line":10442},[123,68911,232],{"emptyLinePlaceholder":231},[123,68913,68914,68916,68918],{"class":125,"line":10447},[123,68915,54190],{"class":129},[123,68917,53042],{"class":53707},[123,68919,53714],{"class":129},[19,68921,68922],{},[3929,68923],{"alt":118,"src":68924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68926,68927],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24425,68929,68931],{"id":68930},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68933,68934],{},[3929,68935],{"alt":118,"src":68936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68938,68939],{},"反着来",[19,68941,68942],{},"注意是同名事件，比如都是‘click’",[24425,68944,68946],{"id":68945},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68948,68949],{},[3929,68950],{"alt":118,"src":68951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24425,68953,68955],{"id":68954},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68957,68958],{},[3929,68959],{"alt":118,"src":68960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68962,68963],{},[3929,68964],{"alt":118,"src":68965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24425,68967,68969],{"id":68968},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68971,68972],{},[29,68973,68974],{},"事件类型的区别",[19,68976,68977],{},[3929,68978],{"alt":118,"src":68979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68981,68982],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68984,68985],{"start":140},[29,68986,68987],{},"注册事件的区别",[19,68989,68990],{},[3929,68991],{"alt":118,"src":68992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24425,68994,68996],{"id":68995},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68998,68999],{},[3929,69000],{"alt":118,"src":69001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,69003,69004],{},[3929,69005],{"alt":118,"src":69006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[113,69008,69010],{"className":55470,"code":69009,"language":55472,"meta":118,"style":118},"\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",[120,69011,69012,69020,69037,69060,69068,69073,69078,69083,69087,69095,69103],{"__ignoreMap":118},[123,69013,69014,69016,69018],{"class":125,"line":126},[123,69015,3509],{"class":129},[123,69017,54205],{"class":53707},[123,69019,53714],{"class":129},[123,69021,69022,69024,69027,69030,69032,69035],{"class":125,"line":140},[123,69023,54548],{"class":129},[123,69025,69026],{"class":53707},"form",[123,69028,69029],{"class":337}," action",[123,69031,134],{"class":129},[123,69033,69034],{"class":143},"\"http:\u002F\u002Fwww.itcast.cn\"",[123,69036,53714],{"class":129},[123,69038,69039,69041,69043,69045,69047,69050,69053,69055,69058],{"class":125,"line":156},[123,69040,53748],{"class":129},[123,69042,56224],{"class":53707},[123,69044,56227],{"class":337},[123,69046,134],{"class":129},[123,69048,69049],{"class":143},"\"submit\"",[123,69051,69052],{"class":337}," value",[123,69054,134],{"class":129},[123,69056,69057],{"class":143},"\"免费注册\"",[123,69059,53714],{"class":129},[123,69061,69062,69064,69066],{"class":125,"line":168},[123,69063,53748],{"class":129},[123,69065,54218],{"class":53707},[123,69067,53714],{"class":129},[123,69069,69070],{"class":125,"line":268},[123,69071,69072],{"class":129},"      const form = document.querySelector('form')\n",[123,69074,69075],{"class":125,"line":291},[123,69076,69077],{"class":129},"      form.addEventListener('submit', function (e) {\n",[123,69079,69080],{"class":125,"line":300},[123,69081,69082],{"class":129},"        e.preventDefault()\n",[123,69084,69085],{"class":125,"line":305},[123,69086,67216],{"class":129},[123,69088,69089,69091,69093],{"class":125,"line":316},[123,69090,54181],{"class":129},[123,69092,54218],{"class":53707},[123,69094,53714],{"class":129},[123,69096,69097,69099,69101],{"class":125,"line":673},[123,69098,54820],{"class":129},[123,69100,69026],{"class":53707},[123,69102,53714],{"class":129},[123,69104,69105,69107,69109],{"class":125,"line":692},[123,69106,54190],{"class":129},[123,69108,54205],{"class":53707},[123,69110,53714],{"class":129},[19,69112,69113],{},"点击不在跳转！！！",[2587,69115,69117],{"id":69116},"_332-事件委托","3.3.2 事件委托",[19,69119,69120],{},[3929,69121],{"alt":118,"src":69122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[113,69124,69126],{"className":53040,"code":69125,"language":53042,"meta":118,"style":118},"\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",[120,69127,69128,69138,69152,69156,69164,69178,69198,69210,69218,69222,69230,69238,69250,69262,69274,69286,69298,69311,69319,69327,69332,69351,69372,69377,69382,69387,69392,69401,69405,69415,69419,69424,69429,69443,69453,69457,69461,69469,69477,69481],{"__ignoreMap":118},[123,69129,69130,69132,69134,69136],{"class":125,"line":126},[123,69131,53704],{"class":129},[123,69133,53708],{"class":53707},[123,69135,53711],{"class":337},[123,69137,53714],{"class":129},[123,69139,69140,69142,69144,69146,69148,69150],{"class":125,"line":140},[123,69141,3509],{"class":129},[123,69143,53042],{"class":53707},[123,69145,53723],{"class":337},[123,69147,134],{"class":129},[123,69149,53728],{"class":143},[123,69151,53714],{"class":129},[123,69153,69154],{"class":125,"line":156},[123,69155,232],{"emptyLinePlaceholder":231},[123,69157,69158,69160,69162],{"class":125,"line":168},[123,69159,3509],{"class":129},[123,69161,53741],{"class":53707},[123,69163,53714],{"class":129},[123,69165,69166,69168,69170,69172,69174,69176],{"class":125,"line":268},[123,69167,54548],{"class":129},[123,69169,53751],{"class":53707},[123,69171,53754],{"class":337},[123,69173,134],{"class":129},[123,69175,53759],{"class":143},[123,69177,53714],{"class":129},[123,69179,69180,69182,69184,69186,69188,69190,69192,69194,69196],{"class":125,"line":291},[123,69181,54548],{"class":129},[123,69183,53751],{"class":53707},[123,69185,17350],{"class":337},[123,69187,134],{"class":129},[123,69189,53798],{"class":143},[123,69191,53778],{"class":337},[123,69193,134],{"class":129},[123,69195,53805],{"class":143},[123,69197,53714],{"class":129},[123,69199,69200,69202,69204,69206,69208],{"class":125,"line":300},[123,69201,54548],{"class":129},[123,69203,642],{"class":53707},[123,69205,53816],{"class":129},[123,69207,642],{"class":53707},[123,69209,53714],{"class":129},[123,69211,69212,69214,69216],{"class":125,"line":305},[123,69213,54190],{"class":129},[123,69215,53741],{"class":53707},[123,69217,53714],{"class":129},[123,69219,69220],{"class":125,"line":316},[123,69221,232],{"emptyLinePlaceholder":231},[123,69223,69224,69226,69228],{"class":125,"line":673},[123,69225,3509],{"class":129},[123,69227,54205],{"class":53707},[123,69229,53714],{"class":129},[123,69231,69232,69234,69236],{"class":125,"line":692},[123,69233,54548],{"class":129},[123,69235,3606],{"class":53707},[123,69237,53714],{"class":129},[123,69239,69240,69242,69244,69246,69248],{"class":125,"line":713},[123,69241,53748],{"class":129},[123,69243,29],{"class":53707},[123,69245,56369],{"class":129},[123,69247,29],{"class":53707},[123,69249,53714],{"class":129},[123,69251,69252,69254,69256,69258,69260],{"class":125,"line":718},[123,69253,53748],{"class":129},[123,69255,29],{"class":53707},[123,69257,56388],{"class":129},[123,69259,29],{"class":53707},[123,69261,53714],{"class":129},[123,69263,69264,69266,69268,69270,69272],{"class":125,"line":1138},[123,69265,53748],{"class":129},[123,69267,29],{"class":53707},[123,69269,56407],{"class":129},[123,69271,29],{"class":53707},[123,69273,53714],{"class":129},[123,69275,69276,69278,69280,69282,69284],{"class":125,"line":1429},[123,69277,53748],{"class":129},[123,69279,29],{"class":53707},[123,69281,56426],{"class":129},[123,69283,29],{"class":53707},[123,69285,53714],{"class":129},[123,69287,69288,69290,69292,69294,69296],{"class":125,"line":1439},[123,69289,53748],{"class":129},[123,69291,29],{"class":53707},[123,69293,56445],{"class":129},[123,69295,29],{"class":53707},[123,69297,53714],{"class":129},[123,69299,69300,69302,69304,69307,69309],{"class":125,"line":1444},[123,69301,53748],{"class":129},[123,69303,19],{"class":53707},[123,69305,69306],{"class":129},">我不需要变色\u003C\u002F",[123,69308,19],{"class":53707},[123,69310,53714],{"class":129},[123,69312,69313,69315,69317],{"class":125,"line":1453},[123,69314,54820],{"class":129},[123,69316,3606],{"class":53707},[123,69318,53714],{"class":129},[123,69320,69321,69323,69325],{"class":125,"line":1458},[123,69322,54548],{"class":129},[123,69324,54218],{"class":53707},[123,69326,53714],{"class":129},[123,69328,69329],{"class":125,"line":1476},[123,69330,69331],{"class":2673},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[123,69333,69334,69336,69338,69340,69342,69344,69346,69349],{"class":125,"line":1494},[123,69335,13653],{"class":133},[123,69337,63694],{"class":164},[123,69339,15995],{"class":133},[123,69341,56799],{"class":129},[123,69343,56802],{"class":337},[123,69345,1315],{"class":129},[123,69347,69348],{"class":143},"'ul'",[123,69350,288],{"class":129},[123,69352,69353,69356,69358,69360,69362,69364,69366,69368,69370],{"class":125,"line":1499},[123,69354,69355],{"class":129},"    ul.",[123,69357,60215],{"class":337},[123,69359,1315],{"class":129},[123,69361,60220],{"class":143},[123,69363,251],{"class":129},[123,69365,56852],{"class":133},[123,69367,4116],{"class":129},[123,69369,2689],{"class":279},[123,69371,14873],{"class":129},[123,69373,69374],{"class":125,"line":1517},[123,69375,69376],{"class":2673},"      \u002F\u002F alert(1)\n",[123,69378,69379],{"class":125,"line":1534},[123,69380,69381],{"class":2673},"      \u002F\u002F e.target就是我们点击的对象\n",[123,69383,69384],{"class":125,"line":1539},[123,69385,69386],{"class":2673},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[123,69388,69389],{"class":125,"line":2080},[123,69390,69391],{"class":2673},"      \u002F\u002F e.target.style.color = 'red'\n",[123,69393,69394,69396,69398],{"class":125,"line":2097},[123,69395,60646],{"class":129},[123,69397,60649],{"class":337},[123,69399,69400],{"class":129},"(e)\n",[123,69402,69403],{"class":125,"line":2114},[123,69404,232],{"emptyLinePlaceholder":231},[123,69406,69407,69409,69412],{"class":125,"line":2125},[123,69408,60646],{"class":129},[123,69410,69411],{"class":337},"dir",[123,69413,69414],{"class":129},"(e.target)\n",[123,69416,69417],{"class":125,"line":2130},[123,69418,232],{"emptyLinePlaceholder":231},[123,69420,69421],{"class":125,"line":5033},[123,69422,69423],{"class":2673},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[123,69425,69426],{"class":125,"line":5041},[123,69427,69428],{"class":2673},"      \u002F\u002F 通过tagName来进行判断\n",[123,69430,69431,69433,69436,69438,69441],{"class":125,"line":5046},[123,69432,56883],{"class":133},[123,69434,69435],{"class":129}," (e.target.tagName ",[123,69437,56889],{"class":133},[123,69439,69440],{"class":143}," 'LI'",[123,69442,14873],{"class":129},[123,69444,69445,69448,69450],{"class":125,"line":5052},[123,69446,69447],{"class":129},"        e.target.style.color ",[123,69449,134],{"class":133},[123,69451,69452],{"class":143}," 'red'\n",[123,69454,69455],{"class":125,"line":5058},[123,69456,54801],{"class":129},[123,69458,69459],{"class":125,"line":5063},[123,69460,35872],{"class":129},[123,69462,69463,69465,69467],{"class":125,"line":10380},[123,69464,54820],{"class":129},[123,69466,54218],{"class":53707},[123,69468,53714],{"class":129},[123,69470,69471,69473,69475],{"class":125,"line":10404},[123,69472,54190],{"class":129},[123,69474,54205],{"class":53707},[123,69476,53714],{"class":129},[123,69478,69479],{"class":125,"line":10409},[123,69480,232],{"emptyLinePlaceholder":231},[123,69482,69483,69485,69487],{"class":125,"line":10415},[123,69484,54190],{"class":129},[123,69486,53042],{"class":53707},[123,69488,53714],{"class":129},[19,69490,69491],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69493,69494],{},"if(e.target.ragName==='P') {}",[19,69496,69497],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69499,69500],{},"通过事件委托的方式实现tab栏切换改造：",[19,69502,69503],{},"一定要记住自定义属性！！！！！！",[19,69505,69506],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69508,69509],{},"id是自定义的属性名",[19,69511,69512],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[113,69514,69516],{"className":53040,"code":69515,"language":53042,"meta":118,"style":118},"\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",[120,69517,69518,69528,69542,69546,69554,69568,69588,69608,69620,69628,69634,69644,69654,69658,69662,69668,69680,69692,69704,69720,69724,69728,69734,69746,69758,69770,69780,69790,69794,69798,69806,69818,69828,69840,69844,69848,69856,69866,69876,69886,69890,69894,69904,69918,69930,69934,69938,69950,69960,69976,69986,69990,69994,70008,70018,70028,70032,70036,70042,70056,70060,70064,70072,70082,70086,70090,70099,70109,70113,70121,70129,70133,70141,70155,70169,70181,70189,70228,70260,70292,70324,70356,70364,70372,70386,70420,70454,70488,70522,70556,70564,70572,70580,70585,70590,70609,70614,70634,70642,70647,70660,70681,70694,70698,70703,70708,70721,70741,70769,70773,70777,70781,70789,70797,70801],{"__ignoreMap":118},[123,69519,69520,69522,69524,69526],{"class":125,"line":126},[123,69521,53704],{"class":129},[123,69523,53708],{"class":53707},[123,69525,53711],{"class":337},[123,69527,53714],{"class":129},[123,69529,69530,69532,69534,69536,69538,69540],{"class":125,"line":140},[123,69531,3509],{"class":129},[123,69533,53042],{"class":53707},[123,69535,53723],{"class":337},[123,69537,134],{"class":129},[123,69539,53728],{"class":143},[123,69541,53714],{"class":129},[123,69543,69544],{"class":125,"line":156},[123,69545,232],{"emptyLinePlaceholder":231},[123,69547,69548,69550,69552],{"class":125,"line":168},[123,69549,3509],{"class":129},[123,69551,53741],{"class":53707},[123,69553,53714],{"class":129},[123,69555,69556,69558,69560,69562,69564,69566],{"class":125,"line":268},[123,69557,54548],{"class":129},[123,69559,53751],{"class":53707},[123,69561,53754],{"class":337},[123,69563,134],{"class":129},[123,69565,53759],{"class":143},[123,69567,61529],{"class":129},[123,69569,69570,69572,69574,69576,69578,69580,69582,69584,69586],{"class":125,"line":291},[123,69571,54548],{"class":129},[123,69573,53751],{"class":53707},[123,69575,53770],{"class":337},[123,69577,134],{"class":129},[123,69579,53775],{"class":143},[123,69581,53778],{"class":337},[123,69583,134],{"class":129},[123,69585,53783],{"class":143},[123,69587,61529],{"class":129},[123,69589,69590,69592,69594,69596,69598,69600,69602,69604,69606],{"class":125,"line":300},[123,69591,54548],{"class":129},[123,69593,53751],{"class":53707},[123,69595,17350],{"class":337},[123,69597,134],{"class":129},[123,69599,53798],{"class":143},[123,69601,53778],{"class":337},[123,69603,134],{"class":129},[123,69605,53805],{"class":143},[123,69607,61529],{"class":129},[123,69609,69610,69612,69614,69616,69618],{"class":125,"line":305},[123,69611,54548],{"class":129},[123,69613,642],{"class":53707},[123,69615,66026],{"class":129},[123,69617,642],{"class":53707},[123,69619,53714],{"class":129},[123,69621,69622,69624,69626],{"class":125,"line":316},[123,69623,54548],{"class":129},[123,69625,2526],{"class":53707},[123,69627,53714],{"class":129},[123,69629,69630,69632],{"class":125,"line":673},[123,69631,8836],{"class":53707},[123,69633,137],{"class":129},[123,69635,69636,69638,69640,69642],{"class":125,"line":692},[123,69637,57109],{"class":164},[123,69639,147],{"class":129},[123,69641,2799],{"class":164},[123,69643,3760],{"class":129},[123,69645,69646,69648,69650,69652],{"class":125,"line":713},[123,69647,57098],{"class":164},[123,69649,147],{"class":129},[123,69651,2799],{"class":164},[123,69653,3760],{"class":129},[123,69655,69656],{"class":125,"line":718},[123,69657,4631],{"class":129},[123,69659,69660],{"class":125,"line":1138},[123,69661,232],{"emptyLinePlaceholder":231},[123,69663,69664,69666],{"class":125,"line":1429},[123,69665,66077],{"class":337},[123,69667,137],{"class":129},[123,69669,69670,69672,69674,69676,69678],{"class":125,"line":1439},[123,69671,57174],{"class":164},[123,69673,147],{"class":129},[123,69675,66088],{"class":164},[123,69677,53897],{"class":133},[123,69679,3760],{"class":129},[123,69681,69682,69684,69686,69688,69690],{"class":125,"line":1444},[123,69683,57188],{"class":164},[123,69685,147],{"class":129},[123,69687,66101],{"class":164},[123,69689,53897],{"class":133},[123,69691,3760],{"class":129},[123,69693,69694,69696,69698,69700,69702],{"class":125,"line":1453},[123,69695,57109],{"class":164},[123,69697,147],{"class":129},[123,69699,3302],{"class":164},[123,69701,53897],{"class":133},[123,69703,3760],{"class":129},[123,69705,69706,69708,69710,69712,69714,69716,69718],{"class":125,"line":1458},[123,69707,64379],{"class":164},[123,69709,147],{"class":129},[123,69711,2825],{"class":164},[123,69713,53897],{"class":133},[123,69715,53926],{"class":164},[123,69717,64646],{"class":164},[123,69719,3760],{"class":129},[123,69721,69722],{"class":125,"line":1476},[123,69723,4631],{"class":129},[123,69725,69726],{"class":125,"line":1494},[123,69727,232],{"emptyLinePlaceholder":231},[123,69729,69730,69732],{"class":125,"line":1499},[123,69731,66146],{"class":337},[123,69733,137],{"class":129},[123,69735,69736,69738,69740,69742,69744],{"class":125,"line":1517},[123,69737,57174],{"class":164},[123,69739,147],{"class":129},[123,69741,259],{"class":164},[123,69743,2935],{"class":133},[123,69745,3760],{"class":129},[123,69747,69748,69750,69752,69754,69756],{"class":125,"line":1534},[123,69749,57188],{"class":164},[123,69751,147],{"class":129},[123,69753,3506],{"class":164},[123,69755,53897],{"class":133},[123,69757,3760],{"class":129},[123,69759,69760,69762,69764,69766,69768],{"class":125,"line":1539},[123,69761,59761],{"class":164},[123,69763,147],{"class":129},[123,69765,3506],{"class":164},[123,69767,53897],{"class":133},[123,69769,3760],{"class":129},[123,69771,69772,69774,69776,69778],{"class":125,"line":2080},[123,69773,57412],{"class":164},[123,69775,147],{"class":129},[123,69777,53882],{"class":164},[123,69779,3760],{"class":129},[123,69781,69782,69784,69786,69788],{"class":125,"line":2097},[123,69783,57423],{"class":164},[123,69785,147],{"class":129},[123,69787,54073],{"class":164},[123,69789,3760],{"class":129},[123,69791,69792],{"class":125,"line":2114},[123,69793,4631],{"class":129},[123,69795,69796],{"class":125,"line":2125},[123,69797,232],{"emptyLinePlaceholder":231},[123,69799,69800,69802,69804],{"class":125,"line":2130},[123,69801,66146],{"class":337},[123,69803,66219],{"class":53707},[123,69805,137],{"class":129},[123,69807,69808,69810,69812,69814,69816],{"class":125,"line":5033},[123,69809,57325],{"class":164},[123,69811,147],{"class":129},[123,69813,3402],{"class":164},[123,69815,53897],{"class":133},[123,69817,3760],{"class":129},[123,69819,69820,69822,69824,69826],{"class":125,"line":5041},[123,69821,64736],{"class":164},[123,69823,147],{"class":129},[123,69825,66242],{"class":164},[123,69827,3760],{"class":129},[123,69829,69830,69832,69834,69836,69838],{"class":125,"line":5046},[123,69831,64402],{"class":164},[123,69833,147],{"class":129},[123,69835,3302],{"class":164},[123,69837,53897],{"class":133},[123,69839,3760],{"class":129},[123,69841,69842],{"class":125,"line":5052},[123,69843,4631],{"class":129},[123,69845,69846],{"class":125,"line":5058},[123,69847,232],{"emptyLinePlaceholder":231},[123,69849,69850,69852,69854],{"class":125,"line":5063},[123,69851,66146],{"class":337},[123,69853,63694],{"class":53707},[123,69855,137],{"class":129},[123,69857,69858,69860,69862,69864],{"class":125,"line":10380},[123,69859,57135],{"class":164},[123,69861,147],{"class":129},[123,69863,57140],{"class":164},[123,69865,3760],{"class":129},[123,69867,69868,69870,69872,69874],{"class":125,"line":10404},[123,69869,57412],{"class":164},[123,69871,147],{"class":129},[123,69873,53882],{"class":164},[123,69875,3760],{"class":129},[123,69877,69878,69880,69882,69884],{"class":125,"line":10409},[123,69879,57423],{"class":164},[123,69881,147],{"class":129},[123,69883,53985],{"class":164},[123,69885,3760],{"class":129},[123,69887,69888],{"class":125,"line":10415},[123,69889,4631],{"class":129},[123,69891,69892],{"class":125,"line":10442},[123,69893,232],{"emptyLinePlaceholder":231},[123,69895,69896,69898,69900,69902],{"class":125,"line":10447},[123,69897,66146],{"class":337},[123,69899,63694],{"class":53707},[123,69901,57478],{"class":53707},[123,69903,137],{"class":129},[123,69905,69906,69908,69910,69912,69914,69916],{"class":125,"line":10453},[123,69907,57109],{"class":164},[123,69909,147],{"class":129},[123,69911,2799],{"class":164},[123,69913,11382],{"class":164},[123,69915,53897],{"class":133},[123,69917,3760],{"class":129},[123,69919,69920,69922,69924,69926,69928],{"class":125,"line":10465},[123,69921,57325],{"class":164},[123,69923,147],{"class":129},[123,69925,3152],{"class":164},[123,69927,53897],{"class":133},[123,69929,3760],{"class":129},[123,69931,69932],{"class":125,"line":10477},[123,69933,4631],{"class":129},[123,69935,69936],{"class":125,"line":10489},[123,69937,232],{"emptyLinePlaceholder":231},[123,69939,69940,69942,69944,69946,69948],{"class":125,"line":12148},[123,69941,66146],{"class":337},[123,69943,63694],{"class":53707},[123,69945,57478],{"class":53707},[123,69947,3865],{"class":53707},[123,69949,137],{"class":129},[123,69951,69952,69954,69956,69958],{"class":125,"line":12173},[123,69953,66371],{"class":164},[123,69955,147],{"class":129},[123,69957,57140],{"class":164},[123,69959,3760],{"class":129},[123,69961,69962,69964,69966,69968,69970,69972,69974],{"class":125,"line":12196},[123,69963,64634],{"class":164},[123,69965,147],{"class":129},[123,69967,2692],{"class":164},[123,69969,53897],{"class":133},[123,69971,53926],{"class":164},[123,69973,66392],{"class":164},[123,69975,3760],{"class":129},[123,69977,69978,69980,69982,69984],{"class":125,"line":12220},[123,69979,59818],{"class":164},[123,69981,147],{"class":129},[123,69983,64771],{"class":164},[123,69985,3760],{"class":129},[123,69987,69988],{"class":125,"line":12225},[123,69989,4631],{"class":129},[123,69991,69992],{"class":125,"line":12230},[123,69993,232],{"emptyLinePlaceholder":231},[123,69995,69996,69998,70000,70002,70004,70006],{"class":125,"line":12235},[123,69997,66146],{"class":337},[123,69999,63694],{"class":53707},[123,70001,57478],{"class":53707},[123,70003,3865],{"class":53707},[123,70005,66425],{"class":337},[123,70007,137],{"class":129},[123,70009,70010,70012,70014,70016],{"class":125,"line":12244},[123,70011,64193],{"class":164},[123,70013,147],{"class":129},[123,70015,66436],{"class":164},[123,70017,3760],{"class":129},[123,70019,70020,70022,70024,70026],{"class":125,"line":12249},[123,70021,59818],{"class":164},[123,70023,147],{"class":129},[123,70025,66436],{"class":164},[123,70027,3760],{"class":129},[123,70029,70030],{"class":125,"line":12255},[123,70031,4631],{"class":129},[123,70033,70034],{"class":125,"line":12276},[123,70035,232],{"emptyLinePlaceholder":231},[123,70037,70038,70040],{"class":125,"line":12282},[123,70039,66461],{"class":337},[123,70041,137],{"class":129},[123,70043,70044,70046,70048,70050,70052,70054],{"class":125,"line":12296},[123,70045,57098],{"class":164},[123,70047,147],{"class":129},[123,70049,2799],{"class":164},[123,70051,66474],{"class":164},[123,70053,53897],{"class":133},[123,70055,3760],{"class":129},[123,70057,70058],{"class":125,"line":12302},[123,70059,4631],{"class":129},[123,70061,70062],{"class":125,"line":12329},[123,70063,232],{"emptyLinePlaceholder":231},[123,70065,70066,70068,70070],{"class":125,"line":12338},[123,70067,66461],{"class":337},[123,70069,64576],{"class":337},[123,70071,137],{"class":129},[123,70073,70074,70076,70078,70080],{"class":125,"line":12344},[123,70075,57412],{"class":164},[123,70077,147],{"class":129},[123,70079,57140],{"class":164},[123,70081,3760],{"class":129},[123,70083,70084],{"class":125,"line":12352},[123,70085,4631],{"class":129},[123,70087,70088],{"class":125,"line":12357},[123,70089,232],{"emptyLinePlaceholder":231},[123,70091,70092,70094,70097],{"class":125,"line":19032},[123,70093,66461],{"class":337},[123,70095,70096],{"class":337}," .active",[123,70098,137],{"class":129},[123,70100,70101,70103,70105,70107],{"class":125,"line":19038},[123,70102,57412],{"class":164},[123,70104,147],{"class":129},[123,70106,63271],{"class":164},[123,70108,3760],{"class":129},[123,70110,70111],{"class":125,"line":19061},[123,70112,4631],{"class":129},[123,70114,70115,70117,70119],{"class":125,"line":19067},[123,70116,54820],{"class":129},[123,70118,2526],{"class":53707},[123,70120,53714],{"class":129},[123,70122,70123,70125,70127],{"class":125,"line":19090},[123,70124,54190],{"class":129},[123,70126,53741],{"class":53707},[123,70128,53714],{"class":129},[123,70130,70131],{"class":125,"line":19104},[123,70132,232],{"emptyLinePlaceholder":231},[123,70134,70135,70137,70139],{"class":125,"line":19124},[123,70136,3509],{"class":129},[123,70138,54205],{"class":53707},[123,70140,53714],{"class":129},[123,70142,70143,70145,70147,70149,70151,70153],{"class":125,"line":19130},[123,70144,54548],{"class":129},[123,70146,54016],{"class":53707},[123,70148,55889],{"class":337},[123,70150,134],{"class":129},[123,70152,66576],{"class":143},[123,70154,53714],{"class":129},[123,70156,70157,70159,70161,70163,70165,70167],{"class":125,"line":19141},[123,70158,53748],{"class":129},[123,70160,54016],{"class":53707},[123,70162,55889],{"class":337},[123,70164,134],{"class":129},[123,70166,66591],{"class":143},[123,70168,53714],{"class":129},[123,70170,70171,70173,70175,70177,70179],{"class":125,"line":19164},[123,70172,57637],{"class":129},[123,70174,2587],{"class":53707},[123,70176,66602],{"class":129},[123,70178,2587],{"class":53707},[123,70180,53714],{"class":129},[123,70182,70183,70185,70187],{"class":125,"line":19186},[123,70184,57637],{"class":129},[123,70186,3606],{"class":53707},[123,70188,53714],{"class":129},[123,70190,70191,70193,70195,70197,70199,70201,70203,70205,70207,70209,70211,70213,70215,70218,70220,70222,70224,70226],{"class":125,"line":19191},[123,70192,57705],{"class":129},[123,70194,29],{"class":53707},[123,70196,63454],{"class":129},[123,70198,2846],{"class":53707},[123,70200,55889],{"class":337},[123,70202,134],{"class":129},[123,70204,62108],{"class":143},[123,70206,63459],{"class":337},[123,70208,134],{"class":129},[123,70210,66637],{"class":143},[123,70212,56354],{"class":337},[123,70214,134],{"class":129},[123,70216,70217],{"class":143},"\"0\"",[123,70219,66640],{"class":129},[123,70221,2846],{"class":53707},[123,70223,57717],{"class":129},[123,70225,29],{"class":53707},[123,70227,53714],{"class":129},[123,70229,70230,70232,70234,70236,70238,70240,70242,70244,70246,70248,70250,70252,70254,70256,70258],{"class":125,"line":19197},[123,70231,57705],{"class":129},[123,70233,29],{"class":53707},[123,70235,63454],{"class":129},[123,70237,2846],{"class":53707},[123,70239,63459],{"class":337},[123,70241,134],{"class":129},[123,70243,66637],{"class":143},[123,70245,56354],{"class":337},[123,70247,134],{"class":129},[123,70249,6118],{"class":143},[123,70251,66667],{"class":129},[123,70253,2846],{"class":53707},[123,70255,57717],{"class":129},[123,70257,29],{"class":53707},[123,70259,53714],{"class":129},[123,70261,70262,70264,70266,70268,70270,70272,70274,70276,70278,70280,70282,70284,70286,70288,70290],{"class":125,"line":19211},[123,70263,57705],{"class":129},[123,70265,29],{"class":53707},[123,70267,63454],{"class":129},[123,70269,2846],{"class":53707},[123,70271,63459],{"class":337},[123,70273,134],{"class":129},[123,70275,66637],{"class":143},[123,70277,56354],{"class":337},[123,70279,134],{"class":129},[123,70281,6141],{"class":143},[123,70283,66694],{"class":129},[123,70285,2846],{"class":53707},[123,70287,57717],{"class":129},[123,70289,29],{"class":53707},[123,70291,53714],{"class":129},[123,70293,70294,70296,70298,70300,70302,70304,70306,70308,70310,70312,70314,70316,70318,70320,70322],{"class":125,"line":19224},[123,70295,57705],{"class":129},[123,70297,29],{"class":53707},[123,70299,63454],{"class":129},[123,70301,2846],{"class":53707},[123,70303,63459],{"class":337},[123,70305,134],{"class":129},[123,70307,66637],{"class":143},[123,70309,56354],{"class":337},[123,70311,134],{"class":129},[123,70313,6154],{"class":143},[123,70315,66721],{"class":129},[123,70317,2846],{"class":53707},[123,70319,57717],{"class":129},[123,70321,29],{"class":53707},[123,70323,53714],{"class":129},[123,70325,70326,70328,70330,70332,70334,70336,70338,70340,70342,70344,70346,70348,70350,70352,70354],{"class":125,"line":19229},[123,70327,57705],{"class":129},[123,70329,29],{"class":53707},[123,70331,63454],{"class":129},[123,70333,2846],{"class":53707},[123,70335,63459],{"class":337},[123,70337,134],{"class":129},[123,70339,66637],{"class":143},[123,70341,56354],{"class":337},[123,70343,134],{"class":129},[123,70345,6167],{"class":143},[123,70347,66748],{"class":129},[123,70349,2846],{"class":53707},[123,70351,57717],{"class":129},[123,70353,29],{"class":53707},[123,70355,53714],{"class":129},[123,70357,70358,70360,70362],{"class":125,"line":19243},[123,70359,57810],{"class":129},[123,70361,3606],{"class":53707},[123,70363,53714],{"class":129},[123,70365,70366,70368,70370],{"class":125,"line":19248},[123,70367,54181],{"class":129},[123,70369,54016],{"class":53707},[123,70371,53714],{"class":129},[123,70373,70374,70376,70378,70380,70382,70384],{"class":125,"line":19254},[123,70375,53748],{"class":129},[123,70377,54016],{"class":53707},[123,70379,55889],{"class":337},[123,70381,134],{"class":129},[123,70383,66785],{"class":143},[123,70385,53714],{"class":129},[123,70387,70388,70390,70392,70394,70396,70398,70400,70402,70404,70406,70408,70410,70412,70414,70416,70418],{"class":125,"line":19259},[123,70389,57637],{"class":129},[123,70391,54016],{"class":53707},[123,70393,55889],{"class":337},[123,70395,134],{"class":129},[123,70397,66800],{"class":143},[123,70399,63454],{"class":129},[123,70401,3929],{"class":53707},[123,70403,57642],{"class":337},[123,70405,134],{"class":129},[123,70407,66811],{"class":143},[123,70409,57650],{"class":337},[123,70411,134],{"class":129},[123,70413,1629],{"class":143},[123,70415,66820],{"class":129},[123,70417,54016],{"class":53707},[123,70419,53714],{"class":129},[123,70421,70422,70424,70426,70428,70430,70432,70434,70436,70438,70440,70442,70444,70446,70448,70450,70452],{"class":125,"line":19273},[123,70423,57637],{"class":129},[123,70425,54016],{"class":53707},[123,70427,55889],{"class":337},[123,70429,134],{"class":129},[123,70431,65025],{"class":143},[123,70433,63454],{"class":129},[123,70435,3929],{"class":53707},[123,70437,57642],{"class":337},[123,70439,134],{"class":129},[123,70441,66847],{"class":143},[123,70443,57650],{"class":337},[123,70445,134],{"class":129},[123,70447,1629],{"class":143},[123,70449,66820],{"class":129},[123,70451,54016],{"class":53707},[123,70453,53714],{"class":129},[123,70455,70456,70458,70460,70462,70464,70466,70468,70470,70472,70474,70476,70478,70480,70482,70484,70486],{"class":125,"line":19278},[123,70457,57637],{"class":129},[123,70459,54016],{"class":53707},[123,70461,55889],{"class":337},[123,70463,134],{"class":129},[123,70465,65025],{"class":143},[123,70467,63454],{"class":129},[123,70469,3929],{"class":53707},[123,70471,57642],{"class":337},[123,70473,134],{"class":129},[123,70475,66882],{"class":143},[123,70477,57650],{"class":337},[123,70479,134],{"class":129},[123,70481,1629],{"class":143},[123,70483,66820],{"class":129},[123,70485,54016],{"class":53707},[123,70487,53714],{"class":129},[123,70489,70490,70492,70494,70496,70498,70500,70502,70504,70506,70508,70510,70512,70514,70516,70518,70520],{"class":125,"line":19283},[123,70491,57637],{"class":129},[123,70493,54016],{"class":53707},[123,70495,55889],{"class":337},[123,70497,134],{"class":129},[123,70499,65025],{"class":143},[123,70501,63454],{"class":129},[123,70503,3929],{"class":53707},[123,70505,57642],{"class":337},[123,70507,134],{"class":129},[123,70509,66917],{"class":143},[123,70511,57650],{"class":337},[123,70513,134],{"class":129},[123,70515,1629],{"class":143},[123,70517,66820],{"class":129},[123,70519,54016],{"class":53707},[123,70521,53714],{"class":129},[123,70523,70524,70526,70528,70530,70532,70534,70536,70538,70540,70542,70544,70546,70548,70550,70552,70554],{"class":125,"line":19297},[123,70525,57637],{"class":129},[123,70527,54016],{"class":53707},[123,70529,55889],{"class":337},[123,70531,134],{"class":129},[123,70533,65025],{"class":143},[123,70535,63454],{"class":129},[123,70537,3929],{"class":53707},[123,70539,57642],{"class":337},[123,70541,134],{"class":129},[123,70543,66952],{"class":143},[123,70545,57650],{"class":337},[123,70547,134],{"class":129},[123,70549,1629],{"class":143},[123,70551,66820],{"class":129},[123,70553,54016],{"class":53707},[123,70555,53714],{"class":129},[123,70557,70558,70560,70562],{"class":125,"line":19309},[123,70559,54181],{"class":129},[123,70561,54016],{"class":53707},[123,70563,53714],{"class":129},[123,70565,70566,70568,70570],{"class":125,"line":19314},[123,70567,54820],{"class":129},[123,70569,54016],{"class":53707},[123,70571,53714],{"class":129},[123,70573,70574,70576,70578],{"class":125,"line":19327},[123,70575,54548],{"class":129},[123,70577,54218],{"class":53707},[123,70579,53714],{"class":129},[123,70581,70582],{"class":125,"line":19332},[123,70583,70584],{"class":2673},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[123,70586,70587],{"class":125,"line":19337},[123,70588,70589],{"class":2673},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[123,70591,70592,70594,70596,70598,70600,70602,70604,70607],{"class":125,"line":19342},[123,70593,13653],{"class":133},[123,70595,63694],{"class":164},[123,70597,15995],{"class":133},[123,70599,56799],{"class":129},[123,70601,56802],{"class":337},[123,70603,1315],{"class":129},[123,70605,70606],{"class":143},"'.tab-nav ul'",[123,70608,288],{"class":129},[123,70610,70611],{"class":125,"line":19355},[123,70612,70613],{"class":2673},"    \u002F\u002F 2.添加事件\n",[123,70615,70616,70618,70620,70622,70624,70626,70628,70630,70632],{"class":125,"line":19360},[123,70617,69355],{"class":129},[123,70619,60215],{"class":337},[123,70621,1315],{"class":129},[123,70623,60220],{"class":143},[123,70625,251],{"class":129},[123,70627,56852],{"class":133},[123,70629,4116],{"class":129},[123,70631,2689],{"class":279},[123,70633,14873],{"class":129},[123,70635,70636,70638,70640],{"class":125,"line":35045},[123,70637,60646],{"class":129},[123,70639,69411],{"class":337},[123,70641,69414],{"class":129},[123,70643,70644],{"class":125,"line":35051},[123,70645,70646],{"class":2673},"      \u002F\u002Fe.targer是我们点击的对象\n",[123,70648,70649,70651,70653,70655,70658],{"class":125,"line":35057},[123,70650,56883],{"class":133},[123,70652,69435],{"class":129},[123,70654,56889],{"class":133},[123,70656,70657],{"class":143}," 'A'",[123,70659,14873],{"class":129},[123,70661,70662,70664,70666,70668,70671,70673,70675,70677,70679],{"class":125,"line":35063},[123,70663,54329],{"class":129},[123,70665,56802],{"class":337},[123,70667,1315],{"class":129},[123,70669,70670],{"class":143},"'.active'",[123,70672,59405],{"class":129},[123,70674,59408],{"class":337},[123,70676,1315],{"class":129},[123,70678,67115],{"class":143},[123,70680,288],{"class":129},[123,70682,70683,70686,70688,70690,70692],{"class":125,"line":35069},[123,70684,70685],{"class":129},"        e.target.classList.",[123,70687,7767],{"class":337},[123,70689,1315],{"class":129},[123,70691,67115],{"class":143},[123,70693,288],{"class":129},[123,70695,70696],{"class":125,"line":35080},[123,70697,232],{"emptyLinePlaceholder":231},[123,70699,70700],{"class":125,"line":35086},[123,70701,70702],{"class":2673},"        \u002F\u002F 下面大盒子模块\n",[123,70704,70705],{"class":125,"line":35106},[123,70706,70707],{"class":2673},"        \u002F\u002F console.log(e.target.dataset.id)\n",[123,70709,70710,70712,70714,70716,70718],{"class":125,"line":35112},[123,70711,63672],{"class":133},[123,70713,5473],{"class":164},[123,70715,15995],{"class":133},[123,70717,47973],{"class":133},[123,70719,70720],{"class":129},"e.target.dataset.id\n",[123,70722,70723,70725,70727,70729,70731,70733,70735,70737,70739],{"class":125,"line":35123},[123,70724,54329],{"class":129},[123,70726,56802],{"class":337},[123,70728,1315],{"class":129},[123,70730,67163],{"class":143},[123,70732,59405],{"class":129},[123,70734,59408],{"class":337},[123,70736,1315],{"class":129},[123,70738,67115],{"class":143},[123,70740,288],{"class":129},[123,70742,70743,70745,70747,70749,70751,70753,70755,70757,70759,70761,70763,70765,70767],{"class":125,"line":35129},[123,70744,54329],{"class":129},[123,70746,56802],{"class":337},[123,70748,1315],{"class":129},[123,70750,67189],{"class":143},[123,70752,3047],{"class":129},[123,70754,47973],{"class":133},[123,70756,27540],{"class":164},[123,70758,59434],{"class":143},[123,70760,59405],{"class":129},[123,70762,7767],{"class":337},[123,70764,1315],{"class":129},[123,70766,67115],{"class":143},[123,70768,288],{"class":129},[123,70770,70771],{"class":125,"line":35135},[123,70772,232],{"emptyLinePlaceholder":231},[123,70774,70775],{"class":125,"line":35141},[123,70776,54801],{"class":129},[123,70778,70779],{"class":125,"line":35147},[123,70780,35872],{"class":129},[123,70782,70783,70785,70787],{"class":125,"line":35153},[123,70784,54820],{"class":129},[123,70786,54218],{"class":53707},[123,70788,53714],{"class":129},[123,70790,70791,70793,70795],{"class":125,"line":35159},[123,70792,54190],{"class":129},[123,70794,54205],{"class":53707},[123,70796,53714],{"class":129},[123,70798,70799],{"class":125,"line":35165},[123,70800,232],{"emptyLinePlaceholder":231},[123,70802,70803,70805,70807],{"class":125,"line":35185},[123,70804,54190],{"class":129},[123,70806,53042],{"class":53707},[123,70808,53714],{"class":129},[2587,70810,70812],{"id":70811},"_333-页面加载事件","3.3.3 页面加载事件",[26,70814,70815],{},[29,70816,70817],{},"load",[19,70819,70820],{},[3929,70821],{"alt":118,"src":70822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70824,70825],{},"window代表整个窗口，比document还要大",[19,70827,70828],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70830,70831],{},"img.addEventListener('load', function () {",[19,70833,70834],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70836,54867],{},[26,70838,70839],{"start":140},[29,70840,70841],{},"DOMContentLoaded",[19,70843,70844],{},[3929,70845],{"alt":118,"src":70846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70848,70849],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[2587,70851,70853],{"id":70852},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70855,70856],{},[3929,70857],{"alt":118,"src":70858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70860,70861],{},[3929,70862],{"alt":118,"src":70863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70865,70866],{},[3929,70867],{"alt":118,"src":70868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70870,70871],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70873,70874],{},"获得的是数字型数据，不带单位",[19,70876,70877],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70879,70880],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70882,70883],{},"它是通过document.documentElement来获取",[19,70885,70886],{},[3929,70887],{"alt":118,"src":70888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70890,70891],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[2587,70893,70895],{"id":70894},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70897,70898],{},[3929,70899],{"alt":118,"src":70900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70902,70903],{},[3929,70904],{"alt":118,"src":70905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[2587,70907,70909],{"id":70908},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70911,70912],{},[3929,70913],{"alt":118,"src":70914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70916,70917],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70919,70920],{},[3929,70921],{"alt":118,"src":70922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70924,70925],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70927,70928],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70930,70931],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70933,70934],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70936,70937],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70939,70940],{},[3929,70941],{"alt":118,"src":70942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70944,70945],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70947,70948],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70950,70951],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70953,70954],{},"e.pageX-box.getBoundingClientRect()",[2587,70956,70958],{"id":70957},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70960,70961],{},[3929,70962],{"alt":118,"src":70963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70965,70966],{},"这个是相对于视口来说的，它是个方法，不是属性值",[2587,70968,70970],{"id":70969},"_338-总结","3.3.8 总结",[19,70972,70973],{},[3929,70974],{"alt":118,"src":70975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70977,70978],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70980,70981],{},"修改盒子的宽高只能通过width和height来实现",[2587,70983,70985],{"id":70984},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[113,70987,70989],{"className":53040,"code":70988,"language":53042,"meta":118,"style":118},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[120,70990,70991,70996,71001,71006,71011],{"__ignoreMap":118},[123,70992,70993],{"class":125,"line":126},[123,70994,70995],{"class":129},"\u002F* 页面滑动 *\u002F\n",[123,70997,70998],{"class":125,"line":140},[123,70999,71000],{"class":129},"html {\n",[123,71002,71003],{"class":125,"line":156},[123,71004,71005],{"class":129},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[123,71007,71008],{"class":125,"line":168},[123,71009,71010],{"class":129},"  scroll-behavior: smooth;\n",[123,71012,71013],{"class":125,"line":268},[123,71014,171],{"class":129},[19,71016,71017],{},"默认是auto",[2587,71019,71021],{"id":71020},"_3310-日期对象","3.3.10 日期对象",[24425,71023,71025],{"id":71024},"_33101-实例化","3.3.10.1 实例化",[19,71027,71028],{},[3929,71029],{"alt":118,"src":71030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24425,71032,71034],{"id":71033},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,71036,71037],{},[3929,71038],{"alt":118,"src":71039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,71041,71042],{},"月份+1",[19,71044,71045],{},"老外认为第一天为0，星期天",[19,71047,71048],{},"方法使用的时候必须要跟括号",[19,71050,71051],{},"快速获得日期",[19,71053,71054],{},"\u002F\u002F 得到年月日",[19,71056,71057],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,71059,71060],{},"\u002F\u002F 得到当地日期",[19,71062,71063],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,71065,71066],{},"\u002F\u002F 得到当地时间",[19,71068,71069],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,71071,71072],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,71074,71075],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54218,71077,71078],{},"\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,71080,71081],{},"学会去封装函数！",[24425,71083,71085],{"id":71084},"_33103-时间戳","3.3.10.3 时间戳",[19,71087,71088],{},[3929,71089],{"alt":118,"src":71090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,71092,71093],{},[3929,71094],{"alt":118,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,71097,71098],{},"三种方法记住一个就可以",[2587,71100,71102],{"id":71101},"_3311-节点操作","3.3.11 节点操作",[24425,71104,71106],{"id":71105},"_33111-dom节点","3.3.11.1 DOM节点",[19,71108,71109],{},[3929,71110],{"alt":118,"src":71111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,71113,71114],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24425,71116,71118],{"id":71117},"_33112-查找节点","3.3.11.2 查找节点",[19,71120,71121],{},"前边的document.querySelector()是获取的元素",[19,71123,71124],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,71126,71127],{},[3929,71128],{"alt":118,"src":71129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,71131,71132],{},[29,71133,71134],{},"父节点",[19,71136,71137],{},[3929,71138],{"alt":118,"src":71139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,71141,71142],{"start":140},[29,71143,71144],{},"子节点",[19,71146,71147],{},[3929,71148],{"alt":118,"src":71149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,71151,71152],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,71154,71155],{},"children获得的是伪数组，是亲儿子",[26,71157,71158],{"start":156},[29,71159,71160],{},"兄弟节点",[19,71162,71163],{},[3929,71164],{"alt":118,"src":71165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24425,71167,71169],{"id":71168},"_33113-增加节点","3.3.11.3 增加节点",[19,71171,71172],{},[3929,71173],{"alt":118,"src":71174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,71176,71177],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,71179,71180],{},[3929,71181],{"alt":118,"src":71182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71184,71185],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71187,71188],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71190,71191],{},"例：",[54218,71193,71194],{},"\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,71196,71197],{},[3929,71198],{"alt":118,"src":71199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71201,71202],{},"false只克隆标签，里边的内容不会克隆过来",[113,71204,71206],{"className":53040,"code":71205,"language":53042,"meta":118,"style":118},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[120,71207,71208],{"__ignoreMap":118},[123,71209,71210],{"class":125,"line":126},[123,71211,71205],{"class":129},[24425,71213,71215],{"id":71214},"_33114-删除节点","3.3.11.4 删除节点",[19,71217,71218],{},[3929,71219],{"alt":118,"src":71220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71222,71223],{},"父亲删儿子",[19,71225,71226],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[2587,71228,71230],{"id":71229},"_3312-m端事件","3.3.12 M端事件",[19,71232,71233],{},"M端就是移动端",[19,71235,71236],{},[3929,71237],{"alt":118,"src":71238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[2587,71240,71242],{"id":71241},"_3313-插件","3.3.13 插件",[19,71244,71245],{},"要熟悉官网！！！",[19,71247,71248],{},[2846,71249,71250],{"href":71250,"rel":71251},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26287],[19,71253,71254],{},[2846,71255,71256],{"href":71256,"rel":71257},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26287],[2587,71259,71261],{"id":71260},"_3314-学生信息表","3.3.14 学生信息表",[26,71263,71264,71267,71270,71273,71276,71279,71282,71285],{},[29,71265,71266],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,71268,71269],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,71271,71272],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,71274,71275],{},"用好表单元素自带的属性，value,name等",[29,71277,71278],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,71280,71281],{},"不要忘记事件对象",[29,71283,71284],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,71286,71287],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71289,71290],{},"结构：",[113,71292,71294],{"className":53040,"code":71293,"language":53042,"meta":118,"style":118},"\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",[120,71295,71296,71306,71320,71324,71332,71346,71366,71387,71400,71424,71432,71436,71444,71457,71478,71506,71534,71539,71561,71581,71600,71608,71636,71658,71677,71697,71717,71737,71757,71765,71785,71793,71797,71810,71818,71826,71834,71847,71860,71873,71886,71899,71912,71925,71933,71941,71949,71954,71959,71964,71969,71974,71979,71984,71989,71994,71999,72004,72009,72014,72022,72030,72038,72042,72062,72081,72101,72121,72141,72161,72165,72170,72190,72195,72205,72210,72215,72235,72257,72262,72272,72276,72280,72285,72290,72319,72333,72348,72352,72356,72360,72365,72376,72389,72394,72399,72404,72409,72414,72418,72423,72428,72437,72442,72447,72459,72464,72471,72475,72480,72490,72495,72505,72510,72538,72559,72569,72589,72607,72624,72641,72658,72675,72679,72689,72694,72699,72704,72715,72719,72723,72727,72732,72737,72758,72770,72775,72780,72785,72799,72804,72811,72815,72819,72827,72831,72839,72843],{"__ignoreMap":118},[123,71297,71298,71300,71302,71304],{"class":125,"line":126},[123,71299,53704],{"class":129},[123,71301,53708],{"class":53707},[123,71303,53711],{"class":337},[123,71305,53714],{"class":129},[123,71307,71308,71310,71312,71314,71316,71318],{"class":125,"line":140},[123,71309,3509],{"class":129},[123,71311,53042],{"class":53707},[123,71313,53723],{"class":337},[123,71315,134],{"class":129},[123,71317,53728],{"class":143},[123,71319,53714],{"class":129},[123,71321,71322],{"class":125,"line":156},[123,71323,232],{"emptyLinePlaceholder":231},[123,71325,71326,71328,71330],{"class":125,"line":168},[123,71327,3509],{"class":129},[123,71329,53741],{"class":53707},[123,71331,53714],{"class":129},[123,71333,71334,71336,71338,71340,71342,71344],{"class":125,"line":268},[123,71335,54548],{"class":129},[123,71337,53751],{"class":53707},[123,71339,53754],{"class":337},[123,71341,134],{"class":129},[123,71343,53759],{"class":143},[123,71345,61529],{"class":129},[123,71347,71348,71350,71352,71354,71356,71358,71360,71362,71364],{"class":125,"line":291},[123,71349,54548],{"class":129},[123,71351,53751],{"class":53707},[123,71353,17350],{"class":337},[123,71355,134],{"class":129},[123,71357,53798],{"class":143},[123,71359,53778],{"class":337},[123,71361,134],{"class":129},[123,71363,53805],{"class":143},[123,71365,61529],{"class":129},[123,71367,71368,71370,71372,71374,71376,71378,71380,71382,71385],{"class":125,"line":300},[123,71369,54548],{"class":129},[123,71371,53751],{"class":53707},[123,71373,53770],{"class":337},[123,71375,134],{"class":129},[123,71377,53775],{"class":143},[123,71379,53778],{"class":337},[123,71381,134],{"class":129},[123,71383,71384],{"class":143},"\"ie=edge\"",[123,71386,61529],{"class":129},[123,71388,71389,71391,71393,71396,71398],{"class":125,"line":305},[123,71390,54548],{"class":129},[123,71392,642],{"class":53707},[123,71394,71395],{"class":129},">学生信息管理\u003C\u002F",[123,71397,642],{"class":53707},[123,71399,53714],{"class":129},[123,71401,71402,71404,71407,71410,71412,71415,71417,71419,71422],{"class":125,"line":316},[123,71403,54548],{"class":129},[123,71405,71406],{"class":53707},"link",[123,71408,71409],{"class":337}," rel",[123,71411,134],{"class":129},[123,71413,71414],{"class":143},"\"stylesheet\"",[123,71416,63459],{"class":337},[123,71418,134],{"class":129},[123,71420,71421],{"class":143},"\"css\u002Findex.css\"",[123,71423,61529],{"class":129},[123,71425,71426,71428,71430],{"class":125,"line":673},[123,71427,54190],{"class":129},[123,71429,53741],{"class":53707},[123,71431,53714],{"class":129},[123,71433,71434],{"class":125,"line":692},[123,71435,232],{"emptyLinePlaceholder":231},[123,71437,71438,71440,71442],{"class":125,"line":713},[123,71439,3509],{"class":129},[123,71441,54205],{"class":53707},[123,71443,53714],{"class":129},[123,71445,71446,71448,71450,71453,71455],{"class":125,"line":718},[123,71447,54548],{"class":129},[123,71449,10],{"class":53707},[123,71451,71452],{"class":129},">新增学员\u003C\u002F",[123,71454,10],{"class":53707},[123,71456,53714],{"class":129},[123,71458,71459,71461,71463,71465,71467,71469,71472,71474,71476],{"class":125,"line":1138},[123,71460,54548],{"class":129},[123,71462,69026],{"class":53707},[123,71464,55889],{"class":337},[123,71466,134],{"class":129},[123,71468,65066],{"class":143},[123,71470,71471],{"class":337}," autocomplete",[123,71473,134],{"class":129},[123,71475,34188],{"class":143},[123,71477,53714],{"class":129},[123,71479,71480,71483,71485,71487,71489,71491,71493,71495,71498,71500,71502,71504],{"class":125,"line":1429},[123,71481,71482],{"class":129},"    姓名：\u003C",[123,71484,56224],{"class":53707},[123,71486,56227],{"class":337},[123,71488,134],{"class":129},[123,71490,65100],{"class":143},[123,71492,55889],{"class":337},[123,71494,134],{"class":129},[123,71496,71497],{"class":143},"\"uname\"",[123,71499,17350],{"class":337},[123,71501,134],{"class":129},[123,71503,71497],{"class":143},[123,71505,61529],{"class":129},[123,71507,71508,71511,71513,71515,71517,71519,71521,71523,71526,71528,71530,71532],{"class":125,"line":1439},[123,71509,71510],{"class":129},"    年龄：\u003C",[123,71512,56224],{"class":53707},[123,71514,56227],{"class":337},[123,71516,134],{"class":129},[123,71518,65100],{"class":143},[123,71520,55889],{"class":337},[123,71522,134],{"class":129},[123,71524,71525],{"class":143},"\"age\"",[123,71527,17350],{"class":337},[123,71529,134],{"class":129},[123,71531,71525],{"class":143},[123,71533,61529],{"class":129},[123,71535,71536],{"class":125,"line":1444},[123,71537,71538],{"class":129},"    性别:\n",[123,71540,71541,71543,71546,71548,71550,71553,71555,71557,71559],{"class":125,"line":1453},[123,71542,53748],{"class":129},[123,71544,71545],{"class":53707},"select",[123,71547,17350],{"class":337},[123,71549,134],{"class":129},[123,71551,71552],{"class":143},"\"gender\"",[123,71554,55889],{"class":337},[123,71556,134],{"class":129},[123,71558,71552],{"class":143},[123,71560,53714],{"class":129},[123,71562,71563,71565,71568,71570,71572,71574,71577,71579],{"class":125,"line":1458},[123,71564,57637],{"class":129},[123,71566,71567],{"class":53707},"option",[123,71569,69052],{"class":337},[123,71571,134],{"class":129},[123,71573,12393],{"class":143},[123,71575,71576],{"class":129},">男\u003C\u002F",[123,71578,71567],{"class":53707},[123,71580,53714],{"class":129},[123,71582,71583,71585,71587,71589,71591,71593,71596,71598],{"class":125,"line":1476},[123,71584,57637],{"class":129},[123,71586,71567],{"class":53707},[123,71588,69052],{"class":337},[123,71590,134],{"class":129},[123,71592,12462],{"class":143},[123,71594,71595],{"class":129},">女\u003C\u002F",[123,71597,71567],{"class":53707},[123,71599,53714],{"class":129},[123,71601,71602,71604,71606],{"class":125,"line":1494},[123,71603,54181],{"class":129},[123,71605,71545],{"class":53707},[123,71607,53714],{"class":129},[123,71609,71610,71613,71615,71617,71619,71621,71623,71625,71628,71630,71632,71634],{"class":125,"line":1499},[123,71611,71612],{"class":129},"    薪资：\u003C",[123,71614,56224],{"class":53707},[123,71616,56227],{"class":337},[123,71618,134],{"class":129},[123,71620,65100],{"class":143},[123,71622,55889],{"class":337},[123,71624,134],{"class":129},[123,71626,71627],{"class":143},"\"salary\"",[123,71629,17350],{"class":337},[123,71631,134],{"class":129},[123,71633,71627],{"class":143},[123,71635,61529],{"class":129},[123,71637,71638,71641,71643,71645,71647,71650,71652,71654,71656],{"class":125,"line":1517},[123,71639,71640],{"class":129},"    就业城市：\u003C",[123,71642,71545],{"class":53707},[123,71644,17350],{"class":337},[123,71646,134],{"class":129},[123,71648,71649],{"class":143},"\"city\"",[123,71651,55889],{"class":337},[123,71653,134],{"class":129},[123,71655,71649],{"class":143},[123,71657,53714],{"class":129},[123,71659,71660,71662,71664,71666,71668,71670,71673,71675],{"class":125,"line":1534},[123,71661,57637],{"class":129},[123,71663,71567],{"class":53707},[123,71665,69052],{"class":337},[123,71667,134],{"class":129},[123,71669,150],{"class":143},[123,71671,71672],{"class":129},">北京\u003C\u002F",[123,71674,71567],{"class":53707},[123,71676,53714],{"class":129},[123,71678,71679,71681,71683,71685,71687,71690,71693,71695],{"class":125,"line":1539},[123,71680,57637],{"class":129},[123,71682,71567],{"class":53707},[123,71684,69052],{"class":337},[123,71686,134],{"class":129},[123,71688,71689],{"class":143},"\"上海\"",[123,71691,71692],{"class":129},">上海\u003C\u002F",[123,71694,71567],{"class":53707},[123,71696,53714],{"class":129},[123,71698,71699,71701,71703,71705,71707,71710,71713,71715],{"class":125,"line":2080},[123,71700,57637],{"class":129},[123,71702,71567],{"class":53707},[123,71704,69052],{"class":337},[123,71706,134],{"class":129},[123,71708,71709],{"class":143},"\"广州\"",[123,71711,71712],{"class":129},">广州\u003C\u002F",[123,71714,71567],{"class":53707},[123,71716,53714],{"class":129},[123,71718,71719,71721,71723,71725,71727,71730,71733,71735],{"class":125,"line":2097},[123,71720,57637],{"class":129},[123,71722,71567],{"class":53707},[123,71724,69052],{"class":337},[123,71726,134],{"class":129},[123,71728,71729],{"class":143},"\"深圳\"",[123,71731,71732],{"class":129},">深圳\u003C\u002F",[123,71734,71567],{"class":53707},[123,71736,53714],{"class":129},[123,71738,71739,71741,71743,71745,71747,71750,71753,71755],{"class":125,"line":2114},[123,71740,57637],{"class":129},[123,71742,71567],{"class":53707},[123,71744,69052],{"class":337},[123,71746,134],{"class":129},[123,71748,71749],{"class":143},"\"曹县\"",[123,71751,71752],{"class":129},">曹县\u003C\u002F",[123,71754,71567],{"class":53707},[123,71756,53714],{"class":129},[123,71758,71759,71761,71763],{"class":125,"line":2125},[123,71760,54181],{"class":129},[123,71762,71545],{"class":53707},[123,71764,53714],{"class":129},[123,71766,71767,71769,71771,71773,71775,71778,71781,71783],{"class":125,"line":2130},[123,71768,53748],{"class":129},[123,71770,56290],{"class":53707},[123,71772,55889],{"class":337},[123,71774,134],{"class":129},[123,71776,71777],{"class":143},"\"add\"",[123,71779,71780],{"class":129},">录入\u003C\u002F",[123,71782,56290],{"class":53707},[123,71784,53714],{"class":129},[123,71786,71787,71789,71791],{"class":125,"line":5033},[123,71788,54820],{"class":129},[123,71790,69026],{"class":53707},[123,71792,53714],{"class":129},[123,71794,71795],{"class":125,"line":5041},[123,71796,232],{"emptyLinePlaceholder":231},[123,71798,71799,71801,71803,71806,71808],{"class":125,"line":5046},[123,71800,54548],{"class":129},[123,71802,10],{"class":53707},[123,71804,71805],{"class":129},">就业榜\u003C\u002F",[123,71807,10],{"class":53707},[123,71809,53714],{"class":129},[123,71811,71812,71814,71816],{"class":125,"line":5052},[123,71813,54548],{"class":129},[123,71815,48],{"class":53707},[123,71817,53714],{"class":129},[123,71819,71820,71822,71824],{"class":125,"line":5058},[123,71821,53748],{"class":129},[123,71823,51],{"class":53707},[123,71825,53714],{"class":129},[123,71827,71828,71830,71832],{"class":125,"line":5063},[123,71829,57637],{"class":129},[123,71831,54],{"class":53707},[123,71833,53714],{"class":129},[123,71835,71836,71838,71840,71843,71845],{"class":125,"line":10380},[123,71837,57705],{"class":129},[123,71839,57],{"class":53707},[123,71841,71842],{"class":129},">序号\u003C\u002F",[123,71844,57],{"class":53707},[123,71846,53714],{"class":129},[123,71848,71849,71851,71853,71856,71858],{"class":125,"line":10404},[123,71850,57705],{"class":129},[123,71852,57],{"class":53707},[123,71854,71855],{"class":129},">姓名\u003C\u002F",[123,71857,57],{"class":53707},[123,71859,53714],{"class":129},[123,71861,71862,71864,71866,71869,71871],{"class":125,"line":10409},[123,71863,57705],{"class":129},[123,71865,57],{"class":53707},[123,71867,71868],{"class":129},">年龄\u003C\u002F",[123,71870,57],{"class":53707},[123,71872,53714],{"class":129},[123,71874,71875,71877,71879,71882,71884],{"class":125,"line":10415},[123,71876,57705],{"class":129},[123,71878,57],{"class":53707},[123,71880,71881],{"class":129},">性别\u003C\u002F",[123,71883,57],{"class":53707},[123,71885,53714],{"class":129},[123,71887,71888,71890,71892,71895,71897],{"class":125,"line":10442},[123,71889,57705],{"class":129},[123,71891,57],{"class":53707},[123,71893,71894],{"class":129},">薪资\u003C\u002F",[123,71896,57],{"class":53707},[123,71898,53714],{"class":129},[123,71900,71901,71903,71905,71908,71910],{"class":125,"line":10447},[123,71902,57705],{"class":129},[123,71904,57],{"class":53707},[123,71906,71907],{"class":129},">就业城市\u003C\u002F",[123,71909,57],{"class":53707},[123,71911,53714],{"class":129},[123,71913,71914,71916,71918,71921,71923],{"class":125,"line":10453},[123,71915,57705],{"class":129},[123,71917,57],{"class":53707},[123,71919,71920],{"class":129},">操作\u003C\u002F",[123,71922,57],{"class":53707},[123,71924,53714],{"class":129},[123,71926,71927,71929,71931],{"class":125,"line":10465},[123,71928,57810],{"class":129},[123,71930,54],{"class":53707},[123,71932,53714],{"class":129},[123,71934,71935,71937,71939],{"class":125,"line":10477},[123,71936,54181],{"class":129},[123,71938,51],{"class":53707},[123,71940,53714],{"class":129},[123,71942,71943,71945,71947],{"class":125,"line":10489},[123,71944,53748],{"class":129},[123,71946,64],{"class":53707},[123,71948,53714],{"class":129},[123,71950,71951],{"class":125,"line":12148},[123,71952,71953],{"class":2673},"      \u003C!-- \n",[123,71955,71956],{"class":125,"line":12173},[123,71957,71958],{"class":2673},"        \u003Ctr>\n",[123,71960,71961],{"class":125,"line":12196},[123,71962,71963],{"class":2673},"          \u003Ctd>1001\u003C\u002Ftd>\n",[123,71965,71966],{"class":125,"line":12220},[123,71967,71968],{"class":2673},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[123,71970,71971],{"class":125,"line":12225},[123,71972,71973],{"class":2673},"          \u003Ctd>19\u003C\u002Ftd>\n",[123,71975,71976],{"class":125,"line":12230},[123,71977,71978],{"class":2673},"          \u003Ctd>男\u003C\u002Ftd>\n",[123,71980,71981],{"class":125,"line":12235},[123,71982,71983],{"class":2673},"          \u003Ctd>15000\u003C\u002Ftd>\n",[123,71985,71986],{"class":125,"line":12244},[123,71987,71988],{"class":2673},"          \u003Ctd>上海\u003C\u002Ftd>\n",[123,71990,71991],{"class":125,"line":12249},[123,71992,71993],{"class":2673},"          \u003Ctd>\n",[123,71995,71996],{"class":125,"line":12255},[123,71997,71998],{"class":2673},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[123,72000,72001],{"class":125,"line":12276},[123,72002,72003],{"class":2673},"          \u003C\u002Ftd>\n",[123,72005,72006],{"class":125,"line":12282},[123,72007,72008],{"class":2673},"        \u003C\u002Ftr> \n",[123,72010,72011],{"class":125,"line":12296},[123,72012,72013],{"class":2673},"        -->\n",[123,72015,72016,72018,72020],{"class":125,"line":12302},[123,72017,54181],{"class":129},[123,72019,64],{"class":53707},[123,72021,53714],{"class":129},[123,72023,72024,72026,72028],{"class":125,"line":12329},[123,72025,54820],{"class":129},[123,72027,48],{"class":53707},[123,72029,53714],{"class":129},[123,72031,72032,72034,72036],{"class":125,"line":12338},[123,72033,54548],{"class":129},[123,72035,54218],{"class":53707},[123,72037,53714],{"class":129},[123,72039,72040],{"class":125,"line":12344},[123,72041,62360],{"class":2673},[123,72043,72044,72046,72049,72051,72053,72055,72057,72060],{"class":125,"line":12352},[123,72045,13653],{"class":133},[123,72047,72048],{"class":164}," uname",[123,72050,15995],{"class":133},[123,72052,56799],{"class":129},[123,72054,56802],{"class":337},[123,72056,1315],{"class":129},[123,72058,72059],{"class":143},"'.uname'",[123,72061,288],{"class":129},[123,72063,72064,72066,72068,72070,72072,72074,72076,72079],{"class":125,"line":12357},[123,72065,13653],{"class":133},[123,72067,18117],{"class":164},[123,72069,15995],{"class":133},[123,72071,56799],{"class":129},[123,72073,56802],{"class":337},[123,72075,1315],{"class":129},[123,72077,72078],{"class":143},"'.age'",[123,72080,288],{"class":129},[123,72082,72083,72085,72088,72090,72092,72094,72096,72099],{"class":125,"line":19032},[123,72084,13653],{"class":133},[123,72086,72087],{"class":164}," gender",[123,72089,15995],{"class":133},[123,72091,56799],{"class":129},[123,72093,56802],{"class":337},[123,72095,1315],{"class":129},[123,72097,72098],{"class":143},"'.gender'",[123,72100,288],{"class":129},[123,72102,72103,72105,72108,72110,72112,72114,72116,72119],{"class":125,"line":19038},[123,72104,13653],{"class":133},[123,72106,72107],{"class":164}," salary",[123,72109,15995],{"class":133},[123,72111,56799],{"class":129},[123,72113,56802],{"class":337},[123,72115,1315],{"class":129},[123,72117,72118],{"class":143},"'.salary'",[123,72120,288],{"class":129},[123,72122,72123,72125,72128,72130,72132,72134,72136,72139],{"class":125,"line":19061},[123,72124,13653],{"class":133},[123,72126,72127],{"class":164}," city",[123,72129,15995],{"class":133},[123,72131,56799],{"class":129},[123,72133,56802],{"class":337},[123,72135,1315],{"class":129},[123,72137,72138],{"class":143},"'.city'",[123,72140,288],{"class":129},[123,72142,72143,72145,72148,72150,72152,72154,72156,72159],{"class":125,"line":19067},[123,72144,13653],{"class":133},[123,72146,72147],{"class":164}," tbody",[123,72149,15995],{"class":133},[123,72151,56799],{"class":129},[123,72153,56802],{"class":337},[123,72155,1315],{"class":129},[123,72157,72158],{"class":143},"'tbody'",[123,72160,288],{"class":129},[123,72162,72163],{"class":125,"line":19090},[123,72164,232],{"emptyLinePlaceholder":231},[123,72166,72167],{"class":125,"line":19104},[123,72168,72169],{"class":2673},"    \u002F\u002F 获取所有带有name属性的元素\n",[123,72171,72172,72174,72177,72179,72181,72183,72185,72188],{"class":125,"line":19124},[123,72173,13653],{"class":133},[123,72175,72176],{"class":164}," items",[123,72178,15995],{"class":133},[123,72180,56799],{"class":129},[123,72182,58083],{"class":337},[123,72184,1315],{"class":129},[123,72186,72187],{"class":143},"'[name]'",[123,72189,288],{"class":129},[123,72191,72192],{"class":125,"line":19130},[123,72193,72194],{"class":2673},"    \u002F\u002F 声明一个空的数组\n",[123,72196,72197,72199,72201,72203],{"class":125,"line":19141},[123,72198,13653],{"class":133},[123,72200,60097],{"class":164},[123,72202,15995],{"class":133},[123,72204,1372],{"class":129},[123,72206,72207],{"class":125,"line":19164},[123,72208,72209],{"class":2673},"    \u002F\u002F 1.录入模块\n",[123,72211,72212],{"class":125,"line":19186},[123,72213,72214],{"class":2673},"    \u002F\u002F 1.1这是一个表单提交事件\n",[123,72216,72217,72219,72222,72224,72226,72228,72230,72233],{"class":125,"line":19191},[123,72218,13653],{"class":133},[123,72220,72221],{"class":164}," info",[123,72223,15995],{"class":133},[123,72225,56799],{"class":129},[123,72227,56802],{"class":337},[123,72229,1315],{"class":129},[123,72231,72232],{"class":143},"'.info'",[123,72234,288],{"class":129},[123,72236,72237,72240,72242,72244,72247,72249,72251,72253,72255],{"class":125,"line":19197},[123,72238,72239],{"class":129},"    info.",[123,72241,60215],{"class":337},[123,72243,1315],{"class":129},[123,72245,72246],{"class":143},"'submit'",[123,72248,251],{"class":129},[123,72250,56852],{"class":133},[123,72252,4116],{"class":129},[123,72254,2689],{"class":279},[123,72256,14873],{"class":129},[123,72258,72259],{"class":125,"line":19211},[123,72260,72261],{"class":2673},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[123,72263,72264,72267,72270],{"class":125,"line":19224},[123,72265,72266],{"class":129},"      e.",[123,72268,72269],{"class":337},"preventDefault",[123,72271,4420],{"class":129},[123,72273,72274],{"class":125,"line":19229},[123,72275,62414],{"class":2673},[123,72277,72278],{"class":125,"line":19243},[123,72279,232],{"emptyLinePlaceholder":231},[123,72281,72282],{"class":125,"line":19248},[123,72283,72284],{"class":2673},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[123,72286,72287],{"class":125,"line":19254},[123,72288,72289],{"class":2673},"      \u002F\u002F 先遍历循环\n",[123,72291,72292,72294,72296,72298,72300,72302,72304,72306,72308,72311,72313,72315,72317],{"class":125,"line":19259},[123,72293,54687],{"class":133},[123,72295,4116],{"class":129},[123,72297,54251],{"class":133},[123,72299,11870],{"class":129},[123,72301,134],{"class":133},[123,72303,6532],{"class":164},[123,72305,11877],{"class":129},[123,72307,3509],{"class":133},[123,72309,72310],{"class":129}," items.",[123,72312,54372],{"class":164},[123,72314,5654],{"class":129},[123,72316,4736],{"class":133},[123,72318,14873],{"class":129},[123,72320,72321,72323,72326,72328,72331],{"class":125,"line":19273},[123,72322,4940],{"class":133},[123,72324,72325],{"class":129}," (items[i].value ",[123,72327,56889],{"class":133},[123,72329,72330],{"class":143}," ''",[123,72332,14873],{"class":129},[123,72334,72335,72338,72341,72343,72346],{"class":125,"line":19278},[123,72336,72337],{"class":133},"          return",[123,72339,72340],{"class":337}," alert",[123,72342,1315],{"class":129},[123,72344,72345],{"class":143},"'输入内容不能为空'",[123,72347,288],{"class":129},[123,72349,72350],{"class":125,"line":19283},[123,72351,4972],{"class":129},[123,72353,72354],{"class":125,"line":19297},[123,72355,54801],{"class":129},[123,72357,72358],{"class":125,"line":19309},[123,72359,232],{"emptyLinePlaceholder":231},[123,72361,72362],{"class":125,"line":19314},[123,72363,72364],{"class":2673},"      \u002F\u002F 创建新的对象\n",[123,72366,72367,72369,72372,72374],{"class":125,"line":19327},[123,72368,60630],{"class":133},[123,72370,72371],{"class":164}," obj",[123,72373,15995],{"class":133},[123,72375,137],{"class":129},[123,72377,72378,72381,72383,72385,72387],{"class":125,"line":19332},[123,72379,72380],{"class":129},"        stuID: arr.",[123,72382,54372],{"class":164},[123,72384,47973],{"class":133},[123,72386,27540],{"class":164},[123,72388,153],{"class":129},[123,72390,72391],{"class":125,"line":19337},[123,72392,72393],{"class":129},"        uname: uname.value,\n",[123,72395,72396],{"class":125,"line":19342},[123,72397,72398],{"class":129},"        age: age.value,\n",[123,72400,72401],{"class":125,"line":19355},[123,72402,72403],{"class":129},"        gender: gender.value,\n",[123,72405,72406],{"class":125,"line":19360},[123,72407,72408],{"class":129},"        salary: salary.value,\n",[123,72410,72411],{"class":125,"line":35045},[123,72412,72413],{"class":129},"        city: city.value\n",[123,72415,72416],{"class":125,"line":35051},[123,72417,54801],{"class":129},[123,72419,72420],{"class":125,"line":35057},[123,72421,72422],{"class":2673},"      \u002F\u002F console.log(obj);\n",[123,72424,72425],{"class":125,"line":35063},[123,72426,72427],{"class":2673},"      \u002F\u002F 追加到数组里面\n",[123,72429,72430,72432,72434],{"class":125,"line":35069},[123,72431,60409],{"class":129},[123,72433,54288],{"class":337},[123,72435,72436],{"class":129},"(obj)\n",[123,72438,72439],{"class":125,"line":35080},[123,72440,72441],{"class":2673},"      \u002F\u002F console.log(arr);\n",[123,72443,72444],{"class":125,"line":35086},[123,72445,72446],{"class":2673},"      \u002F\u002F 清空表单  reset重置表单\n",[123,72448,72449,72452,72454,72457],{"class":125,"line":35106},[123,72450,72451],{"class":164},"      this",[123,72453,3161],{"class":129},[123,72455,72456],{"class":337},"reset",[123,72458,4420],{"class":129},[123,72460,72461],{"class":125,"line":35112},[123,72462,72463],{"class":2673},"      \u002F\u002F 调用渲染函数\n",[123,72465,72466,72469],{"class":125,"line":35123},[123,72467,72468],{"class":337},"      render",[123,72470,4420],{"class":129},[123,72472,72473],{"class":125,"line":35129},[123,72474,35872],{"class":129},[123,72476,72477],{"class":125,"line":35135},[123,72478,72479],{"class":2673},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[123,72481,72482,72485,72488],{"class":125,"line":35141},[123,72483,72484],{"class":133},"    function",[123,72486,72487],{"class":337}," render",[123,72489,13285],{"class":129},[123,72491,72492],{"class":125,"line":35147},[123,72493,72494],{"class":2673},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[123,72496,72497,72500,72502],{"class":125,"line":35153},[123,72498,72499],{"class":129},"      tbody.innerHTML ",[123,72501,134],{"class":133},[123,72503,72504],{"class":143}," ''\n",[123,72506,72507],{"class":125,"line":35159},[123,72508,72509],{"class":2673},"      \u002F\u002F 遍历数组\n",[123,72511,72512,72514,72516,72518,72520,72522,72524,72526,72528,72530,72532,72534,72536],{"class":125,"line":35165},[123,72513,54687],{"class":133},[123,72515,4116],{"class":129},[123,72517,54251],{"class":133},[123,72519,11870],{"class":129},[123,72521,134],{"class":133},[123,72523,6532],{"class":164},[123,72525,11877],{"class":129},[123,72527,3509],{"class":133},[123,72529,54369],{"class":129},[123,72531,54372],{"class":164},[123,72533,5654],{"class":129},[123,72535,4736],{"class":133},[123,72537,14873],{"class":129},[123,72539,72540,72542,72545,72547,72549,72552,72554,72557],{"class":125,"line":35185},[123,72541,63672],{"class":133},[123,72543,72544],{"class":164}," tr",[123,72546,15995],{"class":133},[123,72548,56799],{"class":129},[123,72550,72551],{"class":337},"createElement",[123,72553,1315],{"class":129},[123,72555,72556],{"class":143},"'tr'",[123,72558,288],{"class":129},[123,72560,72561,72564,72566],{"class":125,"line":35191},[123,72562,72563],{"class":129},"        tr.innerHTML ",[123,72565,134],{"class":133},[123,72567,72568],{"class":143}," `\n",[123,72570,72571,72574,72576,72578,72580,72583,72586],{"class":125,"line":35207},[123,72572,72573],{"class":143},"        \u003Ctd>${",[123,72575,6319],{"class":129},[123,72577,839],{"class":143},[123,72579,3047],{"class":129},[123,72581,72582],{"class":143},"].",[123,72584,72585],{"class":129},"stuID",[123,72587,72588],{"class":143},"}\u003C\u002Ftd>\n",[123,72590,72591,72594,72596,72598,72600,72602,72605],{"class":125,"line":35213},[123,72592,72593],{"class":143},"          \u003Ctd>${",[123,72595,6319],{"class":129},[123,72597,839],{"class":143},[123,72599,3047],{"class":129},[123,72601,72582],{"class":143},[123,72603,72604],{"class":129},"uname",[123,72606,72588],{"class":143},[123,72608,72609,72611,72613,72615,72617,72619,72622],{"class":125,"line":35227},[123,72610,72593],{"class":143},[123,72612,6319],{"class":129},[123,72614,839],{"class":143},[123,72616,3047],{"class":129},[123,72618,72582],{"class":143},[123,72620,72621],{"class":129},"age",[123,72623,72588],{"class":143},[123,72625,72626,72628,72630,72632,72634,72636,72639],{"class":125,"line":35233},[123,72627,72593],{"class":143},[123,72629,6319],{"class":129},[123,72631,839],{"class":143},[123,72633,3047],{"class":129},[123,72635,72582],{"class":143},[123,72637,72638],{"class":129},"gender",[123,72640,72588],{"class":143},[123,72642,72643,72645,72647,72649,72651,72653,72656],{"class":125,"line":35248},[123,72644,72593],{"class":143},[123,72646,6319],{"class":129},[123,72648,839],{"class":143},[123,72650,3047],{"class":129},[123,72652,72582],{"class":143},[123,72654,72655],{"class":129},"salary",[123,72657,72588],{"class":143},[123,72659,72660,72662,72664,72666,72668,72670,72673],{"class":125,"line":35254},[123,72661,72593],{"class":143},[123,72663,6319],{"class":129},[123,72665,839],{"class":143},[123,72667,3047],{"class":129},[123,72669,72582],{"class":143},[123,72671,72672],{"class":129},"city",[123,72674,72588],{"class":143},[123,72676,72677],{"class":125,"line":35263},[123,72678,71993],{"class":143},[123,72680,72681,72684,72686],{"class":125,"line":35269},[123,72682,72683],{"class":143},"            \u003Ca href=\"javascript:\" data-id=${",[123,72685,3047],{"class":129},[123,72687,72688],{"class":143},"}>删除\u003C\u002Fa>\n",[123,72690,72691],{"class":125,"line":35278},[123,72692,72693],{"class":143},"          \u003C\u002Ftd> \n",[123,72695,72696],{"class":125,"line":35284},[123,72697,72698],{"class":143},"          `\n",[123,72700,72701],{"class":125,"line":35290},[123,72702,72703],{"class":2673},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[123,72705,72706,72709,72712],{"class":125,"line":35299},[123,72707,72708],{"class":129},"        tbody.",[123,72710,72711],{"class":337},"appendChild",[123,72713,72714],{"class":129},"(tr)\n",[123,72716,72717],{"class":125,"line":35305},[123,72718,54801],{"class":129},[123,72720,72721],{"class":125,"line":35316},[123,72722,4631],{"class":129},[123,72724,72725],{"class":125,"line":35322},[123,72726,232],{"emptyLinePlaceholder":231},[123,72728,72729],{"class":125,"line":35341},[123,72730,72731],{"class":2673},"    \u002F\u002F 3.删除委托\n",[123,72733,72734],{"class":125,"line":35347},[123,72735,72736],{"class":2673},"    \u002F\u002F 3.1 事件委托 tbody\n",[123,72738,72739,72742,72744,72746,72748,72750,72752,72754,72756],{"class":125,"line":35358},[123,72740,72741],{"class":129},"    tbody.",[123,72743,60215],{"class":337},[123,72745,1315],{"class":129},[123,72747,60220],{"class":143},[123,72749,251],{"class":129},[123,72751,56852],{"class":133},[123,72753,4116],{"class":129},[123,72755,2689],{"class":279},[123,72757,14873],{"class":129},[123,72759,72760,72762,72764,72766,72768],{"class":125,"line":35364},[123,72761,56883],{"class":133},[123,72763,69435],{"class":129},[123,72765,56889],{"class":133},[123,72767,70657],{"class":143},[123,72769,14873],{"class":129},[123,72771,72772],{"class":125,"line":35384},[123,72773,72774],{"class":2673},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[123,72776,72777],{"class":125,"line":35400},[123,72778,72779],{"class":2673},"        \u002F\u002F console.log(e.target.dataset.id);\n",[123,72781,72782],{"class":125,"line":35406},[123,72783,72784],{"class":2673},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[123,72786,72787,72790,72792,72795,72797],{"class":125,"line":35420},[123,72788,72789],{"class":129},"        arr.",[123,72791,60412],{"class":337},[123,72793,72794],{"class":129},"(e.target.dataset.id, ",[123,72796,2825],{"class":164},[123,72798,288],{"class":129},[123,72800,72801],{"class":125,"line":35426},[123,72802,72803],{"class":2673},"        \u002F\u002F 重新渲染一次\n",[123,72805,72806,72809],{"class":125,"line":35432},[123,72807,72808],{"class":337},"        render",[123,72810,4420],{"class":129},[123,72812,72813],{"class":125,"line":35443},[123,72814,54801],{"class":129},[123,72816,72817],{"class":125,"line":35449},[123,72818,35872],{"class":129},[123,72820,72821,72823,72825],{"class":125,"line":35455},[123,72822,54820],{"class":129},[123,72824,54218],{"class":53707},[123,72826,53714],{"class":129},[123,72828,72829],{"class":125,"line":35465},[123,72830,232],{"emptyLinePlaceholder":231},[123,72832,72833,72835,72837],{"class":125,"line":35471},[123,72834,54190],{"class":129},[123,72836,54205],{"class":53707},[123,72838,53714],{"class":129},[123,72840,72841],{"class":125,"line":35482},[123,72842,232],{"emptyLinePlaceholder":231},[123,72844,72845,72847,72849],{"class":125,"line":35488},[123,72846,54190],{"class":129},[123,72848,53042],{"class":53707},[123,72850,53714],{"class":129},[19,72852,72853],{},"样式：",[113,72855,72859],{"className":72856,"code":72857,"language":72858,"meta":118,"style":118},"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",[120,72860,72861,72866,72876,72885,72889,72893,72898,72908,72913,72917,72922,72932,72937,72946,72950,72954,72959,72964,72974,72984,72989,72993,72998,73007,73017,73022,73032,73042,73046,73051,73059,73063,73068,73073,73078,73086,73095,73099,73104,73113,73117,73122,73131,73135,73140,73149,73158,73166,73170,73175,73184,73194,73203,73213,73219,73228,73238,73248,73252,73257,73266,73274,73284,73292,73301,73310,73320,73328,73332,73337,73346],{"__ignoreMap":118},[123,72862,72863],{"class":125,"line":126},[123,72864,72865],{"class":129},"* {\n",[123,72867,72868,72871,72873],{"class":125,"line":140},[123,72869,72870],{"class":53707},"  margin",[123,72872,147],{"class":129},[123,72874,72875],{"class":143},"0;\n",[123,72877,72878,72881,72883],{"class":125,"line":156},[123,72879,72880],{"class":143},"  padding",[123,72882,147],{"class":129},[123,72884,72875],{"class":143},[123,72886,72887],{"class":125,"line":168},[123,72888,171],{"class":129},[123,72890,72891],{"class":125,"line":268},[123,72892,232],{"emptyLinePlaceholder":231},[123,72894,72895],{"class":125,"line":291},[123,72896,72897],{"class":143},"a {\n",[123,72899,72900,72903,72905],{"class":125,"line":300},[123,72901,72902],{"class":53707},"  text-decoration",[123,72904,147],{"class":129},[123,72906,72907],{"class":143},"none;\n",[123,72909,72910],{"class":125,"line":305},[123,72911,72912],{"class":143},"  color:#721c24;\n",[123,72914,72915],{"class":125,"line":316},[123,72916,171],{"class":129},[123,72918,72919],{"class":125,"line":673},[123,72920,72921],{"class":143},"h1 {\n",[123,72923,72924,72927,72929],{"class":125,"line":692},[123,72925,72926],{"class":53707},"  text-align",[123,72928,147],{"class":129},[123,72930,72931],{"class":143},"center;\n",[123,72933,72934],{"class":125,"line":713},[123,72935,72936],{"class":143},"  color:#333;\n",[123,72938,72939,72941,72943],{"class":125,"line":718},[123,72940,72870],{"class":53707},[123,72942,147],{"class":129},[123,72944,72945],{"class":143},"20px 0;\n",[123,72947,72948],{"class":125,"line":1138},[123,72949,5116],{"class":129},[123,72951,72952],{"class":125,"line":1429},[123,72953,171],{"class":129},[123,72955,72956],{"class":125,"line":1439},[123,72957,72958],{"class":143},"table {\n",[123,72960,72961],{"class":125,"line":1444},[123,72962,72963],{"class":143},"  margin:0 auto;\n",[123,72965,72966,72969,72971],{"class":125,"line":1453},[123,72967,72968],{"class":53707},"  width",[123,72970,147],{"class":129},[123,72972,72973],{"class":143},"800px;\n",[123,72975,72976,72979,72981],{"class":125,"line":1458},[123,72977,72978],{"class":53707},"  border-collapse",[123,72980,147],{"class":129},[123,72982,72983],{"class":143},"collapse;\n",[123,72985,72986],{"class":125,"line":1476},[123,72987,72988],{"class":143},"  color:#004085;\n",[123,72990,72991],{"class":125,"line":1494},[123,72992,171],{"class":129},[123,72994,72995],{"class":125,"line":1499},[123,72996,72997],{"class":143},"th {\n",[123,72999,73000,73002,73004],{"class":125,"line":1517},[123,73001,72880],{"class":53707},[123,73003,147],{"class":129},[123,73005,73006],{"class":143},"10px;\n",[123,73008,73009,73012,73014],{"class":125,"line":1534},[123,73010,73011],{"class":53707},"  background",[123,73013,147],{"class":129},[123,73015,73016],{"class":2673},"#cfe5ff;\n",[123,73018,73019],{"class":125,"line":1539},[123,73020,73021],{"class":129},"  \n",[123,73023,73024,73027,73029],{"class":125,"line":2080},[123,73025,73026],{"class":53707},"  font-size",[123,73028,147],{"class":129},[123,73030,73031],{"class":143},"20px;\n",[123,73033,73034,73037,73039],{"class":125,"line":2097},[123,73035,73036],{"class":53707},"  font-weight",[123,73038,147],{"class":129},[123,73040,73041],{"class":143},"400;\n",[123,73043,73044],{"class":125,"line":2114},[123,73045,171],{"class":129},[123,73047,73048],{"class":125,"line":2125},[123,73049,73050],{"class":143},"td,th {\n",[123,73052,73053,73056],{"class":125,"line":2130},[123,73054,73055],{"class":143},"  border:1px solid",[123,73057,73058],{"class":2673}," #b8daff;\n",[123,73060,73061],{"class":125,"line":5033},[123,73062,171],{"class":129},[123,73064,73065],{"class":125,"line":5041},[123,73066,73067],{"class":143},"td {\n",[123,73069,73070],{"class":125,"line":5046},[123,73071,73072],{"class":143},"  padding:10px;\n",[123,73074,73075],{"class":125,"line":5052},[123,73076,73077],{"class":143},"  color:#666;\n",[123,73079,73080,73082,73084],{"class":125,"line":5058},[123,73081,72926],{"class":53707},[123,73083,147],{"class":129},[123,73085,72931],{"class":143},[123,73087,73088,73090,73092],{"class":125,"line":5063},[123,73089,73026],{"class":53707},[123,73091,147],{"class":129},[123,73093,73094],{"class":143},"16px;\n",[123,73096,73097],{"class":125,"line":10380},[123,73098,171],{"class":129},[123,73100,73101],{"class":125,"line":10404},[123,73102,73103],{"class":143},"tbody tr {\n",[123,73105,73106,73108,73110],{"class":125,"line":10409},[123,73107,73011],{"class":53707},[123,73109,147],{"class":129},[123,73111,73112],{"class":2673},"#fff;\n",[123,73114,73115],{"class":125,"line":10415},[123,73116,171],{"class":129},[123,73118,73119],{"class":125,"line":10442},[123,73120,73121],{"class":143},"tbody tr:hover {\n",[123,73123,73124,73126,73128],{"class":125,"line":10447},[123,73125,73011],{"class":53707},[123,73127,147],{"class":129},[123,73129,73130],{"class":2673},"#e1ecf8;\n",[123,73132,73133],{"class":125,"line":10453},[123,73134,171],{"class":129},[123,73136,73137],{"class":125,"line":10465},[123,73138,73139],{"class":143},".info {\n",[123,73141,73142,73144,73146],{"class":125,"line":10477},[123,73143,72968],{"class":53707},[123,73145,147],{"class":129},[123,73147,73148],{"class":143},"900px;\n",[123,73150,73151,73153,73155],{"class":125,"line":10489},[123,73152,72870],{"class":53707},[123,73154,147],{"class":129},[123,73156,73157],{"class":143},"50px auto;\n",[123,73159,73160,73162,73164],{"class":125,"line":12148},[123,73161,72926],{"class":53707},[123,73163,147],{"class":129},[123,73165,72931],{"class":143},[123,73167,73168],{"class":125,"line":12173},[123,73169,171],{"class":129},[123,73171,73172],{"class":125,"line":12196},[123,73173,73174],{"class":143},".info  input, .info select {\n",[123,73176,73177,73179,73181],{"class":125,"line":12220},[123,73178,72968],{"class":53707},[123,73180,147],{"class":129},[123,73182,73183],{"class":143},"80px;\n",[123,73185,73186,73189,73191],{"class":125,"line":12225},[123,73187,73188],{"class":53707},"  height",[123,73190,147],{"class":129},[123,73192,73193],{"class":143},"27px;\n",[123,73195,73196,73199,73201],{"class":125,"line":12230},[123,73197,73198],{"class":53707},"  outline",[123,73200,147],{"class":129},[123,73202,72907],{"class":143},[123,73204,73205,73208,73210],{"class":125,"line":12235},[123,73206,73207],{"class":53707},"  border-radius",[123,73209,147],{"class":129},[123,73211,73212],{"class":143},"5px;\n",[123,73214,73215,73217],{"class":125,"line":12244},[123,73216,73055],{"class":143},[123,73218,73058],{"class":2673},[123,73220,73221,73224,73226],{"class":125,"line":12249},[123,73222,73223],{"class":53707},"  padding-left",[123,73225,147],{"class":129},[123,73227,73212],{"class":143},[123,73229,73230,73233,73235],{"class":125,"line":12255},[123,73231,73232],{"class":53707},"  box-sizing",[123,73234,147],{"class":129},[123,73236,73237],{"class":143},"border-box;\n",[123,73239,73240,73243,73245],{"class":125,"line":12276},[123,73241,73242],{"class":53707},"  margin-right",[123,73244,147],{"class":129},[123,73246,73247],{"class":143},"15px;\n",[123,73249,73250],{"class":125,"line":12282},[123,73251,171],{"class":129},[123,73253,73254],{"class":125,"line":12296},[123,73255,73256],{"class":143},".info button {\n",[123,73258,73259,73261,73263],{"class":125,"line":12302},[123,73260,72968],{"class":53707},[123,73262,147],{"class":129},[123,73264,73265],{"class":143},"60px;\n",[123,73267,73268,73270,73272],{"class":125,"line":12329},[123,73269,73188],{"class":53707},[123,73271,147],{"class":129},[123,73273,73193],{"class":143},[123,73275,73276,73279,73281],{"class":125,"line":12338},[123,73277,73278],{"class":53707},"  background-color",[123,73280,147],{"class":129},[123,73282,73283],{"class":2673},"#004085;\n",[123,73285,73286,73288,73290],{"class":125,"line":12344},[123,73287,73198],{"class":53707},[123,73289,147],{"class":129},[123,73291,72907],{"class":143},[123,73293,73294,73297,73299],{"class":125,"line":12352},[123,73295,73296],{"class":53707},"  border",[123,73298,147],{"class":129},[123,73300,72875],{"class":143},[123,73302,73303,73306,73308],{"class":125,"line":12357},[123,73304,73305],{"class":53707},"  color",[123,73307,147],{"class":129},[123,73309,73112],{"class":2673},[123,73311,73312,73315,73317],{"class":125,"line":19032},[123,73313,73314],{"class":53707},"  cursor",[123,73316,147],{"class":129},[123,73318,73319],{"class":143},"pointer;\n",[123,73321,73322,73324,73326],{"class":125,"line":19038},[123,73323,73207],{"class":53707},[123,73325,147],{"class":129},[123,73327,73212],{"class":143},[123,73329,73330],{"class":125,"line":19061},[123,73331,171],{"class":129},[123,73333,73334],{"class":125,"line":19067},[123,73335,73336],{"class":143},".info .age {\n",[123,73338,73339,73341,73343],{"class":125,"line":19090},[123,73340,72968],{"class":53707},[123,73342,147],{"class":129},[123,73344,73345],{"class":143},"50px;\n",[123,73347,73348],{"class":125,"line":19104},[123,73349,171],{"class":129},[19,73351,73352],{},"思路：",[19,73354,73355],{},[3929,73356],{"alt":118,"src":73357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73359,73360],{},[3929,73361],{"alt":118,"src":73362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73364,73365],{},[3929,73366],{"alt":118,"src":73367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[2587,73369,73371],{"id":73370},"_3315-重绘回流","3.3.15 重绘回流",[19,73373,73374],{},[3929,73375],{"alt":118,"src":73376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73378,73379],{},[3929,73380],{"alt":118,"src":73381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73383,73384],{},[3929,73385],{"alt":118,"src":73386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73388,73390],{"id":73389},"_34-bom","3.4 BOM",[19,73392,73393],{},[3929,73394],{"alt":118,"src":73395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73397,73398],{},"平时写的document省略了window而已，实际上是window.document",[19,73400,73401],{},"函数也是这样，调用的时候实际为window.fn()",[19,73403,73404],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73406,73407],{},"window大部分情况下可以省略",[2587,73409,73411],{"id":73410},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73413,73414],{},"只执行一次",[19,73416,73417],{},[3929,73418],{"alt":118,"src":73419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73421,73422],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73424,73425],{},[3929,73426],{"alt":118,"src":73427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[2587,73429,73431],{"id":73430},"_342-js执行机制","3.4.2 JS执行机制",[19,73433,73434],{},[3929,73435],{"alt":118,"src":73436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73438,73439],{},"两个的结果都是1111 3333 2222",[19,73441,73442],{},[3929,73443],{"alt":118,"src":73444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73446,73447],{},[3929,73448],{"alt":118,"src":73449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73451,73452],{},[3929,73453],{"alt":118,"src":73454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73456,73457],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73459,73460],{},"工作流程：",[19,73462,73463],{},[3929,73464],{"alt":118,"src":73465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73467,73468],{},[3929,73469],{"alt":118,"src":73470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73472,73473],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73475,73476],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[2587,73478,73480],{"id":73479},"_343-location对象","3.4.3 location对象",[19,73482,73483],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73485,73486],{},[3929,73487],{"alt":118,"src":73488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73490,73491],{},"href可以跳转页面",[26,73493,73494],{},[29,73495,73496],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73498,73499],{},"search得到提交信息之后网站后边的地址",[19,73501,73502],{},[3929,73503],{"alt":118,"src":73504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73506,73507],{},[3929,73508],{"alt":118,"src":73509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,73511,73512],{"start":140},[29,73513,73514],{},"hash:这个获取单页面应用#后边的地址",[19,73516,73517],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73519,73520],{},[3929,73521],{"alt":118,"src":73522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[113,73524,73526],{"className":55470,"code":73525,"language":55472,"meta":118,"style":118},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[120,73527,73528,73548,73568],{"__ignoreMap":118},[123,73529,73530,73532,73534,73536,73538,73541,73544,73546],{"class":125,"line":126},[123,73531,54548],{"class":129},[123,73533,2846],{"class":53707},[123,73535,63459],{"class":337},[123,73537,134],{"class":129},[123,73539,73540],{"class":143},"\"#\u002Fmy\"",[123,73542,73543],{"class":129},">我的\u003C\u002F",[123,73545,2846],{"class":53707},[123,73547,53714],{"class":129},[123,73549,73550,73552,73554,73556,73558,73561,73564,73566],{"class":125,"line":140},[123,73551,54548],{"class":129},[123,73553,2846],{"class":53707},[123,73555,63459],{"class":337},[123,73557,134],{"class":129},[123,73559,73560],{"class":143},"\"#\u002Ffriend\"",[123,73562,73563],{"class":129},">关注\u003C\u002F",[123,73565,2846],{"class":53707},[123,73567,53714],{"class":129},[123,73569,73570,73572,73574,73576,73578,73581,73584,73586],{"class":125,"line":156},[123,73571,54548],{"class":129},[123,73573,2846],{"class":53707},[123,73575,63459],{"class":337},[123,73577,134],{"class":129},[123,73579,73580],{"class":143},"\"#\u002Fdownload\"",[123,73582,73583],{"class":129},">下载\u003C\u002F",[123,73585,2846],{"class":53707},[123,73587,53714],{"class":129},[19,73589,73590],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,73592,73593],{"start":156},[29,73594,73595,73596,73598,73599,73601],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56119,73597],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56119,73600],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[2587,73603,73605],{"id":73604},"_345-navigator对象","3.4.5 navigator对象",[19,73607,73608],{},[3929,73609],{"alt":118,"src":73610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[113,73612,73616],{"className":73613,"code":73614,"language":73615,"meta":118,"style":118},"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",[120,73617,73618,73623,73634,73646,73651,73702,73743,73748,73761,73773,73778],{"__ignoreMap":118},[123,73619,73620],{"class":125,"line":126},[123,73621,73622],{"class":2673},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[123,73624,73625,73627,73629,73631],{"class":125,"line":140},[123,73626,2834],{"class":133},[123,73628,1315],{"class":129},[123,73630,56852],{"class":133},[123,73632,73633],{"class":129}," () { \n",[123,73635,73636,73638,73641,73643],{"class":125,"line":156},[123,73637,9225],{"class":133},[123,73639,73640],{"class":164}," userAgent",[123,73642,15995],{"class":133},[123,73644,73645],{"class":129}," navigator.userAgent \n",[123,73647,73648],{"class":125,"line":168},[123,73649,73650],{"class":2673},"\u002F\u002F 验证是否为Android或iPhone \n",[123,73652,73653,73655,73658,73660,73663,73666,73668,73670,73673,73675,73678,73682,73684,73686,73688,73691,73693,73695,73697,73699],{"class":125,"line":268},[123,73654,9225],{"class":133},[123,73656,73657],{"class":164}," android",[123,73659,15995],{"class":133},[123,73661,73662],{"class":129}," userAgent.",[123,73664,73665],{"class":337},"match",[123,73667,1315],{"class":129},[123,73669,3187],{"class":143},[123,73671,73672],{"class":50384},"(Android);",[123,73674,3585],{"class":133},[123,73676,73677],{"class":164},"[\\s",[123,73679,73681],{"class":73680},"snhLl","\\\u002F",[123,73683,3539],{"class":164},[123,73685,3086],{"class":133},[123,73687,1315],{"class":50384},[123,73689,73690],{"class":164},"[\\d.]",[123,73692,3086],{"class":133},[123,73694,3035],{"class":50384},[123,73696,3585],{"class":133},[123,73698,3187],{"class":143},[123,73700,73701],{"class":129},") \n",[123,73703,73704,73706,73709,73711,73713,73715,73717,73719,73722,73725,73728,73730,73732,73735,73737,73739,73741],{"class":125,"line":291},[123,73705,9225],{"class":133},[123,73707,73708],{"class":164}," iphone",[123,73710,15995],{"class":133},[123,73712,73662],{"class":129},[123,73714,73665],{"class":337},[123,73716,1315],{"class":129},[123,73718,3187],{"class":143},[123,73720,73721],{"class":50384},"(iPhone",[123,73723,73724],{"class":164},"\\s",[123,73726,73727],{"class":50384},"OS)",[123,73729,73724],{"class":164},[123,73731,1315],{"class":50384},[123,73733,73734],{"class":164},"[\\d_]",[123,73736,3086],{"class":133},[123,73738,3035],{"class":50384},[123,73740,3187],{"class":143},[123,73742,73701],{"class":129},[123,73744,73745],{"class":125,"line":300},[123,73746,73747],{"class":2673},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[123,73749,73750,73752,73755,73758],{"class":125,"line":305},[123,73751,3998],{"class":133},[123,73753,73754],{"class":129}," (android ",[123,73756,73757],{"class":133},"||",[123,73759,73760],{"class":129}," iphone) { \n",[123,73762,73763,73766,73768,73771],{"class":125,"line":316},[123,73764,73765],{"class":129},"location.href ",[123,73767,134],{"class":133},[123,73769,73770],{"class":143}," 'http:\u002F\u002Fm.itcast.cn'",[123,73772,5116],{"class":129},[123,73774,73775],{"class":125,"line":673},[123,73776,73777],{"class":129},"} \n",[123,73779,73780],{"class":125,"line":692},[123,73781,73782],{"class":129},"})()\n",[2587,73784,73786],{"id":73785},"_346-histroy对象","3.4.6 histroy对象",[19,73788,73789],{},[3929,73790],{"alt":118,"src":73791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73793,73794],{},"浏览器地址的前进与后退!!!",[19,73796,73797],{},"history.back() 等效于 history.go(-1)",[19,73799,73800],{},"history.forward() 等效于 history.go(1)",[14,73802,73804],{"id":73803},"_35-本地存储","3.5 本地存储",[26,73806,73807,73810,73813],{},[29,73808,73809],{},"数据存储在用户浏览器中",[29,73811,73812],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73814,73815],{},"容量较大，sessionStorage和localStorage约 5M 左右",[2587,73817,73819],{"id":73818},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73821,73822],{},"只能存储字符串",[19,73824,73825],{},[3929,73826],{"alt":118,"src":73827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73829,73830],{},[3929,73831],{"alt":118,"src":73832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73834,73835],{},"键值对要加引号,不然就会当变量来看了",[19,73837,73838],{},"localStorage.setItem('uname', 'pink')",[19,73840,73841],{},"刷新之后信息不再丢失",[19,73843,73844],{},"操作key,value会跟着变",[19,73846,73847],{},"删除只删除键就可以,即名字",[19,73849,73838],{},[19,73851,73852],{},"改:",[19,73854,73855],{},"localStorage.setItem('uname','red')",[19,73857,73858],{},"有这个键就是改,没有这个键就是改",[19,73860,73861],{},[3929,73862],{"alt":118,"src":73863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73865,73866],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73868,73869],{},[3929,73870],{"alt":118,"src":73871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73873,73874],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[2587,73876,73878],{"id":73877},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73880,73881],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73883,73884],{},"特性:",[26,73886,73887,73890,73893,73896],{},[29,73888,73889],{},"生命周期为关闭浏览器窗口",[29,73891,73892],{},"在同一个窗口(页面)下数据可以共享",[29,73894,73895],{},"以键值对的形式存储使用",[29,73897,73898],{},"用法跟localStorage 基本相同",[2587,73900,73902],{"id":73901},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73904,73905],{},"本地只能存储字符串,无法直接存储复杂数据类型",[113,73907,73909],{"className":55470,"code":73908,"language":55472,"meta":118,"style":118},"\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",[120,73910,73911,73919,73924,73929,73934,73939,73943,73948,73953],{"__ignoreMap":118},[123,73912,73913,73915,73917],{"class":125,"line":126},[123,73914,3509],{"class":129},[123,73916,54218],{"class":53707},[123,73918,53714],{"class":129},[123,73920,73921],{"class":125,"line":140},[123,73922,73923],{"class":129},"    const obj = {\n",[123,73925,73926],{"class":125,"line":156},[123,73927,73928],{"class":129},"      uname: 'pink老师',\n",[123,73930,73931],{"class":125,"line":168},[123,73932,73933],{"class":129},"      age: 18,\n",[123,73935,73936],{"class":125,"line":268},[123,73937,73938],{"class":129},"      gender: '女'\n",[123,73940,73941],{"class":125,"line":291},[123,73942,4631],{"class":129},[123,73944,73945],{"class":125,"line":300},[123,73946,73947],{"class":129},"    \u002F\u002F 存储复杂数据类型\n",[123,73949,73950],{"class":125,"line":305},[123,73951,73952],{"class":129},"    localStorage.setItem('obj', obj)\n",[123,73954,73955,73957,73959],{"class":125,"line":316},[123,73956,54820],{"class":129},[123,73958,54218],{"class":53707},[123,73960,53714],{"class":129},[19,73962,73963],{},[3929,73964],{"alt":118,"src":73965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73967,73968],{},"如果获取一下数据:",[19,73970,73971],{},"log(localStorage.getItem('obj'))",[19,73973,73974],{},[3929,73975],{"alt":118,"src":73976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73978,73979],{},"发现直接存对象是使用不了的!!!",[24425,73981,73983],{"id":73982},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73985,73986],{},[3929,73987],{"alt":118,"src":73988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[113,73990,73992],{"className":53040,"code":73991,"language":53042,"meta":118,"style":118},"\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",[120,73993,73994,74002,74012,74022,74031,74039,74043,74047,74073,74092,74100,74104,74109,74114],{"__ignoreMap":118},[123,73995,73996,73998,74000],{"class":125,"line":126},[123,73997,3509],{"class":129},[123,73999,54218],{"class":53707},[123,74001,53714],{"class":129},[123,74003,74004,74006,74008,74010],{"class":125,"line":140},[123,74005,13653],{"class":133},[123,74007,72371],{"class":164},[123,74009,15995],{"class":133},[123,74011,137],{"class":129},[123,74013,74014,74017,74020],{"class":125,"line":156},[123,74015,74016],{"class":129},"      uname: ",[123,74018,74019],{"class":143},"'pink老师'",[123,74021,153],{"class":129},[123,74023,74024,74027,74029],{"class":125,"line":168},[123,74025,74026],{"class":129},"      age: ",[123,74028,3252],{"class":164},[123,74030,153],{"class":129},[123,74032,74033,74036],{"class":125,"line":268},[123,74034,74035],{"class":129},"      gender: ",[123,74037,74038],{"class":143},"'女'\n",[123,74040,74041],{"class":125,"line":291},[123,74042,4631],{"class":129},[123,74044,74045],{"class":125,"line":300},[123,74046,73947],{"class":2673},[123,74048,74049,74052,74055,74057,74060,74062,74065,74067,74070],{"class":125,"line":305},[123,74050,74051],{"class":129},"  localStorage.",[123,74053,74054],{"class":337},"setItem",[123,74056,1315],{"class":129},[123,74058,74059],{"class":143},"'obj'",[123,74061,251],{"class":129},[123,74063,74064],{"class":164},"JSON",[123,74066,3161],{"class":129},[123,74068,74069],{"class":337},"stringify",[123,74071,74072],{"class":129},"(obj))\n",[123,74074,74075,74078,74080,74083,74086,74088,74090],{"class":125,"line":316},[123,74076,74077],{"class":129},"  console.",[123,74079,60649],{"class":337},[123,74081,74082],{"class":129},"(localStorage.",[123,74084,74085],{"class":337},"getItem",[123,74087,1315],{"class":129},[123,74089,74059],{"class":143},[123,74091,32913],{"class":129},[123,74093,74094,74096,74098],{"class":125,"line":673},[123,74095,54820],{"class":129},[123,74097,54218],{"class":53707},[123,74099,53714],{"class":129},[123,74101,74102],{"class":125,"line":692},[123,74103,73021],{"class":129},[123,74105,74106],{"class":125,"line":713},[123,74107,74108],{"class":129},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[123,74110,74111],{"class":125,"line":718},[123,74112,74113],{"class":129},"  类型是字符串的\n",[123,74115,74116],{"class":125,"line":1138},[123,74117,74118],{"class":129},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24425,74120,74122],{"id":74121},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,74124,74125],{},[3929,74126],{"alt":118,"src":74127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,74129,74130],{},[3929,74131],{"alt":118,"src":74132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[113,74134,74136],{"className":55470,"code":74135,"language":55472,"meta":118,"style":118},"  \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",[120,74137,74138,74146,74150,74154,74158,74162,74166,74171,74176,74181,74186,74191,74196,74201,74206],{"__ignoreMap":118},[123,74139,74140,74142,74144],{"class":125,"line":126},[123,74141,54548],{"class":129},[123,74143,54218],{"class":53707},[123,74145,53714],{"class":129},[123,74147,74148],{"class":125,"line":140},[123,74149,73923],{"class":129},[123,74151,74152],{"class":125,"line":156},[123,74153,73928],{"class":129},[123,74155,74156],{"class":125,"line":168},[123,74157,73933],{"class":129},[123,74159,74160],{"class":125,"line":268},[123,74161,73938],{"class":129},[123,74163,74164],{"class":125,"line":291},[123,74165,4631],{"class":129},[123,74167,74168],{"class":125,"line":300},[123,74169,74170],{"class":129},"    \u002F\u002F 1.存储复杂数据类型\n",[123,74172,74173],{"class":125,"line":305},[123,74174,74175],{"class":129},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[123,74177,74178],{"class":125,"line":316},[123,74179,74180],{"class":129},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[123,74182,74183],{"class":125,"line":673},[123,74184,74185],{"class":129},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[123,74187,74188],{"class":125,"line":692},[123,74189,74190],{"class":129},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[123,74192,74193],{"class":125,"line":713},[123,74194,74195],{"class":129},"    \u002F\u002F 取\n",[123,74197,74198],{"class":125,"line":718},[123,74199,74200],{"class":129},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[123,74202,74203],{"class":125,"line":1138},[123,74204,74205],{"class":129},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[123,74207,74208,74210,74212],{"class":125,"line":1429},[123,74209,54820],{"class":129},[123,74211,54218],{"class":53707},[123,74213,53714],{"class":129},[19,74215,74216],{},[3929,74217],{"alt":118,"src":74218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[2587,74220,74222],{"id":74221},"_356-数组map方法","3.5.6 数组map方法",[19,74224,74225],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74227,74228],{},[3929,74229],{"alt":118,"src":74230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74232,74233],{},[3929,74234],{"alt":118,"src":74235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74237,74238,74241],{},[2759,74239,74240],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74243,74244],{},"map有返回值，但是forEach没有返回值",[19,74246,74247],{},"map是个方法。用的时候要加 ()",[19,74249,74250],{},"map返回的是一个数组",[2587,74252,74254],{"id":74253},"_357-数组中join方法","3.5.7 数组中join方法",[19,74256,74257],{},[3929,74258],{"alt":118,"src":74259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74261,74262],{},"类似于python中拼接字符串一样！",[26,74264,74265,74268,74271],{},[29,74266,74267],{},"小括号为空则逗号分开",[29,74269,74270],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,74272,74273],{},"小括号用啥符号就用进行分割",[2587,74275,74277],{"id":74276},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,74279,74280,74283,74286,74289,74292],{},[29,74281,74282],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,74284,74285],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,74287,74288],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,74290,74291],{},"return可以实现函数的结束",[29,74293,74294],{},"禁止跳转是 preventDefault() 不要忘记",[113,74296,74298],{"className":53040,"code":74297,"language":53042,"meta":118,"style":118},"\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",[120,74299,74300,74310,74324,74328,74336,74350,74370,74382,74390,74396,74406,74416,74420,74424,74430,74440,74452,74456,74460,74467,74479,74493,74503,74507,74511,74518,74525,74532,74544,74556,74566,74578,74582,74586,74593,74600,74612,74624,74634,74646,74676,74680,74684,74691,74703,74715,74739,74749,74759,74763,74767,74775,74786,74798,74810,74822,74839,74851,74863,74867,74871,74878,74890,74902,74914,74925,74943,74956,74968,74992,75003,75007,75011,75019,75029,75033,75037,75043,75055,75066,75076,75080,75084,75090,75112,75116,75120,75126,75132,75144,75154,75166,75196,75209,75226,75230,75234,75245,75267,75277,75281,75285,75298,75308,75320,75332,75344,75356,75366,75376,75386,75397,75410,75414,75422,75430,75434,75442,75455,75475,75508,75541,75574,75600,75618,75636,75644,75670,75688,75706,75724,75742,75760,75768,75776,75794,75802,75831,75839,75847,75855,75868,75880,75892,75904,75916,75928,75941,75953,75961,75969,75977,75982,75987,75991,75995,75999,76003,76007,76011,76016,76021,76026,76031,76039,76047,76055,76060,76065,76070,76075,76080,76085,76090,76095,76100,76105,76110,76115,76120,76125,76129,76134,76139,76149,76158,76162,76167,76176,76192,76234,76274,76313,76378,76386,76390,76395,76413,76421,76426,76431,76461,76467,76472,76485,76497,76509,76521,76533,76545,76557,76561,76571,76575,76580,76585,76589,76598,76602,76607,76612,76631,76636,76656,76660,76665,76669,76674,76692,76710,76728,76747,76766,76785,76790,76796,76817,76823,76832,76838,76844,76850,76877,76890,76895,76905,76911,76917,76923,76929,76934,76940,76946,76952,76958,76991,76996,77001,77006,77011,77017,77023,77029,77040,77045,77051,77058,77072,77078,77102,77107,77112,77118,77124,77145,77151,77164,77170,77176,77182,77188,77193,77199,77205,77211,77229,77243,77249,77257,77263,77285,77290,77295,77300,77305,77310,77319,77328,77333],{"__ignoreMap":118},[123,74301,74302,74304,74306,74308],{"class":125,"line":126},[123,74303,53704],{"class":129},[123,74305,53708],{"class":53707},[123,74307,53711],{"class":337},[123,74309,53714],{"class":129},[123,74311,74312,74314,74316,74318,74320,74322],{"class":125,"line":140},[123,74313,3509],{"class":129},[123,74315,53042],{"class":53707},[123,74317,53723],{"class":337},[123,74319,134],{"class":129},[123,74321,53728],{"class":143},[123,74323,53714],{"class":129},[123,74325,74326],{"class":125,"line":156},[123,74327,232],{"emptyLinePlaceholder":231},[123,74329,74330,74332,74334],{"class":125,"line":168},[123,74331,3509],{"class":129},[123,74333,53741],{"class":53707},[123,74335,53714],{"class":129},[123,74337,74338,74340,74342,74344,74346,74348],{"class":125,"line":268},[123,74339,54548],{"class":129},[123,74341,53751],{"class":53707},[123,74343,53754],{"class":337},[123,74345,134],{"class":129},[123,74347,53759],{"class":143},[123,74349,53714],{"class":129},[123,74351,74352,74354,74356,74358,74360,74362,74364,74366,74368],{"class":125,"line":291},[123,74353,54548],{"class":129},[123,74355,53751],{"class":53707},[123,74357,17350],{"class":337},[123,74359,134],{"class":129},[123,74361,53798],{"class":143},[123,74363,53778],{"class":337},[123,74365,134],{"class":129},[123,74367,53805],{"class":143},[123,74369,53714],{"class":129},[123,74371,74372,74374,74376,74378,74380],{"class":125,"line":300},[123,74373,54548],{"class":129},[123,74375,642],{"class":53707},[123,74377,53816],{"class":129},[123,74379,642],{"class":53707},[123,74381,53714],{"class":129},[123,74383,74384,74386,74388],{"class":125,"line":305},[123,74385,54548],{"class":129},[123,74387,2526],{"class":53707},[123,74389,53714],{"class":129},[123,74391,74392,74394],{"class":125,"line":316},[123,74393,8836],{"class":53707},[123,74395,137],{"class":129},[123,74397,74398,74400,74402,74404],{"class":125,"line":673},[123,74399,57098],{"class":164},[123,74401,147],{"class":129},[123,74403,2799],{"class":164},[123,74405,3760],{"class":129},[123,74407,74408,74410,74412,74414],{"class":125,"line":692},[123,74409,57109],{"class":164},[123,74411,147],{"class":129},[123,74413,2799],{"class":164},[123,74415,3760],{"class":129},[123,74417,74418],{"class":125,"line":713},[123,74419,4631],{"class":129},[123,74421,74422],{"class":125,"line":718},[123,74423,232],{"emptyLinePlaceholder":231},[123,74425,74426,74428],{"class":125,"line":1138},[123,74427,59681],{"class":53707},[123,74429,137],{"class":129},[123,74431,74432,74434,74436,74438],{"class":125,"line":1429},[123,74433,59688],{"class":164},[123,74435,147],{"class":129},[123,74437,53997],{"class":164},[123,74439,3760],{"class":129},[123,74441,74442,74444,74446,74448,74450],{"class":125,"line":1439},[123,74443,64479],{"class":164},[123,74445,147],{"class":129},[123,74447,3302],{"class":164},[123,74449,53897],{"class":133},[123,74451,3760],{"class":129},[123,74453,74454],{"class":125,"line":1444},[123,74455,4631],{"class":129},[123,74457,74458],{"class":125,"line":1453},[123,74459,232],{"emptyLinePlaceholder":231},[123,74461,74462,74465],{"class":125,"line":1458},[123,74463,74464],{"class":337},"    .info",[123,74466,137],{"class":129},[123,74468,74469,74471,74473,74475,74477],{"class":125,"line":1476},[123,74470,57174],{"class":164},[123,74472,147],{"class":129},[123,74474,53894],{"class":164},[123,74476,53897],{"class":133},[123,74478,3760],{"class":129},[123,74480,74481,74483,74485,74487,74489,74491],{"class":125,"line":1494},[123,74482,57109],{"class":164},[123,74484,147],{"class":129},[123,74486,2193],{"class":164},[123,74488,53897],{"class":133},[123,74490,53961],{"class":164},[123,74492,3760],{"class":129},[123,74494,74495,74497,74499,74501],{"class":125,"line":1499},[123,74496,59688],{"class":164},[123,74498,147],{"class":129},[123,74500,53997],{"class":164},[123,74502,3760],{"class":129},[123,74504,74505],{"class":125,"line":1517},[123,74506,4631],{"class":129},[123,74508,74509],{"class":125,"line":1534},[123,74510,232],{"emptyLinePlaceholder":231},[123,74512,74513,74516],{"class":125,"line":1539},[123,74514,74515],{"class":337},"    .uname",[123,74517,153],{"class":129},[123,74519,74520,74523],{"class":125,"line":2080},[123,74521,74522],{"class":337},"    .age",[123,74524,153],{"class":129},[123,74526,74527,74530],{"class":125,"line":2097},[123,74528,74529],{"class":337},"    .salary",[123,74531,137],{"class":129},[123,74533,74534,74536,74538,74540,74542],{"class":125,"line":2114},[123,74535,57174],{"class":164},[123,74537,147],{"class":129},[123,74539,259],{"class":164},[123,74541,53897],{"class":133},[123,74543,3760],{"class":129},[123,74545,74546,74548,74550,74552,74554],{"class":125,"line":2125},[123,74547,57188],{"class":164},[123,74549,147],{"class":129},[123,74551,3302],{"class":164},[123,74553,53897],{"class":133},[123,74555,3760],{"class":129},[123,74557,74558,74560,74562,74564],{"class":125,"line":2130},[123,74559,64182],{"class":164},[123,74561,147],{"class":129},[123,74563,57140],{"class":164},[123,74565,3760],{"class":129},[123,74567,74568,74570,74572,74574,74576],{"class":125,"line":5033},[123,74569,64152],{"class":164},[123,74571,147],{"class":129},[123,74573,3178],{"class":164},[123,74575,53897],{"class":133},[123,74577,3760],{"class":129},[123,74579,74580],{"class":125,"line":5041},[123,74581,4631],{"class":129},[123,74583,74584],{"class":125,"line":5046},[123,74585,232],{"emptyLinePlaceholder":231},[123,74587,74588,74591],{"class":125,"line":5052},[123,74589,74590],{"class":337},"    .gender",[123,74592,153],{"class":129},[123,74594,74595,74598],{"class":125,"line":5058},[123,74596,74597],{"class":337},"    .city",[123,74599,137],{"class":129},[123,74601,74602,74604,74606,74608,74610],{"class":125,"line":5063},[123,74603,57174],{"class":164},[123,74605,147],{"class":129},[123,74607,259],{"class":164},[123,74609,53897],{"class":133},[123,74611,3760],{"class":129},[123,74613,74614,74616,74618,74620,74622],{"class":125,"line":10380},[123,74615,57188],{"class":164},[123,74617,147],{"class":129},[123,74619,3426],{"class":164},[123,74621,53897],{"class":133},[123,74623,3760],{"class":129},[123,74625,74626,74628,74630,74632],{"class":125,"line":10404},[123,74627,64182],{"class":164},[123,74629,147],{"class":129},[123,74631,57140],{"class":164},[123,74633,3760],{"class":129},[123,74635,74636,74638,74640,74642,74644],{"class":125,"line":10409},[123,74637,64152],{"class":164},[123,74639,147],{"class":129},[123,74641,3178],{"class":164},[123,74643,53897],{"class":133},[123,74645,3760],{"class":129},[123,74647,74648,74650,74652,74654,74656,74658,74661,74663,74665,74667,74670,74672,74674],{"class":125,"line":10415},[123,74649,64379],{"class":164},[123,74651,147],{"class":129},[123,74653,2825],{"class":164},[123,74655,53897],{"class":133},[123,74657,53926],{"class":164},[123,74659,74660],{"class":164}," rgb",[123,74662,1315],{"class":129},[123,74664,1045],{"class":164},[123,74666,251],{"class":129},[123,74668,74669],{"class":164},"197",[123,74671,251],{"class":129},[123,74673,74669],{"class":164},[123,74675,5161],{"class":129},[123,74677,74678],{"class":125,"line":10442},[123,74679,4631],{"class":129},[123,74681,74682],{"class":125,"line":10447},[123,74683,232],{"emptyLinePlaceholder":231},[123,74685,74686,74689],{"class":125,"line":10453},[123,74687,74688],{"class":53707},"    button",[123,74690,137],{"class":129},[123,74692,74693,74695,74697,74699,74701],{"class":125,"line":10465},[123,74694,57188],{"class":164},[123,74696,147],{"class":129},[123,74698,3426],{"class":164},[123,74700,53897],{"class":133},[123,74702,3760],{"class":129},[123,74704,74705,74707,74709,74711,74713],{"class":125,"line":10477},[123,74706,57174],{"class":164},[123,74708,147],{"class":129},[123,74710,3089],{"class":164},[123,74712,53897],{"class":133},[123,74714,3760],{"class":129},[123,74716,74717,74719,74721,74724,74726,74728,74730,74733,74735,74737],{"class":125,"line":10489},[123,74718,57287],{"class":164},[123,74720,147],{"class":129},[123,74722,74723],{"class":164},"rgb",[123,74725,1315],{"class":129},[123,74727,3568],{"class":164},[123,74729,251],{"class":129},[123,74731,74732],{"class":164},"187",[123,74734,251],{"class":129},[123,74736,2907],{"class":164},[123,74738,5161],{"class":129},[123,74740,74741,74743,74745,74747],{"class":125,"line":12148},[123,74742,59818],{"class":164},[123,74744,147],{"class":129},[123,74746,63244],{"class":164},[123,74748,3760],{"class":129},[123,74750,74751,74753,74755,74757],{"class":125,"line":12173},[123,74752,64379],{"class":164},[123,74754,147],{"class":129},[123,74756,2799],{"class":164},[123,74758,3760],{"class":129},[123,74760,74761],{"class":125,"line":12196},[123,74762,4631],{"class":129},[123,74764,74765],{"class":125,"line":12220},[123,74766,232],{"emptyLinePlaceholder":231},[123,74768,74769,74771,74773],{"class":125,"line":12225},[123,74770,74688],{"class":53707},[123,74772,54093],{"class":53707},[123,74774,137],{"class":129},[123,74776,74777,74779,74781,74784],{"class":125,"line":12230},[123,74778,57412],{"class":164},[123,74780,147],{"class":129},[123,74782,74783],{"class":164},"inline-block",[123,74785,3760],{"class":129},[123,74787,74788,74790,74792,74794,74796],{"class":125,"line":12235},[123,74789,57174],{"class":164},[123,74791,147],{"class":129},[123,74793,2193],{"class":164},[123,74795,53897],{"class":133},[123,74797,3760],{"class":129},[123,74799,74800,74802,74804,74806,74808],{"class":125,"line":12244},[123,74801,57188],{"class":164},[123,74803,147],{"class":129},[123,74805,2193],{"class":164},[123,74807,53897],{"class":133},[123,74809,3760],{"class":129},[123,74811,74812,74814,74816,74818,74820],{"class":125,"line":12249},[123,74813,59761],{"class":164},[123,74815,147],{"class":129},[123,74817,3077],{"class":164},[123,74819,53897],{"class":133},[123,74821,3760],{"class":129},[123,74823,74824,74826,74828,74830,74832,74834,74837],{"class":125,"line":12255},[123,74825,64379],{"class":164},[123,74827,147],{"class":129},[123,74829,2825],{"class":164},[123,74831,53897],{"class":133},[123,74833,53926],{"class":164},[123,74835,74836],{"class":164}," #fff",[123,74838,3760],{"class":129},[123,74840,74841,74843,74845,74847,74849],{"class":125,"line":12276},[123,74842,57537],{"class":164},[123,74844,147],{"class":129},[123,74846,2926],{"class":164},[123,74848,53897],{"class":133},[123,74850,3760],{"class":129},[123,74852,74853,74855,74857,74859,74861],{"class":125,"line":12282},[123,74854,64152],{"class":164},[123,74856,147],{"class":129},[123,74858,2825],{"class":164},[123,74860,53897],{"class":133},[123,74862,3760],{"class":129},[123,74864,74865],{"class":125,"line":12296},[123,74866,4631],{"class":129},[123,74868,74869],{"class":125,"line":12302},[123,74870,232],{"emptyLinePlaceholder":231},[123,74872,74873,74876],{"class":125,"line":12329},[123,74874,74875],{"class":337},"    .total",[123,74877,137],{"class":129},[123,74879,74880,74882,74884,74886,74888],{"class":125,"line":12338},[123,74881,57174],{"class":164},[123,74883,147],{"class":129},[123,74885,64031],{"class":164},[123,74887,53897],{"class":133},[123,74889,3760],{"class":129},[123,74891,74892,74894,74896,74898,74900],{"class":125,"line":12344},[123,74893,57188],{"class":164},[123,74895,147],{"class":129},[123,74897,3007],{"class":164},[123,74899,53897],{"class":133},[123,74901,3760],{"class":129},[123,74903,74904,74906,74908,74910,74912],{"class":125,"line":12352},[123,74905,59761],{"class":164},[123,74907,147],{"class":129},[123,74909,3007],{"class":164},[123,74911,53897],{"class":133},[123,74913,3760],{"class":129},[123,74915,74916,74918,74920,74923],{"class":125,"line":12357},[123,74917,59688],{"class":164},[123,74919,147],{"class":129},[123,74921,74922],{"class":164},"right",[123,74924,3760],{"class":129},[123,74926,74927,74929,74931,74933,74935,74937,74939,74941],{"class":125,"line":19032},[123,74928,57109],{"class":164},[123,74930,147],{"class":129},[123,74932,3007],{"class":164},[123,74934,53897],{"class":133},[123,74936,53961],{"class":164},[123,74938,4482],{"class":164},[123,74940,53897],{"class":133},[123,74942,3760],{"class":129},[123,74944,74945,74948,74950,74952,74954],{"class":125,"line":19038},[123,74946,74947],{"class":164},"      padding-right",[123,74949,147],{"class":129},[123,74951,2193],{"class":164},[123,74953,53897],{"class":133},[123,74955,3760],{"class":129},[123,74957,74958,74960,74962,74964,74966],{"class":125,"line":19061},[123,74959,57325],{"class":164},[123,74961,147],{"class":129},[123,74963,2269],{"class":164},[123,74965,53897],{"class":133},[123,74967,3760],{"class":129},[123,74969,74970,74972,74974,74976,74978,74981,74983,74986,74988,74990],{"class":125,"line":19067},[123,74971,57287],{"class":164},[123,74973,147],{"class":129},[123,74975,74723],{"class":164},[123,74977,1315],{"class":129},[123,74979,74980],{"class":164},"237",[123,74982,251],{"class":129},[123,74984,74985],{"class":164},"235",[123,74987,251],{"class":129},[123,74989,74985],{"class":164},[123,74991,5161],{"class":129},[123,74993,74994,74997,74999,75001],{"class":125,"line":19090},[123,74995,74996],{"class":164},"      box-sizing",[123,74998,147],{"class":129},[123,75000,62907],{"class":164},[123,75002,3760],{"class":129},[123,75004,75005],{"class":125,"line":19104},[123,75006,4631],{"class":129},[123,75008,75009],{"class":125,"line":19124},[123,75010,232],{"emptyLinePlaceholder":231},[123,75012,75013,75015,75017],{"class":125,"line":19130},[123,75014,74875],{"class":337},[123,75016,54093],{"class":53707},[123,75018,137],{"class":129},[123,75020,75021,75023,75025,75027],{"class":125,"line":19141},[123,75022,59818],{"class":164},[123,75024,147],{"class":129},[123,75026,59823],{"class":164},[123,75028,3760],{"class":129},[123,75030,75031],{"class":125,"line":19164},[123,75032,4631],{"class":129},[123,75034,75035],{"class":125,"line":19186},[123,75036,232],{"emptyLinePlaceholder":231},[123,75038,75039,75041],{"class":125,"line":19191},[123,75040,67424],{"class":53707},[123,75042,137],{"class":129},[123,75044,75045,75047,75049,75051,75053],{"class":125,"line":19197},[123,75046,57174],{"class":164},[123,75048,147],{"class":129},[123,75050,64031],{"class":164},[123,75052,53897],{"class":133},[123,75054,3760],{"class":129},[123,75056,75057,75059,75061,75064],{"class":125,"line":19211},[123,75058,57109],{"class":164},[123,75060,147],{"class":129},[123,75062,75063],{"class":164},"auto",[123,75065,3760],{"class":129},[123,75067,75068,75070,75072,75074],{"class":125,"line":19224},[123,75069,67431],{"class":164},[123,75071,147],{"class":129},[123,75073,67436],{"class":164},[123,75075,3760],{"class":129},[123,75077,75078],{"class":125,"line":19229},[123,75079,4631],{"class":129},[123,75081,75082],{"class":125,"line":19243},[123,75083,232],{"emptyLinePlaceholder":231},[123,75085,75086,75088],{"class":125,"line":19248},[123,75087,67516],{"class":53707},[123,75089,137],{"class":129},[123,75091,75092,75094,75096,75098,75100,75102,75104,75106,75108,75110],{"class":125,"line":19254},[123,75093,57287],{"class":164},[123,75095,147],{"class":129},[123,75097,74723],{"class":164},[123,75099,1315],{"class":129},[123,75101,74980],{"class":164},[123,75103,251],{"class":129},[123,75105,74985],{"class":164},[123,75107,251],{"class":129},[123,75109,74985],{"class":164},[123,75111,5161],{"class":129},[123,75113,75114],{"class":125,"line":19259},[123,75115,4631],{"class":129},[123,75117,75118],{"class":125,"line":19273},[123,75119,232],{"emptyLinePlaceholder":231},[123,75121,75122,75124],{"class":125,"line":19278},[123,75123,67516],{"class":53707},[123,75125,153],{"class":129},[123,75127,75128,75130],{"class":125,"line":19283},[123,75129,67582],{"class":53707},[123,75131,137],{"class":129},[123,75133,75134,75136,75138,75140,75142],{"class":125,"line":19297},[123,75135,57188],{"class":164},[123,75137,147],{"class":129},[123,75139,2881],{"class":164},[123,75141,53897],{"class":133},[123,75143,3760],{"class":129},[123,75145,75146,75148,75150,75152],{"class":125,"line":19309},[123,75147,59688],{"class":164},[123,75149,147],{"class":129},[123,75151,26163],{"class":164},[123,75153,3760],{"class":129},[123,75155,75156,75158,75160,75162,75164],{"class":125,"line":19314},[123,75157,57325],{"class":164},[123,75159,147],{"class":129},[123,75161,3152],{"class":164},[123,75163,53897],{"class":133},[123,75165,3760],{"class":129},[123,75167,75168,75170,75172,75174,75176,75178,75180,75182,75185,75187,75190,75192,75194],{"class":125,"line":19327},[123,75169,64379],{"class":164},[123,75171,147],{"class":129},[123,75173,2825],{"class":164},[123,75175,53897],{"class":133},[123,75177,53926],{"class":164},[123,75179,74660],{"class":164},[123,75181,1315],{"class":129},[123,75183,75184],{"class":164},"228",[123,75186,251],{"class":129},[123,75188,75189],{"class":164},"225",[123,75191,251],{"class":129},[123,75193,75189],{"class":164},[123,75195,5161],{"class":129},[123,75197,75198,75201,75203,75205,75207],{"class":125,"line":19332},[123,75199,75200],{"class":164},"      padding-left",[123,75202,147],{"class":129},[123,75204,2926],{"class":164},[123,75206,53897],{"class":133},[123,75208,3760],{"class":129},[123,75210,75211,75213,75215,75217,75220,75222,75224],{"class":125,"line":19337},[123,75212,64262],{"class":164},[123,75214,147],{"class":129},[123,75216,30542],{"class":164},[123,75218,75219],{"class":164}," linear",[123,75221,64269],{"class":164},[123,75223,3297],{"class":133},[123,75225,3760],{"class":129},[123,75227,75228],{"class":125,"line":19342},[123,75229,4631],{"class":129},[123,75231,75232],{"class":125,"line":19355},[123,75233,232],{"emptyLinePlaceholder":231},[123,75235,75236,75239,75241,75243],{"class":125,"line":19360},[123,75237,75238],{"class":53707},"    tbody",[123,75240,72544],{"class":53707},[123,75242,63342],{"class":337},[123,75244,137],{"class":129},[123,75246,75247,75249,75251,75253,75255,75257,75259,75261,75263,75265],{"class":125,"line":35045},[123,75248,57287],{"class":164},[123,75250,147],{"class":129},[123,75252,74723],{"class":164},[123,75254,1315],{"class":129},[123,75256,74980],{"class":164},[123,75258,251],{"class":129},[123,75260,74985],{"class":164},[123,75262,251],{"class":129},[123,75264,74985],{"class":164},[123,75266,5161],{"class":129},[123,75268,75269,75271,75273,75275],{"class":125,"line":35051},[123,75270,64427],{"class":164},[123,75272,147],{"class":129},[123,75274,64432],{"class":164},[123,75276,3760],{"class":129},[123,75278,75279],{"class":125,"line":35057},[123,75280,4631],{"class":129},[123,75282,75283],{"class":125,"line":35063},[123,75284,232],{"emptyLinePlaceholder":231},[123,75286,75287,75289,75291,75294,75296],{"class":125,"line":35069},[123,75288,75238],{"class":53707},[123,75290,72544],{"class":53707},[123,75292,75293],{"class":53707}," td",[123,75295,3865],{"class":53707},[123,75297,137],{"class":129},[123,75299,75300,75302,75304,75306],{"class":125,"line":35080},[123,75301,57412],{"class":164},[123,75303,147],{"class":129},[123,75305,63271],{"class":164},[123,75307,3760],{"class":129},[123,75309,75310,75312,75314,75316,75318],{"class":125,"line":35086},[123,75311,57174],{"class":164},[123,75313,147],{"class":129},[123,75315,3506],{"class":164},[123,75317,53897],{"class":133},[123,75319,3760],{"class":129},[123,75321,75322,75324,75326,75328,75330],{"class":125,"line":35106},[123,75323,57188],{"class":164},[123,75325,147],{"class":129},[123,75327,3426],{"class":164},[123,75329,53897],{"class":133},[123,75331,3760],{"class":129},[123,75333,75334,75336,75338,75340,75342],{"class":125,"line":35112},[123,75335,59761],{"class":164},[123,75337,147],{"class":129},[123,75339,3426],{"class":164},[123,75341,53897],{"class":133},[123,75343,3760],{"class":129},[123,75345,75346,75348,75350,75352,75354],{"class":125,"line":35123},[123,75347,64479],{"class":164},[123,75349,147],{"class":129},[123,75351,2692],{"class":164},[123,75353,53897],{"class":133},[123,75355,3760],{"class":129},[123,75357,75358,75360,75362,75364],{"class":125,"line":35129},[123,75359,59818],{"class":164},[123,75361,147],{"class":129},[123,75363,63244],{"class":164},[123,75365,3760],{"class":129},[123,75367,75368,75370,75372,75374],{"class":125,"line":35135},[123,75369,59688],{"class":164},[123,75371,147],{"class":129},[123,75373,53997],{"class":164},[123,75375,3760],{"class":129},[123,75377,75378,75380,75382,75384],{"class":125,"line":35141},[123,75379,66371],{"class":164},[123,75381,147],{"class":129},[123,75383,57140],{"class":164},[123,75385,3760],{"class":129},[123,75387,75388,75390,75392,75395],{"class":125,"line":35147},[123,75389,57287],{"class":164},[123,75391,147],{"class":129},[123,75393,75394],{"class":164},"orange",[123,75396,3760],{"class":129},[123,75398,75399,75401,75403,75406,75408],{"class":125,"line":35153},[123,75400,57537],{"class":164},[123,75402,147],{"class":129},[123,75404,75405],{"class":164},"12.5",[123,75407,53897],{"class":133},[123,75409,3760],{"class":129},[123,75411,75412],{"class":125,"line":35159},[123,75413,4631],{"class":129},[123,75415,75416,75418,75420],{"class":125,"line":35165},[123,75417,54820],{"class":129},[123,75419,2526],{"class":53707},[123,75421,53714],{"class":129},[123,75423,75424,75426,75428],{"class":125,"line":35185},[123,75425,54190],{"class":129},[123,75427,53741],{"class":53707},[123,75429,53714],{"class":129},[123,75431,75432],{"class":125,"line":35191},[123,75433,232],{"emptyLinePlaceholder":231},[123,75435,75436,75438,75440],{"class":125,"line":35207},[123,75437,3509],{"class":129},[123,75439,54205],{"class":53707},[123,75441,53714],{"class":129},[123,75443,75444,75446,75448,75451,75453],{"class":125,"line":35213},[123,75445,54548],{"class":129},[123,75447,14],{"class":53707},[123,75449,75450],{"class":129},">学生就业统计表\u003C\u002F",[123,75452,14],{"class":53707},[123,75454,53714],{"class":129},[123,75456,75457,75459,75461,75463,75465,75467,75469,75471,75473],{"class":125,"line":35227},[123,75458,54548],{"class":129},[123,75460,69026],{"class":53707},[123,75462,55889],{"class":337},[123,75464,134],{"class":129},[123,75466,65066],{"class":143},[123,75468,71471],{"class":337},[123,75470,134],{"class":129},[123,75472,34188],{"class":143},[123,75474,53714],{"class":129},[123,75476,75477,75479,75481,75483,75485,75487,75489,75491,75493,75495,75497,75500,75502,75504,75506],{"class":125,"line":35233},[123,75478,53748],{"class":129},[123,75480,56224],{"class":53707},[123,75482,56227],{"class":337},[123,75484,134],{"class":129},[123,75486,65100],{"class":143},[123,75488,17350],{"class":337},[123,75490,134],{"class":129},[123,75492,71497],{"class":143},[123,75494,63422],{"class":337},[123,75496,134],{"class":129},[123,75498,75499],{"class":143},"\"姓名\"",[123,75501,55889],{"class":337},[123,75503,134],{"class":129},[123,75505,71497],{"class":143},[123,75507,53714],{"class":129},[123,75509,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530,75533,75535,75537,75539],{"class":125,"line":35248},[123,75511,53748],{"class":129},[123,75513,56224],{"class":53707},[123,75515,56227],{"class":337},[123,75517,134],{"class":129},[123,75519,65100],{"class":143},[123,75521,17350],{"class":337},[123,75523,134],{"class":129},[123,75525,71525],{"class":143},[123,75527,63422],{"class":337},[123,75529,134],{"class":129},[123,75531,75532],{"class":143},"\"年龄\"",[123,75534,55889],{"class":337},[123,75536,134],{"class":129},[123,75538,71525],{"class":143},[123,75540,53714],{"class":129},[123,75542,75543,75545,75547,75549,75551,75553,75555,75557,75559,75561,75563,75566,75568,75570,75572],{"class":125,"line":35254},[123,75544,53748],{"class":129},[123,75546,56224],{"class":53707},[123,75548,56227],{"class":337},[123,75550,134],{"class":129},[123,75552,65100],{"class":143},[123,75554,17350],{"class":337},[123,75556,134],{"class":129},[123,75558,71627],{"class":143},[123,75560,63422],{"class":337},[123,75562,134],{"class":129},[123,75564,75565],{"class":143},"\"薪资\"",[123,75567,55889],{"class":337},[123,75569,134],{"class":129},[123,75571,71627],{"class":143},[123,75573,53714],{"class":129},[123,75575,75576,75578,75580,75582,75584,75586,75588,75590,75592,75594,75596,75598],{"class":125,"line":35263},[123,75577,53748],{"class":129},[123,75579,71545],{"class":53707},[123,75581,17350],{"class":337},[123,75583,134],{"class":129},[123,75585,71552],{"class":143},[123,75587,17389],{"class":337},[123,75589,134],{"class":129},[123,75591,1629],{"class":143},[123,75593,55889],{"class":337},[123,75595,134],{"class":129},[123,75597,71552],{"class":143},[123,75599,53714],{"class":129},[123,75601,75602,75604,75606,75608,75610,75612,75614,75616],{"class":125,"line":35269},[123,75603,57637],{"class":129},[123,75605,71567],{"class":53707},[123,75607,69052],{"class":337},[123,75609,134],{"class":129},[123,75611,12393],{"class":143},[123,75613,71576],{"class":129},[123,75615,71567],{"class":53707},[123,75617,53714],{"class":129},[123,75619,75620,75622,75624,75626,75628,75630,75632,75634],{"class":125,"line":35278},[123,75621,57637],{"class":129},[123,75623,71567],{"class":53707},[123,75625,69052],{"class":337},[123,75627,134],{"class":129},[123,75629,12462],{"class":143},[123,75631,71595],{"class":129},[123,75633,71567],{"class":53707},[123,75635,53714],{"class":129},[123,75637,75638,75640,75642],{"class":125,"line":35284},[123,75639,54181],{"class":129},[123,75641,71545],{"class":53707},[123,75643,53714],{"class":129},[123,75645,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668],{"class":125,"line":35290},[123,75647,53748],{"class":129},[123,75649,71545],{"class":53707},[123,75651,17350],{"class":337},[123,75653,134],{"class":129},[123,75655,71649],{"class":143},[123,75657,17389],{"class":337},[123,75659,134],{"class":129},[123,75661,1629],{"class":143},[123,75663,55889],{"class":337},[123,75665,134],{"class":129},[123,75667,71649],{"class":143},[123,75669,53714],{"class":129},[123,75671,75672,75674,75676,75678,75680,75682,75684,75686],{"class":125,"line":35299},[123,75673,57637],{"class":129},[123,75675,71567],{"class":53707},[123,75677,69052],{"class":337},[123,75679,134],{"class":129},[123,75681,150],{"class":143},[123,75683,71672],{"class":129},[123,75685,71567],{"class":53707},[123,75687,53714],{"class":129},[123,75689,75690,75692,75694,75696,75698,75700,75702,75704],{"class":125,"line":35305},[123,75691,57637],{"class":129},[123,75693,71567],{"class":53707},[123,75695,69052],{"class":337},[123,75697,134],{"class":129},[123,75699,71689],{"class":143},[123,75701,71692],{"class":129},[123,75703,71567],{"class":53707},[123,75705,53714],{"class":129},[123,75707,75708,75710,75712,75714,75716,75718,75720,75722],{"class":125,"line":35316},[123,75709,57637],{"class":129},[123,75711,71567],{"class":53707},[123,75713,69052],{"class":337},[123,75715,134],{"class":129},[123,75717,71709],{"class":143},[123,75719,71712],{"class":129},[123,75721,71567],{"class":53707},[123,75723,53714],{"class":129},[123,75725,75726,75728,75730,75732,75734,75736,75738,75740],{"class":125,"line":35322},[123,75727,57637],{"class":129},[123,75729,71567],{"class":53707},[123,75731,69052],{"class":337},[123,75733,134],{"class":129},[123,75735,71729],{"class":143},[123,75737,71732],{"class":129},[123,75739,71567],{"class":53707},[123,75741,53714],{"class":129},[123,75743,75744,75746,75748,75750,75752,75754,75756,75758],{"class":125,"line":35341},[123,75745,57637],{"class":129},[123,75747,71567],{"class":53707},[123,75749,69052],{"class":337},[123,75751,134],{"class":129},[123,75753,71749],{"class":143},[123,75755,71752],{"class":129},[123,75757,71567],{"class":53707},[123,75759,53714],{"class":129},[123,75761,75762,75764,75766],{"class":125,"line":35347},[123,75763,54181],{"class":129},[123,75765,71545],{"class":53707},[123,75767,53714],{"class":129},[123,75769,75770,75772,75774],{"class":125,"line":35358},[123,75771,53748],{"class":129},[123,75773,56290],{"class":53707},[123,75775,53714],{"class":129},[123,75777,75778,75780,75782,75785,75787,75790,75792],{"class":125,"line":35364},[123,75779,57637],{"class":129},[123,75781,123],{"class":53707},[123,75783,75784],{"class":129},">+\u003C\u002F",[123,75786,123],{"class":53707},[123,75788,75789],{"class":129},">添加\u003C\u002F",[123,75791,56290],{"class":53707},[123,75793,53714],{"class":129},[123,75795,75796,75798,75800],{"class":125,"line":35384},[123,75797,54820],{"class":129},[123,75799,69026],{"class":53707},[123,75801,53714],{"class":129},[123,75803,75804,75806,75808,75810,75812,75814,75817,75819,75822,75824,75827,75829],{"class":125,"line":35400},[123,75805,54548],{"class":129},[123,75807,54016],{"class":53707},[123,75809,55889],{"class":337},[123,75811,134],{"class":129},[123,75813,64982],{"class":143},[123,75815,75816],{"class":129},">共有数据 \u003C",[123,75818,123],{"class":53707},[123,75820,75821],{"class":129},">0\u003C\u002F",[123,75823,123],{"class":53707},[123,75825,75826],{"class":129},"> 条\u003C\u002F",[123,75828,54016],{"class":53707},[123,75830,53714],{"class":129},[123,75832,75833,75835,75837],{"class":125,"line":35406},[123,75834,54548],{"class":129},[123,75836,48],{"class":53707},[123,75838,53714],{"class":129},[123,75840,75841,75843,75845],{"class":125,"line":35420},[123,75842,53748],{"class":129},[123,75844,51],{"class":53707},[123,75846,53714],{"class":129},[123,75848,75849,75851,75853],{"class":125,"line":35426},[123,75850,57637],{"class":129},[123,75852,54],{"class":53707},[123,75854,53714],{"class":129},[123,75856,75857,75859,75861,75864,75866],{"class":125,"line":35432},[123,75858,57705],{"class":129},[123,75860,57],{"class":53707},[123,75862,75863],{"class":129},">ID\u003C\u002F",[123,75865,57],{"class":53707},[123,75867,53714],{"class":129},[123,75869,75870,75872,75874,75876,75878],{"class":125,"line":35443},[123,75871,57705],{"class":129},[123,75873,57],{"class":53707},[123,75875,71855],{"class":129},[123,75877,57],{"class":53707},[123,75879,53714],{"class":129},[123,75881,75882,75884,75886,75888,75890],{"class":125,"line":35449},[123,75883,57705],{"class":129},[123,75885,57],{"class":53707},[123,75887,71868],{"class":129},[123,75889,57],{"class":53707},[123,75891,53714],{"class":129},[123,75893,75894,75896,75898,75900,75902],{"class":125,"line":35455},[123,75895,57705],{"class":129},[123,75897,57],{"class":53707},[123,75899,71881],{"class":129},[123,75901,57],{"class":53707},[123,75903,53714],{"class":129},[123,75905,75906,75908,75910,75912,75914],{"class":125,"line":35465},[123,75907,57705],{"class":129},[123,75909,57],{"class":53707},[123,75911,71894],{"class":129},[123,75913,57],{"class":53707},[123,75915,53714],{"class":129},[123,75917,75918,75920,75922,75924,75926],{"class":125,"line":35471},[123,75919,57705],{"class":129},[123,75921,57],{"class":53707},[123,75923,71907],{"class":129},[123,75925,57],{"class":53707},[123,75927,53714],{"class":129},[123,75929,75930,75932,75934,75937,75939],{"class":125,"line":35482},[123,75931,57705],{"class":129},[123,75933,57],{"class":53707},[123,75935,75936],{"class":129},">录入时间\u003C\u002F",[123,75938,57],{"class":53707},[123,75940,53714],{"class":129},[123,75942,75943,75945,75947,75949,75951],{"class":125,"line":35488},[123,75944,57705],{"class":129},[123,75946,57],{"class":53707},[123,75948,71920],{"class":129},[123,75950,57],{"class":53707},[123,75952,53714],{"class":129},[123,75954,75955,75957,75959],{"class":125,"line":35498},[123,75956,57810],{"class":129},[123,75958,54],{"class":53707},[123,75960,53714],{"class":129},[123,75962,75963,75965,75967],{"class":125,"line":35503},[123,75964,54181],{"class":129},[123,75966,51],{"class":53707},[123,75968,53714],{"class":129},[123,75970,75971,75973,75975],{"class":125,"line":35509},[123,75972,53748],{"class":129},[123,75974,64],{"class":53707},[123,75976,53714],{"class":129},[123,75978,75979],{"class":125,"line":35558},[123,75980,75981],{"class":2673},"      \u003C!-- \u003Ctr>\n",[123,75983,75984],{"class":125,"line":35605},[123,75985,75986],{"class":2673},"        \u003Ctd>1\u003C\u002Ftd>\n",[123,75988,75989],{"class":125,"line":35610},[123,75990,75986],{"class":2673},[123,75992,75993],{"class":125,"line":35616},[123,75994,75986],{"class":2673},[123,75996,75997],{"class":125,"line":35635},[123,75998,75986],{"class":2673},[123,76000,76001],{"class":125,"line":35641},[123,76002,75986],{"class":2673},[123,76004,76005],{"class":125,"line":35660},[123,76006,75986],{"class":2673},[123,76008,76009],{"class":125,"line":35666},[123,76010,75986],{"class":2673},[123,76012,76013],{"class":125,"line":35672},[123,76014,76015],{"class":2673},"        \u003Ctd>\n",[123,76017,76018],{"class":125,"line":35682},[123,76019,76020],{"class":2673},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[123,76022,76023],{"class":125,"line":35687},[123,76024,76025],{"class":2673},"        \u003C\u002Ftd>\n",[123,76027,76028],{"class":125,"line":35693},[123,76029,76030],{"class":2673},"      \u003C\u002Ftr> -->\n",[123,76032,76033,76035,76037],{"class":125,"line":35709},[123,76034,54181],{"class":129},[123,76036,64],{"class":53707},[123,76038,53714],{"class":129},[123,76040,76041,76043,76045],{"class":125,"line":35754},[123,76042,54820],{"class":129},[123,76044,48],{"class":53707},[123,76046,53714],{"class":129},[123,76048,76049,76051,76053],{"class":125,"line":35760},[123,76050,54548],{"class":129},[123,76052,54218],{"class":53707},[123,76054,53714],{"class":129},[123,76056,76057],{"class":125,"line":35766},[123,76058,76059],{"class":2673},"    \u002F\u002F const initData = [{\n",[123,76061,76062],{"class":125,"line":35772},[123,76063,76064],{"class":2673},"    \u002F\u002F   unameId: 1,\n",[123,76066,76067],{"class":125,"line":35783},[123,76068,76069],{"class":2673},"    \u002F\u002F   uname: '华晨宇',\n",[123,76071,76072],{"class":125,"line":35789},[123,76073,76074],{"class":2673},"    \u002F\u002F   age: 22,\n",[123,76076,76077],{"class":125,"line":35795},[123,76078,76079],{"class":2673},"    \u002F\u002F   salary: 12000,\n",[123,76081,76082],{"class":125,"line":35801},[123,76083,76084],{"class":2673},"    \u002F\u002F   gender: '男',\n",[123,76086,76087],{"class":125,"line":35819},[123,76088,76089],{"class":2673},"    \u002F\u002F   city: '北京',\n",[123,76091,76092],{"class":125,"line":35833},[123,76093,76094],{"class":2673},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[123,76096,76097],{"class":125,"line":35842},[123,76098,76099],{"class":2673},"    \u002F\u002F }]\n",[123,76101,76102],{"class":125,"line":35851},[123,76103,76104],{"class":2673},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[123,76106,76107],{"class":125,"line":35860},[123,76108,76109],{"class":2673},"    \u002F\u002F 1.渲染业务\n",[123,76111,76112],{"class":125,"line":35869},[123,76113,76114],{"class":2673},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[123,76116,76117],{"class":125,"line":35875},[123,76118,76119],{"class":2673},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[123,76121,76122],{"class":125,"line":35881},[123,76123,76124],{"class":2673},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[123,76126,76127],{"class":125,"line":35889},[123,76128,232],{"emptyLinePlaceholder":231},[123,76130,76131],{"class":125,"line":35894},[123,76132,76133],{"class":2673},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[123,76135,76136],{"class":125,"line":35900},[123,76137,76138],{"class":2673},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[123,76140,76141,76143,76145,76147],{"class":125,"line":35911},[123,76142,13653],{"class":133},[123,76144,60097],{"class":164},[123,76146,15995],{"class":133},[123,76148,1372],{"class":129},[123,76150,76151,76154,76156],{"class":125,"line":35917},[123,76152,76153],{"class":129},"    console.",[123,76155,60649],{"class":337},[123,76157,54815],{"class":129},[123,76159,76160],{"class":125,"line":35937},[123,76161,232],{"emptyLinePlaceholder":231},[123,76163,76164],{"class":125,"line":35943},[123,76165,76166],{"class":2673},"    \u002F\u002F 时间函数\n",[123,76168,76169,76171,76174],{"class":125,"line":35949},[123,76170,72484],{"class":133},[123,76172,76173],{"class":337}," getTime",[123,76175,13285],{"class":129},[123,76177,76178,76180,76183,76185,76187,76190],{"class":125,"line":35955},[123,76179,60630],{"class":133},[123,76181,76182],{"class":164}," date",[123,76184,15995],{"class":133},[123,76186,14010],{"class":133},[123,76188,76189],{"class":337}," Date",[123,76191,4420],{"class":129},[123,76193,76194,76196,76198,76200,76203,76206,76208,76210,76212,76215,76218,76220,76222,76224,76226,76228,76230,76232],{"class":125,"line":35972},[123,76195,60630],{"class":133},[123,76197,18519],{"class":164},[123,76199,15995],{"class":133},[123,76201,76202],{"class":129}," date.",[123,76204,76205],{"class":337},"getHours",[123,76207,15481],{"class":129},[123,76209,3509],{"class":133},[123,76211,4482],{"class":164},[123,76213,76214],{"class":133}," ?",[123,76216,76217],{"class":143}," '0'",[123,76219,47973],{"class":133},[123,76221,76202],{"class":129},[123,76223,76205],{"class":337},[123,76225,15481],{"class":129},[123,76227,3460],{"class":133},[123,76229,76202],{"class":129},[123,76231,76205],{"class":337},[123,76233,4420],{"class":129},[123,76235,76236,76238,76241,76243,76245,76248,76250,76252,76254,76256,76258,76260,76262,76264,76266,76268,76270,76272],{"class":125,"line":35978},[123,76237,60630],{"class":133},[123,76239,76240],{"class":164}," m",[123,76242,15995],{"class":133},[123,76244,76202],{"class":129},[123,76246,76247],{"class":337},"getMinutes",[123,76249,15481],{"class":129},[123,76251,3509],{"class":133},[123,76253,4482],{"class":164},[123,76255,76214],{"class":133},[123,76257,76217],{"class":143},[123,76259,47973],{"class":133},[123,76261,76202],{"class":129},[123,76263,76247],{"class":337},[123,76265,15481],{"class":129},[123,76267,3460],{"class":133},[123,76269,76202],{"class":129},[123,76271,76247],{"class":337},[123,76273,4420],{"class":129},[123,76275,76276,76278,76280,76282,76284,76287,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311],{"class":125,"line":35984},[123,76277,60630],{"class":133},[123,76279,10860],{"class":164},[123,76281,15995],{"class":133},[123,76283,76202],{"class":129},[123,76285,76286],{"class":337},"getSeconds",[123,76288,15481],{"class":129},[123,76290,3509],{"class":133},[123,76292,4482],{"class":164},[123,76294,76214],{"class":133},[123,76296,76217],{"class":143},[123,76298,47973],{"class":133},[123,76300,76202],{"class":129},[123,76302,76286],{"class":337},[123,76304,15481],{"class":129},[123,76306,3460],{"class":133},[123,76308,76202],{"class":129},[123,76310,76286],{"class":337},[123,76312,4420],{"class":129},[123,76314,76315,76317,76320,76322,76324,76327,76329,76332,76334,76337,76339,76341,76344,76346,76348,76350,76352,76354,76356,76359,76361,76364,76366,76369,76371,76373,76375],{"class":125,"line":35990},[123,76316,60630],{"class":133},[123,76318,76319],{"class":164}," str",[123,76321,15995],{"class":133},[123,76323,65304],{"class":143},[123,76325,76326],{"class":129},"date",[123,76328,3161],{"class":143},[123,76330,76331],{"class":337},"getFullYear",[123,76333,4870],{"class":143},[123,76335,76336],{"class":143},"}\u002F${",[123,76338,76326],{"class":129},[123,76340,3161],{"class":143},[123,76342,76343],{"class":337},"getMonth",[123,76345,15481],{"class":143},[123,76347,3086],{"class":133},[123,76349,27540],{"class":164},[123,76351,76336],{"class":143},[123,76353,76326],{"class":129},[123,76355,3161],{"class":143},[123,76357,76358],{"class":337},"getDate",[123,76360,4870],{"class":143},[123,76362,76363],{"class":143},"} ${",[123,76365,3021],{"class":129},[123,76367,76368],{"class":143},"}:${",[123,76370,3147],{"class":129},[123,76372,76368],{"class":143},[123,76374,3297],{"class":129},[123,76376,76377],{"class":143},"}`\n",[123,76379,76380,76383],{"class":125,"line":35996},[123,76381,76382],{"class":133},"      return",[123,76384,76385],{"class":129}," str\n",[123,76387,76388],{"class":125,"line":36002},[123,76389,4631],{"class":129},[123,76391,76392],{"class":125,"line":36029},[123,76393,76394],{"class":2673},"    \u002F\u002F 渲染函数\n",[123,76396,76397,76399,76401,76403,76405,76407,76409,76411],{"class":125,"line":36053},[123,76398,13653],{"class":133},[123,76400,72147],{"class":164},[123,76402,15995],{"class":133},[123,76404,56799],{"class":129},[123,76406,56802],{"class":337},[123,76408,1315],{"class":129},[123,76410,72158],{"class":143},[123,76412,288],{"class":129},[123,76414,76415,76417,76419],{"class":125,"line":36059},[123,76416,72484],{"class":133},[123,76418,72487],{"class":337},[123,76420,13285],{"class":129},[123,76422,76423],{"class":125,"line":36065},[123,76424,76425],{"class":2673},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[123,76427,76428],{"class":125,"line":36071},[123,76429,76430],{"class":2673},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[123,76432,76433,76435,76438,76440,76442,76445,76447,76449,76451,76454,76456,76459],{"class":125,"line":36082},[123,76434,60630],{"class":133},[123,76436,76437],{"class":164}," trArr",[123,76439,15995],{"class":133},[123,76441,54369],{"class":129},[123,76443,76444],{"class":337},"map",[123,76446,1315],{"class":129},[123,76448,56852],{"class":133},[123,76450,4116],{"class":129},[123,76452,76453],{"class":279},"ele",[123,76455,251],{"class":129},[123,76457,76458],{"class":279},"index",[123,76460,14873],{"class":129},[123,76462,76463,76465],{"class":125,"line":36093},[123,76464,17182],{"class":133},[123,76466,72568],{"class":143},[123,76468,76469],{"class":125,"line":36099},[123,76470,76471],{"class":143},"      \u003Ctr>\n",[123,76473,76474,76476,76478,76480,76483],{"class":125,"line":36116},[123,76475,72573],{"class":143},[123,76477,76453],{"class":129},[123,76479,3161],{"class":143},[123,76481,76482],{"class":129},"unameId",[123,76484,72588],{"class":143},[123,76486,76487,76489,76491,76493,76495],{"class":125,"line":36139},[123,76488,72573],{"class":143},[123,76490,76453],{"class":129},[123,76492,3161],{"class":143},[123,76494,72604],{"class":129},[123,76496,72588],{"class":143},[123,76498,76499,76501,76503,76505,76507],{"class":125,"line":36162},[123,76500,72573],{"class":143},[123,76502,76453],{"class":129},[123,76504,3161],{"class":143},[123,76506,72621],{"class":129},[123,76508,72588],{"class":143},[123,76510,76511,76513,76515,76517,76519],{"class":125,"line":36168},[123,76512,72573],{"class":143},[123,76514,76453],{"class":129},[123,76516,3161],{"class":143},[123,76518,72638],{"class":129},[123,76520,72588],{"class":143},[123,76522,76523,76525,76527,76529,76531],{"class":125,"line":36173},[123,76524,72573],{"class":143},[123,76526,76453],{"class":129},[123,76528,3161],{"class":143},[123,76530,72655],{"class":129},[123,76532,72588],{"class":143},[123,76534,76535,76537,76539,76541,76543],{"class":125,"line":36182},[123,76536,72573],{"class":143},[123,76538,76453],{"class":129},[123,76540,3161],{"class":143},[123,76542,72672],{"class":129},[123,76544,72588],{"class":143},[123,76546,76547,76549,76551,76553,76555],{"class":125,"line":36192},[123,76548,72573],{"class":143},[123,76550,76453],{"class":129},[123,76552,3161],{"class":143},[123,76554,4831],{"class":129},[123,76556,72588],{"class":143},[123,76558,76559],{"class":125,"line":36198},[123,76560,76015],{"class":143},[123,76562,76563,76566,76568],{"class":125,"line":36203},[123,76564,76565],{"class":143},"          \u003Ca href=\"#\" data-id=\"${",[123,76567,76458],{"class":129},[123,76569,76570],{"class":143},"}\">删除\u003C\u002Fa>\n",[123,76572,76573],{"class":125,"line":36209},[123,76574,76025],{"class":143},[123,76576,76577],{"class":125,"line":36222},[123,76578,76579],{"class":143},"      \u003C\u002Ftr>\n",[123,76581,76582],{"class":125,"line":36228},[123,76583,76584],{"class":143},"  `\n",[123,76586,76587],{"class":125,"line":36239},[123,76588,67216],{"class":129},[123,76590,76591,76593,76595],{"class":125,"line":36250},[123,76592,60646],{"class":129},[123,76594,60649],{"class":337},[123,76596,76597],{"class":129},"(trArr)\n",[123,76599,76600],{"class":125,"line":36269},[123,76601,232],{"emptyLinePlaceholder":231},[123,76603,76604],{"class":125,"line":51925},[123,76605,76606],{"class":2673},"      \u002F\u002F (2) 把数组转换为字符串join\n",[123,76608,76609],{"class":125,"line":51930},[123,76610,76611],{"class":2673},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[123,76613,76614,76616,76618,76621,76624,76626,76629],{"class":125,"line":51939},[123,76615,72499],{"class":129},[123,76617,134],{"class":133},[123,76619,76620],{"class":129}," trArr.",[123,76622,76623],{"class":337},"join",[123,76625,1315],{"class":129},[123,76627,76628],{"class":143},"''",[123,76630,288],{"class":129},[123,76632,76633],{"class":125,"line":51948},[123,76634,76635],{"class":2673},"      \u002F\u002F 显示共有几条\n",[123,76637,76638,76640,76642,76644,76647,76650,76652,76654],{"class":125,"line":51953},[123,76639,58173],{"class":129},[123,76641,56802],{"class":337},[123,76643,1315],{"class":129},[123,76645,76646],{"class":143},"'.total span'",[123,76648,76649],{"class":129},").innerHTML ",[123,76651,134],{"class":133},[123,76653,54369],{"class":129},[123,76655,58233],{"class":164},[123,76657,76658],{"class":125,"line":51958},[123,76659,4631],{"class":129},[123,76661,76662],{"class":125,"line":51963},[123,76663,76664],{"class":2673},"    \u002F\u002F render()\n",[123,76666,76667],{"class":125,"line":51976},[123,76668,232],{"emptyLinePlaceholder":231},[123,76670,76671],{"class":125,"line":51981},[123,76672,76673],{"class":2673},"    \u002F\u002F 获取DOM对象\n",[123,76675,76676,76678,76680,76682,76684,76686,76688,76690],{"class":125,"line":51990},[123,76677,13653],{"class":133},[123,76679,72221],{"class":164},[123,76681,15995],{"class":133},[123,76683,56799],{"class":129},[123,76685,56802],{"class":337},[123,76687,1315],{"class":129},[123,76689,72232],{"class":143},[123,76691,288],{"class":129},[123,76693,76694,76696,76698,76700,76702,76704,76706,76708],{"class":125,"line":51999},[123,76695,13653],{"class":133},[123,76697,72048],{"class":164},[123,76699,15995],{"class":133},[123,76701,56799],{"class":129},[123,76703,56802],{"class":337},[123,76705,1315],{"class":129},[123,76707,72059],{"class":143},[123,76709,288],{"class":129},[123,76711,76712,76714,76716,76718,76720,76722,76724,76726],{"class":125,"line":52016},[123,76713,13653],{"class":133},[123,76715,18117],{"class":164},[123,76717,15995],{"class":133},[123,76719,56799],{"class":129},[123,76721,56802],{"class":337},[123,76723,1315],{"class":129},[123,76725,72078],{"class":143},[123,76727,288],{"class":129},[123,76729,76731,76733,76735,76737,76739,76741,76743,76745],{"class":125,"line":76730},231,[123,76732,13653],{"class":133},[123,76734,72107],{"class":164},[123,76736,15995],{"class":133},[123,76738,56799],{"class":129},[123,76740,56802],{"class":337},[123,76742,1315],{"class":129},[123,76744,72118],{"class":143},[123,76746,288],{"class":129},[123,76748,76750,76752,76754,76756,76758,76760,76762,76764],{"class":125,"line":76749},232,[123,76751,13653],{"class":133},[123,76753,72087],{"class":164},[123,76755,15995],{"class":133},[123,76757,56799],{"class":129},[123,76759,56802],{"class":337},[123,76761,1315],{"class":129},[123,76763,72098],{"class":143},[123,76765,288],{"class":129},[123,76767,76769,76771,76773,76775,76777,76779,76781,76783],{"class":125,"line":76768},233,[123,76770,13653],{"class":133},[123,76772,72127],{"class":164},[123,76774,15995],{"class":133},[123,76776,56799],{"class":129},[123,76778,56802],{"class":337},[123,76780,1315],{"class":129},[123,76782,72138],{"class":143},[123,76784,288],{"class":129},[123,76786,76788],{"class":125,"line":76787},234,[123,76789,232],{"emptyLinePlaceholder":231},[123,76791,76793],{"class":125,"line":76792},235,[123,76794,76795],{"class":2673},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[123,76797,76799,76801,76803,76805,76807,76809,76811,76813,76815],{"class":125,"line":76798},236,[123,76800,72239],{"class":129},[123,76802,60215],{"class":337},[123,76804,1315],{"class":129},[123,76806,72246],{"class":143},[123,76808,251],{"class":129},[123,76810,56852],{"class":133},[123,76812,4116],{"class":129},[123,76814,2689],{"class":279},[123,76816,14873],{"class":129},[123,76818,76820],{"class":125,"line":76819},237,[123,76821,76822],{"class":2673},"      \u002F\u002F 禁止浏览器跳转\n",[123,76824,76826,76828,76830],{"class":125,"line":76825},238,[123,76827,72266],{"class":129},[123,76829,72269],{"class":337},[123,76831,4420],{"class":129},[123,76833,76835],{"class":125,"line":76834},239,[123,76836,76837],{"class":2673},"      \u002F\u002F 非空判断\n",[123,76839,76841],{"class":125,"line":76840},240,[123,76842,76843],{"class":2673},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[123,76845,76847],{"class":125,"line":76846},241,[123,76848,76849],{"class":2673},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[123,76851,76853,76855,76857,76859,76862,76864,76867,76870,76872,76874],{"class":125,"line":76852},242,[123,76854,56883],{"class":133},[123,76856,4116],{"class":129},[123,76858,2834],{"class":133},[123,76860,76861],{"class":129},"uname.value ",[123,76863,73757],{"class":133},[123,76865,76866],{"class":133}," !",[123,76868,76869],{"class":129},"age.value ",[123,76871,73757],{"class":133},[123,76873,76866],{"class":133},[123,76875,76876],{"class":129},"salary.value) {\n",[123,76878,76880,76882,76884,76886,76888],{"class":125,"line":76879},243,[123,76881,17182],{"class":133},[123,76883,72340],{"class":337},[123,76885,1315],{"class":129},[123,76887,72345],{"class":143},[123,76889,288],{"class":129},[123,76891,76893],{"class":125,"line":76892},244,[123,76894,54801],{"class":129},[123,76896,76898,76900,76902],{"class":125,"line":76897},245,[123,76899,60409],{"class":129},[123,76901,54288],{"class":337},[123,76903,76904],{"class":129},"({\n",[123,76906,76908],{"class":125,"line":76907},246,[123,76909,76910],{"class":2673},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[123,76912,76914],{"class":125,"line":76913},247,[123,76915,76916],{"class":2673},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[123,76918,76920],{"class":125,"line":76919},248,[123,76921,76922],{"class":2673},"        \u002F\u002F 对象的序号应为数组长度+1\n",[123,76924,76926],{"class":125,"line":76925},249,[123,76927,76928],{"class":2673},"        \u002F\u002F unameId: arr.length + 1,\n",[123,76930,76932],{"class":125,"line":76931},250,[123,76933,232],{"emptyLinePlaceholder":231},[123,76935,76937],{"class":125,"line":76936},251,[123,76938,76939],{"class":2673},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[123,76941,76943],{"class":125,"line":76942},252,[123,76944,76945],{"class":2673},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[123,76947,76949],{"class":125,"line":76948},253,[123,76950,76951],{"class":2673},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[123,76953,76955],{"class":125,"line":76954},254,[123,76956,76957],{"class":2673},"        \u002F\u002F 0当假看\n",[123,76959,76961,76964,76966,76968,76971,76973,76975,76977,76980,76982,76984,76987,76989],{"class":125,"line":76960},255,[123,76962,76963],{"class":129},"        unameId: arr.",[123,76965,54372],{"class":164},[123,76967,76214],{"class":133},[123,76969,76970],{"class":129}," arr[arr.",[123,76972,54372],{"class":164},[123,76974,54674],{"class":133},[123,76976,27540],{"class":164},[123,76978,76979],{"class":129},"].unameId ",[123,76981,3086],{"class":133},[123,76983,27540],{"class":164},[123,76985,76986],{"class":133}," :",[123,76988,27540],{"class":164},[123,76990,153],{"class":129},[123,76992,76994],{"class":125,"line":76993},256,[123,76995,72393],{"class":129},[123,76997,76999],{"class":125,"line":76998},257,[123,77000,72398],{"class":129},[123,77002,77004],{"class":125,"line":77003},258,[123,77005,72408],{"class":129},[123,77007,77009],{"class":125,"line":77008},259,[123,77010,72403],{"class":129},[123,77012,77014],{"class":125,"line":77013},260,[123,77015,77016],{"class":129},"        city: city.value,\n",[123,77018,77020],{"class":125,"line":77019},261,[123,77021,77022],{"class":2673},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[123,77024,77026],{"class":125,"line":77025},262,[123,77027,77028],{"class":2673},"        \u002F\u002F time: new Date().toDateString()\n",[123,77030,77032,77035,77038],{"class":125,"line":77031},263,[123,77033,77034],{"class":129},"        time: ",[123,77036,77037],{"class":337},"getTime",[123,77039,4420],{"class":129},[123,77041,77043],{"class":125,"line":77042},264,[123,77044,67216],{"class":129},[123,77046,77048],{"class":125,"line":77047},265,[123,77049,77050],{"class":2673},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[123,77052,77054,77056],{"class":125,"line":77053},266,[123,77055,72468],{"class":337},[123,77057,4420],{"class":129},[123,77059,77061,77063,77065,77067,77069],{"class":125,"line":77060},267,[123,77062,72451],{"class":164},[123,77064,3161],{"class":129},[123,77066,72456],{"class":337},[123,77068,15481],{"class":129},[123,77070,77071],{"class":2673},"\u002F\u002F重置表单\n",[123,77073,77075],{"class":125,"line":77074},268,[123,77076,77077],{"class":2673},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[123,77079,77081,77084,77086,77088,77091,77093,77095,77097,77099],{"class":125,"line":77080},269,[123,77082,77083],{"class":129},"      localStorage.",[123,77085,74054],{"class":337},[123,77087,1315],{"class":129},[123,77089,77090],{"class":143},"'data'",[123,77092,251],{"class":129},[123,77094,74064],{"class":164},[123,77096,3161],{"class":129},[123,77098,74069],{"class":337},[123,77100,77101],{"class":129},"(arr))\n",[123,77103,77105],{"class":125,"line":77104},270,[123,77106,35872],{"class":129},[123,77108,77110],{"class":125,"line":77109},271,[123,77111,232],{"emptyLinePlaceholder":231},[123,77113,77115],{"class":125,"line":77114},272,[123,77116,77117],{"class":2673},"    \u002F\u002F 3.删除业务\n",[123,77119,77121],{"class":125,"line":77120},273,[123,77122,77123],{"class":2673},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[123,77125,77127,77129,77131,77133,77135,77137,77139,77141,77143],{"class":125,"line":77126},274,[123,77128,72741],{"class":129},[123,77130,60215],{"class":337},[123,77132,1315],{"class":129},[123,77134,60220],{"class":143},[123,77136,251],{"class":129},[123,77138,56852],{"class":133},[123,77140,4116],{"class":129},[123,77142,2689],{"class":279},[123,77144,14873],{"class":129},[123,77146,77148],{"class":125,"line":77147},275,[123,77149,77150],{"class":2673},"      \u002F\u002F 判断是否点击的是删除按钮\n",[123,77152,77154,77156,77158,77160,77162],{"class":125,"line":77153},276,[123,77155,56883],{"class":133},[123,77157,69435],{"class":129},[123,77159,56889],{"class":133},[123,77161,70657],{"class":143},[123,77163,14873],{"class":129},[123,77165,77167],{"class":125,"line":77166},277,[123,77168,77169],{"class":2673},"        \u002F\u002F alert(1)\n",[123,77171,77173],{"class":125,"line":77172},278,[123,77174,77175],{"class":2673},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[123,77177,77179],{"class":125,"line":77178},279,[123,77180,77181],{"class":2673},"        \u002F\u002F console.log(e.target)\n",[123,77183,77185],{"class":125,"line":77184},280,[123,77186,77187],{"class":2673},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[123,77189,77191],{"class":125,"line":77190},281,[123,77192,232],{"emptyLinePlaceholder":231},[123,77194,77196],{"class":125,"line":77195},282,[123,77197,77198],{"class":2673},"        \u002F\u002F 确认框，确然是否真的要删除\n",[123,77200,77202],{"class":125,"line":77201},283,[123,77203,77204],{"class":2673},"        \u002F\u002F confirm()为确认框\n",[123,77206,77208],{"class":125,"line":77207},284,[123,77209,77210],{"class":2673},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[123,77212,77214,77216,77218,77221,77223,77226],{"class":125,"line":77213},285,[123,77215,4940],{"class":133},[123,77217,4116],{"class":129},[123,77219,77220],{"class":337},"confirm",[123,77222,1315],{"class":129},[123,77224,77225],{"class":143},"'您确定要删除这条数据吗？'",[123,77227,77228],{"class":129},")) {\n",[123,77230,77232,77235,77237,77239,77241],{"class":125,"line":77231},286,[123,77233,77234],{"class":129},"          arr.",[123,77236,60412],{"class":337},[123,77238,72794],{"class":129},[123,77240,2825],{"class":164},[123,77242,288],{"class":129},[123,77244,77246],{"class":125,"line":77245},287,[123,77247,77248],{"class":2673},"          \u002F\u002F 3.4 重新渲染页面\n",[123,77250,77252,77255],{"class":125,"line":77251},288,[123,77253,77254],{"class":337},"          render",[123,77256,4420],{"class":129},[123,77258,77260],{"class":125,"line":77259},289,[123,77261,77262],{"class":2673},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[123,77264,77266,77269,77271,77273,77275,77277,77279,77281,77283],{"class":125,"line":77265},290,[123,77267,77268],{"class":129},"          localStorage.",[123,77270,74054],{"class":337},[123,77272,1315],{"class":129},[123,77274,77090],{"class":143},[123,77276,251],{"class":129},[123,77278,74064],{"class":164},[123,77280,3161],{"class":129},[123,77282,74069],{"class":337},[123,77284,77101],{"class":129},[123,77286,77288],{"class":125,"line":77287},291,[123,77289,4972],{"class":129},[123,77291,77293],{"class":125,"line":77292},292,[123,77294,54801],{"class":129},[123,77296,77298],{"class":125,"line":77297},293,[123,77299,232],{"emptyLinePlaceholder":231},[123,77301,77303],{"class":125,"line":77302},294,[123,77304,35872],{"class":129},[123,77306,77308],{"class":125,"line":77307},295,[123,77309,232],{"emptyLinePlaceholder":231},[123,77311,77313,77315,77317],{"class":125,"line":77312},296,[123,77314,54820],{"class":129},[123,77316,54218],{"class":53707},[123,77318,53714],{"class":129},[123,77320,77322,77324,77326],{"class":125,"line":77321},297,[123,77323,54190],{"class":129},[123,77325,54205],{"class":53707},[123,77327,53714],{"class":129},[123,77329,77331],{"class":125,"line":77330},298,[123,77332,232],{"emptyLinePlaceholder":231},[123,77334,77336,77338,77340],{"class":125,"line":77335},299,[123,77337,54190],{"class":129},[123,77339,53042],{"class":53707},[123,77341,53714],{"class":129},[14,77343,77345],{"id":77344},"_36-正则表达式","3.6 正则表达式",[19,77347,77348],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77350,77351],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77353,77354],{},"正则表达式的作用：",[3606,77356,77357,77364,77370],{},[29,77358,77359,77360,77363],{},"表单验证（ ",[2759,77361,77362],{},"匹配"," ）",[29,77365,77366,77367,77363],{},"过滤敏感词（ ",[2759,77368,77369],{},"替换",[29,77371,77372,77373,77363],{},"字符串中提取我们想要的部分（ ",[2759,77374,77375],{},"提取",[2587,77377,77379],{"id":77378},"_361-语法","3.6.1 语法",[19,77381,77382],{},"正则表达式使用步骤：",[26,77384,77385,77388],{},[29,77386,77387],{},"定义规则",[29,77389,77390],{},"查找是否匹配",[19,77392,77393],{},"正则表达式里边不需要写引号",[19,77395,77396],{},[3929,77397],{"alt":118,"src":77398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77400,77401],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77403,77404],{},"reg.test(str)",[19,77406,77407],{},[3929,77408],{"alt":118,"src":77409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77411,77412],{},[3929,77413],{"alt":118,"src":77414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[2587,77416,77418],{"id":77417},"_362-元字符","3.6.2 元字符",[26,77420,77421,77424,77427,77430,77437],{},[29,77422,77423],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,77425,77426],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,77428,77429],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,77431,77432,77433],{},"正则验证工具：",[2846,77434,77435],{"href":77435,"rel":77436},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26287],[29,77438,77439],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24425,77441,77443],{"id":77442},"_3621-边界符","3.6.2.1 边界符",[19,77445,77446],{},[3929,77447],{"alt":118,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77450,77451],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77453,77454],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77456,77457],{},"只匹配一次",[19,77459,77460],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24425,77462,77464],{"id":77463},"_3622-量词","3.6.2.2 量词",[19,77466,77467],{},[3929,77468],{"alt":118,"src":77469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77471,77472],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24425,77474,77476],{"id":77475},"_3623-元字符","3.6.2.3 元字符",[19,77478,77479],{},[3929,77480],{"alt":118,"src":77481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77483,77484],{},"匹配的是a或b或c []只选一个",[19,77486,77487],{},[3929,77488],{"alt":118,"src":77489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77491,77492],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77494,77495],{},[3929,77496],{"alt":118,"src":77497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77499,77500],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77502,77503],{},[3929,77504],{"alt":118,"src":77505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[113,77507,77509],{"className":53040,"code":77508,"language":53042,"meta":118,"style":118},"\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",[120,77510,77511,77521,77535,77539,77547,77561,77581,77593,77601,77605,77613,77621,77626,77657,77684,77712,77716,77721,77749,77780,77785,77790,77821,77853,77885,77889,77894,77925,77955,77985,77989,77994,78025,78056,78086,78116,78120,78125,78158,78162,78167,78198,78229,78233,78238,78269,78299,78330,78334,78339,78371,78402,78433,78460,78491,78523,78556,78587,78618,78650,78681,78689,78697,78701],{"__ignoreMap":118},[123,77512,77513,77515,77517,77519],{"class":125,"line":126},[123,77514,53704],{"class":129},[123,77516,53708],{"class":53707},[123,77518,53711],{"class":337},[123,77520,53714],{"class":129},[123,77522,77523,77525,77527,77529,77531,77533],{"class":125,"line":140},[123,77524,3509],{"class":129},[123,77526,53042],{"class":53707},[123,77528,53723],{"class":337},[123,77530,134],{"class":129},[123,77532,53728],{"class":143},[123,77534,53714],{"class":129},[123,77536,77537],{"class":125,"line":156},[123,77538,232],{"emptyLinePlaceholder":231},[123,77540,77541,77543,77545],{"class":125,"line":168},[123,77542,3509],{"class":129},[123,77544,53741],{"class":53707},[123,77546,53714],{"class":129},[123,77548,77549,77551,77553,77555,77557,77559],{"class":125,"line":268},[123,77550,54548],{"class":129},[123,77552,53751],{"class":53707},[123,77554,53754],{"class":337},[123,77556,134],{"class":129},[123,77558,53759],{"class":143},[123,77560,53714],{"class":129},[123,77562,77563,77565,77567,77569,77571,77573,77575,77577,77579],{"class":125,"line":291},[123,77564,54548],{"class":129},[123,77566,53751],{"class":53707},[123,77568,17350],{"class":337},[123,77570,134],{"class":129},[123,77572,53798],{"class":143},[123,77574,53778],{"class":337},[123,77576,134],{"class":129},[123,77578,53805],{"class":143},[123,77580,53714],{"class":129},[123,77582,77583,77585,77587,77589,77591],{"class":125,"line":300},[123,77584,54548],{"class":129},[123,77586,642],{"class":53707},[123,77588,53816],{"class":129},[123,77590,642],{"class":53707},[123,77592,53714],{"class":129},[123,77594,77595,77597,77599],{"class":125,"line":305},[123,77596,54190],{"class":129},[123,77598,53741],{"class":53707},[123,77600,53714],{"class":129},[123,77602,77603],{"class":125,"line":316},[123,77604,232],{"emptyLinePlaceholder":231},[123,77606,77607,77609,77611],{"class":125,"line":673},[123,77608,3509],{"class":129},[123,77610,54205],{"class":53707},[123,77612,53714],{"class":129},[123,77614,77615,77617,77619],{"class":125,"line":692},[123,77616,54548],{"class":129},[123,77618,54218],{"class":53707},[123,77620,53714],{"class":129},[123,77622,77623],{"class":125,"line":713},[123,77624,77625],{"class":2673},"    \u002F\u002F 元字符中\n",[123,77627,77628,77630,77632,77634,77636,77639,77641,77643,77646,77648,77651,77654],{"class":125,"line":718},[123,77629,76153],{"class":129},[123,77631,60649],{"class":337},[123,77633,1315],{"class":129},[123,77635,3187],{"class":143},[123,77637,77638],{"class":50384},"哈",[123,77640,3187],{"class":143},[123,77642,3161],{"class":129},[123,77644,77645],{"class":337},"test",[123,77647,1315],{"class":129},[123,77649,77650],{"class":143},"'哈'",[123,77652,77653],{"class":129},"))  ",[123,77655,77656],{"class":2673},"\u002F\u002Ftrue\n",[123,77658,77659,77661,77663,77665,77667,77669,77671,77673,77675,77677,77680,77682],{"class":125,"line":1138},[123,77660,76153],{"class":129},[123,77662,60649],{"class":337},[123,77664,1315],{"class":129},[123,77666,3187],{"class":143},[123,77668,77638],{"class":50384},[123,77670,3187],{"class":143},[123,77672,3161],{"class":129},[123,77674,77645],{"class":337},[123,77676,1315],{"class":129},[123,77678,77679],{"class":143},"'哈哈'",[123,77681,77653],{"class":129},[123,77683,77656],{"class":2673},[123,77685,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704,77707,77710],{"class":125,"line":1429},[123,77687,76153],{"class":129},[123,77689,60649],{"class":337},[123,77691,1315],{"class":129},[123,77693,3187],{"class":143},[123,77695,77638],{"class":50384},[123,77697,3187],{"class":143},[123,77699,3161],{"class":129},[123,77701,77645],{"class":337},[123,77703,1315],{"class":129},[123,77705,77706],{"class":143},"'二哈'",[123,77708,77709],{"class":129},"))   ",[123,77711,77656],{"class":2673},[123,77713,77714],{"class":125,"line":1439},[123,77715,232],{"emptyLinePlaceholder":231},[123,77717,77718],{"class":125,"line":1444},[123,77719,77720],{"class":2673},"    \u002F\u002F 1.边界符\n",[123,77722,77723,77725,77727,77729,77731,77733,77735,77737,77739,77741,77743,77745,77747],{"class":125,"line":1453},[123,77724,76153],{"class":129},[123,77726,60649],{"class":337},[123,77728,1315],{"class":129},[123,77730,3187],{"class":143},[123,77732,3565],{"class":133},[123,77734,77638],{"class":50384},[123,77736,3187],{"class":143},[123,77738,3161],{"class":129},[123,77740,77645],{"class":337},[123,77742,1315],{"class":129},[123,77744,77650],{"class":143},[123,77746,77653],{"class":129},[123,77748,77656],{"class":2673},[123,77750,77751,77753,77755,77757,77759,77761,77763,77765,77767,77769,77771,77773,77775,77777],{"class":125,"line":1458},[123,77752,76153],{"class":129},[123,77754,60649],{"class":337},[123,77756,1315],{"class":129},[123,77758,3187],{"class":143},[123,77760,3565],{"class":133},[123,77762,77638],{"class":50384},[123,77764,2910],{"class":133},[123,77766,3187],{"class":143},[123,77768,3161],{"class":129},[123,77770,77645],{"class":337},[123,77772,1315],{"class":129},[123,77774,77679],{"class":143},[123,77776,77653],{"class":129},[123,77778,77779],{"class":2673},"\u002F\u002Ffalse\n",[123,77781,77782],{"class":125,"line":1476},[123,77783,77784],{"class":2673},"    \u002F\u002F 2.量词\n",[123,77786,77787],{"class":125,"line":1494},[123,77788,77789],{"class":2673},"    \u002F\u002F 量词 * 类似于 >= 0\n",[123,77791,77792,77794,77796,77798,77800,77802,77804,77807,77809,77811,77813,77815,77817,77819],{"class":125,"line":1499},[123,77793,76153],{"class":129},[123,77795,60649],{"class":337},[123,77797,1315],{"class":129},[123,77799,3187],{"class":143},[123,77801,3565],{"class":133},[123,77803,77638],{"class":50384},[123,77805,77806],{"class":133},"*$",[123,77808,3187],{"class":143},[123,77810,3161],{"class":129},[123,77812,77645],{"class":337},[123,77814,1315],{"class":129},[123,77816,77679],{"class":143},[123,77818,77653],{"class":129},[123,77820,77656],{"class":2673},[123,77822,77823,77825,77827,77829,77831,77833,77835,77837,77839,77841,77843,77845,77848,77850],{"class":125,"line":1517},[123,77824,76153],{"class":129},[123,77826,60649],{"class":337},[123,77828,1315],{"class":129},[123,77830,3187],{"class":143},[123,77832,3565],{"class":133},[123,77834,77638],{"class":50384},[123,77836,77806],{"class":133},[123,77838,3187],{"class":143},[123,77840,3161],{"class":129},[123,77842,77645],{"class":337},[123,77844,1315],{"class":129},[123,77846,77847],{"class":143},"'二哈好傻'",[123,77849,77653],{"class":129},[123,77851,77852],{"class":2673},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[123,77854,77855,77857,77859,77861,77863,77865,77867,77869,77871,77873,77875,77877,77880,77882],{"class":125,"line":1534},[123,77856,76153],{"class":129},[123,77858,60649],{"class":337},[123,77860,1315],{"class":129},[123,77862,3187],{"class":143},[123,77864,3565],{"class":133},[123,77866,77638],{"class":50384},[123,77868,77806],{"class":133},[123,77870,3187],{"class":143},[123,77872,3161],{"class":129},[123,77874,77645],{"class":337},[123,77876,1315],{"class":129},[123,77878,77879],{"class":143},"'哈好哈'",[123,77881,77709],{"class":129},[123,77883,77884],{"class":2673},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[123,77886,77887],{"class":125,"line":1539},[123,77888,232],{"emptyLinePlaceholder":231},[123,77890,77891],{"class":125,"line":2080},[123,77892,77893],{"class":2673},"    \u002F\u002F +类似于>=1\n",[123,77895,77896,77898,77900,77902,77904,77906,77908,77911,77913,77915,77917,77919,77921,77923],{"class":125,"line":2097},[123,77897,76153],{"class":129},[123,77899,60649],{"class":337},[123,77901,1315],{"class":129},[123,77903,3187],{"class":143},[123,77905,3565],{"class":133},[123,77907,77638],{"class":50384},[123,77909,77910],{"class":133},"+$",[123,77912,3187],{"class":143},[123,77914,3161],{"class":129},[123,77916,77645],{"class":337},[123,77918,1315],{"class":129},[123,77920,77679],{"class":143},[123,77922,77653],{"class":129},[123,77924,77656],{"class":2673},[123,77926,77927,77929,77931,77933,77935,77937,77939,77941,77943,77945,77947,77949,77951,77953],{"class":125,"line":2114},[123,77928,76153],{"class":129},[123,77930,60649],{"class":337},[123,77932,1315],{"class":129},[123,77934,3187],{"class":143},[123,77936,3565],{"class":133},[123,77938,77638],{"class":50384},[123,77940,77910],{"class":133},[123,77942,3187],{"class":143},[123,77944,3161],{"class":129},[123,77946,77645],{"class":337},[123,77948,1315],{"class":129},[123,77950,77847],{"class":143},[123,77952,77653],{"class":129},[123,77954,77852],{"class":2673},[123,77956,77957,77959,77961,77963,77965,77967,77969,77971,77973,77975,77977,77979,77981,77983],{"class":125,"line":2125},[123,77958,76153],{"class":129},[123,77960,60649],{"class":337},[123,77962,1315],{"class":129},[123,77964,3187],{"class":143},[123,77966,3565],{"class":133},[123,77968,77638],{"class":50384},[123,77970,77910],{"class":133},[123,77972,3187],{"class":143},[123,77974,3161],{"class":129},[123,77976,77645],{"class":337},[123,77978,1315],{"class":129},[123,77980,77879],{"class":143},[123,77982,77709],{"class":129},[123,77984,77779],{"class":2673},[123,77986,77987],{"class":125,"line":2130},[123,77988,232],{"emptyLinePlaceholder":231},[123,77990,77991],{"class":125,"line":5033},[123,77992,77993],{"class":2673},"    \u002F\u002F ?类似于0次或一次\n",[123,77995,77996,77998,78000,78002,78004,78006,78009,78011,78013,78015,78017,78019,78021,78023],{"class":125,"line":5041},[123,77997,76153],{"class":129},[123,77999,60649],{"class":337},[123,78001,1315],{"class":129},[123,78003,3187],{"class":143},[123,78005,3565],{"class":133},[123,78007,78008],{"class":50384},"哈？",[123,78010,2910],{"class":133},[123,78012,3187],{"class":143},[123,78014,3161],{"class":129},[123,78016,77645],{"class":337},[123,78018,1315],{"class":129},[123,78020,76628],{"class":143},[123,78022,77709],{"class":129},[123,78024,77656],{"class":2673},[123,78026,78027,78029,78031,78033,78035,78037,78039,78042,78044,78046,78048,78050,78052,78054],{"class":125,"line":5046},[123,78028,76153],{"class":129},[123,78030,60649],{"class":337},[123,78032,1315],{"class":129},[123,78034,3187],{"class":143},[123,78036,3565],{"class":133},[123,78038,77638],{"class":50384},[123,78040,78041],{"class":133},"?$",[123,78043,3187],{"class":143},[123,78045,3161],{"class":129},[123,78047,77645],{"class":337},[123,78049,1315],{"class":129},[123,78051,77679],{"class":143},[123,78053,77653],{"class":129},[123,78055,77779],{"class":2673},[123,78057,78058,78060,78062,78064,78066,78068,78070,78072,78074,78076,78078,78080,78082,78084],{"class":125,"line":5052},[123,78059,76153],{"class":129},[123,78061,60649],{"class":337},[123,78063,1315],{"class":129},[123,78065,3187],{"class":143},[123,78067,3565],{"class":133},[123,78069,77638],{"class":50384},[123,78071,78041],{"class":133},[123,78073,3187],{"class":143},[123,78075,3161],{"class":129},[123,78077,77645],{"class":337},[123,78079,1315],{"class":129},[123,78081,77847],{"class":143},[123,78083,77653],{"class":129},[123,78085,77852],{"class":2673},[123,78087,78088,78090,78092,78094,78096,78098,78100,78102,78104,78106,78108,78110,78112,78114],{"class":125,"line":5058},[123,78089,76153],{"class":129},[123,78091,60649],{"class":337},[123,78093,1315],{"class":129},[123,78095,3187],{"class":143},[123,78097,3565],{"class":133},[123,78099,77638],{"class":50384},[123,78101,78041],{"class":133},[123,78103,3187],{"class":143},[123,78105,3161],{"class":129},[123,78107,77645],{"class":337},[123,78109,1315],{"class":129},[123,78111,77879],{"class":143},[123,78113,77653],{"class":129},[123,78115,77779],{"class":2673},[123,78117,78118],{"class":125,"line":5063},[123,78119,232],{"emptyLinePlaceholder":231},[123,78121,78122],{"class":125,"line":10380},[123,78123,78124],{"class":2673},"    \u002F\u002F {n}写几，就必须出现几次\n",[123,78126,78127,78129,78131,78133,78135,78137,78139,78142,78144,78146,78148,78150,78153,78156],{"class":125,"line":10404},[123,78128,76153],{"class":129},[123,78130,60649],{"class":337},[123,78132,1315],{"class":129},[123,78134,3187],{"class":143},[123,78136,3565],{"class":133},[123,78138,77638],{"class":50384},[123,78140,78141],{"class":133},"{4}$",[123,78143,3187],{"class":143},[123,78145,3161],{"class":129},[123,78147,77645],{"class":337},[123,78149,1315],{"class":129},[123,78151,78152],{"class":143},"'哈哈哈哈'",[123,78154,78155],{"class":129},")) ",[123,78157,77656],{"class":2673},[123,78159,78160],{"class":125,"line":10409},[123,78161,232],{"emptyLinePlaceholder":231},[123,78163,78164],{"class":125,"line":10415},[123,78165,78166],{"class":2673},"    \u002F\u002F {n,}大于等于n次\n",[123,78168,78169,78171,78173,78175,78177,78179,78181,78184,78186,78188,78190,78192,78194,78196],{"class":125,"line":10442},[123,78170,76153],{"class":129},[123,78172,60649],{"class":337},[123,78174,1315],{"class":129},[123,78176,3187],{"class":143},[123,78178,3565],{"class":133},[123,78180,77638],{"class":50384},[123,78182,78183],{"class":133},"{4,}$",[123,78185,3187],{"class":143},[123,78187,3161],{"class":129},[123,78189,77645],{"class":337},[123,78191,1315],{"class":129},[123,78193,78152],{"class":143},[123,78195,78155],{"class":129},[123,78197,77656],{"class":2673},[123,78199,78200,78202,78204,78206,78208,78210,78212,78214,78216,78218,78220,78222,78225,78227],{"class":125,"line":10447},[123,78201,76153],{"class":129},[123,78203,60649],{"class":337},[123,78205,1315],{"class":129},[123,78207,3187],{"class":143},[123,78209,3565],{"class":133},[123,78211,77638],{"class":50384},[123,78213,78183],{"class":133},[123,78215,3187],{"class":143},[123,78217,3161],{"class":129},[123,78219,77645],{"class":337},[123,78221,1315],{"class":129},[123,78223,78224],{"class":143},"'哈哈哈哈哈'",[123,78226,78155],{"class":129},[123,78228,77656],{"class":2673},[123,78230,78231],{"class":125,"line":10453},[123,78232,232],{"emptyLinePlaceholder":231},[123,78234,78235],{"class":125,"line":10465},[123,78236,78237],{"class":2673},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[123,78239,78240,78242,78244,78246,78248,78250,78252,78255,78257,78259,78261,78263,78265,78267],{"class":125,"line":10477},[123,78241,76153],{"class":129},[123,78243,60649],{"class":337},[123,78245,1315],{"class":129},[123,78247,3187],{"class":143},[123,78249,3565],{"class":133},[123,78251,77638],{"class":50384},[123,78253,78254],{"class":133},"{4,6}$",[123,78256,3187],{"class":143},[123,78258,3161],{"class":129},[123,78260,77645],{"class":337},[123,78262,1315],{"class":129},[123,78264,78152],{"class":143},[123,78266,78155],{"class":129},[123,78268,77656],{"class":2673},[123,78270,78271,78273,78275,78277,78279,78281,78283,78285,78287,78289,78291,78293,78295,78297],{"class":125,"line":10489},[123,78272,76153],{"class":129},[123,78274,60649],{"class":337},[123,78276,1315],{"class":129},[123,78278,3187],{"class":143},[123,78280,3565],{"class":133},[123,78282,77638],{"class":50384},[123,78284,78254],{"class":133},[123,78286,3187],{"class":143},[123,78288,3161],{"class":129},[123,78290,77645],{"class":337},[123,78292,1315],{"class":129},[123,78294,78224],{"class":143},[123,78296,78155],{"class":129},[123,78298,77656],{"class":2673},[123,78300,78301,78303,78305,78307,78309,78311,78313,78315,78317,78319,78321,78323,78326,78328],{"class":125,"line":12148},[123,78302,76153],{"class":129},[123,78304,60649],{"class":337},[123,78306,1315],{"class":129},[123,78308,3187],{"class":143},[123,78310,3565],{"class":133},[123,78312,77638],{"class":50384},[123,78314,78254],{"class":133},[123,78316,3187],{"class":143},[123,78318,3161],{"class":129},[123,78320,77645],{"class":337},[123,78322,1315],{"class":129},[123,78324,78325],{"class":143},"'哈哈哈哈哈哈哈'",[123,78327,78155],{"class":129},[123,78329,77779],{"class":2673},[123,78331,78332],{"class":125,"line":12173},[123,78333,232],{"emptyLinePlaceholder":231},[123,78335,78336],{"class":125,"line":12196},[123,78337,78338],{"class":2673},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[123,78340,78341,78343,78345,78347,78349,78351,78354,78356,78358,78360,78362,78364,78367,78369],{"class":125,"line":12220},[123,78342,76153],{"class":129},[123,78344,60649],{"class":337},[123,78346,1315],{"class":129},[123,78348,3187],{"class":143},[123,78350,3565],{"class":133},[123,78352,78353],{"class":164},"[abc]",[123,78355,2910],{"class":133},[123,78357,3187],{"class":143},[123,78359,3161],{"class":129},[123,78361,77645],{"class":337},[123,78363,1315],{"class":129},[123,78365,78366],{"class":143},"'a'",[123,78368,77653],{"class":129},[123,78370,77656],{"class":2673},[123,78372,78373,78375,78377,78379,78381,78383,78385,78387,78389,78391,78393,78395,78398,78400],{"class":125,"line":12225},[123,78374,76153],{"class":129},[123,78376,60649],{"class":337},[123,78378,1315],{"class":129},[123,78380,3187],{"class":143},[123,78382,3565],{"class":133},[123,78384,78353],{"class":164},[123,78386,2910],{"class":133},[123,78388,3187],{"class":143},[123,78390,3161],{"class":129},[123,78392,77645],{"class":337},[123,78394,1315],{"class":129},[123,78396,78397],{"class":143},"'b'",[123,78399,77653],{"class":129},[123,78401,77656],{"class":2673},[123,78403,78404,78406,78408,78410,78412,78414,78416,78418,78420,78422,78424,78426,78429,78431],{"class":125,"line":12230},[123,78405,76153],{"class":129},[123,78407,60649],{"class":337},[123,78409,1315],{"class":129},[123,78411,3187],{"class":143},[123,78413,3565],{"class":133},[123,78415,78353],{"class":164},[123,78417,2910],{"class":133},[123,78419,3187],{"class":143},[123,78421,3161],{"class":129},[123,78423,77645],{"class":337},[123,78425,1315],{"class":129},[123,78427,78428],{"class":143},"'c'",[123,78430,77653],{"class":129},[123,78432,77656],{"class":2673},[123,78434,78435,78437,78439,78441,78443,78445,78447,78449,78451,78453,78456,78458],{"class":125,"line":12235},[123,78436,76153],{"class":129},[123,78438,60649],{"class":337},[123,78440,1315],{"class":129},[123,78442,3187],{"class":143},[123,78444,78353],{"class":164},[123,78446,3187],{"class":143},[123,78448,3161],{"class":129},[123,78450,77645],{"class":337},[123,78452,1315],{"class":129},[123,78454,78455],{"class":143},"'ab'",[123,78457,77653],{"class":129},[123,78459,77656],{"class":2673},[123,78461,78462,78464,78466,78468,78470,78472,78474,78476,78478,78480,78482,78484,78486,78488],{"class":125,"line":12244},[123,78463,76153],{"class":129},[123,78465,60649],{"class":337},[123,78467,1315],{"class":129},[123,78469,3187],{"class":143},[123,78471,3565],{"class":133},[123,78473,78353],{"class":164},[123,78475,2910],{"class":133},[123,78477,3187],{"class":143},[123,78479,3161],{"class":129},[123,78481,77645],{"class":337},[123,78483,1315],{"class":129},[123,78485,78455],{"class":143},[123,78487,77653],{"class":129},[123,78489,78490],{"class":2673},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[123,78492,78493,78495,78497,78499,78501,78503,78505,78508,78510,78512,78514,78516,78518,78520],{"class":125,"line":12249},[123,78494,76153],{"class":129},[123,78496,60649],{"class":337},[123,78498,1315],{"class":129},[123,78500,3187],{"class":143},[123,78502,3565],{"class":133},[123,78504,78353],{"class":164},[123,78506,78507],{"class":133},"{2}$",[123,78509,3187],{"class":143},[123,78511,3161],{"class":129},[123,78513,77645],{"class":337},[123,78515,1315],{"class":129},[123,78517,78455],{"class":143},[123,78519,77653],{"class":129},[123,78521,78522],{"class":2673},"\u002F\u002Ftrue   可以选两个\n",[123,78524,78525,78527,78529,78531,78533,78535,78538,78540,78542,78544,78546,78548,78551,78553],{"class":125,"line":12255},[123,78526,76153],{"class":129},[123,78528,60649],{"class":337},[123,78530,1315],{"class":129},[123,78532,3187],{"class":143},[123,78534,3565],{"class":133},[123,78536,78537],{"class":164},"[a-z]",[123,78539,2910],{"class":133},[123,78541,3187],{"class":143},[123,78543,3161],{"class":129},[123,78545,77645],{"class":337},[123,78547,1315],{"class":129},[123,78549,78550],{"class":143},"'p'",[123,78552,77709],{"class":129},[123,78554,78555],{"class":2673},"\u002F\u002Ftrue   依然只能选一个\n",[123,78557,78558,78560,78562,78564,78566,78568,78571,78573,78575,78577,78579,78581,78583,78585],{"class":125,"line":12276},[123,78559,76153],{"class":129},[123,78561,60649],{"class":337},[123,78563,1315],{"class":129},[123,78565,3187],{"class":143},[123,78567,3565],{"class":133},[123,78569,78570],{"class":164},"[A-Z]",[123,78572,2910],{"class":133},[123,78574,3187],{"class":143},[123,78576,3161],{"class":129},[123,78578,77645],{"class":337},[123,78580,1315],{"class":129},[123,78582,78550],{"class":143},[123,78584,77709],{"class":129},[123,78586,77779],{"class":2673},[123,78588,78589,78591,78593,78595,78597,78599,78601,78603,78605,78607,78609,78611,78614,78616],{"class":125,"line":12282},[123,78590,76153],{"class":129},[123,78592,60649],{"class":337},[123,78594,1315],{"class":129},[123,78596,3187],{"class":143},[123,78598,3565],{"class":133},[123,78600,78570],{"class":164},[123,78602,2910],{"class":133},[123,78604,3187],{"class":143},[123,78606,3161],{"class":129},[123,78608,77645],{"class":337},[123,78610,1315],{"class":129},[123,78612,78613],{"class":143},"'P'",[123,78615,77709],{"class":129},[123,78617,77656],{"class":2673},[123,78619,78620,78622,78624,78626,78628,78630,78633,78635,78637,78639,78641,78643,78646,78648],{"class":125,"line":12296},[123,78621,76153],{"class":129},[123,78623,60649],{"class":337},[123,78625,1315],{"class":129},[123,78627,3187],{"class":143},[123,78629,3565],{"class":133},[123,78631,78632],{"class":164},"[0-9]",[123,78634,2910],{"class":133},[123,78636,3187],{"class":143},[123,78638,3161],{"class":129},[123,78640,77645],{"class":337},[123,78642,1315],{"class":129},[123,78644,78645],{"class":143},"'0'",[123,78647,77709],{"class":129},[123,78649,77656],{"class":2673},[123,78651,78652,78654,78656,78658,78660,78662,78665,78667,78669,78671,78673,78675,78677,78679],{"class":125,"line":12302},[123,78653,76153],{"class":129},[123,78655,60649],{"class":337},[123,78657,1315],{"class":129},[123,78659,3187],{"class":143},[123,78661,3565],{"class":133},[123,78663,78664],{"class":164},"[a-zA-Z0-9]",[123,78666,2910],{"class":133},[123,78668,3187],{"class":143},[123,78670,3161],{"class":129},[123,78672,77645],{"class":337},[123,78674,1315],{"class":129},[123,78676,78550],{"class":143},[123,78678,77653],{"class":129},[123,78680,77656],{"class":2673},[123,78682,78683,78685,78687],{"class":125,"line":12329},[123,78684,54820],{"class":129},[123,78686,54218],{"class":53707},[123,78688,53714],{"class":129},[123,78690,78691,78693,78695],{"class":125,"line":12338},[123,78692,54190],{"class":129},[123,78694,54205],{"class":53707},[123,78696,53714],{"class":129},[123,78698,78699],{"class":125,"line":12344},[123,78700,232],{"emptyLinePlaceholder":231},[123,78702,78703,78705,78707],{"class":125,"line":12352},[123,78704,54190],{"class":129},[123,78706,53042],{"class":53707},[123,78708,53714],{"class":129},[24425,78710,78712],{"id":78711},"_3624-修饰符","3.6.2.4 修饰符",[19,78714,78715],{},[3929,78716],{"alt":118,"src":78717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78719,78720],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78722,78723],{},[3929,78724],{"alt":118,"src":78725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[113,78727,78729],{"className":53040,"code":78728,"language":53042,"meta":118,"style":118},"\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",[120,78730,78731,78741,78755,78763,78777,78797,78809,78817,78825,78833,78865,78896,78901,78933,78944,78977,78986,78994,79002],{"__ignoreMap":118},[123,78732,78733,78735,78737,78739],{"class":125,"line":126},[123,78734,53704],{"class":129},[123,78736,53708],{"class":53707},[123,78738,53711],{"class":337},[123,78740,53714],{"class":129},[123,78742,78743,78745,78747,78749,78751,78753],{"class":125,"line":140},[123,78744,3509],{"class":129},[123,78746,53042],{"class":53707},[123,78748,53723],{"class":337},[123,78750,134],{"class":129},[123,78752,53728],{"class":143},[123,78754,53714],{"class":129},[123,78756,78757,78759,78761],{"class":125,"line":156},[123,78758,3509],{"class":129},[123,78760,53741],{"class":53707},[123,78762,53714],{"class":129},[123,78764,78765,78767,78769,78771,78773,78775],{"class":125,"line":168},[123,78766,54548],{"class":129},[123,78768,53751],{"class":53707},[123,78770,53754],{"class":337},[123,78772,134],{"class":129},[123,78774,53759],{"class":143},[123,78776,53714],{"class":129},[123,78778,78779,78781,78783,78785,78787,78789,78791,78793,78795],{"class":125,"line":268},[123,78780,54548],{"class":129},[123,78782,53751],{"class":53707},[123,78784,17350],{"class":337},[123,78786,134],{"class":129},[123,78788,53798],{"class":143},[123,78790,53778],{"class":337},[123,78792,134],{"class":129},[123,78794,53805],{"class":143},[123,78796,53714],{"class":129},[123,78798,78799,78801,78803,78805,78807],{"class":125,"line":291},[123,78800,54548],{"class":129},[123,78802,642],{"class":53707},[123,78804,53816],{"class":129},[123,78806,642],{"class":53707},[123,78808,53714],{"class":129},[123,78810,78811,78813,78815],{"class":125,"line":300},[123,78812,54190],{"class":129},[123,78814,53741],{"class":53707},[123,78816,53714],{"class":129},[123,78818,78819,78821,78823],{"class":125,"line":305},[123,78820,3509],{"class":129},[123,78822,54205],{"class":53707},[123,78824,53714],{"class":129},[123,78826,78827,78829,78831],{"class":125,"line":316},[123,78828,54548],{"class":129},[123,78830,54218],{"class":53707},[123,78832,53714],{"class":129},[123,78834,78835,78837,78839,78841,78843,78845,78848,78850,78852,78854,78856,78858,78861,78863],{"class":125,"line":673},[123,78836,76153],{"class":129},[123,78838,60649],{"class":337},[123,78840,1315],{"class":129},[123,78842,3187],{"class":143},[123,78844,3565],{"class":133},[123,78846,78847],{"class":50384},"java",[123,78849,2910],{"class":133},[123,78851,3187],{"class":143},[123,78853,3161],{"class":129},[123,78855,77645],{"class":337},[123,78857,1315],{"class":129},[123,78859,78860],{"class":143},"'java'",[123,78862,78155],{"class":129},[123,78864,77656],{"class":2673},[123,78866,78867,78869,78871,78873,78875,78877,78879,78881,78883,78885,78887,78889,78892,78894],{"class":125,"line":692},[123,78868,76153],{"class":129},[123,78870,60649],{"class":337},[123,78872,1315],{"class":129},[123,78874,3187],{"class":143},[123,78876,3565],{"class":133},[123,78878,78847],{"class":50384},[123,78880,2910],{"class":133},[123,78882,3187],{"class":143},[123,78884,3161],{"class":129},[123,78886,77645],{"class":337},[123,78888,1315],{"class":129},[123,78890,78891],{"class":143},"'Java'",[123,78893,78155],{"class":129},[123,78895,77779],{"class":2673},[123,78897,78898],{"class":125,"line":713},[123,78899,78900],{"class":2673},"    \u002F\u002F 不区分大小写、\n",[123,78902,78903,78905,78907,78909,78911,78913,78915,78917,78919,78921,78923,78925,78927,78929,78931],{"class":125,"line":718},[123,78904,76153],{"class":129},[123,78906,60649],{"class":337},[123,78908,1315],{"class":129},[123,78910,3187],{"class":143},[123,78912,3565],{"class":133},[123,78914,78847],{"class":50384},[123,78916,2910],{"class":133},[123,78918,3187],{"class":143},[123,78920,3047],{"class":133},[123,78922,3161],{"class":129},[123,78924,77645],{"class":337},[123,78926,1315],{"class":129},[123,78928,78891],{"class":143},[123,78930,78155],{"class":129},[123,78932,77656],{"class":2673},[123,78934,78935,78937,78939,78941],{"class":125,"line":1138},[123,78936,13653],{"class":133},[123,78938,76319],{"class":164},[123,78940,15995],{"class":133},[123,78942,78943],{"class":143}," 'java是一门编程语言，学完java工资很高'\n",[123,78945,78946,78948,78951,78953,78956,78959,78961,78963,78965,78967,78970,78972,78975],{"class":125,"line":1429},[123,78947,13653],{"class":133},[123,78949,78950],{"class":164}," result",[123,78952,15995],{"class":133},[123,78954,78955],{"class":129}," str.",[123,78957,78958],{"class":337},"replace",[123,78960,1315],{"class":129},[123,78962,3187],{"class":143},[123,78964,78847],{"class":50384},[123,78966,3187],{"class":143},[123,78968,78969],{"class":133},"ig",[123,78971,251],{"class":129},[123,78973,78974],{"class":143},"'前端'",[123,78976,288],{"class":129},[123,78978,78979,78981,78983],{"class":125,"line":1439},[123,78980,76153],{"class":129},[123,78982,60649],{"class":337},[123,78984,78985],{"class":129},"(result)\n",[123,78987,78988,78990,78992],{"class":125,"line":1444},[123,78989,54820],{"class":129},[123,78991,54218],{"class":53707},[123,78993,53714],{"class":129},[123,78995,78996,78998,79000],{"class":125,"line":1453},[123,78997,54190],{"class":129},[123,78999,54205],{"class":53707},[123,79001,53714],{"class":129},[123,79003,79004,79006,79008],{"class":125,"line":1458},[123,79005,54190],{"class":129},[123,79007,53042],{"class":53707},[123,79009,53714],{"class":129},[2526,79011,79012],{},"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":118,"searchDepth":140,"depth":140,"links":79014},[79015,79025,79037,79054,79061,79069],{"id":55763,"depth":140,"text":55764,"children":79016},[79017,79018,79019,79020,79021,79022,79023,79024],{"id":55767,"depth":156,"text":55768},{"id":55800,"depth":156,"text":55801},{"id":55839,"depth":156,"text":55840},{"id":55997,"depth":156,"text":55998},{"id":56045,"depth":156,"text":56046},{"id":56182,"depth":156,"text":56183},{"id":56504,"depth":156,"text":56505},{"id":59491,"depth":156,"text":59492},{"id":59519,"depth":140,"text":59520,"children":79026},[79027,79028,79029,79030,79031,79032,79033,79034,79035,79036],{"id":59523,"depth":156,"text":59524},{"id":59546,"depth":156,"text":59547},{"id":60461,"depth":156,"text":60462},{"id":61151,"depth":156,"text":61152},{"id":61433,"depth":156,"text":61434},{"id":65593,"depth":156,"text":65594},{"id":65763,"depth":156,"text":65764},{"id":65891,"depth":156,"text":65892},{"id":65916,"depth":156,"text":65917},{"id":67305,"depth":156,"text":67306},{"id":68458,"depth":140,"text":68459,"children":79038},[79039,79040,79041,79042,79043,79044,79045,79046,79047,79048,79049,79050,79051,79052,79053],{"id":68462,"depth":156,"text":68463},{"id":69116,"depth":156,"text":69117},{"id":70811,"depth":156,"text":70812},{"id":70852,"depth":156,"text":70853},{"id":70894,"depth":156,"text":70895},{"id":70908,"depth":156,"text":70909},{"id":70957,"depth":156,"text":70958},{"id":70969,"depth":156,"text":70970},{"id":70984,"depth":156,"text":70985},{"id":71020,"depth":156,"text":71021},{"id":71101,"depth":156,"text":71102},{"id":71229,"depth":156,"text":71230},{"id":71241,"depth":156,"text":71242},{"id":71260,"depth":156,"text":71261},{"id":73370,"depth":156,"text":73371},{"id":73389,"depth":140,"text":73390,"children":79055},[79056,79057,79058,79059,79060],{"id":73410,"depth":156,"text":73411},{"id":73430,"depth":156,"text":73431},{"id":73479,"depth":156,"text":73480},{"id":73604,"depth":156,"text":73605},{"id":73785,"depth":156,"text":73786},{"id":73803,"depth":140,"text":73804,"children":79062},[79063,79064,79065,79066,79067,79068],{"id":73818,"depth":156,"text":73819},{"id":73877,"depth":156,"text":73878},{"id":73901,"depth":156,"text":73902},{"id":74221,"depth":156,"text":74222},{"id":74253,"depth":156,"text":74254},{"id":74276,"depth":156,"text":74277},{"id":77344,"depth":140,"text":77345,"children":79070},[79071,79072],{"id":77378,"depth":156,"text":77379},{"id":77417,"depth":156,"text":77418},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55735,"description":2544},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79079,"title":79080,"body":79081,"description":2544,"extension":2545,"meta":95212,"navigation":231,"path":95213,"seo":95214,"stem":95215,"__hash__":95216},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79082,"toc":95148},[79083,79086,79089,79093,79097,79102,79107,79118,79122,79127,79130,79134,79137,79142,79146,79150,79153,79158,79161,79165,79168,79176,79179,79183,79188,79193,79196,79200,79205,79210,79213,79217,79222,79225,79230,79233,79238,79241,79246,79251,79254,79257,79261,79266,79271,79274,79278,79282,79285,79288,79291,79295,79299,79304,79309,79312,79316,79321,79326,79329,79332,79335,79338,79341,79344,79347,79350,79353,79358,79362,79367,79372,79375,79378,79381,79384,79387,79390,79393,79396,79400,79404,79407,79410,79413,79418,79420,79423,79426,79429,79432,79435,79438,79441,79444,79447,79450,79453,79456,79459,79464,79469,79474,79477,79481,79484,79489,79493,79495,79506,79511,79612,79615,79618,79621,79624,79627,79630,79633,79636,79638,79641,79644,79647,79650,79653,79655,79658,79661,79664,79667,79670,79673,79675,79678,79680,79682,79685,79689,79693,79696,79699,79702,79705,79708,79711,79714,79717,79720,79725,79845,79848,79851,79856,79859,79862,79865,79868,79873,79876,79879,79882,79885,79890,79893,79991,80056,80130,80134,80137,80140,80144,80147,80161,80190,80193,80196,80199,80202,80205,80208,80211,80213,80216,80219,80222,80225,80229,80234,80238,80243,80318,80321,80504,80507,80510,80513,80516,80519,80521,80524,80527,80530,80533,80536,80539,80541,80545,80548,80553,80556,80559,80562,80565,80567,80572,80575,80578,80581,80584,80586,80591,80594,80597,80599,80601,80604,80608,80611,80614,80619,80622,80625,80628,80678,80683,80687,80692,80695,80764,80767,80776,80780,80785,80788,80791,80799,80802,80819,82620,82624,82628,82633,82636,82640,82646,82652,82804,82809,82814,82817,82820,82823,82826,82829,82832,82835,82838,82841,82844,82847,82850,82855,82859,82862,82873,82877,82882,82885,82888,82891,82894,82897,82899,82902,82905,82908,82911,82913,82930,82933,82937,82940,82945,82950,82953,82956,82960,82963,82966,82975,82978,82982,82985,82990,82995,83062,83066,83069,83072,83077,83082,83168,83173,83177,83180,83183,83198,83201,83206,83210,83215,83324,83327,83338,83488,83492,83497,83606,83610,83615,83620,83625,83628,83635,83655,83691,83855,83860,83863,83868,83875,83878,83881,83884,83943,83999,84055,84059,84064,84379,84382,84386,84389,84394,84503,84508,84512,84517,84521,84592,84596,84598,84601,84604,84642,84918,84922,84939,85005,85039,85043,85046,85051,85080,85087,85096,85101,85116,85121,85130,85133,85270,85274,85336,85340,85345,85590,85594,85599,85602,85605,85608,85611,85615,85620,87200,87204,87208,87214,87217,87222,87226,87229,87234,87237,87248,87252,87257,87261,87266,87271,87274,87279,87283,87287,87290,87295,87300,87303,87306,87309,87431,87436,87538,87541,87544,87548,87553,87725,87730,87734,87737,87742,87808,87813,87816,87947,87950,87955,87958,87961,88052,88057,88060,88063,88066,88069,88074,88079,88082,88087,88092,88097,88101,88104,88107,88112,88117,88122,88127,88181,88184,88187,88192,88195,88198,88203,88208,88213,88217,88222,88236,88241,88244,88249,88253,88258,88263,88268,88273,88278,88283,88288,88293,88296,88300,88305,88308,88311,88314,88319,88324,88327,88330,88334,88337,88340,88345,88350,88355,88360,88363,88368,88373,88434,88439,88442,88447,89688,89693,89697,89701,89706,89709,89714,89719,89722,89727,89729,89734,89738,89741,89744,89755,89759,89764,89769,89824,89829,89834,89839,90050,90055,90059,90064,90067,90069,90072,90075,90521,90526,90533,90539,90542,90545,90809,90814,90818,91083,91088,91092,91097,91102,91107,91112,91443,91446,91451,91456,91459,91463,91467,91472,91477,91482,91487,91492,91497,91501,91504,91509,91514,91517,91591,91596,91601,91606,91608,91611,91981,91986,91991,91996,91999,92002,92104,92109,92114,92217,92221,92226,92230,92234,92239,92244,92247,92252,92255,92258,92651,92656,92659,92662,92665,92668,93188,93192,93197,93202,93207,93210,93215,93218,93221,93603,93608,93610,93612,93615,93618,94130,94134,94195,94198,94201,94204,94208,94211,94216,94221,95145],[10,79084,79080],{"id":79085},"_4js进阶",[19,79087,79088],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79090,79092],{"id":79091},"_41-作用域","4.1 作用域",[2587,79094,79096],{"id":79095},"_411-局部作用域","4.1.1 局部作用域",[19,79098,79099],{},[3929,79100],{"alt":118,"src":79101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,79103,79104],{},[3929,79105],{"alt":118,"src":79106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3606,79108,79109,79112,79115],{},[29,79110,79111],{},"函数作用域在函数内部",[29,79113,79114],{},"块级作用域在{}",[29,79116,79117],{},"对象的那个{}不是作用域，不是块作用域",[2587,79119,79121],{"id":79120},"_412-全局作用域","4.1.2 全局作用域",[19,79123,79124],{},[3929,79125],{"alt":118,"src":79126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,79128,79129],{},"window.a=10不要这样写",[2587,79131,79133],{"id":79132},"_413-作用域链","4.1.3 作用域链",[19,79135,79136],{},"变量查找机制",[19,79138,79139],{},[3929,79140],{"alt":118,"src":79141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79143,79145],{"id":79144},"_42-垃圾回收机制","4.2 垃圾回收机制",[2587,79147,79149],{"id":79148},"_421-大体介绍","4.2.1 大体介绍",[19,79151,79152],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,79154,79155],{},[3929,79156],{"alt":118,"src":79157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,79159,79160],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[2587,79162,79164],{"id":79163},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,79166,79167],{},"堆栈空间分配区别：",[26,79169,79170,79173],{},[29,79171,79172],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,79174,79175],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,79177,79178],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24425,79180,79182],{"id":79181},"_4221-引用计数","4.2.2.1 引用计数",[19,79184,79185],{},[3929,79186],{"alt":118,"src":79187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79189,79190],{},[3929,79191],{"alt":118,"src":79192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79194,79195],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24425,79197,79199],{"id":79198},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79201,79202],{},[3929,79203],{"alt":118,"src":79204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79206,79207],{},[3929,79208],{"alt":118,"src":79209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79211,79212],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79214,79216],{"id":79215},"_43-闭包","4.3 闭包",[19,79218,79219],{},[3929,79220],{"alt":118,"src":79221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79223,79224],{},"闭包：内层函数+外层函数的变量",[19,79226,79227],{},[3929,79228],{"alt":118,"src":79229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79231,79232],{},"closure就是闭包",[19,79234,79235],{},[3929,79236],{"alt":118,"src":79237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79239,79240],{},"内层函数必须包含外层函数的变量才是闭包",[19,79242,79243],{},[3929,79244],{"alt":118,"src":79245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79247,79248],{},[3929,79249],{"alt":118,"src":79250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79252,79253],{},"闭包可能会引起内存泄漏",[19,79255,79256],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79258,79260],{"id":79259},"_44-变量提升","4.4 变量提升",[19,79262,79263],{},[3929,79264],{"alt":118,"src":79265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79267,79268],{},[3929,79269],{"alt":118,"src":79270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79272,79273],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79275,79277],{"id":79276},"_45-函数进阶","4.5 函数进阶",[2587,79279,79281],{"id":79280},"_451-函数提升","4.5.1 函数提升",[19,79283,79284],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79286,79287],{},"只提升函数声明，不提升函数调用",[54218,79289,79290],{},"\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",[2587,79292,79294],{"id":79293},"_452-函数参数","4.5.2 函数参数",[24425,79296,79298],{"id":79297},"_4521-动态参数","4.5.2.1 动态参数",[19,79300,79301],{},[3929,79302],{"alt":118,"src":79303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79305,79306],{},[3929,79307],{"alt":118,"src":79308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79310,79311],{},"箭头函数里边没有arguments",[24425,79313,79315],{"id":79314},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79317,79318],{},[3929,79319],{"alt":118,"src":79320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79322,79323],{},[3929,79324],{"alt":118,"src":79325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79327,79328],{},"剩余参数使用的时候不需要写...",[19,79330,79331],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79333,79334],{},"  function getSum(a,b,...arr) {",[19,79336,79337],{},"  console.log(11)",[19,79339,79340],{},"  }",[19,79342,79343],{},"  getSum(1,2,3,4)",[19,79345,79346],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79348,79349],{},"  getSum(1,2)",[19,79351,79352],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79354,79355],{},[3929,79356],{"alt":118,"src":79357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24425,79359,79361],{"id":79360},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79363,79364],{},[3929,79365],{"alt":118,"src":79366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79368,79369],{},[3929,79370],{"alt":118,"src":79371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79373,79374],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79376,79377],{},"展开运算符可以用于数组之间的合并：",[19,79379,79380],{},"const arr1 = [1, 2, 3]",[19,79382,79383],{},"const arr2 = [3, 4, 5]",[19,79385,79386],{},"const arr = [...arr1, ...arr2]",[19,79388,79389],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79391,79392],{},"剩余参数：函数参数使用，得到真数组",[19,79394,79395],{},"展开运算符：数组中使用，数组展开",[2587,79397,79399],{"id":79398},"_453-箭头函数","4.5.3 箭头函数",[24425,79401,79403],{"id":79402},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79405,79406],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79408,79409],{},"它不是万能的！！！",[19,79411,79412],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79414,79415],{},[3929,79416],{"alt":118,"src":79417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79419,2646],{},[19,79421,79422],{},"① 只有一个形参的时候，可以省略小括号：",[19,79424,79425],{},"const fn=x=>{console.log(x)}",[19,79427,79428],{},"② 只有一行代码时可以省略大括号：",[19,79430,79431],{},"const fn=x=>console.log(11)",[19,79433,79434],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79436,79437],{},"const fn=x=>x+x",[19,79439,79440],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79442,79443],{},"⑤ 阻止表单默认提交：",[19,79445,79446],{},"const form = document.querySelector('form')",[19,79448,79449],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79451,79452],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79454,79455],{},"const fn=uname=>({uname:uname})",[19,79457,79458],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79460,79461],{},[3929,79462],{"alt":118,"src":79463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79465,79466],{},[3929,79467],{"alt":118,"src":79468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79470,79471],{},[3929,79472],{"alt":118,"src":79473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79475,79476],{},"一定不要忘记用()，有()就理解为自带return",[24425,79478,79480],{"id":79479},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79482,79483],{},"箭头函数是没有动态参数的arguments",[19,79485,79486],{},[3929,79487],{"alt":118,"src":79488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24425,79490,79492],{"id":79491},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79494,13764],{},[26,79496,79497,79500,79503],{},[29,79498,79499],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,79501,79502],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,79504,79505],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79507,79508],{},[3929,79509],{"alt":118,"src":79510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[113,79512,79514],{"className":55470,"code":79513,"language":55472,"meta":118,"style":118},"  \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",[120,79515,79516,79524,79529,79534,79539,79544,79549,79553,79558,79562,79566,79571,79576,79581,79585,79589,79594,79599,79604],{"__ignoreMap":118},[123,79517,79518,79520,79522],{"class":125,"line":126},[123,79519,54548],{"class":129},[123,79521,54218],{"class":53707},[123,79523,53714],{"class":129},[123,79525,79526],{"class":125,"line":140},[123,79527,79528],{"class":129},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[123,79530,79531],{"class":125,"line":156},[123,79532,79533],{"class":129},"    console.log(this) \u002F\u002F指向window\n",[123,79535,79536],{"class":125,"line":168},[123,79537,79538],{"class":129},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[123,79540,79541],{"class":125,"line":268},[123,79542,79543],{"class":129},"    function fn() {\n",[123,79545,79546],{"class":125,"line":291},[123,79547,79548],{"class":129},"      console.log(this)  \u002F\u002F指向window\n",[123,79550,79551],{"class":125,"line":300},[123,79552,4631],{"class":129},[123,79554,79555],{"class":125,"line":305},[123,79556,79557],{"class":129},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[123,79559,79560],{"class":125,"line":316},[123,79561,232],{"emptyLinePlaceholder":231},[123,79563,79564],{"class":125,"line":673},[123,79565,73923],{"class":129},[123,79567,79568],{"class":125,"line":692},[123,79569,79570],{"class":129},"      name: 'andy',\n",[123,79572,79573],{"class":125,"line":713},[123,79574,79575],{"class":129},"      sayHai: function () {\n",[123,79577,79578],{"class":125,"line":718},[123,79579,79580],{"class":129},"        console.log(this)\n",[123,79582,79583],{"class":125,"line":1138},[123,79584,54801],{"class":129},[123,79586,79587],{"class":125,"line":1429},[123,79588,4631],{"class":129},[123,79590,79591],{"class":125,"line":1439},[123,79592,79593],{"class":129},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[123,79595,79596],{"class":125,"line":1444},[123,79597,79598],{"class":129},"    \u002F\u002F 2.箭头函数的this\n",[123,79600,79601],{"class":125,"line":1453},[123,79602,79603],{"class":129},"    const fn = () => console.log(this)\n",[123,79605,79606,79608,79610],{"class":125,"line":1458},[123,79607,54820],{"class":129},[123,79609,54218],{"class":53707},[123,79611,53714],{"class":129},[19,79613,79614],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79616,79617],{},"const fn = () => console.log(this)",[19,79619,79620],{},"fn() \u002F\u002F指向window",[19,79622,79623],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79625,79626],{},"①",[19,79628,79629],{},"const obj = {",[19,79631,79632],{},"uname: 'pink老师',",[19,79634,79635],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79637,3545],{},[19,79639,79640],{},"调用对象里边的函数",[19,79642,79643],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79645,79646],{},"obj.sayHai()",[19,79648,79649],{},"②",[19,79651,79652],{},"const obj1 = {",[19,79654,79632],{},[19,79656,79657],{},"sayHai: function () {",[19,79659,79660],{},"let i = 10",[19,79662,79663],{},"const count = () => {",[19,79665,79666],{},"console.log(this)",[19,79668,79669],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79671,79672],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79674,3545],{},[19,79676,79677],{},"count()",[19,79679,3545],{},[19,79681,3545],{},[19,79683,79684],{},"obj1.sayHai()",[14,79686,79688],{"id":79687},"_46-解构赋值","4.6 解构赋值",[2587,79690,79692],{"id":79691},"_461-数组解构","4.6.1 数组解构",[19,79694,79695],{},"以前要是使用数组中的值的话：",[19,79697,79698],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79700,79701],{},"const arr=[100,60,80]",[19,79703,79704],{},"const max=arr[0]",[19,79706,79707],{},"const min=arr[1]",[19,79709,79710],{},"const avg=arr[2]",[19,79712,79713],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79715,79716],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79718,79719],{},"这个写法就类似于上边的那种用很多const的方法",[19,79721,79722],{},[3929,79723],{"alt":118,"src":79724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[113,79726,79728],{"className":53040,"code":79727,"language":53042,"meta":118,"style":118},"①变量之间交换值:\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",[120,79729,79730,79735,79740,79745,79750,79755,79759,79763,79768,79772,79777,79782,79786,79791,79796,79807,79817,79822,79827,79832,79836,79840],{"__ignoreMap":118},[123,79731,79732],{"class":125,"line":126},[123,79733,79734],{"class":129},"①变量之间交换值:\n",[123,79736,79737],{"class":125,"line":140},[123,79738,79739],{"class":129},"let a=1\n",[123,79741,79742],{"class":125,"line":156},[123,79743,79744],{"class":129},"let b=2;\n",[123,79746,79747],{"class":125,"line":168},[123,79748,79749],{"class":129},"必须加这行代码，不然就会报错\n",[123,79751,79752],{"class":125,"line":268},[123,79753,79754],{"class":129},"[b,a]=[a,b]\n",[123,79756,79757],{"class":125,"line":291},[123,79758,232],{"emptyLinePlaceholder":231},[123,79760,79761],{"class":125,"line":300},[123,79762,232],{"emptyLinePlaceholder":231},[123,79764,79765],{"class":125,"line":305},[123,79766,79767],{"class":129},"可以写成下面的方式：\n",[123,79769,79770],{"class":125,"line":316},[123,79771,79739],{"class":129},[123,79773,79774],{"class":125,"line":673},[123,79775,79776],{"class":129},"let b=2\n",[123,79778,79779],{"class":125,"line":692},[123,79780,79781],{"class":129},";[b,a]=[a,b]\n",[123,79783,79784],{"class":125,"line":713},[123,79785,232],{"emptyLinePlaceholder":231},[123,79787,79788],{"class":125,"line":718},[123,79789,79790],{"class":129},"②排序\n",[123,79792,79793],{"class":125,"line":1138},[123,79794,79795],{"class":129},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[123,79797,79798,79801,79804],{"class":125,"line":1429},[123,79799,79800],{"class":129},"for (let i = 0; i ",[123,79802,3509],{"class":79803},"s7hpK",[123,79805,79806],{"class":129}," arr1.length; i++) {\n",[123,79808,79809,79812,79814],{"class":125,"line":1439},[123,79810,79811],{"class":129},"   for (let j = 0; j ",[123,79813,3509],{"class":79803},[123,79815,79816],{"class":129}," arr1.length - 1; j++) {\n",[123,79818,79819],{"class":125,"line":1444},[123,79820,79821],{"class":129},"      if (arr1[j] > arr1[j + 1]) {\n",[123,79823,79824],{"class":125,"line":1453},[123,79825,79826],{"class":129},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[123,79828,79829],{"class":125,"line":1458},[123,79830,79831],{"class":129},"       }\n",[123,79833,79834],{"class":125,"line":1476},[123,79835,6748],{"class":129},[123,79837,79838],{"class":125,"line":1494},[123,79839,171],{"class":129},[123,79841,79842],{"class":125,"line":1499},[123,79843,79844],{"class":129},"console.log(arr1)\n",[19,79846,79847],{},"数组解构的细节：",[19,79849,79850],{},"①变量多，单元值少",[19,79852,79853],{},[3929,79854],{"alt":118,"src":79855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79857,79858],{},"防止出现undefined的方法：",[19,79860,79861],{},"const [a=0,b=0] =[1]",[19,79863,79864],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79866,79867],{},"②变量少，单元值多",[19,79869,79870],{},[3929,79871],{"alt":118,"src":79872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79874,79875],{},"此时可以使用剩余参数来接收多余的值",[19,79877,79878],{},"const [a,b,...c]=[1,2,3,4]",[19,79880,79881],{},"console.log(c) 输出[3,4]",[19,79883,79884],{},"③可以按需导入，忽略某些返回值",[19,79886,79887],{},[3929,79888],{"alt":118,"src":79889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79891,79892],{},"④支持多维数组的结构",[113,79894,79898],{"className":79895,"code":79896,"language":79897,"meta":118,"style":118},"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",[120,79899,79900,79926,79942,79957,79972],{"__ignoreMap":118},[123,79901,79902,79904,79906,79908,79910,79912,79914,79916,79918,79920,79922,79924],{"class":125,"line":126},[123,79903,9225],{"class":133},[123,79905,54238],{"class":129},[123,79907,134],{"class":133},[123,79909,977],{"class":129},[123,79911,2825],{"class":164},[123,79913,251],{"class":129},[123,79915,2692],{"class":164},[123,79917,455],{"class":129},[123,79919,2686],{"class":164},[123,79921,251],{"class":129},[123,79923,2901],{"class":164},[123,79925,2341],{"class":129},[123,79927,79928,79931,79933,79935,79937,79939],{"class":125,"line":140},[123,79929,79930],{"class":129},"console.",[123,79932,60649],{"class":337},[123,79934,6290],{"class":129},[123,79936,2799],{"class":164},[123,79938,6655],{"class":129},[123,79940,79941],{"class":2673},"  \u002F\u002F1\n",[123,79943,79944,79946,79948,79950,79952,79954],{"class":125,"line":156},[123,79945,79930],{"class":129},[123,79947,60649],{"class":337},[123,79949,6290],{"class":129},[123,79951,2825],{"class":164},[123,79953,6655],{"class":129},[123,79955,79956],{"class":2673},"  \u002F\u002F2\n",[123,79958,79959,79961,79963,79965,79967,79969],{"class":125,"line":168},[123,79960,79930],{"class":129},[123,79962,60649],{"class":337},[123,79964,6290],{"class":129},[123,79966,2692],{"class":164},[123,79968,6655],{"class":129},[123,79970,79971],{"class":2673},"  \u002F\u002F[3,4]\n",[123,79973,79974,79976,79978,79980,79982,79984,79986,79988],{"class":125,"line":268},[123,79975,79930],{"class":129},[123,79977,60649],{"class":337},[123,79979,6290],{"class":129},[123,79981,2692],{"class":164},[123,79983,7337],{"class":129},[123,79985,2799],{"class":164},[123,79987,6655],{"class":129},[123,79989,79990],{"class":2673},"  \u002F\u002F3\n",[113,79992,79994],{"className":79895,"code":79993,"language":79897,"meta":118,"style":118},"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",[120,79995,79996,80023,80034,80045],{"__ignoreMap":118},[123,79997,79998,80000,80003,80005,80007,80009,80011,80013,80015,80017,80019,80021],{"class":125,"line":126},[123,79999,9225],{"class":133},[123,80001,80002],{"class":129}," [a, b, c] ",[123,80004,134],{"class":133},[123,80006,977],{"class":129},[123,80008,2825],{"class":164},[123,80010,251],{"class":129},[123,80012,2692],{"class":164},[123,80014,455],{"class":129},[123,80016,2686],{"class":164},[123,80018,251],{"class":129},[123,80020,2901],{"class":164},[123,80022,2341],{"class":129},[123,80024,80025,80027,80029,80032],{"class":125,"line":140},[123,80026,79930],{"class":129},[123,80028,60649],{"class":337},[123,80030,80031],{"class":129},"(a)",[123,80033,79941],{"class":2673},[123,80035,80036,80038,80040,80043],{"class":125,"line":156},[123,80037,79930],{"class":129},[123,80039,60649],{"class":337},[123,80041,80042],{"class":129},"(b)",[123,80044,79956],{"class":2673},[123,80046,80047,80049,80051,80054],{"class":125,"line":168},[123,80048,79930],{"class":129},[123,80050,60649],{"class":337},[123,80052,80053],{"class":129},"(c)",[123,80055,79971],{"class":2673},[113,80057,80059],{"className":79895,"code":80058,"language":79897,"meta":118,"style":118},"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",[120,80060,80061,80088,80098,80108,80118],{"__ignoreMap":118},[123,80062,80063,80065,80068,80070,80072,80074,80076,80078,80080,80082,80084,80086],{"class":125,"line":126},[123,80064,9225],{"class":133},[123,80066,80067],{"class":129}," [a, b, [c, d]] ",[123,80069,134],{"class":133},[123,80071,977],{"class":129},[123,80073,2825],{"class":164},[123,80075,251],{"class":129},[123,80077,2692],{"class":164},[123,80079,455],{"class":129},[123,80081,2686],{"class":164},[123,80083,251],{"class":129},[123,80085,2901],{"class":164},[123,80087,2341],{"class":129},[123,80089,80090,80092,80094,80096],{"class":125,"line":140},[123,80091,79930],{"class":129},[123,80093,60649],{"class":337},[123,80095,80031],{"class":129},[123,80097,79941],{"class":2673},[123,80099,80100,80102,80104,80106],{"class":125,"line":156},[123,80101,79930],{"class":129},[123,80103,60649],{"class":337},[123,80105,80042],{"class":129},[123,80107,79956],{"class":2673},[123,80109,80110,80112,80114,80116],{"class":125,"line":168},[123,80111,79930],{"class":129},[123,80113,60649],{"class":337},[123,80115,80053],{"class":129},[123,80117,79990],{"class":2673},[123,80119,80120,80122,80124,80127],{"class":125,"line":268},[123,80121,79930],{"class":129},[123,80123,60649],{"class":337},[123,80125,80126],{"class":129},"(d)",[123,80128,80129],{"class":2673},"  \u002F\u002F4\n",[2587,80131,80133],{"id":80132},"_462-对象解构","4.6.2 对象解构",[19,80135,80136],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,80138,80139],{},"用的非常非常多！！！！！！",[24425,80141,80143],{"id":80142},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,80145,80146],{},"基本语法：",[26,80148,80149,80152,80155,80158],{},[29,80150,80151],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,80153,80154],{},"对象属性的值将被赋值给与属性名相同的变量",[29,80156,80157],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,80159,80160],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[113,80162,80164],{"className":53040,"code":80163,"language":53042,"meta":118,"style":118},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[120,80165,80166,80171,80176,80181,80185],{"__ignoreMap":118},[123,80167,80168],{"class":125,"line":126},[123,80169,80170],{"class":129},"const obj = {\n",[123,80172,80173],{"class":125,"line":140},[123,80174,80175],{"class":129},"   uname: 'pink老师',\n",[123,80177,80178],{"class":125,"line":156},[123,80179,80180],{"class":129},"   age: 18,\n",[123,80182,80183],{"class":125,"line":168},[123,80184,171],{"class":129},[123,80186,80187],{"class":125,"line":268},[123,80188,80189],{"class":129},"const { uname, age } = obj\n",[19,80191,80192],{},"上方代码这样写等价于：",[19,80194,80195],{},"const uname等价于obj.uname",[19,80197,80198],{},"变量名可以重新改名：",[19,80200,80201],{},"const uname='red老师'",[19,80203,80204],{},"const user={",[19,80206,80207],{},"  uname:'pink老师',",[19,80209,80210],{},"  age:18",[19,80212,3545],{},[19,80214,80215],{},"const {uname,age}=user",[19,80217,80218],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80220,80221],{},"const {旧变量名：新变量名}=对象",[19,80223,80224],{},"const {uname:username,age}=user",[24425,80226,80228],{"id":80227},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80230,80231],{},[3929,80232],{"alt":118,"src":80233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24425,80235,80237],{"id":80236},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80239,80240],{},[3929,80241],{"alt":118,"src":80242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[113,80244,80246],{"className":55470,"code":80245,"language":55472,"meta":118,"style":118},"  \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",[120,80247,80248,80256,80261,80266,80271,80276,80281,80286,80291,80296,80300,80305,80310],{"__ignoreMap":118},[123,80249,80250,80252,80254],{"class":125,"line":126},[123,80251,54548],{"class":129},[123,80253,54218],{"class":53707},[123,80255,53714],{"class":129},[123,80257,80258],{"class":125,"line":140},[123,80259,80260],{"class":129},"    const pig = {\n",[123,80262,80263],{"class":125,"line":156},[123,80264,80265],{"class":129},"      name: '佩奇',\n",[123,80267,80268],{"class":125,"line":168},[123,80269,80270],{"class":129},"      family: {\n",[123,80272,80273],{"class":125,"line":268},[123,80274,80275],{"class":129},"        mother: '猪妈妈',\n",[123,80277,80278],{"class":125,"line":291},[123,80279,80280],{"class":129},"        father: '猪爸爸',\n",[123,80282,80283],{"class":125,"line":300},[123,80284,80285],{"class":129},"        sister: '乔治'\n",[123,80287,80288],{"class":125,"line":305},[123,80289,80290],{"class":129},"      },\n",[123,80292,80293],{"class":125,"line":316},[123,80294,80295],{"class":129},"      age: 6\n",[123,80297,80298],{"class":125,"line":673},[123,80299,4631],{"class":129},[123,80301,80302],{"class":125,"line":692},[123,80303,80304],{"class":129},"    \u002F\u002F 多级对象解构\n",[123,80306,80307],{"class":125,"line":713},[123,80308,80309],{"class":129},"    const { name, family: { mother, father, sister }, age } = pig\n",[123,80311,80312,80314,80316],{"class":125,"line":718},[123,80313,54820],{"class":129},[123,80315,54218],{"class":53707},[123,80317,53714],{"class":129},[19,80319,80320],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[113,80322,80325],{"className":80323,"code":80324,"language":78847,"meta":118,"style":118},"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",[120,80326,80327,80332,80343,80355,80367,80376,80380,80391,80403,80413,80418,80422,80432,80443,80452,80456,80460,80471,80482,80491,80495,80500],{"__ignoreMap":118},[123,80328,80329],{"class":125,"line":126},[123,80330,80331],{"class":2673},"    \u002F\u002F 这是后台传递过来的数据\n",[123,80333,80334,80336,80339,80341],{"class":125,"line":140},[123,80335,13653],{"class":133},[123,80337,80338],{"class":129}," msg ",[123,80340,134],{"class":133},[123,80342,137],{"class":129},[123,80344,80345,80348,80350,80353],{"class":125,"line":156},[123,80346,80347],{"class":143},"      \"code\"",[123,80349,3460],{"class":133},[123,80351,80352],{"class":164}," 200",[123,80354,153],{"class":129},[123,80356,80357,80360,80362,80365],{"class":125,"line":168},[123,80358,80359],{"class":143},"      \"msg\"",[123,80361,3460],{"class":133},[123,80363,80364],{"class":143}," \"获取新闻列表成功\"",[123,80366,153],{"class":129},[123,80368,80369,80372,80374],{"class":125,"line":268},[123,80370,80371],{"class":143},"      \"data\"",[123,80373,3460],{"class":133},[123,80375,1587],{"class":129},[123,80377,80378],{"class":125,"line":291},[123,80379,4953],{"class":129},[123,80381,80382,80385,80387,80389],{"class":125,"line":300},[123,80383,80384],{"class":143},"          \"id\"",[123,80386,3460],{"class":133},[123,80388,27540],{"class":164},[123,80390,153],{"class":129},[123,80392,80393,80396,80398,80401],{"class":125,"line":305},[123,80394,80395],{"class":143},"          \"title\"",[123,80397,3460],{"class":133},[123,80399,80400],{"class":143}," \"5G商用自己，三大运用商收入下降\"",[123,80402,153],{"class":129},[123,80404,80405,80408,80410],{"class":125,"line":316},[123,80406,80407],{"class":143},"          \"count\"",[123,80409,3460],{"class":133},[123,80411,80412],{"class":164}," 58\n",[123,80414,80415],{"class":125,"line":673},[123,80416,80417],{"class":129},"        },\n",[123,80419,80420],{"class":125,"line":692},[123,80421,4953],{"class":129},[123,80423,80424,80426,80428,80430],{"class":125,"line":713},[123,80425,80384],{"class":143},[123,80427,3460],{"class":133},[123,80429,17185],{"class":164},[123,80431,153],{"class":129},[123,80433,80434,80436,80438,80441],{"class":125,"line":718},[123,80435,80395],{"class":143},[123,80437,3460],{"class":133},[123,80439,80440],{"class":143}," \"国际媒体头条速览\"",[123,80442,153],{"class":129},[123,80444,80445,80447,80449],{"class":125,"line":1138},[123,80446,80407],{"class":143},[123,80448,3460],{"class":133},[123,80450,80451],{"class":164}," 56\n",[123,80453,80454],{"class":125,"line":1429},[123,80455,80417],{"class":129},[123,80457,80458],{"class":125,"line":1439},[123,80459,4953],{"class":129},[123,80461,80462,80464,80466,80469],{"class":125,"line":1444},[123,80463,80384],{"class":143},[123,80465,3460],{"class":133},[123,80467,80468],{"class":164}," 3",[123,80470,153],{"class":129},[123,80472,80473,80475,80477,80480],{"class":125,"line":1453},[123,80474,80395],{"class":143},[123,80476,3460],{"class":133},[123,80478,80479],{"class":143}," \"乌克兰和俄罗斯持续冲突\"",[123,80481,153],{"class":129},[123,80483,80484,80486,80488],{"class":125,"line":1458},[123,80485,80407],{"class":143},[123,80487,3460],{"class":133},[123,80489,80490],{"class":164}," 1669\n",[123,80492,80493],{"class":125,"line":1476},[123,80494,80417],{"class":129},[123,80496,80497],{"class":125,"line":1494},[123,80498,80499],{"class":129},"      ]\n",[123,80501,80502],{"class":125,"line":1499},[123,80503,4631],{"class":129},[19,80505,80506],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80508,80509],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80511,80512],{},"\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,80514,80515],{},"function({data}) {",[19,80517,80518],{},"console.log(data)",[19,80520,3545],{},[19,80522,80523],{},"render(msg)",[19,80525,80526],{},"实参传递给形参的时候解构了",[19,80528,80529],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80531,80532],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80534,80535],{},"function render({data:mydata}) {",[19,80537,80538],{},"  console.log(data)",[19,80540,3545],{},[2587,80542,80544],{"id":80543},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80546,80547],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,80549,80550],{},[29,80551,80552],{},"如果对一个数组进行遍历，有两种方式：",[19,80554,80555],{},"①法1",[19,80557,80558],{},"const arr=[1,2,3]",[19,80560,80561],{},"arr.map(function(item,index) {",[19,80563,80564],{},"  console.log(item)",[19,80566,54867],{},[19,80568,80569],{},[3929,80570],{"alt":118,"src":80571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80573,80574],{},"②法2",[19,80576,80577],{},"const str='pink'",[19,80579,80580],{},"[1,2,3].map(function(item,index) {",[19,80582,80583],{},"console.log(item)",[19,80585,54867],{},[19,80587,80588],{},[3929,80589],{"alt":118,"src":80590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80592,80593],{},"此时会报错",[19,80595,80596],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80598,80583],{},[19,80600,54867],{},[19,80602,80603],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80605,80607],{"id":80606},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80609,80610],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80612,80613],{},"可以理解为加强版的for循环",[19,80615,80616],{},[3929,80617],{"alt":118,"src":80618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80620,80621],{},"里边不写return，不返回数组，只遍历不返回",[19,80623,80624],{},"map是返回数组",[19,80626,80627],{},"forEach主要用于遍历数组对象",[113,80629,80631],{"className":55470,"code":80630,"language":55472,"meta":118,"style":118},"  \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",[120,80632,80633,80641,80646,80651,80656,80661,80665,80670],{"__ignoreMap":118},[123,80634,80635,80637,80639],{"class":125,"line":126},[123,80636,54548],{"class":129},[123,80638,54218],{"class":53707},[123,80640,53714],{"class":129},[123,80642,80643],{"class":125,"line":140},[123,80644,80645],{"class":129},"    const arr = ['red', 'green', 'pink']\n",[123,80647,80648],{"class":125,"line":156},[123,80649,80650],{"class":129},"    const result = arr.forEach(function (item, index) {\n",[123,80652,80653],{"class":125,"line":168},[123,80654,80655],{"class":129},"      console.log(item)\n",[123,80657,80658],{"class":125,"line":268},[123,80659,80660],{"class":129},"      console.log(index)\n",[123,80662,80663],{"class":125,"line":291},[123,80664,35872],{"class":129},[123,80666,80667],{"class":125,"line":300},[123,80668,80669],{"class":129},"    console.log(result)\n",[123,80671,80672,80674,80676],{"class":125,"line":305},[123,80673,54820],{"class":129},[123,80675,54218],{"class":53707},[123,80677,53714],{"class":129},[19,80679,80680],{},[3929,80681],{"alt":118,"src":80682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80684,80686],{"id":80685},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80688,80689],{},[3929,80690],{"alt":118,"src":80691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80693,80694],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[113,80696,80698],{"className":55470,"code":80697,"language":55472,"meta":118,"style":118},"\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",[120,80699,80700,80708,80716,80721,80726,80730,80734,80739,80743,80748,80756],{"__ignoreMap":118},[123,80701,80702,80704,80706],{"class":125,"line":126},[123,80703,3509],{"class":129},[123,80705,54205],{"class":53707},[123,80707,53714],{"class":129},[123,80709,80710,80712,80714],{"class":125,"line":140},[123,80711,54548],{"class":129},[123,80713,54218],{"class":53707},[123,80715,53714],{"class":129},[123,80717,80718],{"class":125,"line":156},[123,80719,80720],{"class":129},"    const arr = [10, 20, 30]\n",[123,80722,80723],{"class":125,"line":168},[123,80724,80725],{"class":129},"    const newArr = arr.filter(function (item, index) {\n",[123,80727,80728],{"class":125,"line":268},[123,80729,80655],{"class":129},[123,80731,80732],{"class":125,"line":291},[123,80733,80660],{"class":129},[123,80735,80736],{"class":125,"line":300},[123,80737,80738],{"class":129},"      return item >= 20\n",[123,80740,80741],{"class":125,"line":305},[123,80742,35872],{"class":129},[123,80744,80745],{"class":125,"line":316},[123,80746,80747],{"class":129},"    console.log(newArr)\n",[123,80749,80750,80752,80754],{"class":125,"line":673},[123,80751,54820],{"class":129},[123,80753,54218],{"class":53707},[123,80755,53714],{"class":129},[123,80757,80758,80760,80762],{"class":125,"line":692},[123,80759,54190],{"class":129},[123,80761,54205],{"class":53707},[123,80763,53714],{"class":129},[19,80765,80766],{},"这个也可以写成箭头函数：",[113,80768,80770],{"className":53040,"code":80769,"language":53042,"meta":118,"style":118},"const newArr = arr.filter(item => item >= 20)\n",[120,80771,80772],{"__ignoreMap":118},[123,80773,80774],{"class":125,"line":126},[123,80775,80769],{"class":129},[14,80777,80779],{"id":80778},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80781,80782],{},[3929,80783],{"alt":118,"src":80784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80786,80787],{},"步骤：",[19,80789,80790],{},"①：渲染页面模块",[3606,80792,80793,80796],{},[29,80794,80795],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80797,80798],{},"用forEach+字符串的形式",[19,80800,80801],{},"②：点击不同需求，显示不同页面内容",[3606,80803,80804,80807,80810,80813,80816],{},[29,80805,80806],{},"点击采取事件委托方式 .filter",[29,80808,80809],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80811,80812],{},"筛选条件是根据点击的 data-index 来判断",[29,80814,80815],{},"可以使用对象解构，把事件对象解构",[29,80817,80818],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[113,80820,80822],{"className":53040,"code":80821,"language":53042,"meta":118,"style":118},"\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",[120,80823,80824,80834,80848,80852,80860,80874,80894,80906,80914,80920,80930,80940,80950,80954,80958,80964,80977,80989,80999,81011,81015,81019,81026,81039,81051,81068,81086,81099,81103,81107,81119,81129,81133,81137,81144,81185,81212,81222,81226,81230,81238,81250,81254,81258,81266,81278,81290,81301,81305,81309,81318,81330,81341,81345,81349,81358,81370,81382,81386,81390,81397,81407,81419,81431,81446,81450,81454,81462,81478,81488,81498,81508,81520,81524,81528,81538,81549,81559,81563,81571,81579,81583,81591,81606,81632,81657,81682,81701,81709,81723,81728,81733,81738,81743,81748,81756,81764,81769,81780,81785,81795,81805,81815,81825,81829,81833,81842,81851,81860,81869,81873,81877,81886,81895,81904,81913,81917,81921,81930,81939,81948,81957,81961,81965,81974,81983,81992,82001,82005,82009,82018,82027,82036,82045,82049,82053,82062,82071,82080,82089,82093,82097,82106,82115,82123,82132,82136,82140,82144,82149,82161,82166,82178,82182,82199,82226,82235,82240,82250,82260,82269,82274,82279,82283,82288,82305,82309,82314,82322,82327,82354,82359,82379,82384,82396,82401,82406,82411,82422,82436,82473,82491,82524,82541,82565,82569,82574,82580,82584,82588,82592,82600,82608,82612],{"__ignoreMap":118},[123,80825,80826,80828,80830,80832],{"class":125,"line":126},[123,80827,53704],{"class":129},[123,80829,53708],{"class":53707},[123,80831,53711],{"class":337},[123,80833,53714],{"class":129},[123,80835,80836,80838,80840,80842,80844,80846],{"class":125,"line":140},[123,80837,3509],{"class":129},[123,80839,53042],{"class":53707},[123,80841,53723],{"class":337},[123,80843,134],{"class":129},[123,80845,53728],{"class":143},[123,80847,53714],{"class":129},[123,80849,80850],{"class":125,"line":156},[123,80851,232],{"emptyLinePlaceholder":231},[123,80853,80854,80856,80858],{"class":125,"line":168},[123,80855,3509],{"class":129},[123,80857,53741],{"class":53707},[123,80859,53714],{"class":129},[123,80861,80862,80864,80866,80868,80870,80872],{"class":125,"line":268},[123,80863,54548],{"class":129},[123,80865,53751],{"class":53707},[123,80867,53754],{"class":337},[123,80869,134],{"class":129},[123,80871,53759],{"class":143},[123,80873,53714],{"class":129},[123,80875,80876,80878,80880,80882,80884,80886,80888,80890,80892],{"class":125,"line":291},[123,80877,54548],{"class":129},[123,80879,53751],{"class":53707},[123,80881,17350],{"class":337},[123,80883,134],{"class":129},[123,80885,53798],{"class":143},[123,80887,53778],{"class":337},[123,80889,134],{"class":129},[123,80891,53805],{"class":143},[123,80893,53714],{"class":129},[123,80895,80896,80898,80900,80902,80904],{"class":125,"line":300},[123,80897,54548],{"class":129},[123,80899,642],{"class":53707},[123,80901,53816],{"class":129},[123,80903,642],{"class":53707},[123,80905,53714],{"class":129},[123,80907,80908,80910,80912],{"class":125,"line":305},[123,80909,54548],{"class":129},[123,80911,2526],{"class":53707},[123,80913,53714],{"class":129},[123,80915,80916,80918],{"class":125,"line":316},[123,80917,8836],{"class":53707},[123,80919,137],{"class":129},[123,80921,80922,80924,80926,80928],{"class":125,"line":673},[123,80923,57098],{"class":164},[123,80925,147],{"class":129},[123,80927,2799],{"class":164},[123,80929,3760],{"class":129},[123,80931,80932,80934,80936,80938],{"class":125,"line":692},[123,80933,57109],{"class":164},[123,80935,147],{"class":129},[123,80937,2799],{"class":164},[123,80939,3760],{"class":129},[123,80941,80942,80944,80946,80948],{"class":125,"line":713},[123,80943,74996],{"class":164},[123,80945,147],{"class":129},[123,80947,62907],{"class":164},[123,80949,3760],{"class":129},[123,80951,80952],{"class":125,"line":718},[123,80953,4631],{"class":129},[123,80955,80956],{"class":125,"line":1138},[123,80957,232],{"emptyLinePlaceholder":231},[123,80959,80960,80962],{"class":125,"line":1429},[123,80961,64525],{"class":337},[123,80963,137],{"class":129},[123,80965,80966,80968,80970,80973,80975],{"class":125,"line":1439},[123,80967,57174],{"class":164},[123,80969,147],{"class":129},[123,80971,80972],{"class":164},"990",[123,80974,53897],{"class":133},[123,80976,3760],{"class":129},[123,80978,80979,80981,80983,80985,80987],{"class":125,"line":1444},[123,80980,57109],{"class":164},[123,80982,147],{"class":129},[123,80984,2799],{"class":164},[123,80986,53961],{"class":164},[123,80988,3760],{"class":129},[123,80990,80991,80993,80995,80997],{"class":125,"line":1453},[123,80992,57412],{"class":164},[123,80994,147],{"class":129},[123,80996,53882],{"class":164},[123,80998,3760],{"class":129},[123,81000,81001,81004,81006,81009],{"class":125,"line":1458},[123,81002,81003],{"class":164},"      flex-wrap",[123,81005,147],{"class":129},[123,81007,81008],{"class":164},"wrap",[123,81010,3760],{"class":129},[123,81012,81013],{"class":125,"line":1476},[123,81014,4631],{"class":129},[123,81016,81017],{"class":125,"line":1494},[123,81018,232],{"emptyLinePlaceholder":231},[123,81020,81021,81024],{"class":125,"line":1499},[123,81022,81023],{"class":337},"    .item",[123,81025,137],{"class":129},[123,81027,81028,81030,81032,81035,81037],{"class":125,"line":1517},[123,81029,57174],{"class":164},[123,81031,147],{"class":129},[123,81033,81034],{"class":164},"240",[123,81036,53897],{"class":133},[123,81038,3760],{"class":129},[123,81040,81041,81043,81045,81047,81049],{"class":125,"line":1534},[123,81042,64402],{"class":164},[123,81044,147],{"class":129},[123,81046,2193],{"class":164},[123,81048,53897],{"class":133},[123,81050,3760],{"class":129},[123,81052,81053,81055,81057,81059,81061,81064,81066],{"class":125,"line":1539},[123,81054,57098],{"class":164},[123,81056,147],{"class":129},[123,81058,3302],{"class":164},[123,81060,53897],{"class":133},[123,81062,81063],{"class":164}," 30",[123,81065,53897],{"class":133},[123,81067,3760],{"class":129},[123,81069,81070,81072,81074,81076,81079,81082,81084],{"class":125,"line":2080},[123,81071,64262],{"class":164},[123,81073,147],{"class":129},[123,81075,30542],{"class":164},[123,81077,81078],{"class":164}," ease",[123,81080,81081],{"class":164}," .5",[123,81083,3297],{"class":133},[123,81085,3760],{"class":129},[123,81087,81088,81091,81093,81095,81097],{"class":125,"line":2097},[123,81089,81090],{"class":164},"      margin-bottom",[123,81092,147],{"class":129},[123,81094,3302],{"class":164},[123,81096,53897],{"class":133},[123,81098,3760],{"class":129},[123,81100,81101],{"class":125,"line":2114},[123,81102,4631],{"class":129},[123,81104,81105],{"class":125,"line":2125},[123,81106,232],{"emptyLinePlaceholder":231},[123,81108,81109,81112,81114,81117],{"class":125,"line":2130},[123,81110,81111],{"class":337},"    .item:nth-child",[123,81113,1315],{"class":129},[123,81115,81116],{"class":164},"4n",[123,81118,14873],{"class":129},[123,81120,81121,81123,81125,81127],{"class":125,"line":5033},[123,81122,64402],{"class":164},[123,81124,147],{"class":129},[123,81126,2799],{"class":164},[123,81128,3760],{"class":129},[123,81130,81131],{"class":125,"line":5041},[123,81132,4631],{"class":129},[123,81134,81135],{"class":125,"line":5046},[123,81136,232],{"emptyLinePlaceholder":231},[123,81138,81139,81142],{"class":125,"line":5052},[123,81140,81141],{"class":337},"    .item:hover",[123,81143,137],{"class":129},[123,81145,81146,81149,81151,81153,81155,81157,81159,81161,81163,81166,81168,81170,81172,81174,81176,81178,81180,81183],{"class":125,"line":5058},[123,81147,81148],{"class":164},"      box-shadow",[123,81150,147],{"class":129},[123,81152,2799],{"class":164},[123,81154,53897],{"class":133},[123,81156,6532],{"class":164},[123,81158,53897],{"class":133},[123,81160,4592],{"class":164},[123,81162,53897],{"class":133},[123,81164,81165],{"class":164}," rgba",[123,81167,1315],{"class":129},[123,81169,2799],{"class":164},[123,81171,251],{"class":129},[123,81173,2799],{"class":164},[123,81175,251],{"class":129},[123,81177,2799],{"class":164},[123,81179,251],{"class":129},[123,81181,81182],{"class":164},".2",[123,81184,5161],{"class":129},[123,81186,81187,81190,81192,81195,81197,81199,81201,81204,81206,81208,81210],{"class":125,"line":5063},[123,81188,81189],{"class":164},"      transform",[123,81191,147],{"class":129},[123,81193,81194],{"class":164},"translate3d",[123,81196,1315],{"class":129},[123,81198,2799],{"class":164},[123,81200,251],{"class":129},[123,81202,81203],{"class":164},"-4",[123,81205,53897],{"class":133},[123,81207,251],{"class":129},[123,81209,2799],{"class":164},[123,81211,5161],{"class":129},[123,81213,81214,81216,81218,81220],{"class":125,"line":10380},[123,81215,64427],{"class":164},[123,81217,147],{"class":129},[123,81219,64432],{"class":164},[123,81221,3760],{"class":129},[123,81223,81224],{"class":125,"line":10404},[123,81225,4631],{"class":129},[123,81227,81228],{"class":125,"line":10409},[123,81229,232],{"emptyLinePlaceholder":231},[123,81231,81232,81234,81236],{"class":125,"line":10415},[123,81233,81023],{"class":337},[123,81235,58017],{"class":53707},[123,81237,137],{"class":129},[123,81239,81240,81242,81244,81246,81248],{"class":125,"line":10442},[123,81241,57174],{"class":164},[123,81243,147],{"class":129},[123,81245,259],{"class":164},[123,81247,2935],{"class":133},[123,81249,3760],{"class":129},[123,81251,81252],{"class":125,"line":10447},[123,81253,4631],{"class":129},[123,81255,81256],{"class":125,"line":10453},[123,81257,232],{"emptyLinePlaceholder":231},[123,81259,81260,81262,81264],{"class":125,"line":10465},[123,81261,81023],{"class":337},[123,81263,64706],{"class":337},[123,81265,137],{"class":129},[123,81267,81268,81270,81272,81274,81276],{"class":125,"line":10477},[123,81269,57325],{"class":164},[123,81271,147],{"class":129},[123,81273,3252],{"class":164},[123,81275,53897],{"class":133},[123,81277,3760],{"class":129},[123,81279,81280,81282,81284,81286,81288],{"class":125,"line":10489},[123,81281,81090],{"class":164},[123,81283,147],{"class":129},[123,81285,2193],{"class":164},[123,81287,53897],{"class":133},[123,81289,3760],{"class":129},[123,81291,81292,81294,81296,81299],{"class":125,"line":12148},[123,81293,59818],{"class":164},[123,81295,147],{"class":129},[123,81297,81298],{"class":164},"#666",[123,81300,3760],{"class":129},[123,81302,81303],{"class":125,"line":12173},[123,81304,4631],{"class":129},[123,81306,81307],{"class":125,"line":12196},[123,81308,232],{"emptyLinePlaceholder":231},[123,81310,81311,81313,81316],{"class":125,"line":12220},[123,81312,81023],{"class":337},[123,81314,81315],{"class":337}," .price",[123,81317,137],{"class":129},[123,81319,81320,81322,81324,81326,81328],{"class":125,"line":12225},[123,81321,57325],{"class":164},[123,81323,147],{"class":129},[123,81325,3352],{"class":164},[123,81327,53897],{"class":133},[123,81329,3760],{"class":129},[123,81331,81332,81334,81336,81339],{"class":125,"line":12230},[123,81333,59818],{"class":164},[123,81335,147],{"class":129},[123,81337,81338],{"class":164},"firebrick",[123,81340,3760],{"class":129},[123,81342,81343],{"class":125,"line":12235},[123,81344,4631],{"class":129},[123,81346,81347],{"class":125,"line":12244},[123,81348,232],{"emptyLinePlaceholder":231},[123,81350,81351,81353,81356],{"class":125,"line":12249},[123,81352,81023],{"class":337},[123,81354,81355],{"class":337}," .price::before",[123,81357,137],{"class":129},[123,81359,81360,81363,81365,81368],{"class":125,"line":12255},[123,81361,81362],{"class":164},"      content",[123,81364,147],{"class":129},[123,81366,81367],{"class":143},"'￥'",[123,81369,3760],{"class":129},[123,81371,81372,81374,81376,81378,81380],{"class":125,"line":12276},[123,81373,57325],{"class":164},[123,81375,147],{"class":129},[123,81377,3152],{"class":164},[123,81379,53897],{"class":133},[123,81381,3760],{"class":129},[123,81383,81384],{"class":125,"line":12282},[123,81385,4631],{"class":129},[123,81387,81388],{"class":125,"line":12296},[123,81389,232],{"emptyLinePlaceholder":231},[123,81391,81392,81395],{"class":125,"line":12302},[123,81393,81394],{"class":337},"    .filter",[123,81396,137],{"class":129},[123,81398,81399,81401,81403,81405],{"class":125,"line":12329},[123,81400,57412],{"class":164},[123,81402,147],{"class":129},[123,81404,53882],{"class":164},[123,81406,3760],{"class":129},[123,81408,81409,81411,81413,81415,81417],{"class":125,"line":12338},[123,81410,57174],{"class":164},[123,81412,147],{"class":129},[123,81414,80972],{"class":164},[123,81416,53897],{"class":133},[123,81418,3760],{"class":129},[123,81420,81421,81423,81425,81427,81429],{"class":125,"line":12344},[123,81422,57109],{"class":164},[123,81424,147],{"class":129},[123,81426,2799],{"class":164},[123,81428,53961],{"class":164},[123,81430,3760],{"class":129},[123,81432,81433,81435,81437,81439,81441,81443],{"class":125,"line":12352},[123,81434,57098],{"class":164},[123,81436,147],{"class":129},[123,81438,3258],{"class":164},[123,81440,53897],{"class":133},[123,81442,81063],{"class":164},[123,81444,81445],{"class":133},"px\n",[123,81447,81448],{"class":125,"line":12357},[123,81449,4631],{"class":129},[123,81451,81452],{"class":125,"line":19032},[123,81453,232],{"emptyLinePlaceholder":231},[123,81455,81456,81458,81460],{"class":125,"line":19038},[123,81457,81394],{"class":337},[123,81459,3865],{"class":53707},[123,81461,137],{"class":129},[123,81463,81464,81466,81468,81470,81472,81474,81476],{"class":125,"line":19061},[123,81465,57098],{"class":164},[123,81467,147],{"class":129},[123,81469,2193],{"class":164},[123,81471,53897],{"class":133},[123,81473,11382],{"class":164},[123,81475,53897],{"class":133},[123,81477,3760],{"class":129},[123,81479,81480,81482,81484,81486],{"class":125,"line":19067},[123,81481,64123],{"class":164},[123,81483,147],{"class":129},[123,81485,64220],{"class":164},[123,81487,3760],{"class":129},[123,81489,81490,81492,81494,81496],{"class":125,"line":19090},[123,81491,59818],{"class":164},[123,81493,147],{"class":129},[123,81495,81298],{"class":164},[123,81497,3760],{"class":129},[123,81499,81500,81502,81504,81506],{"class":125,"line":19104},[123,81501,66371],{"class":164},[123,81503,147],{"class":129},[123,81505,57140],{"class":164},[123,81507,3760],{"class":129},[123,81509,81510,81512,81514,81516,81518],{"class":125,"line":19124},[123,81511,64152],{"class":164},[123,81513,147],{"class":129},[123,81515,3302],{"class":164},[123,81517,53897],{"class":133},[123,81519,3760],{"class":129},[123,81521,81522],{"class":125,"line":19130},[123,81523,4631],{"class":129},[123,81525,81526],{"class":125,"line":19141},[123,81527,232],{"emptyLinePlaceholder":231},[123,81529,81530,81532,81534,81536],{"class":125,"line":19164},[123,81531,81394],{"class":337},[123,81533,3865],{"class":53707},[123,81535,64302],{"class":337},[123,81537,137],{"class":129},[123,81539,81540,81542,81544,81547],{"class":125,"line":19186},[123,81541,57287],{"class":164},[123,81543,147],{"class":129},[123,81545,81546],{"class":164},"#05943c",[123,81548,3760],{"class":129},[123,81550,81551,81553,81555,81557],{"class":125,"line":19191},[123,81552,59818],{"class":164},[123,81554,147],{"class":129},[123,81556,63244],{"class":164},[123,81558,3760],{"class":129},[123,81560,81561],{"class":125,"line":19197},[123,81562,4631],{"class":129},[123,81564,81565,81567,81569],{"class":125,"line":19211},[123,81566,54820],{"class":129},[123,81568,2526],{"class":53707},[123,81570,53714],{"class":129},[123,81572,81573,81575,81577],{"class":125,"line":19224},[123,81574,54190],{"class":129},[123,81576,53741],{"class":53707},[123,81578,53714],{"class":129},[123,81580,81581],{"class":125,"line":19229},[123,81582,232],{"emptyLinePlaceholder":231},[123,81584,81585,81587,81589],{"class":125,"line":19243},[123,81586,3509],{"class":129},[123,81588,54205],{"class":53707},[123,81590,53714],{"class":129},[123,81592,81593,81595,81597,81599,81601,81604],{"class":125,"line":19248},[123,81594,54548],{"class":129},[123,81596,54016],{"class":53707},[123,81598,55889],{"class":337},[123,81600,134],{"class":129},[123,81602,81603],{"class":143},"\"filter\"",[123,81605,53714],{"class":129},[123,81607,81608,81610,81612,81614,81616,81618,81621,81623,81625,81628,81630],{"class":125,"line":19254},[123,81609,53748],{"class":129},[123,81611,2846],{"class":53707},[123,81613,63459],{"class":337},[123,81615,134],{"class":129},[123,81617,63464],{"class":143},[123,81619,81620],{"class":337}," data-index",[123,81622,134],{"class":129},[123,81624,6118],{"class":143},[123,81626,81627],{"class":129},">0-100元\u003C\u002F",[123,81629,2846],{"class":53707},[123,81631,53714],{"class":129},[123,81633,81634,81636,81638,81640,81642,81644,81646,81648,81650,81653,81655],{"class":125,"line":19259},[123,81635,53748],{"class":129},[123,81637,2846],{"class":53707},[123,81639,63459],{"class":337},[123,81641,134],{"class":129},[123,81643,63464],{"class":143},[123,81645,81620],{"class":337},[123,81647,134],{"class":129},[123,81649,6141],{"class":143},[123,81651,81652],{"class":129},">100-300元\u003C\u002F",[123,81654,2846],{"class":53707},[123,81656,53714],{"class":129},[123,81658,81659,81661,81663,81665,81667,81669,81671,81673,81675,81678,81680],{"class":125,"line":19273},[123,81660,53748],{"class":129},[123,81662,2846],{"class":53707},[123,81664,63459],{"class":337},[123,81666,134],{"class":129},[123,81668,63464],{"class":143},[123,81670,81620],{"class":337},[123,81672,134],{"class":129},[123,81674,6154],{"class":143},[123,81676,81677],{"class":129},">300元以上\u003C\u002F",[123,81679,2846],{"class":53707},[123,81681,53714],{"class":129},[123,81683,81684,81686,81688,81690,81692,81694,81697,81699],{"class":125,"line":19278},[123,81685,53748],{"class":129},[123,81687,2846],{"class":53707},[123,81689,63459],{"class":337},[123,81691,134],{"class":129},[123,81693,63464],{"class":143},[123,81695,81696],{"class":129},">全部区间\u003C\u002F",[123,81698,2846],{"class":53707},[123,81700,53714],{"class":129},[123,81702,81703,81705,81707],{"class":125,"line":19283},[123,81704,54820],{"class":129},[123,81706,54016],{"class":53707},[123,81708,53714],{"class":129},[123,81710,81711,81713,81715,81717,81719,81721],{"class":125,"line":19297},[123,81712,54548],{"class":129},[123,81714,54016],{"class":53707},[123,81716,55889],{"class":337},[123,81718,134],{"class":129},[123,81720,65010],{"class":143},[123,81722,53714],{"class":129},[123,81724,81725],{"class":125,"line":19309},[123,81726,81727],{"class":2673},"    \u003C!-- \u003Cdiv class=\"item\">\n",[123,81729,81730],{"class":125,"line":19314},[123,81731,81732],{"class":2673},"      \u003Cimg src=\"\" alt=\"\">\n",[123,81734,81735],{"class":125,"line":19327},[123,81736,81737],{"class":2673},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[123,81739,81740],{"class":125,"line":19332},[123,81741,81742],{"class":2673},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[123,81744,81745],{"class":125,"line":19337},[123,81746,81747],{"class":2673},"    \u003C\u002Fdiv> -->\n",[123,81749,81750,81752,81754],{"class":125,"line":19342},[123,81751,54820],{"class":129},[123,81753,54016],{"class":53707},[123,81755,53714],{"class":129},[123,81757,81758,81760,81762],{"class":125,"line":19355},[123,81759,54548],{"class":129},[123,81761,54218],{"class":53707},[123,81763,53714],{"class":129},[123,81765,81766],{"class":125,"line":19360},[123,81767,81768],{"class":2673},"    \u002F\u002F 2. 初始化数据\n",[123,81770,81771,81773,81776,81778],{"class":125,"line":35045},[123,81772,13653],{"class":133},[123,81774,81775],{"class":164}," goodsList",[123,81777,15995],{"class":133},[123,81779,1587],{"class":129},[123,81781,81782],{"class":125,"line":35051},[123,81783,81784],{"class":129},"      {\n",[123,81786,81787,81790,81793],{"class":125,"line":35057},[123,81788,81789],{"class":129},"        id: ",[123,81791,81792],{"class":143},"'4001172'",[123,81794,153],{"class":129},[123,81796,81797,81800,81803],{"class":125,"line":35063},[123,81798,81799],{"class":129},"        name: ",[123,81801,81802],{"class":143},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[123,81804,153],{"class":129},[123,81806,81807,81810,81813],{"class":125,"line":35069},[123,81808,81809],{"class":129},"        price: ",[123,81811,81812],{"class":143},"'289.00'",[123,81814,153],{"class":129},[123,81816,81817,81820,81823],{"class":125,"line":35080},[123,81818,81819],{"class":129},"        picture: ",[123,81821,81822],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[123,81824,153],{"class":129},[123,81826,81827],{"class":125,"line":35086},[123,81828,80290],{"class":129},[123,81830,81831],{"class":125,"line":35106},[123,81832,81784],{"class":129},[123,81834,81835,81837,81840],{"class":125,"line":35112},[123,81836,81789],{"class":129},[123,81838,81839],{"class":143},"'4001594'",[123,81841,153],{"class":129},[123,81843,81844,81846,81849],{"class":125,"line":35123},[123,81845,81799],{"class":129},[123,81847,81848],{"class":143},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[123,81850,153],{"class":129},[123,81852,81853,81855,81858],{"class":125,"line":35129},[123,81854,81809],{"class":129},[123,81856,81857],{"class":143},"'288.00'",[123,81859,153],{"class":129},[123,81861,81862,81864,81867],{"class":125,"line":35135},[123,81863,81819],{"class":129},[123,81865,81866],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[123,81868,153],{"class":129},[123,81870,81871],{"class":125,"line":35141},[123,81872,80290],{"class":129},[123,81874,81875],{"class":125,"line":35147},[123,81876,81784],{"class":129},[123,81878,81879,81881,81884],{"class":125,"line":35153},[123,81880,81789],{"class":129},[123,81882,81883],{"class":143},"'4001009'",[123,81885,153],{"class":129},[123,81887,81888,81890,81893],{"class":125,"line":35159},[123,81889,81799],{"class":129},[123,81891,81892],{"class":143},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[123,81894,153],{"class":129},[123,81896,81897,81899,81902],{"class":125,"line":35165},[123,81898,81809],{"class":129},[123,81900,81901],{"class":143},"'109.00'",[123,81903,153],{"class":129},[123,81905,81906,81908,81911],{"class":125,"line":35185},[123,81907,81819],{"class":129},[123,81909,81910],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[123,81912,153],{"class":129},[123,81914,81915],{"class":125,"line":35191},[123,81916,80290],{"class":129},[123,81918,81919],{"class":125,"line":35207},[123,81920,81784],{"class":129},[123,81922,81923,81925,81928],{"class":125,"line":35213},[123,81924,81789],{"class":129},[123,81926,81927],{"class":143},"'4001874'",[123,81929,153],{"class":129},[123,81931,81932,81934,81937],{"class":125,"line":35227},[123,81933,81799],{"class":129},[123,81935,81936],{"class":143},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[123,81938,153],{"class":129},[123,81940,81941,81943,81946],{"class":125,"line":35233},[123,81942,81809],{"class":129},[123,81944,81945],{"class":143},"'488.00'",[123,81947,153],{"class":129},[123,81949,81950,81952,81955],{"class":125,"line":35248},[123,81951,81819],{"class":129},[123,81953,81954],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[123,81956,153],{"class":129},[123,81958,81959],{"class":125,"line":35254},[123,81960,80290],{"class":129},[123,81962,81963],{"class":125,"line":35263},[123,81964,81784],{"class":129},[123,81966,81967,81969,81972],{"class":125,"line":35269},[123,81968,81789],{"class":129},[123,81970,81971],{"class":143},"'4001649'",[123,81973,153],{"class":129},[123,81975,81976,81978,81981],{"class":125,"line":35278},[123,81977,81799],{"class":129},[123,81979,81980],{"class":143},"'大师监制龙泉青瓷茶叶罐'",[123,81982,153],{"class":129},[123,81984,81985,81987,81990],{"class":125,"line":35284},[123,81986,81809],{"class":129},[123,81988,81989],{"class":143},"'139.00'",[123,81991,153],{"class":129},[123,81993,81994,81996,81999],{"class":125,"line":35290},[123,81995,81819],{"class":129},[123,81997,81998],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[123,82000,153],{"class":129},[123,82002,82003],{"class":125,"line":35299},[123,82004,80290],{"class":129},[123,82006,82007],{"class":125,"line":35305},[123,82008,81784],{"class":129},[123,82010,82011,82013,82016],{"class":125,"line":35316},[123,82012,81789],{"class":129},[123,82014,82015],{"class":143},"'3997185'",[123,82017,153],{"class":129},[123,82019,82020,82022,82025],{"class":125,"line":35322},[123,82021,81799],{"class":129},[123,82023,82024],{"class":143},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[123,82026,153],{"class":129},[123,82028,82029,82031,82034],{"class":125,"line":35341},[123,82030,81809],{"class":129},[123,82032,82033],{"class":143},"'108.00'",[123,82035,153],{"class":129},[123,82037,82038,82040,82043],{"class":125,"line":35347},[123,82039,81819],{"class":129},[123,82041,82042],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[123,82044,153],{"class":129},[123,82046,82047],{"class":125,"line":35358},[123,82048,80290],{"class":129},[123,82050,82051],{"class":125,"line":35364},[123,82052,81784],{"class":129},[123,82054,82055,82057,82060],{"class":125,"line":35384},[123,82056,81789],{"class":129},[123,82058,82059],{"class":143},"'3997403'",[123,82061,153],{"class":129},[123,82063,82064,82066,82069],{"class":125,"line":35400},[123,82065,81799],{"class":129},[123,82067,82068],{"class":143},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[123,82070,153],{"class":129},[123,82072,82073,82075,82078],{"class":125,"line":35406},[123,82074,81809],{"class":129},[123,82076,82077],{"class":143},"'100.00'",[123,82079,153],{"class":129},[123,82081,82082,82084,82087],{"class":125,"line":35420},[123,82083,81819],{"class":129},[123,82085,82086],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[123,82088,153],{"class":129},[123,82090,82091],{"class":125,"line":35426},[123,82092,80290],{"class":129},[123,82094,82095],{"class":125,"line":35432},[123,82096,81784],{"class":129},[123,82098,82099,82101,82104],{"class":125,"line":35443},[123,82100,81789],{"class":129},[123,82102,82103],{"class":143},"'3998274'",[123,82105,153],{"class":129},[123,82107,82108,82110,82113],{"class":125,"line":35449},[123,82109,81799],{"class":129},[123,82111,82112],{"class":143},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[123,82114,153],{"class":129},[123,82116,82117,82119,82121],{"class":125,"line":35455},[123,82118,81809],{"class":129},[123,82120,81989],{"class":143},[123,82122,153],{"class":129},[123,82124,82125,82127,82130],{"class":125,"line":35465},[123,82126,81819],{"class":129},[123,82128,82129],{"class":143},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[123,82131,153],{"class":129},[123,82133,82134],{"class":125,"line":35471},[123,82135,80290],{"class":129},[123,82137,82138],{"class":125,"line":35482},[123,82139,55512],{"class":129},[123,82141,82142],{"class":125,"line":35488},[123,82143,232],{"emptyLinePlaceholder":231},[123,82145,82146],{"class":125,"line":35498},[123,82147,82148],{"class":2673},"    \u002F\u002F 1.渲染函数\n",[123,82150,82151,82153,82155,82157,82159],{"class":125,"line":35503},[123,82152,72484],{"class":133},[123,82154,72487],{"class":337},[123,82156,1315],{"class":129},[123,82158,6319],{"class":279},[123,82160,14873],{"class":129},[123,82162,82163],{"class":125,"line":35509},[123,82164,82165],{"class":2673},"      \u002F\u002F 声明空字符串\n",[123,82167,82168,82171,82174,82176],{"class":125,"line":35558},[123,82169,82170],{"class":133},"      let",[123,82172,82173],{"class":129}," str ",[123,82175,134],{"class":133},[123,82177,72504],{"class":143},[123,82179,82180],{"class":125,"line":35605},[123,82181,72509],{"class":2673},[123,82183,82184,82186,82189,82191,82194,82197],{"class":125,"line":35610},[123,82185,60409],{"class":129},[123,82187,82188],{"class":337},"forEach",[123,82190,1315],{"class":129},[123,82192,82193],{"class":279},"item",[123,82195,82196],{"class":133}," =>",[123,82198,137],{"class":129},[123,82200,82201,82203,82206,82208,82210,82213,82215,82218,82221,82223],{"class":125,"line":35616},[123,82202,63672],{"class":133},[123,82204,82205],{"class":129}," { ",[123,82207,663],{"class":164},[123,82209,251],{"class":129},[123,82211,82212],{"class":164},"price",[123,82214,251],{"class":129},[123,82216,82217],{"class":164},"picture",[123,82219,82220],{"class":129}," } ",[123,82222,134],{"class":133},[123,82224,82225],{"class":129}," item\n",[123,82227,82228,82231,82233],{"class":125,"line":35635},[123,82229,82230],{"class":129},"        str ",[123,82232,11909],{"class":133},[123,82234,72568],{"class":143},[123,82236,82237],{"class":125,"line":35641},[123,82238,82239],{"class":143},"          \u003Cdiv class=\"item\">\n",[123,82241,82242,82245,82247],{"class":125,"line":35660},[123,82243,82244],{"class":143},"            \u003Cimg src=\"${",[123,82246,82217],{"class":129},[123,82248,82249],{"class":143},"}\" alt=\"\">\n",[123,82251,82252,82255,82257],{"class":125,"line":35666},[123,82253,82254],{"class":143},"            \u003Cp class=\"name\">${",[123,82256,663],{"class":129},[123,82258,82259],{"class":143},"}\u003C\u002Fp>\n",[123,82261,82262,82265,82267],{"class":125,"line":35672},[123,82263,82264],{"class":143},"            \u003Cp class=\"price\">${",[123,82266,82212],{"class":129},[123,82268,82259],{"class":143},[123,82270,82271],{"class":125,"line":35682},[123,82272,82273],{"class":143},"          \u003C\u002Fdiv>\n",[123,82275,82276],{"class":125,"line":35687},[123,82277,82278],{"class":143},"        `\n",[123,82280,82281],{"class":125,"line":35693},[123,82282,67216],{"class":129},[123,82284,82285],{"class":125,"line":35709},[123,82286,82287],{"class":2673},"      \u002F\u002F 追加给List\n",[123,82289,82290,82292,82294,82296,82299,82301,82303],{"class":125,"line":35754},[123,82291,58173],{"class":129},[123,82293,56802],{"class":337},[123,82295,1315],{"class":129},[123,82297,82298],{"class":143},"'.list'",[123,82300,76649],{"class":129},[123,82302,134],{"class":133},[123,82304,76385],{"class":129},[123,82306,82307],{"class":125,"line":35760},[123,82308,4631],{"class":129},[123,82310,82311],{"class":125,"line":35766},[123,82312,82313],{"class":2673},"    \u002F\u002F 页面一打开就需要渲染\n",[123,82315,82316,82319],{"class":125,"line":35772},[123,82317,82318],{"class":337},"    render",[123,82320,82321],{"class":129},"(goodsList)\n",[123,82323,82324],{"class":125,"line":35783},[123,82325,82326],{"class":2673},"    \u002F\u002F 2.过滤筛选\n",[123,82328,82329,82331,82333,82335,82338,82340,82342,82344,82346,82348,82350,82352],{"class":125,"line":35789},[123,82330,54810],{"class":129},[123,82332,56802],{"class":337},[123,82334,1315],{"class":129},[123,82336,82337],{"class":143},"'.filter'",[123,82339,33241],{"class":129},[123,82341,60215],{"class":337},[123,82343,1315],{"class":129},[123,82345,60220],{"class":143},[123,82347,251],{"class":129},[123,82349,2689],{"class":279},[123,82351,82196],{"class":133},[123,82353,137],{"class":129},[123,82355,82356],{"class":125,"line":35795},[123,82357,82358],{"class":2673},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[123,82360,82361,82363,82365,82368,82370,82372,82374,82376],{"class":125,"line":35801},[123,82362,60630],{"class":133},[123,82364,82205],{"class":129},[123,82366,82367],{"class":164},"tagName",[123,82369,251],{"class":129},[123,82371,33949],{"class":164},[123,82373,82220],{"class":129},[123,82375,134],{"class":133},[123,82377,82378],{"class":129}," e.target\n",[123,82380,82381],{"class":125,"line":35819},[123,82382,82383],{"class":2673},"      \u002F\u002F 判断\n",[123,82385,82386,82388,82390,82392,82394],{"class":125,"line":35833},[123,82387,56883],{"class":133},[123,82389,69435],{"class":129},[123,82391,56889],{"class":133},[123,82393,70657],{"class":143},[123,82395,14873],{"class":129},[123,82397,82398],{"class":125,"line":35842},[123,82399,82400],{"class":2673},"        \u002F\u002F console.log(11)\n",[123,82402,82403],{"class":125,"line":35851},[123,82404,82405],{"class":2673},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[123,82407,82408],{"class":125,"line":35860},[123,82409,82410],{"class":2673},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[123,82412,82413,82415,82417,82419],{"class":125,"line":35869},[123,82414,54235],{"class":133},[123,82416,54238],{"class":129},[123,82418,134],{"class":133},[123,82420,82421],{"class":129}," goodsList\n",[123,82423,82424,82426,82429,82431,82434],{"class":125,"line":35875},[123,82425,4940],{"class":133},[123,82427,82428],{"class":129}," (dataset.index ",[123,82430,56889],{"class":133},[123,82432,82433],{"class":143}," '1'",[123,82435,14873],{"class":129},[123,82437,82438,82441,82443,82446,82449,82451,82453,82455,82458,82460,82462,82465,82467,82469,82471],{"class":125,"line":35881},[123,82439,82440],{"class":129},"          arr ",[123,82442,134],{"class":133},[123,82444,82445],{"class":129}," goodsList.",[123,82447,82448],{"class":337},"filter",[123,82450,1315],{"class":129},[123,82452,82193],{"class":279},[123,82454,82196],{"class":133},[123,82456,82457],{"class":129}," item.price ",[123,82459,4164],{"class":133},[123,82461,6532],{"class":164},[123,82463,82464],{"class":133}," &&",[123,82466,82457],{"class":129},[123,82468,4053],{"class":133},[123,82470,8187],{"class":164},[123,82472,288],{"class":129},[123,82474,82475,82478,82480,82482,82484,82486,82489],{"class":125,"line":35889},[123,82476,82477],{"class":129},"        } ",[123,82479,4155],{"class":133},[123,82481,4158],{"class":133},[123,82483,82428],{"class":129},[123,82485,56889],{"class":133},[123,82487,82488],{"class":143}," '2'",[123,82490,14873],{"class":129},[123,82492,82493,82495,82497,82499,82501,82503,82505,82507,82509,82511,82513,82515,82517,82519,82522],{"class":125,"line":35894},[123,82494,82440],{"class":129},[123,82496,134],{"class":133},[123,82498,82445],{"class":129},[123,82500,82448],{"class":337},[123,82502,1315],{"class":129},[123,82504,82193],{"class":279},[123,82506,82196],{"class":133},[123,82508,82457],{"class":129},[123,82510,4164],{"class":133},[123,82512,8187],{"class":164},[123,82514,82464],{"class":133},[123,82516,82457],{"class":129},[123,82518,4053],{"class":133},[123,82520,82521],{"class":164}," 300",[123,82523,288],{"class":129},[123,82525,82526,82528,82530,82532,82534,82536,82539],{"class":125,"line":35900},[123,82527,82477],{"class":129},[123,82529,4155],{"class":133},[123,82531,4158],{"class":133},[123,82533,82428],{"class":129},[123,82535,56889],{"class":133},[123,82537,82538],{"class":143}," '3'",[123,82540,14873],{"class":129},[123,82542,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563],{"class":125,"line":35911},[123,82544,82440],{"class":129},[123,82546,134],{"class":133},[123,82548,82445],{"class":129},[123,82550,82448],{"class":337},[123,82552,1315],{"class":129},[123,82554,82193],{"class":279},[123,82556,82196],{"class":133},[123,82558,82457],{"class":129},[123,82560,4164],{"class":133},[123,82562,82521],{"class":164},[123,82564,288],{"class":129},[123,82566,82567],{"class":125,"line":35917},[123,82568,4972],{"class":129},[123,82570,82571],{"class":125,"line":35937},[123,82572,82573],{"class":2673},"        \u002F\u002F 渲染函数\n",[123,82575,82576,82578],{"class":125,"line":35943},[123,82577,72808],{"class":337},[123,82579,54815],{"class":129},[123,82581,82582],{"class":125,"line":35949},[123,82583,54801],{"class":129},[123,82585,82586],{"class":125,"line":35955},[123,82587,232],{"emptyLinePlaceholder":231},[123,82589,82590],{"class":125,"line":35972},[123,82591,35872],{"class":129},[123,82593,82594,82596,82598],{"class":125,"line":35978},[123,82595,54820],{"class":129},[123,82597,54218],{"class":53707},[123,82599,53714],{"class":129},[123,82601,82602,82604,82606],{"class":125,"line":35984},[123,82603,54190],{"class":129},[123,82605,54205],{"class":53707},[123,82607,53714],{"class":129},[123,82609,82610],{"class":125,"line":35990},[123,82611,232],{"emptyLinePlaceholder":231},[123,82613,82614,82616,82618],{"class":125,"line":35996},[123,82615,54190],{"class":129},[123,82617,53042],{"class":53707},[123,82619,53714],{"class":129},[14,82621,82623],{"id":82622},"_410-深入了解对象","4.10 深入了解对象",[2587,82625,82627],{"id":82626},"_4101-创建对象","4.10.1 创建对象",[19,82629,82630],{},[3929,82631],{"alt":118,"src":82632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82634,82635],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[2587,82637,82639],{"id":82638},"_4102-构造函数","4.10.2 构造函数",[19,82641,82642,82645],{},[2759,82643,82644],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82647,82648,82651],{},[2759,82649,82650],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[113,82653,82655],{"className":53040,"code":82654,"language":53042,"meta":118,"style":118},"\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",[120,82656,82657,82665,82670,82691,82704,82716,82728,82732,82737,82764,82769,82796],{"__ignoreMap":118},[123,82658,82659,82661,82663],{"class":125,"line":126},[123,82660,3509],{"class":129},[123,82662,54218],{"class":53707},[123,82664,53714],{"class":129},[123,82666,82667],{"class":125,"line":140},[123,82668,82669],{"class":2673},"\u002F\u002F例：\n",[123,82671,82672,82674,82677,82679,82681,82683,82685,82687,82689],{"class":125,"line":156},[123,82673,56852],{"class":133},[123,82675,82676],{"class":337}," Pig",[123,82678,1315],{"class":129},[123,82680,663],{"class":279},[123,82682,2985],{"class":129},[123,82684,72621],{"class":279},[123,82686,2985],{"class":129},[123,82688,72638],{"class":279},[123,82690,14873],{"class":129},[123,82692,82693,82696,82699,82701],{"class":125,"line":168},[123,82694,82695],{"class":164},"    this",[123,82697,82698],{"class":129},".name",[123,82700,134],{"class":133},[123,82702,82703],{"class":129},"name\n",[123,82705,82706,82708,82711,82713],{"class":125,"line":268},[123,82707,82695],{"class":164},[123,82709,82710],{"class":129},".age",[123,82712,134],{"class":133},[123,82714,82715],{"class":129},"age\n",[123,82717,82718,82720,82723,82725],{"class":125,"line":291},[123,82719,82695],{"class":164},[123,82721,82722],{"class":129},".gender",[123,82724,134],{"class":133},[123,82726,82727],{"class":129},"gender    \n",[123,82729,82730],{"class":125,"line":300},[123,82731,171],{"class":129},[123,82733,82734],{"class":125,"line":305},[123,82735,82736],{"class":2673},"\u002F\u002F创建佩奇对象\n",[123,82738,82739,82741,82744,82746,82748,82750,82753,82755,82757,82759,82762],{"class":125,"line":316},[123,82740,9225],{"class":133},[123,82742,82743],{"class":164}," Peppa",[123,82745,14149],{"class":133},[123,82747,82676],{"class":337},[123,82749,1315],{"class":129},[123,82751,82752],{"class":143},"'佩奇'",[123,82754,2985],{"class":129},[123,82756,2951],{"class":164},[123,82758,2985],{"class":129},[123,82760,82761],{"class":143},"'女'",[123,82763,288],{"class":129},[123,82765,82766],{"class":125,"line":673},[123,82767,82768],{"class":2673},"\u002F\u002F创建乔治对象\n",[123,82770,82771,82773,82776,82778,82780,82782,82785,82787,82789,82791,82794],{"class":125,"line":692},[123,82772,9225],{"class":133},[123,82774,82775],{"class":164}," George",[123,82777,14149],{"class":133},[123,82779,82676],{"class":337},[123,82781,1315],{"class":129},[123,82783,82784],{"class":143},"'乔治'",[123,82786,2985],{"class":129},[123,82788,2686],{"class":164},[123,82790,2985],{"class":129},[123,82792,82793],{"class":143},"'男'",[123,82795,288],{"class":129},[123,82797,82798,82800,82802],{"class":125,"line":713},[123,82799,54190],{"class":129},[123,82801,54218],{"class":53707},[123,82803,53714],{"class":129},[19,82805,82806],{},[3929,82807],{"alt":118,"src":82808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82810,82811],{},[3929,82812],{"alt":118,"src":82813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82815,82816],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82818,82819],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82821,82822],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82824,82825],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82827,82828],{},"这里用等号是因为：对象.属性=值",[19,82830,82831],{},"①利用对象字面量创建对象",[19,82833,82834],{},"const o={",[19,82836,82837],{},"name:'pink'",[19,82839,82840],{},"} ②利用new Object创建对象",[19,82842,82843],{},"const o=new Object({name:'pink'})",[19,82845,82846],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82848,82849],{},"构造函数创建对象的执行过程：",[19,82851,82852],{},[3929,82853],{"alt":118,"src":82854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[2587,82856,82858],{"id":82857},"_4103-实例成员","4.10.3 实例成员",[19,82860,82861],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82863,82864,82867,82870],{},[29,82865,82866],{},"实例对象的属性和方法即为实例成员",[29,82868,82869],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82871,82872],{},"构造函数创建的实例对象彼此独立互不影响",[2587,82874,82876],{"id":82875},"_4104-静态成员","4.10.4 静态成员",[19,82878,82879],{},[3929,82880],{"alt":118,"src":82881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82883,82884],{},"静态成员有Date.now() Math.PI Math.random()",[19,82886,82887],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82889,82890],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82892,82893],{},"function Pig(name) n {",[19,82895,82896],{},"this.name=name",[19,82898,3545],{},[19,82900,82901],{},"Pig.eyes=2",[19,82903,82904],{},"Pig.sayHai=function () { console.log(this) }",[19,82906,82907],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82909,82910],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82912,13764],{},[26,82914,82915,82918,82921,82924,82927],{},[29,82916,82917],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82919,82920],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82922,82923],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82925,82926],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82928,82929],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82931,82932],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[2587,82934,82936],{"id":82935},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82938,82939],{},"内置构造函数包含：",[19,82941,82942],{},[3929,82943],{"alt":118,"src":82944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82946,82947],{},[3929,82948],{"alt":118,"src":82949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82951,82952],{},"这些基本数据类型，js对他们进行了包装",[54218,82954,82955],{},"\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",[24425,82957,82959],{"id":82958},"_41051-object","4.10.5.1 Object",[19,82961,82962],{},"Object 是内置的构造函数，用于创建普通对象",[19,82964,82965],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[113,82967,82969],{"className":53040,"code":82968,"language":53042,"meta":118,"style":118},"const user=new Object({name:'小明',age:15})\n",[120,82970,82971],{"__ignoreMap":118},[123,82972,82973],{"class":125,"line":126},[123,82974,82968],{"class":129},[19,82976,82977],{},"三个常用的静态方法：",[25337,82979,82981],{"id":82980},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82983,82984],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82986,82987],{},[3929,82988],{"alt":118,"src":82989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82991,82992],{},[3929,82993],{"alt":118,"src":82994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[113,82996,82998],{"className":55470,"code":82997,"language":55472,"meta":118,"style":118},"\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",[120,82999,83000,83008,83016,83021,83026,83031,83036,83041,83046,83054],{"__ignoreMap":118},[123,83001,83002,83004,83006],{"class":125,"line":126},[123,83003,3509],{"class":129},[123,83005,54205],{"class":53707},[123,83007,53714],{"class":129},[123,83009,83010,83012,83014],{"class":125,"line":140},[123,83011,54548],{"class":129},[123,83013,54218],{"class":53707},[123,83015,53714],{"class":129},[123,83017,83018],{"class":125,"line":156},[123,83019,83020],{"class":129},"    const o = { name: 'pink', age: 6 }\n",[123,83022,83023],{"class":125,"line":168},[123,83024,83025],{"class":129},"    \u002F\u002F 获得所有属性名\n",[123,83027,83028],{"class":125,"line":268},[123,83029,83030],{"class":129},"    const arr = Object.keys(o)\n",[123,83032,83033],{"class":125,"line":291},[123,83034,83035],{"class":129},"    console.log(arr)\n",[123,83037,83038],{"class":125,"line":300},[123,83039,83040],{"class":129},"    \u002F\u002F 获得所有属性值\n",[123,83042,83043],{"class":125,"line":305},[123,83044,83045],{"class":129},"    console.log(Object.values(o))\n",[123,83047,83048,83050,83052],{"class":125,"line":316},[123,83049,54820],{"class":129},[123,83051,54218],{"class":53707},[123,83053,53714],{"class":129},[123,83055,83056,83058,83060],{"class":125,"line":673},[123,83057,54190],{"class":129},[123,83059,54205],{"class":53707},[123,83061,53714],{"class":129},[25337,83063,83065],{"id":83064},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,83067,83068],{},"Object.assign(oo,o)",[19,83070,83071],{},"后的东西添加给前 是追加",[19,83073,83074],{},[3929,83075],{"alt":118,"src":83076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,83078,83079],{},[3929,83080],{"alt":118,"src":83081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[113,83083,83085],{"className":55470,"code":83084,"language":55472,"meta":118,"style":118},"\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",[120,83086,83087,83095,83103,83107,83111,83115,83119,83123,83127,83132,83137,83142,83147,83152,83160],{"__ignoreMap":118},[123,83088,83089,83091,83093],{"class":125,"line":126},[123,83090,3509],{"class":129},[123,83092,54205],{"class":53707},[123,83094,53714],{"class":129},[123,83096,83097,83099,83101],{"class":125,"line":140},[123,83098,54548],{"class":129},[123,83100,54218],{"class":53707},[123,83102,53714],{"class":129},[123,83104,83105],{"class":125,"line":156},[123,83106,83020],{"class":129},[123,83108,83109],{"class":125,"line":168},[123,83110,83025],{"class":129},[123,83112,83113],{"class":125,"line":268},[123,83114,83030],{"class":129},[123,83116,83117],{"class":125,"line":291},[123,83118,83035],{"class":129},[123,83120,83121],{"class":125,"line":300},[123,83122,83040],{"class":129},[123,83124,83125],{"class":125,"line":305},[123,83126,83045],{"class":129},[123,83128,83129],{"class":125,"line":316},[123,83130,83131],{"class":129},"    const oo = {}\n",[123,83133,83134],{"class":125,"line":673},[123,83135,83136],{"class":129},"    Object.assign(oo, o)\n",[123,83138,83139],{"class":125,"line":692},[123,83140,83141],{"class":129},"    console.log(oo)\n",[123,83143,83144],{"class":125,"line":713},[123,83145,83146],{"class":129},"    Object.assign(o, { gender: '女' })\n",[123,83148,83149],{"class":125,"line":718},[123,83150,83151],{"class":129},"    console.log(o)\n",[123,83153,83154,83156,83158],{"class":125,"line":1138},[123,83155,54820],{"class":129},[123,83157,54218],{"class":53707},[123,83159,53714],{"class":129},[123,83161,83162,83164,83166],{"class":125,"line":1429},[123,83163,54190],{"class":129},[123,83165,54205],{"class":53707},[123,83167,53714],{"class":129},[19,83169,83170],{},[3929,83171],{"alt":118,"src":83172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24425,83174,83176],{"id":83175},"_41052-array","4.10.5.2 Array",[19,83178,83179],{},"Array 是内置的构造函数，用于创建数组",[19,83181,83182],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[113,83184,83186],{"className":53040,"code":83185,"language":53042,"meta":118,"style":118},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[120,83187,83188,83193],{"__ignoreMap":118},[123,83189,83190],{"class":125,"line":126},[123,83191,83192],{"class":129},"const arr=new Array(3,5)\n",[123,83194,83195],{"class":125,"line":140},[123,83196,83197],{"class":129},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83199,83200],{},"Array的实例方法，这个方法是实例成员",[19,83202,83203],{},[3929,83204],{"alt":118,"src":83205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25337,83207,83209],{"id":83208},"_410521-reduce","4.10.5.2.1 reduce",[19,83211,83212],{},[3929,83213],{"alt":118,"src":83214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[113,83216,83218],{"className":55470,"code":83217,"language":55472,"meta":118,"style":118},"\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",[120,83219,83220,83228,83236,83241,83246,83251,83256,83260,83265,83270,83275,83279,83284,83289,83293,83298,83303,83308,83316],{"__ignoreMap":118},[123,83221,83222,83224,83226],{"class":125,"line":126},[123,83223,3509],{"class":129},[123,83225,54205],{"class":53707},[123,83227,53714],{"class":129},[123,83229,83230,83232,83234],{"class":125,"line":140},[123,83231,54548],{"class":129},[123,83233,54218],{"class":53707},[123,83235,53714],{"class":129},[123,83237,83238],{"class":125,"line":156},[123,83239,83240],{"class":129},"    const arr = [1, 5, 8]\n",[123,83242,83243],{"class":125,"line":168},[123,83244,83245],{"class":129},"    \u002F\u002F 1.没有初始值\n",[123,83247,83248],{"class":125,"line":268},[123,83249,83250],{"class":129},"    const total = arr.reduce(function (prev, current) {\n",[123,83252,83253],{"class":125,"line":291},[123,83254,83255],{"class":129},"      return prev + current\n",[123,83257,83258],{"class":125,"line":300},[123,83259,35872],{"class":129},[123,83261,83262],{"class":125,"line":305},[123,83263,83264],{"class":129},"    console.log(total)   \u002F\u002F14\n",[123,83266,83267],{"class":125,"line":316},[123,83268,83269],{"class":129},"    \u002F\u002F 2.有初始值\n",[123,83271,83272],{"class":125,"line":673},[123,83273,83274],{"class":129},"    const total1 = arr.reduce(function (prev, current) {\n",[123,83276,83277],{"class":125,"line":692},[123,83278,83255],{"class":129},[123,83280,83281],{"class":125,"line":713},[123,83282,83283],{"class":129},"    }, 10)\n",[123,83285,83286],{"class":125,"line":718},[123,83287,83288],{"class":129},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[123,83290,83291],{"class":125,"line":1138},[123,83292,232],{"emptyLinePlaceholder":231},[123,83294,83295],{"class":125,"line":1429},[123,83296,83297],{"class":129},"    \u002F\u002F 3.箭头函数写法\n",[123,83299,83300],{"class":125,"line":1439},[123,83301,83302],{"class":129},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[123,83304,83305],{"class":125,"line":1444},[123,83306,83307],{"class":129},"    console.log(total2)   \u002F\u002F24\n",[123,83309,83310,83312,83314],{"class":125,"line":1453},[123,83311,54820],{"class":129},[123,83313,54218],{"class":53707},[123,83315,53714],{"class":129},[123,83317,83318,83320,83322],{"class":125,"line":1458},[123,83319,54190],{"class":129},[123,83321,54205],{"class":53707},[123,83323,53714],{"class":129},[19,83325,83326],{},"执行过程：",[26,83328,83329,83332,83335],{},[29,83330,83331],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,83333,83334],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,83336,83337],{},"如果有起始值，则起始值作为上一次值",[113,83339,83341],{"className":55470,"code":83340,"language":55472,"meta":118,"style":118},"\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",[120,83342,83343,83351,83359,83363,83367,83371,83375,83379,83383,83388,83393,83398,83403,83408,83412,83416,83420,83424,83428,83432,83437,83441,83446,83450,83455,83460,83464,83468,83472,83480],{"__ignoreMap":118},[123,83344,83345,83347,83349],{"class":125,"line":126},[123,83346,3509],{"class":129},[123,83348,54205],{"class":53707},[123,83350,53714],{"class":129},[123,83352,83353,83355,83357],{"class":125,"line":140},[123,83354,54548],{"class":129},[123,83356,54218],{"class":53707},[123,83358,53714],{"class":129},[123,83360,83361],{"class":125,"line":156},[123,83362,83240],{"class":129},[123,83364,83365],{"class":125,"line":168},[123,83366,83245],{"class":129},[123,83368,83369],{"class":125,"line":268},[123,83370,83250],{"class":129},[123,83372,83373],{"class":125,"line":291},[123,83374,83255],{"class":129},[123,83376,83377],{"class":125,"line":300},[123,83378,35872],{"class":129},[123,83380,83381],{"class":125,"line":305},[123,83382,83264],{"class":129},[123,83384,83385],{"class":125,"line":316},[123,83386,83387],{"class":129},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[123,83389,83390],{"class":125,"line":673},[123,83391,83392],{"class":129},"    \u002F\u002F     1              5                    6\n",[123,83394,83395],{"class":125,"line":692},[123,83396,83397],{"class":129},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[123,83399,83400],{"class":125,"line":713},[123,83401,83402],{"class":129},"    \u002F\u002F     6              8                    14\n",[123,83404,83405],{"class":125,"line":718},[123,83406,83407],{"class":129},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[123,83409,83410],{"class":125,"line":1138},[123,83411,83269],{"class":129},[123,83413,83414],{"class":125,"line":1429},[123,83415,83274],{"class":129},[123,83417,83418],{"class":125,"line":1439},[123,83419,83255],{"class":129},[123,83421,83422],{"class":125,"line":1444},[123,83423,83283],{"class":129},[123,83425,83426],{"class":125,"line":1453},[123,83427,83288],{"class":129},[123,83429,83430],{"class":125,"line":1458},[123,83431,83387],{"class":129},[123,83433,83434],{"class":125,"line":1476},[123,83435,83436],{"class":129},"    \u002F\u002F     10             1                     11\n",[123,83438,83439],{"class":125,"line":1494},[123,83440,83397],{"class":129},[123,83442,83443],{"class":125,"line":1499},[123,83444,83445],{"class":129},"    \u002F\u002F     11             5                    16\n",[123,83447,83448],{"class":125,"line":1517},[123,83449,83397],{"class":129},[123,83451,83452],{"class":125,"line":1534},[123,83453,83454],{"class":129},"    \u002F\u002F     16             8                    24\n",[123,83456,83457],{"class":125,"line":1539},[123,83458,83459],{"class":129},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[123,83461,83462],{"class":125,"line":2080},[123,83463,83297],{"class":129},[123,83465,83466],{"class":125,"line":2097},[123,83467,83302],{"class":129},[123,83469,83470],{"class":125,"line":2114},[123,83471,83307],{"class":129},[123,83473,83474,83476,83478],{"class":125,"line":2125},[123,83475,54820],{"class":129},[123,83477,54218],{"class":53707},[123,83479,53714],{"class":129},[123,83481,83482,83484,83486],{"class":125,"line":2130},[123,83483,54190],{"class":129},[123,83485,54205],{"class":53707},[123,83487,53714],{"class":129},[25337,83489,83491],{"id":83490},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83493,83494],{},[3929,83495],{"alt":118,"src":83496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[113,83498,83500],{"className":55470,"code":83499,"language":55472,"meta":118,"style":118},"\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",[120,83501,83502,83510,83518,83523,83528,83533,83538,83542,83547,83552,83557,83562,83567,83572,83576,83581,83585,83590,83598],{"__ignoreMap":118},[123,83503,83504,83506,83508],{"class":125,"line":126},[123,83505,3509],{"class":129},[123,83507,54205],{"class":53707},[123,83509,53714],{"class":129},[123,83511,83512,83514,83516],{"class":125,"line":140},[123,83513,54548],{"class":129},[123,83515,54218],{"class":53707},[123,83517,53714],{"class":129},[123,83519,83520],{"class":125,"line":156},[123,83521,83522],{"class":129},"    const arr = [\n",[123,83524,83525],{"class":125,"line":168},[123,83526,83527],{"class":129},"      { name: '张三', salary: 10000 },\n",[123,83529,83530],{"class":125,"line":268},[123,83531,83532],{"class":129},"      { name: '李四', salary: 10000 },\n",[123,83534,83535],{"class":125,"line":291},[123,83536,83537],{"class":129},"      { name: '王五', salary: 10000 }\n",[123,83539,83540],{"class":125,"line":300},[123,83541,55512],{"class":129},[123,83543,83544],{"class":125,"line":305},[123,83545,83546],{"class":129},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[123,83548,83549],{"class":125,"line":316},[123,83550,83551],{"class":129},"    \u002F\u002F prev是累计值\n",[123,83553,83554],{"class":125,"line":673},[123,83555,83556],{"class":129},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[123,83558,83559],{"class":125,"line":692},[123,83560,83561],{"class":129},"    console.log(total)\n",[123,83563,83564],{"class":125,"line":713},[123,83565,83566],{"class":129},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[123,83568,83569],{"class":125,"line":718},[123,83570,83571],{"class":129},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[123,83573,83574],{"class":125,"line":1138},[123,83575,83566],{"class":129},[123,83577,83578],{"class":125,"line":1429},[123,83579,83580],{"class":129},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[123,83582,83583],{"class":125,"line":1439},[123,83584,83566],{"class":129},[123,83586,83587],{"class":125,"line":1444},[123,83588,83589],{"class":129},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[123,83591,83592,83594,83596],{"class":125,"line":1453},[123,83593,54820],{"class":129},[123,83595,54218],{"class":53707},[123,83597,53714],{"class":129},[123,83599,83600,83602,83604],{"class":125,"line":1458},[123,83601,54190],{"class":129},[123,83603,54205],{"class":53707},[123,83605,53714],{"class":129},[25337,83607,83609],{"id":83608},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83611,83612],{},[3929,83613],{"alt":118,"src":83614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83616,83617],{},[3929,83618],{"alt":118,"src":83619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,83621,83622],{},[29,83623,83624],{},"find()",[19,83626,83627],{},"循环查找，找到第一个就ok",[19,83629,83630],{},[2846,83631,83634],{"href":83632,"rel":83633},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26287],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[113,83636,83638],{"className":53040,"code":83637,"language":53042,"meta":118,"style":118},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[120,83639,83640,83645,83650],{"__ignoreMap":118},[123,83641,83642],{"class":125,"line":126},[123,83643,83644],{"class":129},"const array1 = [5, 12, 8, 130, 44]\n",[123,83646,83647],{"class":125,"line":140},[123,83648,83649],{"class":129},"const found = array1.find((element) => element > 10)\n",[123,83651,83652],{"class":125,"line":156},[123,83653,83654],{"class":129},"console.log(found)  \u002F\u002F12\n",[19,83656,83657,83659,83660,83665,83666,83669,83670,83672,83673,83678,83679,83681,83682,83684,83685,83687,83688],{},[120,83658,83624],{}," 方法是一个",[2846,83661,83664],{"href":83662,"rel":83663},"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",[26287],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[120,83667,83668],{},"callbackFn"," 函数，直到 ",[120,83671,83668],{}," 返回一个",[2846,83674,83677],{"href":83675,"rel":83676},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26287],"真值","。然后 ",[120,83680,83624],{}," 返回该元素并停止迭代数组。如果 ",[120,83683,83668],{}," 从未返回真值，则 ",[120,83686,83624],{}," 返回 ",[120,83689,83690],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[113,83692,83694],{"className":55470,"code":83693,"language":55472,"meta":118,"style":118},"\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",[120,83695,83696,83704,83712,83717,83722,83727,83731,83736,83741,83745,83750,83755,83759,83763,83768,83773,83777,83781,83786,83791,83796,83801,83806,83810,83815,83820,83825,83830,83834,83839,83847],{"__ignoreMap":118},[123,83697,83698,83700,83702],{"class":125,"line":126},[123,83699,3509],{"class":129},[123,83701,54205],{"class":53707},[123,83703,53714],{"class":129},[123,83705,83706,83708,83710],{"class":125,"line":140},[123,83707,54548],{"class":129},[123,83709,54218],{"class":53707},[123,83711,53714],{"class":129},[123,83713,83714],{"class":125,"line":156},[123,83715,83716],{"class":129},"    const arr = ['red', 'blue', 'green']\n",[123,83718,83719],{"class":125,"line":168},[123,83720,83721],{"class":129},"    const found = arr.find(item => item === 'pink')\n",[123,83723,83724],{"class":125,"line":268},[123,83725,83726],{"class":129},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[123,83728,83729],{"class":125,"line":291},[123,83730,232],{"emptyLinePlaceholder":231},[123,83732,83733],{"class":125,"line":300},[123,83734,83735],{"class":129},"    \u002F\u002F 使用场景，用于查找数据\n",[123,83737,83738],{"class":125,"line":305},[123,83739,83740],{"class":129},"    const arr1 = [\n",[123,83742,83743],{"class":125,"line":316},[123,83744,81784],{"class":129},[123,83746,83747],{"class":125,"line":673},[123,83748,83749],{"class":129},"        name: '小米',\n",[123,83751,83752],{"class":125,"line":692},[123,83753,83754],{"class":129},"        price: 1999\n",[123,83756,83757],{"class":125,"line":713},[123,83758,80290],{"class":129},[123,83760,83761],{"class":125,"line":718},[123,83762,81784],{"class":129},[123,83764,83765],{"class":125,"line":1138},[123,83766,83767],{"class":129},"        name: '华为',\n",[123,83769,83770],{"class":125,"line":1429},[123,83771,83772],{"class":129},"        price: 3999\n",[123,83774,83775],{"class":125,"line":1439},[123,83776,54801],{"class":129},[123,83778,83779],{"class":125,"line":1444},[123,83780,55512],{"class":129},[123,83782,83783],{"class":125,"line":1453},[123,83784,83785],{"class":129},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[123,83787,83788],{"class":125,"line":1458},[123,83789,83790],{"class":129},"    \u002F\u002F const found1 = arr1.find(item => {\n",[123,83792,83793],{"class":125,"line":1476},[123,83794,83795],{"class":129},"    \u002F\u002F   if (item.name === '小米') {\n",[123,83797,83798],{"class":125,"line":1494},[123,83799,83800],{"class":129},"    \u002F\u002F     return item\n",[123,83802,83803],{"class":125,"line":1499},[123,83804,83805],{"class":129},"    \u002F\u002F   }\n",[123,83807,83808],{"class":125,"line":1517},[123,83809,65691],{"class":129},[123,83811,83812],{"class":125,"line":1534},[123,83813,83814],{"class":129},"    \u002F\u002F 另一种写法\n",[123,83816,83817],{"class":125,"line":1539},[123,83818,83819],{"class":129},"    const found1 = arr1.find(item => {\n",[123,83821,83822],{"class":125,"line":2080},[123,83823,83824],{"class":129},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[123,83826,83827],{"class":125,"line":2097},[123,83828,83829],{"class":129},"      return item.name = '小米'\n",[123,83831,83832],{"class":125,"line":2114},[123,83833,35872],{"class":129},[123,83835,83836],{"class":125,"line":2125},[123,83837,83838],{"class":129},"    console.log(found1)\n",[123,83840,83841,83843,83845],{"class":125,"line":2130},[123,83842,54820],{"class":129},[123,83844,54218],{"class":53707},[123,83846,53714],{"class":129},[123,83848,83849,83851,83853],{"class":125,"line":5033},[123,83850,54190],{"class":129},[123,83852,54205],{"class":53707},[123,83854,53714],{"class":129},[19,83856,83857],{},[3929,83858],{"alt":118,"src":83859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83861,83862],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83864,83865],{"start":140},[29,83866,83867],{},"every()返回的是布尔值",[19,83869,83870],{},[2846,83871,83874],{"href":83872,"rel":83873},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26287],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83876,83877],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83879,83880],{},"some是只有有一个就没问题",[19,83882,83883],{},"every是必须全是才行",[113,83885,83889],{"className":83886,"code":83887,"language":83888,"meta":118,"style":118},"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",[120,83890,83891,83907,83921,83925,83934],{"__ignoreMap":118},[123,83892,83893,83895,83898,83900,83902,83905],{"class":125,"line":126},[123,83894,56852],{"class":133},[123,83896,83897],{"class":129}," isBigEnough(element, ",[123,83899,76458],{"class":133},[123,83901,251],{"class":129},[123,83903,83904],{"class":133},"array",[123,83906,14873],{"class":129},[123,83908,83909,83912,83915,83917,83919],{"class":125,"line":140},[123,83910,83911],{"class":133},"  return",[123,83913,83914],{"class":129}," element ",[123,83916,4164],{"class":133},[123,83918,4482],{"class":164},[123,83920,3760],{"class":129},[123,83922,83923],{"class":125,"line":156},[123,83924,171],{"class":129},[123,83926,83927,83930,83932],{"class":125,"line":168},[123,83928,83929],{"class":129},"[12, 5, 8, 130, 44].every(isBigEnough); ",[123,83931,35740],{"class":133},[123,83933,56919],{"class":129},[123,83935,83936,83939,83941],{"class":125,"line":268},[123,83937,83938],{"class":129},"[12, 54, 18, 130, 44].every(isBigEnough); ",[123,83940,35740],{"class":133},[123,83942,60342],{"class":129},[113,83944,83946],{"className":55470,"code":83945,"language":55472,"meta":118,"style":118},"\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",[120,83947,83948,83956,83964,83969,83973,83978,83983,83991],{"__ignoreMap":118},[123,83949,83950,83952,83954],{"class":125,"line":126},[123,83951,3509],{"class":129},[123,83953,54205],{"class":53707},[123,83955,53714],{"class":129},[123,83957,83958,83960,83962],{"class":125,"line":140},[123,83959,54548],{"class":129},[123,83961,54218],{"class":53707},[123,83963,53714],{"class":129},[123,83965,83966],{"class":125,"line":156},[123,83967,83968],{"class":129},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[123,83970,83971],{"class":125,"line":168},[123,83972,80720],{"class":129},[123,83974,83975],{"class":125,"line":268},[123,83976,83977],{"class":129},"    const flag = arr.every(item => item >= 10)\n",[123,83979,83980],{"class":125,"line":291},[123,83981,83982],{"class":129},"    console.log(flag)    \u002F\u002Ftrue\n",[123,83984,83985,83987,83989],{"class":125,"line":300},[123,83986,54820],{"class":129},[123,83988,54218],{"class":53707},[123,83990,53714],{"class":129},[123,83992,83993,83995,83997],{"class":125,"line":305},[123,83994,54190],{"class":129},[123,83996,54205],{"class":53707},[123,83998,53714],{"class":129},[113,84000,84002],{"className":55470,"code":84001,"language":55472,"meta":118,"style":118},"\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",[120,84003,84004,84012,84020,84024,84029,84034,84039,84047],{"__ignoreMap":118},[123,84005,84006,84008,84010],{"class":125,"line":126},[123,84007,3509],{"class":129},[123,84009,54205],{"class":53707},[123,84011,53714],{"class":129},[123,84013,84014,84016,84018],{"class":125,"line":140},[123,84015,54548],{"class":129},[123,84017,54218],{"class":53707},[123,84019,53714],{"class":129},[123,84021,84022],{"class":125,"line":156},[123,84023,83968],{"class":129},[123,84025,84026],{"class":125,"line":168},[123,84027,84028],{"class":129},"    const arr = [10, 0, 5]\n",[123,84030,84031],{"class":125,"line":268},[123,84032,84033],{"class":129},"    const flag = arr.some(item => item >= 10)\n",[123,84035,84036],{"class":125,"line":291},[123,84037,84038],{"class":129},"    console.log(flag)   \u002F\u002Ftrue\n",[123,84040,84041,84043,84045],{"class":125,"line":300},[123,84042,54820],{"class":129},[123,84044,54218],{"class":53707},[123,84046,53714],{"class":129},[123,84048,84049,84051,84053],{"class":125,"line":305},[123,84050,54190],{"class":129},[123,84052,54205],{"class":53707},[123,84054,53714],{"class":129},[25337,84056,84058],{"id":84057},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,84060,84061],{},[3929,84062],{"alt":118,"src":84063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[113,84065,84067],{"className":53040,"code":84066,"language":53042,"meta":118,"style":118},"\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",[120,84068,84069,84079,84093,84097,84105,84119,84139,84151,84159,84166,84178,84190,84202,84214,84224,84234,84238,84246,84254,84258,84266,84278,84286,84308,84313,84318,84351,84359,84367,84371],{"__ignoreMap":118},[123,84070,84071,84073,84075,84077],{"class":125,"line":126},[123,84072,53704],{"class":129},[123,84074,53708],{"class":53707},[123,84076,53711],{"class":337},[123,84078,53714],{"class":129},[123,84080,84081,84083,84085,84087,84089,84091],{"class":125,"line":140},[123,84082,3509],{"class":129},[123,84084,53042],{"class":53707},[123,84086,53723],{"class":337},[123,84088,134],{"class":129},[123,84090,53728],{"class":143},[123,84092,53714],{"class":129},[123,84094,84095],{"class":125,"line":156},[123,84096,232],{"emptyLinePlaceholder":231},[123,84098,84099,84101,84103],{"class":125,"line":168},[123,84100,3509],{"class":129},[123,84102,53741],{"class":53707},[123,84104,53714],{"class":129},[123,84106,84107,84109,84111,84113,84115,84117],{"class":125,"line":268},[123,84108,54548],{"class":129},[123,84110,53751],{"class":53707},[123,84112,53754],{"class":337},[123,84114,134],{"class":129},[123,84116,53759],{"class":143},[123,84118,53714],{"class":129},[123,84120,84121,84123,84125,84127,84129,84131,84133,84135,84137],{"class":125,"line":291},[123,84122,54548],{"class":129},[123,84124,53751],{"class":53707},[123,84126,17350],{"class":337},[123,84128,134],{"class":129},[123,84130,53798],{"class":143},[123,84132,53778],{"class":337},[123,84134,134],{"class":129},[123,84136,53805],{"class":143},[123,84138,53714],{"class":129},[123,84140,84141,84143,84145,84147,84149],{"class":125,"line":300},[123,84142,54548],{"class":129},[123,84144,642],{"class":53707},[123,84146,53816],{"class":129},[123,84148,642],{"class":53707},[123,84150,53714],{"class":129},[123,84152,84153,84155,84157],{"class":125,"line":305},[123,84154,54548],{"class":129},[123,84156,2526],{"class":53707},[123,84158,53714],{"class":129},[123,84160,84161,84164],{"class":125,"line":316},[123,84162,84163],{"class":53707},"    div",[123,84165,137],{"class":129},[123,84167,84168,84170,84172,84174,84176],{"class":125,"line":673},[123,84169,57174],{"class":164},[123,84171,147],{"class":129},[123,84173,1045],{"class":164},[123,84175,53897],{"class":133},[123,84177,3760],{"class":129},[123,84179,84180,84182,84184,84186,84188],{"class":125,"line":692},[123,84181,57188],{"class":164},[123,84183,147],{"class":129},[123,84185,3007],{"class":164},[123,84187,53897],{"class":133},[123,84189,3760],{"class":129},[123,84191,84192,84194,84196,84198,84200],{"class":125,"line":713},[123,84193,59761],{"class":164},[123,84195,147],{"class":129},[123,84197,3007],{"class":164},[123,84199,53897],{"class":133},[123,84201,3760],{"class":129},[123,84203,84204,84206,84208,84210,84212],{"class":125,"line":718},[123,84205,67534],{"class":164},[123,84207,147],{"class":129},[123,84209,2215],{"class":164},[123,84211,53897],{"class":133},[123,84213,3760],{"class":129},[123,84215,84216,84218,84220,84222],{"class":125,"line":1138},[123,84217,59688],{"class":164},[123,84219,147],{"class":129},[123,84221,53997],{"class":164},[123,84223,3760],{"class":129},[123,84225,84226,84228,84230,84232],{"class":125,"line":1429},[123,84227,57287],{"class":164},[123,84229,147],{"class":129},[123,84231,54050],{"class":164},[123,84233,3760],{"class":129},[123,84235,84236],{"class":125,"line":1439},[123,84237,4631],{"class":129},[123,84239,84240,84242,84244],{"class":125,"line":1444},[123,84241,54820],{"class":129},[123,84243,2526],{"class":53707},[123,84245,53714],{"class":129},[123,84247,84248,84250,84252],{"class":125,"line":1453},[123,84249,54190],{"class":129},[123,84251,53741],{"class":53707},[123,84253,53714],{"class":129},[123,84255,84256],{"class":125,"line":1458},[123,84257,232],{"emptyLinePlaceholder":231},[123,84259,84260,84262,84264],{"class":125,"line":1476},[123,84261,3509],{"class":129},[123,84263,54205],{"class":53707},[123,84265,53714],{"class":129},[123,84267,84268,84270,84272,84274,84276],{"class":125,"line":1494},[123,84269,54548],{"class":129},[123,84271,54016],{"class":53707},[123,84273,57717],{"class":129},[123,84275,54016],{"class":53707},[123,84277,53714],{"class":129},[123,84279,84280,84282,84284],{"class":125,"line":1499},[123,84281,54548],{"class":129},[123,84283,54218],{"class":53707},[123,84285,53714],{"class":129},[123,84287,84288,84290,84293,84295,84298,84301,84303,84306],{"class":125,"line":1517},[123,84289,13653],{"class":133},[123,84291,84292],{"class":164}," spec",[123,84294,15995],{"class":133},[123,84296,84297],{"class":129}," { size: ",[123,84299,84300],{"class":143},"'40cm*40cm'",[123,84302,57866],{"class":129},[123,84304,84305],{"class":143},"'黑色'",[123,84307,58006],{"class":129},[123,84309,84310],{"class":125,"line":1534},[123,84311,84312],{"class":2673},"    \u002F\u002F const arr = Object.values(spec)\n",[123,84314,84315],{"class":125,"line":1539},[123,84316,84317],{"class":2673},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[123,84319,84320,84322,84324,84326,84329,84331,84333,84336,84339,84342,84344,84346,84349],{"class":125,"line":2080},[123,84321,54810],{"class":129},[123,84323,56802],{"class":337},[123,84325,1315],{"class":129},[123,84327,84328],{"class":143},"'div'",[123,84330,76649],{"class":129},[123,84332,134],{"class":133},[123,84334,84335],{"class":129}," Object.",[123,84337,84338],{"class":337},"values",[123,84340,84341],{"class":129},"(spec).",[123,84343,76623],{"class":337},[123,84345,1315],{"class":129},[123,84347,84348],{"class":143},"'\u002F'",[123,84350,288],{"class":129},[123,84352,84353,84355,84357],{"class":125,"line":2097},[123,84354,54820],{"class":129},[123,84356,54218],{"class":53707},[123,84358,53714],{"class":129},[123,84360,84361,84363,84365],{"class":125,"line":2114},[123,84362,54190],{"class":129},[123,84364,54205],{"class":53707},[123,84366,53714],{"class":129},[123,84368,84369],{"class":125,"line":2125},[123,84370,232],{"emptyLinePlaceholder":231},[123,84372,84373,84375,84377],{"class":125,"line":2130},[123,84374,54190],{"class":129},[123,84376,53042],{"class":53707},[123,84378,53714],{"class":129},[19,84380,84381],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25337,84383,84385],{"id":84384},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84387,84388],{},"静态方法，将伪数组转换为真数组",[19,84390,84391],{},[3929,84392],{"alt":118,"src":84393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[113,84395,84397],{"className":55470,"code":84396,"language":55472,"meta":118,"style":118},"\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",[120,84398,84399,84407,84415,84427,84439,84451,84459,84467,84472,84477,84482,84487,84495],{"__ignoreMap":118},[123,84400,84401,84403,84405],{"class":125,"line":126},[123,84402,3509],{"class":129},[123,84404,54205],{"class":53707},[123,84406,53714],{"class":129},[123,84408,84409,84411,84413],{"class":125,"line":140},[123,84410,54548],{"class":129},[123,84412,3606],{"class":53707},[123,84414,53714],{"class":129},[123,84416,84417,84419,84421,84423,84425],{"class":125,"line":156},[123,84418,53748],{"class":129},[123,84420,29],{"class":53707},[123,84422,57717],{"class":129},[123,84424,29],{"class":53707},[123,84426,53714],{"class":129},[123,84428,84429,84431,84433,84435,84437],{"class":125,"line":168},[123,84430,53748],{"class":129},[123,84432,29],{"class":53707},[123,84434,57717],{"class":129},[123,84436,29],{"class":53707},[123,84438,53714],{"class":129},[123,84440,84441,84443,84445,84447,84449],{"class":125,"line":268},[123,84442,53748],{"class":129},[123,84444,29],{"class":53707},[123,84446,57717],{"class":129},[123,84448,29],{"class":53707},[123,84450,53714],{"class":129},[123,84452,84453,84455,84457],{"class":125,"line":291},[123,84454,54820],{"class":129},[123,84456,3606],{"class":53707},[123,84458,53714],{"class":129},[123,84460,84461,84463,84465],{"class":125,"line":300},[123,84462,54548],{"class":129},[123,84464,54218],{"class":53707},[123,84466,53714],{"class":129},[123,84468,84469],{"class":125,"line":305},[123,84470,84471],{"class":129},"    const lis = document.querySelectorAll('li')\n",[123,84473,84474],{"class":125,"line":316},[123,84475,84476],{"class":129},"    const liss = Array.from(lis)\n",[123,84478,84479],{"class":125,"line":673},[123,84480,84481],{"class":129},"    liss.pop()\n",[123,84483,84484],{"class":125,"line":692},[123,84485,84486],{"class":129},"    console.log(liss)\n",[123,84488,84489,84491,84493],{"class":125,"line":713},[123,84490,54820],{"class":129},[123,84492,54218],{"class":53707},[123,84494,53714],{"class":129},[123,84496,84497,84499,84501],{"class":125,"line":718},[123,84498,54190],{"class":129},[123,84500,54205],{"class":53707},[123,84502,53714],{"class":129},[19,84504,84505],{},[3929,84506],{"alt":118,"src":84507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24425,84509,84511],{"id":84510},"_41053-string","4.10.5.3 String",[19,84513,84514],{},[3929,84515],{"alt":118,"src":84516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25337,84518,84520],{"id":84519},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[113,84522,84524],{"className":55470,"code":84523,"language":55472,"meta":118,"style":118},"\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",[120,84525,84526,84534,84542,84547,84552,84557,84561,84566,84571,84576,84584],{"__ignoreMap":118},[123,84527,84528,84530,84532],{"class":125,"line":126},[123,84529,3509],{"class":129},[123,84531,54205],{"class":53707},[123,84533,53714],{"class":129},[123,84535,84536,84538,84540],{"class":125,"line":140},[123,84537,54548],{"class":129},[123,84539,54218],{"class":53707},[123,84541,53714],{"class":129},[123,84543,84544],{"class":125,"line":156},[123,84545,84546],{"class":129},"    \u002F\u002F 把字符串转化为数组\n",[123,84548,84549],{"class":125,"line":168},[123,84550,84551],{"class":129},"    const str = 'pink,red'\n",[123,84553,84554],{"class":125,"line":268},[123,84555,84556],{"class":129},"    const arr = str.split(',')\n",[123,84558,84559],{"class":125,"line":291},[123,84560,83035],{"class":129},[123,84562,84563],{"class":125,"line":300},[123,84564,84565],{"class":129},"    const str1 = '2025-8-25'\n",[123,84567,84568],{"class":125,"line":305},[123,84569,84570],{"class":129},"    const arr1 = str1.split('-')\n",[123,84572,84573],{"class":125,"line":316},[123,84574,84575],{"class":129},"    console.log(arr1)\n",[123,84577,84578,84580,84582],{"class":125,"line":673},[123,84579,54820],{"class":129},[123,84581,54218],{"class":53707},[123,84583,53714],{"class":129},[123,84585,84586,84588,84590],{"class":125,"line":692},[123,84587,54190],{"class":129},[123,84589,54205],{"class":53707},[123,84591,53714],{"class":129},[25337,84593,84595],{"id":84594},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84597,7615],{},[19,84599,84600],{},"substring(indexStart)",[19,84602,84603],{},"substring(indexStart, indexEnd)",[3606,84605,84606,84617,84629,84639],{},[29,84607,84608,84609,84612,84613,84616],{},"如果省略了 ",[120,84610,84611],{},"indexEnd","，则 ",[120,84614,84615],{},"substring()"," 提取字符直到字符串的末尾",[29,84618,84619,84620,84623,84624,84612,84626,84628],{},"如果 ",[120,84621,84622],{},"indexStart"," 等于 ",[120,84625,84611],{},[120,84627,84615],{}," 返回一个空字符串",[29,84630,84619,84631,84633,84634,84612,84636,84638],{},[120,84632,84622],{}," 大于 ",[120,84635,84611],{},[120,84637,84615],{}," 的效果就像交换了这两个参数一样",[29,84640,84641],{},"结束的索引号不包含想要截取的部分",[113,84643,84645],{"className":83886,"code":84644,"language":83888,"meta":118,"style":118},"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",[120,84646,84647,84659,84663,84697,84727,84731,84762,84766,84793,84823,84853,84857,84888],{"__ignoreMap":118},[123,84648,84649,84652,84654,84657],{"class":125,"line":126},[123,84650,84651],{"class":129},"const anyString ",[123,84653,134],{"class":133},[123,84655,84656],{"class":143}," \"Mozilla\"",[123,84658,3760],{"class":129},[123,84660,84661],{"class":125,"line":140},[123,84662,232],{"emptyLinePlaceholder":231},[123,84664,84665,84668,84670,84672,84674,84677,84679,84682,84684,84686,84688,84690,84692,84694],{"class":125,"line":156},[123,84666,84667],{"class":164},"console",[123,84669,3161],{"class":129},[123,84671,60649],{"class":164},[123,84673,1315],{"class":129},[123,84675,84676],{"class":164},"anyString",[123,84678,3161],{"class":129},[123,84680,84681],{"class":164},"substring",[123,84683,1315],{"class":129},[123,84685,2799],{"class":164},[123,84687,251],{"class":129},[123,84689,2825],{"class":164},[123,84691,77653],{"class":129},[123,84693,35740],{"class":133},[123,84695,84696],{"class":143}," 'M'\n",[123,84698,84699,84701,84703,84705,84707,84709,84711,84713,84715,84717,84719,84721,84723,84725],{"class":125,"line":168},[123,84700,84667],{"class":164},[123,84702,3161],{"class":129},[123,84704,60649],{"class":164},[123,84706,1315],{"class":129},[123,84708,84676],{"class":164},[123,84710,3161],{"class":129},[123,84712,84681],{"class":164},[123,84714,1315],{"class":129},[123,84716,2825],{"class":164},[123,84718,251],{"class":129},[123,84720,2799],{"class":164},[123,84722,77653],{"class":129},[123,84724,35740],{"class":133},[123,84726,84696],{"class":143},[123,84728,84729],{"class":125,"line":268},[123,84730,232],{"emptyLinePlaceholder":231},[123,84732,84733,84735,84737,84739,84741,84743,84745,84747,84749,84751,84753,84755,84757,84759],{"class":125,"line":291},[123,84734,84667],{"class":164},[123,84736,3161],{"class":129},[123,84738,60649],{"class":164},[123,84740,1315],{"class":129},[123,84742,84676],{"class":164},[123,84744,3161],{"class":129},[123,84746,84681],{"class":164},[123,84748,1315],{"class":129},[123,84750,2799],{"class":164},[123,84752,251],{"class":129},[123,84754,2951],{"class":164},[123,84756,77653],{"class":129},[123,84758,35740],{"class":133},[123,84760,84761],{"class":143}," 'Mozill'\n",[123,84763,84764],{"class":125,"line":300},[123,84765,232],{"emptyLinePlaceholder":231},[123,84767,84768,84770,84772,84774,84776,84778,84780,84782,84784,84786,84788,84790],{"class":125,"line":305},[123,84769,84667],{"class":164},[123,84771,3161],{"class":129},[123,84773,60649],{"class":164},[123,84775,1315],{"class":129},[123,84777,84676],{"class":164},[123,84779,3161],{"class":129},[123,84781,84681],{"class":164},[123,84783,1315],{"class":129},[123,84785,2901],{"class":164},[123,84787,77653],{"class":129},[123,84789,35740],{"class":133},[123,84791,84792],{"class":143}," 'lla'\n",[123,84794,84795,84797,84799,84801,84803,84805,84807,84809,84811,84813,84815,84817,84819,84821],{"class":125,"line":316},[123,84796,84667],{"class":164},[123,84798,3161],{"class":129},[123,84800,60649],{"class":164},[123,84802,1315],{"class":129},[123,84804,84676],{"class":164},[123,84806,3161],{"class":129},[123,84808,84681],{"class":164},[123,84810,1315],{"class":129},[123,84812,2901],{"class":164},[123,84814,251],{"class":129},[123,84816,2976],{"class":164},[123,84818,77709],{"class":129},[123,84820,35740],{"class":133},[123,84822,84792],{"class":143},[123,84824,84825,84827,84829,84831,84833,84835,84837,84839,84841,84843,84845,84847,84849,84851],{"class":125,"line":673},[123,84826,84667],{"class":164},[123,84828,3161],{"class":129},[123,84830,60649],{"class":164},[123,84832,1315],{"class":129},[123,84834,84676],{"class":164},[123,84836,3161],{"class":129},[123,84838,84681],{"class":164},[123,84840,1315],{"class":129},[123,84842,2976],{"class":164},[123,84844,251],{"class":129},[123,84846,2901],{"class":164},[123,84848,77653],{"class":129},[123,84850,35740],{"class":133},[123,84852,84792],{"class":143},[123,84854,84855],{"class":125,"line":692},[123,84856,232],{"emptyLinePlaceholder":231},[123,84858,84859,84861,84863,84865,84867,84869,84871,84873,84875,84877,84879,84881,84883,84885],{"class":125,"line":713},[123,84860,84667],{"class":164},[123,84862,3161],{"class":129},[123,84864,60649],{"class":164},[123,84866,1315],{"class":129},[123,84868,84676],{"class":164},[123,84870,3161],{"class":129},[123,84872,84681],{"class":164},[123,84874,1315],{"class":129},[123,84876,2799],{"class":164},[123,84878,251],{"class":129},[123,84880,2976],{"class":164},[123,84882,77653],{"class":129},[123,84884,35740],{"class":133},[123,84886,84887],{"class":143}," 'Mozilla'\n",[123,84889,84890,84892,84894,84896,84898,84900,84902,84904,84906,84908,84910,84912,84914,84916],{"class":125,"line":718},[123,84891,84667],{"class":164},[123,84893,3161],{"class":129},[123,84895,60649],{"class":164},[123,84897,1315],{"class":129},[123,84899,84676],{"class":164},[123,84901,3161],{"class":129},[123,84903,84681],{"class":164},[123,84905,1315],{"class":129},[123,84907,2799],{"class":164},[123,84909,251],{"class":129},[123,84911,2193],{"class":164},[123,84913,77653],{"class":129},[123,84915,35740],{"class":133},[123,84917,84887],{"class":143},[25337,84919,84921],{"id":84920},"_410533-startswith","4.10.5.3.3 startsWith",[19,84923,84924,84927,84928,84933,84934,84936,84937],{},[120,84925,84926],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2759,84929,84930],{},[120,84931,84932],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[120,84935,3829],{}," 或 ",[120,84938,68421],{},[113,84940,84942],{"className":79895,"code":84941,"language":79897,"meta":118,"style":118},"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",[120,84943,84944,84956,84975,84980,85000],{"__ignoreMap":118},[123,84945,84946,84948,84951,84953],{"class":125,"line":126},[123,84947,9225],{"class":133},[123,84949,84950],{"class":129}," str1 ",[123,84952,134],{"class":133},[123,84954,84955],{"class":143}," \"Saturday night plans\"\n",[123,84957,84958,84960,84962,84965,84968,84970,84973],{"class":125,"line":140},[123,84959,79930],{"class":129},[123,84961,60649],{"class":337},[123,84963,84964],{"class":129},"(str1.",[123,84966,84967],{"class":337},"startsWith",[123,84969,1315],{"class":129},[123,84971,84972],{"class":143},"\"Sat\"",[123,84974,32913],{"class":129},[123,84976,84977],{"class":125,"line":156},[123,84978,84979],{"class":2673},"\u002F\u002F Expected output: true\n",[123,84981,84982,84984,84986,84988,84990,84992,84994,84996,84998],{"class":125,"line":168},[123,84983,79930],{"class":129},[123,84985,60649],{"class":337},[123,84987,84964],{"class":129},[123,84989,84967],{"class":337},[123,84991,1315],{"class":129},[123,84993,84972],{"class":143},[123,84995,251],{"class":129},[123,84997,2686],{"class":164},[123,84999,32913],{"class":129},[123,85001,85002],{"class":125,"line":268},[123,85003,85004],{"class":2673},"\u002F\u002F Expected output: false\n",[113,85006,85008],{"className":53040,"code":85007,"language":53042,"meta":118,"style":118},"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",[120,85009,85010,85015,85020,85024,85029,85034],{"__ignoreMap":118},[123,85011,85012],{"class":125,"line":126},[123,85013,85014],{"class":129},"startsWith(searchString)\n",[123,85016,85017],{"class":125,"line":140},[123,85018,85019],{"class":129},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[123,85021,85022],{"class":125,"line":156},[123,85023,232],{"emptyLinePlaceholder":231},[123,85025,85026],{"class":125,"line":168},[123,85027,85028],{"class":129},"const str3 = 'pink老师上课中'\n",[123,85030,85031],{"class":125,"line":268},[123,85032,85033],{"class":129},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[123,85035,85036],{"class":125,"line":291},[123,85037,85038],{"class":129},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25337,85040,85042],{"id":85041},"_410534-includes","4.10.5.3.4 includes",[19,85044,85045],{},"includes(searchString) includes(searchString, position)",[26,85047,85048],{},[29,85049,85050],{},"searchString:",[19,85052,85053,85054,85056,85057,85062,85063,85068,85069,23927,85072,85075,85076,85079],{},"一个要在 ",[120,85055,3769],{}," 中查找的字符串。",[2846,85058,85061],{"href":85059,"rel":85060},"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",[26287],"不能是正则表达式","。所有非正则表达式的值都会被",[2846,85064,85067],{"href":85065,"rel":85066},"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",[26287],"强制转换为字符串","，因此如果该参数被省略或传入 ",[120,85070,85071],{},"undefined",[120,85073,85074],{},"includes()"," 方法会在字符串中搜索 ",[120,85077,85078],{},"\"undefined\"","，这通常不是你想要的",[26,85081,85082],{"start":140},[29,85083,85084,3460],{},[120,85085,85086],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,85088,85089,85090,85093,85094],{},"在字符串中开始搜索 ",[120,85091,85092],{},"searchString"," 的位置。默认值为 ",[120,85095,2799],{},[26,85097,85098],{"start":156},[29,85099,85100],{},"返回值：",[19,85102,85103,85104,85106,85107,85111,85112],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[120,85105,85092],{}," 为空字符串的情况），则返回 ",[2759,85108,85109],{},[120,85110,3829],{}," ，否则返回 ",[2759,85113,85114],{},[120,85115,68421],{},[26,85117,85118],{"start":168},[29,85119,85120],{},"异常：",[19,85122,84619,85123,16225,85125,85129],{},[120,85124,85092],{},[2846,85126,85128],{"href":85059,"rel":85127},[26287],"是一个正则表达式","，则会抛出",[19,85131,85132],{},"只要是有就是true，不需要非得以谁开头结尾",[113,85134,85136],{"className":79895,"code":85135,"language":79897,"meta":118,"style":118},"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",[120,85137,85138,85149,85172,85191,85211,85233,85252],{"__ignoreMap":118},[123,85139,85140,85142,85144,85146],{"class":125,"line":126},[123,85141,9225],{"class":133},[123,85143,82173],{"class":129},[123,85145,134],{"class":133},[123,85147,85148],{"class":143}," \"To be, or not to be, that is the question.\"\n",[123,85150,85151,85153,85155,85158,85161,85163,85166,85169],{"class":125,"line":140},[123,85152,79930],{"class":129},[123,85154,60649],{"class":337},[123,85156,85157],{"class":129},"(str.",[123,85159,85160],{"class":337},"includes",[123,85162,1315],{"class":129},[123,85164,85165],{"class":143},"\"To be\"",[123,85167,85168],{"class":129},"))",[123,85170,85171],{"class":2673},"  \u002F\u002F true\n",[123,85173,85174,85176,85178,85180,85182,85184,85187,85189],{"class":125,"line":156},[123,85175,79930],{"class":129},[123,85177,60649],{"class":337},[123,85179,85157],{"class":129},[123,85181,85160],{"class":337},[123,85183,1315],{"class":129},[123,85185,85186],{"class":143},"\"question\"",[123,85188,85168],{"class":129},[123,85190,85171],{"class":2673},[123,85192,85193,85195,85197,85199,85201,85203,85206,85208],{"class":125,"line":168},[123,85194,79930],{"class":129},[123,85196,60649],{"class":337},[123,85198,85157],{"class":129},[123,85200,85160],{"class":337},[123,85202,1315],{"class":129},[123,85204,85205],{"class":143},"\"nonexistent\"",[123,85207,85168],{"class":129},[123,85209,85210],{"class":2673},"  \u002F\u002F false\n",[123,85212,85213,85215,85217,85219,85221,85223,85225,85227,85229,85231],{"class":125,"line":268},[123,85214,79930],{"class":129},[123,85216,60649],{"class":337},[123,85218,85157],{"class":129},[123,85220,85160],{"class":337},[123,85222,1315],{"class":129},[123,85224,85165],{"class":143},[123,85226,251],{"class":129},[123,85228,2825],{"class":164},[123,85230,85168],{"class":129},[123,85232,85210],{"class":2673},[123,85234,85235,85237,85239,85241,85243,85245,85248,85250],{"class":125,"line":291},[123,85236,79930],{"class":129},[123,85238,60649],{"class":337},[123,85240,85157],{"class":129},[123,85242,85160],{"class":337},[123,85244,1315],{"class":129},[123,85246,85247],{"class":143},"\"TO BE\"",[123,85249,85168],{"class":129},[123,85251,85210],{"class":2673},[123,85253,85254,85256,85258,85260,85262,85264,85266,85268],{"class":125,"line":300},[123,85255,79930],{"class":129},[123,85257,60649],{"class":337},[123,85259,85157],{"class":129},[123,85261,85160],{"class":337},[123,85263,1315],{"class":129},[123,85265,1629],{"class":143},[123,85267,85168],{"class":129},[123,85269,85171],{"class":2673},[25337,85271,85273],{"id":85272},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[113,85275,85277],{"className":55470,"code":85276,"language":55472,"meta":118,"style":118},"\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",[120,85278,85279,85287,85295,85300,85305,85310,85315,85320,85328],{"__ignoreMap":118},[123,85280,85281,85283,85285],{"class":125,"line":126},[123,85282,3509],{"class":129},[123,85284,54205],{"class":53707},[123,85286,53714],{"class":129},[123,85288,85289,85291,85293],{"class":125,"line":140},[123,85290,54548],{"class":129},[123,85292,54218],{"class":53707},[123,85294,53714],{"class":129},[123,85296,85297],{"class":125,"line":156},[123,85298,85299],{"class":129},"    const num = 10\n",[123,85301,85302],{"class":125,"line":168},[123,85303,85304],{"class":129},"    \u002F\u002F 强制转换\n",[123,85306,85307],{"class":125,"line":268},[123,85308,85309],{"class":129},"    console.log(String(num))\n",[123,85311,85312],{"class":125,"line":291},[123,85313,85314],{"class":129},"    \u002F\u002F toString()方法转换\n",[123,85316,85317],{"class":125,"line":300},[123,85318,85319],{"class":129},"    console.log(num.toString())\n",[123,85321,85322,85324,85326],{"class":125,"line":305},[123,85323,54820],{"class":129},[123,85325,54218],{"class":53707},[123,85327,53714],{"class":129},[123,85329,85330,85332,85334],{"class":125,"line":316},[123,85331,54190],{"class":129},[123,85333,54205],{"class":53707},[123,85335,53714],{"class":129},[25337,85337,85339],{"id":85338},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85341,85342],{},[3929,85343],{"alt":118,"src":85344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[113,85346,85348],{"className":53040,"code":85347,"language":53042,"meta":118,"style":118},"\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",[120,85349,85350,85360,85374,85378,85386,85400,85420,85432,85440,85444,85452,85464,85472,85484,85489,85494,85499,85546,85562,85570,85578,85582],{"__ignoreMap":118},[123,85351,85352,85354,85356,85358],{"class":125,"line":126},[123,85353,53704],{"class":129},[123,85355,53708],{"class":53707},[123,85357,53711],{"class":337},[123,85359,53714],{"class":129},[123,85361,85362,85364,85366,85368,85370,85372],{"class":125,"line":140},[123,85363,3509],{"class":129},[123,85365,53042],{"class":53707},[123,85367,53723],{"class":337},[123,85369,134],{"class":129},[123,85371,53728],{"class":143},[123,85373,53714],{"class":129},[123,85375,85376],{"class":125,"line":156},[123,85377,232],{"emptyLinePlaceholder":231},[123,85379,85380,85382,85384],{"class":125,"line":168},[123,85381,3509],{"class":129},[123,85383,53741],{"class":53707},[123,85385,53714],{"class":129},[123,85387,85388,85390,85392,85394,85396,85398],{"class":125,"line":268},[123,85389,54548],{"class":129},[123,85391,53751],{"class":53707},[123,85393,53754],{"class":337},[123,85395,134],{"class":129},[123,85397,53759],{"class":143},[123,85399,53714],{"class":129},[123,85401,85402,85404,85406,85408,85410,85412,85414,85416,85418],{"class":125,"line":291},[123,85403,54548],{"class":129},[123,85405,53751],{"class":53707},[123,85407,17350],{"class":337},[123,85409,134],{"class":129},[123,85411,53798],{"class":143},[123,85413,53778],{"class":337},[123,85415,134],{"class":129},[123,85417,53805],{"class":143},[123,85419,53714],{"class":129},[123,85421,85422,85424,85426,85428,85430],{"class":125,"line":300},[123,85423,54548],{"class":129},[123,85425,642],{"class":53707},[123,85427,53816],{"class":129},[123,85429,642],{"class":53707},[123,85431,53714],{"class":129},[123,85433,85434,85436,85438],{"class":125,"line":305},[123,85435,54190],{"class":129},[123,85437,53741],{"class":53707},[123,85439,53714],{"class":129},[123,85441,85442],{"class":125,"line":316},[123,85443,232],{"emptyLinePlaceholder":231},[123,85445,85446,85448,85450],{"class":125,"line":673},[123,85447,3509],{"class":129},[123,85449,54205],{"class":53707},[123,85451,53714],{"class":129},[123,85453,85454,85456,85458,85460,85462],{"class":125,"line":692},[123,85455,54548],{"class":129},[123,85457,54016],{"class":53707},[123,85459,57717],{"class":129},[123,85461,54016],{"class":53707},[123,85463,53714],{"class":129},[123,85465,85466,85468,85470],{"class":125,"line":713},[123,85467,54548],{"class":129},[123,85469,54218],{"class":53707},[123,85471,53714],{"class":129},[123,85473,85474,85476,85479,85481],{"class":125,"line":718},[123,85475,13653],{"class":133},[123,85477,85478],{"class":164}," gift",[123,85480,15995],{"class":133},[123,85482,85483],{"class":143}," '50g的茶叶，清洗球'\n",[123,85485,85486],{"class":125,"line":1138},[123,85487,85488],{"class":2673},"    \u002F\u002F 1.把字符串拆分为数组\n",[123,85490,85491],{"class":125,"line":1429},[123,85492,85493],{"class":2673},"    \u002F\u002F console.log(gift.split(','))\n",[123,85495,85496],{"class":125,"line":1439},[123,85497,85498],{"class":2673},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[123,85500,85501,85503,85505,85507,85510,85513,85515,85518,85520,85522,85524,85526,85528,85531,85533,85536,85538,85540,85542,85544],{"class":125,"line":1444},[123,85502,13653],{"class":133},[123,85504,76319],{"class":164},[123,85506,15995],{"class":133},[123,85508,85509],{"class":129}," gift.",[123,85511,85512],{"class":337},"split",[123,85514,1315],{"class":129},[123,85516,85517],{"class":143},"'，'",[123,85519,33241],{"class":129},[123,85521,76444],{"class":337},[123,85523,1315],{"class":129},[123,85525,82193],{"class":279},[123,85527,82196],{"class":133},[123,85529,85530],{"class":143}," `\u003Cspan>【赠品】${",[123,85532,82193],{"class":129},[123,85534,85535],{"class":143},"}\u003C\u002Fspan>\u003Cbr>`",[123,85537,33241],{"class":129},[123,85539,76623],{"class":337},[123,85541,1315],{"class":129},[123,85543,76628],{"class":143},[123,85545,288],{"class":129},[123,85547,85548,85550,85552,85554,85556,85558,85560],{"class":125,"line":1453},[123,85549,54810],{"class":129},[123,85551,56802],{"class":337},[123,85553,1315],{"class":129},[123,85555,84328],{"class":143},[123,85557,76649],{"class":129},[123,85559,134],{"class":133},[123,85561,76385],{"class":129},[123,85563,85564,85566,85568],{"class":125,"line":1458},[123,85565,54820],{"class":129},[123,85567,54218],{"class":53707},[123,85569,53714],{"class":129},[123,85571,85572,85574,85576],{"class":125,"line":1476},[123,85573,54190],{"class":129},[123,85575,54205],{"class":53707},[123,85577,53714],{"class":129},[123,85579,85580],{"class":125,"line":1494},[123,85581,232],{"emptyLinePlaceholder":231},[123,85583,85584,85586,85588],{"class":125,"line":1499},[123,85585,54190],{"class":129},[123,85587,53042],{"class":53707},[123,85589,53714],{"class":129},[24425,85591,85593],{"id":85592},"_41054-number","4.10.5.4 Number",[19,85595,85596],{},[3929,85597],{"alt":118,"src":85598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85600,85601],{},"整数也可以进行toFixed来保留小数",[19,85603,85604],{},"比如：",[19,85606,85607],{},"const price=10",[19,85609,85610],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24425,85612,85614],{"id":85613},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85616,85617],{},[3929,85618],{"alt":118,"src":85619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[113,85621,85623],{"className":53040,"code":85622,"language":53042,"meta":118,"style":118},"\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",[120,85624,85625,85635,85649,85653,85661,85675,85695,85707,85715,85721,85731,85741,85751,85755,85759,85765,85777,85791,85795,85799,85805,85817,85833,85843,85859,85863,85867,85873,85883,85893,85897,85901,85909,85921,85933,85945,85949,85953,85961,85973,85977,85981,85992,86002,86014,86026,86036,86040,86044,86052,86061,86073,86083,86093,86097,86101,86109,86118,86125,86135,86147,86151,86155,86164,86174,86185,86197,86209,86213,86217,86226,86236,86247,86251,86255,86261,86273,86285,86295,86305,86323,86335,86339,86343,86352,86364,86374,86384,86396,86400,86408,86416,86420,86428,86442,86450,86464,86491,86499,86507,86517,86521,86529,86537,86546,86554,86563,86573,86577,86581,86589,86597,86606,86614,86622,86635,86639,86643,86651,86659,86668,86676,86684,86699,86703,86707,86715,86723,86732,86740,86748,86762,86770,86774,86778,86783,86809,86814,86851,86856,86879,86884,86938,86943,86979,86983,86989,86994,87003,87017,87026,87045,87054,87064,87069,87074,87087,87092,87146,87172,87180,87188,87192],{"__ignoreMap":118},[123,85626,85627,85629,85631,85633],{"class":125,"line":126},[123,85628,53704],{"class":129},[123,85630,53708],{"class":53707},[123,85632,53711],{"class":337},[123,85634,53714],{"class":129},[123,85636,85637,85639,85641,85643,85645,85647],{"class":125,"line":140},[123,85638,3509],{"class":129},[123,85640,53042],{"class":53707},[123,85642,53723],{"class":337},[123,85644,134],{"class":129},[123,85646,53728],{"class":143},[123,85648,53714],{"class":129},[123,85650,85651],{"class":125,"line":156},[123,85652,232],{"emptyLinePlaceholder":231},[123,85654,85655,85657,85659],{"class":125,"line":168},[123,85656,3509],{"class":129},[123,85658,53741],{"class":53707},[123,85660,53714],{"class":129},[123,85662,85663,85665,85667,85669,85671,85673],{"class":125,"line":268},[123,85664,54548],{"class":129},[123,85666,53751],{"class":53707},[123,85668,53754],{"class":337},[123,85670,134],{"class":129},[123,85672,53759],{"class":143},[123,85674,53714],{"class":129},[123,85676,85677,85679,85681,85683,85685,85687,85689,85691,85693],{"class":125,"line":291},[123,85678,54548],{"class":129},[123,85680,53751],{"class":53707},[123,85682,17350],{"class":337},[123,85684,134],{"class":129},[123,85686,53798],{"class":143},[123,85688,53778],{"class":337},[123,85690,134],{"class":129},[123,85692,53805],{"class":143},[123,85694,53714],{"class":129},[123,85696,85697,85699,85701,85703,85705],{"class":125,"line":300},[123,85698,54548],{"class":129},[123,85700,642],{"class":53707},[123,85702,53816],{"class":129},[123,85704,642],{"class":53707},[123,85706,53714],{"class":129},[123,85708,85709,85711,85713],{"class":125,"line":305},[123,85710,54548],{"class":129},[123,85712,2526],{"class":53707},[123,85714,53714],{"class":129},[123,85716,85717,85719],{"class":125,"line":316},[123,85718,8836],{"class":53707},[123,85720,137],{"class":129},[123,85722,85723,85725,85727,85729],{"class":125,"line":673},[123,85724,57098],{"class":164},[123,85726,147],{"class":129},[123,85728,2799],{"class":164},[123,85730,3760],{"class":129},[123,85732,85733,85735,85737,85739],{"class":125,"line":692},[123,85734,57109],{"class":164},[123,85736,147],{"class":129},[123,85738,2799],{"class":164},[123,85740,3760],{"class":129},[123,85742,85743,85745,85747,85749],{"class":125,"line":713},[123,85744,74996],{"class":164},[123,85746,147],{"class":129},[123,85748,62907],{"class":164},[123,85750,3760],{"class":129},[123,85752,85753],{"class":125,"line":718},[123,85754,4631],{"class":129},[123,85756,85757],{"class":125,"line":1138},[123,85758,232],{"emptyLinePlaceholder":231},[123,85760,85761,85763],{"class":125,"line":1429},[123,85762,64525],{"class":337},[123,85764,137],{"class":129},[123,85766,85767,85769,85771,85773,85775],{"class":125,"line":1439},[123,85768,57174],{"class":164},[123,85770,147],{"class":129},[123,85772,80972],{"class":164},[123,85774,53897],{"class":133},[123,85776,3760],{"class":129},[123,85778,85779,85781,85783,85785,85787,85789],{"class":125,"line":1444},[123,85780,57109],{"class":164},[123,85782,147],{"class":129},[123,85784,259],{"class":164},[123,85786,53897],{"class":133},[123,85788,53961],{"class":164},[123,85790,3760],{"class":129},[123,85792,85793],{"class":125,"line":1453},[123,85794,4631],{"class":129},[123,85796,85797],{"class":125,"line":1458},[123,85798,232],{"emptyLinePlaceholder":231},[123,85800,85801,85803],{"class":125,"line":1476},[123,85802,81023],{"class":337},[123,85804,137],{"class":129},[123,85806,85807,85809,85811,85813,85815],{"class":125,"line":1494},[123,85808,57098],{"class":164},[123,85810,147],{"class":129},[123,85812,3178],{"class":164},[123,85814,53897],{"class":133},[123,85816,3760],{"class":129},[123,85818,85819,85821,85823,85825,85827,85829,85831],{"class":125,"line":1499},[123,85820,64262],{"class":164},[123,85822,147],{"class":129},[123,85824,30542],{"class":164},[123,85826,81078],{"class":164},[123,85828,81081],{"class":164},[123,85830,3297],{"class":133},[123,85832,3760],{"class":129},[123,85834,85835,85837,85839,85841],{"class":125,"line":1517},[123,85836,57412],{"class":164},[123,85838,147],{"class":129},[123,85840,53882],{"class":164},[123,85842,3760],{"class":129},[123,85844,85845,85847,85849,85851,85853,85855,85857],{"class":125,"line":1534},[123,85846,64379],{"class":164},[123,85848,147],{"class":129},[123,85850,2825],{"class":164},[123,85852,53897],{"class":133},[123,85854,53926],{"class":164},[123,85856,64646],{"class":164},[123,85858,3760],{"class":129},[123,85860,85861],{"class":125,"line":1539},[123,85862,4631],{"class":129},[123,85864,85865],{"class":125,"line":2080},[123,85866,232],{"emptyLinePlaceholder":231},[123,85868,85869,85871],{"class":125,"line":2097},[123,85870,81141],{"class":337},[123,85872,137],{"class":129},[123,85874,85875,85877,85879,85881],{"class":125,"line":2114},[123,85876,64427],{"class":164},[123,85878,147],{"class":129},[123,85880,64432],{"class":164},[123,85882,3760],{"class":129},[123,85884,85885,85887,85889,85891],{"class":125,"line":2125},[123,85886,57287],{"class":164},[123,85888,147],{"class":129},[123,85890,64220],{"class":164},[123,85892,3760],{"class":129},[123,85894,85895],{"class":125,"line":2130},[123,85896,4631],{"class":129},[123,85898,85899],{"class":125,"line":5033},[123,85900,232],{"emptyLinePlaceholder":231},[123,85902,85903,85905,85907],{"class":125,"line":5041},[123,85904,81023],{"class":337},[123,85906,58017],{"class":53707},[123,85908,137],{"class":129},[123,85910,85911,85913,85915,85917,85919],{"class":125,"line":5046},[123,85912,57174],{"class":164},[123,85914,147],{"class":129},[123,85916,1068],{"class":164},[123,85918,53897],{"class":133},[123,85920,3760],{"class":129},[123,85922,85923,85925,85927,85929,85931],{"class":125,"line":5052},[123,85924,57188],{"class":164},[123,85926,147],{"class":129},[123,85928,1068],{"class":164},[123,85930,53897],{"class":133},[123,85932,3760],{"class":129},[123,85934,85935,85937,85939,85941,85943],{"class":125,"line":5058},[123,85936,64152],{"class":164},[123,85938,147],{"class":129},[123,85940,2926],{"class":164},[123,85942,53897],{"class":133},[123,85944,3760],{"class":129},[123,85946,85947],{"class":125,"line":5063},[123,85948,4631],{"class":129},[123,85950,85951],{"class":125,"line":10380},[123,85952,232],{"emptyLinePlaceholder":231},[123,85954,85955,85957,85959],{"class":125,"line":10404},[123,85956,81023],{"class":337},[123,85958,64706],{"class":337},[123,85960,137],{"class":129},[123,85962,85963,85965,85967,85969,85971],{"class":125,"line":10409},[123,85964,57174],{"class":164},[123,85966,147],{"class":129},[123,85968,1045],{"class":164},[123,85970,53897],{"class":133},[123,85972,3760],{"class":129},[123,85974,85975],{"class":125,"line":10415},[123,85976,4631],{"class":129},[123,85978,85979],{"class":125,"line":10442},[123,85980,232],{"emptyLinePlaceholder":231},[123,85982,85983,85985,85987,85990],{"class":125,"line":10447},[123,85984,81023],{"class":337},[123,85986,64706],{"class":337},[123,85988,85989],{"class":337}," .tag",[123,85991,137],{"class":129},[123,85993,85994,85996,85998,86000],{"class":125,"line":10453},[123,85995,57412],{"class":164},[123,85997,147],{"class":129},[123,85999,63271],{"class":164},[123,86001,3760],{"class":129},[123,86003,86004,86006,86008,86010,86012],{"class":125,"line":10465},[123,86005,57098],{"class":164},[123,86007,147],{"class":129},[123,86009,2692],{"class":164},[123,86011,53897],{"class":133},[123,86013,3760],{"class":129},[123,86015,86016,86018,86020,86022,86024],{"class":125,"line":10477},[123,86017,57325],{"class":164},[123,86019,147],{"class":129},[123,86021,2215],{"class":164},[123,86023,53897],{"class":133},[123,86025,3760],{"class":129},[123,86027,86028,86030,86032,86034],{"class":125,"line":10489},[123,86029,59818],{"class":164},[123,86031,147],{"class":129},[123,86033,64472],{"class":164},[123,86035,3760],{"class":129},[123,86037,86038],{"class":125,"line":12148},[123,86039,4631],{"class":129},[123,86041,86042],{"class":125,"line":12173},[123,86043,232],{"emptyLinePlaceholder":231},[123,86045,86046,86048,86050],{"class":125,"line":12196},[123,86047,81023],{"class":337},[123,86049,81315],{"class":337},[123,86051,153],{"class":129},[123,86053,86054,86056,86059],{"class":125,"line":12220},[123,86055,81023],{"class":337},[123,86057,86058],{"class":337}," .sub-total",[123,86060,137],{"class":129},[123,86062,86063,86065,86067,86069,86071],{"class":125,"line":12225},[123,86064,57325],{"class":164},[123,86066,147],{"class":129},[123,86068,3252],{"class":164},[123,86070,53897],{"class":133},[123,86072,3760],{"class":129},[123,86074,86075,86077,86079,86081],{"class":125,"line":12230},[123,86076,59818],{"class":164},[123,86078,147],{"class":129},[123,86080,81338],{"class":164},[123,86082,3760],{"class":129},[123,86084,86085,86087,86089,86091],{"class":125,"line":12235},[123,86086,64239],{"class":164},[123,86088,147],{"class":129},[123,86090,2825],{"class":164},[123,86092,3760],{"class":129},[123,86094,86095],{"class":125,"line":12244},[123,86096,4631],{"class":129},[123,86098,86099],{"class":125,"line":12249},[123,86100,232],{"emptyLinePlaceholder":231},[123,86102,86103,86105,86107],{"class":125,"line":12255},[123,86104,81023],{"class":337},[123,86106,81355],{"class":337},[123,86108,153],{"class":129},[123,86110,86111,86113,86116],{"class":125,"line":12276},[123,86112,81023],{"class":337},[123,86114,86115],{"class":337}," .sub-total::before",[123,86117,153],{"class":129},[123,86119,86120,86123],{"class":125,"line":12282},[123,86121,86122],{"class":337},"    .amount::before",[123,86124,137],{"class":129},[123,86126,86127,86129,86131,86133],{"class":125,"line":12296},[123,86128,81362],{"class":164},[123,86130,147],{"class":129},[123,86132,81367],{"class":143},[123,86134,3760],{"class":129},[123,86136,86137,86139,86141,86143,86145],{"class":125,"line":12302},[123,86138,57325],{"class":164},[123,86140,147],{"class":129},[123,86142,2215],{"class":164},[123,86144,53897],{"class":133},[123,86146,3760],{"class":129},[123,86148,86149],{"class":125,"line":12329},[123,86150,4631],{"class":129},[123,86152,86153],{"class":125,"line":12338},[123,86154,232],{"emptyLinePlaceholder":231},[123,86156,86157,86159,86162],{"class":125,"line":12344},[123,86158,81023],{"class":337},[123,86160,86161],{"class":337}," .spec",[123,86163,137],{"class":129},[123,86165,86166,86168,86170,86172],{"class":125,"line":12352},[123,86167,64239],{"class":164},[123,86169,147],{"class":129},[123,86171,2692],{"class":164},[123,86173,3760],{"class":129},[123,86175,86176,86178,86180,86183],{"class":125,"line":12357},[123,86177,59818],{"class":164},[123,86179,147],{"class":129},[123,86181,86182],{"class":164},"#888",[123,86184,3760],{"class":129},[123,86186,86187,86189,86191,86193,86195],{"class":125,"line":19032},[123,86188,57325],{"class":164},[123,86190,147],{"class":129},[123,86192,3152],{"class":164},[123,86194,53897],{"class":133},[123,86196,3760],{"class":129},[123,86198,86199,86201,86203,86205,86207],{"class":125,"line":19038},[123,86200,64402],{"class":164},[123,86202,147],{"class":129},[123,86204,3302],{"class":164},[123,86206,53897],{"class":133},[123,86208,3760],{"class":129},[123,86210,86211],{"class":125,"line":19061},[123,86212,4631],{"class":129},[123,86214,86215],{"class":125,"line":19067},[123,86216,232],{"emptyLinePlaceholder":231},[123,86218,86219,86221,86224],{"class":125,"line":19090},[123,86220,81023],{"class":337},[123,86222,86223],{"class":337}," .count",[123,86225,137],{"class":129},[123,86227,86228,86230,86232,86234],{"class":125,"line":19104},[123,86229,64239],{"class":164},[123,86231,147],{"class":129},[123,86233,2825],{"class":164},[123,86235,3760],{"class":129},[123,86237,86238,86240,86242,86245],{"class":125,"line":19124},[123,86239,59818],{"class":164},[123,86241,147],{"class":129},[123,86243,86244],{"class":164},"#aaa",[123,86246,3760],{"class":129},[123,86248,86249],{"class":125,"line":19130},[123,86250,4631],{"class":129},[123,86252,86253],{"class":125,"line":19141},[123,86254,232],{"emptyLinePlaceholder":231},[123,86256,86257,86259],{"class":125,"line":19164},[123,86258,74875],{"class":337},[123,86260,137],{"class":129},[123,86262,86263,86265,86267,86269,86271],{"class":125,"line":19186},[123,86264,57174],{"class":164},[123,86266,147],{"class":129},[123,86268,80972],{"class":164},[123,86270,53897],{"class":133},[123,86272,3760],{"class":129},[123,86274,86275,86277,86279,86281,86283],{"class":125,"line":19191},[123,86276,57109],{"class":164},[123,86278,147],{"class":129},[123,86280,2799],{"class":164},[123,86282,53961],{"class":164},[123,86284,3760],{"class":129},[123,86286,86287,86289,86291,86293],{"class":125,"line":19197},[123,86288,57412],{"class":164},[123,86290,147],{"class":129},[123,86292,53882],{"class":164},[123,86294,3760],{"class":129},[123,86296,86297,86299,86301,86303],{"class":125,"line":19211},[123,86298,57423],{"class":164},[123,86300,147],{"class":129},[123,86302,53985],{"class":164},[123,86304,3760],{"class":129},[123,86306,86307,86310,86312,86314,86316,86318,86321],{"class":125,"line":19224},[123,86308,86309],{"class":164},"      border-top",[123,86311,147],{"class":129},[123,86313,2825],{"class":164},[123,86315,53897],{"class":133},[123,86317,53926],{"class":164},[123,86319,86320],{"class":164}," #4e4e4e",[123,86322,3760],{"class":129},[123,86324,86325,86327,86329,86331,86333],{"class":125,"line":19229},[123,86326,57098],{"class":164},[123,86328,147],{"class":129},[123,86330,3302],{"class":164},[123,86332,53897],{"class":133},[123,86334,3760],{"class":129},[123,86336,86337],{"class":125,"line":19243},[123,86338,4631],{"class":129},[123,86340,86341],{"class":125,"line":19248},[123,86342,232],{"emptyLinePlaceholder":231},[123,86344,86345,86347,86350],{"class":125,"line":19254},[123,86346,74875],{"class":337},[123,86348,86349],{"class":337}," .amount",[123,86351,137],{"class":129},[123,86353,86354,86356,86358,86360,86362],{"class":125,"line":19259},[123,86355,57325],{"class":164},[123,86357,147],{"class":129},[123,86359,3252],{"class":164},[123,86361,53897],{"class":133},[123,86363,3760],{"class":129},[123,86365,86366,86368,86370,86372],{"class":125,"line":19273},[123,86367,59818],{"class":164},[123,86369,147],{"class":129},[123,86371,81338],{"class":164},[123,86373,3760],{"class":129},[123,86375,86376,86378,86380,86382],{"class":125,"line":19278},[123,86377,64736],{"class":164},[123,86379,147],{"class":129},[123,86381,53894],{"class":164},[123,86383,3760],{"class":129},[123,86385,86386,86388,86390,86392,86394],{"class":125,"line":19283},[123,86387,64152],{"class":164},[123,86389,147],{"class":129},[123,86391,3258],{"class":164},[123,86393,53897],{"class":133},[123,86395,3760],{"class":129},[123,86397,86398],{"class":125,"line":19297},[123,86399,4631],{"class":129},[123,86401,86402,86404,86406],{"class":125,"line":19309},[123,86403,54820],{"class":129},[123,86405,2526],{"class":53707},[123,86407,53714],{"class":129},[123,86409,86410,86412,86414],{"class":125,"line":19314},[123,86411,54190],{"class":129},[123,86413,53741],{"class":53707},[123,86415,53714],{"class":129},[123,86417,86418],{"class":125,"line":19327},[123,86419,232],{"emptyLinePlaceholder":231},[123,86421,86422,86424,86426],{"class":125,"line":19332},[123,86423,3509],{"class":129},[123,86425,54205],{"class":53707},[123,86427,53714],{"class":129},[123,86429,86430,86432,86434,86436,86438,86440],{"class":125,"line":19337},[123,86431,54548],{"class":129},[123,86433,54016],{"class":53707},[123,86435,55889],{"class":337},[123,86437,134],{"class":129},[123,86439,65010],{"class":143},[123,86441,53714],{"class":129},[123,86443,86444,86446,86448],{"class":125,"line":19342},[123,86445,54820],{"class":129},[123,86447,54016],{"class":53707},[123,86449,53714],{"class":129},[123,86451,86452,86454,86456,86458,86460,86462],{"class":125,"line":19355},[123,86453,54548],{"class":129},[123,86455,54016],{"class":53707},[123,86457,55889],{"class":337},[123,86459,134],{"class":129},[123,86461,64982],{"class":143},[123,86463,53714],{"class":129},[123,86465,86466,86468,86470,86473,86475,86477,86479,86481,86483,86485,86487,86489],{"class":125,"line":19360},[123,86467,53748],{"class":129},[123,86469,54016],{"class":53707},[123,86471,86472],{"class":129},">合计：\u003C",[123,86474,123],{"class":53707},[123,86476,55889],{"class":337},[123,86478,134],{"class":129},[123,86480,1824],{"class":143},[123,86482,57717],{"class":129},[123,86484,123],{"class":53707},[123,86486,57717],{"class":129},[123,86488,54016],{"class":53707},[123,86490,53714],{"class":129},[123,86492,86493,86495,86497],{"class":125,"line":35045},[123,86494,54820],{"class":129},[123,86496,54016],{"class":53707},[123,86498,53714],{"class":129},[123,86500,86501,86503,86505],{"class":125,"line":35051},[123,86502,54548],{"class":129},[123,86504,54218],{"class":53707},[123,86506,53714],{"class":129},[123,86508,86509,86511,86513,86515],{"class":125,"line":35057},[123,86510,13653],{"class":133},[123,86512,81775],{"class":164},[123,86514,15995],{"class":133},[123,86516,1587],{"class":129},[123,86518,86519],{"class":125,"line":35063},[123,86520,81784],{"class":129},[123,86522,86523,86525,86527],{"class":125,"line":35069},[123,86524,81789],{"class":129},[123,86526,81792],{"class":143},[123,86528,153],{"class":129},[123,86530,86531,86533,86535],{"class":125,"line":35080},[123,86532,81799],{"class":129},[123,86534,81802],{"class":143},[123,86536,153],{"class":129},[123,86538,86539,86541,86544],{"class":125,"line":35086},[123,86540,81809],{"class":129},[123,86542,86543],{"class":164},"289.9",[123,86545,153],{"class":129},[123,86547,86548,86550,86552],{"class":125,"line":35106},[123,86549,81819],{"class":129},[123,86551,81822],{"class":143},[123,86553,153],{"class":129},[123,86555,86556,86559,86561],{"class":125,"line":35112},[123,86557,86558],{"class":129},"        count: ",[123,86560,2692],{"class":164},[123,86562,153],{"class":129},[123,86564,86565,86568,86571],{"class":125,"line":35123},[123,86566,86567],{"class":129},"        spec: { color: ",[123,86569,86570],{"class":143},"'白色'",[123,86572,58006],{"class":129},[123,86574,86575],{"class":125,"line":35129},[123,86576,80290],{"class":129},[123,86578,86579],{"class":125,"line":35135},[123,86580,81784],{"class":129},[123,86582,86583,86585,86587],{"class":125,"line":35141},[123,86584,81789],{"class":129},[123,86586,81883],{"class":143},[123,86588,153],{"class":129},[123,86590,86591,86593,86595],{"class":125,"line":35147},[123,86592,81799],{"class":129},[123,86594,81892],{"class":143},[123,86596,153],{"class":129},[123,86598,86599,86601,86604],{"class":125,"line":35153},[123,86600,81809],{"class":129},[123,86602,86603],{"class":164},"109.8",[123,86605,153],{"class":129},[123,86607,86608,86610,86612],{"class":125,"line":35159},[123,86609,81819],{"class":129},[123,86611,81910],{"class":143},[123,86613,153],{"class":129},[123,86615,86616,86618,86620],{"class":125,"line":35165},[123,86617,86558],{"class":129},[123,86619,2686],{"class":164},[123,86621,153],{"class":129},[123,86623,86624,86627,86629,86631,86633],{"class":125,"line":35185},[123,86625,86626],{"class":129},"        spec: { size: ",[123,86628,84300],{"class":143},[123,86630,57866],{"class":129},[123,86632,84305],{"class":143},[123,86634,58006],{"class":129},[123,86636,86637],{"class":125,"line":35191},[123,86638,80290],{"class":129},[123,86640,86641],{"class":125,"line":35207},[123,86642,81784],{"class":129},[123,86644,86645,86647,86649],{"class":125,"line":35213},[123,86646,81789],{"class":129},[123,86648,81927],{"class":143},[123,86650,153],{"class":129},[123,86652,86653,86655,86657],{"class":125,"line":35227},[123,86654,81799],{"class":129},[123,86656,81936],{"class":143},[123,86658,153],{"class":129},[123,86660,86661,86663,86666],{"class":125,"line":35233},[123,86662,81809],{"class":129},[123,86664,86665],{"class":164},"488",[123,86667,153],{"class":129},[123,86669,86670,86672,86674],{"class":125,"line":35248},[123,86671,81819],{"class":129},[123,86673,81954],{"class":143},[123,86675,153],{"class":129},[123,86677,86678,86680,86682],{"class":125,"line":35254},[123,86679,86558],{"class":129},[123,86681,2825],{"class":164},[123,86683,153],{"class":129},[123,86685,86686,86688,86691,86694,86697],{"class":125,"line":35263},[123,86687,86567],{"class":129},[123,86689,86690],{"class":143},"'青色'",[123,86692,86693],{"class":129},", sum: ",[123,86695,86696],{"class":143},"'一大四小'",[123,86698,58006],{"class":129},[123,86700,86701],{"class":125,"line":35269},[123,86702,80290],{"class":129},[123,86704,86705],{"class":125,"line":35278},[123,86706,81784],{"class":129},[123,86708,86709,86711,86713],{"class":125,"line":35284},[123,86710,81789],{"class":129},[123,86712,81971],{"class":143},[123,86714,153],{"class":129},[123,86716,86717,86719,86721],{"class":125,"line":35290},[123,86718,81799],{"class":129},[123,86720,81980],{"class":143},[123,86722,153],{"class":129},[123,86724,86725,86727,86730],{"class":125,"line":35299},[123,86726,81809],{"class":129},[123,86728,86729],{"class":164},"139",[123,86731,153],{"class":129},[123,86733,86734,86736,86738],{"class":125,"line":35305},[123,86735,81819],{"class":129},[123,86737,81998],{"class":143},[123,86739,153],{"class":129},[123,86741,86742,86744,86746],{"class":125,"line":35316},[123,86743,86558],{"class":129},[123,86745,2825],{"class":164},[123,86747,153],{"class":129},[123,86749,86750,86752,86755,86757,86760],{"class":125,"line":35322},[123,86751,86626],{"class":129},[123,86753,86754],{"class":143},"'小号'",[123,86756,57866],{"class":129},[123,86758,86759],{"class":143},"'紫色'",[123,86761,57872],{"class":129},[123,86763,86764,86767],{"class":125,"line":35341},[123,86765,86766],{"class":129},"        gift: ",[123,86768,86769],{"class":143},"'50g茶叶,清洗球'\n",[123,86771,86772],{"class":125,"line":35347},[123,86773,54801],{"class":129},[123,86775,86776],{"class":125,"line":35358},[123,86777,55512],{"class":129},[123,86779,86780],{"class":125,"line":35364},[123,86781,86782],{"class":2673},"    \u002F\u002F  1.根据数据渲染页面\n",[123,86784,86785,86787,86789,86791,86793,86795,86797,86799,86801,86803,86805,86807],{"class":125,"line":35384},[123,86786,54810],{"class":129},[123,86788,56802],{"class":337},[123,86790,1315],{"class":129},[123,86792,82298],{"class":143},[123,86794,76649],{"class":129},[123,86796,134],{"class":133},[123,86798,82445],{"class":129},[123,86800,76444],{"class":337},[123,86802,1315],{"class":129},[123,86804,82193],{"class":279},[123,86806,82196],{"class":133},[123,86808,137],{"class":129},[123,86810,86811],{"class":125,"line":35400},[123,86812,86813],{"class":2673},"      \u002F\u002F 对象解构\n",[123,86815,86816,86818,86820,86822,86824,86826,86828,86831,86833,86835,86837,86840,86842,86845,86847,86849],{"class":125,"line":35406},[123,86817,60630],{"class":133},[123,86819,82205],{"class":129},[123,86821,82217],{"class":164},[123,86823,251],{"class":129},[123,86825,663],{"class":164},[123,86827,251],{"class":129},[123,86829,86830],{"class":164},"count",[123,86832,251],{"class":129},[123,86834,82212],{"class":164},[123,86836,251],{"class":129},[123,86838,86839],{"class":164},"spec",[123,86841,251],{"class":129},[123,86843,86844],{"class":164},"gift",[123,86846,82220],{"class":129},[123,86848,134],{"class":133},[123,86850,82225],{"class":129},[123,86852,86853],{"class":125,"line":35420},[123,86854,86855],{"class":2673},"      \u002F\u002F 规格文字模块处理\n",[123,86857,86858,86860,86863,86865,86867,86869,86871,86873,86875,86877],{"class":125,"line":35426},[123,86859,60630],{"class":133},[123,86861,86862],{"class":164}," text",[123,86864,15995],{"class":133},[123,86866,84335],{"class":129},[123,86868,84338],{"class":337},[123,86870,84341],{"class":129},[123,86872,76623],{"class":337},[123,86874,1315],{"class":129},[123,86876,84348],{"class":143},[123,86878,288],{"class":129},[123,86880,86881],{"class":125,"line":35432},[123,86882,86883],{"class":2673},"      \u002F\u002F 处理赠品模块\n",[123,86885,86886,86888,86890,86892,86895,86897,86899,86901,86903,86906,86908,86910,86912,86914,86916,86919,86921,86924,86926,86928,86930,86932,86934,86936],{"class":125,"line":35443},[123,86887,60630],{"class":133},[123,86889,76319],{"class":164},[123,86891,15995],{"class":133},[123,86893,86894],{"class":129}," gift ",[123,86896,3585],{"class":133},[123,86898,85509],{"class":129},[123,86900,85512],{"class":337},[123,86902,1315],{"class":129},[123,86904,86905],{"class":143},"','",[123,86907,33241],{"class":129},[123,86909,76444],{"class":337},[123,86911,1315],{"class":129},[123,86913,82193],{"class":279},[123,86915,82196],{"class":133},[123,86917,86918],{"class":143}," `\u003Cspan class=\"tag\">【赠品】${",[123,86920,82193],{"class":129},[123,86922,86923],{"class":143},"}\u003C\u002Fspan>`",[123,86925,33241],{"class":129},[123,86927,76623],{"class":337},[123,86929,1315],{"class":129},[123,86931,76628],{"class":143},[123,86933,1336],{"class":129},[123,86935,3460],{"class":133},[123,86937,72504],{"class":143},[123,86939,86940],{"class":125,"line":35449},[123,86941,86942],{"class":2673},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[123,86944,86945,86947,86950,86952,86955,86957,86959,86961,86964,86966,86968,86970,86973,86975,86977],{"class":125,"line":35455},[123,86946,60630],{"class":133},[123,86948,86949],{"class":164}," subtotal",[123,86951,15995],{"class":133},[123,86953,86954],{"class":129}," ((price ",[123,86956,3060],{"class":133},[123,86958,8187],{"class":164},[123,86960,8951],{"class":133},[123,86962,86963],{"class":129}," count) ",[123,86965,3187],{"class":133},[123,86967,8187],{"class":164},[123,86969,33241],{"class":129},[123,86971,86972],{"class":337},"toFixed",[123,86974,1315],{"class":129},[123,86976,2692],{"class":164},[123,86978,288],{"class":129},[123,86980,86981],{"class":125,"line":35465},[123,86982,232],{"emptyLinePlaceholder":231},[123,86984,86985,86987],{"class":125,"line":35471},[123,86986,76382],{"class":133},[123,86988,72568],{"class":143},[123,86990,86991],{"class":125,"line":35482},[123,86992,86993],{"class":143},"        \u003Cdiv class=\"item\">\n",[123,86995,86996,86999,87001],{"class":125,"line":35488},[123,86997,86998],{"class":143},"          \u003Cimg src=\"${",[123,87000,82217],{"class":129},[123,87002,82249],{"class":143},[123,87004,87005,87008,87010,87013,87015],{"class":125,"line":35498},[123,87006,87007],{"class":143},"          \u003Cp class=\"name\">${",[123,87009,663],{"class":129},[123,87011,87012],{"class":143},"}${",[123,87014,3769],{"class":129},[123,87016,82259],{"class":143},[123,87018,87019,87022,87024],{"class":125,"line":35503},[123,87020,87021],{"class":143},"          \u003Cp class=\"spec\">${",[123,87023,7621],{"class":129},[123,87025,82259],{"class":143},[123,87027,87028,87031,87033,87035,87037,87039,87041,87043],{"class":125,"line":35509},[123,87029,87030],{"class":143},"          \u003Cp class=\"price\">${",[123,87032,82212],{"class":129},[123,87034,3161],{"class":143},[123,87036,86972],{"class":337},[123,87038,1315],{"class":143},[123,87040,2692],{"class":164},[123,87042,3035],{"class":143},[123,87044,82259],{"class":143},[123,87046,87047,87050,87052],{"class":125,"line":35558},[123,87048,87049],{"class":143},"          \u003Cp class=\"count\">x${",[123,87051,86830],{"class":129},[123,87053,82259],{"class":143},[123,87055,87056,87059,87062],{"class":125,"line":35605},[123,87057,87058],{"class":143},"          \u003Cp class=\"sub-total\">${",[123,87060,87061],{"class":129},"subtotal",[123,87063,82259],{"class":143},[123,87065,87066],{"class":125,"line":35610},[123,87067,87068],{"class":143},"        \u003C\u002Fdiv> \n",[123,87070,87071],{"class":125,"line":35616},[123,87072,87073],{"class":143},"             `\n",[123,87075,87076,87079,87081,87083,87085],{"class":125,"line":35635},[123,87077,87078],{"class":129},"    }).",[123,87080,76623],{"class":337},[123,87082,1315],{"class":129},[123,87084,76628],{"class":143},[123,87086,288],{"class":129},[123,87088,87089],{"class":125,"line":35641},[123,87090,87091],{"class":2673},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[123,87093,87094,87096,87098,87100,87102,87105,87107,87110,87112,87114,87116,87119,87122,87124,87127,87129,87131,87133,87136,87138,87140,87142,87144],{"class":125,"line":35660},[123,87095,13653],{"class":133},[123,87097,65186],{"class":164},[123,87099,15995],{"class":133},[123,87101,82445],{"class":129},[123,87103,87104],{"class":337},"reduce",[123,87106,4820],{"class":129},[123,87108,87109],{"class":279},"prev",[123,87111,251],{"class":129},[123,87113,82193],{"class":279},[123,87115,1336],{"class":129},[123,87117,87118],{"class":133},"=>",[123,87120,87121],{"class":129}," prev ",[123,87123,3086],{"class":133},[123,87125,87126],{"class":129}," (item.price ",[123,87128,3060],{"class":133},[123,87130,8187],{"class":164},[123,87132,8951],{"class":133},[123,87134,87135],{"class":129}," item.count) ",[123,87137,3187],{"class":133},[123,87139,8187],{"class":164},[123,87141,251],{"class":129},[123,87143,2799],{"class":164},[123,87145,288],{"class":129},[123,87147,87148,87150,87152,87154,87157,87159,87161,87164,87166,87168,87170],{"class":125,"line":35666},[123,87149,54810],{"class":129},[123,87151,56802],{"class":337},[123,87153,1315],{"class":129},[123,87155,87156],{"class":143},"'.amount'",[123,87158,76649],{"class":129},[123,87160,134],{"class":133},[123,87162,87163],{"class":129}," total.",[123,87165,86972],{"class":337},[123,87167,1315],{"class":129},[123,87169,2692],{"class":164},[123,87171,288],{"class":129},[123,87173,87174,87176,87178],{"class":125,"line":35672},[123,87175,54820],{"class":129},[123,87177,54218],{"class":53707},[123,87179,53714],{"class":129},[123,87181,87182,87184,87186],{"class":125,"line":35682},[123,87183,54190],{"class":129},[123,87185,54205],{"class":53707},[123,87187,53714],{"class":129},[123,87189,87190],{"class":125,"line":35687},[123,87191,232],{"emptyLinePlaceholder":231},[123,87193,87194,87196,87198],{"class":125,"line":35693},[123,87195,54190],{"class":129},[123,87197,53042],{"class":53707},[123,87199,53714],{"class":129},[14,87201,87203],{"id":87202},"_411-编程思想","4.11 编程思想",[2587,87205,87207],{"id":87206},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87209,87210,87213],{},[2759,87211,87212],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87215,87216],{},"调用就可以了",[19,87218,87219],{},[3929,87220],{"alt":118,"src":87221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[2587,87223,87225],{"id":87224},"_4112-面向对象","4.11.2 面向对象",[19,87227,87228],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87230,87231],{},[3929,87232],{"alt":118,"src":87233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87235,87236],{},"面向对象的特性：",[3606,87238,87239,87242,87245],{},[29,87240,87241],{},"封装性",[29,87243,87244],{},"继承性",[29,87246,87247],{},"多态性",[2587,87249,87251],{"id":87250},"_4113-两者比较","4.11.3 两者比较",[19,87253,87254],{},[3929,87255],{"alt":118,"src":87256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87258,87260],{"id":87259},"_412-构造函数回顾","4.12 构造函数回顾",[19,87262,87263],{},[3929,87264],{"alt":118,"src":87265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87267,87268],{},[3929,87269],{"alt":118,"src":87270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87272,87273],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87275,87276],{},[3929,87277],{"alt":118,"src":87278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87280,87282],{"id":87281},"_413-原型","4.13 原型",[2587,87284,87286],{"id":87285},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87288,87289],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87291,87292],{},[3929,87293],{"alt":118,"src":87294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87296,87297],{},[3929,87298],{"alt":118,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87301,87302],{},"原型是构造函数的属性，它也是一个对象",[19,87304,87305],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87307,87308],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[113,87310,87312],{"className":55470,"code":87311,"language":55472,"meta":118,"style":118},"\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",[120,87313,87314,87322,87327,87335,87340,87345,87350,87355,87360,87364,87368,87372,87377,87382,87386,87391,87396,87401,87406,87411,87415,87423],{"__ignoreMap":118},[123,87315,87316,87318,87320],{"class":125,"line":126},[123,87317,3509],{"class":129},[123,87319,54205],{"class":53707},[123,87321,53714],{"class":129},[123,87323,87324],{"class":125,"line":140},[123,87325,87326],{"class":2673},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[123,87328,87329,87331,87333],{"class":125,"line":156},[123,87330,54548],{"class":129},[123,87332,54218],{"class":53707},[123,87334,53714],{"class":129},[123,87336,87337],{"class":125,"line":168},[123,87338,87339],{"class":129},"    function Star(uname, age) {\n",[123,87341,87342],{"class":125,"line":268},[123,87343,87344],{"class":129},"      this.uname = uname,\n",[123,87346,87347],{"class":125,"line":291},[123,87348,87349],{"class":129},"        this.age = age\n",[123,87351,87352],{"class":125,"line":300},[123,87353,87354],{"class":129},"      \u002F\u002F this.sing = function () {\n",[123,87356,87357],{"class":125,"line":305},[123,87358,87359],{"class":129},"      \u002F\u002F   console.log('唱歌')\n",[123,87361,87362],{"class":125,"line":316},[123,87363,232],{"emptyLinePlaceholder":231},[123,87365,87366],{"class":125,"line":673},[123,87367,62439],{"class":129},[123,87369,87370],{"class":125,"line":692},[123,87371,4631],{"class":129},[123,87373,87374],{"class":125,"line":713},[123,87375,87376],{"class":129},"    Star.prototype.sing = function () {\n",[123,87378,87379],{"class":125,"line":718},[123,87380,87381],{"class":129},"      console.log('唱歌')\n",[123,87383,87384],{"class":125,"line":1138},[123,87385,4631],{"class":129},[123,87387,87388],{"class":125,"line":1429},[123,87389,87390],{"class":129},"    \u002F\u002F console.dir(Star.prototype)\n",[123,87392,87393],{"class":125,"line":1439},[123,87394,87395],{"class":129},"    const pink = new Star('pink', 18)\n",[123,87397,87398],{"class":125,"line":1444},[123,87399,87400],{"class":129},"    const red = new Star('red', 20)\n",[123,87402,87403],{"class":125,"line":1453},[123,87404,87405],{"class":129},"    pink.sing()\n",[123,87407,87408],{"class":125,"line":1458},[123,87409,87410],{"class":129},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[123,87412,87413],{"class":125,"line":1476},[123,87414,232],{"emptyLinePlaceholder":231},[123,87416,87417,87419,87421],{"class":125,"line":1494},[123,87418,54820],{"class":129},[123,87420,54218],{"class":53707},[123,87422,53714],{"class":129},[123,87424,87425,87427,87429],{"class":125,"line":1499},[123,87426,54190],{"class":129},[123,87428,54205],{"class":53707},[123,87430,53714],{"class":129},[19,87432,87433],{},[3929,87434],{"alt":118,"src":87435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[113,87437,87439],{"className":55470,"code":87438,"language":55472,"meta":118,"style":118},"\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",[120,87440,87441,87449,87457,87462,87467,87472,87477,87481,87486,87491,87496,87500,87505,87509,87513,87518,87522,87530],{"__ignoreMap":118},[123,87442,87443,87445,87447],{"class":125,"line":126},[123,87444,3509],{"class":129},[123,87446,54205],{"class":53707},[123,87448,53714],{"class":129},[123,87450,87451,87453,87455],{"class":125,"line":140},[123,87452,54548],{"class":129},[123,87454,54218],{"class":53707},[123,87456,53714],{"class":129},[123,87458,87459],{"class":125,"line":156},[123,87460,87461],{"class":129},"    let that\n",[123,87463,87464],{"class":125,"line":168},[123,87465,87466],{"class":129},"    function Star(uname) {\n",[123,87468,87469],{"class":125,"line":268},[123,87470,87471],{"class":129},"      this.uname = uname\n",[123,87473,87474],{"class":125,"line":291},[123,87475,87476],{"class":129},"      that = this\n",[123,87478,87479],{"class":125,"line":300},[123,87480,4631],{"class":129},[123,87482,87483],{"class":125,"line":305},[123,87484,87485],{"class":129},"    \u002F\u002F 实例对象是 ldh\n",[123,87487,87488],{"class":125,"line":316},[123,87489,87490],{"class":129},"    const ldh = new Star('刘德华')\n",[123,87492,87493],{"class":125,"line":673},[123,87494,87495],{"class":129},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[123,87497,87498],{"class":125,"line":692},[123,87499,232],{"emptyLinePlaceholder":231},[123,87501,87502],{"class":125,"line":713},[123,87503,87504],{"class":129},"    Star.sing = function () {\n",[123,87506,87507],{"class":125,"line":718},[123,87508,87381],{"class":129},[123,87510,87511],{"class":125,"line":1138},[123,87512,4631],{"class":129},[123,87514,87515],{"class":125,"line":1429},[123,87516,87517],{"class":129},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[123,87519,87520],{"class":125,"line":1439},[123,87521,232],{"emptyLinePlaceholder":231},[123,87523,87524,87526,87528],{"class":125,"line":1444},[123,87525,54820],{"class":129},[123,87527,54218],{"class":53707},[123,87529,53714],{"class":129},[123,87531,87532,87534,87536],{"class":125,"line":1453},[123,87533,54190],{"class":129},[123,87535,54205],{"class":53707},[123,87537,53714],{"class":129},[19,87539,87540],{},"构造函数的this指向的是实例对象；",[19,87542,87543],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[2587,87545,87547],{"id":87546},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87549,87550],{},[3929,87551],{"alt":118,"src":87552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[113,87554,87556],{"className":55470,"code":87555,"language":55472,"meta":118,"style":118},"\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",[120,87557,87558,87566,87574,87579,87584,87589,87594,87599,87604,87609,87614,87619,87624,87628,87633,87638,87643,87648,87652,87657,87662,87667,87672,87676,87681,87686,87691,87696,87700,87705,87709,87717],{"__ignoreMap":118},[123,87559,87560,87562,87564],{"class":125,"line":126},[123,87561,3509],{"class":129},[123,87563,54205],{"class":53707},[123,87565,53714],{"class":129},[123,87567,87568,87570,87572],{"class":125,"line":140},[123,87569,54548],{"class":129},[123,87571,54218],{"class":53707},[123,87573,53714],{"class":129},[123,87575,87576],{"class":125,"line":156},[123,87577,87578],{"class":129},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[123,87580,87581],{"class":125,"line":168},[123,87582,87583],{"class":129},"    const arr = [1, 2, 3]\n",[123,87585,87586],{"class":125,"line":268},[123,87587,87588],{"class":129},"    \u002F\u002F 自己定义数组的扩展方法\n",[123,87590,87591],{"class":125,"line":291},[123,87592,87593],{"class":129},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[123,87595,87596],{"class":125,"line":300},[123,87597,87598],{"class":129},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[123,87600,87601],{"class":125,"line":305},[123,87602,87603],{"class":129},"    \u002F\u002F ①.最大值\n",[123,87605,87606],{"class":125,"line":316},[123,87607,87608],{"class":129},"    Array.prototype.max = function () {\n",[123,87610,87611],{"class":125,"line":673},[123,87612,87613],{"class":129},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[123,87615,87616],{"class":125,"line":692},[123,87617,87618],{"class":129},"      return Math.max(...this)\n",[123,87620,87621],{"class":125,"line":713},[123,87622,87623],{"class":129},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[123,87625,87626],{"class":125,"line":718},[123,87627,4631],{"class":129},[123,87629,87630],{"class":125,"line":1138},[123,87631,87632],{"class":129},"    console.log(arr.max())\n",[123,87634,87635],{"class":125,"line":1429},[123,87636,87637],{"class":129},"    \u002F\u002F ②最小值\n",[123,87639,87640],{"class":125,"line":1439},[123,87641,87642],{"class":129},"    Array.prototype.min = function () {\n",[123,87644,87645],{"class":125,"line":1444},[123,87646,87647],{"class":129},"      return Math.min(...this)\n",[123,87649,87650],{"class":125,"line":1453},[123,87651,4631],{"class":129},[123,87653,87654],{"class":125,"line":1458},[123,87655,87656],{"class":129},"    console.log(arr.min())\n",[123,87658,87659],{"class":125,"line":1476},[123,87660,87661],{"class":129},"    \u002F\u002F③求和\n",[123,87663,87664],{"class":125,"line":1494},[123,87665,87666],{"class":129},"    Array.prototype.sum = function () {\n",[123,87668,87669],{"class":125,"line":1499},[123,87670,87671],{"class":129},"      return this.reduce((prev, current) => prev + current, 0)\n",[123,87673,87674],{"class":125,"line":1517},[123,87675,4631],{"class":129},[123,87677,87678],{"class":125,"line":1534},[123,87679,87680],{"class":129},"    console.log(arr.sum())\n",[123,87682,87683],{"class":125,"line":1539},[123,87684,87685],{"class":129},"    \u002F\u002F ③排序\n",[123,87687,87688],{"class":125,"line":2080},[123,87689,87690],{"class":129},"    Array.prototype.rever = function () {\n",[123,87692,87693],{"class":125,"line":2097},[123,87694,87695],{"class":129},"      return this.reverse()\n",[123,87697,87698],{"class":125,"line":2114},[123,87699,4631],{"class":129},[123,87701,87702],{"class":125,"line":2125},[123,87703,87704],{"class":129},"    console.log(arr.rever())\n",[123,87706,87707],{"class":125,"line":2130},[123,87708,232],{"emptyLinePlaceholder":231},[123,87710,87711,87713,87715],{"class":125,"line":5033},[123,87712,54820],{"class":129},[123,87714,54218],{"class":53707},[123,87716,53714],{"class":129},[123,87718,87719,87721,87723],{"class":125,"line":5041},[123,87720,54190],{"class":129},[123,87722,54205],{"class":53707},[123,87724,53714],{"class":129},[19,87726,87727],{},[3929,87728],{"alt":118,"src":87729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[2587,87731,87733],{"id":87732},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87735,87736],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87738,87739],{},[3929,87740],{"alt":118,"src":87741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[113,87743,87745],{"className":55470,"code":87744,"language":55472,"meta":118,"style":118},"\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",[120,87746,87747,87755,87763,87768,87773,87777,87782,87787,87792,87800],{"__ignoreMap":118},[123,87748,87749,87751,87753],{"class":125,"line":126},[123,87750,3509],{"class":129},[123,87752,54205],{"class":53707},[123,87754,53714],{"class":129},[123,87756,87757,87759,87761],{"class":125,"line":140},[123,87758,54548],{"class":129},[123,87760,54218],{"class":53707},[123,87762,53714],{"class":129},[123,87764,87765],{"class":125,"line":156},[123,87766,87767],{"class":129},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[123,87769,87770],{"class":125,"line":168},[123,87771,87772],{"class":129},"    function Star() {\n",[123,87774,87775],{"class":125,"line":268},[123,87776,4631],{"class":129},[123,87778,87779],{"class":125,"line":291},[123,87780,87781],{"class":129},"    const ldh = new Star()\n",[123,87783,87784],{"class":125,"line":300},[123,87785,87786],{"class":129},"    console.log(Star.prototype)\n",[123,87788,87789],{"class":125,"line":305},[123,87790,87791],{"class":129},"    console.log(Star.prototype.constructor === Star)\n",[123,87793,87794,87796,87798],{"class":125,"line":316},[123,87795,54820],{"class":129},[123,87797,54218],{"class":53707},[123,87799,53714],{"class":129},[123,87801,87802,87804,87806],{"class":125,"line":673},[123,87803,54190],{"class":129},[123,87805,54205],{"class":53707},[123,87807,53714],{"class":129},[19,87809,87810],{},[3929,87811],{"alt":118,"src":87812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87814,87815],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[113,87817,87819],{"className":55470,"code":87818,"language":55472,"meta":118,"style":118},"  \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",[120,87820,87821,87829,87833,87837,87841,87846,87851,87856,87860,87865,87870,87875,87880,87885,87890,87894,87898,87903,87908,87913,87917,87922,87927,87931,87935,87939],{"__ignoreMap":118},[123,87822,87823,87825,87827],{"class":125,"line":126},[123,87824,54548],{"class":129},[123,87826,54218],{"class":53707},[123,87828,53714],{"class":129},[123,87830,87831],{"class":125,"line":140},[123,87832,87767],{"class":129},[123,87834,87835],{"class":125,"line":156},[123,87836,87772],{"class":129},[123,87838,87839],{"class":125,"line":168},[123,87840,4631],{"class":129},[123,87842,87843],{"class":125,"line":268},[123,87844,87845],{"class":129},"    \u002F\u002F const ldh = new Star()\n",[123,87847,87848],{"class":125,"line":291},[123,87849,87850],{"class":129},"    \u002F\u002F console.log(Star.prototype)\n",[123,87852,87853],{"class":125,"line":300},[123,87854,87855],{"class":129},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[123,87857,87858],{"class":125,"line":305},[123,87859,232],{"emptyLinePlaceholder":231},[123,87861,87862],{"class":125,"line":316},[123,87863,87864],{"class":129},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[123,87866,87867],{"class":125,"line":673},[123,87868,87869],{"class":129},"    \u002F\u002F Star.prototype.sing = function () {\n",[123,87871,87872],{"class":125,"line":692},[123,87873,87874],{"class":129},"    \u002F\u002F   console.log('唱歌')\n",[123,87876,87877],{"class":125,"line":713},[123,87878,87879],{"class":129},"    \u002F\u002F }\n",[123,87881,87882],{"class":125,"line":718},[123,87883,87884],{"class":129},"    \u002F\u002F Star.prototype.dance = function () {\n",[123,87886,87887],{"class":125,"line":1138},[123,87888,87889],{"class":129},"    \u002F\u002F   console.log('跳舞')\n",[123,87891,87892],{"class":125,"line":1429},[123,87893,87879],{"class":129},[123,87895,87896],{"class":125,"line":1439},[123,87897,87786],{"class":129},[123,87899,87900],{"class":125,"line":1444},[123,87901,87902],{"class":129},"    Star.prototype = {\n",[123,87904,87905],{"class":125,"line":1453},[123,87906,87907],{"class":129},"      sing: function () {\n",[123,87909,87910],{"class":125,"line":1458},[123,87911,87912],{"class":129},"        console.log('唱歌')\n",[123,87914,87915],{"class":125,"line":1476},[123,87916,80290],{"class":129},[123,87918,87919],{"class":125,"line":1494},[123,87920,87921],{"class":129},"      dance: function () {\n",[123,87923,87924],{"class":125,"line":1499},[123,87925,87926],{"class":129},"        console.log('跳舞')\n",[123,87928,87929],{"class":125,"line":1517},[123,87930,54801],{"class":129},[123,87932,87933],{"class":125,"line":1534},[123,87934,4631],{"class":129},[123,87936,87937],{"class":125,"line":1539},[123,87938,87786],{"class":129},[123,87940,87941,87943,87945],{"class":125,"line":2080},[123,87942,54820],{"class":129},[123,87944,54218],{"class":53707},[123,87946,53714],{"class":129},[19,87948,87949],{},"进行输出结果后会发现：",[19,87951,87952],{},[3929,87953],{"alt":118,"src":87954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87956,87957],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87959,87960],{},"所以，要重新指回创造这个原型对象的构造函数",[113,87962,87964],{"className":73613,"code":87963,"language":73615,"meta":118,"style":118},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[120,87965,87966,87980,87985,87990,88001,88014,88019,88030,88044,88048],{"__ignoreMap":118},[123,87967,87968,87971,87973,87976,87978],{"class":125,"line":126},[123,87969,87970],{"class":164},"Star",[123,87972,3161],{"class":129},[123,87974,87975],{"class":164},"prototype",[123,87977,15995],{"class":133},[123,87979,137],{"class":129},[123,87981,87982],{"class":125,"line":140},[123,87983,87984],{"class":2673},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[123,87986,87987],{"class":125,"line":156},[123,87988,87989],{"class":129},"  constructor: Star,\n",[123,87991,87992,87995,87997,87999],{"class":125,"line":168},[123,87993,87994],{"class":337},"  sing",[123,87996,147],{"class":129},[123,87998,56852],{"class":133},[123,88000,56855],{"class":129},[123,88002,88003,88005,88007,88009,88012],{"class":125,"line":268},[123,88004,76153],{"class":129},[123,88006,60649],{"class":337},[123,88008,1315],{"class":129},[123,88010,88011],{"class":143},"'唱歌'",[123,88013,288],{"class":129},[123,88015,88016],{"class":125,"line":291},[123,88017,88018],{"class":129},"   },\n",[123,88020,88021,88024,88026,88028],{"class":125,"line":300},[123,88022,88023],{"class":337},"   dance",[123,88025,147],{"class":129},[123,88027,56852],{"class":133},[123,88029,56855],{"class":129},[123,88031,88032,88035,88037,88039,88042],{"class":125,"line":305},[123,88033,88034],{"class":129},"     console.",[123,88036,60649],{"class":337},[123,88038,1315],{"class":129},[123,88040,88041],{"class":143},"'跳舞'",[123,88043,288],{"class":129},[123,88045,88046],{"class":125,"line":316},[123,88047,6748],{"class":129},[123,88049,88050],{"class":125,"line":673},[123,88051,171],{"class":129},[19,88053,88054],{},[3929,88055],{"alt":118,"src":88056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,88058,88059],{},"总结1：",[19,88061,88062],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,88064,88065],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,88067,88068],{},"constructor指的是他的来源",[19,88070,88071],{},[3929,88072],{"alt":118,"src":88073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,88075,88076],{},[3929,88077],{"alt":118,"src":88078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,88080,88081],{},"总结2：",[19,88083,88084],{},[3929,88085],{"alt":118,"src":88086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,88088,88089],{},[3929,88090],{"alt":118,"src":88091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,88093,88094],{},[3929,88095],{"alt":118,"src":88096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[2587,88098,88100],{"id":88099},"_4134-对象原型","4.13.4 对象原型",[19,88102,88103],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,88105,88106],{},"对象原型就是__proto__这个属性",[19,88108,88109],{},[3929,88110],{"alt":118,"src":88111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,88113,88114],{},[3929,88115],{"alt":118,"src":88116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,88118,88119],{},[3929,88120],{"alt":118,"src":88121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,88123,88124],{},[3929,88125],{"alt":118,"src":88126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[113,88128,88130],{"className":55470,"code":88129,"language":55472,"meta":118,"style":118},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[120,88131,88132,88140,88148,88152,88156,88160,88165,88173],{"__ignoreMap":118},[123,88133,88134,88136,88138],{"class":125,"line":126},[123,88135,3509],{"class":129},[123,88137,54205],{"class":53707},[123,88139,53714],{"class":129},[123,88141,88142,88144,88146],{"class":125,"line":140},[123,88143,54548],{"class":129},[123,88145,54218],{"class":53707},[123,88147,53714],{"class":129},[123,88149,88150],{"class":125,"line":156},[123,88151,87772],{"class":129},[123,88153,88154],{"class":125,"line":168},[123,88155,4631],{"class":129},[123,88157,88158],{"class":125,"line":268},[123,88159,87781],{"class":129},[123,88161,88162],{"class":125,"line":291},[123,88163,88164],{"class":129},"    console.log(ldh)\n",[123,88166,88167,88169,88171],{"class":125,"line":300},[123,88168,54820],{"class":129},[123,88170,54218],{"class":53707},[123,88172,53714],{"class":129},[123,88174,88175,88177,88179],{"class":125,"line":305},[123,88176,54190],{"class":129},[123,88178,54205],{"class":53707},[123,88180,53714],{"class":129},[19,88182,88183],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,88185,88186],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88188,88189],{},[3929,88190],{"alt":118,"src":88191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88193,88194],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88196,88197],{},"对象原型指向原型对象",[19,88199,88200],{},[3929,88201],{"alt":118,"src":88202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88204,88205],{},[3929,88206],{"alt":118,"src":88207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88209,88210],{},[3929,88211],{"alt":118,"src":88212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[2587,88214,88216],{"id":88215},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88218,88219],{},[3929,88220],{"alt":118,"src":88221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,88223,88224,88227,88230,88233],{},[29,88225,88226],{},"构造函数通过new的形式实例化得到实例对象",[29,88228,88229],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,88231,88232],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,88234,88235],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88237,88238],{},[3929,88239],{"alt":118,"src":88240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88242,88243],{},"题目梳理：",[19,88245,88246],{},[3929,88247],{"alt":118,"src":88248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[2587,88250,88252],{"id":88251},"_4136-原型继承","4.13.6 原型继承",[19,88254,88255],{},[3929,88256],{"alt":118,"src":88257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88259,88260],{},[3929,88261],{"alt":118,"src":88262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88264,88265],{},[3929,88266],{"alt":118,"src":88267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88269,88270],{},[3929,88271],{"alt":118,"src":88272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88274,88275],{},[3929,88276],{"alt":118,"src":88277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88279,88280],{},[3929,88281],{"alt":118,"src":88282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88284,88285],{},[3929,88286],{"alt":118,"src":88287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88289,88290],{},[3929,88291],{"alt":118,"src":88292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88294,88295],{},"回顾：构造函数每次new得到对象都是不同的",[2587,88297,88299],{"id":88298},"_4137-原型链","4.13.7 原型链",[19,88301,88302],{},[3929,88303],{"alt":118,"src":88304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88306,88307],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88309,88310],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88312,88313],{},"大哥是Object",[19,88315,88316],{},[3929,88317],{"alt":118,"src":88318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88320,88321],{},[3929,88322],{"alt":118,"src":88323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88325,88326],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88328,88329],{},"万物皆对象",[2587,88331,88333],{"id":88332},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88335,88336],{},"模态框",[19,88338,88339],{},"以后遇见这个效果直接使用这个就行",[19,88341,88342],{},[3929,88343],{"alt":118,"src":88344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88346,88347],{},[3929,88348],{"alt":118,"src":88349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88351,88352],{},[3929,88353],{"alt":118,"src":88354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88356,88357],{},[3929,88358],{"alt":118,"src":88359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88361,88362],{},"补充知识点：",[26,88364,88365],{},[29,88366,88367],{},"append()",[19,88369,88370],{},[3929,88371],{"alt":118,"src":88372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[113,88374,88376],{"className":53040,"code":88375,"language":53042,"meta":118,"style":118},"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",[120,88377,88378,88383,88388,88393,88397,88401,88405,88410,88415,88420,88424],{"__ignoreMap":118},[123,88379,88380],{"class":125,"line":126},[123,88381,88382],{"class":129},"append(param1)\n",[123,88384,88385],{"class":125,"line":140},[123,88386,88387],{"class":129},"append(param1, param2)\n",[123,88389,88390],{"class":125,"line":156},[123,88391,88392],{"class":129},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[123,88394,88395],{"class":125,"line":168},[123,88396,232],{"emptyLinePlaceholder":231},[123,88398,88399],{"class":125,"line":268},[123,88400,232],{"emptyLinePlaceholder":231},[123,88402,88403],{"class":125,"line":291},[123,88404,232],{"emptyLinePlaceholder":231},[123,88406,88407],{"class":125,"line":300},[123,88408,88409],{"class":129},"let div = document.createElement(\"div\");\n",[123,88411,88412],{"class":125,"line":305},[123,88413,88414],{"class":129},"let p = document.createElement(\"p\");\n",[123,88416,88417],{"class":125,"line":316},[123,88418,88419],{"class":129},"div.append(p);\n",[123,88421,88422],{"class":125,"line":673},[123,88423,232],{"emptyLinePlaceholder":231},[123,88425,88426,88429,88431],{"class":125,"line":692},[123,88427,88428],{"class":129},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[123,88430,19],{"class":53707},[123,88432,88433],{"class":129},"> ]\n",[26,88435,88436],{"start":140},[29,88437,88438],{},"remove()",[19,88440,88441],{},"自己删自己",[19,88443,88444],{},[3929,88445],{"alt":118,"src":88446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[113,88448,88450],{"className":53040,"code":88449,"language":53042,"meta":118,"style":118},"\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",[120,88451,88452,88462,88476,88480,88488,88502,88522,88534,88542,88549,88561,88574,88609,88621,88632,88644,88656,88668,88695,88705,88709,88713,88722,88734,88748,88758,88770,88774,88778,88788,88799,88809,88819,88832,88845,88855,88859,88863,88872,88882,88894,88898,88902,88911,88921,88931,88943,88947,88951,88961,88977,88988,88998,89008,89020,89032,89044,89048,89052,89065,89076,89080,89088,89096,89100,89108,89128,89148,89156,89161,89187,89192,89197,89216,89221,89233,89238,89249,89259,89269,89274,89279,89283,89288,89293,89298,89318,89323,89343,89348,89362,89367,89372,89377,89393,89397,89402,89431,89436,89441,89446,89457,89461,89465,89469,89474,89499,89504,89529,89534,89543,89547,89552,89577,89581,89606,89610,89619,89623,89628,89646,89656,89660,89668,89676,89680],{"__ignoreMap":118},[123,88453,88454,88456,88458,88460],{"class":125,"line":126},[123,88455,53704],{"class":129},[123,88457,53708],{"class":53707},[123,88459,53711],{"class":337},[123,88461,53714],{"class":129},[123,88463,88464,88466,88468,88470,88472,88474],{"class":125,"line":140},[123,88465,3509],{"class":129},[123,88467,53042],{"class":53707},[123,88469,53723],{"class":337},[123,88471,134],{"class":129},[123,88473,53728],{"class":143},[123,88475,53714],{"class":129},[123,88477,88478],{"class":125,"line":156},[123,88479,232],{"emptyLinePlaceholder":231},[123,88481,88482,88484,88486],{"class":125,"line":168},[123,88483,3509],{"class":129},[123,88485,53741],{"class":53707},[123,88487,53714],{"class":129},[123,88489,88490,88492,88494,88496,88498,88500],{"class":125,"line":268},[123,88491,54548],{"class":129},[123,88493,53751],{"class":53707},[123,88495,53754],{"class":337},[123,88497,134],{"class":129},[123,88499,53759],{"class":143},[123,88501,53714],{"class":129},[123,88503,88504,88506,88508,88510,88512,88514,88516,88518,88520],{"class":125,"line":291},[123,88505,54548],{"class":129},[123,88507,53751],{"class":53707},[123,88509,17350],{"class":337},[123,88511,134],{"class":129},[123,88513,53798],{"class":143},[123,88515,53778],{"class":337},[123,88517,134],{"class":129},[123,88519,53805],{"class":143},[123,88521,53714],{"class":129},[123,88523,88524,88526,88528,88530,88532],{"class":125,"line":300},[123,88525,54548],{"class":129},[123,88527,642],{"class":53707},[123,88529,53816],{"class":129},[123,88531,642],{"class":53707},[123,88533,53714],{"class":129},[123,88535,88536,88538,88540],{"class":125,"line":305},[123,88537,54548],{"class":129},[123,88539,2526],{"class":53707},[123,88541,53714],{"class":129},[123,88543,88544,88547],{"class":125,"line":316},[123,88545,88546],{"class":337},"    .modal",[123,88548,137],{"class":129},[123,88550,88551,88553,88555,88557,88559],{"class":125,"line":673},[123,88552,57174],{"class":164},[123,88554,147],{"class":129},[123,88556,6412],{"class":164},[123,88558,53897],{"class":133},[123,88560,3760],{"class":129},[123,88562,88563,88566,88568,88570,88572],{"class":125,"line":692},[123,88564,88565],{"class":164},"      min-height",[123,88567,147],{"class":129},[123,88569,259],{"class":164},[123,88571,53897],{"class":133},[123,88573,3760],{"class":129},[123,88575,88576,88578,88580,88582,88584,88586,88588,88590,88592,88594,88596,88598,88600,88602,88604,88607],{"class":125,"line":713},[123,88577,81148],{"class":164},[123,88579,147],{"class":129},[123,88581,2799],{"class":164},[123,88583,6532],{"class":164},[123,88585,4482],{"class":164},[123,88587,53897],{"class":133},[123,88589,81165],{"class":164},[123,88591,1315],{"class":129},[123,88593,2799],{"class":164},[123,88595,251],{"class":129},[123,88597,2799],{"class":164},[123,88599,251],{"class":129},[123,88601,2799],{"class":164},[123,88603,251],{"class":129},[123,88605,88606],{"class":164},"0.1",[123,88608,5161],{"class":129},[123,88610,88611,88613,88615,88617,88619],{"class":125,"line":718},[123,88612,57537],{"class":164},[123,88614,147],{"class":129},[123,88616,2901],{"class":164},[123,88618,53897],{"class":133},[123,88620,3760],{"class":129},[123,88622,88623,88625,88627,88630],{"class":125,"line":1138},[123,88624,57162],{"class":164},[123,88626,147],{"class":129},[123,88628,88629],{"class":164},"fixed",[123,88631,3760],{"class":129},[123,88633,88634,88637,88639,88642],{"class":125,"line":1429},[123,88635,88636],{"class":164},"      z-index",[123,88638,147],{"class":129},[123,88640,88641],{"class":164},"999",[123,88643,3760],{"class":129},[123,88645,88646,88648,88650,88652,88654],{"class":125,"line":1439},[123,88647,57241],{"class":164},[123,88649,147],{"class":129},[123,88651,3258],{"class":164},[123,88653,2935],{"class":133},[123,88655,3760],{"class":129},[123,88657,88658,88660,88662,88664,88666],{"class":125,"line":1444},[123,88659,57350],{"class":164},[123,88661,147],{"class":129},[123,88663,3258],{"class":164},[123,88665,2935],{"class":133},[123,88667,3760],{"class":129},[123,88669,88670,88672,88674,88676,88678,88681,88683,88685,88687,88689,88691,88693],{"class":125,"line":1453},[123,88671,81189],{"class":164},[123,88673,147],{"class":129},[123,88675,81194],{"class":164},[123,88677,1315],{"class":129},[123,88679,88680],{"class":164},"-50",[123,88682,2935],{"class":133},[123,88684,251],{"class":129},[123,88686,88680],{"class":164},[123,88688,2935],{"class":133},[123,88690,251],{"class":129},[123,88692,2799],{"class":164},[123,88694,5161],{"class":129},[123,88696,88697,88699,88701,88703],{"class":125,"line":1458},[123,88698,57287],{"class":164},[123,88700,147],{"class":129},[123,88702,63244],{"class":164},[123,88704,3760],{"class":129},[123,88706,88707],{"class":125,"line":1476},[123,88708,4631],{"class":129},[123,88710,88711],{"class":125,"line":1494},[123,88712,232],{"emptyLinePlaceholder":231},[123,88714,88715,88717,88720],{"class":125,"line":1499},[123,88716,88546],{"class":337},[123,88718,88719],{"class":337}," .header",[123,88721,137],{"class":129},[123,88723,88724,88726,88728,88730,88732],{"class":125,"line":1517},[123,88725,59761],{"class":164},[123,88727,147],{"class":129},[123,88729,3007],{"class":164},[123,88731,53897],{"class":133},[123,88733,3760],{"class":129},[123,88735,88736,88738,88740,88742,88744,88746],{"class":125,"line":1534},[123,88737,57098],{"class":164},[123,88739,147],{"class":129},[123,88741,2799],{"class":164},[123,88743,4482],{"class":164},[123,88745,53897],{"class":133},[123,88747,3760],{"class":129},[123,88749,88750,88752,88754,88756],{"class":125,"line":1539},[123,88751,57162],{"class":164},[123,88753,147],{"class":129},[123,88755,57167],{"class":164},[123,88757,3760],{"class":129},[123,88759,88760,88762,88764,88766,88768],{"class":125,"line":2080},[123,88761,57325],{"class":164},[123,88763,147],{"class":129},[123,88765,3302],{"class":164},[123,88767,53897],{"class":133},[123,88769,3760],{"class":129},[123,88771,88772],{"class":125,"line":2097},[123,88773,4631],{"class":129},[123,88775,88776],{"class":125,"line":2114},[123,88777,232],{"emptyLinePlaceholder":231},[123,88779,88780,88782,88784,88786],{"class":125,"line":2125},[123,88781,88546],{"class":337},[123,88783,88719],{"class":337},[123,88785,5473],{"class":53707},[123,88787,137],{"class":129},[123,88789,88790,88793,88795,88797],{"class":125,"line":2130},[123,88791,88792],{"class":164},"      font-style",[123,88794,147],{"class":129},[123,88796,66242],{"class":164},[123,88798,3760],{"class":129},[123,88800,88801,88803,88805,88807],{"class":125,"line":5033},[123,88802,59818],{"class":164},[123,88804,147],{"class":129},[123,88806,64472],{"class":164},[123,88808,3760],{"class":129},[123,88810,88811,88813,88815,88817],{"class":125,"line":5041},[123,88812,57162],{"class":164},[123,88814,147],{"class":129},[123,88816,57234],{"class":164},[123,88818,3760],{"class":129},[123,88820,88821,88824,88826,88828,88830],{"class":125,"line":5046},[123,88822,88823],{"class":164},"      right",[123,88825,147],{"class":129},[123,88827,3178],{"class":164},[123,88829,53897],{"class":133},[123,88831,3760],{"class":129},[123,88833,88834,88836,88838,88841,88843],{"class":125,"line":5052},[123,88835,57350],{"class":164},[123,88837,147],{"class":129},[123,88839,88840],{"class":164},"-2",[123,88842,53897],{"class":133},[123,88844,3760],{"class":129},[123,88846,88847,88849,88851,88853],{"class":125,"line":5058},[123,88848,64427],{"class":164},[123,88850,147],{"class":129},[123,88852,64432],{"class":164},[123,88854,3760],{"class":129},[123,88856,88857],{"class":125,"line":5063},[123,88858,4631],{"class":129},[123,88860,88861],{"class":125,"line":10380},[123,88862,232],{"emptyLinePlaceholder":231},[123,88864,88865,88867,88870],{"class":125,"line":10404},[123,88866,88546],{"class":337},[123,88868,88869],{"class":337}," .body",[123,88871,137],{"class":129},[123,88873,88874,88876,88878,88880],{"class":125,"line":10409},[123,88875,59688],{"class":164},[123,88877,147],{"class":129},[123,88879,53997],{"class":164},[123,88881,3760],{"class":129},[123,88883,88884,88886,88888,88890,88892],{"class":125,"line":10415},[123,88885,57098],{"class":164},[123,88887,147],{"class":129},[123,88889,2193],{"class":164},[123,88891,53897],{"class":133},[123,88893,3760],{"class":129},[123,88895,88896],{"class":125,"line":10442},[123,88897,4631],{"class":129},[123,88899,88900],{"class":125,"line":10447},[123,88901,232],{"emptyLinePlaceholder":231},[123,88903,88904,88906,88909],{"class":125,"line":10453},[123,88905,88546],{"class":337},[123,88907,88908],{"class":337}," .footer",[123,88910,137],{"class":129},[123,88912,88913,88915,88917,88919],{"class":125,"line":10465},[123,88914,57412],{"class":164},[123,88916,147],{"class":129},[123,88918,53882],{"class":164},[123,88920,3760],{"class":129},[123,88922,88923,88925,88927,88929],{"class":125,"line":10477},[123,88924,57423],{"class":164},[123,88926,147],{"class":129},[123,88928,53985],{"class":164},[123,88930,3760],{"class":129},[123,88932,88933,88935,88937,88939,88941],{"class":125,"line":10489},[123,88934,57098],{"class":164},[123,88936,147],{"class":129},[123,88938,2193],{"class":164},[123,88940,53897],{"class":133},[123,88942,3760],{"class":129},[123,88944,88945],{"class":125,"line":12148},[123,88946,4631],{"class":129},[123,88948,88949],{"class":125,"line":12173},[123,88950,232],{"emptyLinePlaceholder":231},[123,88952,88953,88955,88957,88959],{"class":125,"line":12196},[123,88954,88546],{"class":337},[123,88956,88908],{"class":337},[123,88958,3865],{"class":53707},[123,88960,137],{"class":129},[123,88962,88963,88965,88967,88969,88971,88973,88975],{"class":125,"line":12220},[123,88964,57098],{"class":164},[123,88966,147],{"class":129},[123,88968,2686],{"class":164},[123,88970,53897],{"class":133},[123,88972,4527],{"class":164},[123,88974,53897],{"class":133},[123,88976,3760],{"class":129},[123,88978,88979,88981,88983,88986],{"class":125,"line":12225},[123,88980,64123],{"class":164},[123,88982,147],{"class":129},[123,88984,88985],{"class":164},"#ccc",[123,88987,3760],{"class":129},[123,88989,88990,88992,88994,88996],{"class":125,"line":12230},[123,88991,66371],{"class":164},[123,88993,147],{"class":129},[123,88995,57140],{"class":164},[123,88997,3760],{"class":129},[123,88999,89000,89002,89004,89006],{"class":125,"line":12235},[123,89001,59818],{"class":164},[123,89003,147],{"class":129},[123,89005,63244],{"class":164},[123,89007,3760],{"class":129},[123,89009,89010,89012,89014,89016,89018],{"class":125,"line":12244},[123,89011,57537],{"class":164},[123,89013,147],{"class":129},[123,89015,2692],{"class":164},[123,89017,53897],{"class":133},[123,89019,3760],{"class":129},[123,89021,89022,89024,89026,89028,89030],{"class":125,"line":12249},[123,89023,64152],{"class":164},[123,89025,147],{"class":129},[123,89027,2193],{"class":164},[123,89029,53897],{"class":133},[123,89031,3760],{"class":129},[123,89033,89034,89036,89038,89040,89042],{"class":125,"line":12255},[123,89035,57325],{"class":164},[123,89037,147],{"class":129},[123,89039,3152],{"class":164},[123,89041,53897],{"class":133},[123,89043,3760],{"class":129},[123,89045,89046],{"class":125,"line":12276},[123,89047,4631],{"class":129},[123,89049,89050],{"class":125,"line":12282},[123,89051,232],{"emptyLinePlaceholder":231},[123,89053,89054,89056,89058,89060,89063],{"class":125,"line":12296},[123,89055,88546],{"class":337},[123,89057,88908],{"class":337},[123,89059,3865],{"class":53707},[123,89061,89062],{"class":337},".submit",[123,89064,137],{"class":129},[123,89066,89067,89069,89071,89074],{"class":125,"line":12302},[123,89068,57287],{"class":164},[123,89070,147],{"class":129},[123,89072,89073],{"class":164},"#369",[123,89075,3760],{"class":129},[123,89077,89078],{"class":125,"line":12329},[123,89079,4631],{"class":129},[123,89081,89082,89084,89086],{"class":125,"line":12338},[123,89083,54820],{"class":129},[123,89085,2526],{"class":53707},[123,89087,53714],{"class":129},[123,89089,89090,89092,89094],{"class":125,"line":12344},[123,89091,54190],{"class":129},[123,89093,53741],{"class":53707},[123,89095,53714],{"class":129},[123,89097,89098],{"class":125,"line":12352},[123,89099,232],{"emptyLinePlaceholder":231},[123,89101,89102,89104,89106],{"class":125,"line":12357},[123,89103,3509],{"class":129},[123,89105,54205],{"class":53707},[123,89107,53714],{"class":129},[123,89109,89110,89112,89114,89116,89118,89121,89124,89126],{"class":125,"line":19032},[123,89111,54548],{"class":129},[123,89113,56290],{"class":53707},[123,89115,17389],{"class":337},[123,89117,134],{"class":129},[123,89119,89120],{"class":143},"\"delete\"",[123,89122,89123],{"class":129},">删除\u003C\u002F",[123,89125,56290],{"class":53707},[123,89127,53714],{"class":129},[123,89129,89130,89132,89134,89136,89138,89141,89144,89146],{"class":125,"line":19038},[123,89131,54548],{"class":129},[123,89133,56290],{"class":53707},[123,89135,17389],{"class":337},[123,89137,134],{"class":129},[123,89139,89140],{"class":143},"\"login\"",[123,89142,89143],{"class":129},">登录\u003C\u002F",[123,89145,56290],{"class":53707},[123,89147,53714],{"class":129},[123,89149,89150,89152,89154],{"class":125,"line":19061},[123,89151,54548],{"class":129},[123,89153,54218],{"class":53707},[123,89155,53714],{"class":129},[123,89157,89158],{"class":125,"line":19067},[123,89159,89160],{"class":2673},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[123,89162,89163,89165,89168,89170,89172,89174,89176,89178,89181,89183,89185],{"class":125,"line":19090},[123,89164,72484],{"class":133},[123,89166,89167],{"class":337}," Modal",[123,89169,1315],{"class":129},[123,89171,642],{"class":279},[123,89173,15995],{"class":133},[123,89175,72330],{"class":143},[123,89177,251],{"class":129},[123,89179,89180],{"class":279},"message",[123,89182,15995],{"class":133},[123,89184,72330],{"class":143},[123,89186,14873],{"class":129},[123,89188,89189],{"class":125,"line":19104},[123,89190,89191],{"class":2673},"      \u002F\u002F 创建Model 模态框盒子\n",[123,89193,89194],{"class":125,"line":19124},[123,89195,89196],{"class":2673},"      \u002F\u002F 1.1 创建div标签\n",[123,89198,89199,89201,89204,89206,89208,89210,89212,89214],{"class":125,"line":19130},[123,89200,72451],{"class":164},[123,89202,89203],{"class":129},".modalBox ",[123,89205,134],{"class":133},[123,89207,56799],{"class":129},[123,89209,72551],{"class":337},[123,89211,1315],{"class":129},[123,89213,84328],{"class":143},[123,89215,288],{"class":129},[123,89217,89218],{"class":125,"line":19141},[123,89219,89220],{"class":2673},"      \u002F\u002F 1.2 给div 添加类名为model\n",[123,89222,89223,89225,89228,89230],{"class":125,"line":19164},[123,89224,72451],{"class":164},[123,89226,89227],{"class":129},".modalBox.className ",[123,89229,134],{"class":133},[123,89231,89232],{"class":143}," 'modal'\n",[123,89234,89235],{"class":125,"line":19186},[123,89236,89237],{"class":2673},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[123,89239,89240,89242,89245,89247],{"class":125,"line":19191},[123,89241,72451],{"class":164},[123,89243,89244],{"class":129},".modalBox.innerHTML ",[123,89246,134],{"class":133},[123,89248,72568],{"class":143},[123,89250,89251,89254,89256],{"class":125,"line":19197},[123,89252,89253],{"class":143},"        \u003Cdiv class=\"header\">${",[123,89255,642],{"class":129},[123,89257,89258],{"class":143},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[123,89260,89261,89264,89266],{"class":125,"line":19211},[123,89262,89263],{"class":143},"        \u003Cdiv class=\"body\">${",[123,89265,89180],{"class":129},[123,89267,89268],{"class":143},"}\u003C\u002Fdiv>\n",[123,89270,89271],{"class":125,"line":19224},[123,89272,89273],{"class":143},"      `\n",[123,89275,89276],{"class":125,"line":19229},[123,89277,89278],{"class":2673},"      \u002F\u002F console.log(this.modalBox)\n",[123,89280,89281],{"class":125,"line":19243},[123,89282,4631],{"class":129},[123,89284,89285],{"class":125,"line":19248},[123,89286,89287],{"class":2673},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[123,89289,89290],{"class":125,"line":19254},[123,89291,89292],{"class":2673},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[123,89294,89295],{"class":125,"line":19259},[123,89296,89297],{"class":2673},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[123,89299,89300,89303,89305,89307,89309,89312,89314,89316],{"class":125,"line":19273},[123,89301,89302],{"class":164},"    Modal",[123,89304,3161],{"class":129},[123,89306,87975],{"class":164},[123,89308,3161],{"class":129},[123,89310,89311],{"class":337},"open",[123,89313,15995],{"class":133},[123,89315,61320],{"class":133},[123,89317,56855],{"class":129},[123,89319,89320],{"class":125,"line":19278},[123,89321,89322],{"class":2673},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[123,89324,89325,89327,89330,89332,89334,89336,89338,89341],{"class":125,"line":19283},[123,89326,60630],{"class":133},[123,89328,89329],{"class":164}," box",[123,89331,15995],{"class":133},[123,89333,56799],{"class":129},[123,89335,56802],{"class":337},[123,89337,1315],{"class":129},[123,89339,89340],{"class":143},"'.modal'",[123,89342,288],{"class":129},[123,89344,89345],{"class":125,"line":19297},[123,89346,89347],{"class":2673},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[123,89349,89350,89353,89355,89358,89360],{"class":125,"line":19309},[123,89351,89352],{"class":129},"      box ",[123,89354,4169],{"class":133},[123,89356,89357],{"class":129}," box.",[123,89359,59408],{"class":337},[123,89361,4420],{"class":129},[123,89363,89364],{"class":125,"line":19314},[123,89365,89366],{"class":2673},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[123,89368,89369],{"class":125,"line":19327},[123,89370,89371],{"class":2673},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[123,89373,89374],{"class":125,"line":19332},[123,89375,89376],{"class":2673},"      \u002F\u002F append可以增加对象\n",[123,89378,89379,89382,89385,89387,89390],{"class":125,"line":19337},[123,89380,89381],{"class":129},"      document.body.",[123,89383,89384],{"class":337},"append",[123,89386,1315],{"class":129},[123,89388,89389],{"class":164},"this",[123,89391,89392],{"class":129},".modalBox)\n",[123,89394,89395],{"class":125,"line":19342},[123,89396,232],{"emptyLinePlaceholder":231},[123,89398,89399],{"class":125,"line":19355},[123,89400,89401],{"class":2673},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[123,89403,89404,89406,89409,89411,89413,89416,89418,89420,89422,89424,89427,89429],{"class":125,"line":19360},[123,89405,72451],{"class":164},[123,89407,89408],{"class":129},".modalBox.",[123,89410,56802],{"class":337},[123,89412,1315],{"class":129},[123,89414,89415],{"class":143},"'i'",[123,89417,33241],{"class":129},[123,89419,60215],{"class":337},[123,89421,1315],{"class":129},[123,89423,60220],{"class":143},[123,89425,89426],{"class":129},", () ",[123,89428,87118],{"class":133},[123,89430,137],{"class":129},[123,89432,89433],{"class":125,"line":35045},[123,89434,89435],{"class":2673},"        \u002F\u002F 这个地方需要用到箭头函数\n",[123,89437,89438],{"class":125,"line":35051},[123,89439,89440],{"class":2673},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[123,89442,89443],{"class":125,"line":35057},[123,89444,89445],{"class":2673},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[123,89447,89448,89450,89452,89455],{"class":125,"line":35063},[123,89449,67127],{"class":164},[123,89451,3161],{"class":129},[123,89453,89454],{"class":337},"close",[123,89456,4420],{"class":129},[123,89458,89459],{"class":125,"line":35069},[123,89460,67216],{"class":129},[123,89462,89463],{"class":125,"line":35080},[123,89464,4631],{"class":129},[123,89466,89467],{"class":125,"line":35086},[123,89468,232],{"emptyLinePlaceholder":231},[123,89470,89471],{"class":125,"line":35106},[123,89472,89473],{"class":2673},"    \u002F\u002F 测试一下 点击 删除按钮\n",[123,89475,89476,89478,89480,89482,89485,89487,89489,89491,89493,89495,89497],{"class":125,"line":35112},[123,89477,54810],{"class":129},[123,89479,56802],{"class":337},[123,89481,1315],{"class":129},[123,89483,89484],{"class":143},"'#delete'",[123,89486,33241],{"class":129},[123,89488,60215],{"class":337},[123,89490,1315],{"class":129},[123,89492,60220],{"class":143},[123,89494,89426],{"class":129},[123,89496,87118],{"class":133},[123,89498,137],{"class":129},[123,89500,89501],{"class":125,"line":35123},[123,89502,89503],{"class":2673},"      \u002F\u002F 先调用Model构造函数\n",[123,89505,89506,89508,89511,89513,89515,89517,89519,89522,89524,89527],{"class":125,"line":35129},[123,89507,60630],{"class":133},[123,89509,89510],{"class":164}," del",[123,89512,15995],{"class":133},[123,89514,14010],{"class":133},[123,89516,89167],{"class":337},[123,89518,1315],{"class":129},[123,89520,89521],{"class":143},"'温馨的提示'",[123,89523,251],{"class":129},[123,89525,89526],{"class":143},"'您没有删除权限操作'",[123,89528,288],{"class":129},[123,89530,89531],{"class":125,"line":35135},[123,89532,89533],{"class":2673},"      \u002F\u002F 实例对象调用open方法\n",[123,89535,89536,89539,89541],{"class":125,"line":35141},[123,89537,89538],{"class":129},"      del.",[123,89540,89311],{"class":337},[123,89542,4420],{"class":129},[123,89544,89545],{"class":125,"line":35147},[123,89546,35872],{"class":129},[123,89548,89549],{"class":125,"line":35153},[123,89550,89551],{"class":2673},"    \u002F\u002F 测试一下 点击 登录按钮\n",[123,89553,89554,89556,89558,89560,89563,89565,89567,89569,89571,89573,89575],{"class":125,"line":35159},[123,89555,54810],{"class":129},[123,89557,56802],{"class":337},[123,89559,1315],{"class":129},[123,89561,89562],{"class":143},"'#login'",[123,89564,33241],{"class":129},[123,89566,60215],{"class":337},[123,89568,1315],{"class":129},[123,89570,60220],{"class":143},[123,89572,89426],{"class":129},[123,89574,87118],{"class":133},[123,89576,137],{"class":129},[123,89578,89579],{"class":125,"line":35165},[123,89580,89503],{"class":2673},[123,89582,89583,89585,89588,89590,89592,89594,89596,89599,89601,89604],{"class":125,"line":35185},[123,89584,60630],{"class":133},[123,89586,89587],{"class":164}," log",[123,89589,15995],{"class":133},[123,89591,14010],{"class":133},[123,89593,89167],{"class":337},[123,89595,1315],{"class":129},[123,89597,89598],{"class":143},"'友情提示'",[123,89600,251],{"class":129},[123,89602,89603],{"class":143},"'您还没有登录呢'",[123,89605,288],{"class":129},[123,89607,89608],{"class":125,"line":35191},[123,89609,89533],{"class":2673},[123,89611,89612,89615,89617],{"class":125,"line":35207},[123,89613,89614],{"class":129},"      log.",[123,89616,89311],{"class":337},[123,89618,4420],{"class":129},[123,89620,89621],{"class":125,"line":35213},[123,89622,35872],{"class":129},[123,89624,89625],{"class":125,"line":35227},[123,89626,89627],{"class":2673},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[123,89629,89630,89632,89634,89636,89638,89640,89642,89644],{"class":125,"line":35233},[123,89631,89302],{"class":164},[123,89633,3161],{"class":129},[123,89635,87975],{"class":164},[123,89637,3161],{"class":129},[123,89639,89454],{"class":337},[123,89641,15995],{"class":133},[123,89643,61320],{"class":133},[123,89645,56855],{"class":129},[123,89647,89648,89650,89652,89654],{"class":125,"line":35248},[123,89649,72451],{"class":164},[123,89651,89408],{"class":129},[123,89653,59408],{"class":337},[123,89655,4420],{"class":129},[123,89657,89658],{"class":125,"line":35254},[123,89659,4631],{"class":129},[123,89661,89662,89664,89666],{"class":125,"line":35263},[123,89663,54820],{"class":129},[123,89665,54218],{"class":53707},[123,89667,53714],{"class":129},[123,89669,89670,89672,89674],{"class":125,"line":35269},[123,89671,54190],{"class":129},[123,89673,54205],{"class":53707},[123,89675,53714],{"class":129},[123,89677,89678],{"class":125,"line":35278},[123,89679,232],{"emptyLinePlaceholder":231},[123,89681,89682,89684,89686],{"class":125,"line":35284},[123,89683,54190],{"class":129},[123,89685,53042],{"class":53707},[123,89687,53714],{"class":129},[19,89689,89690],{},[3929,89691],{"alt":118,"src":89692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89694,89696],{"id":89695},"_414-深浅拷贝","4.14 深浅拷贝",[2587,89698,89700],{"id":89699},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89702,89703],{},[3929,89704],{"alt":118,"src":89705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89707,89708],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89710,89711],{},[3929,89712],{"alt":118,"src":89713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89715,89716],{},[3929,89717],{"alt":118,"src":89718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89720,89721],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89723,89724],{},[3929,89725],{"alt":118,"src":89726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89728,13764],{},[19,89730,89731],{},[3929,89732],{"alt":118,"src":89733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[2587,89735,89737],{"id":89736},"_4142-深拷贝","4.14.2 深拷贝",[19,89739,89740],{},"深拷贝：拷贝的是对象，不是地址",[19,89742,89743],{},"常用的三种方法：",[26,89745,89746,89749,89752],{},[29,89747,89748],{},"通过递归实现深拷贝",[29,89750,89751],{},"lodash\u002FcloneDeep",[29,89753,89754],{},"通过JSON.stringify()实现",[24425,89756,89758],{"id":89757},"_41421-递归函数","4.14.2.1 递归函数",[19,89760,89761],{},[3929,89762],{"alt":118,"src":89763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89765,89766],{},[29,89767,89768],{},"死递归占溢出：",[113,89770,89772],{"className":55470,"code":89771,"language":55472,"meta":118,"style":118},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[120,89773,89774,89782,89790,89794,89799,89803,89808,89816],{"__ignoreMap":118},[123,89775,89776,89778,89780],{"class":125,"line":126},[123,89777,3509],{"class":129},[123,89779,54205],{"class":53707},[123,89781,53714],{"class":129},[123,89783,89784,89786,89788],{"class":125,"line":140},[123,89785,54548],{"class":129},[123,89787,54218],{"class":53707},[123,89789,53714],{"class":129},[123,89791,89792],{"class":125,"line":156},[123,89793,79543],{"class":129},[123,89795,89796],{"class":125,"line":168},[123,89797,89798],{"class":129},"      fn()\n",[123,89800,89801],{"class":125,"line":268},[123,89802,4631],{"class":129},[123,89804,89805],{"class":125,"line":291},[123,89806,89807],{"class":129},"    fn()\n",[123,89809,89810,89812,89814],{"class":125,"line":300},[123,89811,54820],{"class":129},[123,89813,54218],{"class":53707},[123,89815,53714],{"class":129},[123,89817,89818,89820,89822],{"class":125,"line":305},[123,89819,54190],{"class":129},[123,89821,54205],{"class":53707},[123,89823,53714],{"class":129},[26,89825,89826],{"start":140},[29,89827,89828],{},"递归函数要加判断条件：",[19,89830,89831],{},[3929,89832],{"alt":118,"src":89833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89835,89836],{"start":156},[29,89837,89838],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[113,89840,89842],{"className":53040,"code":89841,"language":53042,"meta":118,"style":118},"\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",[120,89843,89844,89854,89868,89872,89880,89894,89914,89926,89934,89938,89946,89958,89966,89974,89999,90011,90015,90022,90030,90038,90042],{"__ignoreMap":118},[123,89845,89846,89848,89850,89852],{"class":125,"line":126},[123,89847,53704],{"class":129},[123,89849,53708],{"class":53707},[123,89851,53711],{"class":337},[123,89853,53714],{"class":129},[123,89855,89856,89858,89860,89862,89864,89866],{"class":125,"line":140},[123,89857,3509],{"class":129},[123,89859,53042],{"class":53707},[123,89861,53723],{"class":337},[123,89863,134],{"class":129},[123,89865,53728],{"class":143},[123,89867,53714],{"class":129},[123,89869,89870],{"class":125,"line":156},[123,89871,232],{"emptyLinePlaceholder":231},[123,89873,89874,89876,89878],{"class":125,"line":168},[123,89875,3509],{"class":129},[123,89877,53741],{"class":53707},[123,89879,53714],{"class":129},[123,89881,89882,89884,89886,89888,89890,89892],{"class":125,"line":268},[123,89883,54548],{"class":129},[123,89885,53751],{"class":53707},[123,89887,53754],{"class":337},[123,89889,134],{"class":129},[123,89891,53759],{"class":143},[123,89893,53714],{"class":129},[123,89895,89896,89898,89900,89902,89904,89906,89908,89910,89912],{"class":125,"line":291},[123,89897,54548],{"class":129},[123,89899,53751],{"class":53707},[123,89901,17350],{"class":337},[123,89903,134],{"class":129},[123,89905,53798],{"class":143},[123,89907,53778],{"class":337},[123,89909,134],{"class":129},[123,89911,53805],{"class":143},[123,89913,53714],{"class":129},[123,89915,89916,89918,89920,89922,89924],{"class":125,"line":300},[123,89917,54548],{"class":129},[123,89919,642],{"class":53707},[123,89921,53816],{"class":129},[123,89923,642],{"class":53707},[123,89925,53714],{"class":129},[123,89927,89928,89930,89932],{"class":125,"line":305},[123,89929,54190],{"class":129},[123,89931,53741],{"class":53707},[123,89933,53714],{"class":129},[123,89935,89936],{"class":125,"line":316},[123,89937,232],{"emptyLinePlaceholder":231},[123,89939,89940,89942,89944],{"class":125,"line":673},[123,89941,3509],{"class":129},[123,89943,54205],{"class":53707},[123,89945,53714],{"class":129},[123,89947,89948,89950,89952,89954,89956],{"class":125,"line":692},[123,89949,54548],{"class":129},[123,89951,54016],{"class":53707},[123,89953,57717],{"class":129},[123,89955,54016],{"class":53707},[123,89957,53714],{"class":129},[123,89959,89960,89962,89964],{"class":125,"line":713},[123,89961,54548],{"class":129},[123,89963,54218],{"class":53707},[123,89965,53714],{"class":129},[123,89967,89968,89970,89972],{"class":125,"line":718},[123,89969,72484],{"class":133},[123,89971,76173],{"class":337},[123,89973,13285],{"class":129},[123,89975,89976,89978,89980,89982,89984,89986,89988,89990,89992,89994,89997],{"class":125,"line":1138},[123,89977,58173],{"class":129},[123,89979,56802],{"class":337},[123,89981,1315],{"class":129},[123,89983,84328],{"class":143},[123,89985,76649],{"class":129},[123,89987,134],{"class":133},[123,89989,14010],{"class":133},[123,89991,76189],{"class":337},[123,89993,19689],{"class":129},[123,89995,89996],{"class":337},"toLocaleString",[123,89998,4420],{"class":129},[123,90000,90001,90004,90007,90009],{"class":125,"line":1429},[123,90002,90003],{"class":337},"      setTimeout",[123,90005,90006],{"class":129},"(getTime, ",[123,90008,8843],{"class":164},[123,90010,288],{"class":129},[123,90012,90013],{"class":125,"line":1439},[123,90014,4631],{"class":129},[123,90016,90017,90020],{"class":125,"line":1444},[123,90018,90019],{"class":337},"    getTime",[123,90021,4420],{"class":129},[123,90023,90024,90026,90028],{"class":125,"line":1453},[123,90025,54820],{"class":129},[123,90027,54218],{"class":53707},[123,90029,53714],{"class":129},[123,90031,90032,90034,90036],{"class":125,"line":1458},[123,90033,54190],{"class":129},[123,90035,54205],{"class":53707},[123,90037,53714],{"class":129},[123,90039,90040],{"class":125,"line":1476},[123,90041,232],{"emptyLinePlaceholder":231},[123,90043,90044,90046,90048],{"class":125,"line":1494},[123,90045,54190],{"class":129},[123,90047,53042],{"class":53707},[123,90049,53714],{"class":129},[19,90051,90052],{},[3929,90053],{"alt":118,"src":90054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,90056,90057],{"start":168},[29,90058,89748],{},[19,90060,90061],{},[3929,90062],{"alt":118,"src":90063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,90065,90066],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,90068,41597],{},[19,90070,90071],{},"这个是简易版的递归函数深拷贝",[19,90073,90074],{},"一定要注意先数组再对象，因为万物皆可对象",[113,90076,90078],{"className":53040,"code":90077,"language":53042,"meta":118,"style":118},"\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",[120,90079,90080,90090,90104,90108,90116,90130,90150,90162,90170,90174,90182,90190,90200,90209,90217,90232,90236,90244,90248,90252,90264,90269,90288,90304,90309,90314,90319,90334,90339,90344,90353,90361,90378,90386,90392,90400,90405,90410,90419,90423,90427,90431,90442,90451,90461,90475,90485,90493,90501,90509,90513],{"__ignoreMap":118},[123,90081,90082,90084,90086,90088],{"class":125,"line":126},[123,90083,53704],{"class":129},[123,90085,53708],{"class":53707},[123,90087,53711],{"class":337},[123,90089,53714],{"class":129},[123,90091,90092,90094,90096,90098,90100,90102],{"class":125,"line":140},[123,90093,3509],{"class":129},[123,90095,53042],{"class":53707},[123,90097,53723],{"class":337},[123,90099,134],{"class":129},[123,90101,53728],{"class":143},[123,90103,53714],{"class":129},[123,90105,90106],{"class":125,"line":156},[123,90107,232],{"emptyLinePlaceholder":231},[123,90109,90110,90112,90114],{"class":125,"line":168},[123,90111,3509],{"class":129},[123,90113,53741],{"class":53707},[123,90115,53714],{"class":129},[123,90117,90118,90120,90122,90124,90126,90128],{"class":125,"line":268},[123,90119,54548],{"class":129},[123,90121,53751],{"class":53707},[123,90123,53754],{"class":337},[123,90125,134],{"class":129},[123,90127,53759],{"class":143},[123,90129,53714],{"class":129},[123,90131,90132,90134,90136,90138,90140,90142,90144,90146,90148],{"class":125,"line":291},[123,90133,54548],{"class":129},[123,90135,53751],{"class":53707},[123,90137,17350],{"class":337},[123,90139,134],{"class":129},[123,90141,53798],{"class":143},[123,90143,53778],{"class":337},[123,90145,134],{"class":129},[123,90147,53805],{"class":143},[123,90149,53714],{"class":129},[123,90151,90152,90154,90156,90158,90160],{"class":125,"line":300},[123,90153,54548],{"class":129},[123,90155,642],{"class":53707},[123,90157,53816],{"class":129},[123,90159,642],{"class":53707},[123,90161,53714],{"class":129},[123,90163,90164,90166,90168],{"class":125,"line":305},[123,90165,54190],{"class":129},[123,90167,53741],{"class":53707},[123,90169,53714],{"class":129},[123,90171,90172],{"class":125,"line":316},[123,90173,232],{"emptyLinePlaceholder":231},[123,90175,90176,90178,90180],{"class":125,"line":673},[123,90177,3509],{"class":129},[123,90179,54205],{"class":53707},[123,90181,53714],{"class":129},[123,90183,90184,90186,90188],{"class":125,"line":692},[123,90185,54548],{"class":129},[123,90187,54218],{"class":53707},[123,90189,53714],{"class":129},[123,90191,90192,90194,90196,90198],{"class":125,"line":713},[123,90193,13653],{"class":133},[123,90195,72371],{"class":164},[123,90197,15995],{"class":133},[123,90199,137],{"class":129},[123,90201,90202,90204,90207],{"class":125,"line":718},[123,90203,74016],{"class":129},[123,90205,90206],{"class":143},"'pink'",[123,90208,153],{"class":129},[123,90210,90211,90213,90215],{"class":125,"line":1138},[123,90212,74026],{"class":129},[123,90214,3252],{"class":164},[123,90216,153],{"class":129},[123,90218,90219,90222,90225,90227,90230],{"class":125,"line":1429},[123,90220,90221],{"class":129},"      hobby: [",[123,90223,90224],{"class":143},"'乒乓球'",[123,90226,251],{"class":129},[123,90228,90229],{"class":143},"'足球'",[123,90231,860],{"class":129},[123,90233,90234],{"class":125,"line":1439},[123,90235,80270],{"class":129},[123,90237,90238,90241],{"class":125,"line":1444},[123,90239,90240],{"class":129},"        baby: ",[123,90242,90243],{"class":143},"'小pink'\n",[123,90245,90246],{"class":125,"line":1453},[123,90247,54801],{"class":129},[123,90249,90250],{"class":125,"line":1458},[123,90251,4631],{"class":129},[123,90253,90254,90256,90259,90261],{"class":125,"line":1476},[123,90255,13653],{"class":133},[123,90257,90258],{"class":164}," o",[123,90260,15995],{"class":133},[123,90262,90263],{"class":129}," {}\n",[123,90265,90266],{"class":125,"line":1494},[123,90267,90268],{"class":2673},"    \u002F\u002F 拷贝函数\n",[123,90270,90271,90273,90276,90278,90281,90283,90286],{"class":125,"line":1499},[123,90272,72484],{"class":133},[123,90274,90275],{"class":337}," deepCopy",[123,90277,1315],{"class":129},[123,90279,90280],{"class":279},"newObj",[123,90282,251],{"class":129},[123,90284,90285],{"class":279},"oldObj",[123,90287,14873],{"class":129},[123,90289,90290,90292,90294,90296,90299,90301],{"class":125,"line":1517},[123,90291,54687],{"class":133},[123,90293,4116],{"class":129},[123,90295,54251],{"class":133},[123,90297,90298],{"class":129}," k ",[123,90300,1405],{"class":133},[123,90302,90303],{"class":129}," oldObj) {\n",[123,90305,90306],{"class":125,"line":1534},[123,90307,90308],{"class":2673},"        \u002F\u002F 处理数组的问题\n",[123,90310,90311],{"class":125,"line":1539},[123,90312,90313],{"class":2673},"        \u002F\u002F 判断是否属于数组\n",[123,90315,90316],{"class":125,"line":2080},[123,90317,90318],{"class":2673},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[123,90320,90321,90323,90326,90329,90332],{"class":125,"line":2097},[123,90322,4940],{"class":133},[123,90324,90325],{"class":129}," (oldObj[k] ",[123,90327,90328],{"class":133},"instanceof",[123,90330,90331],{"class":337}," Array",[123,90333,14873],{"class":129},[123,90335,90336],{"class":125,"line":2114},[123,90337,90338],{"class":2673},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[123,90340,90341],{"class":125,"line":2125},[123,90342,90343],{"class":2673},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[123,90345,90346,90349,90351],{"class":125,"line":2130},[123,90347,90348],{"class":129},"          newObj[k] ",[123,90350,134],{"class":133},[123,90352,1372],{"class":129},[123,90354,90355,90358],{"class":125,"line":5033},[123,90356,90357],{"class":337},"          deepCopy",[123,90359,90360],{"class":129},"(newObj[k], oldObj[k])\n",[123,90362,90363,90365,90367,90369,90371,90373,90376],{"class":125,"line":5041},[123,90364,82477],{"class":129},[123,90366,4155],{"class":133},[123,90368,4158],{"class":133},[123,90370,90325],{"class":129},[123,90372,90328],{"class":133},[123,90374,90375],{"class":337}," Object",[123,90377,14873],{"class":129},[123,90379,90380,90382,90384],{"class":125,"line":5046},[123,90381,90348],{"class":129},[123,90383,134],{"class":133},[123,90385,90263],{"class":129},[123,90387,90388,90390],{"class":125,"line":5052},[123,90389,90357],{"class":337},[123,90391,90360],{"class":129},[123,90393,90394,90396,90398],{"class":125,"line":5058},[123,90395,82477],{"class":129},[123,90397,4155],{"class":133},[123,90399,137],{"class":129},[123,90401,90402],{"class":125,"line":5063},[123,90403,90404],{"class":2673},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[123,90406,90407],{"class":125,"line":10380},[123,90408,90409],{"class":2673},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[123,90411,90412,90414,90416],{"class":125,"line":10404},[123,90413,90348],{"class":129},[123,90415,134],{"class":133},[123,90417,90418],{"class":129}," oldObj[k]\n",[123,90420,90421],{"class":125,"line":10409},[123,90422,4972],{"class":129},[123,90424,90425],{"class":125,"line":10415},[123,90426,54801],{"class":129},[123,90428,90429],{"class":125,"line":10442},[123,90430,4631],{"class":129},[123,90432,90433,90436,90439],{"class":125,"line":10447},[123,90434,90435],{"class":337},"    deepCopy",[123,90437,90438],{"class":129},"(o, obj) ",[123,90440,90441],{"class":2673},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[123,90443,90444,90446,90448],{"class":125,"line":10453},[123,90445,76153],{"class":129},[123,90447,60649],{"class":337},[123,90449,90450],{"class":129},"(o)\n",[123,90452,90453,90456,90458],{"class":125,"line":10465},[123,90454,90455],{"class":129},"    o.age ",[123,90457,134],{"class":133},[123,90459,90460],{"class":164}," 20\n",[123,90462,90463,90466,90468,90470,90472],{"class":125,"line":10477},[123,90464,90465],{"class":129},"    o.hobby[",[123,90467,2799],{"class":164},[123,90469,1941],{"class":129},[123,90471,134],{"class":133},[123,90473,90474],{"class":143}," '篮球'\n",[123,90476,90477,90480,90482],{"class":125,"line":10489},[123,90478,90479],{"class":129},"    o.family ",[123,90481,134],{"class":133},[123,90483,90484],{"class":143}," '老pink'\n",[123,90486,90487,90489,90491],{"class":125,"line":12148},[123,90488,76153],{"class":129},[123,90490,60649],{"class":337},[123,90492,72436],{"class":129},[123,90494,90495,90497,90499],{"class":125,"line":12173},[123,90496,54820],{"class":129},[123,90498,54218],{"class":53707},[123,90500,53714],{"class":129},[123,90502,90503,90505,90507],{"class":125,"line":12196},[123,90504,54190],{"class":129},[123,90506,54205],{"class":53707},[123,90508,53714],{"class":129},[123,90510,90511],{"class":125,"line":12220},[123,90512,232],{"emptyLinePlaceholder":231},[123,90514,90515,90517,90519],{"class":125,"line":12225},[123,90516,54190],{"class":129},[123,90518,53042],{"class":53707},[123,90520,53714],{"class":129},[19,90522,90523],{},[3929,90524],{"alt":118,"src":90525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24425,90527,90529,90530],{"id":90528},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2759,90531,90532],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90534,90535],{},[2846,90536,90537],{"href":90537,"rel":90538},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26287],[19,90540,90541],{},"lodash里边的方法都要加上一个下划线_",[19,90543,90544],{},"_.cloneDeep()",[113,90546,90548],{"className":53040,"code":90547,"language":53042,"meta":118,"style":118},"\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",[120,90549,90550,90560,90574,90578,90586,90600,90620,90632,90640,90644,90652,90657,90676,90684,90694,90702,90710,90722,90726,90732,90736,90740,90756,90764,90773,90781,90789,90797,90801],{"__ignoreMap":118},[123,90551,90552,90554,90556,90558],{"class":125,"line":126},[123,90553,53704],{"class":129},[123,90555,53708],{"class":53707},[123,90557,53711],{"class":337},[123,90559,53714],{"class":129},[123,90561,90562,90564,90566,90568,90570,90572],{"class":125,"line":140},[123,90563,3509],{"class":129},[123,90565,53042],{"class":53707},[123,90567,53723],{"class":337},[123,90569,134],{"class":129},[123,90571,53728],{"class":143},[123,90573,53714],{"class":129},[123,90575,90576],{"class":125,"line":156},[123,90577,232],{"emptyLinePlaceholder":231},[123,90579,90580,90582,90584],{"class":125,"line":168},[123,90581,3509],{"class":129},[123,90583,53741],{"class":53707},[123,90585,53714],{"class":129},[123,90587,90588,90590,90592,90594,90596,90598],{"class":125,"line":268},[123,90589,54548],{"class":129},[123,90591,53751],{"class":53707},[123,90593,53754],{"class":337},[123,90595,134],{"class":129},[123,90597,53759],{"class":143},[123,90599,53714],{"class":129},[123,90601,90602,90604,90606,90608,90610,90612,90614,90616,90618],{"class":125,"line":291},[123,90603,54548],{"class":129},[123,90605,53751],{"class":53707},[123,90607,17350],{"class":337},[123,90609,134],{"class":129},[123,90611,53798],{"class":143},[123,90613,53778],{"class":337},[123,90615,134],{"class":129},[123,90617,53805],{"class":143},[123,90619,53714],{"class":129},[123,90621,90622,90624,90626,90628,90630],{"class":125,"line":300},[123,90623,54548],{"class":129},[123,90625,642],{"class":53707},[123,90627,53816],{"class":129},[123,90629,642],{"class":53707},[123,90631,53714],{"class":129},[123,90633,90634,90636,90638],{"class":125,"line":305},[123,90635,54190],{"class":129},[123,90637,53741],{"class":53707},[123,90639,53714],{"class":129},[123,90641,90642],{"class":125,"line":316},[123,90643,232],{"emptyLinePlaceholder":231},[123,90645,90646,90648,90650],{"class":125,"line":673},[123,90647,3509],{"class":129},[123,90649,54205],{"class":53707},[123,90651,53714],{"class":129},[123,90653,90654],{"class":125,"line":692},[123,90655,90656],{"class":2673},"  \u003C!-- 先引用这个库 -->\n",[123,90658,90659,90661,90663,90665,90667,90670,90672,90674],{"class":125,"line":713},[123,90660,54548],{"class":129},[123,90662,54218],{"class":53707},[123,90664,57642],{"class":337},[123,90666,134],{"class":129},[123,90668,90669],{"class":143},"\"lodash.min.js\"",[123,90671,57717],{"class":129},[123,90673,54218],{"class":53707},[123,90675,53714],{"class":129},[123,90677,90678,90680,90682],{"class":125,"line":718},[123,90679,54548],{"class":129},[123,90681,54218],{"class":53707},[123,90683,53714],{"class":129},[123,90685,90686,90688,90690,90692],{"class":125,"line":1138},[123,90687,13653],{"class":133},[123,90689,72371],{"class":164},[123,90691,15995],{"class":133},[123,90693,137],{"class":129},[123,90695,90696,90698,90700],{"class":125,"line":1429},[123,90697,74016],{"class":129},[123,90699,90206],{"class":143},[123,90701,153],{"class":129},[123,90703,90704,90706,90708],{"class":125,"line":1439},[123,90705,74026],{"class":129},[123,90707,3252],{"class":164},[123,90709,153],{"class":129},[123,90711,90712,90714,90716,90718,90720],{"class":125,"line":1444},[123,90713,90221],{"class":129},[123,90715,90224],{"class":143},[123,90717,251],{"class":129},[123,90719,90229],{"class":143},[123,90721,860],{"class":129},[123,90723,90724],{"class":125,"line":1453},[123,90725,80270],{"class":129},[123,90727,90728,90730],{"class":125,"line":1458},[123,90729,90240],{"class":129},[123,90731,90243],{"class":143},[123,90733,90734],{"class":125,"line":1476},[123,90735,54801],{"class":129},[123,90737,90738],{"class":125,"line":1494},[123,90739,4631],{"class":129},[123,90741,90742,90744,90746,90748,90751,90754],{"class":125,"line":1499},[123,90743,13653],{"class":133},[123,90745,90258],{"class":164},[123,90747,15995],{"class":133},[123,90749,90750],{"class":129}," _.",[123,90752,90753],{"class":337},"cloneDeep",[123,90755,72436],{"class":129},[123,90757,90758,90760,90762],{"class":125,"line":1517},[123,90759,76153],{"class":129},[123,90761,60649],{"class":337},[123,90763,90450],{"class":129},[123,90765,90766,90769,90771],{"class":125,"line":1534},[123,90767,90768],{"class":129},"    o.family.baby ",[123,90770,134],{"class":133},[123,90772,90484],{"class":143},[123,90774,90775,90777,90779],{"class":125,"line":1539},[123,90776,76153],{"class":129},[123,90778,60649],{"class":337},[123,90780,72436],{"class":129},[123,90782,90783,90785,90787],{"class":125,"line":2080},[123,90784,54820],{"class":129},[123,90786,54218],{"class":53707},[123,90788,53714],{"class":129},[123,90790,90791,90793,90795],{"class":125,"line":2097},[123,90792,54190],{"class":129},[123,90794,54205],{"class":53707},[123,90796,53714],{"class":129},[123,90798,90799],{"class":125,"line":2114},[123,90800,232],{"emptyLinePlaceholder":231},[123,90802,90803,90805,90807],{"class":125,"line":2125},[123,90804,54190],{"class":129},[123,90806,53042],{"class":53707},[123,90808,53714],{"class":129},[19,90810,90811],{},[3929,90812],{"alt":118,"src":90813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24425,90815,90817],{"id":90816},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[113,90819,90821],{"className":53040,"code":90820,"language":53042,"meta":118,"style":118},"\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",[120,90822,90823,90833,90847,90851,90859,90873,90893,90905,90913,90917,90925,90933,90943,90951,90959,90971,90975,90981,90985,90989,90994,90999,91004,91030,91038,91047,91055,91063,91071,91075],{"__ignoreMap":118},[123,90824,90825,90827,90829,90831],{"class":125,"line":126},[123,90826,53704],{"class":129},[123,90828,53708],{"class":53707},[123,90830,53711],{"class":337},[123,90832,53714],{"class":129},[123,90834,90835,90837,90839,90841,90843,90845],{"class":125,"line":140},[123,90836,3509],{"class":129},[123,90838,53042],{"class":53707},[123,90840,53723],{"class":337},[123,90842,134],{"class":129},[123,90844,53728],{"class":143},[123,90846,53714],{"class":129},[123,90848,90849],{"class":125,"line":156},[123,90850,232],{"emptyLinePlaceholder":231},[123,90852,90853,90855,90857],{"class":125,"line":168},[123,90854,3509],{"class":129},[123,90856,53741],{"class":53707},[123,90858,53714],{"class":129},[123,90860,90861,90863,90865,90867,90869,90871],{"class":125,"line":268},[123,90862,54548],{"class":129},[123,90864,53751],{"class":53707},[123,90866,53754],{"class":337},[123,90868,134],{"class":129},[123,90870,53759],{"class":143},[123,90872,53714],{"class":129},[123,90874,90875,90877,90879,90881,90883,90885,90887,90889,90891],{"class":125,"line":291},[123,90876,54548],{"class":129},[123,90878,53751],{"class":53707},[123,90880,17350],{"class":337},[123,90882,134],{"class":129},[123,90884,53798],{"class":143},[123,90886,53778],{"class":337},[123,90888,134],{"class":129},[123,90890,53805],{"class":143},[123,90892,53714],{"class":129},[123,90894,90895,90897,90899,90901,90903],{"class":125,"line":300},[123,90896,54548],{"class":129},[123,90898,642],{"class":53707},[123,90900,53816],{"class":129},[123,90902,642],{"class":53707},[123,90904,53714],{"class":129},[123,90906,90907,90909,90911],{"class":125,"line":305},[123,90908,54190],{"class":129},[123,90910,53741],{"class":53707},[123,90912,53714],{"class":129},[123,90914,90915],{"class":125,"line":316},[123,90916,232],{"emptyLinePlaceholder":231},[123,90918,90919,90921,90923],{"class":125,"line":673},[123,90920,3509],{"class":129},[123,90922,54205],{"class":53707},[123,90924,53714],{"class":129},[123,90926,90927,90929,90931],{"class":125,"line":692},[123,90928,54548],{"class":129},[123,90930,54218],{"class":53707},[123,90932,53714],{"class":129},[123,90934,90935,90937,90939,90941],{"class":125,"line":713},[123,90936,13653],{"class":133},[123,90938,72371],{"class":164},[123,90940,15995],{"class":133},[123,90942,137],{"class":129},[123,90944,90945,90947,90949],{"class":125,"line":718},[123,90946,74016],{"class":129},[123,90948,90206],{"class":143},[123,90950,153],{"class":129},[123,90952,90953,90955,90957],{"class":125,"line":1138},[123,90954,74026],{"class":129},[123,90956,3252],{"class":164},[123,90958,153],{"class":129},[123,90960,90961,90963,90965,90967,90969],{"class":125,"line":1429},[123,90962,90221],{"class":129},[123,90964,90224],{"class":143},[123,90966,251],{"class":129},[123,90968,90229],{"class":143},[123,90970,860],{"class":129},[123,90972,90973],{"class":125,"line":1439},[123,90974,80270],{"class":129},[123,90976,90977,90979],{"class":125,"line":1444},[123,90978,90240],{"class":129},[123,90980,90243],{"class":143},[123,90982,90983],{"class":125,"line":1453},[123,90984,54801],{"class":129},[123,90986,90987],{"class":125,"line":1458},[123,90988,4631],{"class":129},[123,90990,90991],{"class":125,"line":1476},[123,90992,90993],{"class":2673},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[123,90995,90996],{"class":125,"line":1494},[123,90997,90998],{"class":2673},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[123,91000,91001],{"class":125,"line":1499},[123,91002,91003],{"class":2673},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[123,91005,91006,91008,91010,91012,91015,91017,91020,91022,91024,91026,91028],{"class":125,"line":1517},[123,91007,13653],{"class":133},[123,91009,90258],{"class":164},[123,91011,15995],{"class":133},[123,91013,91014],{"class":164}," JSON",[123,91016,3161],{"class":129},[123,91018,91019],{"class":337},"parse",[123,91021,1315],{"class":129},[123,91023,74064],{"class":164},[123,91025,3161],{"class":129},[123,91027,74069],{"class":337},[123,91029,74072],{"class":129},[123,91031,91032,91034,91036],{"class":125,"line":1534},[123,91033,76153],{"class":129},[123,91035,60649],{"class":337},[123,91037,90450],{"class":129},[123,91039,91040,91042,91044],{"class":125,"line":1539},[123,91041,90768],{"class":129},[123,91043,134],{"class":133},[123,91045,91046],{"class":143}," '123'\n",[123,91048,91049,91051,91053],{"class":125,"line":2080},[123,91050,76153],{"class":129},[123,91052,60649],{"class":337},[123,91054,72436],{"class":129},[123,91056,91057,91059,91061],{"class":125,"line":2097},[123,91058,54820],{"class":129},[123,91060,54218],{"class":53707},[123,91062,53714],{"class":129},[123,91064,91065,91067,91069],{"class":125,"line":2114},[123,91066,54190],{"class":129},[123,91068,54205],{"class":53707},[123,91070,53714],{"class":129},[123,91072,91073],{"class":125,"line":2125},[123,91074,232],{"emptyLinePlaceholder":231},[123,91076,91077,91079,91081],{"class":125,"line":2130},[123,91078,54190],{"class":129},[123,91080,53042],{"class":53707},[123,91082,53714],{"class":129},[19,91084,91085],{},[3929,91086],{"alt":118,"src":91087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91089,91091],{"id":91090},"_415-异常处理","4.15 异常处理",[26,91093,91094],{},[29,91095,91096],{},"throw抛异常",[19,91098,91099],{},[3929,91100],{"alt":118,"src":91101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,91103,91104],{"start":140},[29,91105,91106],{},"try\u002Fcatch 捕获错误信息",[19,91108,91109],{},[3929,91110],{"alt":118,"src":91111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[113,91113,91115],{"className":53040,"code":91114,"language":53042,"meta":118,"style":118},"\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",[120,91116,91117,91127,91141,91145,91153,91167,91187,91199,91207,91211,91219,91231,91239,91248,91255,91260,91279,91288,91299,91304,91314,91319,91324,91329,91346,91350,91355,91362,91374,91378,91390,91394,91398,91403,91408,91415,91423,91431,91435],{"__ignoreMap":118},[123,91118,91119,91121,91123,91125],{"class":125,"line":126},[123,91120,53704],{"class":129},[123,91122,53708],{"class":53707},[123,91124,53711],{"class":337},[123,91126,53714],{"class":129},[123,91128,91129,91131,91133,91135,91137,91139],{"class":125,"line":140},[123,91130,3509],{"class":129},[123,91132,53042],{"class":53707},[123,91134,53723],{"class":337},[123,91136,134],{"class":129},[123,91138,53728],{"class":143},[123,91140,53714],{"class":129},[123,91142,91143],{"class":125,"line":156},[123,91144,232],{"emptyLinePlaceholder":231},[123,91146,91147,91149,91151],{"class":125,"line":168},[123,91148,3509],{"class":129},[123,91150,53741],{"class":53707},[123,91152,53714],{"class":129},[123,91154,91155,91157,91159,91161,91163,91165],{"class":125,"line":268},[123,91156,54548],{"class":129},[123,91158,53751],{"class":53707},[123,91160,53754],{"class":337},[123,91162,134],{"class":129},[123,91164,53759],{"class":143},[123,91166,53714],{"class":129},[123,91168,91169,91171,91173,91175,91177,91179,91181,91183,91185],{"class":125,"line":291},[123,91170,54548],{"class":129},[123,91172,53751],{"class":53707},[123,91174,17350],{"class":337},[123,91176,134],{"class":129},[123,91178,53798],{"class":143},[123,91180,53778],{"class":337},[123,91182,134],{"class":129},[123,91184,53805],{"class":143},[123,91186,53714],{"class":129},[123,91188,91189,91191,91193,91195,91197],{"class":125,"line":300},[123,91190,54548],{"class":129},[123,91192,642],{"class":53707},[123,91194,53816],{"class":129},[123,91196,642],{"class":53707},[123,91198,53714],{"class":129},[123,91200,91201,91203,91205],{"class":125,"line":305},[123,91202,54190],{"class":129},[123,91204,53741],{"class":53707},[123,91206,53714],{"class":129},[123,91208,91209],{"class":125,"line":316},[123,91210,232],{"emptyLinePlaceholder":231},[123,91212,91213,91215,91217],{"class":125,"line":673},[123,91214,3509],{"class":129},[123,91216,54205],{"class":53707},[123,91218,53714],{"class":129},[123,91220,91221,91223,91225,91227,91229],{"class":125,"line":692},[123,91222,54548],{"class":129},[123,91224,19],{"class":53707},[123,91226,55897],{"class":129},[123,91228,19],{"class":53707},[123,91230,53714],{"class":129},[123,91232,91233,91235,91237],{"class":125,"line":713},[123,91234,54548],{"class":129},[123,91236,54218],{"class":53707},[123,91238,53714],{"class":129},[123,91240,91241,91243,91246],{"class":125,"line":718},[123,91242,72484],{"class":133},[123,91244,91245],{"class":337}," fn",[123,91247,13285],{"class":129},[123,91249,91250,91253],{"class":125,"line":1138},[123,91251,91252],{"class":133},"      try",[123,91254,137],{"class":129},[123,91256,91257],{"class":125,"line":1429},[123,91258,91259],{"class":2673},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[123,91261,91262,91264,91266,91268,91270,91272,91274,91277],{"class":125,"line":1439},[123,91263,63672],{"class":133},[123,91265,9258],{"class":164},[123,91267,15995],{"class":133},[123,91269,56799],{"class":129},[123,91271,56802],{"class":337},[123,91273,1315],{"class":129},[123,91275,91276],{"class":143},"'.p'",[123,91278,288],{"class":129},[123,91280,91281,91284,91286],{"class":125,"line":1444},[123,91282,91283],{"class":129},"        p.style.color ",[123,91285,134],{"class":133},[123,91287,69452],{"class":143},[123,91289,91290,91293,91296],{"class":125,"line":1453},[123,91291,91292],{"class":129},"      } ",[123,91294,91295],{"class":133},"catch",[123,91297,91298],{"class":129}," (err) {\n",[123,91300,91301],{"class":125,"line":1458},[123,91302,91303],{"class":2673},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[123,91305,91306,91309,91311],{"class":125,"line":1476},[123,91307,91308],{"class":129},"        console.",[123,91310,60649],{"class":337},[123,91312,91313],{"class":129},"(err.message)\n",[123,91315,91316],{"class":125,"line":1494},[123,91317,91318],{"class":2673},"        \u002F\u002F 想要中断程序，需要加return\n",[123,91320,91321],{"class":125,"line":1499},[123,91322,91323],{"class":2673},"        \u002F\u002F return\n",[123,91325,91326],{"class":125,"line":1517},[123,91327,91328],{"class":2673},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[123,91330,91331,91334,91336,91339,91341,91344],{"class":125,"line":1534},[123,91332,91333],{"class":133},"        throw",[123,91335,14010],{"class":133},[123,91337,91338],{"class":337}," Error",[123,91340,1315],{"class":129},[123,91342,91343],{"class":143},"'你看看，选择器错误了吧'",[123,91345,288],{"class":129},[123,91347,91348],{"class":125,"line":1539},[123,91349,54801],{"class":129},[123,91351,91352],{"class":125,"line":2080},[123,91353,91354],{"class":2673},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[123,91356,91357,91360],{"class":125,"line":2097},[123,91358,91359],{"class":133},"      finally",[123,91361,137],{"class":129},[123,91363,91364,91367,91369,91372],{"class":125,"line":2114},[123,91365,91366],{"class":337},"        alert",[123,91368,1315],{"class":129},[123,91370,91371],{"class":143},"'弹出对话框'",[123,91373,288],{"class":129},[123,91375,91376],{"class":125,"line":2125},[123,91377,54801],{"class":129},[123,91379,91380,91382,91384,91386,91388],{"class":125,"line":2130},[123,91381,60646],{"class":129},[123,91383,60649],{"class":337},[123,91385,1315],{"class":129},[123,91387,3077],{"class":164},[123,91389,288],{"class":129},[123,91391,91392],{"class":125,"line":5033},[123,91393,232],{"emptyLinePlaceholder":231},[123,91395,91396],{"class":125,"line":5041},[123,91397,4631],{"class":129},[123,91399,91400],{"class":125,"line":5046},[123,91401,91402],{"class":2673},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[123,91404,91405],{"class":125,"line":5052},[123,91406,91407],{"class":2673},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[123,91409,91410,91413],{"class":125,"line":5058},[123,91411,91412],{"class":337},"    fn",[123,91414,4420],{"class":129},[123,91416,91417,91419,91421],{"class":125,"line":5063},[123,91418,54820],{"class":129},[123,91420,54218],{"class":53707},[123,91422,53714],{"class":129},[123,91424,91425,91427,91429],{"class":125,"line":10380},[123,91426,54190],{"class":129},[123,91428,54205],{"class":53707},[123,91430,53714],{"class":129},[123,91432,91433],{"class":125,"line":10404},[123,91434,232],{"emptyLinePlaceholder":231},[123,91436,91437,91439,91441],{"class":125,"line":10409},[123,91438,54190],{"class":129},[123,91440,53042],{"class":53707},[123,91442,53714],{"class":129},[19,91444,91445],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,91447,91448],{"start":156},[29,91449,91450],{},"debugger",[19,91452,91453],{},[3929,91454],{"alt":118,"src":91455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91457,91458],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91460,91462],{"id":91461},"_416-处理this","4.16 处理this",[2587,91464,91466],{"id":91465},"_4161-this的指向","4.16.1 this的指向",[26,91468,91469],{},[29,91470,91471],{},"普通函数的this",[19,91473,91474],{},[3929,91475],{"alt":118,"src":91476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,91478,91479],{"start":140},[29,91480,91481],{},"箭头函数的this",[19,91483,91484],{},[3929,91485],{"alt":118,"src":91486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91488,91489],{},[3929,91490],{"alt":118,"src":91491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91493,91494],{},[3929,91495],{"alt":118,"src":91496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[2587,91498,91500],{"id":91499},"_4162-this的改变","4.16.2 this的改变",[19,91502,91503],{},"call() apply() bind()",[26,91505,91506],{},[29,91507,91508],{},"call()",[19,91510,91511],{},[3929,91512],{"alt":118,"src":91513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91515,91516],{},"两个作用：①调用函数；②改变this指向",[113,91518,91520],{"className":55470,"code":91519,"language":55472,"meta":118,"style":118},"\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",[120,91521,91522,91530,91538,91542,91547,91551,91556,91561,91566,91570,91575,91583],{"__ignoreMap":118},[123,91523,91524,91526,91528],{"class":125,"line":126},[123,91525,3509],{"class":129},[123,91527,54205],{"class":53707},[123,91529,53714],{"class":129},[123,91531,91532,91534,91536],{"class":125,"line":140},[123,91533,54548],{"class":129},[123,91535,54218],{"class":53707},[123,91537,53714],{"class":129},[123,91539,91540],{"class":125,"line":156},[123,91541,73923],{"class":129},[123,91543,91544],{"class":125,"line":168},[123,91545,91546],{"class":129},"      uname: 'pink'\n",[123,91548,91549],{"class":125,"line":268},[123,91550,4631],{"class":129},[123,91552,91553],{"class":125,"line":291},[123,91554,91555],{"class":129},"    function fn(x, y) {\n",[123,91557,91558],{"class":125,"line":300},[123,91559,91560],{"class":129},"      console.log(this)  \u002F\u002Fwindow\n",[123,91562,91563],{"class":125,"line":305},[123,91564,91565],{"class":129},"      console.log(x + y)\n",[123,91567,91568],{"class":125,"line":316},[123,91569,4631],{"class":129},[123,91571,91572],{"class":125,"line":673},[123,91573,91574],{"class":129},"    fn.call(obj, 1, 2)\n",[123,91576,91577,91579,91581],{"class":125,"line":692},[123,91578,54820],{"class":129},[123,91580,54218],{"class":53707},[123,91582,53714],{"class":129},[123,91584,91585,91587,91589],{"class":125,"line":713},[123,91586,54190],{"class":129},[123,91588,54205],{"class":53707},[123,91590,53714],{"class":129},[19,91592,91593],{},[3929,91594],{"alt":118,"src":91595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,91597,91598],{"start":140},[29,91599,91600],{},"apply()",[19,91602,91603],{},[3929,91604],{"alt":118,"src":91605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91607,91516],{},[19,91609,91610],{},"call传递的是普通参数，而apply必须传递的是数组",[113,91612,91614],{"className":53040,"code":91613,"language":53042,"meta":118,"style":118},"\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",[120,91615,91616,91626,91640,91644,91652,91666,91686,91698,91706,91710,91718,91726,91736,91743,91747,91752,91768,91780,91794,91798,91803,91822,91827,91831,91836,91841,91849,91854,91876,91881,91897,91913,91925,91929,91934,91953,91961,91969,91973],{"__ignoreMap":118},[123,91617,91618,91620,91622,91624],{"class":125,"line":126},[123,91619,53704],{"class":129},[123,91621,53708],{"class":53707},[123,91623,53711],{"class":337},[123,91625,53714],{"class":129},[123,91627,91628,91630,91632,91634,91636,91638],{"class":125,"line":140},[123,91629,3509],{"class":129},[123,91631,53042],{"class":53707},[123,91633,53723],{"class":337},[123,91635,134],{"class":129},[123,91637,53728],{"class":143},[123,91639,53714],{"class":129},[123,91641,91642],{"class":125,"line":156},[123,91643,232],{"emptyLinePlaceholder":231},[123,91645,91646,91648,91650],{"class":125,"line":168},[123,91647,3509],{"class":129},[123,91649,53741],{"class":53707},[123,91651,53714],{"class":129},[123,91653,91654,91656,91658,91660,91662,91664],{"class":125,"line":268},[123,91655,54548],{"class":129},[123,91657,53751],{"class":53707},[123,91659,53754],{"class":337},[123,91661,134],{"class":129},[123,91663,53759],{"class":143},[123,91665,53714],{"class":129},[123,91667,91668,91670,91672,91674,91676,91678,91680,91682,91684],{"class":125,"line":291},[123,91669,54548],{"class":129},[123,91671,53751],{"class":53707},[123,91673,17350],{"class":337},[123,91675,134],{"class":129},[123,91677,53798],{"class":143},[123,91679,53778],{"class":337},[123,91681,134],{"class":129},[123,91683,53805],{"class":143},[123,91685,53714],{"class":129},[123,91687,91688,91690,91692,91694,91696],{"class":125,"line":300},[123,91689,54548],{"class":129},[123,91691,642],{"class":53707},[123,91693,53816],{"class":129},[123,91695,642],{"class":53707},[123,91697,53714],{"class":129},[123,91699,91700,91702,91704],{"class":125,"line":305},[123,91701,54190],{"class":129},[123,91703,53741],{"class":53707},[123,91705,53714],{"class":129},[123,91707,91708],{"class":125,"line":316},[123,91709,232],{"emptyLinePlaceholder":231},[123,91711,91712,91714,91716],{"class":125,"line":673},[123,91713,3509],{"class":129},[123,91715,54205],{"class":53707},[123,91717,53714],{"class":129},[123,91719,91720,91722,91724],{"class":125,"line":692},[123,91721,54548],{"class":129},[123,91723,54218],{"class":53707},[123,91725,53714],{"class":129},[123,91727,91728,91730,91732,91734],{"class":125,"line":713},[123,91729,13653],{"class":133},[123,91731,72371],{"class":164},[123,91733,15995],{"class":133},[123,91735,137],{"class":129},[123,91737,91738,91740],{"class":125,"line":718},[123,91739,74026],{"class":129},[123,91741,91742],{"class":164},"18\n",[123,91744,91745],{"class":125,"line":1138},[123,91746,4631],{"class":129},[123,91748,91749],{"class":125,"line":1429},[123,91750,91751],{"class":2673},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[123,91753,91754,91756,91758,91760,91762,91764,91766],{"class":125,"line":1439},[123,91755,72484],{"class":133},[123,91757,91245],{"class":337},[123,91759,1315],{"class":129},[123,91761,3421],{"class":279},[123,91763,251],{"class":129},[123,91765,3446],{"class":279},[123,91767,14873],{"class":129},[123,91769,91770,91772,91774,91776,91778],{"class":125,"line":1444},[123,91771,60646],{"class":129},[123,91773,60649],{"class":337},[123,91775,1315],{"class":129},[123,91777,89389],{"class":164},[123,91779,288],{"class":129},[123,91781,91782,91784,91786,91789,91791],{"class":125,"line":1453},[123,91783,60646],{"class":129},[123,91785,60649],{"class":337},[123,91787,91788],{"class":129},"(x ",[123,91790,3086],{"class":133},[123,91792,91793],{"class":129}," y)\n",[123,91795,91796],{"class":125,"line":1458},[123,91797,4631],{"class":129},[123,91799,91800],{"class":125,"line":1476},[123,91801,91802],{"class":2673},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[123,91804,91805,91808,91811,91814,91816,91818,91820],{"class":125,"line":1494},[123,91806,91807],{"class":129},"    fn.",[123,91809,91810],{"class":337},"apply",[123,91812,91813],{"class":129},"(obj, [",[123,91815,2825],{"class":164},[123,91817,251],{"class":129},[123,91819,2692],{"class":164},[123,91821,444],{"class":129},[123,91823,91824],{"class":125,"line":1499},[123,91825,91826],{"class":2673},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[123,91828,91829],{"class":125,"line":1517},[123,91830,232],{"emptyLinePlaceholder":231},[123,91832,91833],{"class":125,"line":1534},[123,91834,91835],{"class":2673},"    \u002F\u002F 使用场景：求数组最大值\n",[123,91837,91838],{"class":125,"line":1539},[123,91839,91840],{"class":2673},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[123,91842,91843,91846],{"class":125,"line":2080},[123,91844,91845],{"class":2673},"    \u002F\u002F console.log(max)",[123,91847,91848],{"class":2673},"   \u002F\u002F3\n",[123,91850,91851],{"class":125,"line":2097},[123,91852,91853],{"class":2673},"    \u002F\u002F 指向空或者Math都是可以的\n",[123,91855,91856,91858,91860,91862,91864,91866,91868,91870,91872,91874],{"class":125,"line":2114},[123,91857,13653],{"class":133},[123,91859,60097],{"class":164},[123,91861,15995],{"class":133},[123,91863,977],{"class":129},[123,91865,259],{"class":164},[123,91867,251],{"class":129},[123,91869,3108],{"class":164},[123,91871,251],{"class":129},[123,91873,3138],{"class":164},[123,91875,998],{"class":129},[123,91877,91878],{"class":125,"line":2125},[123,91879,91880],{"class":2673},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[123,91882,91883,91885,91887,91889,91892,91894],{"class":125,"line":2130},[123,91884,13653],{"class":133},[123,91886,8384],{"class":164},[123,91888,15995],{"class":133},[123,91890,91891],{"class":129}," Math.max.",[123,91893,91810],{"class":337},[123,91895,91896],{"class":129},"(Math, arr)\n",[123,91898,91899,91901,91904,91906,91909,91911],{"class":125,"line":5033},[123,91900,13653],{"class":133},[123,91902,91903],{"class":164}," min",[123,91905,15995],{"class":133},[123,91907,91908],{"class":129}," Math.min.",[123,91910,91810],{"class":337},[123,91912,91896],{"class":129},[123,91914,91915,91917,91919,91922],{"class":125,"line":5041},[123,91916,76153],{"class":129},[123,91918,60649],{"class":337},[123,91920,91921],{"class":129},"(max, min)     ",[123,91923,91924],{"class":2673},"\u002F\u002F100,4\n",[123,91926,91927],{"class":125,"line":5046},[123,91928,232],{"emptyLinePlaceholder":231},[123,91930,91931],{"class":125,"line":5052},[123,91932,91933],{"class":2673},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[123,91935,91936,91938,91940,91943,91945,91947,91950],{"class":125,"line":5058},[123,91937,76153],{"class":129},[123,91939,60649],{"class":337},[123,91941,91942],{"class":129},"(Max.",[123,91944,8448],{"class":337},[123,91946,1315],{"class":129},[123,91948,91949],{"class":133},"...",[123,91951,91952],{"class":129},"arr))\n",[123,91954,91955,91957,91959],{"class":125,"line":5063},[123,91956,54820],{"class":129},[123,91958,54218],{"class":53707},[123,91960,53714],{"class":129},[123,91962,91963,91965,91967],{"class":125,"line":10380},[123,91964,54190],{"class":129},[123,91966,54205],{"class":53707},[123,91968,53714],{"class":129},[123,91970,91971],{"class":125,"line":10404},[123,91972,232],{"emptyLinePlaceholder":231},[123,91974,91975,91977,91979],{"class":125,"line":10409},[123,91976,54190],{"class":129},[123,91978,53042],{"class":53707},[123,91980,53714],{"class":129},[19,91982,91983],{},[3929,91984],{"alt":118,"src":91985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91987,91988],{"start":156},[29,91989,91990],{},"bind()",[19,91992,91993],{},[3929,91994],{"alt":118,"src":91995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91997,91998],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,92000,92001],{},"bind的语法跟call很相似",[113,92003,92005],{"className":55470,"code":92004,"language":55472,"meta":118,"style":118},"\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",[120,92006,92007,92015,92023,92027,92032,92036,92040,92045,92049,92054,92059,92064,92069,92074,92079,92084,92088,92096],{"__ignoreMap":118},[123,92008,92009,92011,92013],{"class":125,"line":126},[123,92010,3509],{"class":129},[123,92012,54205],{"class":53707},[123,92014,53714],{"class":129},[123,92016,92017,92019,92021],{"class":125,"line":140},[123,92018,54548],{"class":129},[123,92020,54218],{"class":53707},[123,92022,53714],{"class":129},[123,92024,92025],{"class":125,"line":156},[123,92026,73923],{"class":129},[123,92028,92029],{"class":125,"line":168},[123,92030,92031],{"class":129},"      age: 18\n",[123,92033,92034],{"class":125,"line":268},[123,92035,4631],{"class":129},[123,92037,92038],{"class":125,"line":291},[123,92039,79543],{"class":129},[123,92041,92042],{"class":125,"line":300},[123,92043,92044],{"class":129},"      console.log(this)\n",[123,92046,92047],{"class":125,"line":305},[123,92048,4631],{"class":129},[123,92050,92051],{"class":125,"line":316},[123,92052,92053],{"class":129},"    \u002F\u002F 1.bind 不会调用函数\n",[123,92055,92056],{"class":125,"line":673},[123,92057,92058],{"class":129},"    \u002F\u002F 2.bind能改变this的指向\n",[123,92060,92061],{"class":125,"line":692},[123,92062,92063],{"class":129},"    fn.bind()\n",[123,92065,92066],{"class":125,"line":713},[123,92067,92068],{"class":129},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[123,92070,92071],{"class":125,"line":718},[123,92072,92073],{"class":129},"    const fun = fn.bind(obj)\n",[123,92075,92076],{"class":125,"line":1138},[123,92077,92078],{"class":129},"    \u002F\u002F console.log(fun)\n",[123,92080,92081],{"class":125,"line":1429},[123,92082,92083],{"class":129},"    \u002F\u002F 调用,查看this的指向\n",[123,92085,92086],{"class":125,"line":1439},[123,92087,55054],{"class":129},[123,92089,92090,92092,92094],{"class":125,"line":1444},[123,92091,54820],{"class":129},[123,92093,54218],{"class":53707},[123,92095,53714],{"class":129},[123,92097,92098,92100,92102],{"class":125,"line":1453},[123,92099,54190],{"class":129},[123,92101,54205],{"class":53707},[123,92103,53714],{"class":129},[19,92105,92106],{},[3929,92107],{"alt":118,"src":92108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,92110,92111],{"start":168},[29,92112,92113],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[113,92115,92117],{"className":55470,"code":92116,"language":55472,"meta":118,"style":118},"\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",[120,92118,92119,92127,92140,92148,92153,92157,92162,92167,92172,92177,92182,92187,92192,92197,92201,92209],{"__ignoreMap":118},[123,92120,92121,92123,92125],{"class":125,"line":126},[123,92122,3509],{"class":129},[123,92124,54205],{"class":53707},[123,92126,53714],{"class":129},[123,92128,92129,92131,92133,92136,92138],{"class":125,"line":140},[123,92130,54548],{"class":129},[123,92132,56290],{"class":53707},[123,92134,92135],{"class":129},">禁用\u003C\u002F",[123,92137,56290],{"class":53707},[123,92139,53714],{"class":129},[123,92141,92142,92144,92146],{"class":125,"line":156},[123,92143,54548],{"class":129},[123,92145,54218],{"class":53707},[123,92147,53714],{"class":129},[123,92149,92150],{"class":125,"line":168},[123,92151,92152],{"class":129},"    const btn = document.querySelector('button')\n",[123,92154,92155],{"class":125,"line":268},[123,92156,61418],{"class":129},[123,92158,92159],{"class":125,"line":291},[123,92160,92161],{"class":129},"      this.disabled = true\n",[123,92163,92164],{"class":125,"line":300},[123,92165,92166],{"class":129},"      \u002F\u002F 定时器是window进行调用的\n",[123,92168,92169],{"class":125,"line":305},[123,92170,92171],{"class":129},"      setTimeout(function () {\n",[123,92173,92174],{"class":125,"line":316},[123,92175,92176],{"class":129},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[123,92178,92179],{"class":125,"line":673},[123,92180,92181],{"class":129},"        this.disabled = false\n",[123,92183,92184],{"class":125,"line":692},[123,92185,92186],{"class":129},"      }.bind(this), 2000)\n",[123,92188,92189],{"class":125,"line":713},[123,92190,92191],{"class":129},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[123,92193,92194],{"class":125,"line":718},[123,92195,92196],{"class":129},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[123,92198,92199],{"class":125,"line":1138},[123,92200,35872],{"class":129},[123,92202,92203,92205,92207],{"class":125,"line":1429},[123,92204,54820],{"class":129},[123,92206,54218],{"class":53707},[123,92208,53714],{"class":129},[123,92210,92211,92213,92215],{"class":125,"line":1439},[123,92212,54190],{"class":129},[123,92214,54205],{"class":53707},[123,92216,53714],{"class":129},[26,92218,92219],{"start":268},[29,92220,24380],{},[19,92222,92223],{},[3929,92224],{"alt":118,"src":92225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92227,92229],{"id":92228},"_417-性能优化","4.17 性能优化",[2587,92231,92233],{"id":92232},"_4171-防抖","4.17.1 防抖",[19,92235,92236],{},[3929,92237],{"alt":118,"src":92238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92240,92241],{},[2759,92242,92243],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92245,92246],{},"防抖实现方式：",[3606,92248,92249],{},[29,92250,92251],{},"lodash 提供了防抖处理",[19,92253,92254],{},"_.debounce(func,[wait=0],[options={}])",[19,92256,92257],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[113,92259,92261],{"className":53040,"code":92260,"language":53042,"meta":118,"style":118},"\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",[120,92262,92263,92273,92287,92291,92299,92313,92333,92345,92353,92359,92369,92381,92393,92404,92416,92426,92436,92449,92453,92461,92469,92473,92481,92499,92517,92525,92544,92554,92563,92574,92579,92583,92588,92593,92598,92623,92631,92639,92643],{"__ignoreMap":118},[123,92264,92265,92267,92269,92271],{"class":125,"line":126},[123,92266,53704],{"class":129},[123,92268,53708],{"class":53707},[123,92270,53711],{"class":337},[123,92272,53714],{"class":129},[123,92274,92275,92277,92279,92281,92283,92285],{"class":125,"line":140},[123,92276,3509],{"class":129},[123,92278,53042],{"class":53707},[123,92280,53723],{"class":337},[123,92282,134],{"class":129},[123,92284,53728],{"class":143},[123,92286,53714],{"class":129},[123,92288,92289],{"class":125,"line":156},[123,92290,232],{"emptyLinePlaceholder":231},[123,92292,92293,92295,92297],{"class":125,"line":168},[123,92294,3509],{"class":129},[123,92296,53741],{"class":53707},[123,92298,53714],{"class":129},[123,92300,92301,92303,92305,92307,92309,92311],{"class":125,"line":268},[123,92302,54548],{"class":129},[123,92304,53751],{"class":53707},[123,92306,53754],{"class":337},[123,92308,134],{"class":129},[123,92310,53759],{"class":143},[123,92312,53714],{"class":129},[123,92314,92315,92317,92319,92321,92323,92325,92327,92329,92331],{"class":125,"line":291},[123,92316,54548],{"class":129},[123,92318,53751],{"class":53707},[123,92320,17350],{"class":337},[123,92322,134],{"class":129},[123,92324,53798],{"class":143},[123,92326,53778],{"class":337},[123,92328,134],{"class":129},[123,92330,53805],{"class":143},[123,92332,53714],{"class":129},[123,92334,92335,92337,92339,92341,92343],{"class":125,"line":300},[123,92336,54548],{"class":129},[123,92338,642],{"class":53707},[123,92340,53816],{"class":129},[123,92342,642],{"class":53707},[123,92344,53714],{"class":129},[123,92346,92347,92349,92351],{"class":125,"line":305},[123,92348,54548],{"class":129},[123,92350,2526],{"class":53707},[123,92352,53714],{"class":129},[123,92354,92355,92357],{"class":125,"line":316},[123,92356,57155],{"class":337},[123,92358,137],{"class":129},[123,92360,92361,92363,92365,92367],{"class":125,"line":673},[123,92362,74996],{"class":164},[123,92364,147],{"class":129},[123,92366,62907],{"class":164},[123,92368,3760],{"class":129},[123,92370,92371,92373,92375,92377,92379],{"class":125,"line":692},[123,92372,57174],{"class":164},[123,92374,147],{"class":129},[123,92376,1045],{"class":164},[123,92378,53897],{"class":133},[123,92380,3760],{"class":129},[123,92382,92383,92385,92387,92389,92391],{"class":125,"line":713},[123,92384,57188],{"class":164},[123,92386,147],{"class":129},[123,92388,1045],{"class":164},[123,92390,53897],{"class":133},[123,92392,3760],{"class":129},[123,92394,92395,92397,92399,92402],{"class":125,"line":718},[123,92396,57287],{"class":164},[123,92398,147],{"class":129},[123,92400,92401],{"class":164},"gray",[123,92403,3760],{"class":129},[123,92405,92406,92408,92410,92412,92414],{"class":125,"line":1138},[123,92407,57325],{"class":164},[123,92409,147],{"class":129},[123,92411,3426],{"class":164},[123,92413,53897],{"class":133},[123,92415,3760],{"class":129},[123,92417,92418,92420,92422,92424],{"class":125,"line":1429},[123,92419,59818],{"class":164},[123,92421,147],{"class":129},[123,92423,63244],{"class":164},[123,92425,3760],{"class":129},[123,92427,92428,92430,92432,92434],{"class":125,"line":1439},[123,92429,59688],{"class":164},[123,92431,147],{"class":129},[123,92433,53997],{"class":164},[123,92435,3760],{"class":129},[123,92437,92438,92441,92443,92445,92447],{"class":125,"line":1444},[123,92439,92440],{"class":164},"      padding-top",[123,92442,147],{"class":129},[123,92444,2926],{"class":164},[123,92446,53897],{"class":133},[123,92448,3760],{"class":129},[123,92450,92451],{"class":125,"line":1453},[123,92452,4631],{"class":129},[123,92454,92455,92457,92459],{"class":125,"line":1458},[123,92456,54820],{"class":129},[123,92458,2526],{"class":53707},[123,92460,53714],{"class":129},[123,92462,92463,92465,92467],{"class":125,"line":1476},[123,92464,54190],{"class":129},[123,92466,53741],{"class":53707},[123,92468,53714],{"class":129},[123,92470,92471],{"class":125,"line":1494},[123,92472,232],{"emptyLinePlaceholder":231},[123,92474,92475,92477,92479],{"class":125,"line":1499},[123,92476,3509],{"class":129},[123,92478,54205],{"class":53707},[123,92480,53714],{"class":129},[123,92482,92483,92485,92487,92489,92491,92493,92495,92497],{"class":125,"line":1517},[123,92484,54548],{"class":129},[123,92486,54016],{"class":53707},[123,92488,55889],{"class":337},[123,92490,134],{"class":129},[123,92492,55894],{"class":143},[123,92494,57717],{"class":129},[123,92496,54016],{"class":53707},[123,92498,53714],{"class":129},[123,92500,92501,92503,92505,92507,92509,92511,92513,92515],{"class":125,"line":1534},[123,92502,54548],{"class":129},[123,92504,54218],{"class":53707},[123,92506,57642],{"class":337},[123,92508,134],{"class":129},[123,92510,90669],{"class":143},[123,92512,57717],{"class":129},[123,92514,54218],{"class":53707},[123,92516,53714],{"class":129},[123,92518,92519,92521,92523],{"class":125,"line":1539},[123,92520,54548],{"class":129},[123,92522,54218],{"class":53707},[123,92524,53714],{"class":129},[123,92526,92527,92529,92531,92533,92535,92537,92539,92542],{"class":125,"line":2080},[123,92528,13653],{"class":133},[123,92530,89329],{"class":164},[123,92532,15995],{"class":133},[123,92534,56799],{"class":129},[123,92536,56802],{"class":337},[123,92538,1315],{"class":129},[123,92540,92541],{"class":143},"'.box'",[123,92543,288],{"class":129},[123,92545,92546,92548,92550,92552],{"class":125,"line":2097},[123,92547,54623],{"class":133},[123,92549,11870],{"class":129},[123,92551,134],{"class":133},[123,92553,49740],{"class":164},[123,92555,92556,92558,92561],{"class":125,"line":2114},[123,92557,72484],{"class":133},[123,92559,92560],{"class":337}," mouseMove",[123,92562,13285],{"class":129},[123,92564,92565,92568,92570,92572],{"class":125,"line":2125},[123,92566,92567],{"class":129},"      box.innerHTML ",[123,92569,134],{"class":133},[123,92571,5473],{"class":129},[123,92573,5144],{"class":133},[123,92575,92576],{"class":125,"line":2130},[123,92577,92578],{"class":2673},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[123,92580,92581],{"class":125,"line":5033},[123,92582,4631],{"class":129},[123,92584,92585],{"class":125,"line":5041},[123,92586,92587],{"class":2673},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[123,92589,92590],{"class":125,"line":5046},[123,92591,92592],{"class":2673},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[123,92594,92595],{"class":125,"line":5052},[123,92596,92597],{"class":2673},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[123,92599,92600,92603,92605,92607,92610,92613,92616,92619,92621],{"class":125,"line":5058},[123,92601,92602],{"class":129},"    box.",[123,92604,60215],{"class":337},[123,92606,1315],{"class":129},[123,92608,92609],{"class":143},"'mousemove'",[123,92611,92612],{"class":129},", _.",[123,92614,92615],{"class":337},"debounce",[123,92617,92618],{"class":129},"(mouseMove, ",[123,92620,67475],{"class":164},[123,92622,32913],{"class":129},[123,92624,92625,92627,92629],{"class":125,"line":5063},[123,92626,54820],{"class":129},[123,92628,54218],{"class":53707},[123,92630,53714],{"class":129},[123,92632,92633,92635,92637],{"class":125,"line":10380},[123,92634,54190],{"class":129},[123,92636,54205],{"class":53707},[123,92638,53714],{"class":129},[123,92640,92641],{"class":125,"line":10404},[123,92642,232],{"emptyLinePlaceholder":231},[123,92644,92645,92647,92649],{"class":125,"line":10409},[123,92646,54190],{"class":129},[123,92648,53042],{"class":53707},[123,92650,53714],{"class":129},[3606,92652,92653],{},[29,92654,92655],{},"手写一个防抖函数来处理",[19,92657,92658],{},"防抖的核心就是利用定时器来实现的：",[19,92660,92661],{},"①声明一个定时器变量",[19,92663,92664],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92666,92667],{},"③如果没有定时器则开启定时器，记得存到变量里面",[113,92669,92671],{"className":53040,"code":92670,"language":53042,"meta":118,"style":118},"\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",[120,92672,92673,92683,92697,92701,92709,92723,92743,92755,92763,92769,92779,92791,92803,92813,92825,92835,92845,92857,92861,92869,92877,92881,92889,92907,92925,92933,92951,92961,92969,92979,92983,92987,92991,92996,93001,93006,93011,93016,93021,93039,93046,93051,93059,93064,93077,93093,93103,93108,93112,93116,93136,93140,93145,93150,93155,93160,93168,93176,93180],{"__ignoreMap":118},[123,92674,92675,92677,92679,92681],{"class":125,"line":126},[123,92676,53704],{"class":129},[123,92678,53708],{"class":53707},[123,92680,53711],{"class":337},[123,92682,53714],{"class":129},[123,92684,92685,92687,92689,92691,92693,92695],{"class":125,"line":140},[123,92686,3509],{"class":129},[123,92688,53042],{"class":53707},[123,92690,53723],{"class":337},[123,92692,134],{"class":129},[123,92694,53728],{"class":143},[123,92696,53714],{"class":129},[123,92698,92699],{"class":125,"line":156},[123,92700,232],{"emptyLinePlaceholder":231},[123,92702,92703,92705,92707],{"class":125,"line":168},[123,92704,3509],{"class":129},[123,92706,53741],{"class":53707},[123,92708,53714],{"class":129},[123,92710,92711,92713,92715,92717,92719,92721],{"class":125,"line":268},[123,92712,54548],{"class":129},[123,92714,53751],{"class":53707},[123,92716,53754],{"class":337},[123,92718,134],{"class":129},[123,92720,53759],{"class":143},[123,92722,53714],{"class":129},[123,92724,92725,92727,92729,92731,92733,92735,92737,92739,92741],{"class":125,"line":291},[123,92726,54548],{"class":129},[123,92728,53751],{"class":53707},[123,92730,17350],{"class":337},[123,92732,134],{"class":129},[123,92734,53798],{"class":143},[123,92736,53778],{"class":337},[123,92738,134],{"class":129},[123,92740,53805],{"class":143},[123,92742,53714],{"class":129},[123,92744,92745,92747,92749,92751,92753],{"class":125,"line":300},[123,92746,54548],{"class":129},[123,92748,642],{"class":53707},[123,92750,53816],{"class":129},[123,92752,642],{"class":53707},[123,92754,53714],{"class":129},[123,92756,92757,92759,92761],{"class":125,"line":305},[123,92758,54548],{"class":129},[123,92760,2526],{"class":53707},[123,92762,53714],{"class":129},[123,92764,92765,92767],{"class":125,"line":316},[123,92766,57155],{"class":337},[123,92768,137],{"class":129},[123,92770,92771,92773,92775,92777],{"class":125,"line":673},[123,92772,74996],{"class":164},[123,92774,147],{"class":129},[123,92776,62907],{"class":164},[123,92778,3760],{"class":129},[123,92780,92781,92783,92785,92787,92789],{"class":125,"line":692},[123,92782,57174],{"class":164},[123,92784,147],{"class":129},[123,92786,1045],{"class":164},[123,92788,53897],{"class":133},[123,92790,3760],{"class":129},[123,92792,92793,92795,92797,92799,92801],{"class":125,"line":713},[123,92794,57188],{"class":164},[123,92796,147],{"class":129},[123,92798,1045],{"class":164},[123,92800,53897],{"class":133},[123,92802,3760],{"class":129},[123,92804,92805,92807,92809,92811],{"class":125,"line":718},[123,92806,57287],{"class":164},[123,92808,147],{"class":129},[123,92810,92401],{"class":164},[123,92812,3760],{"class":129},[123,92814,92815,92817,92819,92821,92823],{"class":125,"line":1138},[123,92816,57325],{"class":164},[123,92818,147],{"class":129},[123,92820,3426],{"class":164},[123,92822,53897],{"class":133},[123,92824,3760],{"class":129},[123,92826,92827,92829,92831,92833],{"class":125,"line":1429},[123,92828,59818],{"class":164},[123,92830,147],{"class":129},[123,92832,63244],{"class":164},[123,92834,3760],{"class":129},[123,92836,92837,92839,92841,92843],{"class":125,"line":1439},[123,92838,59688],{"class":164},[123,92840,147],{"class":129},[123,92842,53997],{"class":164},[123,92844,3760],{"class":129},[123,92846,92847,92849,92851,92853,92855],{"class":125,"line":1444},[123,92848,92440],{"class":164},[123,92850,147],{"class":129},[123,92852,2926],{"class":164},[123,92854,53897],{"class":133},[123,92856,3760],{"class":129},[123,92858,92859],{"class":125,"line":1453},[123,92860,4631],{"class":129},[123,92862,92863,92865,92867],{"class":125,"line":1458},[123,92864,54820],{"class":129},[123,92866,2526],{"class":53707},[123,92868,53714],{"class":129},[123,92870,92871,92873,92875],{"class":125,"line":1476},[123,92872,54190],{"class":129},[123,92874,53741],{"class":53707},[123,92876,53714],{"class":129},[123,92878,92879],{"class":125,"line":1494},[123,92880,232],{"emptyLinePlaceholder":231},[123,92882,92883,92885,92887],{"class":125,"line":1499},[123,92884,3509],{"class":129},[123,92886,54205],{"class":53707},[123,92888,53714],{"class":129},[123,92890,92891,92893,92895,92897,92899,92901,92903,92905],{"class":125,"line":1517},[123,92892,54548],{"class":129},[123,92894,54016],{"class":53707},[123,92896,55889],{"class":337},[123,92898,134],{"class":129},[123,92900,55894],{"class":143},[123,92902,57717],{"class":129},[123,92904,54016],{"class":53707},[123,92906,53714],{"class":129},[123,92908,92909,92911,92913,92915,92917,92919,92921,92923],{"class":125,"line":1534},[123,92910,54548],{"class":129},[123,92912,54218],{"class":53707},[123,92914,57642],{"class":337},[123,92916,134],{"class":129},[123,92918,90669],{"class":143},[123,92920,57717],{"class":129},[123,92922,54218],{"class":53707},[123,92924,53714],{"class":129},[123,92926,92927,92929,92931],{"class":125,"line":1539},[123,92928,54548],{"class":129},[123,92930,54218],{"class":53707},[123,92932,53714],{"class":129},[123,92934,92935,92937,92939,92941,92943,92945,92947,92949],{"class":125,"line":2080},[123,92936,13653],{"class":133},[123,92938,89329],{"class":164},[123,92940,15995],{"class":133},[123,92942,56799],{"class":129},[123,92944,56802],{"class":337},[123,92946,1315],{"class":129},[123,92948,92541],{"class":143},[123,92950,288],{"class":129},[123,92952,92953,92955,92957,92959],{"class":125,"line":2097},[123,92954,54623],{"class":133},[123,92956,11870],{"class":129},[123,92958,134],{"class":133},[123,92960,49740],{"class":164},[123,92962,92963,92965,92967],{"class":125,"line":2114},[123,92964,72484],{"class":133},[123,92966,92560],{"class":337},[123,92968,13285],{"class":129},[123,92970,92971,92973,92975,92977],{"class":125,"line":2125},[123,92972,92567],{"class":129},[123,92974,134],{"class":133},[123,92976,5473],{"class":129},[123,92978,5144],{"class":133},[123,92980,92981],{"class":125,"line":2130},[123,92982,92578],{"class":2673},[123,92984,92985],{"class":125,"line":5033},[123,92986,4631],{"class":129},[123,92988,92989],{"class":125,"line":5041},[123,92990,92587],{"class":2673},[123,92992,92993],{"class":125,"line":5046},[123,92994,92995],{"class":2673},"    \u002F\u002F 手写防抖函数\n",[123,92997,92998],{"class":125,"line":5052},[123,92999,93000],{"class":2673},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[123,93002,93003],{"class":125,"line":5058},[123,93004,93005],{"class":2673},"    \u002F\u002F 1.声明定时器变量\n",[123,93007,93008],{"class":125,"line":5063},[123,93009,93010],{"class":2673},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[123,93012,93013],{"class":125,"line":10380},[123,93014,93015],{"class":2673},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[123,93017,93018],{"class":125,"line":10404},[123,93019,93020],{"class":2673},"    \u002F\u002F 4.定时器里面写函数调用\n",[123,93022,93023,93025,93028,93030,93033,93035,93037],{"class":125,"line":10409},[123,93024,72484],{"class":133},[123,93026,93027],{"class":337}," debounce",[123,93029,1315],{"class":129},[123,93031,93032],{"class":279},"fn",[123,93034,251],{"class":129},[123,93036,3322],{"class":279},[123,93038,14873],{"class":129},[123,93040,93041,93043],{"class":125,"line":10415},[123,93042,82170],{"class":133},[123,93044,93045],{"class":129}," timer\n",[123,93047,93048],{"class":125,"line":10442},[123,93049,93050],{"class":2673},"      \u002F\u002F return 返回一个匿名函数\n",[123,93052,93053,93055,93057],{"class":125,"line":10447},[123,93054,76382],{"class":133},[123,93056,61320],{"class":133},[123,93058,56855],{"class":129},[123,93060,93061],{"class":125,"line":10453},[123,93062,93063],{"class":2673},"        \u002F\u002F 这里边写第二三四步\n",[123,93065,93066,93068,93071,93074],{"class":125,"line":10465},[123,93067,4940],{"class":133},[123,93069,93070],{"class":129}," (timer) ",[123,93072,93073],{"class":337},"clearTimeout",[123,93075,93076],{"class":129},"(timer)\n",[123,93078,93079,93082,93084,93087,93089,93091],{"class":125,"line":10477},[123,93080,93081],{"class":129},"        timer ",[123,93083,134],{"class":133},[123,93085,93086],{"class":337}," setTimeout",[123,93088,1315],{"class":129},[123,93090,56852],{"class":133},[123,93092,56855],{"class":129},[123,93094,93095,93098,93100],{"class":125,"line":10489},[123,93096,93097],{"class":337},"          fn",[123,93099,15481],{"class":129},[123,93101,93102],{"class":2673},"\u002F\u002F加小括号调用fn }, t)\n",[123,93104,93105],{"class":125,"line":12148},[123,93106,93107],{"class":129},"        }, t)\n",[123,93109,93110],{"class":125,"line":12173},[123,93111,54801],{"class":129},[123,93113,93114],{"class":125,"line":12196},[123,93115,4631],{"class":129},[123,93117,93118,93120,93122,93124,93126,93128,93130,93132,93134],{"class":125,"line":12220},[123,93119,92602],{"class":129},[123,93121,60215],{"class":337},[123,93123,1315],{"class":129},[123,93125,92609],{"class":143},[123,93127,251],{"class":129},[123,93129,92615],{"class":337},[123,93131,92618],{"class":129},[123,93133,67475],{"class":164},[123,93135,32913],{"class":129},[123,93137,93138],{"class":125,"line":12225},[123,93139,232],{"emptyLinePlaceholder":231},[123,93141,93142],{"class":125,"line":12230},[123,93143,93144],{"class":2673},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[123,93146,93147],{"class":125,"line":12235},[123,93148,93149],{"class":2673},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[123,93151,93152],{"class":125,"line":12244},[123,93153,93154],{"class":2673},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[123,93156,93157],{"class":125,"line":12249},[123,93158,93159],{"class":2673},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[123,93161,93162,93164,93166],{"class":125,"line":12255},[123,93163,54820],{"class":129},[123,93165,54218],{"class":53707},[123,93167,53714],{"class":129},[123,93169,93170,93172,93174],{"class":125,"line":12276},[123,93171,54190],{"class":129},[123,93173,54205],{"class":53707},[123,93175,53714],{"class":129},[123,93177,93178],{"class":125,"line":12282},[123,93179,232],{"emptyLinePlaceholder":231},[123,93181,93182,93184,93186],{"class":125,"line":12296},[123,93183,54190],{"class":129},[123,93185,53042],{"class":53707},[123,93187,53714],{"class":129},[2587,93189,93191],{"id":93190},"_4172-节流","4.17.2 节流",[19,93193,93194],{},[3929,93195],{"alt":118,"src":93196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93198,93199],{},[3929,93200],{"alt":118,"src":93201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93203,93204],{},[2759,93205,93206],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93208,93209],{},"实现方式：",[3606,93211,93212],{},[29,93213,93214],{},"lodash 提供的节流函数来处理",[19,93216,93217],{},"_.throttle(func,[wait=0],[options=])",[19,93219,93220],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[113,93222,93224],{"className":53040,"code":93223,"language":53042,"meta":118,"style":118},"\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",[120,93225,93226,93236,93250,93254,93262,93276,93296,93308,93316,93322,93332,93344,93356,93366,93378,93388,93398,93410,93414,93422,93430,93434,93442,93460,93478,93486,93504,93514,93522,93532,93536,93540,93544,93549,93554,93575,93583,93591,93595],{"__ignoreMap":118},[123,93227,93228,93230,93232,93234],{"class":125,"line":126},[123,93229,53704],{"class":129},[123,93231,53708],{"class":53707},[123,93233,53711],{"class":337},[123,93235,53714],{"class":129},[123,93237,93238,93240,93242,93244,93246,93248],{"class":125,"line":140},[123,93239,3509],{"class":129},[123,93241,53042],{"class":53707},[123,93243,53723],{"class":337},[123,93245,134],{"class":129},[123,93247,53728],{"class":143},[123,93249,53714],{"class":129},[123,93251,93252],{"class":125,"line":156},[123,93253,232],{"emptyLinePlaceholder":231},[123,93255,93256,93258,93260],{"class":125,"line":168},[123,93257,3509],{"class":129},[123,93259,53741],{"class":53707},[123,93261,53714],{"class":129},[123,93263,93264,93266,93268,93270,93272,93274],{"class":125,"line":268},[123,93265,54548],{"class":129},[123,93267,53751],{"class":53707},[123,93269,53754],{"class":337},[123,93271,134],{"class":129},[123,93273,53759],{"class":143},[123,93275,53714],{"class":129},[123,93277,93278,93280,93282,93284,93286,93288,93290,93292,93294],{"class":125,"line":291},[123,93279,54548],{"class":129},[123,93281,53751],{"class":53707},[123,93283,17350],{"class":337},[123,93285,134],{"class":129},[123,93287,53798],{"class":143},[123,93289,53778],{"class":337},[123,93291,134],{"class":129},[123,93293,53805],{"class":143},[123,93295,53714],{"class":129},[123,93297,93298,93300,93302,93304,93306],{"class":125,"line":300},[123,93299,54548],{"class":129},[123,93301,642],{"class":53707},[123,93303,53816],{"class":129},[123,93305,642],{"class":53707},[123,93307,53714],{"class":129},[123,93309,93310,93312,93314],{"class":125,"line":305},[123,93311,54548],{"class":129},[123,93313,2526],{"class":53707},[123,93315,53714],{"class":129},[123,93317,93318,93320],{"class":125,"line":316},[123,93319,57155],{"class":337},[123,93321,137],{"class":129},[123,93323,93324,93326,93328,93330],{"class":125,"line":673},[123,93325,74996],{"class":164},[123,93327,147],{"class":129},[123,93329,62907],{"class":164},[123,93331,3760],{"class":129},[123,93333,93334,93336,93338,93340,93342],{"class":125,"line":692},[123,93335,57174],{"class":164},[123,93337,147],{"class":129},[123,93339,1045],{"class":164},[123,93341,53897],{"class":133},[123,93343,3760],{"class":129},[123,93345,93346,93348,93350,93352,93354],{"class":125,"line":713},[123,93347,57188],{"class":164},[123,93349,147],{"class":129},[123,93351,1045],{"class":164},[123,93353,53897],{"class":133},[123,93355,3760],{"class":129},[123,93357,93358,93360,93362,93364],{"class":125,"line":718},[123,93359,57287],{"class":164},[123,93361,147],{"class":129},[123,93363,92401],{"class":164},[123,93365,3760],{"class":129},[123,93367,93368,93370,93372,93374,93376],{"class":125,"line":1138},[123,93369,57325],{"class":164},[123,93371,147],{"class":129},[123,93373,3426],{"class":164},[123,93375,53897],{"class":133},[123,93377,3760],{"class":129},[123,93379,93380,93382,93384,93386],{"class":125,"line":1429},[123,93381,59818],{"class":164},[123,93383,147],{"class":129},[123,93385,63244],{"class":164},[123,93387,3760],{"class":129},[123,93389,93390,93392,93394,93396],{"class":125,"line":1439},[123,93391,59688],{"class":164},[123,93393,147],{"class":129},[123,93395,53997],{"class":164},[123,93397,3760],{"class":129},[123,93399,93400,93402,93404,93406,93408],{"class":125,"line":1444},[123,93401,92440],{"class":164},[123,93403,147],{"class":129},[123,93405,2926],{"class":164},[123,93407,53897],{"class":133},[123,93409,3760],{"class":129},[123,93411,93412],{"class":125,"line":1453},[123,93413,4631],{"class":129},[123,93415,93416,93418,93420],{"class":125,"line":1458},[123,93417,54820],{"class":129},[123,93419,2526],{"class":53707},[123,93421,53714],{"class":129},[123,93423,93424,93426,93428],{"class":125,"line":1476},[123,93425,54190],{"class":129},[123,93427,53741],{"class":53707},[123,93429,53714],{"class":129},[123,93431,93432],{"class":125,"line":1494},[123,93433,232],{"emptyLinePlaceholder":231},[123,93435,93436,93438,93440],{"class":125,"line":1499},[123,93437,3509],{"class":129},[123,93439,54205],{"class":53707},[123,93441,53714],{"class":129},[123,93443,93444,93446,93448,93450,93452,93454,93456,93458],{"class":125,"line":1517},[123,93445,54548],{"class":129},[123,93447,54016],{"class":53707},[123,93449,55889],{"class":337},[123,93451,134],{"class":129},[123,93453,55894],{"class":143},[123,93455,57717],{"class":129},[123,93457,54016],{"class":53707},[123,93459,53714],{"class":129},[123,93461,93462,93464,93466,93468,93470,93472,93474,93476],{"class":125,"line":1534},[123,93463,54548],{"class":129},[123,93465,54218],{"class":53707},[123,93467,57642],{"class":337},[123,93469,134],{"class":129},[123,93471,90669],{"class":143},[123,93473,57717],{"class":129},[123,93475,54218],{"class":53707},[123,93477,53714],{"class":129},[123,93479,93480,93482,93484],{"class":125,"line":1539},[123,93481,54548],{"class":129},[123,93483,54218],{"class":53707},[123,93485,53714],{"class":129},[123,93487,93488,93490,93492,93494,93496,93498,93500,93502],{"class":125,"line":2080},[123,93489,13653],{"class":133},[123,93491,89329],{"class":164},[123,93493,15995],{"class":133},[123,93495,56799],{"class":129},[123,93497,56802],{"class":337},[123,93499,1315],{"class":129},[123,93501,92541],{"class":143},[123,93503,288],{"class":129},[123,93505,93506,93508,93510,93512],{"class":125,"line":2097},[123,93507,54623],{"class":133},[123,93509,11870],{"class":129},[123,93511,134],{"class":133},[123,93513,49740],{"class":164},[123,93515,93516,93518,93520],{"class":125,"line":2114},[123,93517,72484],{"class":133},[123,93519,92560],{"class":337},[123,93521,13285],{"class":129},[123,93523,93524,93526,93528,93530],{"class":125,"line":2125},[123,93525,92567],{"class":129},[123,93527,134],{"class":133},[123,93529,5473],{"class":129},[123,93531,5144],{"class":133},[123,93533,93534],{"class":125,"line":2130},[123,93535,92578],{"class":2673},[123,93537,93538],{"class":125,"line":5033},[123,93539,4631],{"class":129},[123,93541,93542],{"class":125,"line":5041},[123,93543,92587],{"class":2673},[123,93545,93546],{"class":125,"line":5046},[123,93547,93548],{"class":2673},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[123,93550,93551],{"class":125,"line":5052},[123,93552,93553],{"class":2673},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[123,93555,93556,93558,93560,93562,93564,93566,93569,93571,93573],{"class":125,"line":5058},[123,93557,92602],{"class":129},[123,93559,60215],{"class":337},[123,93561,1315],{"class":129},[123,93563,92609],{"class":143},[123,93565,92612],{"class":129},[123,93567,93568],{"class":337},"throttle",[123,93570,92618],{"class":129},[123,93572,67475],{"class":164},[123,93574,32913],{"class":129},[123,93576,93577,93579,93581],{"class":125,"line":5063},[123,93578,54820],{"class":129},[123,93580,54218],{"class":53707},[123,93582,53714],{"class":129},[123,93584,93585,93587,93589],{"class":125,"line":10380},[123,93586,54190],{"class":129},[123,93588,54205],{"class":53707},[123,93590,53714],{"class":129},[123,93592,93593],{"class":125,"line":10404},[123,93594,232],{"emptyLinePlaceholder":231},[123,93596,93597,93599,93601],{"class":125,"line":10409},[123,93598,54190],{"class":129},[123,93600,53042],{"class":53707},[123,93602,53714],{"class":129},[3606,93604,93605],{},[29,93606,93607],{},"手写一个节流函数来处理",[19,93609,73352],{},[19,93611,92661],{},[19,93613,93614],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93616,93617],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[113,93619,93621],{"className":53040,"code":93620,"language":53042,"meta":118,"style":118},"\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",[120,93622,93623,93633,93647,93651,93659,93673,93693,93705,93713,93719,93729,93741,93753,93763,93775,93785,93795,93807,93811,93819,93827,93831,93839,93857,93875,93883,93901,93911,93919,93929,93933,93937,93941,93946,93951,93956,93961,93966,93971,93988,93994,94002,94013,94028,94035,94040,94045,94055,94060,94065,94070,94074,94078,94082,94102,94110,94118,94122],{"__ignoreMap":118},[123,93624,93625,93627,93629,93631],{"class":125,"line":126},[123,93626,53704],{"class":129},[123,93628,53708],{"class":53707},[123,93630,53711],{"class":337},[123,93632,53714],{"class":129},[123,93634,93635,93637,93639,93641,93643,93645],{"class":125,"line":140},[123,93636,3509],{"class":129},[123,93638,53042],{"class":53707},[123,93640,53723],{"class":337},[123,93642,134],{"class":129},[123,93644,53728],{"class":143},[123,93646,53714],{"class":129},[123,93648,93649],{"class":125,"line":156},[123,93650,232],{"emptyLinePlaceholder":231},[123,93652,93653,93655,93657],{"class":125,"line":168},[123,93654,3509],{"class":129},[123,93656,53741],{"class":53707},[123,93658,53714],{"class":129},[123,93660,93661,93663,93665,93667,93669,93671],{"class":125,"line":268},[123,93662,54548],{"class":129},[123,93664,53751],{"class":53707},[123,93666,53754],{"class":337},[123,93668,134],{"class":129},[123,93670,53759],{"class":143},[123,93672,53714],{"class":129},[123,93674,93675,93677,93679,93681,93683,93685,93687,93689,93691],{"class":125,"line":291},[123,93676,54548],{"class":129},[123,93678,53751],{"class":53707},[123,93680,17350],{"class":337},[123,93682,134],{"class":129},[123,93684,53798],{"class":143},[123,93686,53778],{"class":337},[123,93688,134],{"class":129},[123,93690,53805],{"class":143},[123,93692,53714],{"class":129},[123,93694,93695,93697,93699,93701,93703],{"class":125,"line":300},[123,93696,54548],{"class":129},[123,93698,642],{"class":53707},[123,93700,53816],{"class":129},[123,93702,642],{"class":53707},[123,93704,53714],{"class":129},[123,93706,93707,93709,93711],{"class":125,"line":305},[123,93708,54548],{"class":129},[123,93710,2526],{"class":53707},[123,93712,53714],{"class":129},[123,93714,93715,93717],{"class":125,"line":316},[123,93716,57155],{"class":337},[123,93718,137],{"class":129},[123,93720,93721,93723,93725,93727],{"class":125,"line":673},[123,93722,74996],{"class":164},[123,93724,147],{"class":129},[123,93726,62907],{"class":164},[123,93728,3760],{"class":129},[123,93730,93731,93733,93735,93737,93739],{"class":125,"line":692},[123,93732,57174],{"class":164},[123,93734,147],{"class":129},[123,93736,1045],{"class":164},[123,93738,53897],{"class":133},[123,93740,3760],{"class":129},[123,93742,93743,93745,93747,93749,93751],{"class":125,"line":713},[123,93744,57188],{"class":164},[123,93746,147],{"class":129},[123,93748,1045],{"class":164},[123,93750,53897],{"class":133},[123,93752,3760],{"class":129},[123,93754,93755,93757,93759,93761],{"class":125,"line":718},[123,93756,57287],{"class":164},[123,93758,147],{"class":129},[123,93760,92401],{"class":164},[123,93762,3760],{"class":129},[123,93764,93765,93767,93769,93771,93773],{"class":125,"line":1138},[123,93766,57325],{"class":164},[123,93768,147],{"class":129},[123,93770,3426],{"class":164},[123,93772,53897],{"class":133},[123,93774,3760],{"class":129},[123,93776,93777,93779,93781,93783],{"class":125,"line":1429},[123,93778,59818],{"class":164},[123,93780,147],{"class":129},[123,93782,63244],{"class":164},[123,93784,3760],{"class":129},[123,93786,93787,93789,93791,93793],{"class":125,"line":1439},[123,93788,59688],{"class":164},[123,93790,147],{"class":129},[123,93792,53997],{"class":164},[123,93794,3760],{"class":129},[123,93796,93797,93799,93801,93803,93805],{"class":125,"line":1444},[123,93798,92440],{"class":164},[123,93800,147],{"class":129},[123,93802,2926],{"class":164},[123,93804,53897],{"class":133},[123,93806,3760],{"class":129},[123,93808,93809],{"class":125,"line":1453},[123,93810,4631],{"class":129},[123,93812,93813,93815,93817],{"class":125,"line":1458},[123,93814,54820],{"class":129},[123,93816,2526],{"class":53707},[123,93818,53714],{"class":129},[123,93820,93821,93823,93825],{"class":125,"line":1476},[123,93822,54190],{"class":129},[123,93824,53741],{"class":53707},[123,93826,53714],{"class":129},[123,93828,93829],{"class":125,"line":1494},[123,93830,232],{"emptyLinePlaceholder":231},[123,93832,93833,93835,93837],{"class":125,"line":1499},[123,93834,3509],{"class":129},[123,93836,54205],{"class":53707},[123,93838,53714],{"class":129},[123,93840,93841,93843,93845,93847,93849,93851,93853,93855],{"class":125,"line":1517},[123,93842,54548],{"class":129},[123,93844,54016],{"class":53707},[123,93846,55889],{"class":337},[123,93848,134],{"class":129},[123,93850,55894],{"class":143},[123,93852,57717],{"class":129},[123,93854,54016],{"class":53707},[123,93856,53714],{"class":129},[123,93858,93859,93861,93863,93865,93867,93869,93871,93873],{"class":125,"line":1534},[123,93860,54548],{"class":129},[123,93862,54218],{"class":53707},[123,93864,57642],{"class":337},[123,93866,134],{"class":129},[123,93868,90669],{"class":143},[123,93870,57717],{"class":129},[123,93872,54218],{"class":53707},[123,93874,53714],{"class":129},[123,93876,93877,93879,93881],{"class":125,"line":1539},[123,93878,54548],{"class":129},[123,93880,54218],{"class":53707},[123,93882,53714],{"class":129},[123,93884,93885,93887,93889,93891,93893,93895,93897,93899],{"class":125,"line":2080},[123,93886,13653],{"class":133},[123,93888,89329],{"class":164},[123,93890,15995],{"class":133},[123,93892,56799],{"class":129},[123,93894,56802],{"class":337},[123,93896,1315],{"class":129},[123,93898,92541],{"class":143},[123,93900,288],{"class":129},[123,93902,93903,93905,93907,93909],{"class":125,"line":2097},[123,93904,54623],{"class":133},[123,93906,11870],{"class":129},[123,93908,134],{"class":133},[123,93910,49740],{"class":164},[123,93912,93913,93915,93917],{"class":125,"line":2114},[123,93914,72484],{"class":133},[123,93916,92560],{"class":337},[123,93918,13285],{"class":129},[123,93920,93921,93923,93925,93927],{"class":125,"line":2125},[123,93922,92567],{"class":129},[123,93924,134],{"class":133},[123,93926,5473],{"class":129},[123,93928,5144],{"class":133},[123,93930,93931],{"class":125,"line":2130},[123,93932,92578],{"class":2673},[123,93934,93935],{"class":125,"line":5033},[123,93936,4631],{"class":129},[123,93938,93939],{"class":125,"line":5041},[123,93940,92587],{"class":2673},[123,93942,93943],{"class":125,"line":5046},[123,93944,93945],{"class":2673},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[123,93947,93948],{"class":125,"line":5052},[123,93949,93950],{"class":2673},"    \u002F\u002F 1.声明一个定时器变量\n",[123,93952,93953],{"class":125,"line":5058},[123,93954,93955],{"class":2673},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[123,93957,93958],{"class":125,"line":5063},[123,93959,93960],{"class":2673},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[123,93962,93963],{"class":125,"line":10380},[123,93964,93965],{"class":2673},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[123,93967,93968],{"class":125,"line":10404},[123,93969,93970],{"class":2673},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[123,93972,93973,93975,93978,93980,93982,93984,93986],{"class":125,"line":10409},[123,93974,72484],{"class":133},[123,93976,93977],{"class":337}," throttle",[123,93979,1315],{"class":129},[123,93981,93032],{"class":279},[123,93983,251],{"class":129},[123,93985,3322],{"class":279},[123,93987,14873],{"class":129},[123,93989,93990,93992],{"class":125,"line":10415},[123,93991,82170],{"class":133},[123,93993,93045],{"class":129},[123,93995,93996,93998,94000],{"class":125,"line":10442},[123,93997,76382],{"class":133},[123,93999,61320],{"class":133},[123,94001,56855],{"class":129},[123,94003,94004,94006,94008,94010],{"class":125,"line":10447},[123,94005,4940],{"class":133},[123,94007,4116],{"class":129},[123,94009,2834],{"class":133},[123,94011,94012],{"class":129},"timer) {\n",[123,94014,94015,94018,94020,94022,94024,94026],{"class":125,"line":10453},[123,94016,94017],{"class":129},"          timer ",[123,94019,134],{"class":133},[123,94021,93086],{"class":337},[123,94023,1315],{"class":129},[123,94025,56852],{"class":133},[123,94027,56855],{"class":129},[123,94029,94030,94033],{"class":125,"line":10465},[123,94031,94032],{"class":337},"            fn",[123,94034,4420],{"class":129},[123,94036,94037],{"class":125,"line":10477},[123,94038,94039],{"class":2673},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[123,94041,94042],{"class":125,"line":10489},[123,94043,94044],{"class":2673},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[123,94046,94047,94050,94052],{"class":125,"line":12148},[123,94048,94049],{"class":129},"            timer ",[123,94051,134],{"class":133},[123,94053,94054],{"class":164}," null\n",[123,94056,94057],{"class":125,"line":12173},[123,94058,94059],{"class":2673},"            \u002F\u002F 不能用clearTimeout(timer)\n",[123,94061,94062],{"class":125,"line":12196},[123,94063,94064],{"class":2673},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[123,94066,94067],{"class":125,"line":12220},[123,94068,94069],{"class":129},"          }, t)\n",[123,94071,94072],{"class":125,"line":12225},[123,94073,4972],{"class":129},[123,94075,94076],{"class":125,"line":12230},[123,94077,54801],{"class":129},[123,94079,94080],{"class":125,"line":12235},[123,94081,4631],{"class":129},[123,94083,94084,94086,94088,94090,94092,94094,94096,94098,94100],{"class":125,"line":12244},[123,94085,92602],{"class":129},[123,94087,60215],{"class":337},[123,94089,1315],{"class":129},[123,94091,92609],{"class":143},[123,94093,251],{"class":129},[123,94095,93568],{"class":337},[123,94097,92618],{"class":129},[123,94099,67475],{"class":164},[123,94101,32913],{"class":129},[123,94103,94104,94106,94108],{"class":125,"line":12249},[123,94105,54820],{"class":129},[123,94107,54218],{"class":53707},[123,94109,53714],{"class":129},[123,94111,94112,94114,94116],{"class":125,"line":12255},[123,94113,54190],{"class":129},[123,94115,54205],{"class":53707},[123,94117,53714],{"class":129},[123,94119,94120],{"class":125,"line":12276},[123,94121,232],{"emptyLinePlaceholder":231},[123,94123,94124,94126,94128],{"class":125,"line":12282},[123,94125,54190],{"class":129},[123,94127,53042],{"class":53707},[123,94129,53714],{"class":129},[2587,94131,94133],{"id":94132},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[113,94135,94137],{"className":55470,"code":94136,"language":55472,"meta":118,"style":118},"\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",[120,94138,94139,94147,94155,94160,94165,94170,94175,94179,94187],{"__ignoreMap":118},[123,94140,94141,94143,94145],{"class":125,"line":126},[123,94142,3509],{"class":129},[123,94144,54205],{"class":53707},[123,94146,53714],{"class":129},[123,94148,94149,94151,94153],{"class":125,"line":140},[123,94150,54548],{"class":129},[123,94152,54218],{"class":53707},[123,94154,53714],{"class":129},[123,94156,94157],{"class":125,"line":156},[123,94158,94159],{"class":129},"    let timer = null\n",[123,94161,94162],{"class":125,"line":168},[123,94163,94164],{"class":129},"    timer = setTimeout(() => {\n",[123,94166,94167],{"class":125,"line":268},[123,94168,94169],{"class":129},"      clearTimeout(timer)\n",[123,94171,94172],{"class":125,"line":291},[123,94173,94174],{"class":129},"      console.log(timer)\n",[123,94176,94177],{"class":125,"line":300},[123,94178,62627],{"class":129},[123,94180,94181,94183,94185],{"class":125,"line":305},[123,94182,54820],{"class":129},[123,94184,54218],{"class":53707},[123,94186,53714],{"class":129},[123,94188,94189,94191,94193],{"class":125,"line":316},[123,94190,54190],{"class":129},[123,94192,54205],{"class":53707},[123,94194,53714],{"class":129},[19,94196,94197],{},"输出为1",[19,94199,94200],{},"在开启的定时器里边写清除定时器",[19,94202,94203],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[2587,94205,94207],{"id":94206},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94209,94210],{},"页面打开，可以记录上一次的视频播放位置",[19,94212,94213],{},[3929,94214],{"alt":118,"src":94215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94217,94218],{},[3929,94219],{"alt":118,"src":94220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[113,94222,94224],{"className":53040,"code":94223,"language":53042,"meta":118,"style":118},"\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",[120,94225,94226,94236,94250,94254,94262,94276,94296,94316,94338,94351,94359,94365,94375,94385,94395,94399,94403,94410,94422,94434,94438,94442,94452,94464,94478,94482,94486,94493,94503,94516,94528,94538,94548,94564,94576,94580,94584,94592,94602,94614,94624,94634,94644,94648,94652,94662,94673,94677,94685,94693,94697,94705,94720,94735,94750,94771,94779,94787,94802,94824,94832,94847,94873,94899,94925,94933,94941,94960,94968,94973,94992,94997,95015,95020,95025,95033,95038,95052,95060,95065,95082,95086,95091,95113,95117,95125,95133,95137],{"__ignoreMap":118},[123,94227,94228,94230,94232,94234],{"class":125,"line":126},[123,94229,53704],{"class":129},[123,94231,53708],{"class":53707},[123,94233,53711],{"class":337},[123,94235,53714],{"class":129},[123,94237,94238,94240,94242,94244,94246,94248],{"class":125,"line":140},[123,94239,3509],{"class":129},[123,94241,53042],{"class":53707},[123,94243,53723],{"class":337},[123,94245,134],{"class":129},[123,94247,53728],{"class":143},[123,94249,53714],{"class":129},[123,94251,94252],{"class":125,"line":156},[123,94253,232],{"emptyLinePlaceholder":231},[123,94255,94256,94258,94260],{"class":125,"line":168},[123,94257,3509],{"class":129},[123,94259,53741],{"class":53707},[123,94261,53714],{"class":129},[123,94263,94264,94266,94268,94270,94272,94274],{"class":125,"line":268},[123,94265,54548],{"class":129},[123,94267,53751],{"class":53707},[123,94269,53754],{"class":337},[123,94271,134],{"class":129},[123,94273,53759],{"class":143},[123,94275,61529],{"class":129},[123,94277,94278,94280,94282,94284,94286,94288,94290,94292,94294],{"class":125,"line":291},[123,94279,54548],{"class":129},[123,94281,53751],{"class":53707},[123,94283,53770],{"class":337},[123,94285,134],{"class":129},[123,94287,53775],{"class":143},[123,94289,53778],{"class":337},[123,94291,134],{"class":129},[123,94293,53783],{"class":143},[123,94295,61529],{"class":129},[123,94297,94298,94300,94302,94304,94306,94308,94310,94312,94314],{"class":125,"line":300},[123,94299,54548],{"class":129},[123,94301,53751],{"class":53707},[123,94303,17350],{"class":337},[123,94305,134],{"class":129},[123,94307,53798],{"class":143},[123,94309,53778],{"class":337},[123,94311,134],{"class":129},[123,94313,53805],{"class":143},[123,94315,61529],{"class":129},[123,94317,94318,94320,94322,94324,94326,94329,94331,94333,94336],{"class":125,"line":305},[123,94319,54548],{"class":129},[123,94321,53751],{"class":53707},[123,94323,17350],{"class":337},[123,94325,134],{"class":129},[123,94327,94328],{"class":143},"\"referrer\"",[123,94330,53778],{"class":337},[123,94332,134],{"class":129},[123,94334,94335],{"class":143},"\"never\"",[123,94337,61529],{"class":129},[123,94339,94340,94342,94344,94347,94349],{"class":125,"line":316},[123,94341,54548],{"class":129},[123,94343,642],{"class":53707},[123,94345,94346],{"class":129},">综合案例\u003C\u002F",[123,94348,642],{"class":53707},[123,94350,53714],{"class":129},[123,94352,94353,94355,94357],{"class":125,"line":673},[123,94354,54548],{"class":129},[123,94356,2526],{"class":53707},[123,94358,53714],{"class":129},[123,94360,94361,94363],{"class":125,"line":692},[123,94362,8836],{"class":53707},[123,94364,137],{"class":129},[123,94366,94367,94369,94371,94373],{"class":125,"line":713},[123,94368,57098],{"class":164},[123,94370,147],{"class":129},[123,94372,2799],{"class":164},[123,94374,3760],{"class":129},[123,94376,94377,94379,94381,94383],{"class":125,"line":718},[123,94378,57109],{"class":164},[123,94380,147],{"class":129},[123,94382,2799],{"class":164},[123,94384,3760],{"class":129},[123,94386,94387,94389,94391,94393],{"class":125,"line":1138},[123,94388,74996],{"class":164},[123,94390,147],{"class":129},[123,94392,62907],{"class":164},[123,94394,3760],{"class":129},[123,94396,94397],{"class":125,"line":1429},[123,94398,4631],{"class":129},[123,94400,94401],{"class":125,"line":1439},[123,94402,232],{"emptyLinePlaceholder":231},[123,94404,94405,94408],{"class":125,"line":1444},[123,94406,94407],{"class":337},"    .container",[123,94409,137],{"class":129},[123,94411,94412,94414,94416,94418,94420],{"class":125,"line":1453},[123,94413,57174],{"class":164},[123,94415,147],{"class":129},[123,94417,1829],{"class":164},[123,94419,53897],{"class":133},[123,94421,3760],{"class":129},[123,94423,94424,94426,94428,94430,94432],{"class":125,"line":1458},[123,94425,57109],{"class":164},[123,94427,147],{"class":129},[123,94429,2799],{"class":164},[123,94431,53961],{"class":164},[123,94433,3760],{"class":129},[123,94435,94436],{"class":125,"line":1476},[123,94437,4631],{"class":129},[123,94439,94440],{"class":125,"line":1494},[123,94441,232],{"emptyLinePlaceholder":231},[123,94443,94444,94447,94450],{"class":125,"line":1499},[123,94445,94446],{"class":337},"    .video",[123,94448,94449],{"class":53707}," video",[123,94451,137],{"class":129},[123,94453,94454,94456,94458,94460,94462],{"class":125,"line":1517},[123,94455,57174],{"class":164},[123,94457,147],{"class":129},[123,94459,259],{"class":164},[123,94461,2935],{"class":133},[123,94463,3760],{"class":129},[123,94465,94466,94468,94470,94472,94474,94476],{"class":125,"line":1534},[123,94467,57098],{"class":164},[123,94469,147],{"class":129},[123,94471,3302],{"class":164},[123,94473,53897],{"class":133},[123,94475,6532],{"class":164},[123,94477,3760],{"class":129},[123,94479,94480],{"class":125,"line":1539},[123,94481,4631],{"class":129},[123,94483,94484],{"class":125,"line":2080},[123,94485,232],{"emptyLinePlaceholder":231},[123,94487,94488,94491],{"class":125,"line":2097},[123,94489,94490],{"class":337},"    .elevator",[123,94492,137],{"class":129},[123,94494,94495,94497,94499,94501],{"class":125,"line":2114},[123,94496,57162],{"class":164},[123,94498,147],{"class":129},[123,94500,88629],{"class":164},[123,94502,3760],{"class":129},[123,94504,94505,94507,94509,94512,94514],{"class":125,"line":2125},[123,94506,57350],{"class":164},[123,94508,147],{"class":129},[123,94510,94511],{"class":164},"280",[123,94513,53897],{"class":133},[123,94515,3760],{"class":129},[123,94517,94518,94520,94522,94524,94526],{"class":125,"line":2130},[123,94519,88823],{"class":164},[123,94521,147],{"class":129},[123,94523,3302],{"class":164},[123,94525,53897],{"class":133},[123,94527,3760],{"class":129},[123,94529,94530,94532,94534,94536],{"class":125,"line":5033},[123,94531,88636],{"class":164},[123,94533,147],{"class":129},[123,94535,88641],{"class":164},[123,94537,3760],{"class":129},[123,94539,94540,94542,94544,94546],{"class":125,"line":5041},[123,94541,64123],{"class":164},[123,94543,147],{"class":129},[123,94545,63244],{"class":164},[123,94547,3760],{"class":129},[123,94549,94550,94552,94554,94556,94558,94560,94562],{"class":125,"line":5046},[123,94551,64379],{"class":164},[123,94553,147],{"class":129},[123,94555,2825],{"class":164},[123,94557,53897],{"class":133},[123,94559,53926],{"class":164},[123,94561,64646],{"class":164},[123,94563,3760],{"class":129},[123,94565,94566,94568,94570,94572,94574],{"class":125,"line":5052},[123,94567,57174],{"class":164},[123,94569,147],{"class":129},[123,94571,3506],{"class":164},[123,94573,53897],{"class":133},[123,94575,3760],{"class":129},[123,94577,94578],{"class":125,"line":5058},[123,94579,4631],{"class":129},[123,94581,94582],{"class":125,"line":5063},[123,94583,232],{"emptyLinePlaceholder":231},[123,94585,94586,94588,94590],{"class":125,"line":10380},[123,94587,94490],{"class":337},[123,94589,3865],{"class":53707},[123,94591,137],{"class":129},[123,94593,94594,94596,94598,94600],{"class":125,"line":10404},[123,94595,57412],{"class":164},[123,94597,147],{"class":129},[123,94599,63271],{"class":164},[123,94601,3760],{"class":129},[123,94603,94604,94606,94608,94610,94612],{"class":125,"line":10409},[123,94605,57098],{"class":164},[123,94607,147],{"class":129},[123,94609,2193],{"class":164},[123,94611,53897],{"class":133},[123,94613,3760],{"class":129},[123,94615,94616,94618,94620,94622],{"class":125,"line":10415},[123,94617,66371],{"class":164},[123,94619,147],{"class":129},[123,94621,57140],{"class":164},[123,94623,3760],{"class":129},[123,94625,94626,94628,94630,94632],{"class":125,"line":10442},[123,94627,59688],{"class":164},[123,94629,147],{"class":129},[123,94631,53997],{"class":164},[123,94633,3760],{"class":129},[123,94635,94636,94638,94640,94642],{"class":125,"line":10447},[123,94637,59818],{"class":164},[123,94639,147],{"class":129},[123,94641,64472],{"class":164},[123,94643,3760],{"class":129},[123,94645,94646],{"class":125,"line":10453},[123,94647,4631],{"class":129},[123,94649,94650],{"class":125,"line":10465},[123,94651,232],{"emptyLinePlaceholder":231},[123,94653,94654,94656,94658,94660],{"class":125,"line":10477},[123,94655,94490],{"class":337},[123,94657,3865],{"class":53707},[123,94659,66425],{"class":337},[123,94661,137],{"class":129},[123,94663,94664,94666,94668,94671],{"class":125,"line":10489},[123,94665,59818],{"class":164},[123,94667,147],{"class":129},[123,94669,94670],{"class":164},"#1286ff",[123,94672,3760],{"class":129},[123,94674,94675],{"class":125,"line":12148},[123,94676,4631],{"class":129},[123,94678,94679,94681,94683],{"class":125,"line":12173},[123,94680,54820],{"class":129},[123,94682,2526],{"class":53707},[123,94684,53714],{"class":129},[123,94686,94687,94689,94691],{"class":125,"line":12196},[123,94688,54190],{"class":129},[123,94690,53741],{"class":53707},[123,94692,53714],{"class":129},[123,94694,94695],{"class":125,"line":12220},[123,94696,232],{"emptyLinePlaceholder":231},[123,94698,94699,94701,94703],{"class":125,"line":12225},[123,94700,3509],{"class":129},[123,94702,54205],{"class":53707},[123,94704,53714],{"class":129},[123,94706,94707,94709,94711,94713,94715,94718],{"class":125,"line":12230},[123,94708,54548],{"class":129},[123,94710,54016],{"class":53707},[123,94712,55889],{"class":337},[123,94714,134],{"class":129},[123,94716,94717],{"class":143},"\"container\"",[123,94719,53714],{"class":129},[123,94721,94722,94724,94726,94728,94730,94733],{"class":125,"line":12235},[123,94723,53748],{"class":129},[123,94725,54016],{"class":53707},[123,94727,55889],{"class":337},[123,94729,134],{"class":129},[123,94731,94732],{"class":143},"\"header\"",[123,94734,53714],{"class":129},[123,94736,94737,94739,94741,94743,94745,94748],{"class":125,"line":12244},[123,94738,57637],{"class":129},[123,94740,2846],{"class":53707},[123,94742,63459],{"class":337},[123,94744,134],{"class":129},[123,94746,94747],{"class":143},"\"http:\u002F\u002Fpip.itcast.cn\"",[123,94749,53714],{"class":129},[123,94751,94752,94754,94756,94758,94760,94763,94765,94767,94769],{"class":125,"line":12249},[123,94753,57705],{"class":129},[123,94755,3929],{"class":53707},[123,94757,57642],{"class":337},[123,94759,134],{"class":129},[123,94761,94762],{"class":143},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[123,94764,57650],{"class":337},[123,94766,134],{"class":129},[123,94768,1629],{"class":143},[123,94770,61529],{"class":129},[123,94772,94773,94775,94777],{"class":125,"line":12255},[123,94774,57810],{"class":129},[123,94776,2846],{"class":53707},[123,94778,53714],{"class":129},[123,94780,94781,94783,94785],{"class":125,"line":12276},[123,94782,54181],{"class":129},[123,94784,54016],{"class":53707},[123,94786,53714],{"class":129},[123,94788,94789,94791,94793,94795,94797,94800],{"class":125,"line":12282},[123,94790,53748],{"class":129},[123,94792,54016],{"class":53707},[123,94794,55889],{"class":337},[123,94796,134],{"class":129},[123,94798,94799],{"class":143},"\"video\"",[123,94801,53714],{"class":129},[123,94803,94804,94806,94808,94810,94812,94815,94818,94820,94822],{"class":125,"line":12296},[123,94805,57637],{"class":129},[123,94807,30604],{"class":53707},[123,94809,57642],{"class":337},[123,94811,134],{"class":129},[123,94813,94814],{"class":143},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[123,94816,94817],{"class":337}," controls",[123,94819,57717],{"class":129},[123,94821,30604],{"class":53707},[123,94823,53714],{"class":129},[123,94825,94826,94828,94830],{"class":125,"line":12302},[123,94827,54181],{"class":129},[123,94829,54016],{"class":53707},[123,94831,53714],{"class":129},[123,94833,94834,94836,94838,94840,94842,94845],{"class":125,"line":12329},[123,94835,53748],{"class":129},[123,94837,54016],{"class":53707},[123,94839,55889],{"class":337},[123,94841,134],{"class":129},[123,94843,94844],{"class":143},"\"elevator\"",[123,94846,53714],{"class":129},[123,94848,94849,94851,94853,94855,94857,94859,94862,94864,94866,94869,94871],{"class":125,"line":12338},[123,94850,57637],{"class":129},[123,94852,2846],{"class":53707},[123,94854,63459],{"class":337},[123,94856,134],{"class":129},[123,94858,66637],{"class":143},[123,94860,94861],{"class":337}," data-ref",[123,94863,134],{"class":129},[123,94865,94799],{"class":143},[123,94867,94868],{"class":129},">视频介绍\u003C\u002F",[123,94870,2846],{"class":53707},[123,94872,53714],{"class":129},[123,94874,94875,94877,94879,94881,94883,94885,94887,94889,94892,94895,94897],{"class":125,"line":12344},[123,94876,57637],{"class":129},[123,94878,2846],{"class":53707},[123,94880,63459],{"class":337},[123,94882,134],{"class":129},[123,94884,66637],{"class":143},[123,94886,94861],{"class":337},[123,94888,134],{"class":129},[123,94890,94891],{"class":143},"\"intro\"",[123,94893,94894],{"class":129},">课程简介\u003C\u002F",[123,94896,2846],{"class":53707},[123,94898,53714],{"class":129},[123,94900,94901,94903,94905,94907,94909,94911,94913,94915,94918,94921,94923],{"class":125,"line":12352},[123,94902,57637],{"class":129},[123,94904,2846],{"class":53707},[123,94906,63459],{"class":337},[123,94908,134],{"class":129},[123,94910,66637],{"class":143},[123,94912,94861],{"class":337},[123,94914,134],{"class":129},[123,94916,94917],{"class":143},"\"outline\"",[123,94919,94920],{"class":129},">评论列表\u003C\u002F",[123,94922,2846],{"class":53707},[123,94924,53714],{"class":129},[123,94926,94927,94929,94931],{"class":125,"line":12357},[123,94928,54181],{"class":129},[123,94930,54016],{"class":53707},[123,94932,53714],{"class":129},[123,94934,94935,94937,94939],{"class":125,"line":19032},[123,94936,54820],{"class":129},[123,94938,54016],{"class":53707},[123,94940,53714],{"class":129},[123,94942,94943,94945,94947,94949,94951,94954,94956,94958],{"class":125,"line":19038},[123,94944,54548],{"class":129},[123,94946,54218],{"class":53707},[123,94948,57642],{"class":337},[123,94950,134],{"class":129},[123,94952,94953],{"class":143},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[123,94955,57717],{"class":129},[123,94957,54218],{"class":53707},[123,94959,53714],{"class":129},[123,94961,94962,94964,94966],{"class":125,"line":19061},[123,94963,54548],{"class":129},[123,94965,54218],{"class":53707},[123,94967,53714],{"class":129},[123,94969,94970],{"class":125,"line":19067},[123,94971,94972],{"class":2673},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[123,94974,94975,94977,94979,94981,94983,94985,94987,94990],{"class":125,"line":19090},[123,94976,13653],{"class":133},[123,94978,94449],{"class":164},[123,94980,15995],{"class":133},[123,94982,56799],{"class":129},[123,94984,56802],{"class":337},[123,94986,1315],{"class":129},[123,94988,94989],{"class":143},"'video'",[123,94991,288],{"class":129},[123,94993,94994],{"class":125,"line":19104},[123,94995,94996],{"class":2673},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[123,94998,94999,95002,95004,95006,95008,95011,95013],{"class":125,"line":19124},[123,95000,95001],{"class":129},"    video.ontimeupdate ",[123,95003,134],{"class":133},[123,95005,90750],{"class":129},[123,95007,93568],{"class":337},[123,95009,95010],{"class":129},"(() ",[123,95012,87118],{"class":133},[123,95014,137],{"class":129},[123,95016,95017],{"class":125,"line":19130},[123,95018,95019],{"class":2673},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[123,95021,95022],{"class":125,"line":19141},[123,95023,95024],{"class":2673},"      \u002F\u002F 控制台输出当前的时间\n",[123,95026,95027,95030],{"class":125,"line":19164},[123,95028,95029],{"class":2673},"      \u002F\u002F console.log(video.currentTime)",[123,95031,95032],{"class":2673},"  \u002F\u002F获得当前的视频时间\n",[123,95034,95035],{"class":125,"line":19186},[123,95036,95037],{"class":2673},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[123,95039,95040,95042,95044,95046,95049],{"class":125,"line":19191},[123,95041,77083],{"class":129},[123,95043,74054],{"class":337},[123,95045,1315],{"class":129},[123,95047,95048],{"class":143},"'currentTime'",[123,95050,95051],{"class":129},", video.currentTime)\n",[123,95053,95054,95056,95058],{"class":125,"line":19197},[123,95055,56938],{"class":129},[123,95057,8843],{"class":164},[123,95059,288],{"class":129},[123,95061,95062],{"class":125,"line":19211},[123,95063,95064],{"class":2673},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[123,95066,95067,95070,95073,95075,95078,95080],{"class":125,"line":19224},[123,95068,95069],{"class":129},"    video.",[123,95071,95072],{"class":337},"onloadeddata",[123,95074,15995],{"class":133},[123,95076,95077],{"class":129}," () ",[123,95079,87118],{"class":133},[123,95081,137],{"class":129},[123,95083,95084],{"class":125,"line":19229},[123,95085,62414],{"class":2673},[123,95087,95088],{"class":125,"line":19243},[123,95089,95090],{"class":2673},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[123,95092,95093,95096,95098,95101,95103,95105,95107,95109,95111],{"class":125,"line":19248},[123,95094,95095],{"class":129},"      video.currentTime ",[123,95097,134],{"class":133},[123,95099,95100],{"class":129}," localStorage.",[123,95102,74085],{"class":337},[123,95104,1315],{"class":129},[123,95106,95048],{"class":143},[123,95108,1336],{"class":129},[123,95110,73757],{"class":133},[123,95112,49740],{"class":164},[123,95114,95115],{"class":125,"line":19254},[123,95116,4631],{"class":129},[123,95118,95119,95121,95123],{"class":125,"line":19259},[123,95120,54820],{"class":129},[123,95122,54218],{"class":53707},[123,95124,53714],{"class":129},[123,95126,95127,95129,95131],{"class":125,"line":19273},[123,95128,54190],{"class":129},[123,95130,54205],{"class":53707},[123,95132,53714],{"class":129},[123,95134,95135],{"class":125,"line":19278},[123,95136,232],{"emptyLinePlaceholder":231},[123,95138,95139,95141,95143],{"class":125,"line":19283},[123,95140,54190],{"class":129},[123,95142,53042],{"class":53707},[123,95144,53714],{"class":129},[2526,95146,95147],{},"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":118,"searchDepth":140,"depth":140,"links":95149},[95150,95155,95159,95160,95161,95166,95171,95172,95173,95174,95181,95186,95187,95197,95201,95202,95206],{"id":79091,"depth":140,"text":79092,"children":95151},[95152,95153,95154],{"id":79095,"depth":156,"text":79096},{"id":79120,"depth":156,"text":79121},{"id":79132,"depth":156,"text":79133},{"id":79144,"depth":140,"text":79145,"children":95156},[95157,95158],{"id":79148,"depth":156,"text":79149},{"id":79163,"depth":156,"text":79164},{"id":79215,"depth":140,"text":79216},{"id":79259,"depth":140,"text":79260},{"id":79276,"depth":140,"text":79277,"children":95162},[95163,95164,95165],{"id":79280,"depth":156,"text":79281},{"id":79293,"depth":156,"text":79294},{"id":79398,"depth":156,"text":79399},{"id":79687,"depth":140,"text":79688,"children":95167},[95168,95169,95170],{"id":79691,"depth":156,"text":79692},{"id":80132,"depth":156,"text":80133},{"id":80543,"depth":156,"text":80544},{"id":80606,"depth":140,"text":80607},{"id":80685,"depth":140,"text":80686},{"id":80778,"depth":140,"text":80779},{"id":82622,"depth":140,"text":82623,"children":95175},[95176,95177,95178,95179,95180],{"id":82626,"depth":156,"text":82627},{"id":82638,"depth":156,"text":82639},{"id":82857,"depth":156,"text":82858},{"id":82875,"depth":156,"text":82876},{"id":82935,"depth":156,"text":82936},{"id":87202,"depth":140,"text":87203,"children":95182},[95183,95184,95185],{"id":87206,"depth":156,"text":87207},{"id":87224,"depth":156,"text":87225},{"id":87250,"depth":156,"text":87251},{"id":87259,"depth":140,"text":87260},{"id":87281,"depth":140,"text":87282,"children":95188},[95189,95190,95191,95192,95193,95194,95195,95196],{"id":87285,"depth":156,"text":87286},{"id":87546,"depth":156,"text":87547},{"id":87732,"depth":156,"text":87733},{"id":88099,"depth":156,"text":88100},{"id":88215,"depth":156,"text":88216},{"id":88251,"depth":156,"text":88252},{"id":88298,"depth":156,"text":88299},{"id":88332,"depth":156,"text":88333},{"id":89695,"depth":140,"text":89696,"children":95198},[95199,95200],{"id":89699,"depth":156,"text":89700},{"id":89736,"depth":156,"text":89737},{"id":91090,"depth":140,"text":91091},{"id":91461,"depth":140,"text":91462,"children":95203},[95204,95205],{"id":91465,"depth":156,"text":91466},{"id":91499,"depth":156,"text":91500},{"id":92228,"depth":140,"text":92229,"children":95207},[95208,95209,95210,95211],{"id":92232,"depth":156,"text":92233},{"id":93190,"depth":156,"text":93191},{"id":94132,"depth":156,"text":94133},{"id":94206,"depth":156,"text":94207},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79080,"description":2544},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95218,"title":95219,"body":95220,"description":95231,"extension":2545,"meta":95232,"navigation":231,"path":95234,"seo":95235,"stem":95236,"__hash__":95237},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95221,"toc":95229},[95222],[19,95223,95224,95225],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2846,95226,95227],{"href":95227,"rel":95228},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26287],{"title":118,"searchDepth":140,"depth":140,"links":95230},[],"三件套第三套学习",{"category":95233},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95219,"description":95231},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95239,"title":95240,"body":95241,"description":2544,"extension":2545,"meta":95346,"navigation":231,"path":95347,"seo":95348,"stem":95349,"__hash__":95350},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95242,"toc":95341},[95243,95250,95253,95256,95259,95263,95272,95275,95278,95282,95291,95294,95298,95301,95321,95324,95338],[19,95244,95245],{},[2846,95246,95249],{"href":95247,"rel":95248},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26287],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95251,95240],{"id":95252},"_1安装",[19,95254,95255],{},"numpy是科学计算基础库,底层是C语言",[19,95257,95258],{},"三种方式：",[14,95260,95262],{"id":95261},"_11-通过pip安装","1.1 通过pip安装",[113,95264,95266],{"className":115,"code":95265,"language":117,"meta":118,"style":118},"pip install numpy\n",[120,95267,95268],{"__ignoreMap":118},[123,95269,95270],{"class":125,"line":126},[123,95271,95265],{"class":129},[19,95273,95274],{},"首选方式，自动处理依赖项",[19,95276,95277],{},"在提示系统命令符中使用cmd",[14,95279,95281],{"id":95280},"_12-通过anaconda安装","1.2 通过Anaconda安装",[113,95283,95285],{"className":115,"code":95284,"language":117,"meta":118,"style":118},"conda install numpy\n",[120,95286,95287],{"__ignoreMap":118},[123,95288,95289],{"class":125,"line":126},[123,95290,95284],{"class":129},[19,95292,95293],{},"自动解决环境依赖",[14,95295,95297],{"id":95296},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95299,95300],{},"对于Debian\u002FUbuntu",[113,95302,95304],{"className":115,"code":95303,"language":117,"meta":118,"style":118},"sudo apt-get install python3-numpy\n",[120,95305,95306],{"__ignoreMap":118},[123,95307,95308,95311,95313,95316,95318],{"class":125,"line":126},[123,95309,95310],{"class":129},"sudo apt",[123,95312,3135],{"class":133},[123,95314,95315],{"class":129},"get install python3",[123,95317,3135],{"class":133},[123,95319,95320],{"class":129},"numpy\n",[19,95322,95323],{},"对于Fedora:",[113,95325,95327],{"className":115,"code":95326,"language":117,"meta":118,"style":118},"sudo dnf install python3-numpy\n",[120,95328,95329],{"__ignoreMap":118},[123,95330,95331,95334,95336],{"class":125,"line":126},[123,95332,95333],{"class":129},"sudo dnf install python3",[123,95335,3135],{"class":133},[123,95337,95320],{"class":129},[2526,95339,95340],{},"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":118,"searchDepth":140,"depth":140,"links":95342},[95343,95344,95345],{"id":95261,"depth":140,"text":95262},{"id":95280,"depth":140,"text":95281},{"id":95296,"depth":140,"text":95297},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95240,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95352,"title":95353,"body":95354,"description":2544,"extension":2545,"meta":95467,"navigation":231,"path":95468,"seo":95469,"stem":95470,"__hash__":95471},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95355,"toc":95465},[95356,95359,95362,95365,95368,95371,95374,95377,95380,95383,95459,95462],[10,95357,95353],{"id":95358},"_10算数函数",[19,95360,95361],{},"加减乘除运算跟python基础语法没区别",[19,95363,95364],{},"除了python那种方法外还可以使用函数",[19,95366,95367],{},"加：np.add(a,b)",[19,95369,95370],{},"减：np.subtract(a,b)",[19,95372,95373],{},"乘：np.multiply(a,b)",[19,95375,95376],{},"除：np.divide(a,b) == a\u002Fb",[19,95378,95379],{},"取余：np.mod(a,b) == a%b",[19,95381,95382],{},"必须会的用法：",[113,95384,95386],{"className":115,"code":95385,"language":117,"meta":118,"style":118},"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",[120,95387,95388,95410,95431,95441,95454],{"__ignoreMap":118},[123,95389,95390,95392,95394,95397,95399,95402,95404,95406,95408],{"class":125,"line":126},[123,95391,2846],{"class":129},[123,95393,134],{"class":133},[123,95395,95396],{"class":129},"np.arange(",[123,95398,3026],{"class":164},[123,95400,95401],{"class":129},").reshape(",[123,95403,2686],{"class":164},[123,95405,2985],{"class":129},[123,95407,2686],{"class":164},[123,95409,288],{"class":129},[123,95411,95412,95414,95416,95419,95421,95423,95425,95427,95429],{"class":125,"line":140},[123,95413,2871],{"class":129},[123,95415,134],{"class":133},[123,95417,95418],{"class":129},"np.array([",[123,95420,2193],{"class":164},[123,95422,2985],{"class":129},[123,95424,2193],{"class":164},[123,95426,2985],{"class":129},[123,95428,2193],{"class":164},[123,95430,444],{"class":129},[123,95432,95433,95436,95438],{"class":125,"line":156},[123,95434,95435],{"class":129},"result",[123,95437,134],{"class":133},[123,95439,95440],{"class":129},"np.empty_like(a)\n",[123,95442,95443,95446,95449,95451],{"class":125,"line":168},[123,95444,95445],{"class":129},"np.add(a,b,",[123,95447,95448],{"class":279},"out",[123,95450,134],{"class":133},[123,95452,95453],{"class":129},"result)\n",[123,95455,95456],{"class":125,"line":268},[123,95457,95458],{"class":129},"result\n",[19,95460,95461],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2526,95463,95464],{},"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":118,"searchDepth":140,"depth":140,"links":95466},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95353,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95473,"title":95474,"body":95475,"description":2544,"extension":2545,"meta":96237,"navigation":231,"path":96238,"seo":96239,"stem":96240,"__hash__":96241},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95476,"toc":96224},[95477,95480,95483,95486,95490,95529,95533,95577,95637,95641,95644,95683,95686,95731,95735,95771,95775,95844,95848,95912,95916,95919,95922,95925,95928,95964,95968,96008,96012,96084,96087,96091,96154,96158,96221],[10,95478,95474],{"id":95479},"_11统计函数",[19,95481,95482],{},"sum max min mean",[19,95484,95485],{},"这些有axis参数，可以指定方向",[14,95487,95489],{"id":95488},"_111-sum求和函数","11.1 sum()求和函数",[113,95491,95493],{"className":115,"code":95492,"language":117,"meta":118,"style":118},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[120,95494,95495,95500,95521],{"__ignoreMap":118},[123,95496,95497],{"class":125,"line":126},[123,95498,95499],{"class":2673},"#创建一维数组\n",[123,95501,95502,95504,95506,95509,95511,95513,95515,95517,95519],{"class":125,"line":140},[123,95503,2846],{"class":129},[123,95505,134],{"class":133},[123,95507,95508],{"class":129},"np.random.randint(",[123,95510,2825],{"class":164},[123,95512,2985],{"class":129},[123,95514,259],{"class":164},[123,95516,2985],{"class":129},[123,95518,3302],{"class":164},[123,95520,288],{"class":129},[123,95522,95523,95526],{"class":125,"line":156},[123,95524,95525],{"class":129},"np.sum(a)",[123,95527,95528],{"class":2673},"#求和\n",[14,95530,95532],{"id":95531},"_112-max求最大值函数","11.2 max()求最大值函数",[113,95534,95536],{"className":115,"code":95535,"language":117,"meta":118,"style":118},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[120,95537,95538,95542,95562,95567,95572],{"__ignoreMap":118},[123,95539,95540],{"class":125,"line":126},[123,95541,95499],{"class":2673},[123,95543,95544,95546,95548,95550,95552,95554,95556,95558,95560],{"class":125,"line":140},[123,95545,2846],{"class":129},[123,95547,134],{"class":133},[123,95549,95508],{"class":129},[123,95551,2825],{"class":164},[123,95553,2985],{"class":129},[123,95555,259],{"class":164},[123,95557,2985],{"class":129},[123,95559,3302],{"class":164},[123,95561,288],{"class":129},[123,95563,95564],{"class":125,"line":156},[123,95565,95566],{"class":129},"np.max(a)\n",[123,95568,95569],{"class":125,"line":168},[123,95570,95571],{"class":2673},"#最大索引(求最大元素的索引)arg\n",[123,95573,95574],{"class":125,"line":268},[123,95575,95576],{"class":129},"np.argmax(a)\n",[113,95578,95580],{"className":115,"code":95579,"language":117,"meta":118,"style":118},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[120,95581,95582,95603,95623,95627],{"__ignoreMap":118},[123,95583,95584,95586,95588,95591,95593,95595,95597,95599,95601],{"class":125,"line":126},[123,95585,13351],{"class":129},[123,95587,134],{"class":133},[123,95589,95590],{"class":129}," np.array([",[123,95592,2825],{"class":164},[123,95594,251],{"class":129},[123,95596,2926],{"class":164},[123,95598,251],{"class":129},[123,95600,2686],{"class":164},[123,95602,444],{"class":129},[123,95604,95605,95607,95609,95611,95613,95615,95617,95619,95621],{"class":125,"line":140},[123,95606,13377],{"class":129},[123,95608,134],{"class":133},[123,95610,95590],{"class":129},[123,95612,2686],{"class":164},[123,95614,251],{"class":129},[123,95616,2692],{"class":164},[123,95618,251],{"class":129},[123,95620,2901],{"class":164},[123,95622,444],{"class":129},[123,95624,95625],{"class":125,"line":156},[123,95626,232],{"emptyLinePlaceholder":231},[123,95628,95629,95631,95634],{"class":125,"line":168},[123,95630,294],{"class":164},[123,95632,95633],{"class":129},"(np.maximum(a, b))   ",[123,95635,95636],{"class":2673},"# [3 5 4]，每个位置上取较大值\n",[14,95638,95640],{"id":95639},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95642,95643],{},"①一维数组：",[113,95645,95647],{"className":115,"code":95646,"language":117,"meta":118,"style":118},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[120,95648,95649,95653,95673,95678],{"__ignoreMap":118},[123,95650,95651],{"class":125,"line":126},[123,95652,95499],{"class":2673},[123,95654,95655,95657,95659,95661,95663,95665,95667,95669,95671],{"class":125,"line":140},[123,95656,2846],{"class":129},[123,95658,134],{"class":133},[123,95660,95508],{"class":129},[123,95662,2825],{"class":164},[123,95664,2985],{"class":129},[123,95666,259],{"class":164},[123,95668,2985],{"class":129},[123,95670,3302],{"class":164},[123,95672,288],{"class":129},[123,95674,95675],{"class":125,"line":156},[123,95676,95677],{"class":2673},"#求平均值\n",[123,95679,95680],{"class":125,"line":168},[123,95681,95682],{"class":129},"np.mean(a)\n",[19,95684,95685],{},"②二维数组",[113,95687,95689],{"className":115,"code":95688,"language":117,"meta":118,"style":118},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[120,95690,95691,95696,95721,95726],{"__ignoreMap":118},[123,95692,95693],{"class":125,"line":126},[123,95694,95695],{"class":2673},"#二维数组\n",[123,95697,95698,95701,95703,95705,95707,95709,95711,95713,95715,95717,95719],{"class":125,"line":140},[123,95699,95700],{"class":129},"aa",[123,95702,134],{"class":133},[123,95704,95396],{"class":129},[123,95706,2825],{"class":164},[123,95708,2985],{"class":129},[123,95710,2269],{"class":164},[123,95712,95401],{"class":129},[123,95714,2686],{"class":164},[123,95716,2985],{"class":129},[123,95718,2901],{"class":164},[123,95720,288],{"class":129},[123,95722,95723],{"class":125,"line":156},[123,95724,95725],{"class":2673},"#对数组中的所有数求平均\n",[123,95727,95728],{"class":125,"line":168},[123,95729,95730],{"class":129},"np.mean(aa)\n",[14,95732,95734],{"id":95733},"_114-median求中位数函数","11.4 median()求中位数函数",[113,95736,95738],{"className":115,"code":95737,"language":117,"meta":118,"style":118},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[120,95739,95740,95745,95761,95766],{"__ignoreMap":118},[123,95741,95742],{"class":125,"line":126},[123,95743,95744],{"class":2673},"#求中位数\n",[123,95746,95747,95749,95751,95753,95755,95757,95759],{"class":125,"line":140},[123,95748,2871],{"class":129},[123,95750,134],{"class":133},[123,95752,95396],{"class":129},[123,95754,2825],{"class":164},[123,95756,2985],{"class":129},[123,95758,2193],{"class":164},[123,95760,288],{"class":129},[123,95762,95763],{"class":125,"line":156},[123,95764,95765],{"class":129},"np.median(b)\n",[123,95767,95768],{"class":125,"line":168},[123,95769,95770],{"class":2673},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95772,95774],{"id":95773},"_115-power求幂运算函数","11.5 power()求幂运算函数",[113,95776,95778],{"className":115,"code":95777,"language":117,"meta":118,"style":118},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[120,95779,95780,95796,95801,95806,95815,95820,95829],{"__ignoreMap":118},[123,95781,95782,95784,95786,95788,95790,95792,95794],{"class":125,"line":126},[123,95783,2871],{"class":129},[123,95785,134],{"class":133},[123,95787,95396],{"class":129},[123,95789,2825],{"class":164},[123,95791,2985],{"class":129},[123,95793,2193],{"class":164},[123,95795,288],{"class":129},[123,95797,95798],{"class":125,"line":140},[123,95799,95800],{"class":2673},"#幂运算\n",[123,95802,95803],{"class":125,"line":156},[123,95804,95805],{"class":2673},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[123,95807,95808,95811,95813],{"class":125,"line":168},[123,95809,95810],{"class":129},"np.power(b,",[123,95812,2692],{"class":164},[123,95814,288],{"class":129},[123,95816,95817],{"class":125,"line":268},[123,95818,95819],{"class":2673},"#或者以下代码，将数据存储起来\n",[123,95821,95822,95824,95826],{"class":125,"line":291},[123,95823,3446],{"class":129},[123,95825,134],{"class":133},[123,95827,95828],{"class":129},"np.empty_like(b)\n",[123,95830,95831,95833,95835,95837,95839,95841],{"class":125,"line":300},[123,95832,95810],{"class":129},[123,95834,2692],{"class":164},[123,95836,2985],{"class":129},[123,95838,95448],{"class":279},[123,95840,134],{"class":133},[123,95842,95843],{"class":129},"y)\n",[14,95845,95847],{"id":95846},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[113,95849,95851],{"className":115,"code":95850,"language":117,"meta":118,"style":118},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[120,95852,95853,95869,95874,95879,95883,95901],{"__ignoreMap":118},[123,95854,95855,95857,95859,95861,95863,95865,95867],{"class":125,"line":126},[123,95856,2871],{"class":129},[123,95858,134],{"class":133},[123,95860,95396],{"class":129},[123,95862,2825],{"class":164},[123,95864,2985],{"class":129},[123,95866,2193],{"class":164},[123,95868,288],{"class":129},[123,95870,95871],{"class":125,"line":140},[123,95872,95873],{"class":2673},"#开方\n",[123,95875,95876],{"class":125,"line":156},[123,95877,95878],{"class":129},"np.sqrt(b)\n",[123,95880,95881],{"class":125,"line":168},[123,95882,95819],{"class":2673},[123,95884,95885,95887,95889,95892,95895,95897,95899],{"class":125,"line":268},[123,95886,3446],{"class":129},[123,95888,134],{"class":133},[123,95890,95891],{"class":129},"np.empty_like(b,",[123,95893,95894],{"class":279},"dtype",[123,95896,134],{"class":133},[123,95898,2656],{"class":164},[123,95900,288],{"class":129},[123,95902,95903,95906,95908,95910],{"class":125,"line":291},[123,95904,95905],{"class":129},"np.sqrt(b,",[123,95907,95448],{"class":279},[123,95909,134],{"class":133},[123,95911,95843],{"class":129},[14,95913,95915],{"id":95914},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95917,95918],{},"对数组中的元素累计求和，可指定轴",[19,95920,95921],{},"#累计求和的意思是：",[19,95923,95924],{},"a = np.array([1, 2, 3, 4])",[19,95926,95927],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[113,95929,95931],{"className":115,"code":95930,"language":117,"meta":118,"style":118},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[120,95932,95933,95949,95954,95959],{"__ignoreMap":118},[123,95934,95935,95937,95939,95941,95943,95945,95947],{"class":125,"line":126},[123,95936,2871],{"class":129},[123,95938,134],{"class":133},[123,95940,95396],{"class":129},[123,95942,2825],{"class":164},[123,95944,2985],{"class":129},[123,95946,2193],{"class":164},[123,95948,288],{"class":129},[123,95950,95951],{"class":125,"line":140},[123,95952,95953],{"class":129},"np.cumsum(b)\n",[123,95955,95956],{"class":125,"line":156},[123,95957,95958],{"class":2673},"#结果：\n",[123,95960,95961],{"class":125,"line":168},[123,95962,95963],{"class":2673},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95965,95967],{"id":95966},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[113,95969,95971],{"className":115,"code":95970,"language":117,"meta":118,"style":118},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[120,95972,95973,95989,95994,95999,96003],{"__ignoreMap":118},[123,95974,95975,95977,95979,95981,95983,95985,95987],{"class":125,"line":126},[123,95976,2871],{"class":129},[123,95978,134],{"class":133},[123,95980,95396],{"class":129},[123,95982,2825],{"class":164},[123,95984,2985],{"class":129},[123,95986,2193],{"class":164},[123,95988,288],{"class":129},[123,95990,95991],{"class":125,"line":140},[123,95992,95993],{"class":2673},"#对数组中的元素累计求积，可指定轴\n",[123,95995,95996],{"class":125,"line":156},[123,95997,95998],{"class":129},"np.cumprod(b)\n",[123,96000,96001],{"class":125,"line":168},[123,96002,95958],{"class":2673},[123,96004,96005],{"class":125,"line":268},[123,96006,96007],{"class":2673},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96009,96011],{"id":96010},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[113,96013,96015],{"className":115,"code":96014,"language":117,"meta":118,"style":118},"#删除数组中的重复数据，并对数据进行排序\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",[120,96016,96017,96022,96070,96075,96079],{"__ignoreMap":118},[123,96018,96019],{"class":125,"line":126},[123,96020,96021],{"class":2673},"#删除数组中的重复数据，并对数据进行排序\n",[123,96023,96024,96026,96028,96030,96032,96034,96036,96038,96040,96042,96044,96046,96048,96050,96052,96054,96056,96058,96060,96062,96064,96066,96068],{"class":125,"line":140},[123,96025,2846],{"class":129},[123,96027,134],{"class":133},[123,96029,95418],{"class":129},[123,96031,2825],{"class":164},[123,96033,2985],{"class":129},[123,96035,2692],{"class":164},[123,96037,2985],{"class":129},[123,96039,2686],{"class":164},[123,96041,2985],{"class":129},[123,96043,2215],{"class":164},[123,96045,2985],{"class":129},[123,96047,2686],{"class":164},[123,96049,2985],{"class":129},[123,96051,2193],{"class":164},[123,96053,2985],{"class":129},[123,96055,2805],{"class":164},[123,96057,2985],{"class":129},[123,96059,2799],{"class":164},[123,96061,2985],{"class":129},[123,96063,3377],{"class":164},[123,96065,2985],{"class":129},[123,96067,2901],{"class":164},[123,96069,444],{"class":129},[123,96071,96072],{"class":125,"line":156},[123,96073,96074],{"class":129},"np.unique(a)\n",[123,96076,96077],{"class":125,"line":168},[123,96078,95958],{"class":2673},[123,96080,96081],{"class":125,"line":268},[123,96082,96083],{"class":2673},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,96085,96086],{},"升序形式排序",[14,96088,96090],{"id":96089},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[113,96092,96094],{"className":115,"code":96093,"language":117,"meta":118,"style":118},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[120,96095,96096,96144,96149],{"__ignoreMap":118},[123,96097,96098,96100,96102,96104,96106,96108,96110,96112,96114,96116,96118,96120,96122,96124,96126,96128,96130,96132,96134,96136,96138,96140,96142],{"class":125,"line":126},[123,96099,2846],{"class":129},[123,96101,134],{"class":133},[123,96103,95418],{"class":129},[123,96105,2825],{"class":164},[123,96107,2985],{"class":129},[123,96109,2692],{"class":164},[123,96111,2985],{"class":129},[123,96113,2686],{"class":164},[123,96115,2985],{"class":129},[123,96117,2215],{"class":164},[123,96119,2985],{"class":129},[123,96121,2686],{"class":164},[123,96123,2985],{"class":129},[123,96125,2193],{"class":164},[123,96127,2985],{"class":129},[123,96129,2805],{"class":164},[123,96131,2985],{"class":129},[123,96133,2799],{"class":164},[123,96135,2985],{"class":129},[123,96137,3377],{"class":164},[123,96139,2985],{"class":129},[123,96141,2901],{"class":164},[123,96143,444],{"class":129},[123,96145,96146],{"class":125,"line":140},[123,96147,96148],{"class":2673},"#返回数组中非零元素的索引\n",[123,96150,96151],{"class":125,"line":156},[123,96152,96153],{"class":129},"np.nonzero(a)\n",[14,96155,96157],{"id":96156},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[113,96159,96161],{"className":115,"code":96160,"language":117,"meta":118,"style":118},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[120,96162,96163,96211,96216],{"__ignoreMap":118},[123,96164,96165,96167,96169,96171,96173,96175,96177,96179,96181,96183,96185,96187,96189,96191,96193,96195,96197,96199,96201,96203,96205,96207,96209],{"class":125,"line":126},[123,96166,2846],{"class":129},[123,96168,134],{"class":133},[123,96170,95418],{"class":129},[123,96172,2825],{"class":164},[123,96174,2985],{"class":129},[123,96176,2692],{"class":164},[123,96178,2985],{"class":129},[123,96180,2686],{"class":164},[123,96182,2985],{"class":129},[123,96184,2215],{"class":164},[123,96186,2985],{"class":129},[123,96188,2686],{"class":164},[123,96190,2985],{"class":129},[123,96192,2193],{"class":164},[123,96194,2985],{"class":129},[123,96196,2805],{"class":164},[123,96198,2985],{"class":129},[123,96200,2799],{"class":164},[123,96202,2985],{"class":129},[123,96204,3377],{"class":164},[123,96206,2985],{"class":129},[123,96208,2901],{"class":164},[123,96210,444],{"class":129},[123,96212,96213],{"class":125,"line":140},[123,96214,96215],{"class":2673},"#计算一组数中最大值与最小值的差，可指定轴\n",[123,96217,96218],{"class":125,"line":156},[123,96219,96220],{"class":129},"np.ptp(a)\n",[2526,96222,96223],{},"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":118,"searchDepth":140,"depth":140,"links":96225},[96226,96227,96228,96229,96230,96231,96232,96233,96234,96235,96236],{"id":95488,"depth":140,"text":95489},{"id":95531,"depth":140,"text":95532},{"id":95639,"depth":140,"text":95640},{"id":95733,"depth":140,"text":95734},{"id":95773,"depth":140,"text":95774},{"id":95846,"depth":140,"text":95847},{"id":95914,"depth":140,"text":95915},{"id":95966,"depth":140,"text":95967},{"id":96010,"depth":140,"text":96011},{"id":96089,"depth":140,"text":96090},{"id":96156,"depth":140,"text":96157},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95474,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96243,"title":96244,"body":96245,"description":2544,"extension":2545,"meta":96900,"navigation":231,"path":96901,"seo":96902,"stem":96903,"__hash__":96904},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96246,"toc":96888},[96247,96250,96254,96257,96473,96477,96480,96689,96693,96759,96764,96768,96771,96774,96812,96816,96819,96824,96828,96831,96834,96839,96843,96846,96850,96853,96856,96861,96865,96868,96871,96876,96880,96885],[10,96248,96244],{"id":96249},"_12其他常用函数",[14,96251,96253],{"id":96252},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96255,96256],{},"将数组的数据按照行列复制扩展",[113,96258,96260],{"className":115,"code":96259,"language":117,"meta":118,"style":118},"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",[120,96261,96262,96278,96287,96291,96296,96301,96314,96318,96323,96328,96333,96337,96342,96366,96378,96382,96386,96391,96396,96401,96406,96410,96423,96427,96431,96436,96441,96446,96451,96456,96460,96464,96469],{"__ignoreMap":118},[123,96263,96264,96266,96268,96270,96272,96274,96276],{"class":125,"line":126},[123,96265,2846],{"class":129},[123,96267,134],{"class":133},[123,96269,95396],{"class":129},[123,96271,2825],{"class":164},[123,96273,2985],{"class":129},[123,96275,2926],{"class":164},[123,96277,288],{"class":129},[123,96279,96280,96283,96285],{"class":125,"line":140},[123,96281,96282],{"class":129},"np.tile(a,",[123,96284,2692],{"class":164},[123,96286,288],{"class":129},[123,96288,96289],{"class":125,"line":156},[123,96290,95958],{"class":2673},[123,96292,96293],{"class":125,"line":168},[123,96294,96295],{"class":2673},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[123,96297,96298],{"class":125,"line":268},[123,96299,96300],{"class":2673},"#行复制两次，列复制三次\n",[123,96302,96303,96306,96308,96310,96312],{"class":125,"line":291},[123,96304,96305],{"class":129},"np.tile(a,(",[123,96307,2692],{"class":164},[123,96309,2985],{"class":129},[123,96311,2686],{"class":164},[123,96313,32913],{"class":129},[123,96315,96316],{"class":125,"line":300},[123,96317,95958],{"class":2673},[123,96319,96320],{"class":125,"line":305},[123,96321,96322],{"class":143},"'''\n",[123,96324,96325],{"class":125,"line":316},[123,96326,96327],{"class":143},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[123,96329,96330],{"class":125,"line":673},[123,96331,96332],{"class":143},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[123,96334,96335],{"class":125,"line":692},[123,96336,96322],{"class":143},[123,96338,96339],{"class":125,"line":713},[123,96340,96341],{"class":2673},"#创建二维数组\n",[123,96343,96344,96346,96348,96350,96352,96354,96356,96358,96360,96362,96364],{"class":125,"line":718},[123,96345,95700],{"class":129},[123,96347,134],{"class":133},[123,96349,95396],{"class":129},[123,96351,2825],{"class":164},[123,96353,2985],{"class":129},[123,96355,2269],{"class":164},[123,96357,95401],{"class":129},[123,96359,2901],{"class":164},[123,96361,2985],{"class":129},[123,96363,2686],{"class":164},[123,96365,288],{"class":129},[123,96367,96368,96371,96373,96375],{"class":125,"line":1138},[123,96369,96370],{"class":129},"np.tile(aa,",[123,96372,2692],{"class":164},[123,96374,3035],{"class":129},[123,96376,96377],{"class":2673},"#一个数的时候就是行\n",[123,96379,96380],{"class":125,"line":1429},[123,96381,95958],{"class":2673},[123,96383,96384],{"class":125,"line":1439},[123,96385,96322],{"class":143},[123,96387,96388],{"class":125,"line":1444},[123,96389,96390],{"class":143},"array([[ 1,  2,  3,  1,  2,  3],\n",[123,96392,96393],{"class":125,"line":1453},[123,96394,96395],{"class":143},"       [ 4,  5,  6,  4,  5,  6],\n",[123,96397,96398],{"class":125,"line":1458},[123,96399,96400],{"class":143},"       [ 7,  8,  9,  7,  8,  9],\n",[123,96402,96403],{"class":125,"line":1476},[123,96404,96405],{"class":143},"       [10, 11, 12, 10, 11, 12]])\n",[123,96407,96408],{"class":125,"line":1494},[123,96409,96322],{"class":143},[123,96411,96412,96415,96417,96419,96421],{"class":125,"line":1499},[123,96413,96414],{"class":129},"np.tile(aa,(",[123,96416,2692],{"class":164},[123,96418,2985],{"class":129},[123,96420,2686],{"class":164},[123,96422,32913],{"class":129},[123,96424,96425],{"class":125,"line":1517},[123,96426,95958],{"class":2673},[123,96428,96429],{"class":125,"line":1534},[123,96430,96322],{"class":143},[123,96432,96433],{"class":125,"line":1539},[123,96434,96435],{"class":143},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[123,96437,96438],{"class":125,"line":2080},[123,96439,96440],{"class":143},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[123,96442,96443],{"class":125,"line":2097},[123,96444,96445],{"class":143},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[123,96447,96448],{"class":125,"line":2114},[123,96449,96450],{"class":143},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[123,96452,96453],{"class":125,"line":2125},[123,96454,96455],{"class":143},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[123,96457,96458],{"class":125,"line":2130},[123,96459,96440],{"class":143},[123,96461,96462],{"class":125,"line":5033},[123,96463,96445],{"class":143},[123,96465,96466],{"class":125,"line":5041},[123,96467,96468],{"class":143},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[123,96470,96471],{"class":125,"line":5046},[123,96472,96322],{"class":143},[14,96474,96476],{"id":96475},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96478,96479],{},"repeat()将数组中的每个元素重复若干次",[113,96481,96483],{"className":115,"code":96482,"language":117,"meta":118,"style":118},"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",[120,96484,96485,96501,96510,96514,96519,96543,96548,96557,96561,96566,96570,96575,96591,96595,96599,96604,96609,96614,96618,96623,96627,96632,96637,96641,96657,96661,96665,96670,96675,96680,96685],{"__ignoreMap":118},[123,96486,96487,96489,96491,96493,96495,96497,96499],{"class":125,"line":126},[123,96488,2846],{"class":129},[123,96490,134],{"class":133},[123,96492,95396],{"class":129},[123,96494,2825],{"class":164},[123,96496,2985],{"class":129},[123,96498,2926],{"class":164},[123,96500,288],{"class":129},[123,96502,96503,96506,96508],{"class":125,"line":140},[123,96504,96505],{"class":129},"np.repeat(a,",[123,96507,2686],{"class":164},[123,96509,288],{"class":129},[123,96511,96512],{"class":125,"line":156},[123,96513,95958],{"class":2673},[123,96515,96516],{"class":125,"line":168},[123,96517,96518],{"class":2673},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[123,96520,96521,96523,96525,96527,96529,96531,96533,96535,96537,96539,96541],{"class":125,"line":268},[123,96522,95700],{"class":129},[123,96524,134],{"class":133},[123,96526,95396],{"class":129},[123,96528,2825],{"class":164},[123,96530,2985],{"class":129},[123,96532,2269],{"class":164},[123,96534,95401],{"class":129},[123,96536,2901],{"class":164},[123,96538,2985],{"class":129},[123,96540,2686],{"class":164},[123,96542,288],{"class":129},[123,96544,96545],{"class":125,"line":291},[123,96546,96547],{"class":2673},"#这个重复之后二维变成一维\n",[123,96549,96550,96553,96555],{"class":125,"line":300},[123,96551,96552],{"class":129},"np.repeat(aa,",[123,96554,2692],{"class":164},[123,96556,288],{"class":129},[123,96558,96559],{"class":125,"line":305},[123,96560,96322],{"class":143},[123,96562,96563],{"class":125,"line":316},[123,96564,96565],{"class":143},"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",[123,96567,96568],{"class":125,"line":673},[123,96569,96322],{"class":143},[123,96571,96572],{"class":125,"line":692},[123,96573,96574],{"class":2673},"#指定axis\n",[123,96576,96577,96579,96581,96583,96585,96587,96589],{"class":125,"line":713},[123,96578,96552],{"class":129},[123,96580,2692],{"class":164},[123,96582,2985],{"class":129},[123,96584,49921],{"class":279},[123,96586,134],{"class":133},[123,96588,2799],{"class":164},[123,96590,288],{"class":129},[123,96592,96593],{"class":125,"line":718},[123,96594,95958],{"class":2673},[123,96596,96597],{"class":125,"line":1138},[123,96598,96322],{"class":143},[123,96600,96601],{"class":125,"line":1429},[123,96602,96603],{"class":143},"array([[ 1,  2,  3],\n",[123,96605,96606],{"class":125,"line":1439},[123,96607,96608],{"class":143},"       [ 1,  2,  3],\n",[123,96610,96611],{"class":125,"line":1444},[123,96612,96613],{"class":143},"       [ 4,  5,  6],\n",[123,96615,96616],{"class":125,"line":1453},[123,96617,96613],{"class":143},[123,96619,96620],{"class":125,"line":1458},[123,96621,96622],{"class":143},"       [ 7,  8,  9],\n",[123,96624,96625],{"class":125,"line":1476},[123,96626,96622],{"class":143},[123,96628,96629],{"class":125,"line":1494},[123,96630,96631],{"class":143},"       [10, 11, 12],\n",[123,96633,96634],{"class":125,"line":1499},[123,96635,96636],{"class":143},"       [10, 11, 12]])\n",[123,96638,96639],{"class":125,"line":1517},[123,96640,96322],{"class":143},[123,96642,96643,96645,96647,96649,96651,96653,96655],{"class":125,"line":1534},[123,96644,96552],{"class":129},[123,96646,2692],{"class":164},[123,96648,2985],{"class":129},[123,96650,49921],{"class":279},[123,96652,134],{"class":133},[123,96654,2825],{"class":164},[123,96656,288],{"class":129},[123,96658,96659],{"class":125,"line":1539},[123,96660,95958],{"class":2673},[123,96662,96663],{"class":125,"line":2080},[123,96664,96322],{"class":143},[123,96666,96667],{"class":125,"line":2097},[123,96668,96669],{"class":143},"array([[ 1,  1,  2,  2,  3,  3],\n",[123,96671,96672],{"class":125,"line":2114},[123,96673,96674],{"class":143},"       [ 4,  4,  5,  5,  6,  6],\n",[123,96676,96677],{"class":125,"line":2125},[123,96678,96679],{"class":143},"       [ 7,  7,  8,  8,  9,  9],\n",[123,96681,96682],{"class":125,"line":2130},[123,96683,96684],{"class":143},"       [10, 10, 11, 11, 12, 12]])\n",[123,96686,96687],{"class":125,"line":5033},[123,96688,96322],{"class":143},[14,96690,96692],{"id":96691},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[113,96694,96696],{"className":115,"code":96695,"language":117,"meta":118,"style":118},"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",[120,96697,96698,96714,96719,96731,96735,96740,96750,96754],{"__ignoreMap":118},[123,96699,96700,96702,96704,96706,96708,96710,96712],{"class":125,"line":126},[123,96701,2846],{"class":129},[123,96703,134],{"class":133},[123,96705,95396],{"class":129},[123,96707,2825],{"class":164},[123,96709,2985],{"class":129},[123,96711,2926],{"class":164},[123,96713,288],{"class":129},[123,96715,96716],{"class":125,"line":140},[123,96717,96718],{"class":2673},"#array([，2，3，4])\n",[123,96720,96721,96724,96726,96728],{"class":125,"line":156},[123,96722,96723],{"class":129},"np.roll(a,",[123,96725,2692],{"class":164},[123,96727,3035],{"class":129},[123,96729,96730],{"class":2673},"#传正数向后调多少位，传负数向前调多少位\n",[123,96732,96733],{"class":125,"line":168},[123,96734,95958],{"class":2673},[123,96736,96737],{"class":125,"line":268},[123,96738,96739],{"class":2673},"#array([3, 4, 1, 2])\n",[123,96741,96742,96744,96746,96748],{"class":125,"line":291},[123,96743,96723],{"class":129},[123,96745,3135],{"class":133},[123,96747,2825],{"class":164},[123,96749,288],{"class":129},[123,96751,96752],{"class":125,"line":300},[123,96753,95958],{"class":2673},[123,96755,96756],{"class":125,"line":305},[123,96757,96758],{"class":2673},"#array([2, 3, 4, 1])\n",[19,96760,96761],{},[3929,96762],{"alt":118,"src":96763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96765,96767],{"id":96766},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96769,96770],{},"resize()重新调整数组的大小",[19,96772,96773],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[113,96775,96777],{"className":115,"code":96776,"language":117,"meta":118,"style":118},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[120,96778,96779,96784,96797],{"__ignoreMap":118},[123,96780,96781],{"class":125,"line":126},[123,96782,96783],{"class":2673},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[123,96785,96786,96789,96791,96793,96795],{"class":125,"line":140},[123,96787,96788],{"class":129},"np.resize(aa,(",[123,96790,2692],{"class":164},[123,96792,2985],{"class":129},[123,96794,2951],{"class":164},[123,96796,32913],{"class":129},[123,96798,96799,96801,96803,96805,96807,96809],{"class":125,"line":156},[123,96800,96788],{"class":129},[123,96802,2692],{"class":164},[123,96804,2985],{"class":129},[123,96806,3026],{"class":164},[123,96808,85168],{"class":129},[123,96810,96811],{"class":2673},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96813,96815],{"id":96814},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96817,96818],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96820,96821],{},[3929,96822],{"alt":118,"src":96823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96825,96827],{"id":96826},"_126-保存加载文件","12.6 保存加载文件",[19,96829,96830],{},"savetxt():将数据保存到txt文件中",[19,96832,96833],{},"loadtxt():从文件加载数据",[19,96835,96836],{},[3929,96837],{"alt":118,"src":96838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96840,96842],{"id":96841},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96844,96845],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96847,96849],{"id":96848},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96851,96852],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96854,96855],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96857,96858],{},[3929,96859],{"alt":118,"src":96860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96862,96864],{"id":96863},"_129-where语句","12.9 where语句",[19,96866,96867],{},"np.where(条件,x,y)",[19,96869,96870],{},"如果条件为True,对应值为x,否则对应值为y",[19,96872,96873],{},[3929,96874],{"alt":118,"src":96875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96877,96879],{"id":96878},"_1210-dot矩阵","12.10 dot()矩阵",[19,96881,96882],{},[3929,96883],{"alt":118,"src":96884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2526,96886,96887],{},"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":118,"searchDepth":140,"depth":140,"links":96889},[96890,96891,96892,96893,96894,96895,96896,96897,96898,96899],{"id":96252,"depth":140,"text":96253},{"id":96475,"depth":140,"text":96476},{"id":96691,"depth":140,"text":96692},{"id":96766,"depth":140,"text":96767},{"id":96814,"depth":140,"text":96815},{"id":96826,"depth":140,"text":96827},{"id":96841,"depth":140,"text":96842},{"id":96848,"depth":140,"text":96849},{"id":96863,"depth":140,"text":96864},{"id":96878,"depth":140,"text":96879},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96244,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96906,"title":96907,"body":96908,"description":2544,"extension":2545,"meta":97261,"navigation":231,"path":97262,"seo":97263,"stem":97264,"__hash__":97265},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96909,"toc":97259},[96910,96913,96916,96919,96922,96925,96990,96992,97256],[10,96911,96907],{"id":96912},"_13数组排序",[19,96914,96915],{},"排序主要用到的方法是np.sort和np.argsort",[19,96917,96918],{},"其中np.sort()对数组直接排序",[19,96920,96921],{},"而np.argsort()是返回排序后的原始索引",[19,96923,96924],{},"①一维数组",[113,96926,96928],{"className":115,"code":96927,"language":117,"meta":118,"style":118},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[120,96929,96930,96934,96974,96982],{"__ignoreMap":118},[123,96931,96932],{"class":125,"line":126},[123,96933,95499],{"class":2673},[123,96935,96936,96938,96940,96942,96944,96946,96948,96950,96952,96954,96956,96958,96960,96962,96964,96966,96968,96970,96972],{"class":125,"line":140},[123,96937,2846],{"class":129},[123,96939,134],{"class":133},[123,96941,95418],{"class":129},[123,96943,2686],{"class":164},[123,96945,2985],{"class":129},[123,96947,2215],{"class":164},[123,96949,2985],{"class":129},[123,96951,2248],{"class":164},[123,96953,2985],{"class":129},[123,96955,3377],{"class":164},[123,96957,2985],{"class":129},[123,96959,2887],{"class":164},[123,96961,2985],{"class":129},[123,96963,3492],{"class":164},[123,96965,2985],{"class":129},[123,96967,2951],{"class":164},[123,96969,2985],{"class":129},[123,96971,2193],{"class":164},[123,96973,444],{"class":129},[123,96975,96976,96979],{"class":125,"line":156},[123,96977,96978],{"class":129},"np.sort(a)",[123,96980,96981],{"class":2673},"#升序排序\n",[123,96983,96984,96987],{"class":125,"line":168},[123,96985,96986],{"class":129},"np.argsort(a)",[123,96988,96989],{"class":2673},"#按照元素大小来索引排序\n",[19,96991,95685],{},[113,96993,96995],{"className":115,"code":96994,"language":117,"meta":118,"style":118},"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",[120,96996,96997,97009,97035,97040,97044,97049,97054,97059,97064,97068,97076,97080,97085,97090,97095,97100,97104,97109,97122,97126,97131,97136,97141,97146,97150,97155,97167,97171,97175,97179,97183,97187,97191,97196,97211,97216,97225,97230,97234,97238,97243,97247,97252],{"__ignoreMap":118},[123,96998,96999,97002,97004,97006],{"class":125,"line":126},[123,97000,97001],{"class":129},"np.random.seed(",[123,97003,2799],{"class":164},[123,97005,3035],{"class":129},[123,97007,97008],{"class":2673},"#保证每次值一样\n",[123,97010,97011,97013,97015,97017,97019,97021,97023,97025,97027,97029,97031,97033],{"class":125,"line":140},[123,97012,95700],{"class":129},[123,97014,134],{"class":133},[123,97016,95508],{"class":129},[123,97018,259],{"class":164},[123,97020,2985],{"class":129},[123,97022,33908],{"class":279},[123,97024,134],{"class":133},[123,97026,1315],{"class":129},[123,97028,2901],{"class":164},[123,97030,2985],{"class":129},[123,97032,2951],{"class":164},[123,97034,32913],{"class":129},[123,97036,97037],{"class":125,"line":156},[123,97038,97039],{"class":2673},"#原数组：\n",[123,97041,97042],{"class":125,"line":168},[123,97043,96322],{"class":143},[123,97045,97046],{"class":125,"line":268},[123,97047,97048],{"class":143},"array([[44, 47, 64, 67, 67,  9],\n",[123,97050,97051],{"class":125,"line":291},[123,97052,97053],{"class":143},"       [83, 21, 36, 87, 70, 88],\n",[123,97055,97056],{"class":125,"line":300},[123,97057,97058],{"class":143},"       [88, 12, 58, 65, 39, 87],\n",[123,97060,97061],{"class":125,"line":305},[123,97062,97063],{"class":143},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[123,97065,97066],{"class":125,"line":316},[123,97067,96322],{"class":143},[123,97069,97070,97073],{"class":125,"line":673},[123,97071,97072],{"class":129},"np.sort(aa)",[123,97074,97075],{"class":2673},"#每行进行了排序\n",[123,97077,97078],{"class":125,"line":692},[123,97079,96322],{"class":143},[123,97081,97082],{"class":125,"line":713},[123,97083,97084],{"class":143},"array([[ 9, 44, 47, 64, 67, 67],\n",[123,97086,97087],{"class":125,"line":718},[123,97088,97089],{"class":143},"       [21, 36, 70, 83, 87, 88],\n",[123,97091,97092],{"class":125,"line":1138},[123,97093,97094],{"class":143},"       [12, 39, 58, 65, 87, 88],\n",[123,97096,97097],{"class":125,"line":1429},[123,97098,97099],{"class":143},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[123,97101,97102],{"class":125,"line":1439},[123,97103,96322],{"class":143},[123,97105,97106],{"class":125,"line":1444},[123,97107,97108],{"class":2673},"#axis=0时\n",[123,97110,97111,97114,97116,97118,97120],{"class":125,"line":1453},[123,97112,97113],{"class":129},"np.sort(aa,",[123,97115,49921],{"class":279},[123,97117,134],{"class":133},[123,97119,2799],{"class":164},[123,97121,288],{"class":129},[123,97123,97124],{"class":125,"line":1458},[123,97125,96322],{"class":143},[123,97127,97128],{"class":125,"line":1476},[123,97129,97130],{"class":143},"array([[44, 12, 36, 37, 25,  9],\n",[123,97132,97133],{"class":125,"line":1494},[123,97134,97135],{"class":143},"       [46, 21, 58, 65, 39, 77],\n",[123,97137,97138],{"class":125,"line":1499},[123,97139,97140],{"class":143},"       [83, 47, 64, 67, 67, 87],\n",[123,97142,97143],{"class":125,"line":1517},[123,97144,97145],{"class":143},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[123,97147,97148],{"class":125,"line":1534},[123,97149,96322],{"class":143},[123,97151,97152],{"class":125,"line":1539},[123,97153,97154],{"class":2673},"#axis=1时,为默认值\n",[123,97156,97157,97159,97161,97163,97165],{"class":125,"line":2080},[123,97158,97113],{"class":129},[123,97160,49921],{"class":279},[123,97162,134],{"class":133},[123,97164,2825],{"class":164},[123,97166,288],{"class":129},[123,97168,97169],{"class":125,"line":2097},[123,97170,96322],{"class":143},[123,97172,97173],{"class":125,"line":2114},[123,97174,97084],{"class":143},[123,97176,97177],{"class":125,"line":2125},[123,97178,97089],{"class":143},[123,97180,97181],{"class":125,"line":2130},[123,97182,97094],{"class":143},[123,97184,97185],{"class":125,"line":5033},[123,97186,97099],{"class":143},[123,97188,97189],{"class":125,"line":5041},[123,97190,96322],{"class":143},[123,97192,97193],{"class":125,"line":5046},[123,97194,97195],{"class":2673},"#按最后一列排序\n",[123,97197,97198,97200,97202,97205,97207,97209],{"class":125,"line":5052},[123,97199,2871],{"class":129},[123,97201,134],{"class":133},[123,97203,97204],{"class":129},"aa[:,",[123,97206,3135],{"class":133},[123,97208,2825],{"class":164},[123,97210,998],{"class":129},[123,97212,97213],{"class":125,"line":5058},[123,97214,97215],{"class":2673},"#获取最后一列排好序的索引\n",[123,97217,97218,97220,97222],{"class":125,"line":5063},[123,97219,76458],{"class":129},[123,97221,134],{"class":133},[123,97223,97224],{"class":129},"np.argsort(b)\n",[123,97226,97227],{"class":125,"line":10380},[123,97228,97229],{"class":129},"aa[index]\n",[123,97231,97232],{"class":125,"line":10404},[123,97233,96322],{"class":143},[123,97235,97236],{"class":125,"line":10409},[123,97237,97048],{"class":143},[123,97239,97240],{"class":125,"line":10415},[123,97241,97242],{"class":143},"       [46, 88, 81, 37, 25, 77],\n",[123,97244,97245],{"class":125,"line":10442},[123,97246,97058],{"class":143},[123,97248,97249],{"class":125,"line":10447},[123,97250,97251],{"class":143},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[123,97253,97254],{"class":125,"line":10453},[123,97255,96322],{"class":143},[2526,97257,97258],{},"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":118,"searchDepth":140,"depth":140,"links":97260},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96907,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97267,"title":97268,"body":97269,"description":2544,"extension":2545,"meta":97299,"navigation":231,"path":97300,"seo":97301,"stem":97302,"__hash__":97303},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97270,"toc":97297},[97271,97274,97277,97280,97283,97286,97289,97292],[10,97272,97268],{"id":97273},"_14广播机制",[19,97275,97276],{},"广播的规则：",[19,97278,97279],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97281,97282],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97284,97285],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97287,97288],{},"3.如果没有维度形状为1，则会引发异常",[19,97290,97291],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97293,97294],{},[3929,97295],{"alt":118,"src":97296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":118,"searchDepth":140,"depth":140,"links":97298},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97268,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97305,"title":97306,"body":97307,"description":2544,"extension":2545,"meta":97405,"navigation":231,"path":97406,"seo":97407,"stem":97408,"__hash__":97409},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97308,"toc":97403},[97309,97312,97315,97400],[10,97310,97306],{"id":97311},"_15比较掩码",[19,97313,97314],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[113,97316,97318],{"className":115,"code":97317,"language":117,"meta":118,"style":118},"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",[120,97319,97320,97366,97377,97391,97395],{"__ignoreMap":118},[123,97321,97322,97324,97326,97329,97331,97333,97335,97337,97339,97341,97343,97345,97347,97349,97351,97353,97355,97357,97359,97361,97363],{"class":125,"line":126},[123,97323,2846],{"class":129},[123,97325,134],{"class":133},[123,97327,97328],{"class":129},"np.array([[",[123,97330,2825],{"class":164},[123,97332,2985],{"class":129},[123,97334,2692],{"class":164},[123,97336,2985],{"class":129},[123,97338,2686],{"class":164},[123,97340,50437],{"class":129},[123,97342,3077],{"class":164},[123,97344,2985],{"class":129},[123,97346,2215],{"class":164},[123,97348,2985],{"class":129},[123,97350,2269],{"class":164},[123,97352,50437],{"class":129},[123,97354,3327],{"class":164},[123,97356,2985],{"class":129},[123,97358,3352],{"class":164},[123,97360,2985],{"class":129},[123,97362,3377],{"class":164},[123,97364,97365],{"class":129},"]])\n",[123,97367,97368,97370,97372,97374],{"class":125,"line":140},[123,97369,2846],{"class":129},[123,97371,3509],{"class":133},[123,97373,3302],{"class":164},[123,97375,97376],{"class":2673},"#结果是一个由True,False组成的数组\n",[123,97378,97379,97382,97384,97386,97388],{"class":125,"line":156},[123,97380,97381],{"class":129},"a[a",[123,97383,3509],{"class":133},[123,97385,3302],{"class":164},[123,97387,3539],{"class":129},[123,97389,97390],{"class":2673},"#小于20的元素会存到这个数组中\n",[123,97392,97393],{"class":125,"line":168},[123,97394,95958],{"class":2673},[123,97396,97397],{"class":125,"line":268},[123,97398,97399],{"class":2673},"#array([ 1,  2,  3, 11, 12, 13])\n",[2526,97401,97402],{},"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":118,"searchDepth":140,"depth":140,"links":97404},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97306,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97411,"title":97412,"body":97413,"description":2544,"extension":2545,"meta":97505,"navigation":231,"path":97506,"seo":97507,"stem":97508,"__hash__":97509},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97414,"toc":97503},[97415,97418,97421,97424,97427,97430,97495,97500],[10,97416,97412],{"id":97417},"_16魔法命令time",[19,97419,97420],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97422,97423],{},"%:行模式",[19,97425,97426],{},"%%:单元格模式",[19,97428,97429],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[113,97431,97433],{"className":115,"code":97432,"language":117,"meta":118,"style":118},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[120,97434,97435,97440,97447,97452,97461,97474,97478,97486],{"__ignoreMap":118},[123,97436,97437],{"class":125,"line":126},[123,97438,97439],{"class":2673},"#程序执行时间\n",[123,97441,97442,97444],{"class":125,"line":140},[123,97443,223],{"class":133},[123,97445,97446],{"class":129}," time \n",[123,97448,97449],{"class":125,"line":156},[123,97450,97451],{"class":2673},"#获取时间\n",[123,97453,97454,97457,97459],{"class":125,"line":168},[123,97455,97456],{"class":129},"start",[123,97458,134],{"class":133},[123,97460,34830],{"class":129},[123,97462,97463,97466,97469,97471],{"class":125,"line":268},[123,97464,97465],{"class":129},"time.sleep(",[123,97467,97468],{"class":164},"0.4",[123,97470,3035],{"class":129},[123,97472,97473],{"class":2673},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[123,97475,97476],{"class":125,"line":291},[123,97477,97451],{"class":2673},[123,97479,97480,97482,97484],{"class":125,"line":300},[123,97481,48208],{"class":129},[123,97483,134],{"class":133},[123,97485,34830],{"class":129},[123,97487,97488,97490,97492],{"class":125,"line":305},[123,97489,48208],{"class":129},[123,97491,3135],{"class":133},[123,97493,97494],{"class":129},"start\n",[19,97496,97497],{},[3929,97498],{"alt":118,"src":97499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2526,97501,97502],{},"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":118,"searchDepth":140,"depth":140,"links":97504},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97412,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97511,"title":97512,"body":97513,"description":2544,"extension":2545,"meta":97548,"navigation":231,"path":97549,"seo":97550,"stem":97551,"__hash__":97552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97514,"toc":97546},[97515,97518,97521,97524,97527,97530,97533,97536,97541],[10,97516,97512],{"id":97517},"_17魔法命令timeit",[19,97519,97520],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97522,97523],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97525,97526],{},"单元格模式：",[19,97528,97529],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97531,97532],{},"初始化语句执行次数由轮数来决定",[19,97534,97535],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97537,97538],{},[3929,97539],{"alt":118,"src":97540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97542,97543],{},[3929,97544],{"alt":118,"src":97545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":118,"searchDepth":140,"depth":140,"links":97547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97512,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97554,"title":97555,"body":97556,"description":2544,"extension":2545,"meta":97574,"navigation":231,"path":97575,"seo":97576,"stem":97577,"__hash__":97578},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97557,"toc":97572},[97558,97561,97564,97567],[10,97559,97555],{"id":97560},"_18魔法命令writefile和run",[19,97562,97563],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97565,97566],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97568,97569],{},[3929,97570],{"alt":118,"src":97571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":118,"searchDepth":140,"depth":140,"links":97573},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97555,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97580,"title":97581,"body":97582,"description":2544,"extension":2545,"meta":97635,"navigation":231,"path":97636,"seo":97637,"stem":97638,"__hash__":97639},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97583,"toc":97633},[97584,97587,97590,97592,97595,97598,97603,97606,97609,97612,97615,97618,97621,97624,97627,97630],[10,97585,97581],{"id":97586},"_19魔法命令memit",[19,97588,97589],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97591,27022],{},[19,97593,97594],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97596,97597],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97599,97600],{},[3929,97601],{"alt":118,"src":97602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97604,97605],{},"补充：",[19,97607,97608],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97610,97611],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97613,97614],{},"解决方法：",[19,97616,97617],{},"1.cmd",[19,97619,97620],{},"2.依次输入以下代码：",[19,97622,97623],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97625,97626],{},"pip install --upgrade ipython",[19,97628,97629],{},"#升级 memory_profiler 和 setuptools",[19,97631,97632],{},"pip install --upgrade memory_profiler setuptools",{"title":118,"searchDepth":140,"depth":140,"links":97634},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97581,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97641,"title":97642,"body":97643,"description":2544,"extension":2545,"meta":99289,"navigation":231,"path":99290,"seo":99291,"stem":99292,"__hash__":99293},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97644,"toc":99259},[97645,97648,97652,97656,97717,97720,97725,97729,97734,97739,97744,97749,97752,97757,97761,97765,97798,97801,97804,97807,97859,97862,97898,97901,97943,97947,97968,97970,98007,98009,98014,98016,98021,98025,98028,98056,98060,98064,98117,98121,98213,98217,98221,98224,98229,98233,98258,98263,98267,98270,98273,98276,98279,98282,98285,98288,98300,98304,98308,98311,98343,98346,98369,98372,98398,98401,98427,98430,98464,98467,98529,98533,98536,98540,98543,98569,98572,98575,98580,98583,98652,98654,98659,98720,98723,98734,98740,98745,98749,98752,98765,98769,98784,98786,98809,98811,98837,98840,98843,98846,98894,98896,98901,98905,98909,98936,98940,98967,98970,98975,98980,99070,99074,99132,99137,99140,99143,99185,99189,99245,99250,99253,99256],[10,97646,97642],{"id":97647},"_2创建数组",[14,97649,97651],{"id":97650},"_21-array函数创建数组","2.1 array()函数创建数组",[2587,97653,97655],{"id":97654},"_221-函数语句","2.2.1 函数语句",[113,97657,97659],{"className":115,"code":97658,"language":117,"meta":118,"style":118},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[120,97660,97661],{"__ignoreMap":118},[123,97662,97663,97666,97669,97671,97673,97675,97677,97679,97682,97684,97687,97689,97692,97694,97696,97698,97701,97703,97706,97708,97711,97713,97715],{"class":125,"line":126},[123,97664,97665],{"class":129},"numpy.array(",[123,97667,97668],{"class":164},"object",[123,97670,251],{"class":129},[123,97672,95894],{"class":279},[123,97674,15995],{"class":133},[123,97676,41341],{"class":164},[123,97678,251],{"class":129},[123,97680,97681],{"class":279},"copy",[123,97683,15995],{"class":133},[123,97685,97686],{"class":164}," True",[123,97688,251],{"class":129},[123,97690,97691],{"class":279},"order",[123,97693,15995],{"class":133},[123,97695,41341],{"class":164},[123,97697,251],{"class":129},[123,97699,97700],{"class":279},"subok",[123,97702,15995],{"class":133},[123,97704,97705],{"class":164}," False",[123,97707,251],{"class":129},[123,97709,97710],{"class":279},"ndmin",[123,97712,15995],{"class":133},[123,97714,6532],{"class":164},[123,97716,288],{"class":129},[19,97718,97719],{},"参数：",[19,97721,97722],{},[3929,97723],{"alt":118,"src":97724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[2587,97726,97728],{"id":97727},"_222-实例","2.2.2 实例",[19,97730,97731],{},[3929,97732],{"alt":118,"src":97733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97735,97736],{},[3929,97737],{"alt":118,"src":97738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97740,97741],{},[3929,97742],{"alt":118,"src":97743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97745,97746],{},[3929,97747],{"alt":118,"src":97748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97750,97751],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97753,97754],{},[3929,97755],{"alt":118,"src":97756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97758,97760],{"id":97759},"_22-随机数创建数组","2.2 随机数创建数组",[2587,97762,97764],{"id":97763},"_221-random语句","2.2.1 random语句",[113,97766,97768],{"className":115,"code":97767,"language":117,"meta":118,"style":118},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[120,97769,97770,97775,97780,97788,97793],{"__ignoreMap":118},[123,97771,97772],{"class":125,"line":126},[123,97773,97774],{"class":2673},"#random.random()\n",[123,97776,97777],{"class":125,"line":140},[123,97778,97779],{"class":2673},"#确定随机种子,就是每次运行结果是相同的\n",[123,97781,97782,97784,97786],{"class":125,"line":156},[123,97783,97001],{"class":129},[123,97785,2799],{"class":164},[123,97787,288],{"class":129},[123,97789,97790],{"class":125,"line":168},[123,97791,97792],{"class":129},"np.random.random()\n",[123,97794,97795],{"class":125,"line":268},[123,97796,97797],{"class":2673},"#生成一个随机的数目\n",[19,97799,97800],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97802,97803],{},"可以指定数组形状 size",[19,97805,97806],{},"①生成一维数组",[113,97808,97810],{"className":115,"code":97809,"language":117,"meta":118,"style":118},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[120,97811,97812,97817,97830,97835,97851],{"__ignoreMap":118},[123,97813,97814],{"class":125,"line":126},[123,97815,97816],{"class":2673},"#random.random(size())\n",[123,97818,97819,97822,97824,97826,97828],{"class":125,"line":140},[123,97820,97821],{"class":129},"np.random.random(",[123,97823,33908],{"class":279},[123,97825,134],{"class":133},[123,97827,2926],{"class":164},[123,97829,288],{"class":129},[123,97831,97832],{"class":125,"line":156},[123,97833,97834],{"class":2673},"#生成一位的五个元素\n",[123,97836,97837,97839,97841,97843,97845,97847,97849],{"class":125,"line":168},[123,97838,2846],{"class":129},[123,97840,134],{"class":133},[123,97842,97821],{"class":129},[123,97844,33908],{"class":279},[123,97846,134],{"class":133},[123,97848,2901],{"class":164},[123,97850,288],{"class":129},[123,97852,97853,97856],{"class":125,"line":268},[123,97854,97855],{"class":129},"a.shape ",[123,97857,97858],{"class":2673},"#输出数组形状\n",[19,97860,97861],{},"②生成二维数组",[113,97863,97865],{"className":115,"code":97864,"language":117,"meta":118,"style":118},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[120,97866,97867,97871,97893],{"__ignoreMap":118},[123,97868,97869],{"class":125,"line":126},[123,97870,95695],{"class":2673},[123,97872,97873,97875,97877,97879,97881,97883,97885,97887,97889,97891],{"class":125,"line":140},[123,97874,95700],{"class":129},[123,97876,134],{"class":133},[123,97878,97821],{"class":129},[123,97880,33908],{"class":279},[123,97882,134],{"class":133},[123,97884,1315],{"class":129},[123,97886,2901],{"class":164},[123,97888,2985],{"class":129},[123,97890,2926],{"class":164},[123,97892,32913],{"class":129},[123,97894,97895],{"class":125,"line":156},[123,97896,97897],{"class":2673},"#生成四行五列的数组\n",[19,97899,97900],{},"③生成三维数组",[113,97902,97904],{"className":115,"code":97903,"language":117,"meta":118,"style":118},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[120,97905,97906,97911,97938],{"__ignoreMap":118},[123,97907,97908],{"class":125,"line":126},[123,97909,97910],{"class":2673},"#三维数组\n",[123,97912,97913,97916,97918,97920,97922,97924,97926,97928,97930,97932,97934,97936],{"class":125,"line":140},[123,97914,97915],{"class":129},"aaa",[123,97917,134],{"class":133},[123,97919,97821],{"class":129},[123,97921,33908],{"class":279},[123,97923,134],{"class":133},[123,97925,1315],{"class":129},[123,97927,2692],{"class":164},[123,97929,2985],{"class":129},[123,97931,2686],{"class":164},[123,97933,2985],{"class":129},[123,97935,2901],{"class":164},[123,97937,32913],{"class":129},[123,97939,97940],{"class":125,"line":156},[123,97941,97942],{"class":129},"aaa.shape\n",[2587,97944,97946],{"id":97945},"_222-randint语句","2.2.2 randint语句",[113,97948,97950],{"className":115,"code":97949,"language":117,"meta":118,"style":118},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[120,97951,97952,97957],{"__ignoreMap":118},[123,97953,97954],{"class":125,"line":126},[123,97955,97956],{"class":2673},"#生成随机的整数 random.randint(low,high,size)\n",[123,97958,97959,97961,97963,97965],{"class":125,"line":140},[123,97960,95508],{"class":129},[123,97962,2926],{"class":164},[123,97964,1336],{"class":129},[123,97966,97967],{"class":2673},"#0~5中的随机一个数\n",[19,97969,97806],{},[113,97971,97973],{"className":115,"code":97972,"language":117,"meta":118,"style":118},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[120,97974,97975,97980,98002],{"__ignoreMap":118},[123,97976,97977],{"class":125,"line":126},[123,97978,97979],{"class":2673},"#一维\n",[123,97981,97982,97984,97986,97988,97990,97992,97994,97996,97998,98000],{"class":125,"line":140},[123,97983,95508],{"class":129},[123,97985,2825],{"class":164},[123,97987,2985],{"class":129},[123,97989,3077],{"class":164},[123,97991,2985],{"class":129},[123,97993,33908],{"class":279},[123,97995,134],{"class":133},[123,97997,1315],{"class":129},[123,97999,2193],{"class":164},[123,98001,32913],{"class":129},[123,98003,98004],{"class":125,"line":156},[123,98005,98006],{"class":2673},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,98008,97861],{},[19,98010,98011],{},[3929,98012],{"alt":118,"src":98013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,98015,97900],{},[19,98017,98018],{},[3929,98019],{"alt":118,"src":98020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[2587,98022,98024],{"id":98023},"_222-rand语句","2.2.2 rand语句",[19,98026,98027],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[113,98029,98031],{"className":115,"code":98030,"language":117,"meta":118,"style":118},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[120,98032,98033,98046,98051],{"__ignoreMap":118},[123,98034,98035,98038,98040,98042,98044],{"class":125,"line":126},[123,98036,98037],{"class":129},"np.random.rand(",[123,98039,259],{"class":164},[123,98041,2985],{"class":129},[123,98043,2193],{"class":164},[123,98045,288],{"class":129},[123,98047,98048],{"class":125,"line":140},[123,98049,98050],{"class":2673},"#第一个参数100：行数，表示有100个样本\n",[123,98052,98053],{"class":125,"line":156},[123,98054,98055],{"class":2673},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98057,98059],{"id":98058},"_23-arange创建数组","2.3 arange()创建数组",[2587,98061,98063],{"id":98062},"_231-函数语句","2.3.1 函数语句",[113,98065,98067],{"className":115,"code":98066,"language":117,"meta":118,"style":118},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[120,98068,98069,98083,98088,98093,98098,98103,98108,98113],{"__ignoreMap":118},[123,98070,98071,98074,98076,98078,98081],{"class":125,"line":126},[123,98072,98073],{"class":129},"numpy.arange([start,] stop[, step], ",[123,98075,95894],{"class":279},[123,98077,134],{"class":133},[123,98079,98080],{"class":164},"None",[123,98082,288],{"class":129},[123,98084,98085],{"class":125,"line":140},[123,98086,98087],{"class":2673},"#参数\n",[123,98089,98090],{"class":125,"line":156},[123,98091,98092],{"class":143},"\"\"\"\n",[123,98094,98095],{"class":125,"line":168},[123,98096,98097],{"class":143},"start:起始值，可选，默认从 0 开始。\n",[123,98099,98100],{"class":125,"line":268},[123,98101,98102],{"class":143},"stop:结束值（不包含该值）。\n",[123,98104,98105],{"class":125,"line":291},[123,98106,98107],{"class":143},"step:步长，可选，默认是 1。可以为浮点数。\n",[123,98109,98110],{"class":125,"line":300},[123,98111,98112],{"class":143},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[123,98114,98115],{"class":125,"line":305},[123,98116,98092],{"class":143},[2587,98118,98120],{"id":98119},"_232-实例","2.3.2 实例",[113,98122,98124],{"className":115,"code":98123,"language":117,"meta":118,"style":118},"#创建一维数组\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",[120,98125,98126,98130,98154,98159,98164,98168,98191,98195,98199,98204,98209],{"__ignoreMap":118},[123,98127,98128],{"class":125,"line":126},[123,98129,95499],{"class":2673},[123,98131,98132,98134,98136,98138,98140,98142,98144,98146,98148,98150,98152],{"class":125,"line":140},[123,98133,95396],{"class":129},[123,98135,2825],{"class":164},[123,98137,2985],{"class":129},[123,98139,3327],{"class":164},[123,98141,2985],{"class":129},[123,98143,2825],{"class":164},[123,98145,2985],{"class":129},[123,98147,95894],{"class":279},[123,98149,134],{"class":133},[123,98151,1742],{"class":164},[123,98153,288],{"class":129},[123,98155,98156],{"class":125,"line":156},[123,98157,98158],{"class":2673},"#输出结果：\n",[123,98160,98161],{"class":125,"line":168},[123,98162,98163],{"class":2673},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[123,98165,98166],{"class":125,"line":268},[123,98167,96341],{"class":2673},[123,98169,98170,98173,98175,98177,98179,98182,98184,98186,98188],{"class":125,"line":291},[123,98171,98172],{"class":129},"np.array([np.arange(",[123,98174,2825],{"class":164},[123,98176,2985],{"class":129},[123,98178,2901],{"class":164},[123,98180,98181],{"class":129},"),np.arange(",[123,98183,2901],{"class":164},[123,98185,2985],{"class":129},[123,98187,2976],{"class":164},[123,98189,98190],{"class":129},")])\n",[123,98192,98193],{"class":125,"line":300},[123,98194,95958],{"class":2673},[123,98196,98197],{"class":125,"line":305},[123,98198,98092],{"class":143},[123,98200,98201],{"class":125,"line":316},[123,98202,98203],{"class":143},"array([[1, 2, 3],\n",[123,98205,98206],{"class":125,"line":673},[123,98207,98208],{"class":143},"       [4, 5, 6]])\n",[123,98210,98211],{"class":125,"line":692},[123,98212,98092],{"class":143},[14,98214,98216],{"id":98215},"_24-生态分布","2.4 生态分布",[2587,98218,98220],{"id":98219},"_241-标准正态分布","2.4.1 标准正态分布",[19,98222,98223],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98225,98226],{},[3929,98227],{"alt":118,"src":98228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[2587,98230,98232],{"id":98231},"_242-常规正态分布","2.4.2 常规正态分布",[113,98234,98236],{"className":115,"code":98235,"language":117,"meta":118,"style":118},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[120,98237,98238,98243,98248,98253],{"__ignoreMap":118},[123,98239,98240],{"class":125,"line":126},[123,98241,98242],{"class":129},"random.normal(loc,scale,size)也可以生成正态分布\n",[123,98244,98245],{"class":125,"line":140},[123,98246,98247],{"class":2673},"#loc:期望\n",[123,98249,98250],{"class":125,"line":156},[123,98251,98252],{"class":2673},"#scale:方差\n",[123,98254,98255],{"class":125,"line":168},[123,98256,98257],{"class":2673},"#size:用于确定是几维的数列\n",[19,98259,98260],{},[3929,98261],{"alt":118,"src":98262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98264,98266],{"id":98265},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98268,98269],{},"ndim:秩，维度个数",[19,98271,98272],{},"size:数组元素的个数",[19,98274,98275],{},"shape:数组的形状",[19,98277,98278],{},"dtype:数组元素的类型",[19,98280,98281],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98283,98284],{},"他们都是属性，通过数组.属性的形式来确定",[19,98286,98287],{},"如果需要输出多个可以通过以下方式：",[113,98289,98291],{"className":115,"code":98290,"language":117,"meta":118,"style":118},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[120,98292,98293],{"__ignoreMap":118},[123,98294,98295,98297],{"class":125,"line":126},[123,98296,294],{"class":164},[123,98298,98299],{"class":129},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98301,98303],{"id":98302},"_26-其他方式创建数组","2.6 其他方式创建数组",[2587,98305,98307],{"id":98306},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98309,98310],{},"①创建一维数组",[113,98312,98314],{"className":115,"code":98313,"language":117,"meta":118,"style":118},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[120,98315,98316,98325,98329,98334,98339],{"__ignoreMap":118},[123,98317,98318,98321,98323],{"class":125,"line":126},[123,98319,98320],{"class":129},"np.zeros(",[123,98322,2193],{"class":164},[123,98324,288],{"class":129},[123,98326,98327],{"class":125,"line":140},[123,98328,98092],{"class":143},[123,98330,98331],{"class":125,"line":156},[123,98332,98333],{"class":143},"输出结果：\n",[123,98335,98336],{"class":125,"line":168},[123,98337,98338],{"class":143},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[123,98340,98341],{"class":125,"line":268},[123,98342,98092],{"class":143},[19,98344,98345],{},"上方代码等价于：",[113,98347,98349],{"className":115,"code":98348,"language":117,"meta":118,"style":118},"np.zeros(shape=(10))#创建10个元素的0数组\n",[120,98350,98351],{"__ignoreMap":118},[123,98352,98353,98355,98358,98360,98362,98364,98366],{"class":125,"line":126},[123,98354,98320],{"class":129},[123,98356,98357],{"class":279},"shape",[123,98359,134],{"class":133},[123,98361,1315],{"class":129},[123,98363,2193],{"class":164},[123,98365,85168],{"class":129},[123,98367,98368],{"class":2673},"#创建10个元素的0数组\n",[19,98370,98371],{},"也可以指定类型",[113,98373,98375],{"className":115,"code":98374,"language":117,"meta":118,"style":118},"#指定类型\nnp.zeros(5,dtype=int)\n",[120,98376,98377,98382],{"__ignoreMap":118},[123,98378,98379],{"class":125,"line":126},[123,98380,98381],{"class":2673},"#指定类型\n",[123,98383,98384,98386,98388,98390,98392,98394,98396],{"class":125,"line":140},[123,98385,98320],{"class":129},[123,98387,2926],{"class":164},[123,98389,2985],{"class":129},[123,98391,95894],{"class":279},[123,98393,134],{"class":133},[123,98395,1742],{"class":164},[123,98397,288],{"class":129},[19,98399,98400],{},"②创建二维数组",[113,98402,98404],{"className":115,"code":98403,"language":117,"meta":118,"style":118},"np.zeros((3,4),dtype=int)\n",[120,98405,98406],{"__ignoreMap":118},[123,98407,98408,98411,98413,98415,98417,98419,98421,98423,98425],{"class":125,"line":126},[123,98409,98410],{"class":129},"np.zeros((",[123,98412,2686],{"class":164},[123,98414,2985],{"class":129},[123,98416,2901],{"class":164},[123,98418,44664],{"class":129},[123,98420,95894],{"class":279},[123,98422,134],{"class":133},[123,98424,1742],{"class":164},[123,98426,288],{"class":129},[19,98428,98429],{},"③创建三维数组",[113,98431,98433],{"className":115,"code":98432,"language":117,"meta":118,"style":118},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[120,98434,98435,98440],{"__ignoreMap":118},[123,98436,98437],{"class":125,"line":126},[123,98438,98439],{"class":2673},"#创建三维数组\n",[123,98441,98442,98444,98446,98448,98450,98452,98454,98456,98458,98460,98462],{"class":125,"line":140},[123,98443,98410],{"class":129},[123,98445,2686],{"class":164},[123,98447,2985],{"class":129},[123,98449,2901],{"class":164},[123,98451,2985],{"class":129},[123,98453,2926],{"class":164},[123,98455,44664],{"class":129},[123,98457,95894],{"class":279},[123,98459,134],{"class":133},[123,98461,1742],{"class":164},[123,98463,288],{"class":129},[19,98465,98466],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[113,98468,98470],{"className":115,"code":98469,"language":117,"meta":118,"style":118},"#使用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",[120,98471,98472,98477,98492,98497,98502,98524],{"__ignoreMap":118},[123,98473,98474],{"class":125,"line":126},[123,98475,98476],{"class":2673},"#使用zeros_like将创建的一维数组变成全0的数组\n",[123,98478,98479,98481,98483,98485,98487,98489],{"class":125,"line":140},[123,98480,2846],{"class":129},[123,98482,134],{"class":133},[123,98484,95396],{"class":129},[123,98486,2901],{"class":164},[123,98488,3035],{"class":129},[123,98490,98491],{"class":2673},"#这个得到的结果：一维数组0，1，2，3\n",[123,98493,98494],{"class":125,"line":156},[123,98495,98496],{"class":129},"np.zeros_like(a)\n",[123,98498,98499],{"class":125,"line":168},[123,98500,98501],{"class":2673},"#使用zeros_like将创建的二维数组变成全0的数组\n",[123,98503,98504,98506,98508,98510,98512,98514,98516,98518,98520,98522],{"class":125,"line":268},[123,98505,95700],{"class":129},[123,98507,134],{"class":133},[123,98509,97821],{"class":129},[123,98511,33908],{"class":279},[123,98513,134],{"class":133},[123,98515,1315],{"class":129},[123,98517,2901],{"class":164},[123,98519,2985],{"class":129},[123,98521,2926],{"class":164},[123,98523,32913],{"class":129},[123,98525,98526],{"class":125,"line":291},[123,98527,98528],{"class":129},"np.zeros_like(aa)\n",[2587,98530,98532],{"id":98531},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98534,98535],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[2587,98537,98539],{"id":98538},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98541,98542],{},"①empty()用法",[113,98544,98546],{"className":115,"code":98545,"language":117,"meta":118,"style":118},"numpy.empty(shape,dtype=float,order='c')\n",[120,98547,98548],{"__ignoreMap":118},[123,98549,98550,98553,98555,98557,98559,98561,98563,98565,98567],{"class":125,"line":126},[123,98551,98552],{"class":129},"numpy.empty(shape,",[123,98554,95894],{"class":279},[123,98556,134],{"class":133},[123,98558,2656],{"class":164},[123,98560,2985],{"class":129},[123,98562,97691],{"class":279},[123,98564,134],{"class":133},[123,98566,78428],{"class":143},[123,98568,288],{"class":129},[19,98570,98571],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98573,98574],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98576,98577],{},[3929,98578],{"alt":118,"src":98579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98581,98582],{},"②empty()用法",[113,98584,98586],{"className":115,"code":98585,"language":117,"meta":118,"style":118},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[120,98587,98588,98609,98621,98642,98647],{"__ignoreMap":118},[123,98589,98590,98592,98594,98597,98599,98601,98603,98605,98607],{"class":125,"line":126},[123,98591,3446],{"class":129},[123,98593,134],{"class":133},[123,98595,98596],{"class":129},"np.empty(",[123,98598,2193],{"class":164},[123,98600,2985],{"class":129},[123,98602,95894],{"class":279},[123,98604,134],{"class":133},[123,98606,1742],{"class":164},[123,98608,288],{"class":129},[123,98610,98611,98613,98615,98617,98619],{"class":125,"line":140},[123,98612,3421],{"class":129},[123,98614,134],{"class":133},[123,98616,95396],{"class":129},[123,98618,2926],{"class":164},[123,98620,288],{"class":129},[123,98622,98623,98626,98628,98631,98633,98635,98638,98640],{"class":125,"line":156},[123,98624,98625],{"class":129},"np.add(",[123,98627,2692],{"class":164},[123,98629,98630],{"class":129},",x,",[123,98632,95448],{"class":279},[123,98634,134],{"class":133},[123,98636,98637],{"class":129},"y[:",[123,98639,2926],{"class":164},[123,98641,444],{"class":129},[123,98643,98644],{"class":125,"line":168},[123,98645,98646],{"class":2673},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[123,98648,98649],{"class":125,"line":268},[123,98650,98651],{"class":129},"y\n",[19,98653,13946],{},[19,98655,98656],{},[3929,98657],{"alt":118,"src":98658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[113,98660,98662],{"className":115,"code":98661,"language":117,"meta":118,"style":118},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[120,98663,98664,98680,98700,98715],{"__ignoreMap":118},[123,98665,98666,98668,98670,98672,98674,98676,98678],{"class":125,"line":126},[123,98667,3421],{"class":129},[123,98669,134],{"class":133},[123,98671,95396],{"class":129},[123,98673,2825],{"class":164},[123,98675,2985],{"class":129},[123,98677,2951],{"class":164},[123,98679,288],{"class":129},[123,98681,98682,98684,98686,98688,98690,98692,98694,98696,98698],{"class":125,"line":140},[123,98683,3446],{"class":129},[123,98685,134],{"class":133},[123,98687,98596],{"class":129},[123,98689,2926],{"class":164},[123,98691,2985],{"class":129},[123,98693,95894],{"class":279},[123,98695,134],{"class":133},[123,98697,1742],{"class":164},[123,98699,288],{"class":129},[123,98701,98702,98705,98707,98709,98711,98713],{"class":125,"line":156},[123,98703,98704],{"class":129},"np.add(x,",[123,98706,2692],{"class":164},[123,98708,2985],{"class":129},[123,98710,95448],{"class":279},[123,98712,134],{"class":133},[123,98714,95843],{"class":129},[123,98716,98717],{"class":125,"line":168},[123,98718,98719],{"class":2673},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98721,98722],{},"③empty_like()",[19,98724,98725],{},[2759,98726,98727,98728,98733],{},"创建一个",[2759,98729,98730],{},[2759,98731,98732],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98735,98736,98739],{},[120,98737,98738],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98741,98742],{},[3929,98743],{"alt":118,"src":98744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[2587,98746,98748],{"id":98747},"_264-用法","2.6.4 ？？用法",[19,98750,98751],{},"当想查看一个函数的参数时，可以通过？？来实现",[113,98753,98755],{"className":115,"code":98754,"language":117,"meta":118,"style":118},"np.full??\n",[120,98756,98757],{"__ignoreMap":118},[123,98758,98759,98762],{"class":125,"line":126},[123,98760,98761],{"class":129},"np.full",[123,98763,98764],{"class":79803},"??\n",[2587,98766,98768],{"id":98767},"_265-full创建数组","2.6.5 full()创建数组",[113,98770,98772],{"className":115,"code":98771,"language":117,"meta":118,"style":118},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[120,98773,98774,98779],{"__ignoreMap":118},[123,98775,98776],{"class":125,"line":126},[123,98777,98778],{"class":129},"full(shape,fill_value)\n",[123,98780,98781],{"class":125,"line":140},[123,98782,98783],{"class":129},"创建全为某个指定值的数组\n",[19,98785,96924],{},[113,98787,98789],{"className":115,"code":98788,"language":117,"meta":118,"style":118},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[120,98790,98791,98796],{"__ignoreMap":118},[123,98792,98793],{"class":125,"line":126},[123,98794,98795],{"class":2673},"#创建一个一维数组,以20进行填充\n",[123,98797,98798,98801,98803,98805,98807],{"class":125,"line":140},[123,98799,98800],{"class":129},"np.full(",[123,98802,2193],{"class":164},[123,98804,2985],{"class":129},[123,98806,3302],{"class":164},[123,98808,288],{"class":129},[19,98810,95685],{},[113,98812,98814],{"className":115,"code":98813,"language":117,"meta":118,"style":118},"#创建二维数组\nnp.full((3,5),11)\n",[120,98815,98816,98820],{"__ignoreMap":118},[123,98817,98818],{"class":125,"line":126},[123,98819,96341],{"class":2673},[123,98821,98822,98825,98827,98829,98831,98833,98835],{"class":125,"line":140},[123,98823,98824],{"class":129},"np.full((",[123,98826,2686],{"class":164},[123,98828,2985],{"class":129},[123,98830,2926],{"class":164},[123,98832,44664],{"class":129},[123,98834,3077],{"class":164},[123,98836,288],{"class":129},[19,98838,98839],{},"③full_like用法",[19,98841,98842],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98844,98845],{},"这里是指定填充而已",[113,98847,98849],{"className":115,"code":98848,"language":117,"meta":118,"style":118},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[120,98850,98851,98856,98880,98885],{"__ignoreMap":118},[123,98852,98853],{"class":125,"line":126},[123,98854,98855],{"class":2673},"#创建一个指定形状数组\n",[123,98857,98858,98860,98862,98864,98866,98868,98870,98872,98874,98876,98878],{"class":125,"line":140},[123,98859,2846],{"class":129},[123,98861,134],{"class":133},[123,98863,95396],{"class":129},[123,98865,2825],{"class":164},[123,98867,2985],{"class":129},[123,98869,2932],{"class":164},[123,98871,95401],{"class":129},[123,98873,2901],{"class":164},[123,98875,2985],{"class":129},[123,98877,3026],{"class":164},[123,98879,288],{"class":129},[123,98881,98882],{"class":125,"line":156},[123,98883,98884],{"class":2673},"#进行指定填充\n",[123,98886,98887,98890,98892],{"class":125,"line":168},[123,98888,98889],{"class":129},"np.full_like(a,",[123,98891,2193],{"class":164},[123,98893,288],{"class":129},[19,98895,13946],{},[19,98897,98898],{},[3929,98899],{"alt":118,"src":98900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[2587,98902,98904],{"id":98903},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24425,98906,98908],{"id":98907},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[113,98910,98912],{"className":115,"code":98911,"language":117,"meta":118,"style":118},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[120,98913,98914,98931],{"__ignoreMap":118},[123,98915,98916,98919,98921,98923,98925,98927,98929],{"class":125,"line":126},[123,98917,98918],{"class":129},"np.eye(",[123,98920,2901],{"class":164},[123,98922,2985],{"class":129},[123,98924,95894],{"class":279},[123,98926,134],{"class":133},[123,98928,1742],{"class":164},[123,98930,288],{"class":129},[123,98932,98933],{"class":125,"line":140},[123,98934,98935],{"class":2673},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24425,98937,98939],{"id":98938},"_2662-法2identity","2.6.6.2 法2：identity()",[113,98941,98943],{"className":115,"code":98942,"language":117,"meta":118,"style":118},"#identity()\nnp.identity(5,dtype=int)\n",[120,98944,98945,98950],{"__ignoreMap":118},[123,98946,98947],{"class":125,"line":126},[123,98948,98949],{"class":2673},"#identity()\n",[123,98951,98952,98955,98957,98959,98961,98963,98965],{"class":125,"line":140},[123,98953,98954],{"class":129},"np.identity(",[123,98956,2926],{"class":164},[123,98958,2985],{"class":129},[123,98960,95894],{"class":279},[123,98962,134],{"class":133},[123,98964,1742],{"class":164},[123,98966,288],{"class":129},[19,98968,98969],{},"两个函数是有区别的",[19,98971,98972],{},[3929,98973],{"alt":118,"src":98974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98976,98977],{},[3929,98978],{"alt":118,"src":98979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[113,98981,98983],{"className":115,"code":98982,"language":117,"meta":118,"style":118},"# 创建一个 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",[120,98984,98985,98990,99002,99007,99012,99017,99022,99026,99031,99051,99055,99060,99065],{"__ignoreMap":118},[123,98986,98987],{"class":125,"line":126},[123,98988,98989],{"class":2673},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[123,98991,98992,98994,98996,98998,99000],{"class":125,"line":140},[123,98993,98918],{"class":129},[123,98995,2686],{"class":164},[123,98997,251],{"class":129},[123,98999,2901],{"class":164},[123,99001,288],{"class":129},[123,99003,99004],{"class":125,"line":156},[123,99005,99006],{"class":2673},"# 输出:\n",[123,99008,99009],{"class":125,"line":168},[123,99010,99011],{"class":2673},"# [[1. 0. 0. 0.]\n",[123,99013,99014],{"class":125,"line":268},[123,99015,99016],{"class":2673},"#  [0. 1. 0. 0.]\n",[123,99018,99019],{"class":125,"line":291},[123,99020,99021],{"class":2673},"#  [0. 0. 1. 0.]]\n",[123,99023,99024],{"class":125,"line":300},[123,99025,232],{"emptyLinePlaceholder":231},[123,99027,99028],{"class":125,"line":305},[123,99029,99030],{"class":2673},"# 对角线向上偏移1\n",[123,99032,99033,99035,99037,99039,99041,99043,99045,99047,99049],{"class":125,"line":316},[123,99034,98918],{"class":129},[123,99036,2686],{"class":164},[123,99038,251],{"class":129},[123,99040,2901],{"class":164},[123,99042,251],{"class":129},[123,99044,3098],{"class":279},[123,99046,134],{"class":133},[123,99048,2825],{"class":164},[123,99050,288],{"class":129},[123,99052,99053],{"class":125,"line":673},[123,99054,99006],{"class":2673},[123,99056,99057],{"class":125,"line":692},[123,99058,99059],{"class":2673},"# [[0. 1. 0. 0.]\n",[123,99061,99062],{"class":125,"line":713},[123,99063,99064],{"class":2673},"#  [0. 0. 1. 0.]\n",[123,99066,99067],{"class":125,"line":718},[123,99068,99069],{"class":2673},"#  [0. 0. 0. 1.]]\n",[2587,99071,99073],{"id":99072},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[113,99075,99077],{"className":115,"code":99076,"language":117,"meta":118,"style":118},"#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",[120,99078,99079,99084,99088,99093,99098,99103,99108,99113,99118,99123,99128],{"__ignoreMap":118},[123,99080,99081],{"class":125,"line":126},[123,99082,99083],{"class":2673},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[123,99085,99086],{"class":125,"line":140},[123,99087,98092],{"class":143},[123,99089,99090],{"class":125,"line":156},[123,99091,99092],{"class":143},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[123,99094,99095],{"class":125,"line":168},[123,99096,99097],{"class":143},"参数介绍：\n",[123,99099,99100],{"class":125,"line":268},[123,99101,99102],{"class":143},"start：序列的起始值\n",[123,99104,99105],{"class":125,"line":291},[123,99106,99107],{"class":143},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[123,99109,99110],{"class":125,"line":300},[123,99111,99112],{"class":143},"num：要生长的等步长的样本数量，默认为50\n",[123,99114,99115],{"class":125,"line":305},[123,99116,99117],{"class":143},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[123,99119,99120],{"class":125,"line":316},[123,99121,99122],{"class":143},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[123,99124,99125],{"class":125,"line":673},[123,99126,99127],{"class":143},"dtype：ndarry的数据类型\n",[123,99129,99130],{"class":125,"line":692},[123,99131,98092],{"class":143},[19,99133,99134],{},[3929,99135],{"alt":118,"src":99136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,99138,99139],{},"这里num=是可以省略的",[19,99141,99142],{},"也就是下方两行代码结果是一模一样的",[113,99144,99146],{"className":115,"code":99145,"language":117,"meta":118,"style":118},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[120,99147,99148,99165],{"__ignoreMap":118},[123,99149,99150,99153,99155,99157,99159,99161,99163],{"class":125,"line":126},[123,99151,99152],{"class":129},"np.linspace(",[123,99154,2825],{"class":164},[123,99156,2985],{"class":129},[123,99158,2926],{"class":164},[123,99160,2985],{"class":129},[123,99162,2926],{"class":164},[123,99164,288],{"class":129},[123,99166,99167,99169,99171,99173,99175,99177,99179,99181,99183],{"class":125,"line":140},[123,99168,99152],{"class":129},[123,99170,2825],{"class":164},[123,99172,2985],{"class":129},[123,99174,2926],{"class":164},[123,99176,2985],{"class":129},[123,99178,4123],{"class":279},[123,99180,134],{"class":133},[123,99182,2926],{"class":164},[123,99184,288],{"class":129},[2587,99186,99188],{"id":99187},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[113,99190,99192],{"className":115,"code":99191,"language":117,"meta":118,"style":118},"#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",[120,99193,99194,99199,99203,99208,99213,99218,99223,99227,99232,99237,99241],{"__ignoreMap":118},[123,99195,99196],{"class":125,"line":126},[123,99197,99198],{"class":2673},"#logspace函数用于创建一个等比数列，格式如下：\n",[123,99200,99201],{"class":125,"line":140},[123,99202,98092],{"class":143},[123,99204,99205],{"class":125,"line":156},[123,99206,99207],{"class":143},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[123,99209,99210],{"class":125,"line":168},[123,99211,99212],{"class":143},"参数为：\n",[123,99214,99215],{"class":125,"line":268},[123,99216,99217],{"class":143},"start:序列的起始位置为：base**start\n",[123,99219,99220],{"class":125,"line":291},[123,99221,99222],{"class":143},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[123,99224,99225],{"class":125,"line":300},[123,99226,99112],{"class":143},[123,99228,99229],{"class":125,"line":305},[123,99230,99231],{"class":143},"endpoint：是否包含 stop 这个值，默认是 True\n",[123,99233,99234],{"class":125,"line":316},[123,99235,99236],{"class":143},"base：对数的底数，默认是 10（常见对数）\n",[123,99238,99239],{"class":125,"line":673},[123,99240,99127],{"class":143},[123,99242,99243],{"class":125,"line":692},[123,99244,98092],{"class":143},[19,99246,99247],{},[3929,99248],{"alt":118,"src":99249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99251,99252],{},"logspace()函数中的num参数也是可以不写num=的",[19,99254,99255],{},"endpoint是不可以省略的",[2526,99257,99258],{},"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":118,"searchDepth":140,"depth":140,"links":99260},[99261,99265,99270,99274,99278,99279],{"id":97650,"depth":140,"text":97651,"children":99262},[99263,99264],{"id":97654,"depth":156,"text":97655},{"id":97727,"depth":156,"text":97728},{"id":97759,"depth":140,"text":97760,"children":99266},[99267,99268,99269],{"id":97763,"depth":156,"text":97764},{"id":97945,"depth":156,"text":97946},{"id":98023,"depth":156,"text":98024},{"id":98058,"depth":140,"text":98059,"children":99271},[99272,99273],{"id":98062,"depth":156,"text":98063},{"id":98119,"depth":156,"text":98120},{"id":98215,"depth":140,"text":98216,"children":99275},[99276,99277],{"id":98219,"depth":156,"text":98220},{"id":98231,"depth":156,"text":98232},{"id":98265,"depth":140,"text":98266},{"id":98302,"depth":140,"text":98303,"children":99280},[99281,99282,99283,99284,99285,99286,99287,99288],{"id":98306,"depth":156,"text":98307},{"id":98531,"depth":156,"text":98532},{"id":98538,"depth":156,"text":98539},{"id":98747,"depth":156,"text":98748},{"id":98767,"depth":156,"text":98768},{"id":98903,"depth":156,"text":98904},{"id":99072,"depth":156,"text":99073},{"id":99187,"depth":156,"text":99188},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97642,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99295,"title":99296,"body":99297,"description":2544,"extension":2545,"meta":99390,"navigation":231,"path":99391,"seo":99392,"stem":99393,"__hash__":99394},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99298,"toc":99388},[99299,99302,99305,99308,99311,99314,99317,99320,99323,99326,99329,99332,99334,99337,99340,99345,99348,99351,99385],[10,99300,99296],{"id":99301},"_20魔法命令mprun",[19,99303,99304],{},"逐行分析数据内存的使用情况",[19,99306,99307],{},"语法格式：",[19,99309,99310],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99312,99313],{},"分析结果列如下：",[19,99315,99316],{},"Line行号",[19,99318,99319],{},"Mem usage内存使用大小",[19,99321,99322],{},"increment内存增量",[19,99324,99325],{},"Line content代码内容",[19,99327,99328],{},"补充说明：",[19,99330,99331],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99333,97597],{},[19,99335,99336],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99338,99339],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99341,99342],{},[3929,99343],{"alt":118,"src":99344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99346,99347],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99349,99350],{},"这时候需要重新加载模块",[113,99352,99354],{"className":115,"code":99353,"language":117,"meta":118,"style":118},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[120,99355,99356,99361,99368,99373],{"__ignoreMap":118},[123,99357,99358],{"class":125,"line":126},[123,99359,99360],{"class":2673},"#重新加载模块\n",[123,99362,99363,99365],{"class":125,"line":140},[123,99364,223],{"class":133},[123,99366,99367],{"class":129}," importlib\n",[123,99369,99370],{"class":125,"line":156},[123,99371,99372],{"class":129},"importlib.reload(mprun_test)\n",[123,99374,99375,99377,99380,99382],{"class":125,"line":168},[123,99376,2935],{"class":133},[123,99378,99379],{"class":129},"mprun ",[123,99381,3135],{"class":133},[123,99383,99384],{"class":129},"f mprun_test.fun_test mprun_test.fun_test()\n",[2526,99386,99387],{},"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":118,"searchDepth":140,"depth":140,"links":99389},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99296,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99396,"title":99397,"body":99398,"description":2544,"extension":2545,"meta":99415,"navigation":231,"path":99416,"seo":99417,"stem":99418,"__hash__":99419},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99399,"toc":99413},[99400,99403,99408],[10,99401,99397],{"id":99402},"_3一维数组的索引和切片",[19,99404,99405],{},[3929,99406],{"alt":118,"src":99407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99409,99410],{},[3929,99411],{"alt":118,"src":99412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":118,"searchDepth":140,"depth":140,"links":99414},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99397,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99421,"title":99422,"body":99423,"description":2544,"extension":2545,"meta":99905,"navigation":231,"path":99906,"seo":99907,"stem":99908,"__hash__":99909},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99424,"toc":99903},[99425,99428,99431,99436,99469,99472,99510,99513,99547,99550,99655,99658,99695,99698,99799,99802,99852,99855,99897,99900],[10,99426,99422],{"id":99427},"_4二维数组的索引与切片",[19,99429,99430],{},"①获取指定单个元素",[19,99432,99433],{},[3929,99434],{"alt":118,"src":99435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[113,99437,99439],{"className":115,"code":99438,"language":117,"meta":118,"style":118},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[120,99440,99441,99446,99451,99456],{"__ignoreMap":118},[123,99442,99443],{"class":125,"line":126},[123,99444,99445],{"class":2673},"#获取元素9\n",[123,99447,99448],{"class":125,"line":140},[123,99449,99450],{"class":2673},"#先获取所在行，再获取所在列\n",[123,99452,99453],{"class":125,"line":156},[123,99454,99455],{"class":2673},"#数组[行索引号，列索引号]\n",[123,99457,99458,99461,99463,99465,99467],{"class":125,"line":168},[123,99459,99460],{"class":129},"a[",[123,99462,2825],{"class":164},[123,99464,2985],{"class":129},[123,99466,2692],{"class":164},[123,99468,998],{"class":129},[19,99470,99471],{},"②获取整行元素",[113,99473,99475],{"className":115,"code":99474,"language":117,"meta":118,"style":118},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[120,99476,99477,99482,99487,99495,99500],{"__ignoreMap":118},[123,99478,99479],{"class":125,"line":126},[123,99480,99481],{"class":2673},"#获取整行 数组[行索引号]\n",[123,99483,99484],{"class":125,"line":140},[123,99485,99486],{"class":2673},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[123,99488,99489,99491,99493],{"class":125,"line":156},[123,99490,99460],{"class":129},[123,99492,2692],{"class":164},[123,99494,998],{"class":129},[123,99496,99497],{"class":125,"line":168},[123,99498,99499],{"class":2673},"#也可以负索引获取一行\n",[123,99501,99502,99504,99506,99508],{"class":125,"line":268},[123,99503,99460],{"class":129},[123,99505,3135],{"class":133},[123,99507,2825],{"class":164},[123,99509,998],{"class":129},[19,99511,99512],{},"③获取整列元素",[113,99514,99516],{"className":115,"code":99515,"language":117,"meta":118,"style":118},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[120,99517,99518,99523,99532,99537],{"__ignoreMap":118},[123,99519,99520],{"class":125,"line":126},[123,99521,99522],{"class":2673},"#获取整列 数组名[:,列索引]\n",[123,99524,99525,99528,99530],{"class":125,"line":140},[123,99526,99527],{"class":129},"a[:,",[123,99529,2692],{"class":164},[123,99531,998],{"class":129},[123,99533,99534],{"class":125,"line":156},[123,99535,99536],{"class":2673},"#也可以负索引获取一列\n",[123,99538,99539,99541,99543,99545],{"class":125,"line":168},[123,99540,99527],{"class":129},[123,99542,3135],{"class":133},[123,99544,2825],{"class":164},[123,99546,998],{"class":129},[19,99548,99549],{},"④部分行部分列的元素",[113,99551,99553],{"className":115,"code":99552,"language":117,"meta":118,"style":118},"#部分行部分列 数组名[行切片，列切片]\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",[120,99554,99555,99560,99570,99574,99578,99583,99588,99592,99604,99608,99612,99617,99622,99627,99632,99636,99641],{"__ignoreMap":118},[123,99556,99557],{"class":125,"line":126},[123,99558,99559],{"class":2673},"#部分行部分列 数组名[行切片，列切片]\n",[123,99561,99562,99565,99567],{"class":125,"line":140},[123,99563,99564],{"class":129},"a[:",[123,99566,2692],{"class":164},[123,99568,99569],{"class":129},",:]\n",[123,99571,99572],{"class":125,"line":156},[123,99573,95958],{"class":2673},[123,99575,99576],{"class":125,"line":168},[123,99577,96322],{"class":143},[123,99579,99580],{"class":125,"line":268},[123,99581,99582],{"class":143},"array([[ 1,  2,  3,  4,  5,  6],\n",[123,99584,99585],{"class":125,"line":291},[123,99586,99587],{"class":143},"       [ 7,  8,  9, 10, 11, 12]])\n",[123,99589,99590],{"class":125,"line":300},[123,99591,96322],{"class":143},[123,99593,99594,99596,99598,99600,99602],{"class":125,"line":305},[123,99595,99527],{"class":129},[123,99597,2825],{"class":164},[123,99599,3460],{"class":129},[123,99601,2901],{"class":164},[123,99603,998],{"class":129},[123,99605,99606],{"class":125,"line":316},[123,99607,95958],{"class":2673},[123,99609,99610],{"class":125,"line":673},[123,99611,96322],{"class":143},[123,99613,99614],{"class":125,"line":692},[123,99615,99616],{"class":143},"array([[ 2,  3,  4],\n",[123,99618,99619],{"class":125,"line":713},[123,99620,99621],{"class":143},"       [ 8,  9, 10],\n",[123,99623,99624],{"class":125,"line":718},[123,99625,99626],{"class":143},"       [14, 15, 16],\n",[123,99628,99629],{"class":125,"line":1138},[123,99630,99631],{"class":143},"       [20, 21, 22]])\n",[123,99633,99634],{"class":125,"line":1429},[123,99635,96322],{"class":143},[123,99637,99638],{"class":125,"line":1439},[123,99639,99640],{"class":2673},"#对列行同时进行切片，使用了step参数\n",[123,99642,99643,99646,99648,99651,99653],{"class":125,"line":1444},[123,99644,99645],{"class":129},"a[::",[123,99647,2692],{"class":164},[123,99649,99650],{"class":129},",::",[123,99652,2692],{"class":164},[123,99654,998],{"class":129},[19,99656,99657],{},"⑤同时获取两个元素",[113,99659,99661],{"className":115,"code":99660,"language":117,"meta":118,"style":118},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[120,99662,99663,99668,99673],{"__ignoreMap":118},[123,99664,99665],{"class":125,"line":126},[123,99666,99667],{"class":2673},"#同时获取第三行第二列，第四行第一列\n",[123,99669,99670],{"class":125,"line":140},[123,99671,99672],{"class":2673},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[123,99674,99675,99678,99680,99682,99684,99686,99688,99690,99692],{"class":125,"line":156},[123,99676,99677],{"class":129},"a[(",[123,99679,2692],{"class":164},[123,99681,2985],{"class":129},[123,99683,2686],{"class":164},[123,99685,44655],{"class":129},[123,99687,2825],{"class":164},[123,99689,2985],{"class":129},[123,99691,2799],{"class":164},[123,99693,99694],{"class":129},")]\n",[19,99696,99697],{},"⑥切片，对行进行反向获取",[113,99699,99701],{"className":115,"code":99700,"language":117,"meta":118,"style":118},"#切片 对所有行进行反向获取\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",[120,99702,99703,99708,99718,99722,99726,99731,99736,99741,99746,99750,99755,99771,99775,99780,99785,99790,99795],{"__ignoreMap":118},[123,99704,99705],{"class":125,"line":126},[123,99706,99707],{"class":2673},"#切片 对所有行进行反向获取\n",[123,99709,99710,99712,99714,99716],{"class":125,"line":140},[123,99711,99645],{"class":129},[123,99713,3135],{"class":133},[123,99715,2825],{"class":164},[123,99717,998],{"class":129},[123,99719,99720],{"class":125,"line":156},[123,99721,95958],{"class":2673},[123,99723,99724],{"class":125,"line":168},[123,99725,96322],{"class":143},[123,99727,99728],{"class":125,"line":268},[123,99729,99730],{"class":143},"array([[19, 20, 21, 22, 23, 24],\n",[123,99732,99733],{"class":125,"line":291},[123,99734,99735],{"class":143},"       [13, 14, 15, 16, 17, 18],\n",[123,99737,99738],{"class":125,"line":300},[123,99739,99740],{"class":143},"       [ 7,  8,  9, 10, 11, 12],\n",[123,99742,99743],{"class":125,"line":305},[123,99744,99745],{"class":143},"       [ 1,  2,  3,  4,  5,  6]])\n",[123,99747,99748],{"class":125,"line":316},[123,99749,96322],{"class":143},[123,99751,99752],{"class":125,"line":673},[123,99753,99754],{"class":2673},"#对行列都进行反向切片获取\n",[123,99756,99757,99759,99761,99763,99765,99767,99769],{"class":125,"line":692},[123,99758,99645],{"class":129},[123,99760,3135],{"class":133},[123,99762,2825],{"class":164},[123,99764,99650],{"class":129},[123,99766,3135],{"class":133},[123,99768,2825],{"class":164},[123,99770,998],{"class":129},[123,99772,99773],{"class":125,"line":713},[123,99774,96322],{"class":143},[123,99776,99777],{"class":125,"line":718},[123,99778,99779],{"class":143},"array([[24, 23, 22, 21, 20, 19],\n",[123,99781,99782],{"class":125,"line":1138},[123,99783,99784],{"class":143},"       [18, 17, 16, 15, 14, 13],\n",[123,99786,99787],{"class":125,"line":1429},[123,99788,99789],{"class":143},"       [12, 11, 10,  9,  8,  7],\n",[123,99791,99792],{"class":125,"line":1439},[123,99793,99794],{"class":143},"       [ 6,  5,  4,  3,  2,  1]])\n",[123,99796,99797],{"class":125,"line":1444},[123,99798,96322],{"class":143},[19,99800,99801],{},"⑦修改元素",[113,99803,99805],{"className":115,"code":99804,"language":117,"meta":118,"style":118},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[120,99806,99807,99812,99830,99835],{"__ignoreMap":118},[123,99808,99809],{"class":125,"line":126},[123,99810,99811],{"class":2673},"#获取前两行和前两列\n",[123,99813,99814,99817,99819,99821,99823,99826,99828],{"class":125,"line":140},[123,99815,99816],{"class":129},"sub_a",[123,99818,134],{"class":133},[123,99820,99564],{"class":129},[123,99822,2692],{"class":164},[123,99824,99825],{"class":129},",:",[123,99827,2692],{"class":164},[123,99829,998],{"class":129},[123,99831,99832],{"class":125,"line":156},[123,99833,99834],{"class":2673},"#修改sub_a第一个元素的值\n",[123,99836,99837,99840,99842,99844,99846,99848,99850],{"class":125,"line":168},[123,99838,99839],{"class":129},"sub_a[",[123,99841,2799],{"class":164},[123,99843,2985],{"class":129},[123,99845,2799],{"class":164},[123,99847,3539],{"class":129},[123,99849,134],{"class":133},[123,99851,165],{"class":164},[19,99853,99854],{},"⑧数组复制copy()",[113,99856,99858],{"className":115,"code":99857,"language":117,"meta":118,"style":118},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[120,99859,99860,99865,99875,99880],{"__ignoreMap":118},[123,99861,99862],{"class":125,"line":126},[123,99863,99864],{"class":2673},"#数组复制\n",[123,99866,99867,99870,99872],{"class":125,"line":140},[123,99868,99869],{"class":129},"copy_a",[123,99871,134],{"class":133},[123,99873,99874],{"class":129},"np.copy(sub_a)\n",[123,99876,99877],{"class":125,"line":156},[123,99878,99879],{"class":2673},"#修改copy_a后不影响原数组\n",[123,99881,99882,99885,99887,99889,99891,99893,99895],{"class":125,"line":168},[123,99883,99884],{"class":129},"copy_a[",[123,99886,2799],{"class":164},[123,99888,2985],{"class":129},[123,99890,2799],{"class":164},[123,99892,3539],{"class":129},[123,99894,134],{"class":133},[123,99896,165],{"class":164},[19,99898,99899],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2526,99901,99902],{},"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":118,"searchDepth":140,"depth":140,"links":99904},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99422,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99911,"title":99912,"body":99913,"description":2544,"extension":2545,"meta":100405,"navigation":231,"path":100406,"seo":100407,"stem":100408,"__hash__":100409},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99914,"toc":100397},[99915,99918,99922,99925,99928,99981,99984,100009,100012,100031,100051,100054,100070,100074,100120,100124,100166,100170,100173,100176,100179,100182,100185,100247,100307,100311,100314,100371,100375,100380,100389,100394],[10,99916,99912],{"id":99917},"_5改变数组的维度",[14,99919,99921],{"id":99920},"_51-使用reshape","5.1 使用reshape()",[19,99923,99924],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99926,99927],{},"①一维数组转换为二维数组",[113,99929,99931],{"className":115,"code":99930,"language":117,"meta":118,"style":118},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[120,99932,99933,99949,99954,99959,99964],{"__ignoreMap":118},[123,99934,99935,99937,99939,99941,99943,99945,99947],{"class":125,"line":126},[123,99936,2846],{"class":129},[123,99938,134],{"class":133},[123,99940,95396],{"class":129},[123,99942,2825],{"class":164},[123,99944,2985],{"class":129},[123,99946,2269],{"class":164},[123,99948,288],{"class":129},[123,99950,99951],{"class":125,"line":140},[123,99952,99953],{"class":2673},"#将一维数组进行转换\n",[123,99955,99956],{"class":125,"line":156},[123,99957,99958],{"class":2673},"#注意点：元素个数不可以变\n",[123,99960,99961],{"class":125,"line":168},[123,99962,99963],{"class":2673},"#转换维度要保持一致，不一致就异常！！！\n",[123,99965,99966,99968,99970,99973,99975,99977,99979],{"class":125,"line":268},[123,99967,95700],{"class":129},[123,99969,134],{"class":133},[123,99971,99972],{"class":129},"a.reshape(",[123,99974,2692],{"class":164},[123,99976,2985],{"class":129},[123,99978,2951],{"class":164},[123,99980,288],{"class":129},[19,99982,99983],{},"②一维数组转换为三维数组",[113,99985,99987],{"className":115,"code":99986,"language":117,"meta":118,"style":118},"aaa=a.reshape(2,3,2)\n",[120,99988,99989],{"__ignoreMap":118},[123,99990,99991,99993,99995,99997,99999,100001,100003,100005,100007],{"class":125,"line":126},[123,99992,97915],{"class":129},[123,99994,134],{"class":133},[123,99996,99972],{"class":129},[123,99998,2692],{"class":164},[123,100000,2985],{"class":129},[123,100002,2686],{"class":164},[123,100004,2985],{"class":129},[123,100006,2692],{"class":164},[123,100008,288],{"class":129},[19,100010,100011],{},"③二维数组转化为一维数组",[113,100013,100015],{"className":115,"code":100014,"language":117,"meta":118,"style":118},"#知道元素个数：\naa.reshape(12)\n",[120,100016,100017,100022],{"__ignoreMap":118},[123,100018,100019],{"class":125,"line":126},[123,100020,100021],{"class":2673},"#知道元素个数：\n",[123,100023,100024,100027,100029],{"class":125,"line":140},[123,100025,100026],{"class":129},"aa.reshape(",[123,100028,2215],{"class":164},[123,100030,288],{"class":129},[113,100032,100034],{"className":115,"code":100033,"language":117,"meta":118,"style":118},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[120,100035,100036,100041],{"__ignoreMap":118},[123,100037,100038],{"class":125,"line":126},[123,100039,100040],{"class":2673},"#不知道元素个数，参数传递-1\n",[123,100042,100043,100045,100047,100049],{"class":125,"line":140},[123,100044,100026],{"class":129},[123,100046,3135],{"class":133},[123,100048,2825],{"class":164},[123,100050,288],{"class":129},[19,100052,100053],{},"④三维数组转换为一维数组",[113,100055,100057],{"className":115,"code":100056,"language":117,"meta":118,"style":118},"aaa.reshape(-1)\n",[120,100058,100059],{"__ignoreMap":118},[123,100060,100061,100064,100066,100068],{"class":125,"line":126},[123,100062,100063],{"class":129},"aaa.reshape(",[123,100065,3135],{"class":133},[123,100067,2825],{"class":164},[123,100069,288],{"class":129},[14,100071,100073],{"id":100072},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[113,100075,100077],{"className":115,"code":100076,"language":117,"meta":118,"style":118},"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",[120,100078,100079,100106,100111,100115],{"__ignoreMap":118},[123,100080,100081,100083,100085,100087,100089,100091,100093,100095,100097,100099,100101,100103],{"class":125,"line":126},[123,100082,95700],{"class":129},[123,100084,134],{"class":133},[123,100086,95396],{"class":129},[123,100088,2825],{"class":164},[123,100090,2985],{"class":129},[123,100092,2269],{"class":164},[123,100094,95401],{"class":129},[123,100096,2692],{"class":164},[123,100098,2985],{"class":129},[123,100100,2951],{"class":164},[123,100102,3035],{"class":129},[123,100104,100105],{"class":2673},"#转换为2行6列的数组\n",[123,100107,100108],{"class":125,"line":140},[123,100109,100110],{"class":129},"aa.revel()\n",[123,100112,100113],{"class":125,"line":156},[123,100114,95958],{"class":2673},[123,100116,100117],{"class":125,"line":168},[123,100118,100119],{"class":2673},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100121,100123],{"id":100122},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[113,100125,100127],{"className":115,"code":100126,"language":117,"meta":118,"style":118},"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",[120,100128,100129,100153,100158,100162],{"__ignoreMap":118},[123,100130,100131,100133,100135,100137,100139,100141,100143,100145,100147,100149,100151],{"class":125,"line":126},[123,100132,95700],{"class":129},[123,100134,134],{"class":133},[123,100136,95396],{"class":129},[123,100138,2825],{"class":164},[123,100140,2985],{"class":129},[123,100142,2269],{"class":164},[123,100144,95401],{"class":129},[123,100146,2692],{"class":164},[123,100148,2985],{"class":129},[123,100150,2951],{"class":164},[123,100152,288],{"class":129},[123,100154,100155],{"class":125,"line":140},[123,100156,100157],{"class":129},"aa.flatten()\n",[123,100159,100160],{"class":125,"line":156},[123,100161,95958],{"class":2673},[123,100163,100164],{"class":125,"line":168},[123,100165,100119],{"class":2673},[14,100167,100169],{"id":100168},"_54-使用resize","5.4 使用resize()",[19,100171,100172],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,100174,100175],{},"通过resize方法可以改变数组的维度",[19,100177,100178],{},"#resize修改数组维度",[19,100180,100181],{},"#以元组的形式指定形状",[19,100183,100184],{},"#改变的是原数组",[113,100186,100188],{"className":115,"code":100187,"language":117,"meta":118,"style":118},"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",[120,100189,100190,100206,100226,100239,100243],{"__ignoreMap":118},[123,100191,100192,100194,100196,100198,100200,100202,100204],{"class":125,"line":126},[123,100193,2846],{"class":129},[123,100195,134],{"class":133},[123,100197,95396],{"class":129},[123,100199,2825],{"class":164},[123,100201,2985],{"class":129},[123,100203,2269],{"class":164},[123,100205,288],{"class":129},[123,100207,100208,100211,100213,100215,100217,100219,100221,100223],{"class":125,"line":140},[123,100209,100210],{"class":129},"a.shape",[123,100212,134],{"class":133},[123,100214,1315],{"class":129},[123,100216,2692],{"class":164},[123,100218,2985],{"class":129},[123,100220,2951],{"class":164},[123,100222,3035],{"class":129},[123,100224,100225],{"class":2673},"#改变了原数组\n",[123,100227,100228,100230,100232,100235,100237],{"class":125,"line":156},[123,100229,2846],{"class":129},[123,100231,134],{"class":133},[123,100233,100234],{"class":129},"resize((",[123,100236,2215],{"class":164},[123,100238,32913],{"class":129},[123,100240,100241],{"class":125,"line":168},[123,100242,95958],{"class":2673},[123,100244,100245],{"class":125,"line":268},[123,100246,100119],{"class":2673},[113,100248,100250],{"className":115,"code":100249,"language":117,"meta":118,"style":118},"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",[120,100251,100252,100265,100269,100273,100278,100283,100288,100293,100298,100303],{"__ignoreMap":118},[123,100253,100254,100257,100259,100261,100263],{"class":125,"line":126},[123,100255,100256],{"class":129},"a.resize((",[123,100258,2951],{"class":164},[123,100260,2985],{"class":129},[123,100262,2692],{"class":164},[123,100264,32913],{"class":129},[123,100266,100267],{"class":125,"line":140},[123,100268,95958],{"class":2673},[123,100270,100271],{"class":125,"line":156},[123,100272,96322],{"class":143},[123,100274,100275],{"class":125,"line":168},[123,100276,100277],{"class":143},"array([[ 1,  2],\n",[123,100279,100280],{"class":125,"line":268},[123,100281,100282],{"class":143},"       [ 3,  4],\n",[123,100284,100285],{"class":125,"line":291},[123,100286,100287],{"class":143},"       [ 5,  6],\n",[123,100289,100290],{"class":125,"line":300},[123,100291,100292],{"class":143},"       [ 7,  8],\n",[123,100294,100295],{"class":125,"line":305},[123,100296,100297],{"class":143},"       [ 9, 10],\n",[123,100299,100300],{"class":125,"line":316},[123,100301,100302],{"class":143},"       [11, 12]])\n",[123,100304,100305],{"class":125,"line":673},[123,100306,96322],{"class":143},[14,100308,100310],{"id":100309},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100312,100313],{},"改变了原数组",[113,100315,100317],{"className":115,"code":100316,"language":117,"meta":118,"style":118},"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",[120,100318,100319,100335,100351,100355,100359,100363,100367],{"__ignoreMap":118},[123,100320,100321,100323,100325,100327,100329,100331,100333],{"class":125,"line":126},[123,100322,2846],{"class":129},[123,100324,134],{"class":133},[123,100326,95396],{"class":129},[123,100328,2825],{"class":164},[123,100330,2985],{"class":129},[123,100332,2269],{"class":164},[123,100334,288],{"class":129},[123,100336,100337,100339,100341,100343,100345,100347,100349],{"class":125,"line":140},[123,100338,100210],{"class":129},[123,100340,134],{"class":133},[123,100342,1315],{"class":129},[123,100344,2692],{"class":164},[123,100346,2985],{"class":129},[123,100348,2951],{"class":164},[123,100350,288],{"class":129},[123,100352,100353],{"class":125,"line":156},[123,100354,95958],{"class":2673},[123,100356,100357],{"class":125,"line":168},[123,100358,96322],{"class":143},[123,100360,100361],{"class":125,"line":268},[123,100362,99582],{"class":143},[123,100364,100365],{"class":125,"line":291},[123,100366,99587],{"class":143},[123,100368,100369],{"class":125,"line":300},[123,100370,96322],{"class":143},[14,100372,100374],{"id":100373},"_56-重要比较","5.6 重要比较：",[19,100376,100377],{},[3929,100378],{"alt":118,"src":100379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100381,100382,100383,100385,100386,100388],{},"口诀：NumPy 函数要么用 ",[120,100384,98357],{},"，要么用 ",[120,100387,33908],{},"，创建结构用 shape，造数据用 size",[19,100390,100391],{},[3929,100392],{"alt":118,"src":100393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2526,100395,100396],{},"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":118,"searchDepth":140,"depth":140,"links":100398},[100399,100400,100401,100402,100403,100404],{"id":99920,"depth":140,"text":99921},{"id":100072,"depth":140,"text":100073},{"id":100122,"depth":140,"text":100123},{"id":100168,"depth":140,"text":100169},{"id":100309,"depth":140,"text":100310},{"id":100373,"depth":140,"text":100374},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99912,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100411,"title":100412,"body":100413,"description":2544,"extension":2545,"meta":101485,"navigation":231,"path":101486,"seo":101487,"stem":101488,"__hash__":101489},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100414,"toc":101479},[100415,100418,100422,100425,100428,100431,100496,100499,100539,100542,100624,100627,100632,100654,100656,100661,100666,100669,100672,100827,100830,101032,101036,101039,101042,101110,101112,101117,101120,101123,101203,101207,101210,101212,101285,101287,101292,101294,101374,101378,101381,101384,101387,101390,101393,101396,101476],[10,100416,100412],{"id":100417},"_6数组的拼接",[14,100419,100421],{"id":100420},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100423,100424],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100426,100427],{},"函数内部传两个数列构成的数列或者元组",[19,100429,100430],{},"①一维数组的拼接",[113,100432,100434],{"className":115,"code":100433,"language":117,"meta":118,"style":118},"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",[120,100435,100436,100456,100476,100481,100486,100491],{"__ignoreMap":118},[123,100437,100438,100440,100442,100444,100446,100448,100450,100452,100454],{"class":125,"line":126},[123,100439,2846],{"class":129},[123,100441,134],{"class":133},[123,100443,95418],{"class":129},[123,100445,2825],{"class":164},[123,100447,2985],{"class":129},[123,100449,2692],{"class":164},[123,100451,2985],{"class":129},[123,100453,2686],{"class":164},[123,100455,444],{"class":129},[123,100457,100458,100460,100462,100464,100466,100468,100470,100472,100474],{"class":125,"line":140},[123,100459,2871],{"class":129},[123,100461,134],{"class":133},[123,100463,95418],{"class":129},[123,100465,2901],{"class":164},[123,100467,2985],{"class":129},[123,100469,2926],{"class":164},[123,100471,2985],{"class":129},[123,100473,2951],{"class":164},[123,100475,444],{"class":129},[123,100477,100478],{"class":125,"line":156},[123,100479,100480],{"class":2673},"#调用concatenate进行数组拼接\n",[123,100482,100483],{"class":125,"line":168},[123,100484,100485],{"class":129},"np.concatenate((a,b))\n",[123,100487,100488],{"class":125,"line":268},[123,100489,100490],{"class":2673},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[123,100492,100493],{"class":125,"line":291},[123,100494,100495],{"class":2673},"#np.concatenate([a,b])\n",[19,100497,100498],{},"②一维多个数组拼接",[113,100500,100502],{"className":115,"code":100501,"language":117,"meta":118,"style":118},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[120,100503,100504,100509,100529,100534],{"__ignoreMap":118},[123,100505,100506],{"class":125,"line":126},[123,100507,100508],{"class":2673},"#也可以多个数组进行拼接\n",[123,100510,100511,100513,100515,100517,100519,100521,100523,100525,100527],{"class":125,"line":140},[123,100512,2896],{"class":129},[123,100514,134],{"class":133},[123,100516,95418],{"class":129},[123,100518,2193],{"class":164},[123,100520,2985],{"class":129},[123,100522,3077],{"class":164},[123,100524,2985],{"class":129},[123,100526,2269],{"class":164},[123,100528,444],{"class":129},[123,100530,100531],{"class":125,"line":156},[123,100532,100533],{"class":129},"c\n",[123,100535,100536],{"class":125,"line":168},[123,100537,100538],{"class":129},"np.concatenate((a,b,c))\n",[19,100540,100541],{},"③二维数组拼接",[113,100543,100545],{"className":115,"code":100544,"language":117,"meta":118,"style":118},"#二维数组使用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",[120,100546,100547,100552,100576,100601,100606,100611],{"__ignoreMap":118},[123,100548,100549],{"class":125,"line":126},[123,100550,100551],{"class":2673},"#二维数组使用concatenate进行拼接\n",[123,100553,100554,100556,100558,100560,100562,100564,100566,100568,100570,100572,100574],{"class":125,"line":140},[123,100555,95700],{"class":129},[123,100557,134],{"class":133},[123,100559,95396],{"class":129},[123,100561,2825],{"class":164},[123,100563,2985],{"class":129},[123,100565,2269],{"class":164},[123,100567,95401],{"class":129},[123,100569,2686],{"class":164},[123,100571,2985],{"class":129},[123,100573,2901],{"class":164},[123,100575,288],{"class":129},[123,100577,100578,100581,100583,100585,100587,100589,100591,100593,100595,100597,100599],{"class":125,"line":156},[123,100579,100580],{"class":129},"bb",[123,100582,134],{"class":133},[123,100584,95396],{"class":129},[123,100586,2944],{"class":164},[123,100588,2985],{"class":129},[123,100590,3244],{"class":164},[123,100592,95401],{"class":129},[123,100594,2686],{"class":164},[123,100596,2985],{"class":129},[123,100598,2901],{"class":164},[123,100600,288],{"class":129},[123,100602,100603],{"class":125,"line":168},[123,100604,100605],{"class":2673},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[123,100607,100608],{"class":125,"line":268},[123,100609,100610],{"class":2673},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[123,100612,100613,100616,100618,100620,100622],{"class":125,"line":291},[123,100614,100615],{"class":129},"np.concatenate((aa,bb),",[123,100617,49921],{"class":279},[123,100619,134],{"class":133},[123,100621,2799],{"class":164},[123,100623,288],{"class":129},[19,100625,100626],{},"结果：",[19,100628,100629],{},[3929,100630],{"alt":118,"src":100631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[113,100633,100635],{"className":115,"code":100634,"language":117,"meta":118,"style":118},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[120,100636,100637,100642],{"__ignoreMap":118},[123,100638,100639],{"class":125,"line":126},[123,100640,100641],{"class":2673},"#指定axis为1进行拼接\n",[123,100643,100644,100646,100648,100650,100652],{"class":125,"line":140},[123,100645,100615],{"class":129},[123,100647,49921],{"class":279},[123,100649,134],{"class":133},[123,100651,2825],{"class":164},[123,100653,288],{"class":129},[19,100655,100626],{},[19,100657,100658],{},[3929,100659],{"alt":118,"src":100660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100662,100663],{},[2759,100664,100665],{},"二维数组总结：0竖着方向，1横着方向",[19,100667,100668],{},"④三维数组拼接",[19,100670,100671],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[113,100673,100675],{"className":115,"code":100674,"language":117,"meta":118,"style":118},"#两个三行六列\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",[120,100676,100677,100682,100710,100740,100745,100762,100767,100772,100777,100794,100799,100804,100809,100822],{"__ignoreMap":118},[123,100678,100679],{"class":125,"line":126},[123,100680,100681],{"class":2673},"#两个三行六列\n",[123,100683,100684,100686,100688,100690,100692,100694,100696,100698,100700,100702,100704,100706,100708],{"class":125,"line":140},[123,100685,97915],{"class":129},[123,100687,134],{"class":133},[123,100689,95396],{"class":129},[123,100691,2825],{"class":164},[123,100693,2985],{"class":129},[123,100695,2932],{"class":164},[123,100697,95401],{"class":129},[123,100699,2692],{"class":164},[123,100701,2985],{"class":129},[123,100703,2686],{"class":164},[123,100705,2985],{"class":129},[123,100707,2951],{"class":164},[123,100709,288],{"class":129},[123,100711,100712,100715,100717,100719,100721,100723,100726,100728,100730,100732,100734,100736,100738],{"class":125,"line":156},[123,100713,100714],{"class":129},"bbb",[123,100716,134],{"class":133},[123,100718,95396],{"class":129},[123,100720,2944],{"class":164},[123,100722,2985],{"class":129},[123,100724,100725],{"class":164},"137",[123,100727,95401],{"class":129},[123,100729,2692],{"class":164},[123,100731,2985],{"class":129},[123,100733,2686],{"class":164},[123,100735,2985],{"class":129},[123,100737,2951],{"class":164},[123,100739,288],{"class":129},[123,100741,100742],{"class":125,"line":168},[123,100743,100744],{"class":2673},"#axis=0\n",[123,100746,100747,100749,100751,100754,100756,100758,100760],{"class":125,"line":268},[123,100748,3297],{"class":129},[123,100750,134],{"class":133},[123,100752,100753],{"class":129},"np.concatenate((aaa,bbb),",[123,100755,49921],{"class":279},[123,100757,134],{"class":133},[123,100759,2799],{"class":164},[123,100761,288],{"class":129},[123,100763,100764],{"class":125,"line":291},[123,100765,100766],{"class":129},"s.shape\n",[123,100768,100769],{"class":125,"line":300},[123,100770,100771],{"class":2673},"#输出：(4,3,6)\n",[123,100773,100774],{"class":125,"line":305},[123,100775,100776],{"class":2673},"#axis=1\n",[123,100778,100779,100782,100784,100786,100788,100790,100792],{"class":125,"line":316},[123,100780,100781],{"class":129},"ss",[123,100783,134],{"class":133},[123,100785,100753],{"class":129},[123,100787,49921],{"class":279},[123,100789,134],{"class":133},[123,100791,2825],{"class":164},[123,100793,288],{"class":129},[123,100795,100796],{"class":125,"line":673},[123,100797,100798],{"class":129},"ss.shape\n",[123,100800,100801],{"class":125,"line":692},[123,100802,100803],{"class":2673},"#输出：(2,6,6)\n",[123,100805,100806],{"class":125,"line":713},[123,100807,100808],{"class":2673},"#axis=2\n",[123,100810,100811,100813,100815,100817,100819],{"class":125,"line":718},[123,100812,100753],{"class":129},[123,100814,49921],{"class":279},[123,100816,134],{"class":133},[123,100818,2692],{"class":164},[123,100820,100821],{"class":129},").shape\n",[123,100823,100824],{"class":125,"line":1138},[123,100825,100826],{"class":2673},"#输出：（2，3，12）\n",[19,100828,100829],{},"⑤四维数组拼接",[113,100831,100833],{"className":115,"code":100832,"language":117,"meta":118,"style":118},"#两个三行六列\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",[120,100834,100835,100839,100867,100895,100920,100946,100950,100963,100968,100972,100984,100989,100993,101005,101010,101015,101027],{"__ignoreMap":118},[123,100836,100837],{"class":125,"line":126},[123,100838,100681],{"class":2673},[123,100840,100841,100843,100845,100847,100849,100851,100853,100855,100857,100859,100861,100863,100865],{"class":125,"line":140},[123,100842,97915],{"class":129},[123,100844,134],{"class":133},[123,100846,95396],{"class":129},[123,100848,2825],{"class":164},[123,100850,2985],{"class":129},[123,100852,2932],{"class":164},[123,100854,95401],{"class":129},[123,100856,2692],{"class":164},[123,100858,2985],{"class":129},[123,100860,2686],{"class":164},[123,100862,2985],{"class":129},[123,100864,2951],{"class":164},[123,100866,288],{"class":129},[123,100868,100869,100871,100873,100875,100877,100879,100881,100883,100885,100887,100889,100891,100893],{"class":125,"line":156},[123,100870,100714],{"class":129},[123,100872,134],{"class":133},[123,100874,95396],{"class":129},[123,100876,2944],{"class":164},[123,100878,2985],{"class":129},[123,100880,100725],{"class":164},[123,100882,95401],{"class":129},[123,100884,2692],{"class":164},[123,100886,2985],{"class":129},[123,100888,2686],{"class":164},[123,100890,2985],{"class":129},[123,100892,2951],{"class":164},[123,100894,288],{"class":129},[123,100896,100897,100900,100902,100904,100906,100908,100910,100912,100914,100916,100918],{"class":125,"line":168},[123,100898,100899],{"class":129},"aaaa",[123,100901,134],{"class":133},[123,100903,100063],{"class":129},[123,100905,2692],{"class":164},[123,100907,2985],{"class":129},[123,100909,2686],{"class":164},[123,100911,2985],{"class":129},[123,100913,2686],{"class":164},[123,100915,2985],{"class":129},[123,100917,2692],{"class":164},[123,100919,288],{"class":129},[123,100921,100922,100925,100927,100930,100932,100934,100936,100938,100940,100942,100944],{"class":125,"line":268},[123,100923,100924],{"class":129},"bbbb",[123,100926,134],{"class":133},[123,100928,100929],{"class":129},"bbb.reshape(",[123,100931,2692],{"class":164},[123,100933,2985],{"class":129},[123,100935,2686],{"class":164},[123,100937,2985],{"class":129},[123,100939,2686],{"class":164},[123,100941,2985],{"class":129},[123,100943,2692],{"class":164},[123,100945,288],{"class":129},[123,100947,100948],{"class":125,"line":291},[123,100949,100744],{"class":2673},[123,100951,100952,100955,100957,100959,100961],{"class":125,"line":300},[123,100953,100954],{"class":129},"np.concatenate((aaaa,bbbb),",[123,100956,49921],{"class":279},[123,100958,134],{"class":133},[123,100960,2799],{"class":164},[123,100962,100821],{"class":129},[123,100964,100965],{"class":125,"line":305},[123,100966,100967],{"class":2673},"#结果：（4，3，3，2）\n",[123,100969,100970],{"class":125,"line":316},[123,100971,100776],{"class":2673},[123,100973,100974,100976,100978,100980,100982],{"class":125,"line":673},[123,100975,100954],{"class":129},[123,100977,49921],{"class":279},[123,100979,134],{"class":133},[123,100981,2825],{"class":164},[123,100983,100821],{"class":129},[123,100985,100986],{"class":125,"line":692},[123,100987,100988],{"class":2673},"#结果：（2，6，3，2）\n",[123,100990,100991],{"class":125,"line":713},[123,100992,100808],{"class":2673},[123,100994,100995,100997,100999,101001,101003],{"class":125,"line":718},[123,100996,100954],{"class":129},[123,100998,49921],{"class":279},[123,101000,134],{"class":133},[123,101002,2692],{"class":164},[123,101004,100821],{"class":129},[123,101006,101007],{"class":125,"line":1138},[123,101008,101009],{"class":2673},"#结果：（2，3，6，2）\n",[123,101011,101012],{"class":125,"line":1429},[123,101013,101014],{"class":2673},"#axis=3\n",[123,101016,101017,101019,101021,101023,101025],{"class":125,"line":1439},[123,101018,100954],{"class":129},[123,101020,49921],{"class":279},[123,101022,134],{"class":133},[123,101024,2686],{"class":164},[123,101026,100821],{"class":129},[123,101028,101029],{"class":125,"line":1444},[123,101030,101031],{"class":2673},"#结果：（2，3，3，4）\n",[14,101033,101035],{"id":101034},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,101037,101038],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,101040,101041],{},"①二维数组",[113,101043,101045],{"className":115,"code":101044,"language":117,"meta":118,"style":118},"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",[120,101046,101047,101071,101095,101100,101105],{"__ignoreMap":118},[123,101048,101049,101051,101053,101055,101057,101059,101061,101063,101065,101067,101069],{"class":125,"line":126},[123,101050,95700],{"class":129},[123,101052,134],{"class":133},[123,101054,95396],{"class":129},[123,101056,2825],{"class":164},[123,101058,2985],{"class":129},[123,101060,2269],{"class":164},[123,101062,95401],{"class":129},[123,101064,2686],{"class":164},[123,101066,2985],{"class":129},[123,101068,2901],{"class":164},[123,101070,288],{"class":129},[123,101072,101073,101075,101077,101079,101081,101083,101085,101087,101089,101091,101093],{"class":125,"line":140},[123,101074,100580],{"class":129},[123,101076,134],{"class":133},[123,101078,95396],{"class":129},[123,101080,2944],{"class":164},[123,101082,2985],{"class":129},[123,101084,3244],{"class":164},[123,101086,95401],{"class":129},[123,101088,2686],{"class":164},[123,101090,2985],{"class":129},[123,101092,2901],{"class":164},[123,101094,288],{"class":129},[123,101096,101097],{"class":125,"line":156},[123,101098,101099],{"class":129},"np.hstack((aa,bb))\n",[123,101101,101102],{"class":125,"line":168},[123,101103,101104],{"class":2673},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[123,101106,101107],{"class":125,"line":268},[123,101108,101109],{"class":2673},"#np.hstack([aa,bb])\n",[19,101111,100626],{},[19,101113,101114],{},[3929,101115],{"alt":118,"src":101116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,101118,101119],{},"等效于concatenate()函数中axis=1时的情况",[19,101121,101122],{},"②三维数组",[113,101124,101126],{"className":115,"code":101125,"language":117,"meta":118,"style":118},"#两个三行六列\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",[120,101127,101128,101132,101160,101188,101193,101198],{"__ignoreMap":118},[123,101129,101130],{"class":125,"line":126},[123,101131,100681],{"class":2673},[123,101133,101134,101136,101138,101140,101142,101144,101146,101148,101150,101152,101154,101156,101158],{"class":125,"line":140},[123,101135,97915],{"class":129},[123,101137,134],{"class":133},[123,101139,95396],{"class":129},[123,101141,2825],{"class":164},[123,101143,2985],{"class":129},[123,101145,2932],{"class":164},[123,101147,95401],{"class":129},[123,101149,2692],{"class":164},[123,101151,2985],{"class":129},[123,101153,2686],{"class":164},[123,101155,2985],{"class":129},[123,101157,2951],{"class":164},[123,101159,288],{"class":129},[123,101161,101162,101164,101166,101168,101170,101172,101174,101176,101178,101180,101182,101184,101186],{"class":125,"line":156},[123,101163,100714],{"class":129},[123,101165,134],{"class":133},[123,101167,95396],{"class":129},[123,101169,2944],{"class":164},[123,101171,2985],{"class":129},[123,101173,100725],{"class":164},[123,101175,95401],{"class":129},[123,101177,2692],{"class":164},[123,101179,2985],{"class":129},[123,101181,2686],{"class":164},[123,101183,2985],{"class":129},[123,101185,2951],{"class":164},[123,101187,288],{"class":129},[123,101189,101190],{"class":125,"line":168},[123,101191,101192],{"class":2673},"#使用hstack\n",[123,101194,101195],{"class":125,"line":268},[123,101196,101197],{"class":129},"np.hstack((aaa,bbb)).shape\n",[123,101199,101200],{"class":125,"line":291},[123,101201,101202],{"class":2673},"#输出：（2，6，6）\n",[14,101204,101206],{"id":101205},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101208,101209],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101211,101041],{},[113,101213,101215],{"className":115,"code":101214,"language":117,"meta":118,"style":118},"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",[120,101216,101217,101241,101265,101270,101275,101280],{"__ignoreMap":118},[123,101218,101219,101221,101223,101225,101227,101229,101231,101233,101235,101237,101239],{"class":125,"line":126},[123,101220,95700],{"class":129},[123,101222,134],{"class":133},[123,101224,95396],{"class":129},[123,101226,2825],{"class":164},[123,101228,2985],{"class":129},[123,101230,2269],{"class":164},[123,101232,95401],{"class":129},[123,101234,2686],{"class":164},[123,101236,2985],{"class":129},[123,101238,2901],{"class":164},[123,101240,288],{"class":129},[123,101242,101243,101245,101247,101249,101251,101253,101255,101257,101259,101261,101263],{"class":125,"line":140},[123,101244,100580],{"class":129},[123,101246,134],{"class":133},[123,101248,95396],{"class":129},[123,101250,2944],{"class":164},[123,101252,2985],{"class":129},[123,101254,3244],{"class":164},[123,101256,95401],{"class":129},[123,101258,2686],{"class":164},[123,101260,2985],{"class":129},[123,101262,2901],{"class":164},[123,101264,288],{"class":129},[123,101266,101267],{"class":125,"line":156},[123,101268,101269],{"class":2673},"#vstack 垂直方向进行堆叠\n",[123,101271,101272],{"class":125,"line":168},[123,101273,101274],{"class":129},"np.vstack((aa,bb))\n",[123,101276,101277],{"class":125,"line":268},[123,101278,101279],{"class":2673},"#与hstack传的参数类似，等价于：\n",[123,101281,101282],{"class":125,"line":291},[123,101283,101284],{"class":129},"np.vstack([aa,bb])\n",[19,101286,100626],{},[19,101288,101289],{},[3929,101290],{"alt":118,"src":101291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101293,101122],{},[113,101295,101297],{"className":115,"code":101296,"language":117,"meta":118,"style":118},"#两个三行六列\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",[120,101298,101299,101303,101331,101359,101364,101369],{"__ignoreMap":118},[123,101300,101301],{"class":125,"line":126},[123,101302,100681],{"class":2673},[123,101304,101305,101307,101309,101311,101313,101315,101317,101319,101321,101323,101325,101327,101329],{"class":125,"line":140},[123,101306,97915],{"class":129},[123,101308,134],{"class":133},[123,101310,95396],{"class":129},[123,101312,2825],{"class":164},[123,101314,2985],{"class":129},[123,101316,2932],{"class":164},[123,101318,95401],{"class":129},[123,101320,2692],{"class":164},[123,101322,2985],{"class":129},[123,101324,2686],{"class":164},[123,101326,2985],{"class":129},[123,101328,2951],{"class":164},[123,101330,288],{"class":129},[123,101332,101333,101335,101337,101339,101341,101343,101345,101347,101349,101351,101353,101355,101357],{"class":125,"line":156},[123,101334,100714],{"class":129},[123,101336,134],{"class":133},[123,101338,95396],{"class":129},[123,101340,2944],{"class":164},[123,101342,2985],{"class":129},[123,101344,100725],{"class":164},[123,101346,95401],{"class":129},[123,101348,2692],{"class":164},[123,101350,2985],{"class":129},[123,101352,2686],{"class":164},[123,101354,2985],{"class":129},[123,101356,2951],{"class":164},[123,101358,288],{"class":129},[123,101360,101361],{"class":125,"line":168},[123,101362,101363],{"class":2673},"#使用vstack\n",[123,101365,101366],{"class":125,"line":268},[123,101367,101368],{"class":129},"np.vstack((aaa,bbb)).shape\n",[123,101370,101371],{"class":125,"line":291},[123,101372,101373],{"class":2673},"#输出：（4，3，6）\n",[14,101375,101377],{"id":101376},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101379,101380],{},"该方法是三维数组特有的方法",[19,101382,101383],{},"也就是说",[19,101385,101386],{},"一维数组拼接方法用：concatenate()",[19,101388,101389],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101391,101392],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101394,101395],{},"四维数组及多维数组只能用concatenate进行拼接",[113,101397,101399],{"className":115,"code":101398,"language":117,"meta":118,"style":118},"#两个三行六列\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",[120,101400,101401,101405,101433,101461,101466,101471],{"__ignoreMap":118},[123,101402,101403],{"class":125,"line":126},[123,101404,100681],{"class":2673},[123,101406,101407,101409,101411,101413,101415,101417,101419,101421,101423,101425,101427,101429,101431],{"class":125,"line":140},[123,101408,97915],{"class":129},[123,101410,134],{"class":133},[123,101412,95396],{"class":129},[123,101414,2825],{"class":164},[123,101416,2985],{"class":129},[123,101418,2932],{"class":164},[123,101420,95401],{"class":129},[123,101422,2692],{"class":164},[123,101424,2985],{"class":129},[123,101426,2686],{"class":164},[123,101428,2985],{"class":129},[123,101430,2951],{"class":164},[123,101432,288],{"class":129},[123,101434,101435,101437,101439,101441,101443,101445,101447,101449,101451,101453,101455,101457,101459],{"class":125,"line":156},[123,101436,100714],{"class":129},[123,101438,134],{"class":133},[123,101440,95396],{"class":129},[123,101442,2944],{"class":164},[123,101444,2985],{"class":129},[123,101446,100725],{"class":164},[123,101448,95401],{"class":129},[123,101450,2692],{"class":164},[123,101452,2985],{"class":129},[123,101454,2686],{"class":164},[123,101456,2985],{"class":129},[123,101458,2951],{"class":164},[123,101460,288],{"class":129},[123,101462,101463],{"class":125,"line":168},[123,101464,101465],{"class":2673},"#使用dstack\n",[123,101467,101468],{"class":125,"line":268},[123,101469,101470],{"class":129},"np.dstack((aaa,bbb)).shape\n",[123,101472,101473],{"class":125,"line":291},[123,101474,101475],{"class":2673},"#结果：（2，3，12）\n",[2526,101477,101478],{},"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":118,"searchDepth":140,"depth":140,"links":101480},[101481,101482,101483,101484],{"id":100420,"depth":140,"text":100421},{"id":101034,"depth":140,"text":101035},{"id":101205,"depth":140,"text":101206},{"id":101376,"depth":140,"text":101377},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100412,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101491,"title":101492,"body":101493,"description":2544,"extension":2545,"meta":101768,"navigation":231,"path":101769,"seo":101770,"stem":101771,"__hash__":101772},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101494,"toc":101766},[101495,101498,101501,101595,101598,101601,101604,101607,101610,101613,101616,101619,101763],[10,101496,101492],{"id":101497},"_7数组转置",[19,101499,101500],{},"使用transpose()函数",[113,101502,101504],{"className":115,"code":101503,"language":117,"meta":118,"style":118},"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",[120,101505,101506,101516,101540,101545,101550,101555,101560,101568,101572,101576,101581,101586,101591],{"__ignoreMap":118},[123,101507,101508,101510,101512,101514],{"class":125,"line":126},[123,101509,223],{"class":133},[123,101511,33795],{"class":129},[123,101513,547],{"class":133},[123,101515,33800],{"class":129},[123,101517,101518,101520,101522,101524,101526,101528,101530,101532,101534,101536,101538],{"class":125,"line":140},[123,101519,2846],{"class":129},[123,101521,134],{"class":133},[123,101523,34129],{"class":129},[123,101525,2825],{"class":164},[123,101527,2985],{"class":129},[123,101529,2269],{"class":164},[123,101531,95401],{"class":129},[123,101533,2901],{"class":164},[123,101535,2985],{"class":129},[123,101537,2686],{"class":164},[123,101539,288],{"class":129},[123,101541,101542],{"class":125,"line":156},[123,101543,101544],{"class":2673},"#二维数组转置\n",[123,101546,101547],{"class":125,"line":168},[123,101548,101549],{"class":2673},"#调用transpose()函数\n",[123,101551,101552],{"class":125,"line":268},[123,101553,101554],{"class":129},"a.transpose()\n",[123,101556,101557],{"class":125,"line":291},[123,101558,101559],{"class":2673},"#对于二维数组也可以采用.T来实现\n",[123,101561,101562,101565],{"class":125,"line":300},[123,101563,101564],{"class":129},"a.T",[123,101566,101567],{"class":2673},"#与上述代码一样\n",[123,101569,101570],{"class":125,"line":305},[123,101571,95958],{"class":2673},[123,101573,101574],{"class":125,"line":316},[123,101575,96322],{"class":143},[123,101577,101578],{"class":125,"line":673},[123,101579,101580],{"class":143},"array([[ 1,  4,  7, 10],\n",[123,101582,101583],{"class":125,"line":692},[123,101584,101585],{"class":143},"       [ 2,  5,  8, 11],\n",[123,101587,101588],{"class":125,"line":713},[123,101589,101590],{"class":143},"       [ 3,  6,  9, 12]])\n",[123,101592,101593],{"class":125,"line":718},[123,101594,96322],{"class":143},[19,101596,101597],{},"也可以使用np.transpose()的形式",[19,101599,101600],{},"#多维数组进行转置 np.transpose()",[19,101602,101603],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101605,101606],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101608,101609],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101611,101612],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101614,101615],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101617,101618],{},"四维及以上的数组也是一样的道理",[113,101620,101622],{"className":115,"code":101621,"language":117,"meta":118,"style":118},"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",[120,101623,101624,101652,101657,101662,101667,101685,101690,101722,101727,101732,101737,101758],{"__ignoreMap":118},[123,101625,101626,101628,101630,101632,101634,101636,101638,101640,101642,101644,101646,101648,101650],{"class":125,"line":126},[123,101627,3421],{"class":129},[123,101629,134],{"class":133},[123,101631,95396],{"class":129},[123,101633,2825],{"class":164},[123,101635,2985],{"class":129},[123,101637,2932],{"class":164},[123,101639,95401],{"class":129},[123,101641,2686],{"class":164},[123,101643,2985],{"class":129},[123,101645,2951],{"class":164},[123,101647,2985],{"class":129},[123,101649,2692],{"class":164},[123,101651,288],{"class":129},[123,101653,101654],{"class":125,"line":140},[123,101655,101656],{"class":129},"x.shape\n",[123,101658,101659],{"class":125,"line":156},[123,101660,101661],{"class":2673},"#结果：（3,6,2）\n",[123,101663,101664],{"class":125,"line":168},[123,101665,101666],{"class":2673},"#使用np.transpose()进行转置 变为(2,6,3)\n",[123,101668,101669,101672,101674,101676,101678,101680,101682],{"class":125,"line":268},[123,101670,101671],{"class":129},"np.transpose(x,(",[123,101673,2692],{"class":164},[123,101675,2985],{"class":129},[123,101677,2825],{"class":164},[123,101679,2985],{"class":129},[123,101681,2799],{"class":164},[123,101683,101684],{"class":129},")).shape\n",[123,101686,101687],{"class":125,"line":291},[123,101688,101689],{"class":2673},"#结果：(2,6,3)\n",[123,101691,101692,101694,101696,101698,101700,101702,101704,101706,101708,101710,101712,101714,101716,101718,101720],{"class":125,"line":300},[123,101693,100899],{"class":129},[123,101695,134],{"class":133},[123,101697,95396],{"class":129},[123,101699,2825],{"class":164},[123,101701,2985],{"class":129},[123,101703,2932],{"class":164},[123,101705,95401],{"class":129},[123,101707,2686],{"class":164},[123,101709,2985],{"class":129},[123,101711,2692],{"class":164},[123,101713,2985],{"class":129},[123,101715,2825],{"class":164},[123,101717,2985],{"class":129},[123,101719,2951],{"class":164},[123,101721,288],{"class":129},[123,101723,101724],{"class":125,"line":305},[123,101725,101726],{"class":129},"aaaa.shape\n",[123,101728,101729],{"class":125,"line":316},[123,101730,101731],{"class":2673},"#结果：（3，2，1，6）\n",[123,101733,101734],{"class":125,"line":673},[123,101735,101736],{"class":2673},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[123,101738,101739,101742,101744,101746,101748,101750,101752,101754,101756],{"class":125,"line":692},[123,101740,101741],{"class":129},"np.transpose(aaaa,(",[123,101743,2825],{"class":164},[123,101745,2985],{"class":129},[123,101747,2692],{"class":164},[123,101749,2985],{"class":129},[123,101751,2799],{"class":164},[123,101753,2985],{"class":129},[123,101755,2686],{"class":164},[123,101757,101684],{"class":129},[123,101759,101760],{"class":125,"line":713},[123,101761,101762],{"class":2673},"#结果：(2,1,3,6)\n",[2526,101764,101765],{},"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":118,"searchDepth":140,"depth":140,"links":101767},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101492,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101774,"title":101775,"body":101776,"description":2544,"extension":2545,"meta":102510,"navigation":231,"path":102511,"seo":102512,"stem":102513,"__hash__":102514},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101777,"toc":102508},[101778,101781,101784,101787,101790,101793,101796,101799,101802,101911,101914,101917,102505],[10,101779,101775],{"id":101780},"_8数组分割",[19,101782,101783],{},"split分割",[19,101785,101786],{},"numpy.split(ary,indics_or_sections,axis)",[19,101788,101789],{},"解释：",[19,101791,101792],{},"ary:被分割的数组",[19,101794,101795],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101797,101798],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101800,101801],{},"①一维数组的分割",[113,101803,101805],{"className":115,"code":101804,"language":117,"meta":118,"style":118},"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",[120,101806,101807,101823,101828,101837,101841,101846,101854,101858,101863,101868,101881,101885,101890,101902,101906],{"__ignoreMap":118},[123,101808,101809,101811,101813,101815,101817,101819,101821],{"class":125,"line":126},[123,101810,2846],{"class":129},[123,101812,134],{"class":133},[123,101814,95396],{"class":129},[123,101816,2825],{"class":164},[123,101818,2985],{"class":129},[123,101820,3026],{"class":164},[123,101822,288],{"class":129},[123,101824,101825],{"class":125,"line":140},[123,101826,101827],{"class":2673},"#如果传入整数，必须能够平分，否则会报错\n",[123,101829,101830,101833,101835],{"class":125,"line":156},[123,101831,101832],{"class":129},"np.split(a,",[123,101834,2692],{"class":164},[123,101836,288],{"class":129},[123,101838,101839],{"class":125,"line":168},[123,101840,95958],{"class":2673},[123,101842,101843],{"class":125,"line":268},[123,101844,101845],{"class":2673},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[123,101847,101848,101850,101852],{"class":125,"line":291},[123,101849,101832],{"class":129},[123,101851,2901],{"class":164},[123,101853,288],{"class":129},[123,101855,101856],{"class":125,"line":300},[123,101857,95958],{"class":2673},[123,101859,101860],{"class":125,"line":305},[123,101861,101862],{"class":2673},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[123,101864,101865],{"class":125,"line":316},[123,101866,101867],{"class":2673},"#传入数组\n",[123,101869,101870,101873,101875,101877,101879],{"class":125,"line":673},[123,101871,101872],{"class":129},"np.split(a,[",[123,101874,2686],{"class":164},[123,101876,2985],{"class":129},[123,101878,2926],{"class":164},[123,101880,444],{"class":129},[123,101882,101883],{"class":125,"line":692},[123,101884,95958],{"class":2673},[123,101886,101887],{"class":125,"line":713},[123,101888,101889],{"class":2673},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[123,101891,101892,101894,101896,101898,101900],{"class":125,"line":718},[123,101893,101872],{"class":129},[123,101895,2926],{"class":164},[123,101897,2985],{"class":129},[123,101899,2976],{"class":164},[123,101901,444],{"class":129},[123,101903,101904],{"class":125,"line":1138},[123,101905,95958],{"class":2673},[123,101907,101908],{"class":125,"line":1429},[123,101909,101910],{"class":2673},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101912,101913],{},"②二维数组的分割",[19,101915,101916],{},"使用split()",[113,101918,101920],{"className":115,"code":101919,"language":117,"meta":118,"style":118},"#二维数组分割\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",[120,101921,101922,101927,101951,101956,101965,101969,101973,101978,101983,101988,101993,101998,102003,102008,102012,102025,102029,102033,102037,102041,102045,102050,102055,102060,102064,102069,102085,102089,102093,102098,102103,102108,102113,102118,102123,102128,102133,102138,102143,102148,102153,102158,102163,102168,102173,102178,102183,102187,102191,102211,102215,102219,102224,102229,102234,102239,102244,102249,102254,102259,102264,102269,102274,102279,102284,102289,102294,102299,102304,102309,102313,102318,102327,102331,102335,102339,102343,102347,102351,102355,102359,102363,102372,102376,102380,102384,102388,102392,102396,102400,102404,102408,102412,102416,102420,102424,102428,102432,102436,102440,102444,102448,102452,102456,102469,102473,102477,102481,102485,102489,102493,102497,102501],{"__ignoreMap":118},[123,101923,101924],{"class":125,"line":126},[123,101925,101926],{"class":2673},"#二维数组分割\n",[123,101928,101929,101931,101933,101935,101937,101939,101941,101943,101945,101947,101949],{"class":125,"line":140},[123,101930,95700],{"class":129},[123,101932,134],{"class":133},[123,101934,95396],{"class":129},[123,101936,2825],{"class":164},[123,101938,2985],{"class":129},[123,101940,2932],{"class":164},[123,101942,95401],{"class":129},[123,101944,2951],{"class":164},[123,101946,2985],{"class":129},[123,101948,2951],{"class":164},[123,101950,288],{"class":129},[123,101952,101953],{"class":125,"line":156},[123,101954,101955],{"class":2673},"#默认axis=0  传入整数平均分,按行来的\n",[123,101957,101958,101961,101963],{"class":125,"line":168},[123,101959,101960],{"class":129},"np.split(aa,",[123,101962,2686],{"class":164},[123,101964,288],{"class":129},[123,101966,101967],{"class":125,"line":268},[123,101968,98158],{"class":2673},[123,101970,101971],{"class":125,"line":291},[123,101972,96322],{"class":143},[123,101974,101975],{"class":125,"line":300},[123,101976,101977],{"class":143},"[array([[ 1,  2,  3,  4,  5,  6],\n",[123,101979,101980],{"class":125,"line":305},[123,101981,101982],{"class":143},"        [ 7,  8,  9, 10, 11, 12]]),\n",[123,101984,101985],{"class":125,"line":316},[123,101986,101987],{"class":143}," array([[13, 14, 15, 16, 17, 18],\n",[123,101989,101990],{"class":125,"line":673},[123,101991,101992],{"class":143},"        [19, 20, 21, 22, 23, 24]]),\n",[123,101994,101995],{"class":125,"line":692},[123,101996,101997],{"class":143}," array([[25, 26, 27, 28, 29, 30],\n",[123,101999,102000],{"class":125,"line":713},[123,102001,102002],{"class":143},"        [31, 32, 33, 34, 35, 36]])]\n",[123,102004,102005],{"class":125,"line":718},[123,102006,102007],{"class":143}," '''\n",[123,102009,102010],{"class":125,"line":1138},[123,102011,101867],{"class":2673},[123,102013,102014,102017,102019,102021,102023],{"class":125,"line":1429},[123,102015,102016],{"class":129},"np.split(aa,[",[123,102018,2692],{"class":164},[123,102020,2985],{"class":129},[123,102022,2926],{"class":164},[123,102024,444],{"class":129},[123,102026,102027],{"class":125,"line":1439},[123,102028,98158],{"class":2673},[123,102030,102031],{"class":125,"line":1444},[123,102032,96322],{"class":143},[123,102034,102035],{"class":125,"line":1453},[123,102036,101977],{"class":143},[123,102038,102039],{"class":125,"line":1458},[123,102040,101982],{"class":143},[123,102042,102043],{"class":125,"line":1476},[123,102044,101987],{"class":143},[123,102046,102047],{"class":125,"line":1494},[123,102048,102049],{"class":143},"        [19, 20, 21, 22, 23, 24],\n",[123,102051,102052],{"class":125,"line":1499},[123,102053,102054],{"class":143},"        [25, 26, 27, 28, 29, 30]]),\n",[123,102056,102057],{"class":125,"line":1517},[123,102058,102059],{"class":143}," array([[31, 32, 33, 34, 35, 36]])]\n",[123,102061,102062],{"class":125,"line":1534},[123,102063,96322],{"class":143},[123,102065,102066],{"class":125,"line":1539},[123,102067,102068],{"class":2673},"#axis=1 按照列来分\n",[123,102070,102071,102073,102075,102077,102079,102081,102083],{"class":125,"line":2080},[123,102072,101960],{"class":129},[123,102074,2686],{"class":164},[123,102076,2985],{"class":129},[123,102078,49921],{"class":279},[123,102080,134],{"class":133},[123,102082,2825],{"class":164},[123,102084,288],{"class":129},[123,102086,102087],{"class":125,"line":2097},[123,102088,98158],{"class":2673},[123,102090,102091],{"class":125,"line":2114},[123,102092,96322],{"class":143},[123,102094,102095],{"class":125,"line":2125},[123,102096,102097],{"class":143},"[array([[ 1,  2],\n",[123,102099,102100],{"class":125,"line":2130},[123,102101,102102],{"class":143},"        [ 7,  8],\n",[123,102104,102105],{"class":125,"line":5033},[123,102106,102107],{"class":143},"        [13, 14],\n",[123,102109,102110],{"class":125,"line":5041},[123,102111,102112],{"class":143},"        [19, 20],\n",[123,102114,102115],{"class":125,"line":5046},[123,102116,102117],{"class":143},"        [25, 26],\n",[123,102119,102120],{"class":125,"line":5052},[123,102121,102122],{"class":143},"        [31, 32]]),\n",[123,102124,102125],{"class":125,"line":5058},[123,102126,102127],{"class":143}," array([[ 3,  4],\n",[123,102129,102130],{"class":125,"line":5063},[123,102131,102132],{"class":143},"        [ 9, 10],\n",[123,102134,102135],{"class":125,"line":10380},[123,102136,102137],{"class":143},"        [15, 16],\n",[123,102139,102140],{"class":125,"line":10404},[123,102141,102142],{"class":143},"        [21, 22],\n",[123,102144,102145],{"class":125,"line":10409},[123,102146,102147],{"class":143},"        [27, 28],\n",[123,102149,102150],{"class":125,"line":10415},[123,102151,102152],{"class":143},"        [33, 34]]),\n",[123,102154,102155],{"class":125,"line":10442},[123,102156,102157],{"class":143}," array([[ 5,  6],\n",[123,102159,102160],{"class":125,"line":10447},[123,102161,102162],{"class":143},"        [11, 12],\n",[123,102164,102165],{"class":125,"line":10453},[123,102166,102167],{"class":143},"        [17, 18],\n",[123,102169,102170],{"class":125,"line":10465},[123,102171,102172],{"class":143},"        [23, 24],\n",[123,102174,102175],{"class":125,"line":10477},[123,102176,102177],{"class":143},"        [29, 30],\n",[123,102179,102180],{"class":125,"line":10489},[123,102181,102182],{"class":143},"        [35, 36]])]\n",[123,102184,102185],{"class":125,"line":12148},[123,102186,102007],{"class":143},[123,102188,102189],{"class":125,"line":12173},[123,102190,101867],{"class":2673},[123,102192,102193,102195,102197,102199,102201,102203,102205,102207,102209],{"class":125,"line":12196},[123,102194,102016],{"class":129},[123,102196,2825],{"class":164},[123,102198,2985],{"class":129},[123,102200,2692],{"class":164},[123,102202,44017],{"class":129},[123,102204,49921],{"class":279},[123,102206,134],{"class":133},[123,102208,2825],{"class":164},[123,102210,288],{"class":129},[123,102212,102213],{"class":125,"line":12220},[123,102214,95958],{"class":2673},[123,102216,102217],{"class":125,"line":12225},[123,102218,96322],{"class":143},[123,102220,102221],{"class":125,"line":12230},[123,102222,102223],{"class":143},"[array([[ 1],\n",[123,102225,102226],{"class":125,"line":12235},[123,102227,102228],{"class":143},"        [ 7],\n",[123,102230,102231],{"class":125,"line":12244},[123,102232,102233],{"class":143},"        [13],\n",[123,102235,102236],{"class":125,"line":12249},[123,102237,102238],{"class":143},"        [19],\n",[123,102240,102241],{"class":125,"line":12255},[123,102242,102243],{"class":143},"        [25],\n",[123,102245,102246],{"class":125,"line":12276},[123,102247,102248],{"class":143},"        [31]]),\n",[123,102250,102251],{"class":125,"line":12282},[123,102252,102253],{"class":143}," array([[ 2],\n",[123,102255,102256],{"class":125,"line":12296},[123,102257,102258],{"class":143},"        [ 8],\n",[123,102260,102261],{"class":125,"line":12302},[123,102262,102263],{"class":143},"        [14],\n",[123,102265,102266],{"class":125,"line":12329},[123,102267,102268],{"class":143},"        [20],\n",[123,102270,102271],{"class":125,"line":12338},[123,102272,102273],{"class":143},"        [26],\n",[123,102275,102276],{"class":125,"line":12344},[123,102277,102278],{"class":143},"        [32]]),\n",[123,102280,102281],{"class":125,"line":12352},[123,102282,102283],{"class":143}," array([[ 3,  4,  5,  6],\n",[123,102285,102286],{"class":125,"line":12357},[123,102287,102288],{"class":143},"        [ 9, 10, 11, 12],\n",[123,102290,102291],{"class":125,"line":19032},[123,102292,102293],{"class":143},"        [15, 16, 17, 18],\n",[123,102295,102296],{"class":125,"line":19038},[123,102297,102298],{"class":143},"        [21, 22, 23, 24],\n",[123,102300,102301],{"class":125,"line":19061},[123,102302,102303],{"class":143},"        [27, 28, 29, 30],\n",[123,102305,102306],{"class":125,"line":19067},[123,102307,102308],{"class":143},"        [33, 34, 35, 36]])]\n",[123,102310,102311],{"class":125,"line":19090},[123,102312,96322],{"class":143},[123,102314,102315],{"class":125,"line":19104},[123,102316,102317],{"class":2673},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[123,102319,102320,102323,102325],{"class":125,"line":19124},[123,102321,102322],{"class":129},"np.vsplit(aa,",[123,102324,2686],{"class":164},[123,102326,288],{"class":129},[123,102328,102329],{"class":125,"line":19130},[123,102330,95958],{"class":2673},[123,102332,102333],{"class":125,"line":19141},[123,102334,96322],{"class":143},[123,102336,102337],{"class":125,"line":19164},[123,102338,101977],{"class":143},[123,102340,102341],{"class":125,"line":19186},[123,102342,101982],{"class":143},[123,102344,102345],{"class":125,"line":19191},[123,102346,101987],{"class":143},[123,102348,102349],{"class":125,"line":19197},[123,102350,101992],{"class":143},[123,102352,102353],{"class":125,"line":19211},[123,102354,101997],{"class":143},[123,102356,102357],{"class":125,"line":19224},[123,102358,102002],{"class":143},[123,102360,102361],{"class":125,"line":19229},[123,102362,96322],{"class":143},[123,102364,102365,102368,102370],{"class":125,"line":19243},[123,102366,102367],{"class":129},"np.hsplit(aa,",[123,102369,2686],{"class":164},[123,102371,288],{"class":129},[123,102373,102374],{"class":125,"line":19248},[123,102375,95958],{"class":2673},[123,102377,102378],{"class":125,"line":19254},[123,102379,96322],{"class":143},[123,102381,102382],{"class":125,"line":19259},[123,102383,102097],{"class":143},[123,102385,102386],{"class":125,"line":19273},[123,102387,102102],{"class":143},[123,102389,102390],{"class":125,"line":19278},[123,102391,102107],{"class":143},[123,102393,102394],{"class":125,"line":19283},[123,102395,102112],{"class":143},[123,102397,102398],{"class":125,"line":19297},[123,102399,102117],{"class":143},[123,102401,102402],{"class":125,"line":19309},[123,102403,102122],{"class":143},[123,102405,102406],{"class":125,"line":19314},[123,102407,102127],{"class":143},[123,102409,102410],{"class":125,"line":19327},[123,102411,102132],{"class":143},[123,102413,102414],{"class":125,"line":19332},[123,102415,102137],{"class":143},[123,102417,102418],{"class":125,"line":19337},[123,102419,102142],{"class":143},[123,102421,102422],{"class":125,"line":19342},[123,102423,102147],{"class":143},[123,102425,102426],{"class":125,"line":19355},[123,102427,102152],{"class":143},[123,102429,102430],{"class":125,"line":19360},[123,102431,102157],{"class":143},[123,102433,102434],{"class":125,"line":35045},[123,102435,102162],{"class":143},[123,102437,102438],{"class":125,"line":35051},[123,102439,102167],{"class":143},[123,102441,102442],{"class":125,"line":35057},[123,102443,102172],{"class":143},[123,102445,102446],{"class":125,"line":35063},[123,102447,102177],{"class":143},[123,102449,102450],{"class":125,"line":35069},[123,102451,102182],{"class":143},[123,102453,102454],{"class":125,"line":35080},[123,102455,96322],{"class":143},[123,102457,102458,102461,102463,102465,102467],{"class":125,"line":35086},[123,102459,102460],{"class":129},"np.vsplit(aa,[",[123,102462,2692],{"class":164},[123,102464,2985],{"class":129},[123,102466,2926],{"class":164},[123,102468,444],{"class":129},[123,102470,102471],{"class":125,"line":35106},[123,102472,95958],{"class":2673},[123,102474,102475],{"class":125,"line":35112},[123,102476,96322],{"class":143},[123,102478,102479],{"class":125,"line":35123},[123,102480,101977],{"class":143},[123,102482,102483],{"class":125,"line":35129},[123,102484,101982],{"class":143},[123,102486,102487],{"class":125,"line":35135},[123,102488,101987],{"class":143},[123,102490,102491],{"class":125,"line":35141},[123,102492,102049],{"class":143},[123,102494,102495],{"class":125,"line":35147},[123,102496,102054],{"class":143},[123,102498,102499],{"class":125,"line":35153},[123,102500,102059],{"class":143},[123,102502,102503],{"class":125,"line":35159},[123,102504,102007],{"class":143},[2526,102506,102507],{},"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":118,"searchDepth":140,"depth":140,"links":102509},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101775,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102516,"title":102517,"body":102518,"description":2544,"extension":2545,"meta":103012,"navigation":231,"path":103013,"seo":103014,"stem":103015,"__hash__":103016},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102519,"toc":103003},[102520,102523,102526,102551,102555,102614,102666,102670,102672,102708,102762,102764,102802,102873,102877,102882,102886,102889,102922,102925,102929,102932,102935,102938,102941,102946,102950,102953,102956,102959,102962,102967,102971,102976,102979,103000],[10,102521,102517],{"id":102522},"_9数学函数",[19,102524,102525],{},"补充回顾：python的列表推导式",[113,102527,102529],{"className":115,"code":102528,"language":117,"meta":118,"style":118},"[1\u002Fi for i in a]\n",[120,102530,102531],{"__ignoreMap":118},[123,102532,102533,102535,102537,102539,102542,102544,102546,102548],{"class":125,"line":126},[123,102534,839],{"class":129},[123,102536,2825],{"class":164},[123,102538,3187],{"class":133},[123,102540,102541],{"class":129},"i ",[123,102543,1399],{"class":133},[123,102545,11870],{"class":129},[123,102547,1405],{"class":133},[123,102549,102550],{"class":129}," a]\n",[14,102552,102554],{"id":102553},"_91-求倒数","9.1 求倒数",[113,102556,102558],{"className":115,"code":102557,"language":117,"meta":118,"style":118},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[120,102559,102560,102565,102593,102605],{"__ignoreMap":118},[123,102561,102562],{"class":125,"line":126},[123,102563,102564],{"class":2673},"#数组求倒数\n",[123,102566,102567,102569,102571,102573,102575,102577,102579,102581,102583,102585,102587,102589,102591],{"class":125,"line":140},[123,102568,2846],{"class":129},[123,102570,134],{"class":133},[123,102572,839],{"class":129},[123,102574,2825],{"class":164},[123,102576,2985],{"class":129},[123,102578,2692],{"class":164},[123,102580,2985],{"class":129},[123,102582,2686],{"class":164},[123,102584,2985],{"class":129},[123,102586,2901],{"class":164},[123,102588,2985],{"class":129},[123,102590,2926],{"class":164},[123,102592,998],{"class":129},[123,102594,102595,102597,102599,102602],{"class":125,"line":156},[123,102596,2871],{"class":129},[123,102598,134],{"class":133},[123,102600,102601],{"class":129},"np.array(a)",[123,102603,102604],{"class":2673},"#将列表转换为数组\n",[123,102606,102607,102609,102611],{"class":125,"line":168},[123,102608,2825],{"class":164},[123,102610,3187],{"class":133},[123,102612,102613],{"class":129},"b\n",[113,102615,102617],{"className":115,"code":102616,"language":117,"meta":118,"style":118},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[120,102618,102619,102647,102656,102661],{"__ignoreMap":118},[123,102620,102621,102623,102625,102627,102629,102631,102633,102635,102637,102639,102641,102643,102645],{"class":125,"line":126},[123,102622,2846],{"class":129},[123,102624,134],{"class":133},[123,102626,839],{"class":129},[123,102628,2825],{"class":164},[123,102630,2985],{"class":129},[123,102632,2692],{"class":164},[123,102634,2985],{"class":129},[123,102636,2686],{"class":164},[123,102638,2985],{"class":129},[123,102640,2901],{"class":164},[123,102642,2985],{"class":129},[123,102644,2926],{"class":164},[123,102646,998],{"class":129},[123,102648,102649,102651,102653],{"class":125,"line":140},[123,102650,2871],{"class":129},[123,102652,134],{"class":133},[123,102654,102655],{"class":129},"np.array(a)\n",[123,102657,102658],{"class":125,"line":156},[123,102659,102660],{"class":2673},"#调用numpy中的函数reciprocal()\n",[123,102662,102663],{"class":125,"line":168},[123,102664,102665],{"class":129},"np.reciprocal(b)\n",[14,102667,102669],{"id":102668},"_92-求平方","9.2 求平方",[19,102671,96924],{},[113,102673,102675],{"className":115,"code":102674,"language":117,"meta":118,"style":118},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[120,102676,102677,102682,102687,102703],{"__ignoreMap":118},[123,102678,102679],{"class":125,"line":126},[123,102680,102681],{"class":2673},"#square()，求平方\n",[123,102683,102684],{"class":125,"line":140},[123,102685,102686],{"class":2673},"#一维数组\n",[123,102688,102689,102691,102693,102695,102697,102699,102701],{"class":125,"line":156},[123,102690,2846],{"class":129},[123,102692,134],{"class":133},[123,102694,95396],{"class":129},[123,102696,2825],{"class":164},[123,102698,2985],{"class":129},[123,102700,2193],{"class":164},[123,102702,288],{"class":129},[123,102704,102705],{"class":125,"line":168},[123,102706,102707],{"class":129},"np.square(a)\n",[113,102709,102711],{"className":115,"code":102710,"language":117,"meta":118,"style":118},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[120,102712,102713,102718,102723,102744],{"__ignoreMap":118},[123,102714,102715],{"class":125,"line":126},[123,102716,102717],{"class":2673},"#或者通过循环遍历的形式来计算\n",[123,102719,102720],{"class":125,"line":140},[123,102721,102722],{"class":2673},"#这是一个列表\n",[123,102724,102725,102728,102730,102732,102734,102736,102738,102741],{"class":125,"line":156},[123,102726,102727],{"class":129},"[i",[123,102729,3060],{"class":133},[123,102731,102541],{"class":129},[123,102733,1399],{"class":133},[123,102735,11870],{"class":129},[123,102737,1405],{"class":133},[123,102739,102740],{"class":129}," a]",[123,102742,102743],{"class":2673},"#这个求完之后在数列当中\n",[123,102745,102746,102749,102751,102753,102755,102757,102759],{"class":125,"line":168},[123,102747,102748],{"class":129},"np.array([i",[123,102750,3060],{"class":133},[123,102752,102541],{"class":129},[123,102754,1399],{"class":133},[123,102756,11870],{"class":129},[123,102758,1405],{"class":133},[123,102760,102761],{"class":129}," a])\n",[19,102763,95685],{},[113,102765,102767],{"className":115,"code":102766,"language":117,"meta":118,"style":118},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[120,102768,102769,102773,102797],{"__ignoreMap":118},[123,102770,102771],{"class":125,"line":126},[123,102772,95695],{"class":2673},[123,102774,102775,102777,102779,102781,102783,102785,102787,102789,102791,102793,102795],{"class":125,"line":140},[123,102776,95700],{"class":129},[123,102778,134],{"class":133},[123,102780,95396],{"class":129},[123,102782,2825],{"class":164},[123,102784,2985],{"class":129},[123,102786,2269],{"class":164},[123,102788,95401],{"class":129},[123,102790,2901],{"class":164},[123,102792,2985],{"class":129},[123,102794,2686],{"class":164},[123,102796,288],{"class":129},[123,102798,102799],{"class":125,"line":156},[123,102800,102801],{"class":129},"np.square(aa)\n",[113,102803,102805],{"className":115,"code":102804,"language":117,"meta":118,"style":118},"#传统的方式\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",[120,102806,102807,102812,102821,102837,102853,102868],{"__ignoreMap":118},[123,102808,102809],{"class":125,"line":126},[123,102810,102811],{"class":2673},"#传统的方式\n",[123,102813,102814,102816,102818],{"class":125,"line":140},[123,102815,100580],{"class":129},[123,102817,134],{"class":133},[123,102819,102820],{"class":129},"np.empty_like(aa)\n",[123,102822,102823,102825,102827,102829,102831,102833,102835],{"class":125,"line":156},[123,102824,1399],{"class":133},[123,102826,11870],{"class":129},[123,102828,1405],{"class":133},[123,102830,34855],{"class":164},[123,102832,1315],{"class":129},[123,102834,2901],{"class":164},[123,102836,33201],{"class":129},[123,102838,102839,102841,102843,102845,102847,102849,102851],{"class":125,"line":168},[123,102840,5641],{"class":133},[123,102842,11932],{"class":129},[123,102844,1405],{"class":133},[123,102846,34855],{"class":164},[123,102848,1315],{"class":129},[123,102850,2686],{"class":164},[123,102852,33201],{"class":129},[123,102854,102855,102858,102860,102863,102865],{"class":125,"line":268},[123,102856,102857],{"class":129},"        bb[i,j]",[123,102859,134],{"class":133},[123,102861,102862],{"class":129},"aa[i,j]",[123,102864,3060],{"class":133},[123,102866,102867],{"class":129},"aa[i,j]\n",[123,102869,102870],{"class":125,"line":291},[123,102871,102872],{"class":129},"bb\n",[14,102874,102876],{"id":102875},"_93-求各元素的符号","9.3 求各元素的符号",[19,102878,102879],{},[3929,102880],{"alt":118,"src":102881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102883,102885],{"id":102884},"_94-modf函数","9.4 modf函数",[19,102887,102888],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[113,102890,102892],{"className":115,"code":102891,"language":117,"meta":118,"style":118},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[120,102893,102894,102917],{"__ignoreMap":118},[123,102895,102896,102898,102900,102902,102904,102906,102908,102910,102912,102915],{"class":125,"line":126},[123,102897,2846],{"class":129},[123,102899,134],{"class":133},[123,102901,95396],{"class":129},[123,102903,3135],{"class":133},[123,102905,2193],{"class":164},[123,102907,2985],{"class":129},[123,102909,2193],{"class":164},[123,102911,2985],{"class":129},[123,102913,102914],{"class":164},"0.3",[123,102916,288],{"class":129},[123,102918,102919],{"class":125,"line":140},[123,102920,102921],{"class":129},"np.modf(a)\n",[19,102923,102924],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102926,102928],{"id":102927},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102930,102931],{},"np.cell()",[19,102933,102934],{},"np.floor()",[19,102936,102937],{},"np.rint()",[19,102939,102940],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102942,102943],{},[3929,102944],{"alt":118,"src":102945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102947,102949],{"id":102948},"_96-around函数","9.6 around()函数",[19,102951,102952],{},"around()函数也可以实现对数的小数位数进行操作",[19,102954,102955],{},"其中的参数：",[19,102957,102958],{},"1.要传的数组",[19,102960,102961],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102963,102964],{},[3929,102965],{"alt":118,"src":102966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102968,102970],{"id":102969},"_97-三角函数","9.7 三角函数",[19,102972,102973],{},[3929,102974],{"alt":118,"src":102975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102977,102978],{},"引入图像模块非常重要",[113,102980,102982],{"className":115,"code":102981,"language":117,"meta":118,"style":118},"from matplotlib import pyplot as plt\n",[120,102983,102984],{"__ignoreMap":118},[123,102985,102986,102988,102991,102993,102996,102998],{"class":125,"line":126},[123,102987,391],{"class":133},[123,102989,102990],{"class":129}," matplotlib ",[123,102992,223],{"class":133},[123,102994,102995],{"class":129}," pyplot ",[123,102997,547],{"class":133},[123,102999,33851],{"class":129},[2526,103001,103002],{},"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":118,"searchDepth":140,"depth":140,"links":103004},[103005,103006,103007,103008,103009,103010,103011],{"id":102553,"depth":140,"text":102554},{"id":102668,"depth":140,"text":102669},{"id":102875,"depth":140,"text":102876},{"id":102884,"depth":140,"text":102885},{"id":102927,"depth":140,"text":102928},{"id":102948,"depth":140,"text":102949},{"id":102969,"depth":140,"text":102970},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102517,"description":2544},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103018,"title":103019,"body":103020,"description":2544,"extension":2545,"meta":103024,"navigation":231,"path":103025,"seo":103026,"stem":103027,"__hash__":103028},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103021,"toc":103022},[],{"title":118,"searchDepth":140,"depth":140,"links":103023},[],{"category":52827},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103019,"description":2544},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103030,"title":103031,"body":103032,"description":118,"extension":2545,"meta":105038,"navigation":231,"path":105039,"seo":105040,"stem":105041,"__hash__":105042},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103033,"toc":105014},[103034,103037,103041,103044,103047,103053,103056,103079,103082,103116,103119,103160,103164,103167,103260,103263,103307,103310,103327,103330,103344,103347,103350,103395,103398,103435,103439,103442,103448,103453,103473,103477,103480,103546,103549,103567,103571,103574,103603,103613,103619,103623,103626,103632,103643,103647,103650,103680,103683,103962,103965,103968,103979,103982,103985,104007,104014,104017,104035,104038,104041,104054,104062,104065,104091,104097,104100,104103,104113,104125,104145,104154,104174,104184,104208,104221,104235,104240,104281,104298,104323,104335,104355,104361,104406,104425,104442,104455,104471,104478,104490,104499,104534,104555,104580,104593,104617,104632,104657,104660,104681,104690,104693,104704,104708,104711,104717,104729,104736,104740,104743,104755,104758,104772,104775,104785,104795,104798,104838,104841,104845,104851,104854,104868,104872,104875,104908,104912,104915,104938,104946,104949,104955,104961,104964,104967,104995,104999,105002,105008,105011],[10,103035,103031],{"id":103036},"_1环境安装与第一个-mujoco-程序",[14,103038,103040],{"id":103039},"_1目标说明","1.目标说明",[19,103042,103043],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,103045,103046],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[113,103048,103051],{"className":103049,"code":103050,"language":7621,"meta":118},[7619],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[120,103052,103050],{"__ignoreMap":118},[19,103054,103055],{},"需要掌握:",[26,103057,103058,103061,103064,103069,103074],{},[29,103059,103060],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,103062,103063],{},"Python 虚拟环境创建",[29,103065,103066],{},[120,103067,103068],{},"mujoco.MjModel",[29,103070,103071],{},[120,103072,103073],{},"mujoco.MjData",[29,103075,103076],{},[120,103077,103078],{},"mujoco.mj_step(model, data)",[19,103080,103081],{},"MuJoCo 中最重要的两个对象:",[48,103083,103084,103094],{},[51,103085,103086],{},[54,103087,103088,103091],{},[57,103089,103090],{"align":26163},"对象",[57,103092,103093],{"align":26163},"含义",[64,103095,103096,103106],{},[54,103097,103098,103103],{},[69,103099,103100],{"align":26163},[120,103101,103102],{},"MjModel",[69,103104,103105],{"align":26163},"模型结构，来自 XML，基本不随时间变化",[54,103107,103108,103113],{},[69,103109,103110],{"align":26163},[120,103111,103112],{},"MjData",[69,103114,103115],{"align":26163},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,103117,103118],{},"可以先用一个类比理解：",[48,103120,103121,103131],{},[51,103122,103123],{},[54,103124,103125,103128],{},[57,103126,103127],{"align":26163},"类比",[57,103129,103130],{"align":26163},"MuJoCo 对象",[64,103132,103133,103142,103151],{},[54,103134,103135,103138],{},[69,103136,103137],{"align":26163},"游戏地图和角色配置",[69,103139,103140],{"align":26163},[120,103141,103102],{},[54,103143,103144,103147],{},[69,103145,103146],{"align":26163},"游戏运行到当前帧的状态",[69,103148,103149],{"align":26163},[120,103150,103112],{},[54,103152,103153,103156],{},[69,103154,103155],{"align":26163},"前进一帧",[69,103157,103158],{"align":26163},[120,103159,103078],{},[14,103161,103163],{"id":103162},"_2环境与依赖安装","2.环境与依赖安装",[19,103165,103166],{},"Fedora 44 系统依赖:",[113,103168,103170],{"className":328,"code":103169,"language":330,"meta":118,"style":118},"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",[120,103171,103172,103184,103197,103210,103220,103230,103249],{"__ignoreMap":118},[123,103173,103174,103176,103178,103180,103182],{"class":125,"line":126},[123,103175,26999],{"class":337},[123,103177,28736],{"class":143},[123,103179,341],{"class":143},[123,103181,28821],{"class":164},[123,103183,27100],{"class":164},[123,103185,103186,103189,103192,103195],{"class":125,"line":140},[123,103187,103188],{"class":143},"  python3",[123,103190,103191],{"class":143}," python3-pip",[123,103193,103194],{"class":143}," python3-virtualenv",[123,103196,27100],{"class":164},[123,103198,103199,103202,103205,103208],{"class":125,"line":156},[123,103200,103201],{"class":143},"  mesa-libGL",[123,103203,103204],{"class":143}," mesa-libGLU",[123,103206,103207],{"class":143}," mesa-dri-drivers",[123,103209,27100],{"class":164},[123,103211,103212,103215,103218],{"class":125,"line":168},[123,103213,103214],{"class":143},"  libglvnd-glx",[123,103216,103217],{"class":143}," libglvnd-opengl",[123,103219,27100],{"class":164},[123,103221,103222,103225,103228],{"class":125,"line":268},[123,103223,103224],{"class":143},"  glfw",[123,103226,103227],{"class":143}," glfw-devel",[123,103229,27100],{"class":164},[123,103231,103232,103235,103238,103241,103244,103247],{"class":125,"line":291},[123,103233,103234],{"class":143},"  libX11",[123,103236,103237],{"class":143}," libXcursor",[123,103239,103240],{"class":143}," libXi",[123,103242,103243],{"class":143}," libXinerama",[123,103245,103246],{"class":143}," libXrandr",[123,103248,27100],{"class":164},[123,103250,103251,103254,103257],{"class":125,"line":300},[123,103252,103253],{"class":143},"  gcc",[123,103255,103256],{"class":143}," gcc-c++",[123,103258,103259],{"class":143}," make\n",[19,103261,103262],{},"创建 Python 环境:",[113,103264,103266],{"className":328,"code":103265,"language":330,"meta":118,"style":118},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[120,103267,103268,103282,103290],{"__ignoreMap":118},[123,103269,103270,103273,103276,103279],{"class":125,"line":126},[123,103271,103272],{"class":337},"python3",[123,103274,103275],{"class":164}," -m",[123,103277,103278],{"class":143}," venv",[123,103280,103281],{"class":143}," .venv\n",[123,103283,103284,103287],{"class":125,"line":140},[123,103285,103286],{"class":164},"source",[123,103288,103289],{"class":143}," .venv\u002Fbin\u002Factivate\n",[123,103291,103292,103294,103296,103299,103301,103304],{"class":125,"line":156},[123,103293,117],{"class":337},[123,103295,103275],{"class":164},[123,103297,103298],{"class":143}," pip",[123,103300,341],{"class":143},[123,103302,103303],{"class":164}," --upgrade",[123,103305,103306],{"class":143}," pip\n",[19,103308,103309],{},"pip 安装:",[113,103311,103313],{"className":328,"code":103312,"language":330,"meta":118,"style":118},"pip install \"mujoco>=2.3\" numpy\n",[120,103314,103315],{"__ignoreMap":118},[123,103316,103317,103319,103321,103324],{"class":125,"line":126},[123,103318,338],{"class":337},[123,103320,341],{"class":143},[123,103322,103323],{"class":143}," \"mujoco>=2.3\"",[123,103325,103326],{"class":143}," numpy\n",[19,103328,103329],{},"安装完成后，先做最小检查：",[113,103331,103333],{"className":328,"code":103332,"language":330,"meta":118,"style":118},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[120,103334,103335],{"__ignoreMap":118},[123,103336,103337,103339,103341],{"class":125,"line":126},[123,103338,117],{"class":337},[123,103340,32778],{"class":164},[123,103342,103343],{"class":143}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103345,103346],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103348,103349],{},"conda 安装:",[113,103351,103353],{"className":328,"code":103352,"language":330,"meta":118,"style":118},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[120,103354,103355,103375,103385],{"__ignoreMap":118},[123,103356,103357,103359,103361,103363,103366,103369,103372],{"class":125,"line":126},[123,103358,32750],{"class":337},[123,103360,31596],{"class":143},[123,103362,27537],{"class":164},[123,103364,103365],{"class":143}," mujoco-study",[123,103367,103368],{"class":143}," python=",[123,103370,103371],{"class":164},"3.10",[123,103373,103374],{"class":164}," -y\n",[123,103376,103377,103379,103382],{"class":125,"line":140},[123,103378,32750],{"class":337},[123,103380,103381],{"class":143}," activate",[123,103383,103384],{"class":143}," mujoco-study\n",[123,103386,103387,103389,103391,103393],{"class":125,"line":156},[123,103388,338],{"class":337},[123,103390,341],{"class":143},[123,103392,103323],{"class":143},[123,103394,103326],{"class":143},[19,103396,103397],{},"版本冲突说明:",[26,103399,103400,103406,103416,103425],{},[29,103401,103402,103403,2494],{},"不要安装 ",[120,103404,103405],{},"mujoco-py",[29,103407,103408,103409,103411,103412,103415],{},"如果旧项目里同时安装了 ",[120,103410,103405],{}," 和 ",[120,103413,103414],{},"mujoco","，建议新建干净虚拟环境。",[29,103417,103418,103421,103422,2494],{},[120,103419,103420],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[120,103423,103424],{},"~\u002F.mujoco\u002Fmujoco210",[29,103426,103427,103428,84936,103431,103434],{},"离屏渲染可能涉及 OpenGL 后端，",[120,103429,103430],{},"MUJOCO_GL=egl",[120,103432,103433],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103436,103438],{"id":103437},"_3核心概念解释","3.核心概念解释",[19,103440,103441],{},"MuJoCo 的基本执行流程:",[113,103443,103446],{"className":103444,"code":103445,"language":7621,"meta":118},[7619],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[120,103447,103445],{"__ignoreMap":118},[19,103449,103450,103452],{},[120,103451,103102],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103454,103455,103457,103458,2820,103461,2820,103464,2820,103467,2820,103470,2494],{},[120,103456,103112],{}," 存放仿真运行时状态，例如 ",[120,103459,103460],{},"data.time",[120,103462,103463],{},"data.qpos",[120,103465,103466],{},"data.qvel",[120,103468,103469],{},"data.ctrl",[120,103471,103472],{},"data.xpos",[2587,103474,103476],{"id":103475},"xml-是什么","XML 是什么",[19,103478,103479],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[113,103481,103483],{"className":55470,"code":103482,"language":55472,"meta":118,"style":118},"\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",[120,103484,103485,103507,103538],{"__ignoreMap":118},[123,103486,103487,103489,103491,103493,103495,103497,103500,103502,103505],{"class":125,"line":126},[123,103488,3509],{"class":129},[123,103490,54205],{"class":53707},[123,103492,17350],{"class":337},[123,103494,134],{"class":129},[123,103496,55894],{"class":143},[123,103498,103499],{"class":337}," pos",[123,103501,134],{"class":129},[123,103503,103504],{"class":143},"\"0 0 1\"",[123,103506,53714],{"class":129},[123,103508,103509,103511,103514,103516,103518,103521,103523,103525,103527,103530,103532,103535],{"class":125,"line":140},[123,103510,54548],{"class":129},[123,103512,103513],{"class":53707},"geom",[123,103515,17350],{"class":337},[123,103517,134],{"class":129},[123,103519,103520],{"class":143},"\"box_geom\"",[123,103522,56227],{"class":337},[123,103524,134],{"class":129},[123,103526,55894],{"class":143},[123,103528,103529],{"class":337}," size",[123,103531,134],{"class":129},[123,103533,103534],{"class":143},"\"0.1 0.1 0.1\"",[123,103536,103537],{"class":129},"\u002F>\n",[123,103539,103540,103542,103544],{"class":125,"line":156},[123,103541,54190],{"class":129},[123,103543,54205],{"class":53707},[123,103545,53714],{"class":129},[19,103547,103548],{},"这段意思是：",[26,103550,103551,103557,103564],{},[29,103552,103553,103554,103556],{},"创建一个叫 ",[120,103555,56117],{}," 的刚体。",[29,103558,103559,103560,103563],{},"它初始放在 ",[120,103561,103562],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,103565,103566],{},"它里面有一个盒子形状的几何体。",[2587,103568,103570],{"id":103569},"timestep-是什么","timestep 是什么",[19,103572,103573],{},"XML 里的：",[113,103575,103577],{"className":55470,"code":103576,"language":55472,"meta":118,"style":118},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[120,103578,103579],{"__ignoreMap":118},[123,103580,103581,103583,103585,103588,103590,103593,103596,103598,103601],{"class":125,"line":126},[123,103582,3509],{"class":129},[123,103584,71567],{"class":53707},[123,103586,103587],{"class":337}," timestep",[123,103589,134],{"class":129},[123,103591,103592],{"class":143},"\"0.01\"",[123,103594,103595],{"class":337}," gravity",[123,103597,134],{"class":129},[123,103599,103600],{"class":143},"\"0 0 -9.81\"",[123,103602,103537],{"class":129},[19,103604,103605,103606,103609,103610,103612],{},"表示每调用一次 ",[120,103607,103608],{},"mj_step","，仿真时间前进 ",[120,103611,41394],{}," 秒。循环 100 次，大约就是 1 秒：",[113,103614,103617],{"className":103615,"code":103616,"language":7621,"meta":118},[7619],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[120,103618,103616],{"__ignoreMap":118},[2587,103620,103622],{"id":103621},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103624,103625],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[113,103627,103630],{"className":103628,"code":103629,"language":7621,"meta":118},[7619],"x y z qw qx qy qz\n",[120,103631,103629],{"__ignoreMap":118},[19,103633,103634,103635,103638,103639,103642],{},"表示一个自由刚体的位置和姿态。其中 ",[120,103636,103637],{},"x y z"," 是位置，",[120,103640,103641],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103644,103646],{"id":103645},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103648,103649],{},"新建文件:",[113,103651,103653],{"className":328,"code":103652,"language":330,"meta":118,"style":118},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[120,103654,103655,103665,103672],{"__ignoreMap":118},[123,103656,103657,103660,103662],{"class":125,"line":126},[123,103658,103659],{"class":337},"mkdir",[123,103661,31636],{"class":164},[123,103663,103664],{"class":143}," mujoco_tutorial\n",[123,103666,103667,103670],{"class":125,"line":140},[123,103668,103669],{"class":164},"cd",[123,103671,103664],{"class":143},[123,103673,103674,103677],{"class":125,"line":156},[123,103675,103676],{"class":337},"touch",[123,103678,103679],{"class":143}," ch1_first_sim.py\n",[19,103681,103682],{},"写入:",[113,103684,103686],{"className":115,"code":103685,"language":117,"meta":118,"style":118},"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",[120,103687,103688,103695,103699,103703,103713,103718,103723,103727,103732,103737,103741,103746,103751,103756,103761,103766,103771,103775,103779,103783,103796,103810,103819,103823,103835,103847,103859,103871,103883,103887,103904,103909,103913,103924,103935,103939,103943,103957],{"__ignoreMap":118},[123,103689,103690,103692],{"class":125,"line":126},[123,103691,223],{"class":133},[123,103693,103694],{"class":129}," mujoco\n",[123,103696,103697],{"class":125,"line":140},[123,103698,232],{"emptyLinePlaceholder":231},[123,103700,103701],{"class":125,"line":156},[123,103702,232],{"emptyLinePlaceholder":231},[123,103704,103705,103708,103710],{"class":125,"line":168},[123,103706,103707],{"class":164},"XML",[123,103709,15995],{"class":133},[123,103711,103712],{"class":143}," \"\"\"\n",[123,103714,103715],{"class":125,"line":268},[123,103716,103717],{"class":143},"\u003Cmujoco model=\"first_sim\">\n",[123,103719,103720],{"class":125,"line":291},[123,103721,103722],{"class":143},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[123,103724,103725],{"class":125,"line":300},[123,103726,232],{"emptyLinePlaceholder":231},[123,103728,103729],{"class":125,"line":305},[123,103730,103731],{"class":143},"  \u003Cworldbody>\n",[123,103733,103734],{"class":125,"line":316},[123,103735,103736],{"class":143},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[123,103738,103739],{"class":125,"line":673},[123,103740,232],{"emptyLinePlaceholder":231},[123,103742,103743],{"class":125,"line":692},[123,103744,103745],{"class":143},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[123,103747,103748],{"class":125,"line":713},[123,103749,103750],{"class":143},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[123,103752,103753],{"class":125,"line":718},[123,103754,103755],{"class":143},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[123,103757,103758],{"class":125,"line":1138},[123,103759,103760],{"class":143},"    \u003C\u002Fbody>\n",[123,103762,103763],{"class":125,"line":1429},[123,103764,103765],{"class":143},"  \u003C\u002Fworldbody>\n",[123,103767,103768],{"class":125,"line":1439},[123,103769,103770],{"class":143},"\u003C\u002Fmujoco>\n",[123,103772,103773],{"class":125,"line":1444},[123,103774,98092],{"class":143},[123,103776,103777],{"class":125,"line":1453},[123,103778,232],{"emptyLinePlaceholder":231},[123,103780,103781],{"class":125,"line":1458},[123,103782,232],{"emptyLinePlaceholder":231},[123,103784,103785,103787,103789,103792,103794],{"class":125,"line":1476},[123,103786,34359],{"class":133},[123,103788,4417],{"class":337},[123,103790,103791],{"class":129},"() -> ",[123,103793,98080],{"class":164},[123,103795,1344],{"class":129},[123,103797,103798,103801,103803,103806,103808],{"class":125,"line":1494},[123,103799,103800],{"class":129},"    model ",[123,103802,134],{"class":133},[123,103804,103805],{"class":129}," mujoco.MjModel.from_xml_string(",[123,103807,103707],{"class":164},[123,103809,288],{"class":129},[123,103811,103812,103814,103816],{"class":125,"line":1499},[123,103813,1349],{"class":129},[123,103815,134],{"class":133},[123,103817,103818],{"class":129}," mujoco.MjData(model)\n",[123,103820,103821],{"class":125,"line":1517},[123,103822,232],{"emptyLinePlaceholder":231},[123,103824,103825,103827,103829,103832],{"class":125,"line":1534},[123,103826,33714],{"class":164},[123,103828,1315],{"class":129},[123,103830,103831],{"class":143},"\"nq:\"",[123,103833,103834],{"class":129},", model.nq)\n",[123,103836,103837,103839,103841,103844],{"class":125,"line":1539},[123,103838,33714],{"class":164},[123,103840,1315],{"class":129},[123,103842,103843],{"class":143},"\"nv:\"",[123,103845,103846],{"class":129},", model.nv)\n",[123,103848,103849,103851,103853,103856],{"class":125,"line":2080},[123,103850,33714],{"class":164},[123,103852,1315],{"class":129},[123,103854,103855],{"class":143},"\"nu:\"",[123,103857,103858],{"class":129},", model.nu)\n",[123,103860,103861,103863,103865,103868],{"class":125,"line":2097},[123,103862,33714],{"class":164},[123,103864,1315],{"class":129},[123,103866,103867],{"class":143},"\"initial time:\"",[123,103869,103870],{"class":129},", data.time)\n",[123,103872,103873,103875,103877,103880],{"class":125,"line":2114},[123,103874,33714],{"class":164},[123,103876,1315],{"class":129},[123,103878,103879],{"class":143},"\"initial qpos:\"",[123,103881,103882],{"class":129},", data.qpos.copy())\n",[123,103884,103885],{"class":125,"line":2125},[123,103886,232],{"emptyLinePlaceholder":231},[123,103888,103889,103891,103894,103896,103898,103900,103902],{"class":125,"line":2130},[123,103890,5641],{"class":133},[123,103892,103893],{"class":129}," _ ",[123,103895,1405],{"class":133},[123,103897,34855],{"class":164},[123,103899,1315],{"class":129},[123,103901,259],{"class":164},[123,103903,33201],{"class":129},[123,103905,103906],{"class":125,"line":5033},[123,103907,103908],{"class":129},"        mujoco.mj_step(model, data)\n",[123,103910,103911],{"class":125,"line":5041},[123,103912,232],{"emptyLinePlaceholder":231},[123,103914,103915,103917,103919,103922],{"class":125,"line":5046},[123,103916,33714],{"class":164},[123,103918,1315],{"class":129},[123,103920,103921],{"class":143},"\"final time:\"",[123,103923,103870],{"class":129},[123,103925,103926,103928,103930,103933],{"class":125,"line":5052},[123,103927,33714],{"class":164},[123,103929,1315],{"class":129},[123,103931,103932],{"class":143},"\"final qpos:\"",[123,103934,103882],{"class":129},[123,103936,103937],{"class":125,"line":5058},[123,103938,232],{"emptyLinePlaceholder":231},[123,103940,103941],{"class":125,"line":5063},[123,103942,232],{"emptyLinePlaceholder":231},[123,103944,103945,103947,103949,103952,103955],{"class":125,"line":10380},[123,103946,3998],{"class":133},[123,103948,33635],{"class":164},[123,103950,103951],{"class":133}," ==",[123,103953,103954],{"class":143}," \"__main__\"",[123,103956,1344],{"class":129},[123,103958,103959],{"class":125,"line":10404},[123,103960,103961],{"class":129},"    main()\n",[2587,103963,103964],{"id":103964},"代码逐段解释",[19,103966,103967],{},"导入库：",[113,103969,103971],{"className":115,"code":103970,"language":117,"meta":118,"style":118},"import mujoco\n",[120,103972,103973],{"__ignoreMap":118},[123,103974,103975,103977],{"class":125,"line":126},[123,103976,223],{"class":133},[123,103978,103694],{"class":129},[19,103980,103981],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103983,103984],{},"定义 XML：",[113,103986,103988],{"className":115,"code":103987,"language":117,"meta":118,"style":118},"XML = \"\"\"\n...\n\"\"\"\n",[120,103989,103990,103998,104003],{"__ignoreMap":118},[123,103991,103992,103994,103996],{"class":125,"line":126},[123,103993,103707],{"class":164},[123,103995,15995],{"class":133},[123,103997,103712],{"class":143},[123,103999,104000],{"class":125,"line":140},[123,104001,104002],{"class":143},"...\n",[123,104004,104005],{"class":125,"line":156},[123,104006,98092],{"class":143},[19,104008,104009,104010,104013],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[120,104011,104012],{},"freejoint"," 的方块。",[19,104015,104016],{},"编译模型：",[113,104018,104020],{"className":115,"code":104019,"language":117,"meta":118,"style":118},"model = mujoco.MjModel.from_xml_string(XML)\n",[120,104021,104022],{"__ignoreMap":118},[123,104023,104024,104027,104029,104031,104033],{"class":125,"line":126},[123,104025,104026],{"class":129},"model ",[123,104028,134],{"class":133},[123,104030,103805],{"class":129},[123,104032,103707],{"class":164},[123,104034,288],{"class":129},[19,104036,104037],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,104039,104040],{},"创建数据：",[113,104042,104044],{"className":115,"code":104043,"language":117,"meta":118,"style":118},"data = mujoco.MjData(model)\n",[120,104045,104046],{"__ignoreMap":118},[123,104047,104048,104050,104052],{"class":125,"line":126},[123,104049,130],{"class":129},[123,104051,134],{"class":133},[123,104053,103818],{"class":129},[19,104055,104056,104058,104059,104061],{},[120,104057,35812],{}," 会保存仿真当前状态。刚创建时，时间是 ",[120,104060,2799],{},"，方块还在初始位置。",[19,104063,104064],{},"推进仿真：",[113,104066,104068],{"className":115,"code":104067,"language":117,"meta":118,"style":118},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[120,104069,104070,104086],{"__ignoreMap":118},[123,104071,104072,104074,104076,104078,104080,104082,104084],{"class":125,"line":126},[123,104073,1399],{"class":133},[123,104075,103893],{"class":129},[123,104077,1405],{"class":133},[123,104079,34855],{"class":164},[123,104081,1315],{"class":129},[123,104083,259],{"class":164},[123,104085,33201],{"class":129},[123,104087,104088],{"class":125,"line":140},[123,104089,104090],{"class":129},"    mujoco.mj_step(model, data)\n",[19,104092,104093,104094,104096],{},"每次 ",[120,104095,103608],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[2587,104098,104099],{"id":104099},"代码逐行细讲",[19,104101,104102],{},"下面把完整代码按新手视角拆开讲。",[113,104104,104105],{"className":115,"code":103970,"language":117,"meta":118,"style":118},[120,104106,104107],{"__ignoreMap":118},[123,104108,104109,104111],{"class":125,"line":126},[123,104110,223],{"class":133},[123,104112,103694],{"class":129},[19,104114,104115,104117,104118,2820,104120,2820,104122,2494],{},[120,104116,223],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[120,104119,103068],{},[120,104121,103073],{},[120,104123,104124],{},"mujoco.mj_step",[113,104126,104127],{"className":115,"code":103987,"language":117,"meta":118,"style":118},[120,104128,104129,104137,104141],{"__ignoreMap":118},[123,104130,104131,104133,104135],{"class":125,"line":126},[123,104132,103707],{"class":164},[123,104134,15995],{"class":133},[123,104136,103712],{"class":143},[123,104138,104139],{"class":125,"line":140},[123,104140,104002],{"class":143},[123,104142,104143],{"class":125,"line":156},[123,104144,98092],{"class":143},[19,104146,104147,104149,104150,104153],{},[120,104148,103707],{}," 是一个变量名。右边的三引号 ",[120,104151,104152],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[113,104155,104156],{"className":55470,"code":103717,"language":55472,"meta":118,"style":118},[120,104157,104158],{"__ignoreMap":118},[123,104159,104160,104162,104164,104167,104169,104172],{"class":125,"line":126},[123,104161,3509],{"class":129},[123,104163,103414],{"class":53707},[123,104165,104166],{"class":337}," model",[123,104168,134],{"class":129},[123,104170,104171],{"class":143},"\"first_sim\"",[123,104173,53714],{"class":129},[19,104175,104176,104177,104180,104181,2494],{},"这是 XML 的根标签。",[120,104178,104179],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[120,104182,104183],{},"first_sim",[113,104185,104186],{"className":55470,"code":103576,"language":55472,"meta":118,"style":118},[120,104187,104188],{"__ignoreMap":118},[123,104189,104190,104192,104194,104196,104198,104200,104202,104204,104206],{"class":125,"line":126},[123,104191,3509],{"class":129},[123,104193,71567],{"class":53707},[123,104195,103587],{"class":337},[123,104197,134],{"class":129},[123,104199,103592],{"class":143},[123,104201,103595],{"class":337},[123,104203,134],{"class":129},[123,104205,103600],{"class":143},[123,104207,103537],{"class":129},[19,104209,104210,104212,104213,104216,104217,104220],{},[120,104211,71567],{}," 用来设置仿真参数。",[120,104214,104215],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[120,104218,104219],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[113,104222,104224],{"className":55470,"code":104223,"language":55472,"meta":118,"style":118},"\u003Cworldbody>\n",[120,104225,104226],{"__ignoreMap":118},[123,104227,104228,104230,104233],{"class":125,"line":126},[123,104229,3509],{"class":129},[123,104231,104232],{"class":53707},"worldbody",[123,104234,53714],{"class":129},[19,104236,104237,104239],{},[120,104238,104232],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[113,104241,104243],{"className":55470,"code":104242,"language":55472,"meta":118,"style":118},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[120,104244,104245],{"__ignoreMap":118},[123,104246,104247,104249,104251,104253,104255,104258,104260,104262,104265,104267,104269,104272,104274,104276,104279],{"class":125,"line":126},[123,104248,3509],{"class":129},[123,104250,103513],{"class":53707},[123,104252,17350],{"class":337},[123,104254,134],{"class":129},[123,104256,104257],{"class":143},"\"floor\"",[123,104259,56227],{"class":337},[123,104261,134],{"class":129},[123,104263,104264],{"class":143},"\"plane\"",[123,104266,103529],{"class":337},[123,104268,134],{"class":129},[123,104270,104271],{"class":143},"\"2 2 0.1\"",[123,104273,81165],{"class":337},[123,104275,134],{"class":129},[123,104277,104278],{"class":143},"\"0.8 0.8 0.8 1\"",[123,104280,103537],{"class":129},[19,104282,104283,104284,104286,104287,104290,104291,104294,104295,104297],{},"这行创建地面。",[120,104285,103513],{}," 是几何体。",[120,104288,104289],{},"name=\"floor\""," 是名字。",[120,104292,104293],{},"type=\"plane\""," 表示平面。",[120,104296,57513],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[113,104299,104301],{"className":55470,"code":104300,"language":55472,"meta":118,"style":118},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[120,104302,104303],{"__ignoreMap":118},[123,104304,104305,104307,104309,104311,104313,104315,104317,104319,104321],{"class":125,"line":126},[123,104306,3509],{"class":129},[123,104308,54205],{"class":53707},[123,104310,17350],{"class":337},[123,104312,134],{"class":129},[123,104314,55894],{"class":143},[123,104316,103499],{"class":337},[123,104318,134],{"class":129},[123,104320,103504],{"class":143},[123,104322,53714],{"class":129},[19,104324,104325,104326,2494,104328,104331,104332,104334],{},"这行创建一个刚体，名字叫 ",[120,104327,56117],{},[120,104329,104330],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[120,104333,103562],{},"，也就是离地面 1 米高。",[113,104336,104338],{"className":55470,"code":104337,"language":55472,"meta":118,"style":118},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[120,104339,104340],{"__ignoreMap":118},[123,104341,104342,104344,104346,104348,104350,104353],{"class":125,"line":126},[123,104343,3509],{"class":129},[123,104345,104012],{"class":53707},[123,104347,17350],{"class":337},[123,104349,134],{"class":129},[123,104351,104352],{"class":143},"\"box_free\"",[123,104354,103537],{"class":129},[19,104356,104357,104358,104360],{},"这行很重要。",[120,104359,104012],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[113,104362,104364],{"className":55470,"code":104363,"language":55472,"meta":118,"style":118},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[120,104365,104366],{"__ignoreMap":118},[123,104367,104368,104370,104372,104374,104376,104378,104380,104382,104384,104386,104388,104390,104393,104395,104397,104399,104401,104404],{"class":125,"line":126},[123,104369,3509],{"class":129},[123,104371,103513],{"class":53707},[123,104373,17350],{"class":337},[123,104375,134],{"class":129},[123,104377,103520],{"class":143},[123,104379,56227],{"class":337},[123,104381,134],{"class":129},[123,104383,55894],{"class":143},[123,104385,103529],{"class":337},[123,104387,134],{"class":129},[123,104389,103534],{"class":143},[123,104391,104392],{"class":337}," mass",[123,104394,134],{"class":129},[123,104396,6118],{"class":143},[123,104398,81165],{"class":337},[123,104400,134],{"class":129},[123,104402,104403],{"class":143},"\"1 0 0 1\"",[123,104405,103537],{"class":129},[19,104407,104408,104409,104412,104413,104416,104417,104420,104421,104424],{},"这行给 box body 添加一个盒子形状。",[120,104410,104411],{},"type=\"box\""," 表示形状是盒子。",[120,104414,104415],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[120,104418,104419],{},"mass=\"1\""," 表示质量是 1。",[120,104422,104423],{},"rgba=\"1 0 0 1\""," 表示红色。",[113,104426,104428],{"className":115,"code":104427,"language":117,"meta":118,"style":118},"def main() -> None:\n",[120,104429,104430],{"__ignoreMap":118},[123,104431,104432,104434,104436,104438,104440],{"class":125,"line":126},[123,104433,34359],{"class":133},[123,104435,4417],{"class":337},[123,104437,103791],{"class":129},[123,104439,98080],{"class":164},[123,104441,1344],{"class":129},[19,104443,104444,104446,104447,104450,104451,104454],{},[120,104445,34359],{}," 用来定义函数。这里定义了一个叫 ",[120,104448,104449],{},"main"," 的函数。",[120,104452,104453],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[113,104456,104457],{"className":115,"code":104019,"language":117,"meta":118,"style":118},[120,104458,104459],{"__ignoreMap":118},[123,104460,104461,104463,104465,104467,104469],{"class":125,"line":126},[123,104462,104026],{"class":129},[123,104464,134],{"class":133},[123,104466,103805],{"class":129},[123,104468,103707],{"class":164},[123,104470,288],{"class":129},[19,104472,104473,104474,104477],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[120,104475,104476],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[113,104479,104480],{"className":115,"code":104043,"language":117,"meta":118,"style":118},[120,104481,104482],{"__ignoreMap":118},[123,104483,104484,104486,104488],{"class":125,"line":126},[123,104485,130],{"class":129},[123,104487,134],{"class":133},[123,104489,103818],{"class":129},[19,104491,104492,104493,104495,104496,104498],{},"这行创建仿真数据。",[120,104494,35812],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[120,104497,35812],{}," 都会变化。",[113,104500,104502],{"className":115,"code":104501,"language":117,"meta":118,"style":118},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[120,104503,104504,104514,104524],{"__ignoreMap":118},[123,104505,104506,104508,104510,104512],{"class":125,"line":126},[123,104507,294],{"class":164},[123,104509,1315],{"class":129},[123,104511,103831],{"class":143},[123,104513,103834],{"class":129},[123,104515,104516,104518,104520,104522],{"class":125,"line":140},[123,104517,294],{"class":164},[123,104519,1315],{"class":129},[123,104521,103843],{"class":143},[123,104523,103846],{"class":129},[123,104525,104526,104528,104530,104532],{"class":125,"line":156},[123,104527,294],{"class":164},[123,104529,1315],{"class":129},[123,104531,103855],{"class":143},[123,104533,103858],{"class":129},[19,104535,104536,104538,104539,104542,104543,104546,104547,104550,104551,104554],{},[120,104537,294],{}," 用来输出信息。",[120,104540,104541],{},"model.nq"," 是位置变量数量，",[120,104544,104545],{},"model.nv"," 是速度变量数量，",[120,104548,104549],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[120,104552,104553],{},"nu"," 是 0。",[113,104556,104558],{"className":115,"code":104557,"language":117,"meta":118,"style":118},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[120,104559,104560,104570],{"__ignoreMap":118},[123,104561,104562,104564,104566,104568],{"class":125,"line":126},[123,104563,294],{"class":164},[123,104565,1315],{"class":129},[123,104567,103867],{"class":143},[123,104569,103870],{"class":129},[123,104571,104572,104574,104576,104578],{"class":125,"line":140},[123,104573,294],{"class":164},[123,104575,1315],{"class":129},[123,104577,103879],{"class":143},[123,104579,103882],{"class":129},[19,104581,104582,104583,104585,104586,104588,104589,104592],{},"这里打印初始时间和初始位置。",[120,104584,103460],{}," 一开始是 0。",[120,104587,103463],{}," 是位置数组。",[120,104590,104591],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[113,104594,104595],{"className":115,"code":104067,"language":117,"meta":118,"style":118},[120,104596,104597,104613],{"__ignoreMap":118},[123,104598,104599,104601,104603,104605,104607,104609,104611],{"class":125,"line":126},[123,104600,1399],{"class":133},[123,104602,103893],{"class":129},[123,104604,1405],{"class":133},[123,104606,34855],{"class":164},[123,104608,1315],{"class":129},[123,104610,259],{"class":164},[123,104612,33201],{"class":129},[123,104614,104615],{"class":125,"line":140},[123,104616,104090],{"class":129},[19,104618,104619,104621,104622,104625,104626,104628,104629,104631],{},[120,104620,1399],{}," 是循环。",[120,104623,104624],{},"range(100)"," 表示循环 100 次。",[120,104627,3591],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[120,104630,103608],{},"，仿真就前进一步。",[113,104633,104635],{"className":115,"code":104634,"language":117,"meta":118,"style":118},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[120,104636,104637,104647],{"__ignoreMap":118},[123,104638,104639,104641,104643,104645],{"class":125,"line":126},[123,104640,294],{"class":164},[123,104642,1315],{"class":129},[123,104644,103921],{"class":143},[123,104646,103870],{"class":129},[123,104648,104649,104651,104653,104655],{"class":125,"line":140},[123,104650,294],{"class":164},[123,104652,1315],{"class":129},[123,104654,103932],{"class":143},[123,104656,103882],{"class":129},[19,104658,104659],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[113,104661,104663],{"className":115,"code":104662,"language":117,"meta":118,"style":118},"if __name__ == \"__main__\":\n    main()\n",[120,104664,104665,104677],{"__ignoreMap":118},[123,104666,104667,104669,104671,104673,104675],{"class":125,"line":126},[123,104668,3998],{"class":133},[123,104670,33635],{"class":164},[123,104672,103951],{"class":133},[123,104674,103954],{"class":143},[123,104676,1344],{"class":129},[123,104678,104679],{"class":125,"line":140},[123,104680,103961],{"class":129},[19,104682,104683,104684,104687,104688,2494],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[120,104685,104686],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[120,104689,104686],{},[19,104691,104692],{},"运行:",[113,104694,104696],{"className":328,"code":104695,"language":330,"meta":118,"style":118},"python ch1_first_sim.py\n",[120,104697,104698],{"__ignoreMap":118},[123,104699,104700,104702],{"class":125,"line":126},[123,104701,117],{"class":337},[123,104703,103679],{"class":143},[14,104705,104707],{"id":104706},"_5运行结果说明","5.运行结果说明",[19,104709,104710],{},"你应该看到类似输出:",[113,104712,104715],{"className":104713,"code":104714,"language":7621,"meta":118},[7619],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[120,104716,104714],{"__ignoreMap":118},[19,104718,104719,104721,104722,104725,104726,2494],{},[120,104720,104012],{}," 有 7 个位置变量: ",[120,104723,104724],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[120,104727,104728],{},"vx vy vz wx wy wz",[19,104730,104731,104732,104735],{},"你还会看到 ",[120,104733,104734],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104737,104739],{"id":104738},"_6验证步骤","6.验证步骤",[19,104741,104742],{},"确认版本:",[113,104744,104745],{"className":328,"code":103332,"language":330,"meta":118,"style":118},[120,104746,104747],{"__ignoreMap":118},[123,104748,104749,104751,104753],{"class":125,"line":126},[123,104750,117],{"class":337},[123,104752,32778],{"class":164},[123,104754,103343],{"class":143},[19,104756,104757],{},"确认导入的是官方 bindings:",[113,104759,104761],{"className":328,"code":104760,"language":330,"meta":118,"style":118},"python -c \"import mujoco; print(mujoco)\"\n",[120,104762,104763],{"__ignoreMap":118},[123,104764,104765,104767,104769],{"class":125,"line":126},[123,104766,117],{"class":337},[123,104768,32778],{"class":164},[123,104770,104771],{"class":143}," \"import mujoco; print(mujoco)\"\n",[19,104773,104774],{},"运行程序:",[113,104776,104777],{"className":328,"code":104695,"language":330,"meta":118,"style":118},[120,104778,104779],{"__ignoreMap":118},[123,104780,104781,104783],{"class":125,"line":126},[123,104782,117],{"class":337},[123,104784,103679],{"class":143},[19,104786,104787,104788,104791,104792,2494],{},"检查 ",[120,104789,104790],{},"final time"," 是否约等于 ",[120,104793,104794],{},"1.0",[19,104796,104797],{},"再做几个小实验：",[26,104799,104800,104810,104818,104831],{},[29,104801,104802,104803,104805,104806,104809],{},"把 ",[120,104804,104330],{}," 改成 ",[120,104807,104808],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104811,104802,104812,104805,104814,104817],{},[120,104813,104219],{},[120,104815,104816],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104819,104802,104820,104805,104822,104825,104826,104828,104829,2494],{},[120,104821,104215],{},[120,104823,104824],{},"timestep=\"0.005\"","，观察 100 步后的 ",[120,104827,104790],{}," 是否变成约 ",[120,104830,37739],{},[29,104832,104833,104834,104837],{},"删除 ",[120,104835,104836],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104839,104840],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104842,104844],{"id":104843},"_7常见错误与解决方案","7.常见错误与解决方案",[2587,104846,104848],{"id":104847},"modulenotfounderror-no-module-named-mujoco",[120,104849,104850],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104852,104853],{},"解决:",[113,104855,104857],{"className":328,"code":104856,"language":330,"meta":118,"style":118},"pip install \"mujoco>=2.3\"\n",[120,104858,104859],{"__ignoreMap":118},[123,104860,104861,104863,104865],{"class":125,"line":126},[123,104862,338],{"class":337},[123,104864,341],{"class":143},[123,104866,104867],{"class":143}," \"mujoco>=2.3\"\n",[2587,104869,104871],{"id":104870},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104873,104874],{},"先安装系统依赖:",[113,104876,104878],{"className":328,"code":104877,"language":330,"meta":118,"style":118},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[120,104879,104880],{"__ignoreMap":118},[123,104881,104882,104884,104886,104888,104890,104893,104895,104898,104900,104903,104905],{"class":125,"line":126},[123,104883,26999],{"class":337},[123,104885,28736],{"class":143},[123,104887,341],{"class":143},[123,104889,28821],{"class":164},[123,104891,104892],{"class":143}," mesa-libGL",[123,104894,103207],{"class":143},[123,104896,104897],{"class":143}," glfw",[123,104899,103227],{"class":143},[123,104901,104902],{"class":143}," libX11",[123,104904,103240],{"class":143},[123,104906,104907],{"class":143}," libXrandr\n",[2587,104909,104911],{"id":104910},"xml-解析失败","XML 解析失败",[19,104913,104914],{},"检查:",[26,104916,104917,104920,104923,104929],{},[29,104918,104919],{},"标签是否闭合",[29,104921,104922],{},"属性是否带引号",[29,104924,104925,104926],{},"根节点是否是 ",[120,104927,104928],{},"\u003Cmujoco>",[29,104930,104931,104933,104934,104937],{},[120,104932,54205],{}," 是否放在 ",[120,104935,104936],{},"\u003Cworldbody>"," 内部",[2587,104939,104941,104943,104944],{"id":104940},"final-time-不是严格等于-10",[120,104942,104790],{}," 不是严格等于 ",[120,104945,104794],{},[19,104947,104948],{},"这通常不是错误。浮点数计算可能得到：",[113,104950,104953],{"className":104951,"code":104952,"language":7621,"meta":118},[7619],"1.0000000000000007\n",[120,104954,104952],{"__ignoreMap":118},[19,104956,104957,104958,104960],{},"只要接近 ",[120,104959,104794],{}," 就正常。",[2587,104962,104963],{"id":104963},"方块没有掉下来",[19,104965,104966],{},"检查：",[26,104968,104969,104975,104981,104986],{},[29,104970,104971,104972],{},"方块 body 里是否有 ",[120,104973,104974],{},"\u003Cfreejoint\u002F>",[29,104976,104977,104978],{},"重力是否是 ",[120,104979,104980],{},"0 0 -9.81",[29,104982,104983,104984],{},"是否真的调用了 ",[120,104985,103078],{},[29,104987,104988,104989,104991,104992],{},"你看的是否是 ",[120,104990,104734],{},"，不是 ",[120,104993,104994],{},"initial qpos",[14,104996,104998],{"id":104997},"_8本章小结","8.本章小结",[19,105000,105001],{},"本章你已经完成了 MuJoCo 的最小闭环：",[113,105003,105006],{"className":105004,"code":105005,"language":7621,"meta":118},[7619],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[120,105007,105005],{"__ignoreMap":118},[19,105009,105010],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2526,105012,105013],{},"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":118,"searchDepth":140,"depth":140,"links":105015},[105016,105017,105018,105023,105027,105028,105029,105037],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":105019},[105020,105021,105022],{"id":103475,"depth":156,"text":103476},{"id":103569,"depth":156,"text":103570},{"id":103621,"depth":156,"text":103622},{"id":103645,"depth":140,"text":103646,"children":105024},[105025,105026],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":105030},[105031,105032,105033,105034,105036],{"id":104847,"depth":156,"text":104850},{"id":104870,"depth":156,"text":104871},{"id":104910,"depth":156,"text":104911},{"id":104940,"depth":156,"text":105035},"final time 不是严格等于 1.0",{"id":104963,"depth":156,"text":104963},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103031,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105044,"title":105045,"body":105046,"description":118,"extension":2545,"meta":106701,"navigation":231,"path":106702,"seo":106703,"stem":106704,"__hash__":106705},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105047,"toc":106677},[105048,105051,105053,105056,105059,105076,105170,105173,105179,105181,105183,105207,105210,105224,105227,105268,105270,105283,105285,105288,105336,105348,105351,105354,105360,105373,105440,105443,105462,105465,105468,105474,105476,105485,105488,105492,105501,105583,105592,105596,105602,105616,105626,105628,105958,105961,105973,105975,105986,105988,105991,106009,106012,106015,106033,106044,106047,106062,106072,106074,106095,106112,106132,106138,106178,106194,106210,106216,106219,106243,106259,106264,106294,106311,106336,106339,106354,106363,106378,106387,106402,106409,106411,106421,106434,106441,106444,106483,106490,106492,106544,106546,106552,106555,106562,106569,106572,106574,106592,106595,106598,106632,106644,106646,106649,106671,106674],[10,105049,105045],{"id":105050},"_2xml-与-mjcf-物理建模基础",[14,105052,103040],{"id":103039},[19,105054,105055],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,105057,105058],{},"本章结束后，你应该能看懂一个简单模型里：",[26,105060,105061,105064,105067,105070,105073],{},[29,105062,105063],{},"地面在哪里。",[29,105065,105066],{},"物体初始位置在哪里。",[29,105068,105069],{},"几何体是什么形状。",[29,105071,105072],{},"哪些 body 可以自由运动。",[29,105074,105075],{},"如何用名字在 Python 里找到 XML 中的对象。",[48,105077,105078,105087],{},[51,105079,105080],{},[54,105081,105082,105085],{},[57,105083,105084],{"align":26163},"标签",[57,105086,739],{"align":26163},[64,105088,105089,105098,105108,105117,105127,105137,105150,105160],{},[54,105090,105091,105095],{},[69,105092,105093],{"align":26163},[120,105094,104928],{},[69,105096,105097],{"align":26163},"根节点",[54,105099,105100,105105],{},[69,105101,105102],{"align":26163},[120,105103,105104],{},"\u003Coption>",[69,105106,105107],{"align":26163},"仿真参数",[54,105109,105110,105114],{},[69,105111,105112],{"align":26163},[120,105113,104936],{},[69,105115,105116],{"align":26163},"世界中的物体",[54,105118,105119,105124],{},[69,105120,105121],{"align":26163},[120,105122,105123],{},"\u003Cbody>",[69,105125,105126],{"align":26163},"刚体",[54,105128,105129,105134],{},[69,105130,105131],{"align":26163},[120,105132,105133],{},"\u003Cgeom>",[69,105135,105136],{"align":26163},"几何体、碰撞体、可视体",[54,105138,105139,105147],{},[69,105140,105141,27400,105144],{"align":26163},[120,105142,105143],{},"\u003Cjoint>",[120,105145,105146],{},"\u003Cfreejoint>",[69,105148,105149],{"align":26163},"关节",[54,105151,105152,105157],{},[69,105153,105154],{"align":26163},[120,105155,105156],{},"\u003Csite>",[69,105158,105159],{"align":26163},"标记点",[54,105161,105162,105167],{},[69,105163,105164],{"align":26163},[120,105165,105166],{},"\u003Cactuator>",[69,105168,105169],{"align":26163},"控制器",[19,105171,105172],{},"初学时可以先记住：",[113,105174,105177],{"className":105175,"code":105176,"language":7621,"meta":118},[7619],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[120,105178,105176],{"__ignoreMap":118},[14,105180,103163],{"id":103162},[19,105182,103166],{},[113,105184,105186],{"className":328,"code":105185,"language":330,"meta":118,"style":118},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[120,105187,105188],{"__ignoreMap":118},[123,105189,105190,105192,105194,105196,105198,105200,105202,105204],{"class":125,"line":126},[123,105191,26999],{"class":337},[123,105193,28736],{"class":143},[123,105195,341],{"class":143},[123,105197,28821],{"class":164},[123,105199,104892],{"class":143},[123,105201,103207],{"class":143},[123,105203,104897],{"class":143},[123,105205,105206],{"class":143}," glfw-devel\n",[19,105208,105209],{},"pip:",[113,105211,105212],{"className":328,"code":103312,"language":330,"meta":118,"style":118},[120,105213,105214],{"__ignoreMap":118},[123,105215,105216,105218,105220,105222],{"class":125,"line":126},[123,105217,338],{"class":337},[123,105219,341],{"class":143},[123,105221,103323],{"class":143},[123,105223,103326],{"class":143},[19,105225,105226],{},"conda:",[113,105228,105230],{"className":328,"code":105229,"language":330,"meta":118,"style":118},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[120,105231,105232,105249,105258],{"__ignoreMap":118},[123,105233,105234,105236,105238,105240,105243,105245,105247],{"class":125,"line":126},[123,105235,32750],{"class":337},[123,105237,31596],{"class":143},[123,105239,27537],{"class":164},[123,105241,105242],{"class":143}," mujoco-xml",[123,105244,103368],{"class":143},[123,105246,103371],{"class":164},[123,105248,103374],{"class":164},[123,105250,105251,105253,105255],{"class":125,"line":140},[123,105252,32750],{"class":337},[123,105254,103381],{"class":143},[123,105256,105257],{"class":143}," mujoco-xml\n",[123,105259,105260,105262,105264,105266],{"class":125,"line":156},[123,105261,338],{"class":337},[123,105263,341],{"class":143},[123,105265,103323],{"class":143},[123,105267,103326],{"class":143},[19,105269,103397],{},[26,105271,105272,105275,105280],{},[29,105273,105274],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,105276,105277,105278,2494],{},"本章使用基础标签，适用于 ",[120,105279,103420],{},[29,105281,105282],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105284,103438],{"id":103437},[19,105286,105287],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[113,105289,105291],{"className":55470,"code":105290,"language":55472,"meta":118,"style":118},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[120,105292,105293,105307,105315,105320,105328],{"__ignoreMap":118},[123,105294,105295,105297,105299,105301,105303,105305],{"class":125,"line":126},[123,105296,3509],{"class":129},[123,105298,103414],{"class":53707},[123,105300,104166],{"class":337},[123,105302,134],{"class":129},[123,105304,244],{"class":143},[123,105306,53714],{"class":129},[123,105308,105309,105311,105313],{"class":125,"line":140},[123,105310,54548],{"class":129},[123,105312,104232],{"class":53707},[123,105314,53714],{"class":129},[123,105316,105317],{"class":125,"line":156},[123,105318,105319],{"class":129},"    ...\n",[123,105321,105322,105324,105326],{"class":125,"line":168},[123,105323,54820],{"class":129},[123,105325,104232],{"class":53707},[123,105327,53714],{"class":129},[123,105329,105330,105332,105334],{"class":125,"line":268},[123,105331,54190],{"class":129},[123,105333,103414],{"class":53707},[123,105335,53714],{"class":129},[19,105337,105338,105340,105341,105343,105344,105347],{},[120,105339,54205],{}," 表示刚体。",[120,105342,103513],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[120,105345,105346],{},"joint"," 表示刚体相对父刚体如何运动。",[2587,105349,105350],{"id":105350},"层级结构非常重要",[19,105352,105353],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[113,105355,105358],{"className":105356,"code":105357,"language":7621,"meta":118},[7619],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[120,105359,105357],{"__ignoreMap":118},[19,105361,105362,103411,105365,105368,105369,105372],{},[120,105363,105364],{},"red_box_geom",[120,105366,105367],{},"box_center"," 都属于 ",[120,105370,105371],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[113,105374,105376],{"className":55470,"code":105375,"language":55472,"meta":118,"style":118},"\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",[120,105377,105378,105398,105412,105432],{"__ignoreMap":118},[123,105379,105380,105382,105384,105386,105388,105390,105392,105394,105396],{"class":125,"line":126},[123,105381,3509],{"class":129},[123,105383,54205],{"class":53707},[123,105385,17350],{"class":337},[123,105387,134],{"class":129},[123,105389,55894],{"class":143},[123,105391,103499],{"class":337},[123,105393,134],{"class":129},[123,105395,103504],{"class":143},[123,105397,53714],{"class":129},[123,105399,105400,105402,105404,105406,105408,105410],{"class":125,"line":140},[123,105401,54548],{"class":129},[123,105403,104012],{"class":53707},[123,105405,17350],{"class":337},[123,105407,134],{"class":129},[123,105409,104352],{"class":143},[123,105411,103537],{"class":129},[123,105413,105414,105416,105418,105420,105422,105424,105426,105428,105430],{"class":125,"line":156},[123,105415,54548],{"class":129},[123,105417,103513],{"class":53707},[123,105419,56227],{"class":337},[123,105421,134],{"class":129},[123,105423,55894],{"class":143},[123,105425,103529],{"class":337},[123,105427,134],{"class":129},[123,105429,103534],{"class":143},[123,105431,103537],{"class":129},[123,105433,105434,105436,105438],{"class":125,"line":168},[123,105435,54190],{"class":129},[123,105437,54205],{"class":53707},[123,105439,53714],{"class":129},[19,105441,105442],{},"含义:",[26,105444,105445,105451,105456,105459],{},[29,105446,105447,105448,105450],{},"创建名为 ",[120,105449,56117],{}," 的刚体",[29,105452,105453,105454],{},"初始位置在世界坐标 ",[120,105455,103562],{},[29,105457,105458],{},"它有一个自由关节",[29,105460,105461],{},"它有一个盒子几何体",[2587,105463,105464],{"id":105464},"坐标怎么理解",[19,105466,105467],{},"MuJoCo 默认使用三维坐标：",[113,105469,105472],{"className":105470,"code":105471,"language":7621,"meta":118},[7619],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[120,105473,105471],{"__ignoreMap":118},[19,105475,17063],{},[113,105477,105479],{"className":55470,"code":105478,"language":55472,"meta":118,"style":118},"pos=\"0 0 1\"\n",[120,105480,105481],{"__ignoreMap":118},[123,105482,105483],{"class":125,"line":126},[123,105484,105478],{"class":129},[19,105486,105487],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[2587,105489,105491],{"id":105490},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105493,105494,105495,84927,105498,105500],{},"不同 ",[120,105496,105497],{},"type",[120,105499,33908],{}," 含义不同：",[48,105502,105503,105518],{},[51,105504,105505],{},[54,105506,105507,105511,105516],{},[57,105508,105509],{"align":26163},[120,105510,105497],{},[57,105512,105513,105515],{"align":26163},[120,105514,33908],{}," 示例",[57,105517,103093],{"align":26163},[64,105519,105520,105534,105549,105568],{},[54,105521,105522,105526,105531],{},[69,105523,105524],{"align":26163},[120,105525,56117],{},[69,105527,105528],{"align":26163},[120,105529,105530],{},"size=\"0.1 0.2 0.3\"",[69,105532,105533],{"align":26163},"x\u002Fy\u002Fz 半边长，不是完整长度",[54,105535,105536,105541,105546],{},[69,105537,105538],{"align":26163},[120,105539,105540],{},"sphere",[69,105542,105543],{"align":26163},[120,105544,105545],{},"size=\"0.1\"",[69,105547,105548],{"align":26163},"球半径",[54,105550,105551,105556,105561],{},[69,105552,105553],{"align":26163},[120,105554,105555],{},"capsule",[69,105557,105558],{"align":26163},[120,105559,105560],{},"size=\"0.03\"",[69,105562,105563,105564,105567],{"align":26163},"胶囊半径，长度常用 ",[120,105565,105566],{},"fromto"," 指定",[54,105569,105570,105575,105580],{},[69,105571,105572],{"align":26163},[120,105573,105574],{},"plane",[69,105576,105577],{"align":26163},[120,105578,105579],{},"size=\"3 3 0.1\"",[69,105581,105582],{"align":26163},"可视平面大小，通常当地面",[19,105584,105585,105586,105588,105589,105591],{},"最容易踩坑的是 box：",[120,105587,104415],{}," 表示边长大约是 ",[120,105590,34449],{},"，因为 MuJoCo 用的是半边长。",[2587,105593,105595],{"id":105594},"site-是什么","site 是什么",[19,105597,105598,105601],{},[120,105599,105600],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,105603,105604,105607,105610,105613],{},[29,105605,105606],{},"标记机械臂末端。",[29,105608,105609],{},"标记目标位置。",[29,105611,105612],{},"放传感器或相机参考点。",[29,105614,105615],{},"在 Python 中读取某个关键点的世界坐标。",[19,105617,105618,105619,103411,105622,105625],{},"在后面的 Reacher 任务中，",[120,105620,105621],{},"tip",[120,105623,105624],{},"target"," 就会用 site 表示。",[14,105627,103646],{"id":103645},[113,105629,105631],{"className":115,"code":105630,"language":117,"meta":118,"style":118},"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",[120,105632,105633,105639,105649,105653,105657,105665,105670,105674,105678,105682,105687,105691,105696,105701,105706,105711,105715,105719,105723,105727,105731,105735,105747,105759,105767,105771,105786,105801,105805,105818,105833,105846,105859,105863,105879,105883,105887,105898,105910,105922,105934,105938,105942,105954],{"__ignoreMap":118},[123,105634,105635,105637],{"class":125,"line":126},[123,105636,223],{"class":133},[123,105638,103694],{"class":129},[123,105640,105641,105643,105645,105647],{"class":125,"line":140},[123,105642,223],{"class":133},[123,105644,33795],{"class":129},[123,105646,547],{"class":133},[123,105648,33800],{"class":129},[123,105650,105651],{"class":125,"line":156},[123,105652,232],{"emptyLinePlaceholder":231},[123,105654,105655],{"class":125,"line":168},[123,105656,232],{"emptyLinePlaceholder":231},[123,105658,105659,105661,105663],{"class":125,"line":268},[123,105660,103707],{"class":164},[123,105662,15995],{"class":133},[123,105664,103712],{"class":143},[123,105666,105667],{"class":125,"line":291},[123,105668,105669],{"class":143},"\u003Cmujoco model=\"xml_basic\">\n",[123,105671,105672],{"class":125,"line":300},[123,105673,103722],{"class":143},[123,105675,105676],{"class":125,"line":305},[123,105677,232],{"emptyLinePlaceholder":231},[123,105679,105680],{"class":125,"line":316},[123,105681,103731],{"class":143},[123,105683,105684],{"class":125,"line":673},[123,105685,105686],{"class":143},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[123,105688,105689],{"class":125,"line":692},[123,105690,232],{"emptyLinePlaceholder":231},[123,105692,105693],{"class":125,"line":713},[123,105694,105695],{"class":143},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[123,105697,105698],{"class":125,"line":718},[123,105699,105700],{"class":143},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[123,105702,105703],{"class":125,"line":1138},[123,105704,105705],{"class":143},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[123,105707,105708],{"class":125,"line":1429},[123,105709,105710],{"class":143},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[123,105712,105713],{"class":125,"line":1439},[123,105714,103760],{"class":143},[123,105716,105717],{"class":125,"line":1444},[123,105718,103765],{"class":143},[123,105720,105721],{"class":125,"line":1453},[123,105722,103770],{"class":143},[123,105724,105725],{"class":125,"line":1458},[123,105726,98092],{"class":143},[123,105728,105729],{"class":125,"line":1476},[123,105730,232],{"emptyLinePlaceholder":231},[123,105732,105733],{"class":125,"line":1494},[123,105734,232],{"emptyLinePlaceholder":231},[123,105736,105737,105739,105741,105743,105745],{"class":125,"line":1499},[123,105738,34359],{"class":133},[123,105740,4417],{"class":337},[123,105742,103791],{"class":129},[123,105744,98080],{"class":164},[123,105746,1344],{"class":129},[123,105748,105749,105751,105753,105755,105757],{"class":125,"line":1517},[123,105750,103800],{"class":129},[123,105752,134],{"class":133},[123,105754,103805],{"class":129},[123,105756,103707],{"class":164},[123,105758,288],{"class":129},[123,105760,105761,105763,105765],{"class":125,"line":1534},[123,105762,1349],{"class":129},[123,105764,134],{"class":133},[123,105766,103818],{"class":129},[123,105768,105769],{"class":125,"line":1539},[123,105770,232],{"emptyLinePlaceholder":231},[123,105772,105773,105776,105778,105781,105784],{"class":125,"line":2080},[123,105774,105775],{"class":129},"    box_body_id ",[123,105777,134],{"class":133},[123,105779,105780],{"class":129}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[123,105782,105783],{"class":143},"\"red_box\"",[123,105785,288],{"class":129},[123,105787,105788,105791,105793,105796,105799],{"class":125,"line":2097},[123,105789,105790],{"class":129},"    site_id ",[123,105792,134],{"class":133},[123,105794,105795],{"class":129}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[123,105797,105798],{"class":143},"\"box_center\"",[123,105800,288],{"class":129},[123,105802,105803],{"class":125,"line":2114},[123,105804,232],{"emptyLinePlaceholder":231},[123,105806,105807,105809,105812,105814,105816],{"class":125,"line":2125},[123,105808,1711],{"class":133},[123,105810,105811],{"class":129}," box_body_id ",[123,105813,3509],{"class":133},[123,105815,6532],{"class":164},[123,105817,1344],{"class":129},[123,105819,105820,105823,105826,105828,105831],{"class":125,"line":2130},[123,105821,105822],{"class":133},"        raise",[123,105824,105825],{"class":164}," RuntimeError",[123,105827,1315],{"class":129},[123,105829,105830],{"class":143},"\"body red_box not found\"",[123,105832,288],{"class":129},[123,105834,105835,105837,105840,105842,105844],{"class":125,"line":5033},[123,105836,1711],{"class":133},[123,105838,105839],{"class":129}," site_id ",[123,105841,3509],{"class":133},[123,105843,6532],{"class":164},[123,105845,1344],{"class":129},[123,105847,105848,105850,105852,105854,105857],{"class":125,"line":5041},[123,105849,105822],{"class":133},[123,105851,105825],{"class":164},[123,105853,1315],{"class":129},[123,105855,105856],{"class":143},"\"site box_center not found\"",[123,105858,288],{"class":129},[123,105860,105861],{"class":125,"line":5046},[123,105862,232],{"emptyLinePlaceholder":231},[123,105864,105865,105867,105869,105871,105873,105875,105877],{"class":125,"line":5052},[123,105866,5641],{"class":133},[123,105868,103893],{"class":129},[123,105870,1405],{"class":133},[123,105872,34855],{"class":164},[123,105874,1315],{"class":129},[123,105876,1045],{"class":164},[123,105878,33201],{"class":129},[123,105880,105881],{"class":125,"line":5058},[123,105882,103908],{"class":129},[123,105884,105885],{"class":125,"line":5063},[123,105886,232],{"emptyLinePlaceholder":231},[123,105888,105889,105891,105893,105896],{"class":125,"line":10380},[123,105890,33714],{"class":164},[123,105892,1315],{"class":129},[123,105894,105895],{"class":143},"\"simulation time:\"",[123,105897,103870],{"class":129},[123,105899,105900,105902,105904,105907],{"class":125,"line":10404},[123,105901,33714],{"class":164},[123,105903,1315],{"class":129},[123,105905,105906],{"class":143},"\"box body position:\"",[123,105908,105909],{"class":129},", data.xpos[box_body_id].copy())\n",[123,105911,105912,105914,105916,105919],{"class":125,"line":10409},[123,105913,33714],{"class":164},[123,105915,1315],{"class":129},[123,105917,105918],{"class":143},"\"site position:\"",[123,105920,105921],{"class":129},", data.site_xpos[site_id].copy())\n",[123,105923,105924,105926,105928,105931],{"class":125,"line":10415},[123,105925,33714],{"class":164},[123,105927,1315],{"class":129},[123,105929,105930],{"class":143},"\"box qpos:\"",[123,105932,105933],{"class":129},", np.array(data.qpos))\n",[123,105935,105936],{"class":125,"line":10442},[123,105937,232],{"emptyLinePlaceholder":231},[123,105939,105940],{"class":125,"line":10447},[123,105941,232],{"emptyLinePlaceholder":231},[123,105943,105944,105946,105948,105950,105952],{"class":125,"line":10453},[123,105945,3998],{"class":133},[123,105947,33635],{"class":164},[123,105949,103951],{"class":133},[123,105951,103954],{"class":143},[123,105953,1344],{"class":129},[123,105955,105956],{"class":125,"line":10465},[123,105957,103961],{"class":129},[19,105959,105960],{},"保存为：",[113,105962,105964],{"className":328,"code":105963,"language":330,"meta":118,"style":118},"touch ch2_xml_basic.py\n",[120,105965,105966],{"__ignoreMap":118},[123,105967,105968,105970],{"class":125,"line":126},[123,105969,103676],{"class":337},[123,105971,105972],{"class":143}," ch2_xml_basic.py\n",[19,105974,104692],{},[113,105976,105978],{"className":328,"code":105977,"language":330,"meta":118,"style":118},"python ch2_xml_basic.py\n",[120,105979,105980],{"__ignoreMap":118},[123,105981,105982,105984],{"class":125,"line":126},[123,105983,117],{"class":337},[123,105985,105972],{"class":143},[2587,105987,103964],{"id":103964},[19,105989,105990],{},"用名字查找 body：",[113,105992,105994],{"className":115,"code":105993,"language":117,"meta":118,"style":118},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[120,105995,105996],{"__ignoreMap":118},[123,105997,105998,106001,106003,106005,106007],{"class":125,"line":126},[123,105999,106000],{"class":129},"box_body_id ",[123,106002,134],{"class":133},[123,106004,105780],{"class":129},[123,106006,105783],{"class":143},[123,106008,288],{"class":129},[19,106010,106011],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,106013,106014],{},"用名字查找 site：",[113,106016,106018],{"className":115,"code":106017,"language":117,"meta":118,"style":118},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[120,106019,106020],{"__ignoreMap":118},[123,106021,106022,106025,106027,106029,106031],{"class":125,"line":126},[123,106023,106024],{"class":129},"site_id ",[123,106026,134],{"class":133},[123,106028,105795],{"class":129},[123,106030,105798],{"class":143},[123,106032,288],{"class":129},[19,106034,106035,106036,106039,106040,106043],{},"注意第二个参数是对象类型。查 body 就用 ",[120,106037,106038],{},"mjOBJ_BODY","，查 site 就用 ",[120,106041,106042],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,106045,106046],{},"读取世界坐标：",[113,106048,106050],{"className":115,"code":106049,"language":117,"meta":118,"style":118},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[120,106051,106052,106057],{"__ignoreMap":118},[123,106053,106054],{"class":125,"line":126},[123,106055,106056],{"class":129},"data.xpos[box_body_id]\n",[123,106058,106059],{"class":125,"line":140},[123,106060,106061],{"class":129},"data.site_xpos[site_id]\n",[19,106063,106064,106067,106068,106071],{},[120,106065,106066],{},"xpos"," 是 body 的世界坐标，",[120,106069,106070],{},"site_xpos"," 是 site 的世界坐标。",[2587,106073,104099],{"id":104099},[113,106075,106077],{"className":115,"code":106076,"language":117,"meta":118,"style":118},"import mujoco\nimport numpy as np\n",[120,106078,106079,106085],{"__ignoreMap":118},[123,106080,106081,106083],{"class":125,"line":126},[123,106082,223],{"class":133},[123,106084,103694],{"class":129},[123,106086,106087,106089,106091,106093],{"class":125,"line":140},[123,106088,223],{"class":133},[123,106090,33795],{"class":129},[123,106092,547],{"class":133},[123,106094,33800],{"class":129},[19,106096,106097,106098,106101,106102,106105,106106,2820,106109,2494],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[120,106099,106100],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[120,106103,106104],{},"as np"," 是习惯写法，后面就可以写 ",[120,106107,106108],{},"np.array(...)",[120,106110,106111],{},"np.round(...)",[113,106113,106114],{"className":115,"code":103987,"language":117,"meta":118,"style":118},[120,106115,106116,106124,106128],{"__ignoreMap":118},[123,106117,106118,106120,106122],{"class":125,"line":126},[123,106119,103707],{"class":164},[123,106121,15995],{"class":133},[123,106123,103712],{"class":143},[123,106125,106126],{"class":125,"line":140},[123,106127,104002],{"class":143},[123,106129,106130],{"class":125,"line":156},[123,106131,98092],{"class":143},[19,106133,106134,106135,2494],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[120,106136,106137],{},"mujoco.MjModel.from_xml_string(XML)",[113,106139,106141],{"className":55470,"code":106140,"language":55472,"meta":118,"style":118},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[120,106142,106143],{"__ignoreMap":118},[123,106144,106145,106147,106149,106151,106153,106155,106157,106159,106162,106164,106166,106169,106171,106173,106176],{"class":125,"line":126},[123,106146,3509],{"class":129},[123,106148,105600],{"class":53707},[123,106150,17350],{"class":337},[123,106152,134],{"class":129},[123,106154,105798],{"class":143},[123,106156,103499],{"class":337},[123,106158,134],{"class":129},[123,106160,106161],{"class":143},"\"0 0 0\"",[123,106163,103529],{"class":337},[123,106165,134],{"class":129},[123,106167,106168],{"class":143},"\"0.03\"",[123,106170,81165],{"class":337},[123,106172,134],{"class":129},[123,106174,106175],{"class":143},"\"0 1 0 1\"",[123,106177,103537],{"class":129},[19,106179,106180,106182,106183,106186,106187,106189,106190,106193],{},[120,106181,105600],{}," 是标记点。",[120,106184,106185],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[120,106188,105560],{}," 表示显示出来的小球大小。",[120,106191,106192],{},"rgba=\"0 1 0 1\""," 表示绿色。",[113,106195,106196],{"className":115,"code":105993,"language":117,"meta":118,"style":118},[120,106197,106198],{"__ignoreMap":118},[123,106199,106200,106202,106204,106206,106208],{"class":125,"line":126},[123,106201,106000],{"class":129},[123,106203,134],{"class":133},[123,106205,105780],{"class":129},[123,106207,105783],{"class":143},[123,106209,288],{"class":129},[19,106211,106212,106213,106215],{},"这行的作用是：根据名字 ",[120,106214,105783],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106217,106218],{},"拆开看：",[26,106220,106221,106227,106232,106238],{},[29,106222,106223,106226],{},[120,106224,106225],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,106228,106229,106231],{},[120,106230,104476],{}," 是被查询的模型。",[29,106233,106234,106237],{},[120,106235,106236],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,106239,106240,106242],{},[120,106241,105783],{}," 是 XML 里写的名字。",[113,106244,106245],{"className":115,"code":106017,"language":117,"meta":118,"style":118},[120,106246,106247],{"__ignoreMap":118},[123,106248,106249,106251,106253,106255,106257],{"class":125,"line":126},[123,106250,106024],{"class":129},[123,106252,134],{"class":133},[123,106254,105795],{"class":129},[123,106256,105798],{"class":143},[123,106258,288],{"class":129},[19,106260,106261,106262,2494],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[120,106263,105798],{},[113,106265,106267],{"className":115,"code":106266,"language":117,"meta":118,"style":118},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[120,106268,106269,106281],{"__ignoreMap":118},[123,106270,106271,106273,106275,106277,106279],{"class":125,"line":126},[123,106272,3998],{"class":133},[123,106274,105811],{"class":129},[123,106276,3509],{"class":133},[123,106278,6532],{"class":164},[123,106280,1344],{"class":129},[123,106282,106283,106286,106288,106290,106292],{"class":125,"line":140},[123,106284,106285],{"class":133},"    raise",[123,106287,105825],{"class":164},[123,106289,1315],{"class":129},[123,106291,105830],{"class":143},[123,106293,288],{"class":129},[19,106295,106296,106298,106299,106302,106303,106306,106307,106310],{},[120,106297,3998],{}," 是条件判断。",[120,106300,106301],{},"mj_name2id"," 找不到对象时会返回 ",[120,106304,106305],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[120,106308,106309],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[113,106312,106314],{"className":115,"code":106313,"language":117,"meta":118,"style":118},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[120,106315,106316,106332],{"__ignoreMap":118},[123,106317,106318,106320,106322,106324,106326,106328,106330],{"class":125,"line":126},[123,106319,1399],{"class":133},[123,106321,103893],{"class":129},[123,106323,1405],{"class":133},[123,106325,34855],{"class":164},[123,106327,1315],{"class":129},[123,106329,1045],{"class":164},[123,106331,33201],{"class":129},[123,106333,106334],{"class":125,"line":140},[123,106335,104090],{"class":129},[19,106337,106338],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[113,106340,106342],{"className":115,"code":106341,"language":117,"meta":118,"style":118},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[120,106343,106344],{"__ignoreMap":118},[123,106345,106346,106348,106350,106352],{"class":125,"line":126},[123,106347,294],{"class":164},[123,106349,1315],{"class":129},[123,106351,105906],{"class":143},[123,106353,105909],{"class":129},[19,106355,106356,106358,106359,106362],{},[120,106357,103472],{}," 保存所有 body 的世界坐标。",[120,106360,106361],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[113,106364,106366],{"className":115,"code":106365,"language":117,"meta":118,"style":118},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[120,106367,106368],{"__ignoreMap":118},[123,106369,106370,106372,106374,106376],{"class":125,"line":126},[123,106371,294],{"class":164},[123,106373,1315],{"class":129},[123,106375,105918],{"class":143},[123,106377,105921],{"class":129},[19,106379,106380,106383,106384,106386],{},[120,106381,106382],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[120,106385,105367],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[113,106388,106390],{"className":115,"code":106389,"language":117,"meta":118,"style":118},"print(\"box qpos:\", np.array(data.qpos))\n",[120,106391,106392],{"__ignoreMap":118},[123,106393,106394,106396,106398,106400],{"class":125,"line":126},[123,106395,294],{"class":164},[123,106397,1315],{"class":129},[123,106399,105930],{"class":143},[123,106401,105933],{"class":129},[19,106403,106404,106405,106408],{},"这里打印广义位置数组。",[120,106406,106407],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106410,104707],{"id":104706},[19,106412,106413,106414,106417,106418,2494],{},"程序会输出 ",[120,106415,106416],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[120,106419,106420],{},"qpos",[19,106422,106423,106425,106426,106429,106430,106433],{},[120,106424,106361],{}," 是 body 的世界坐标位置。",[120,106427,106428],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[120,106431,106432],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106435,84619,106436,84927,106438,106440],{},[120,106437,105367],{},[120,106439,106185],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106442,106443],{},"如果你把 site 改成：",[113,106445,106447],{"className":55470,"code":106446,"language":55472,"meta":118,"style":118},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[120,106448,106449],{"__ignoreMap":118},[123,106450,106451,106453,106455,106457,106459,106462,106464,106466,106469,106471,106473,106475,106477,106479,106481],{"class":125,"line":126},[123,106452,3509],{"class":129},[123,106454,105600],{"class":53707},[123,106456,17350],{"class":337},[123,106458,134],{"class":129},[123,106460,106461],{"class":143},"\"box_top\"",[123,106463,103499],{"class":337},[123,106465,134],{"class":129},[123,106467,106468],{"class":143},"\"0 0 0.15\"",[123,106470,103529],{"class":337},[123,106472,134],{"class":129},[123,106474,106168],{"class":143},[123,106476,81165],{"class":337},[123,106478,134],{"class":129},[123,106480,106175],{"class":143},[123,106482,103537],{"class":129},[19,106484,106485,106486,106489],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[120,106487,106488],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106491,104739],{"id":104738},[26,106493,106494,106503,106506,106513,106519,106530],{},[29,106495,104802,106496,106498,106499,104805,106501,2494],{},[120,106497,105371],{}," 的初始高度从 ",[120,106500,2825],{},[120,106502,2692],{},[29,106504,106505],{},"重新运行程序。",[29,106507,106508,106509,106512],{},"观察 ",[120,106510,106511],{},"box qpos"," 和最终位置是否变化。",[29,106514,106515,106516,106518],{},"故意把 ",[120,106517,105600],{}," 名称改错，确认程序能报错。",[29,106520,104802,106521,106523,106524,104805,106526,106529],{},[120,106522,103513],{}," 的颜色 ",[120,106525,104423],{},[120,106527,106528],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,106531,104802,106532,84927,106534,104805,106537,106540,106541,106543],{},[120,106533,105367],{},[120,106535,106536],{},"pos",[120,106538,106539],{},"0 0 0.2","，观察 ",[120,106542,106488],{}," 如何变化。",[14,106545,104844],{"id":104843},[2587,106547,106549],{"id":106548},"xml-error-schema-violation",[120,106550,106551],{},"XML Error: Schema violation",[19,106553,106554],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[2587,106556,106558,83687,106560],{"id":106557},"mj_name2id-返回-1",[120,106559,106301],{},[120,106561,106305],{},[19,106563,106564,106565,106568],{},"说明名字没有找到。检查 XML 中 ",[120,106566,106567],{},"name=\"...\"","，并确认对象类型正确。",[2587,106570,106571],{"id":106571},"物体不下落",[19,106573,104914],{},[26,106575,106576,106581,106586],{},[29,106577,106578,106579],{},"body 是否有 ",[120,106580,104012],{},[29,106582,106583,106584],{},"gravity 是否为 ",[120,106585,104980],{},[29,106587,106588,106589,106591],{},"body 是否被固定在 ",[120,106590,104232],{}," 中",[2587,106593,106594],{"id":106594},"坐标看起来不符合预期",[19,106596,106597],{},"先区分两种坐标：",[48,106599,106600,106609],{},[51,106601,106602],{},[54,106603,106604,106607],{},[57,106605,106606],{"align":26163},"坐标",[57,106608,103093],{"align":26163},[64,106610,106611,106621],{},[54,106612,106613,106618],{},[69,106614,106615,106616],{"align":26163},"XML 里的 ",[120,106617,106536],{},[69,106619,106620],{"align":26163},"相对父 body 的局部坐标",[54,106622,106623,106629],{},[69,106624,106625,27400,106627],{"align":26163},[120,106626,103472],{},[120,106628,106382],{},[69,106630,106631],{"align":26163},"仿真更新后的世界坐标",[19,106633,106634,106635,106637,106638,84936,106641,106643],{},"如果你修改了 ",[120,106636,103463],{},"，但还没调用 ",[120,106639,106640],{},"mj_forward",[120,106642,103608],{},"，世界坐标可能还没有更新。",[14,106645,104998],{"id":104997},[19,106647,106648],{},"MJCF 建模先掌握四件事：",[26,106650,106651,106656,106661,106666],{},[29,106652,106653,106655],{},[120,106654,54205],{}," 表示刚体层级。",[29,106657,106658,106660],{},[120,106659,103513],{}," 表示形状、碰撞和质量。",[29,106662,106663,106665],{},[120,106664,105346],{}," 决定 body 能不能动、怎么动。",[29,106667,106668,106670],{},[120,106669,105600],{}," 用来标记关键点，方便 Python 读取位置。",[19,106672,106673],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2526,106675,106676],{},"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":118,"searchDepth":140,"depth":140,"links":106678},[106679,106680,106681,106687,106691,106692,106693,106700],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":106682},[106683,106684,106685,106686],{"id":105350,"depth":156,"text":105350},{"id":105464,"depth":156,"text":105464},{"id":105490,"depth":156,"text":105491},{"id":105594,"depth":156,"text":105595},{"id":103645,"depth":140,"text":103646,"children":106688},[106689,106690],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":106694},[106695,106696,106698,106699],{"id":106548,"depth":156,"text":106551},{"id":106557,"depth":156,"text":106697},"mj_name2id 返回 -1",{"id":106571,"depth":156,"text":106571},{"id":106594,"depth":156,"text":106594},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105045,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106707,"title":106708,"body":106709,"description":118,"extension":2545,"meta":108204,"navigation":231,"path":108205,"seo":108206,"stem":108207,"__hash__":108208},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106710,"toc":108176},[106711,106714,106716,106719,106722,106760,106763,106769,106772,106774,106776,106803,106805,106819,106821,106862,106864,106888,106890,106893,106902,106911,106914,106923,106931,106940,106943,106953,106956,107008,107015,107021,107029,107077,107080,107099,107102,107110,107114,107123,107156,107158,107506,107508,107520,107522,107533,107535,107538,107559,107565,107568,107593,107603,107606,107614,107617,107620,107641,107652,107654,107674,107677,107698,107707,107726,107732,107757,107760,107774,107781,107805,107808,107816,107825,107841,107853,107861,107870,107872,107875,107899,107904,107907,107929,107931,107970,107972,107979,107981,107989,107992,107995,108007,108048,108055,108066,108073,108076,108125,108128,108131,108137,108139,108144,108170,108173],[10,106712,106708],{"id":106713},"_3python-控制接口读取状态与推进仿真",[14,106715,103040],{"id":103039},[19,106717,106718],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106720,106721],{},"你将学习:",[26,106723,106724,106729,106734,106738,106743,106754],{},[29,106725,106726],{},[120,106727,106728],{},"MjModel.from_xml_string",[29,106730,106731],{},[120,106732,106733],{},"MjData(model)",[29,106735,106736],{},[120,106737,103608],{},[29,106739,106740],{},[120,106741,106742],{},"mj_resetData",[29,106744,106745,106746,2820,106748,2820,106751],{},"读取 ",[120,106747,106420],{},[120,106749,106750],{},"qvel",[120,106752,106753],{},"ctrl",[29,106755,106756,106757],{},"使用 ",[120,106758,106759],{},"model.opt.timestep",[19,106761,106762],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[113,106764,106767],{"className":106765,"code":106766,"language":7621,"meta":118},[7619],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[120,106768,106766],{"__ignoreMap":118},[19,106770,106771],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106773,103163],{"id":103162},[19,106775,103166],{},[113,106777,106779],{"className":328,"code":106778,"language":330,"meta":118,"style":118},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[120,106780,106781],{"__ignoreMap":118},[123,106782,106783,106785,106787,106789,106791,106794,106796,106798,106800],{"class":125,"line":126},[123,106784,26999],{"class":337},[123,106786,28736],{"class":143},[123,106788,341],{"class":143},[123,106790,28821],{"class":164},[123,106792,106793],{"class":143}," python3",[123,106795,103191],{"class":143},[123,106797,104892],{"class":143},[123,106799,103207],{"class":143},[123,106801,106802],{"class":143}," glfw\n",[19,106804,105209],{},[113,106806,106807],{"className":328,"code":103312,"language":330,"meta":118,"style":118},[120,106808,106809],{"__ignoreMap":118},[123,106810,106811,106813,106815,106817],{"class":125,"line":126},[123,106812,338],{"class":337},[123,106814,341],{"class":143},[123,106816,103323],{"class":143},[123,106818,103326],{"class":143},[19,106820,105226],{},[113,106822,106824],{"className":328,"code":106823,"language":330,"meta":118,"style":118},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[120,106825,106826,106843,106852],{"__ignoreMap":118},[123,106827,106828,106830,106832,106834,106837,106839,106841],{"class":125,"line":126},[123,106829,32750],{"class":337},[123,106831,31596],{"class":143},[123,106833,27537],{"class":164},[123,106835,106836],{"class":143}," mujoco-python-api",[123,106838,103368],{"class":143},[123,106840,103371],{"class":164},[123,106842,103374],{"class":164},[123,106844,106845,106847,106849],{"class":125,"line":140},[123,106846,32750],{"class":337},[123,106848,103381],{"class":143},[123,106850,106851],{"class":143}," mujoco-python-api\n",[123,106853,106854,106856,106858,106860],{"class":125,"line":156},[123,106855,338],{"class":337},[123,106857,341],{"class":143},[123,106859,103323],{"class":143},[123,106861,103326],{"class":143},[19,106863,103397],{},[26,106865,106866,106873,106882],{},[29,106867,106868,103411,106870,106872],{},[120,106869,103068],{},[120,106871,103073],{}," 是官方 Python bindings 的类名。",[29,106874,106875,106876,106879,106880,2494],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[120,106877,106878],{},"mjModel"," 在 Python 中是 ",[120,106881,103102],{},[29,106883,106884,106885,2494],{},"不要使用 ",[120,106886,106887],{},"sim = mujoco_py.MjSim(...)",[14,106889,103438],{"id":103437},[19,106891,106892],{},"仿真推进核心代码:",[113,106894,106896],{"className":115,"code":106895,"language":117,"meta":118,"style":118},"mujoco.mj_step(model, data)\n",[120,106897,106898],{"__ignoreMap":118},[123,106899,106900],{"class":125,"line":126},[123,106901,106895],{"class":129},[19,106903,106904,106905,2820,106907,2820,106909,2494],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[120,106906,103463],{},[120,106908,103466],{},[120,106910,103460],{},[19,106912,106913],{},"重置仿真:",[113,106915,106917],{"className":115,"code":106916,"language":117,"meta":118,"style":118},"mujoco.mj_resetData(model, data)\n",[120,106918,106919],{"__ignoreMap":118},[123,106920,106921],{"class":125,"line":126},[123,106922,106916],{"class":129},[19,106924,106925,106926,84936,106928,106930],{},"如果手动修改了 ",[120,106927,103463],{},[120,106929,103466],{},"，通常应调用:",[113,106932,106934],{"className":115,"code":106933,"language":117,"meta":118,"style":118},"mujoco.mj_forward(model, data)\n",[120,106935,106936],{"__ignoreMap":118},[123,106937,106938],{"class":125,"line":126},[123,106939,106933],{"class":129},[19,106941,106942],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[2587,106944,106946,2820,106948,2820,106950,106952],{"id":106945},"qposqvelctrl-是什么",[120,106947,106420],{},[120,106949,106750],{},[120,106951,106753],{}," 是什么",[19,106954,106955],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[48,106957,106958,106970],{},[51,106959,106960],{},[54,106961,106962,106965,106967],{},[57,106963,106964],{"align":26163},"字段",[57,106966,103093],{"align":26163},[57,106968,106969],{"align":26163},"谁来修改",[64,106971,106972,106984,106996],{},[54,106973,106974,106978,106981],{},[69,106975,106976],{"align":26163},[120,106977,103463],{},[69,106979,106980],{"align":26163},"广义位置，例如小车位置、关节角、自由物体位置姿态",[69,106982,106983],{"align":26163},"MuJoCo 更新，也可以手动设置初始状态",[54,106985,106986,106990,106993],{},[69,106987,106988],{"align":26163},[120,106989,103466],{},[69,106991,106992],{"align":26163},"广义速度，例如小车速度、关节角速度",[69,106994,106995],{"align":26163},"MuJoCo 更新，也可以手动清零",[54,106997,106998,107002,107005],{},[69,106999,107000],{"align":26163},[120,107001,103469],{},[69,107003,107004],{"align":26163},"actuator 的控制输入",[69,107006,107007],{"align":26163},"主要由你的控制代码写入",[19,107009,11457,107010,103411,107012,107014],{},[120,107011,106420],{},[120,107013,106750],{}," 不一定同维。自由刚体就是典型例子：",[113,107016,107019],{"className":107017,"code":107018,"language":7621,"meta":118},[7619],"freejoint: qpos 7 维，qvel 6 维\n",[120,107020,107018],{"__ignoreMap":118},[2587,107022,107024,103411,107026,107028],{"id":107023},"mj_step-和-mj_forward-的区别",[120,107025,103608],{},[120,107027,106640],{}," 的区别",[48,107030,107031,107044],{},[51,107032,107033],{},[54,107034,107035,107038,107041],{},[57,107036,107037],{"align":26163},"函数",[57,107039,107040],{"align":26163},"是否推进时间",[57,107042,107043],{"align":26163},"什么时候用",[64,107045,107046,107059],{},[54,107047,107048,107053,107056],{},[69,107049,107050],{"align":26163},[120,107051,107052],{},"mj_step(model, data)",[69,107054,107055],{"align":26163},"是",[69,107057,107058],{"align":26163},"正常仿真循环，每调用一次前进一步",[54,107060,107061,107066,107069],{},[69,107062,107063],{"align":26163},[120,107064,107065],{},"mj_forward(model, data)",[69,107067,107068],{"align":26163},"否",[69,107070,107071,107072,2820,107074,107076],{"align":26163},"手动改了 ",[120,107073,106420],{},[120,107075,106750],{}," 后，刷新派生量",[19,107078,107079],{},"例如你写：",[113,107081,107083],{"className":115,"code":107082,"language":117,"meta":118,"style":118},"data.qpos[2] = 2.0\n",[120,107084,107085],{"__ignoreMap":118},[123,107086,107087,107090,107092,107094,107096],{"class":125,"line":126},[123,107088,107089],{"class":129},"data.qpos[",[123,107091,2692],{"class":164},[123,107093,1941],{"class":129},[123,107095,134],{"class":133},[123,107097,107098],{"class":164}," 2.0\n",[19,107100,107101],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[113,107103,107104],{"className":115,"code":106933,"language":117,"meta":118,"style":118},[120,107105,107106],{"__ignoreMap":118},[123,107107,107108],{"class":125,"line":126},[123,107109,106933],{"class":129},[2587,107111,107113],{"id":107112},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,107115,107116,107119,107120,107122],{},[120,107117,107118],{},"mujoco.mj_resetData(model, data)"," 会把 ",[120,107121,35812],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[113,107124,107126],{"className":115,"code":107125,"language":117,"meta":118,"style":118},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[120,107127,107128,107132,107142,107152],{"__ignoreMap":118},[123,107129,107130],{"class":125,"line":126},[123,107131,106916],{"class":129},[123,107133,107134,107137,107139],{"class":125,"line":140},[123,107135,107136],{"class":129},"data.qpos[:] ",[123,107138,134],{"class":133},[123,107140,107141],{"class":129}," random_qpos\n",[123,107143,107144,107147,107149],{"class":125,"line":156},[123,107145,107146],{"class":129},"data.qvel[:] ",[123,107148,134],{"class":133},[123,107150,107151],{"class":164}," 0.0\n",[123,107153,107154],{"class":125,"line":168},[123,107155,106933],{"class":129},[14,107157,103646],{"id":103645},[113,107159,107161],{"className":115,"code":107160,"language":117,"meta":118,"style":118},"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",[120,107162,107163,107169,107179,107183,107187,107195,107200,107204,107208,107212,107217,107221,107226,107231,107236,107240,107244,107248,107252,107256,107260,107279,107286,107298,107309,107325,107341,107345,107349,107361,107373,107381,107385,107396,107400,107416,107420,107424,107433,107437,107442,107451,107455,107468,107473,107482,107486,107490,107502],{"__ignoreMap":118},[123,107164,107165,107167],{"class":125,"line":126},[123,107166,223],{"class":133},[123,107168,103694],{"class":129},[123,107170,107171,107173,107175,107177],{"class":125,"line":140},[123,107172,223],{"class":133},[123,107174,33795],{"class":129},[123,107176,547],{"class":133},[123,107178,33800],{"class":129},[123,107180,107181],{"class":125,"line":156},[123,107182,232],{"emptyLinePlaceholder":231},[123,107184,107185],{"class":125,"line":168},[123,107186,232],{"emptyLinePlaceholder":231},[123,107188,107189,107191,107193],{"class":125,"line":268},[123,107190,103707],{"class":164},[123,107192,15995],{"class":133},[123,107194,103712],{"class":143},[123,107196,107197],{"class":125,"line":291},[123,107198,107199],{"class":143},"\u003Cmujoco model=\"state_api\">\n",[123,107201,107202],{"class":125,"line":300},[123,107203,103722],{"class":143},[123,107205,107206],{"class":125,"line":305},[123,107207,232],{"emptyLinePlaceholder":231},[123,107209,107210],{"class":125,"line":316},[123,107211,103731],{"class":143},[123,107213,107214],{"class":125,"line":673},[123,107215,107216],{"class":143},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[123,107218,107219],{"class":125,"line":692},[123,107220,232],{"emptyLinePlaceholder":231},[123,107222,107223],{"class":125,"line":713},[123,107224,107225],{"class":143},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[123,107227,107228],{"class":125,"line":718},[123,107229,107230],{"class":143},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[123,107232,107233],{"class":125,"line":1138},[123,107234,107235],{"class":143},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[123,107237,107238],{"class":125,"line":1429},[123,107239,103760],{"class":143},[123,107241,107242],{"class":125,"line":1439},[123,107243,103765],{"class":143},[123,107245,107246],{"class":125,"line":1444},[123,107247,103770],{"class":143},[123,107249,107250],{"class":125,"line":1453},[123,107251,98092],{"class":143},[123,107253,107254],{"class":125,"line":1458},[123,107255,232],{"emptyLinePlaceholder":231},[123,107257,107258],{"class":125,"line":1476},[123,107259,232],{"emptyLinePlaceholder":231},[123,107261,107262,107264,107267,107270,107272,107275,107277],{"class":125,"line":1494},[123,107263,34359],{"class":133},[123,107265,107266],{"class":337}," print_state",[123,107268,107269],{"class":129},"(prefix: ",[123,107271,3769],{"class":164},[123,107273,107274],{"class":129},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[123,107276,98080],{"class":164},[123,107278,1344],{"class":129},[123,107280,107281,107283],{"class":125,"line":1499},[123,107282,33714],{"class":164},[123,107284,107285],{"class":129},"(prefix)\n",[123,107287,107288,107290,107292,107295],{"class":125,"line":1517},[123,107289,33714],{"class":164},[123,107291,1315],{"class":129},[123,107293,107294],{"class":143},"\"  timestep:\"",[123,107296,107297],{"class":129},", model.opt.timestep)\n",[123,107299,107300,107302,107304,107307],{"class":125,"line":1534},[123,107301,33714],{"class":164},[123,107303,1315],{"class":129},[123,107305,107306],{"class":143},"\"  time:\"",[123,107308,103870],{"class":129},[123,107310,107311,107313,107315,107318,107321,107323],{"class":125,"line":1539},[123,107312,33714],{"class":164},[123,107314,1315],{"class":129},[123,107316,107317],{"class":143},"\"  qpos:\"",[123,107319,107320],{"class":129},", np.round(data.qpos.copy(), ",[123,107322,2901],{"class":164},[123,107324,32913],{"class":129},[123,107326,107327,107329,107331,107334,107337,107339],{"class":125,"line":2080},[123,107328,33714],{"class":164},[123,107330,1315],{"class":129},[123,107332,107333],{"class":143},"\"  qvel:\"",[123,107335,107336],{"class":129},", np.round(data.qvel.copy(), ",[123,107338,2901],{"class":164},[123,107340,32913],{"class":129},[123,107342,107343],{"class":125,"line":2097},[123,107344,232],{"emptyLinePlaceholder":231},[123,107346,107347],{"class":125,"line":2114},[123,107348,232],{"emptyLinePlaceholder":231},[123,107350,107351,107353,107355,107357,107359],{"class":125,"line":2125},[123,107352,34359],{"class":133},[123,107354,4417],{"class":337},[123,107356,103791],{"class":129},[123,107358,98080],{"class":164},[123,107360,1344],{"class":129},[123,107362,107363,107365,107367,107369,107371],{"class":125,"line":2130},[123,107364,103800],{"class":129},[123,107366,134],{"class":133},[123,107368,103805],{"class":129},[123,107370,103707],{"class":164},[123,107372,288],{"class":129},[123,107374,107375,107377,107379],{"class":125,"line":5033},[123,107376,1349],{"class":129},[123,107378,134],{"class":133},[123,107380,103818],{"class":129},[123,107382,107383],{"class":125,"line":5041},[123,107384,232],{"emptyLinePlaceholder":231},[123,107386,107387,107390,107393],{"class":125,"line":5046},[123,107388,107389],{"class":129},"    print_state(",[123,107391,107392],{"class":143},"\"initial\"",[123,107394,107395],{"class":129},", model, data)\n",[123,107397,107398],{"class":125,"line":5052},[123,107399,232],{"emptyLinePlaceholder":231},[123,107401,107402,107404,107406,107408,107410,107412,107414],{"class":125,"line":5058},[123,107403,5641],{"class":133},[123,107405,103893],{"class":129},[123,107407,1405],{"class":133},[123,107409,34855],{"class":164},[123,107411,1315],{"class":129},[123,107413,3258],{"class":164},[123,107415,33201],{"class":129},[123,107417,107418],{"class":125,"line":5063},[123,107419,103908],{"class":129},[123,107421,107422],{"class":125,"line":10380},[123,107423,232],{"emptyLinePlaceholder":231},[123,107425,107426,107428,107431],{"class":125,"line":10404},[123,107427,107389],{"class":129},[123,107429,107430],{"class":143},"\"after 50 steps\"",[123,107432,107395],{"class":129},[123,107434,107435],{"class":125,"line":10409},[123,107436,232],{"emptyLinePlaceholder":231},[123,107438,107439],{"class":125,"line":10415},[123,107440,107441],{"class":129},"    mujoco.mj_resetData(model, data)\n",[123,107443,107444,107446,107449],{"class":125,"line":10442},[123,107445,107389],{"class":129},[123,107447,107448],{"class":143},"\"after reset\"",[123,107450,107395],{"class":129},[123,107452,107453],{"class":125,"line":10447},[123,107454,232],{"emptyLinePlaceholder":231},[123,107456,107457,107460,107462,107464,107466],{"class":125,"line":10453},[123,107458,107459],{"class":129},"    data.qpos[",[123,107461,2692],{"class":164},[123,107463,1941],{"class":129},[123,107465,134],{"class":133},[123,107467,107098],{"class":164},[123,107469,107470],{"class":125,"line":10465},[123,107471,107472],{"class":129},"    mujoco.mj_forward(model, data)\n",[123,107474,107475,107477,107480],{"class":125,"line":10477},[123,107476,107389],{"class":129},[123,107478,107479],{"class":143},"\"after manual qpos edit\"",[123,107481,107395],{"class":129},[123,107483,107484],{"class":125,"line":10489},[123,107485,232],{"emptyLinePlaceholder":231},[123,107487,107488],{"class":125,"line":12148},[123,107489,232],{"emptyLinePlaceholder":231},[123,107491,107492,107494,107496,107498,107500],{"class":125,"line":12173},[123,107493,3998],{"class":133},[123,107495,33635],{"class":164},[123,107497,103951],{"class":133},[123,107499,103954],{"class":143},[123,107501,1344],{"class":129},[123,107503,107504],{"class":125,"line":12196},[123,107505,103961],{"class":129},[19,107507,105960],{},[113,107509,107511],{"className":328,"code":107510,"language":330,"meta":118,"style":118},"touch ch3_python_state.py\n",[120,107512,107513],{"__ignoreMap":118},[123,107514,107515,107517],{"class":125,"line":126},[123,107516,103676],{"class":337},[123,107518,107519],{"class":143}," ch3_python_state.py\n",[19,107521,104692],{},[113,107523,107525],{"className":328,"code":107524,"language":330,"meta":118,"style":118},"python ch3_python_state.py\n",[120,107526,107527],{"__ignoreMap":118},[123,107528,107529,107531],{"class":125,"line":126},[123,107530,117],{"class":337},[123,107532,107519],{"class":143},[2587,107534,103964],{"id":103964},[19,107536,107537],{},"打印状态的函数：",[113,107539,107541],{"className":115,"code":107540,"language":117,"meta":118,"style":118},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[120,107542,107543],{"__ignoreMap":118},[123,107544,107545,107547,107549,107551,107553,107555,107557],{"class":125,"line":126},[123,107546,34359],{"class":133},[123,107548,107266],{"class":337},[123,107550,107269],{"class":129},[123,107552,3769],{"class":164},[123,107554,107274],{"class":129},[123,107556,98080],{"class":164},[123,107558,1344],{"class":129},[19,107560,107561,107562,107564],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[120,107563,35812],{}," 里发生了什么。",[19,107566,107567],{},"推进 50 步：",[113,107569,107571],{"className":115,"code":107570,"language":117,"meta":118,"style":118},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[120,107572,107573,107589],{"__ignoreMap":118},[123,107574,107575,107577,107579,107581,107583,107585,107587],{"class":125,"line":126},[123,107576,1399],{"class":133},[123,107578,103893],{"class":129},[123,107580,1405],{"class":133},[123,107582,34855],{"class":164},[123,107584,1315],{"class":129},[123,107586,3258],{"class":164},[123,107588,33201],{"class":129},[123,107590,107591],{"class":125,"line":140},[123,107592,104090],{"class":129},[19,107594,107595,107596,107599,107600,107602],{},"由于 ",[120,107597,107598],{},"timestep=0.01","，所以 50 步后时间约为 ",[120,107601,37739],{}," 秒。",[19,107604,107605],{},"重置：",[113,107607,107608],{"className":115,"code":106916,"language":117,"meta":118,"style":118},[120,107609,107610],{"__ignoreMap":118},[123,107611,107612],{"class":125,"line":126},[123,107613,106916],{"class":129},[19,107615,107616],{},"这会把时间、位置、速度恢复到初始状态。",[19,107618,107619],{},"手动改高度：",[113,107621,107623],{"className":115,"code":107622,"language":117,"meta":118,"style":118},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[120,107624,107625,107637],{"__ignoreMap":118},[123,107626,107627,107629,107631,107633,107635],{"class":125,"line":126},[123,107628,107089],{"class":129},[123,107630,2692],{"class":164},[123,107632,1941],{"class":129},[123,107634,134],{"class":133},[123,107636,107098],{"class":164},[123,107638,107639],{"class":125,"line":140},[123,107640,106933],{"class":129},[19,107642,107643,107644,107647,107648,107651],{},"这个例子里 ",[120,107645,107646],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[120,107649,107650],{},"2.0"," 表示把小球放到更高的位置。",[2587,107653,104099],{"id":104099},[113,107655,107656],{"className":115,"code":107540,"language":117,"meta":118,"style":118},[120,107657,107658],{"__ignoreMap":118},[123,107659,107660,107662,107664,107666,107668,107670,107672],{"class":125,"line":126},[123,107661,34359],{"class":133},[123,107663,107266],{"class":337},[123,107665,107269],{"class":129},[123,107667,3769],{"class":164},[123,107669,107274],{"class":129},[123,107671,98080],{"class":164},[123,107673,1344],{"class":129},[19,107675,107676],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,107678,107679,107688,107693],{},[29,107680,107681,107684,107685,107687],{},[120,107682,107683],{},"prefix","：一段文字，比如 ",[120,107686,107392],{},"，用来说明现在打印的是哪个阶段。",[29,107689,107690,107692],{},[120,107691,104476],{},"：MuJoCo 模型。",[29,107694,107695,107697],{},[120,107696,35812],{},"：MuJoCo 当前状态。",[19,107699,107700,2820,107703,107706],{},[120,107701,107702],{},"prefix: str",[120,107704,107705],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[113,107708,107710],{"className":115,"code":107709,"language":117,"meta":118,"style":118},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[120,107711,107712],{"__ignoreMap":118},[123,107713,107714,107716,107718,107720,107722,107724],{"class":125,"line":126},[123,107715,294],{"class":164},[123,107717,1315],{"class":129},[123,107719,107317],{"class":143},[123,107721,107320],{"class":129},[123,107723,2901],{"class":164},[123,107725,32913],{"class":129},[19,107727,107728,107731],{},[120,107729,107730],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[113,107733,107735],{"className":115,"code":107734,"language":117,"meta":118,"style":118},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[120,107736,107737,107749],{"__ignoreMap":118},[123,107738,107739,107741,107743,107745,107747],{"class":125,"line":126},[123,107740,104026],{"class":129},[123,107742,134],{"class":133},[123,107744,103805],{"class":129},[123,107746,103707],{"class":164},[123,107748,288],{"class":129},[123,107750,107751,107753,107755],{"class":125,"line":140},[123,107752,130],{"class":129},[123,107754,134],{"class":133},[123,107756,103818],{"class":129},[19,107758,107759],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[113,107761,107763],{"className":115,"code":107762,"language":117,"meta":118,"style":118},"print_state(\"initial\", model, data)\n",[120,107764,107765],{"__ignoreMap":118},[123,107766,107767,107770,107772],{"class":125,"line":126},[123,107768,107769],{"class":129},"print_state(",[123,107771,107392],{"class":143},[123,107773,107395],{"class":129},[19,107775,107776,107777,107780],{},"调用刚才定义的 ",[120,107778,107779],{},"print_state"," 函数，打印初始状态。",[113,107782,107783],{"className":115,"code":107570,"language":117,"meta":118,"style":118},[120,107784,107785,107801],{"__ignoreMap":118},[123,107786,107787,107789,107791,107793,107795,107797,107799],{"class":125,"line":126},[123,107788,1399],{"class":133},[123,107790,103893],{"class":129},[123,107792,1405],{"class":133},[123,107794,34855],{"class":164},[123,107796,1315],{"class":129},[123,107798,3258],{"class":164},[123,107800,33201],{"class":129},[123,107802,107803],{"class":125,"line":140},[123,107804,104090],{"class":129},[19,107806,107807],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[113,107809,107810],{"className":115,"code":106916,"language":117,"meta":118,"style":118},[120,107811,107812],{"__ignoreMap":118},[123,107813,107814],{"class":125,"line":126},[123,107815,106916],{"class":129},[19,107817,107818,107819,107821,107822,107824],{},"重置 ",[120,107820,35812],{},"。注意它不会重新创建 ",[120,107823,104476],{},"，因为模型结构没有变，只是状态回到初始值。",[113,107826,107827],{"className":115,"code":107082,"language":117,"meta":118,"style":118},[120,107828,107829],{"__ignoreMap":118},[123,107830,107831,107833,107835,107837,107839],{"class":125,"line":126},[123,107832,107089],{"class":129},[123,107834,2692],{"class":164},[123,107836,1941],{"class":129},[123,107838,134],{"class":133},[123,107840,107098],{"class":164},[19,107842,107843,107844,2820,107847,2820,107850,107852],{},"这行是“手动改状态”。在 freejoint 中，",[120,107845,107846],{},"qpos[0]",[120,107848,107849],{},"qpos[1]",[120,107851,107646],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[113,107854,107855],{"className":115,"code":106933,"language":117,"meta":118,"style":118},[120,107856,107857],{"__ignoreMap":118},[123,107858,107859],{"class":125,"line":126},[123,107860,106933],{"class":129},[19,107862,107863,107864,107866,107867,107869],{},"手动改完 ",[120,107865,106420],{}," 后，调用 ",[120,107868,106640],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107871,104707],{"id":104706},[19,107873,107874],{},"你会看到:",[26,107876,107877,107882,107887,107890],{},[29,107878,107879,107880],{},"初始时间为 ",[120,107881,2799],{},[29,107883,107884,107885],{},"50 步后时间约为 ",[120,107886,37739],{},[29,107888,107889],{},"reset 后状态恢复",[29,107891,107892,107893,107896,107897],{},"手动修改 ",[120,107894,107895],{},"data.qpos[2]"," 后，小球高度变为 ",[120,107898,107650],{},[19,107900,107901,107903],{},[120,107902,107646],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107905,107906],{},"输出里可以重点看三件事：",[26,107908,107909,107917,107922],{},[29,107910,107911,107913,107914,107916],{},[120,107912,4831],{}," 是否随着 ",[120,107915,103608],{}," 增加。",[29,107918,107919,107921],{},[120,107920,106420],{}," 的 z 坐标是否因为下落而变化。",[29,107923,107924,107926,107927,2494],{},[120,107925,106742],{}," 后时间是否回到 ",[120,107928,2799],{},[14,107930,104739],{"id":104738},[26,107932,107933,107939,107945,107951,107954,107963],{},[29,107934,107935,107936,2494],{},"修改 timestep 为 ",[120,107937,107938],{},"0.005",[29,107940,107941,107942,2494],{},"重新运行，检查 50 步后时间是否约为 ",[120,107943,107944],{},"0.25",[29,107946,107947,107948,2494],{},"修改重力为 ",[120,107949,107950],{},"0 0 -1.0",[29,107952,107953],{},"观察小球下降速度是否变慢。",[29,107955,104802,107956,104805,107959,107962],{},[120,107957,107958],{},"data.qpos[2] = 2.0",[120,107960,107961],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,107964,107965,107966,107969],{},"注释掉 ",[120,107967,107968],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107971,104844],{"id":104843},[2587,107973,107975,107976,107978],{"id":107974},"修改-dataqpos-后位置没有更新","修改 ",[120,107977,103463],{}," 后位置没有更新",[19,107980,104853],{},[113,107982,107983],{"className":115,"code":106933,"language":117,"meta":118,"style":118},[120,107984,107985],{"__ignoreMap":118},[123,107986,107987],{"class":125,"line":126},[123,107988,106933],{"class":129},[2587,107990,107991],{"id":107991},"数组维度看不懂",[19,107993,107994],{},"打印模型维度:",[113,107996,107998],{"className":115,"code":107997,"language":117,"meta":118,"style":118},"print(model.nq, model.nv, model.nu)\n",[120,107999,108000],{"__ignoreMap":118},[123,108001,108002,108004],{"class":125,"line":126},[123,108003,294],{"class":164},[123,108005,108006],{"class":129},"(model.nq, model.nv, model.nu)\n",[48,108008,108009,108017],{},[51,108010,108011],{},[54,108012,108013,108015],{},[57,108014,106964],{"align":26163},[57,108016,103093],{"align":26163},[64,108018,108019,108029,108039],{},[54,108020,108021,108026],{},[69,108022,108023],{"align":26163},[120,108024,108025],{},"nq",[69,108027,108028],{"align":26163},"位置变量数量",[54,108030,108031,108036],{},[69,108032,108033],{"align":26163},[120,108034,108035],{},"nv",[69,108037,108038],{"align":26163},"速度变量数量",[54,108040,108041,108045],{},[69,108042,108043],{"align":26163},[120,108044,104553],{},[69,108046,108047],{"align":26163},"控制输入数量",[2587,108049,108051,108052,108054],{"id":108050},"误以为-qpos-一定等于关节数","误以为 ",[120,108053,106420],{}," 一定等于关节数",[19,108056,108057,108058,84927,108060,108062,108063,108065],{},"不是。例如 ",[120,108059,104012],{},[120,108061,106420],{}," 是 7 维，但 ",[120,108064,106750],{}," 是 6 维。",[2587,108067,108069,108070,108072],{"id":108068},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[120,108071,106420],{}," 的第几位",[19,108074,108075],{},"初学时可以先打印：",[113,108077,108079],{"className":115,"code":108078,"language":117,"meta":118,"style":118},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[120,108080,108081,108091,108101,108113],{"__ignoreMap":118},[123,108082,108083,108085,108087,108089],{"class":125,"line":126},[123,108084,294],{"class":164},[123,108086,1315],{"class":129},[123,108088,103831],{"class":143},[123,108090,103834],{"class":129},[123,108092,108093,108095,108097,108099],{"class":125,"line":140},[123,108094,294],{"class":164},[123,108096,1315],{"class":129},[123,108098,103843],{"class":143},[123,108100,103846],{"class":129},[123,108102,108103,108105,108107,108110],{"class":125,"line":156},[123,108104,294],{"class":164},[123,108106,1315],{"class":129},[123,108108,108109],{"class":143},"\"qpos:\"",[123,108111,108112],{"class":129},", data.qpos)\n",[123,108114,108115,108117,108119,108122],{"class":125,"line":168},[123,108116,294],{"class":164},[123,108118,1315],{"class":129},[123,108120,108121],{"class":143},"\"qvel:\"",[123,108123,108124],{"class":129},", data.qvel)\n",[19,108126,108127],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[2587,108129,108130],{"id":108130},"仿真结果每次都一样",[19,108132,108133,108134,108136],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[120,108135,106420],{},"、目标点或控制输入。",[14,108138,104998],{"id":104997},[19,108140,108141,108142,1159],{},"Python 控制 MuJoCo 的核心就是读写 ",[120,108143,35812],{},[26,108145,108146,108154,108159,108164],{},[29,108147,108148,108149,103411,108151,108153],{},"用 ",[120,108150,103463],{},[120,108152,103466],{}," 读取状态。",[29,108155,108148,108156,108158],{},[120,108157,103469],{}," 写入控制。",[29,108160,108148,108161,108163],{},[120,108162,103608],{}," 推进时间。",[29,108165,108166,108167,108169],{},"手动改状态后用 ",[120,108168,106640],{}," 刷新派生量。",[19,108171,108172],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2526,108174,108175],{},"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":118,"searchDepth":140,"depth":140,"links":108177},[108178,108179,108180,108187,108191,108192,108193,108203],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":108181},[108182,108184,108186],{"id":106945,"depth":156,"text":108183},"qpos、qvel、ctrl 是什么",{"id":107023,"depth":156,"text":108185},"mj_step 和 mj_forward 的区别",{"id":107112,"depth":156,"text":107113},{"id":103645,"depth":140,"text":103646,"children":108188},[108189,108190],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":108194},[108195,108197,108198,108200,108202],{"id":107974,"depth":156,"text":108196},"修改 data.qpos 后位置没有更新",{"id":107991,"depth":156,"text":107991},{"id":108050,"depth":156,"text":108199},"误以为 qpos 一定等于关节数",{"id":108068,"depth":156,"text":108201},"不知道某个元素在 qpos 的第几位",{"id":108130,"depth":156,"text":108130},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106708,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108210,"title":108211,"body":108212,"description":118,"extension":2545,"meta":109902,"navigation":231,"path":109903,"seo":109904,"stem":109905,"__hash__":109906},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108213,"toc":109878},[108214,108217,108219,108222,108224,108249,108252,108271,108274,108276,108278,108302,108304,108318,108320,108361,108363,108387,108389,108392,108426,108428,108441,108444,108512,108521,108525,108528,108562,108568,108571,108575,108614,108617,108637,108641,108684,108686,108715,108718,108724,108727,108729,109123,109125,109137,109139,109150,109152,109155,109184,109192,109195,109230,109233,109235,109243,109246,109248,109259,109269,109289,109292,109328,109340,109388,109407,109449,109462,109490,109495,109516,109526,109544,109547,109581,109584,109604,109607,109626,109632,109634,109637,109643,109649,109659,109662,109668,109677,109679,109725,109727,109733,109739,109742,109745,109765,109768,109774,109780,109782,109805,109808,109811,109820,109823,109861,109863,109866,109872,109875],[10,108215,108211],{"id":108216},"_4关节actuator-与力控制",[14,108218,103040],{"id":103039},[19,108220,108221],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108223,106721],{},[26,108225,108226,108232,108237,108241,108246],{},[29,108227,108228,108231],{},[120,108229,108230],{},"hinge"," 关节",[29,108233,108234],{},[120,108235,108236],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,108238,108239],{},[120,108240,103469],{},[29,108242,108243],{},[120,108244,108245],{},"ctrlrange",[29,108247,108248],{},"读取关节角和角速度",[19,108250,108251],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[113,108253,108255],{"className":115,"code":108254,"language":117,"meta":118,"style":118},"data.ctrl[0] = ...\n",[120,108256,108257],{"__ignoreMap":118},[123,108258,108259,108262,108264,108266,108268],{"class":125,"line":126},[123,108260,108261],{"class":129},"data.ctrl[",[123,108263,2799],{"class":164},[123,108265,1941],{"class":129},[123,108267,134],{"class":133},[123,108269,108270],{"class":164}," ...\n",[19,108272,108273],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108275,103163],{"id":103162},[19,108277,103166],{},[113,108279,108280],{"className":328,"code":106778,"language":330,"meta":118,"style":118},[120,108281,108282],{"__ignoreMap":118},[123,108283,108284,108286,108288,108290,108292,108294,108296,108298,108300],{"class":125,"line":126},[123,108285,26999],{"class":337},[123,108287,28736],{"class":143},[123,108289,341],{"class":143},[123,108291,28821],{"class":164},[123,108293,106793],{"class":143},[123,108295,103191],{"class":143},[123,108297,104892],{"class":143},[123,108299,103207],{"class":143},[123,108301,106802],{"class":143},[19,108303,105209],{},[113,108305,108306],{"className":328,"code":103312,"language":330,"meta":118,"style":118},[120,108307,108308],{"__ignoreMap":118},[123,108309,108310,108312,108314,108316],{"class":125,"line":126},[123,108311,338],{"class":337},[123,108313,341],{"class":143},[123,108315,103323],{"class":143},[123,108317,103326],{"class":143},[19,108319,105226],{},[113,108321,108323],{"className":328,"code":108322,"language":330,"meta":118,"style":118},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[120,108324,108325,108342,108351],{"__ignoreMap":118},[123,108326,108327,108329,108331,108333,108336,108338,108340],{"class":125,"line":126},[123,108328,32750],{"class":337},[123,108330,31596],{"class":143},[123,108332,27537],{"class":164},[123,108334,108335],{"class":143}," mujoco-control",[123,108337,103368],{"class":143},[123,108339,103371],{"class":164},[123,108341,103374],{"class":164},[123,108343,108344,108346,108348],{"class":125,"line":140},[123,108345,32750],{"class":337},[123,108347,103381],{"class":143},[123,108349,108350],{"class":143}," mujoco-control\n",[123,108352,108353,108355,108357,108359],{"class":125,"line":156},[123,108354,338],{"class":337},[123,108356,341],{"class":143},[123,108358,103323],{"class":143},[123,108360,103326],{"class":143},[19,108362,103397],{},[26,108364,108365,108371,108378,108384],{},[29,108366,108367,108370],{},[120,108368,108369],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,108372,108373,108375,108376,2494],{},[120,108374,103469],{}," 长度等于 ",[120,108377,104549],{},[29,108379,84619,108380,108383],{},[120,108381,108382],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,108385,108386],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108388,103438],{"id":103437},[19,108390,108391],{},"关节决定 body 如何运动:",[113,108393,108395],{"className":55470,"code":108394,"language":55472,"meta":118,"style":118},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[120,108396,108397],{"__ignoreMap":118},[123,108398,108399,108401,108403,108405,108407,108410,108412,108414,108416,108419,108421,108424],{"class":125,"line":126},[123,108400,3509],{"class":129},[123,108402,105346],{"class":53707},[123,108404,17350],{"class":337},[123,108406,134],{"class":129},[123,108408,108409],{"class":143},"\"hinge\"",[123,108411,56227],{"class":337},[123,108413,134],{"class":129},[123,108415,108409],{"class":143},[123,108417,108418],{"class":337}," axis",[123,108420,134],{"class":129},[123,108422,108423],{"class":143},"\"0 1 0\"",[123,108425,103537],{"class":129},[19,108427,105442],{},[26,108429,108430,108435,108438],{},[29,108431,108432,108433],{},"名字是 ",[120,108434,108230],{},[29,108436,108437],{},"类型是旋转关节",[29,108439,108440],{},"绕 y 轴旋转",[19,108442,108443],{},"actuator 决定如何施加控制:",[113,108445,108447],{"className":55470,"code":108446,"language":55472,"meta":118,"style":118},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[120,108448,108449,108458,108504],{"__ignoreMap":118},[123,108450,108451,108453,108456],{"class":125,"line":126},[123,108452,3509],{"class":129},[123,108454,108455],{"class":53707},"actuator",[123,108457,53714],{"class":129},[123,108459,108460,108462,108465,108467,108469,108472,108475,108477,108479,108482,108484,108486,108489,108491,108494,108497,108499,108502],{"class":125,"line":140},[123,108461,54548],{"class":129},[123,108463,108464],{"class":53707},"motor",[123,108466,17350],{"class":337},[123,108468,134],{"class":129},[123,108470,108471],{"class":143},"\"hinge_motor\"",[123,108473,108474],{"class":337}," joint",[123,108476,134],{"class":129},[123,108478,108409],{"class":143},[123,108480,108481],{"class":337}," gear",[123,108483,134],{"class":129},[123,108485,6118],{"class":143},[123,108487,108488],{"class":337}," ctrlrange",[123,108490,134],{"class":129},[123,108492,108493],{"class":143},"\"-2 2\"",[123,108495,108496],{"class":337}," ctrllimited",[123,108498,134],{"class":129},[123,108500,108501],{"class":143},"\"true\"",[123,108503,103537],{"class":129},[123,108505,108506,108508,108510],{"class":125,"line":156},[123,108507,54190],{"class":129},[123,108509,108455],{"class":53707},[123,108511,53714],{"class":129},[19,108513,108514,108517,108518,2494],{},[120,108515,108516],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[120,108519,108520],{},"[-2, 2]",[2587,108522,108524],{"id":108523},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108526,108527],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[48,108529,108530,108540],{},[51,108531,108532],{},[54,108533,108534,108536,108538],{},[57,108535,28175],{"align":26163},[57,108537,739],{"align":26163},[57,108539,103127],{"align":26163},[64,108541,108542,108552],{},[54,108543,108544,108546,108549],{},[69,108545,105346],{"align":26163},[69,108547,108548],{"align":26163},"定义能怎么动",[69,108550,108551],{"align":26163},"门轴允许门旋转",[54,108553,108554,108556,108559],{},[69,108555,108455],{"align":26163},[69,108557,108558],{"align":26163},"定义怎么施力或控制",[69,108560,108561],{"align":26163},"人推门、马达带动门",[19,108563,108564,108565,108567],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[120,108566,103469],{}," 主动控制它。",[19,108569,108570],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[2587,108572,108574],{"id":108573},"hinge-joint","hinge joint",[113,108576,108578],{"className":55470,"code":108577,"language":55472,"meta":118,"style":118},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[120,108579,108580],{"__ignoreMap":118},[123,108581,108582,108584,108586,108588,108590,108592,108594,108596,108598,108600,108602,108604,108607,108609,108612],{"class":125,"line":126},[123,108583,3509],{"class":129},[123,108585,105346],{"class":53707},[123,108587,17350],{"class":337},[123,108589,134],{"class":129},[123,108591,108409],{"class":143},[123,108593,56227],{"class":337},[123,108595,134],{"class":129},[123,108597,108409],{"class":143},[123,108599,108418],{"class":337},[123,108601,134],{"class":129},[123,108603,108423],{"class":143},[123,108605,108606],{"class":337}," damping",[123,108608,134],{"class":129},[123,108610,108611],{"class":143},"\"0.1\"",[123,108613,103537],{"class":129},[19,108615,108616],{},"含义：",[26,108618,108619,108625,108631],{},[29,108620,108621,108624],{},[120,108622,108623],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,108626,108627,108630],{},[120,108628,108629],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,108632,108633,108636],{},[120,108634,108635],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[2587,108638,108640],{"id":108639},"motor-actuator","motor actuator",[113,108642,108644],{"className":55470,"code":108643,"language":55472,"meta":118,"style":118},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[120,108645,108646],{"__ignoreMap":118},[123,108647,108648,108650,108652,108654,108656,108658,108660,108662,108664,108666,108668,108670,108672,108674,108676,108678,108680,108682],{"class":125,"line":126},[123,108649,3509],{"class":129},[123,108651,108464],{"class":53707},[123,108653,17350],{"class":337},[123,108655,134],{"class":129},[123,108657,108471],{"class":143},[123,108659,108474],{"class":337},[123,108661,134],{"class":129},[123,108663,108409],{"class":143},[123,108665,108481],{"class":337},[123,108667,134],{"class":129},[123,108669,6118],{"class":143},[123,108671,108488],{"class":337},[123,108673,134],{"class":129},[123,108675,108493],{"class":143},[123,108677,108496],{"class":337},[123,108679,134],{"class":129},[123,108681,108501],{"class":143},[123,108683,103537],{"class":129},[19,108685,108616],{},[26,108687,108688,108697,108703,108709],{},[29,108689,108690,108693,108694,108696],{},[120,108691,108692],{},"joint=\"hinge\"","：这个电机作用在名为 ",[120,108695,108230],{}," 的关节上。",[29,108698,108699,108702],{},[120,108700,108701],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,108704,108705,108708],{},[120,108706,108707],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,108710,108711,108714],{},[120,108712,108713],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108716,108717],{},"简单理解：",[113,108719,108722],{"className":108720,"code":108721,"language":7621,"meta":118},[7619],"实际施加效果 ≈ data.ctrl[0] * gear\n",[120,108723,108721],{"__ignoreMap":118},[19,108725,108726],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108728,103646],{"id":103645},[113,108730,108732],{"className":115,"code":108731,"language":117,"meta":118,"style":118},"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",[120,108733,108734,108741,108745,108751,108761,108765,108769,108777,108782,108787,108791,108795,108800,108805,108809,108814,108819,108824,108829,108833,108837,108841,108846,108851,108856,108860,108864,108868,108872,108884,108896,108904,108908,108918,108928,108938,108942,108955,108968,108972,108989,109003,109038,109042,109046,109057,109072,109087,109099,109103,109107,109119],{"__ignoreMap":118},[123,108735,108736,108738],{"class":125,"line":126},[123,108737,223],{"class":133},[123,108739,108740],{"class":129}," math\n",[123,108742,108743],{"class":125,"line":140},[123,108744,232],{"emptyLinePlaceholder":231},[123,108746,108747,108749],{"class":125,"line":156},[123,108748,223],{"class":133},[123,108750,103694],{"class":129},[123,108752,108753,108755,108757,108759],{"class":125,"line":168},[123,108754,223],{"class":133},[123,108756,33795],{"class":129},[123,108758,547],{"class":133},[123,108760,33800],{"class":129},[123,108762,108763],{"class":125,"line":268},[123,108764,232],{"emptyLinePlaceholder":231},[123,108766,108767],{"class":125,"line":291},[123,108768,232],{"emptyLinePlaceholder":231},[123,108770,108771,108773,108775],{"class":125,"line":300},[123,108772,103707],{"class":164},[123,108774,15995],{"class":133},[123,108776,103712],{"class":143},[123,108778,108779],{"class":125,"line":305},[123,108780,108781],{"class":143},"\u003Cmujoco model=\"one_link_motor\">\n",[123,108783,108784],{"class":125,"line":316},[123,108785,108786],{"class":143},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[123,108788,108789],{"class":125,"line":673},[123,108790,232],{"emptyLinePlaceholder":231},[123,108792,108793],{"class":125,"line":692},[123,108794,103731],{"class":143},[123,108796,108797],{"class":125,"line":713},[123,108798,108799],{"class":143},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[123,108801,108802],{"class":125,"line":718},[123,108803,108804],{"class":143},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[123,108806,108807],{"class":125,"line":1138},[123,108808,232],{"emptyLinePlaceholder":231},[123,108810,108811],{"class":125,"line":1429},[123,108812,108813],{"class":143},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[123,108815,108816],{"class":125,"line":1439},[123,108817,108818],{"class":143},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[123,108820,108821],{"class":125,"line":1444},[123,108822,108823],{"class":143},"        \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",[123,108825,108826],{"class":125,"line":1453},[123,108827,108828],{"class":143},"      \u003C\u002Fbody>\n",[123,108830,108831],{"class":125,"line":1458},[123,108832,103760],{"class":143},[123,108834,108835],{"class":125,"line":1476},[123,108836,103765],{"class":143},[123,108838,108839],{"class":125,"line":1494},[123,108840,232],{"emptyLinePlaceholder":231},[123,108842,108843],{"class":125,"line":1499},[123,108844,108845],{"class":143},"  \u003Cactuator>\n",[123,108847,108848],{"class":125,"line":1517},[123,108849,108850],{"class":143},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[123,108852,108853],{"class":125,"line":1534},[123,108854,108855],{"class":143},"  \u003C\u002Factuator>\n",[123,108857,108858],{"class":125,"line":1539},[123,108859,103770],{"class":143},[123,108861,108862],{"class":125,"line":2080},[123,108863,98092],{"class":143},[123,108865,108866],{"class":125,"line":2097},[123,108867,232],{"emptyLinePlaceholder":231},[123,108869,108870],{"class":125,"line":2114},[123,108871,232],{"emptyLinePlaceholder":231},[123,108873,108874,108876,108878,108880,108882],{"class":125,"line":2125},[123,108875,34359],{"class":133},[123,108877,4417],{"class":337},[123,108879,103791],{"class":129},[123,108881,98080],{"class":164},[123,108883,1344],{"class":129},[123,108885,108886,108888,108890,108892,108894],{"class":125,"line":2130},[123,108887,103800],{"class":129},[123,108889,134],{"class":133},[123,108891,103805],{"class":129},[123,108893,103707],{"class":164},[123,108895,288],{"class":129},[123,108897,108898,108900,108902],{"class":125,"line":5033},[123,108899,1349],{"class":129},[123,108901,134],{"class":133},[123,108903,103818],{"class":129},[123,108905,108906],{"class":125,"line":5041},[123,108907,232],{"emptyLinePlaceholder":231},[123,108909,108910,108912,108914,108916],{"class":125,"line":5046},[123,108911,33714],{"class":164},[123,108913,1315],{"class":129},[123,108915,103831],{"class":143},[123,108917,103834],{"class":129},[123,108919,108920,108922,108924,108926],{"class":125,"line":5052},[123,108921,33714],{"class":164},[123,108923,1315],{"class":129},[123,108925,103843],{"class":143},[123,108927,103846],{"class":129},[123,108929,108930,108932,108934,108936],{"class":125,"line":5058},[123,108931,33714],{"class":164},[123,108933,1315],{"class":129},[123,108935,103855],{"class":143},[123,108937,103858],{"class":129},[123,108939,108940],{"class":125,"line":5063},[123,108941,232],{"emptyLinePlaceholder":231},[123,108943,108944,108946,108949,108951,108953],{"class":125,"line":10380},[123,108945,1711],{"class":133},[123,108947,108948],{"class":129}," model.nu ",[123,108950,23376],{"class":133},[123,108952,27540],{"class":164},[123,108954,1344],{"class":129},[123,108956,108957,108959,108961,108963,108966],{"class":125,"line":10404},[123,108958,105822],{"class":133},[123,108960,105825],{"class":164},[123,108962,1315],{"class":129},[123,108964,108965],{"class":143},"\"expected exactly one actuator\"",[123,108967,288],{"class":129},[123,108969,108970],{"class":125,"line":10409},[123,108971,232],{"emptyLinePlaceholder":231},[123,108973,108974,108976,108978,108980,108982,108984,108987],{"class":125,"line":10415},[123,108975,5641],{"class":133},[123,108977,34028],{"class":129},[123,108979,1405],{"class":133},[123,108981,34855],{"class":164},[123,108983,1315],{"class":129},[123,108985,108986],{"class":164},"2000",[123,108988,33201],{"class":129},[123,108990,108991,108994,108996,108998,109000],{"class":125,"line":10442},[123,108992,108993],{"class":129},"        t ",[123,108995,134],{"class":133},[123,108997,34028],{"class":129},[123,108999,3060],{"class":133},[123,109001,109002],{"class":129}," model.opt.timestep\n",[123,109004,109005,109008,109010,109012,109014,109017,109019,109022,109024,109026,109029,109031,109033,109035],{"class":125,"line":10447},[123,109006,109007],{"class":129},"        data.ctrl[",[123,109009,2799],{"class":164},[123,109011,1941],{"class":129},[123,109013,134],{"class":133},[123,109015,109016],{"class":164}," 1.5",[123,109018,8951],{"class":133},[123,109020,109021],{"class":129}," math.sin(",[123,109023,107650],{"class":164},[123,109025,8951],{"class":133},[123,109027,109028],{"class":129}," math.pi ",[123,109030,3060],{"class":133},[123,109032,64269],{"class":164},[123,109034,8951],{"class":133},[123,109036,109037],{"class":129}," t)\n",[123,109039,109040],{"class":125,"line":10453},[123,109041,103908],{"class":129},[123,109043,109044],{"class":125,"line":10465},[123,109045,232],{"emptyLinePlaceholder":231},[123,109047,109048,109050,109052,109055],{"class":125,"line":10477},[123,109049,33714],{"class":164},[123,109051,1315],{"class":129},[123,109053,109054],{"class":143},"\"time:\"",[123,109056,103870],{"class":129},[123,109058,109059,109061,109063,109066,109068,109070],{"class":125,"line":10489},[123,109060,33714],{"class":164},[123,109062,1315],{"class":129},[123,109064,109065],{"class":143},"\"joint qpos:\"",[123,109067,107320],{"class":129},[123,109069,2901],{"class":164},[123,109071,32913],{"class":129},[123,109073,109074,109076,109078,109081,109083,109085],{"class":125,"line":12148},[123,109075,33714],{"class":164},[123,109077,1315],{"class":129},[123,109079,109080],{"class":143},"\"joint qvel:\"",[123,109082,107336],{"class":129},[123,109084,2901],{"class":164},[123,109086,32913],{"class":129},[123,109088,109089,109091,109093,109096],{"class":125,"line":12173},[123,109090,33714],{"class":164},[123,109092,1315],{"class":129},[123,109094,109095],{"class":143},"\"last ctrl:\"",[123,109097,109098],{"class":129},", data.ctrl.copy())\n",[123,109100,109101],{"class":125,"line":12196},[123,109102,232],{"emptyLinePlaceholder":231},[123,109104,109105],{"class":125,"line":12220},[123,109106,232],{"emptyLinePlaceholder":231},[123,109108,109109,109111,109113,109115,109117],{"class":125,"line":12225},[123,109110,3998],{"class":133},[123,109112,33635],{"class":164},[123,109114,103951],{"class":133},[123,109116,103954],{"class":143},[123,109118,1344],{"class":129},[123,109120,109121],{"class":125,"line":12230},[123,109122,103961],{"class":129},[19,109124,105960],{},[113,109126,109128],{"className":328,"code":109127,"language":330,"meta":118,"style":118},"touch ch4_joint_motor.py\n",[120,109129,109130],{"__ignoreMap":118},[123,109131,109132,109134],{"class":125,"line":126},[123,109133,103676],{"class":337},[123,109135,109136],{"class":143}," ch4_joint_motor.py\n",[19,109138,104692],{},[113,109140,109142],{"className":328,"code":109141,"language":330,"meta":118,"style":118},"python ch4_joint_motor.py\n",[120,109143,109144],{"__ignoreMap":118},[123,109145,109146,109148],{"class":125,"line":126},[123,109147,117],{"class":337},[123,109149,109136],{"class":143},[2587,109151,103964],{"id":103964},[19,109153,109154],{},"检查 actuator 数量：",[113,109156,109158],{"className":115,"code":109157,"language":117,"meta":118,"style":118},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[120,109159,109160,109172],{"__ignoreMap":118},[123,109161,109162,109164,109166,109168,109170],{"class":125,"line":126},[123,109163,3998],{"class":133},[123,109165,108948],{"class":129},[123,109167,23376],{"class":133},[123,109169,27540],{"class":164},[123,109171,1344],{"class":129},[123,109173,109174,109176,109178,109180,109182],{"class":125,"line":140},[123,109175,106285],{"class":133},[123,109177,105825],{"class":164},[123,109179,1315],{"class":129},[123,109181,108965],{"class":143},[123,109183,288],{"class":129},[19,109185,109186,109188,109189,109191],{},[120,109187,104549],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[120,109190,103469],{}," 长度应该是 1。",[19,109193,109194],{},"产生正弦控制信号：",[113,109196,109198],{"className":115,"code":109197,"language":117,"meta":118,"style":118},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[120,109199,109200],{"__ignoreMap":118},[123,109201,109202,109204,109206,109208,109210,109212,109214,109216,109218,109220,109222,109224,109226,109228],{"class":125,"line":126},[123,109203,108261],{"class":129},[123,109205,2799],{"class":164},[123,109207,1941],{"class":129},[123,109209,134],{"class":133},[123,109211,109016],{"class":164},[123,109213,8951],{"class":133},[123,109215,109021],{"class":129},[123,109217,107650],{"class":164},[123,109219,8951],{"class":133},[123,109221,109028],{"class":129},[123,109223,3060],{"class":133},[123,109225,64269],{"class":164},[123,109227,8951],{"class":133},[123,109229,109037],{"class":129},[19,109231,109232],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109234,104064],{},[113,109236,109237],{"className":115,"code":106895,"language":117,"meta":118,"style":118},[120,109238,109239],{"__ignoreMap":118},[123,109240,109241],{"class":125,"line":126},[123,109242,106895],{"class":129},[19,109244,109245],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[2587,109247,104099],{"id":104099},[113,109249,109251],{"className":115,"code":109250,"language":117,"meta":118,"style":118},"import math\n",[120,109252,109253],{"__ignoreMap":118},[123,109254,109255,109257],{"class":125,"line":126},[123,109256,223],{"class":133},[123,109258,108740],{"class":129},[19,109260,109261,109262,103411,109265,109268],{},"导入 Python 标准库里的数学模块。后面要用 ",[120,109263,109264],{},"math.sin",[120,109266,109267],{},"math.pi"," 生成周期变化的控制信号。",[113,109270,109271],{"className":115,"code":106076,"language":117,"meta":118,"style":118},[120,109272,109273,109279],{"__ignoreMap":118},[123,109274,109275,109277],{"class":125,"line":126},[123,109276,223],{"class":133},[123,109278,103694],{"class":129},[123,109280,109281,109283,109285,109287],{"class":125,"line":140},[123,109282,223],{"class":133},[123,109284,33795],{"class":129},[123,109286,547],{"class":133},[123,109288,33800],{"class":129},[19,109290,109291],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[113,109293,109294],{"className":55470,"code":108577,"language":55472,"meta":118,"style":118},[120,109295,109296],{"__ignoreMap":118},[123,109297,109298,109300,109302,109304,109306,109308,109310,109312,109314,109316,109318,109320,109322,109324,109326],{"class":125,"line":126},[123,109299,3509],{"class":129},[123,109301,105346],{"class":53707},[123,109303,17350],{"class":337},[123,109305,134],{"class":129},[123,109307,108409],{"class":143},[123,109309,56227],{"class":337},[123,109311,134],{"class":129},[123,109313,108409],{"class":143},[123,109315,108418],{"class":337},[123,109317,134],{"class":129},[123,109319,108423],{"class":143},[123,109321,108606],{"class":337},[123,109323,134],{"class":129},[123,109325,108611],{"class":143},[123,109327,103537],{"class":129},[19,109329,109330,109331,109333,109334,109336,109337,109339],{},"这行定义关节。",[120,109332,108230],{}," 表示旋转关节。",[120,109335,108629],{}," 表示绕 y 轴旋转。",[120,109338,108635],{}," 表示有一点阻尼，运动不会完全无损耗。",[113,109341,109343],{"className":55470,"code":109342,"language":55472,"meta":118,"style":118},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[120,109344,109345],{"__ignoreMap":118},[123,109346,109347,109349,109351,109353,109355,109358,109360,109362,109365,109368,109370,109373,109375,109377,109379,109381,109383,109386],{"class":125,"line":126},[123,109348,3509],{"class":129},[123,109350,103513],{"class":53707},[123,109352,17350],{"class":337},[123,109354,134],{"class":129},[123,109356,109357],{"class":143},"\"link_geom\"",[123,109359,56227],{"class":337},[123,109361,134],{"class":129},[123,109363,109364],{"class":143},"\"capsule\"",[123,109366,109367],{"class":337}," fromto",[123,109369,134],{"class":129},[123,109371,109372],{"class":143},"\"0 0 0 0 0 0.5\"",[123,109374,103529],{"class":337},[123,109376,134],{"class":129},[123,109378,106168],{"class":143},[123,109380,104392],{"class":337},[123,109382,134],{"class":129},[123,109384,109385],{"class":143},"\"0.5\"",[123,109387,103537],{"class":129},[19,109389,109390,109391,109393,109394,109396,109397,109400,109401,2494,109404,109406],{},"这行定义摆杆的形状。",[120,109392,105555],{}," 是胶囊体，适合表示杆子。",[120,109395,105566],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[120,109398,109399],{},"(0,0,0)"," 延伸到 ",[120,109402,109403],{},"(0,0,0.5)",[120,109405,105560],{}," 是半径。",[113,109408,109409],{"className":55470,"code":108643,"language":55472,"meta":118,"style":118},[120,109410,109411],{"__ignoreMap":118},[123,109412,109413,109415,109417,109419,109421,109423,109425,109427,109429,109431,109433,109435,109437,109439,109441,109443,109445,109447],{"class":125,"line":126},[123,109414,3509],{"class":129},[123,109416,108464],{"class":53707},[123,109418,17350],{"class":337},[123,109420,134],{"class":129},[123,109422,108471],{"class":143},[123,109424,108474],{"class":337},[123,109426,134],{"class":129},[123,109428,108409],{"class":143},[123,109430,108481],{"class":337},[123,109432,134],{"class":129},[123,109434,6118],{"class":143},[123,109436,108488],{"class":337},[123,109438,134],{"class":129},[123,109440,108493],{"class":143},[123,109442,108496],{"class":337},[123,109444,134],{"class":129},[123,109446,108501],{"class":143},[123,109448,103537],{"class":129},[19,109450,109451,109452,109454,109455,109458,109459,109461],{},"这行定义电机。它作用在 ",[120,109453,108230],{}," 关节上。",[120,109456,109457],{},"gear"," 可以理解成放大倍数。",[120,109460,108245],{}," 限制控制输入范围。",[113,109463,109464],{"className":115,"code":109157,"language":117,"meta":118,"style":118},[120,109465,109466,109478],{"__ignoreMap":118},[123,109467,109468,109470,109472,109474,109476],{"class":125,"line":126},[123,109469,3998],{"class":133},[123,109471,108948],{"class":129},[123,109473,23376],{"class":133},[123,109475,27540],{"class":164},[123,109477,1344],{"class":129},[123,109479,109480,109482,109484,109486,109488],{"class":125,"line":140},[123,109481,106285],{"class":133},[123,109483,105825],{"class":164},[123,109485,1315],{"class":129},[123,109487,108965],{"class":143},[123,109489,288],{"class":129},[19,109491,109492,109494],{},[120,109493,104549],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[113,109496,109498],{"className":115,"code":109497,"language":117,"meta":118,"style":118},"for step in range(2000):\n",[120,109499,109500],{"__ignoreMap":118},[123,109501,109502,109504,109506,109508,109510,109512,109514],{"class":125,"line":126},[123,109503,1399],{"class":133},[123,109505,34028],{"class":129},[123,109507,1405],{"class":133},[123,109509,34855],{"class":164},[123,109511,1315],{"class":129},[123,109513,108986],{"class":164},[123,109515,33201],{"class":129},[19,109517,109518,109519,109521,109522,109525],{},"循环 2000 步。这里没有用 ",[120,109520,3591],{},"，而是用 ",[120,109523,109524],{},"step","，因为后面要用当前步数计算时间。",[113,109527,109529],{"className":115,"code":109528,"language":117,"meta":118,"style":118},"t = step * model.opt.timestep\n",[120,109530,109531],{"__ignoreMap":118},[123,109532,109533,109536,109538,109540,109542],{"class":125,"line":126},[123,109534,109535],{"class":129},"t ",[123,109537,134],{"class":133},[123,109539,34028],{"class":129},[123,109541,3060],{"class":133},[123,109543,109002],{"class":129},[19,109545,109546],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[113,109548,109549],{"className":115,"code":109197,"language":117,"meta":118,"style":118},[120,109550,109551],{"__ignoreMap":118},[123,109552,109553,109555,109557,109559,109561,109563,109565,109567,109569,109571,109573,109575,109577,109579],{"class":125,"line":126},[123,109554,108261],{"class":129},[123,109556,2799],{"class":164},[123,109558,1941],{"class":129},[123,109560,134],{"class":133},[123,109562,109016],{"class":164},[123,109564,8951],{"class":133},[123,109566,109021],{"class":129},[123,109568,107650],{"class":164},[123,109570,8951],{"class":133},[123,109572,109028],{"class":129},[123,109574,3060],{"class":133},[123,109576,64269],{"class":164},[123,109578,8951],{"class":133},[123,109580,109037],{"class":129},[19,109582,109583],{},"这行给电机输入一个正弦波。拆开看：",[26,109585,109586,109592,109598],{},[29,109587,109588,109591],{},[120,109589,109590],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,109593,109594,109597],{},[120,109595,109596],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,109599,109600,109603],{},[120,109601,109602],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109605,109606],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[113,109608,109610],{"className":115,"code":109609,"language":117,"meta":118,"style":118},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[120,109611,109612],{"__ignoreMap":118},[123,109613,109614,109616,109618,109620,109622,109624],{"class":125,"line":126},[123,109615,294],{"class":164},[123,109617,1315],{"class":129},[123,109619,109065],{"class":143},[123,109621,107320],{"class":129},[123,109623,2901],{"class":164},[123,109625,32913],{"class":129},[19,109627,109628,109629,109631],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[120,109630,103463],{}," 只有一个数。",[14,109633,104707],{"id":104706},[19,109635,109636],{},"输出类似:",[113,109638,109641],{"className":109639,"code":109640,"language":7621,"meta":118},[7619],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[120,109642,109640],{"__ignoreMap":118},[19,109644,109645,109646,109648],{},"这里 ",[120,109647,108516],{}," 是电机输入。",[19,109650,109651,109654,109655,109658],{},[120,109652,109653],{},"joint qpos"," 是关节角度，单位通常是弧度。",[120,109656,109657],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109660,109661],{},"角度单位提示：",[113,109663,109666],{"className":109664,"code":109665,"language":7621,"meta":118},[7619],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[120,109667,109665],{"__ignoreMap":118},[19,109669,109670,109671,109673,109674,109676],{},"如果你看到 ",[120,109672,106420],{}," 是 ",[120,109675,37739],{},"，大约就是 28.6 度。",[14,109678,104739],{"id":104738},[26,109680,109681,109688,109691,109698,109701,109709,109717],{},[29,109682,104802,109683,104805,109685,2494],{},[120,109684,108701],{},[120,109686,109687],{},"gear=\"5\"",[29,109689,109690],{},"重新运行，观察关节运动是否更剧烈。",[29,109692,104802,109693,104805,109695,2494],{},[120,109694,108245],{},[120,109696,109697],{},"-0.2 0.2",[29,109699,109700],{},"重新运行，观察控制能力是否变弱。",[29,109702,109703,109704,109706,109707,2494],{},"去掉 actuator，确认 ",[120,109705,104549],{}," 变成 ",[120,109708,2799],{},[29,109710,104802,109711,104805,109713,109716],{},[120,109712,108635],{},[120,109714,109715],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,109718,104802,109719,104805,109721,109724],{},[120,109720,108629],{},[120,109722,109723],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109726,104844],{"id":104843},[2587,109728,109730],{"id":109729},"indexerror-index-0-is-out-of-bounds",[120,109731,109732],{},"IndexError: index 0 is out of bounds",[19,109734,109735,109736,109738],{},"原因是 ",[120,109737,108382],{},"，没有 actuator。",[2587,109740,109741],{"id":109741},"关节几乎不动",[19,109743,109744],{},"可能原因:",[26,109746,109747,109752,109756,109762],{},[29,109748,109749,109751],{},[120,109750,109457],{}," 太小",[29,109753,109754,109751],{},[120,109755,108245],{},[29,109757,109758,109761],{},[120,109759,109760],{},"damping"," 太大",[29,109763,109764],{},"重力方向导致运动不明显",[2587,109766,109767],{"id":109767},"模型编译失败",[19,109769,109770,109771,109773],{},"检查 actuator 引用的 ",[120,109772,108692],{}," 是否存在，joint 名称是否拼写一致。",[2587,109775,109777,109779],{"id":109776},"datactrl0-写了但没有效果",[120,109778,108516],{}," 写了但没有效果",[19,109781,104966],{},[26,109783,109784,109789,109792,109797,109802],{},[29,109785,109786,109788],{},[120,109787,104549],{}," 是否大于 0。",[29,109790,109791],{},"motor 是否引用了正确 joint。",[29,109793,109794,109796],{},[120,109795,109457],{}," 是否太小。",[29,109798,109799,109801],{},[120,109800,108245],{}," 是否把输入限制得太小。",[29,109803,109804],{},"body 是否真的有可动 joint。",[2587,109806,109807],{"id":109807},"控制输入超过范围会怎样",[19,109809,109810],{},"如果设置了：",[113,109812,109814],{"className":55470,"code":109813,"language":55472,"meta":118,"style":118},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[120,109815,109816],{"__ignoreMap":118},[123,109817,109818],{"class":125,"line":126},[123,109819,109813],{"class":129},[19,109821,109822],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[113,109824,109826],{"className":115,"code":109825,"language":117,"meta":118,"style":118},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[120,109827,109828,109848],{"__ignoreMap":118},[123,109829,109830,109833,109835,109838,109840,109842,109844,109846],{"class":125,"line":126},[123,109831,109832],{"class":129},"action ",[123,109834,134],{"class":133},[123,109836,109837],{"class":129}," np.clip(action, ",[123,109839,3135],{"class":133},[123,109841,107650],{"class":164},[123,109843,251],{"class":129},[123,109845,107650],{"class":164},[123,109847,288],{"class":129},[123,109849,109850,109852,109854,109856,109858],{"class":125,"line":140},[123,109851,108261],{"class":129},[123,109853,2799],{"class":164},[123,109855,1941],{"class":129},[123,109857,134],{"class":133},[123,109859,109860],{"class":129}," action\n",[14,109862,104998],{"id":104997},[19,109864,109865],{},"这一章建立了控制任务的基本形式：",[113,109867,109870],{"className":109868,"code":109869,"language":7621,"meta":118},[7619],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[120,109871,109869],{"__ignoreMap":118},[19,109873,109874],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2526,109876,109877],{},"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":118,"searchDepth":140,"depth":140,"links":109879},[109880,109881,109882,109887,109891,109892,109893,109901],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":109883},[109884,109885,109886],{"id":108523,"depth":156,"text":108524},{"id":108573,"depth":156,"text":108574},{"id":108639,"depth":156,"text":108640},{"id":103645,"depth":140,"text":103646,"children":109888},[109889,109890],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":109894},[109895,109896,109897,109898,109900],{"id":109729,"depth":156,"text":109732},{"id":109741,"depth":156,"text":109741},{"id":109767,"depth":156,"text":109767},{"id":109776,"depth":156,"text":109899},"data.ctrl[0] 写了但没有效果",{"id":109807,"depth":156,"text":109807},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108211,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109908,"title":109909,"body":109910,"description":118,"extension":2545,"meta":111818,"navigation":231,"path":111819,"seo":111820,"stem":111821,"__hash__":111822},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109911,"toc":111794},[109912,109915,109917,109920,109928,109931,109948,109951,109976,109979,110025,110027,110029,110084,110086,110105,110107,110150,110153,110170,110173,110189,110199,110206,110208,110211,110214,110247,110250,110298,110302,110305,110319,110328,110332,110335,110360,110363,110367,110380,110383,110389,110392,110407,110409,110412,110672,110674,110686,110689,111001,111003,111015,111017,111020,111035,111040,111043,111065,111068,111071,111105,111108,111112,111123,111126,111143,111146,111160,111167,111187,111194,111208,111211,111223,111238,111258,111261,111283,111286,111290,111305,111316,111331,111334,111364,111380,111409,111417,111441,111444,111462,111472,111484,111491,111500,111506,111515,111518,111520,111529,111532,111547,111549,111552,111563,111566,111577,111580,111598,111600,111617,111620,111648,111650,111654,111657,111687,111693,111696,111700,111708,111711,111713,111734,111737,111740,111756,111759,111775,111777,111780,111791],[10,109913,109909],{"id":109914},"_5viewer-可视化与-renderer-离屏渲染",[14,109916,103040],{"id":103039},[19,109918,109919],{},"本章掌握两类可视化方式:",[26,109921,109922,109925],{},[29,109923,109924],{},"交互式 viewer: 适合人工观察仿真",[29,109926,109927],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109929,109930],{},"使用官方接口:",[113,109932,109934],{"className":115,"code":109933,"language":117,"meta":118,"style":118},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[120,109935,109936,109943],{"__ignoreMap":118},[123,109937,109938,109940],{"class":125,"line":126},[123,109939,223],{"class":133},[123,109941,109942],{"class":129}," mujoco.viewer\n",[123,109944,109945],{"class":125,"line":140},[123,109946,109947],{"class":129},"mujoco.viewer.launch_passive(model, data)\n",[19,109949,109950],{},"以及:",[113,109952,109954],{"className":115,"code":109953,"language":117,"meta":118,"style":118},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[120,109955,109956,109966],{"__ignoreMap":118},[123,109957,109958,109961,109963],{"class":125,"line":126},[123,109959,109960],{"class":129},"renderer ",[123,109962,134],{"class":133},[123,109964,109965],{"class":129}," mujoco.Renderer(model)\n",[123,109967,109968,109971,109973],{"class":125,"line":140},[123,109969,109970],{"class":129},"image ",[123,109972,134],{"class":133},[123,109974,109975],{"class":129}," renderer.render()\n",[19,109977,109978],{},"新手建议先理解二者区别：",[48,109980,109981,109997],{},[51,109982,109983],{},[54,109984,109985,109988,109991,109994],{},[57,109986,109987],{"align":26163},"工具",[57,109989,109990],{"align":26163},"用途",[57,109992,109993],{"align":26163},"是否打开窗口",[57,109995,109996],{"align":26163},"常见场景",[64,109998,109999,110012],{},[54,110000,110001,110004,110007,110009],{},[69,110002,110003],{"align":26163},"Viewer",[69,110005,110006],{"align":26163},"人眼实时观察仿真",[69,110008,107055],{"align":26163},[69,110010,110011],{"align":26163},"调试模型、看控制效果",[54,110013,110014,110017,110020,110022],{},[69,110015,110016],{"align":26163},"Renderer",[69,110018,110019],{"align":26163},"生成图像数组",[69,110021,107068],{"align":26163},[69,110023,110024],{"align":26163},"保存图片、训练视觉策略、服务器批量采集",[14,110026,103163],{"id":103162},[19,110028,103166],{},[113,110030,110032],{"className":328,"code":110031,"language":330,"meta":118,"style":118},"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",[120,110033,110034,110046,110056,110064,110072],{"__ignoreMap":118},[123,110035,110036,110038,110040,110042,110044],{"class":125,"line":126},[123,110037,26999],{"class":337},[123,110039,28736],{"class":143},[123,110041,341],{"class":143},[123,110043,28821],{"class":164},[123,110045,27100],{"class":164},[123,110047,110048,110050,110052,110054],{"class":125,"line":140},[123,110049,103201],{"class":143},[123,110051,103204],{"class":143},[123,110053,103207],{"class":143},[123,110055,27100],{"class":164},[123,110057,110058,110060,110062],{"class":125,"line":156},[123,110059,103214],{"class":143},[123,110061,103217],{"class":143},[123,110063,27100],{"class":164},[123,110065,110066,110068,110070],{"class":125,"line":168},[123,110067,103224],{"class":143},[123,110069,103227],{"class":143},[123,110071,27100],{"class":164},[123,110073,110074,110076,110078,110080,110082],{"class":125,"line":268},[123,110075,103234],{"class":143},[123,110077,103237],{"class":143},[123,110079,103240],{"class":143},[123,110081,103243],{"class":143},[123,110083,104907],{"class":143},[19,110085,105209],{},[113,110087,110089],{"className":328,"code":110088,"language":330,"meta":118,"style":118},"pip install \"mujoco>=2.3\" numpy pillow\n",[120,110090,110091],{"__ignoreMap":118},[123,110092,110093,110095,110097,110099,110102],{"class":125,"line":126},[123,110094,338],{"class":337},[123,110096,341],{"class":143},[123,110098,103323],{"class":143},[123,110100,110101],{"class":143}," numpy",[123,110103,110104],{"class":143}," pillow\n",[19,110106,105226],{},[113,110108,110110],{"className":328,"code":110109,"language":330,"meta":118,"style":118},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[120,110111,110112,110129,110138],{"__ignoreMap":118},[123,110113,110114,110116,110118,110120,110123,110125,110127],{"class":125,"line":126},[123,110115,32750],{"class":337},[123,110117,31596],{"class":143},[123,110119,27537],{"class":164},[123,110121,110122],{"class":143}," mujoco-render",[123,110124,103368],{"class":143},[123,110126,103371],{"class":164},[123,110128,103374],{"class":164},[123,110130,110131,110133,110135],{"class":125,"line":140},[123,110132,32750],{"class":337},[123,110134,103381],{"class":143},[123,110136,110137],{"class":143}," mujoco-render\n",[123,110139,110140,110142,110144,110146,110148],{"class":125,"line":156},[123,110141,338],{"class":337},[123,110143,341],{"class":143},[123,110145,103323],{"class":143},[123,110147,110101],{"class":143},[123,110149,110104],{"class":143},[19,110151,110152],{},"离屏渲染后端:",[113,110154,110156],{"className":328,"code":110155,"language":330,"meta":118,"style":118},"export MUJOCO_GL=egl\n",[120,110157,110158],{"__ignoreMap":118},[123,110159,110160,110162,110165,110167],{"class":125,"line":126},[123,110161,27464],{"class":133},[123,110163,110164],{"class":129}," MUJOCO_GL",[123,110166,134],{"class":133},[123,110168,110169],{"class":129},"egl\n",[19,110171,110172],{},"或:",[113,110174,110176],{"className":328,"code":110175,"language":330,"meta":118,"style":118},"export MUJOCO_GL=osmesa\n",[120,110177,110178],{"__ignoreMap":118},[123,110179,110180,110182,110184,110186],{"class":125,"line":126},[123,110181,27464],{"class":133},[123,110183,110164],{"class":129},[123,110185,134],{"class":133},[123,110187,110188],{"class":129},"osmesa\n",[19,110190,110191,110192,110195,110196,2494],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[120,110193,110194],{},"egl"," 失败，再尝试 ",[120,110197,110198],{},"osmesa",[19,110200,110201,110202,110205],{},"如果你在本机桌面环境运行，通常先不要设置 ",[120,110203,110204],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110207,103438],{"id":103437},[19,110209,110210],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110212,110213],{},"典型 viewer 流程:",[113,110215,110217],{"className":115,"code":110216,"language":117,"meta":118,"style":118},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[120,110218,110219,110231,110238,110242],{"__ignoreMap":118},[123,110220,110221,110223,110226,110228],{"class":125,"line":126},[123,110222,1309],{"class":133},[123,110224,110225],{"class":129}," mujoco.viewer.launch_passive(model, data) ",[123,110227,547],{"class":133},[123,110229,110230],{"class":129}," viewer:\n",[123,110232,110233,110235],{"class":125,"line":140},[123,110234,4695],{"class":133},[123,110236,110237],{"class":129}," viewer.is_running():\n",[123,110239,110240],{"class":125,"line":156},[123,110241,103908],{"class":129},[123,110243,110244],{"class":125,"line":168},[123,110245,110246],{"class":129},"        viewer.sync()\n",[19,110248,110249],{},"典型 renderer 流程:",[113,110251,110253],{"className":115,"code":110252,"language":117,"meta":118,"style":118},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[120,110254,110255,110281,110285,110290],{"__ignoreMap":118},[123,110256,110257,110259,110261,110264,110266,110268,110270,110272,110274,110276,110279],{"class":125,"line":126},[123,110258,109960],{"class":129},[123,110260,134],{"class":133},[123,110262,110263],{"class":129}," mujoco.Renderer(model, ",[123,110265,27403],{"class":279},[123,110267,134],{"class":133},[123,110269,44750],{"class":164},[123,110271,251],{"class":129},[123,110273,27399],{"class":279},[123,110275,134],{"class":133},[123,110277,110278],{"class":164},"640",[123,110280,288],{"class":129},[123,110282,110283],{"class":125,"line":140},[123,110284,106895],{"class":129},[123,110286,110287],{"class":125,"line":156},[123,110288,110289],{"class":129},"renderer.update_scene(data)\n",[123,110291,110292,110294,110296],{"class":125,"line":168},[123,110293,109970],{"class":129},[123,110295,134],{"class":133},[123,110297,109975],{"class":129},[2587,110299,110301],{"id":110300},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110303,110304],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[113,110306,110308],{"className":115,"code":110307,"language":117,"meta":118,"style":118},"mujoco.mj_step(model, data)\nviewer.sync()\n",[120,110309,110310,110314],{"__ignoreMap":118},[123,110311,110312],{"class":125,"line":126},[123,110313,106895],{"class":129},[123,110315,110316],{"class":125,"line":140},[123,110317,110318],{"class":129},"viewer.sync()\n",[19,110320,110321,110323,110324,110327],{},[120,110322,103608],{}," 负责算物理，",[120,110325,110326],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[2587,110329,110331],{"id":110330},"为什么要-sleep","为什么要 sleep",[19,110333,110334],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[113,110336,110338],{"className":115,"code":110337,"language":117,"meta":118,"style":118},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[120,110339,110340],{"__ignoreMap":118},[123,110341,110342,110345,110347,110350,110352,110355,110357],{"class":125,"line":126},[123,110343,110344],{"class":129},"sleep_time ",[123,110346,134],{"class":133},[123,110348,110349],{"class":129}," model.opt.timestep ",[123,110351,3135],{"class":133},[123,110353,110354],{"class":129}," (time.time() ",[123,110356,3135],{"class":133},[123,110358,110359],{"class":129}," step_start)\n",[19,110361,110362],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[2587,110364,110366],{"id":110365},"renderer-输出是什么","renderer 输出是什么",[113,110368,110370],{"className":115,"code":110369,"language":117,"meta":118,"style":118},"image = renderer.render()\n",[120,110371,110372],{"__ignoreMap":118},[123,110373,110374,110376,110378],{"class":125,"line":126},[123,110375,109970],{"class":129},[123,110377,134],{"class":133},[123,110379,109975],{"class":129},[19,110381,110382],{},"得到的是 NumPy 数组，形状通常是：",[113,110384,110387],{"className":110385,"code":110386,"language":7621,"meta":118},[7619],"(height, width, 3)\n",[120,110388,110386],{"__ignoreMap":118},[19,110390,110391],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[113,110393,110395],{"className":115,"code":110394,"language":117,"meta":118,"style":118},"Image.fromarray(image).save(\"render_output.png\")\n",[120,110396,110397],{"__ignoreMap":118},[123,110398,110399,110402,110405],{"class":125,"line":126},[123,110400,110401],{"class":129},"Image.fromarray(image).save(",[123,110403,110404],{"class":143},"\"render_output.png\"",[123,110406,288],{"class":129},[14,110408,103646],{"id":103645},[19,110410,110411],{},"交互式 Viewer:",[113,110413,110415],{"className":115,"code":110414,"language":117,"meta":118,"style":118},"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",[120,110416,110417,110423,110427,110433,110439,110443,110447,110455,110460,110464,110468,110472,110477,110482,110486,110490,110494,110499,110503,110507,110511,110515,110519,110523,110535,110547,110555,110559,110569,110589,110599,110604,110609,110613,110630,110643,110648,110652,110656,110668],{"__ignoreMap":118},[123,110418,110419,110421],{"class":125,"line":126},[123,110420,223],{"class":133},[123,110422,34241],{"class":129},[123,110424,110425],{"class":125,"line":140},[123,110426,232],{"emptyLinePlaceholder":231},[123,110428,110429,110431],{"class":125,"line":156},[123,110430,223],{"class":133},[123,110432,103694],{"class":129},[123,110434,110435,110437],{"class":125,"line":168},[123,110436,223],{"class":133},[123,110438,109942],{"class":129},[123,110440,110441],{"class":125,"line":268},[123,110442,232],{"emptyLinePlaceholder":231},[123,110444,110445],{"class":125,"line":291},[123,110446,232],{"emptyLinePlaceholder":231},[123,110448,110449,110451,110453],{"class":125,"line":300},[123,110450,103707],{"class":164},[123,110452,15995],{"class":133},[123,110454,103712],{"class":143},[123,110456,110457],{"class":125,"line":305},[123,110458,110459],{"class":143},"\u003Cmujoco model=\"viewer_demo\">\n",[123,110461,110462],{"class":125,"line":316},[123,110463,103722],{"class":143},[123,110465,110466],{"class":125,"line":673},[123,110467,232],{"emptyLinePlaceholder":231},[123,110469,110470],{"class":125,"line":692},[123,110471,103731],{"class":143},[123,110473,110474],{"class":125,"line":713},[123,110475,110476],{"class":143},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[123,110478,110479],{"class":125,"line":718},[123,110480,110481],{"class":143},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[123,110483,110484],{"class":125,"line":1138},[123,110485,232],{"emptyLinePlaceholder":231},[123,110487,110488],{"class":125,"line":1429},[123,110489,103745],{"class":143},[123,110491,110492],{"class":125,"line":1439},[123,110493,103750],{"class":143},[123,110495,110496],{"class":125,"line":1444},[123,110497,110498],{"class":143},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[123,110500,110501],{"class":125,"line":1453},[123,110502,103760],{"class":143},[123,110504,110505],{"class":125,"line":1458},[123,110506,103765],{"class":143},[123,110508,110509],{"class":125,"line":1476},[123,110510,103770],{"class":143},[123,110512,110513],{"class":125,"line":1494},[123,110514,98092],{"class":143},[123,110516,110517],{"class":125,"line":1499},[123,110518,232],{"emptyLinePlaceholder":231},[123,110520,110521],{"class":125,"line":1517},[123,110522,232],{"emptyLinePlaceholder":231},[123,110524,110525,110527,110529,110531,110533],{"class":125,"line":1534},[123,110526,34359],{"class":133},[123,110528,4417],{"class":337},[123,110530,103791],{"class":129},[123,110532,98080],{"class":164},[123,110534,1344],{"class":129},[123,110536,110537,110539,110541,110543,110545],{"class":125,"line":1539},[123,110538,103800],{"class":129},[123,110540,134],{"class":133},[123,110542,103805],{"class":129},[123,110544,103707],{"class":164},[123,110546,288],{"class":129},[123,110548,110549,110551,110553],{"class":125,"line":2080},[123,110550,1349],{"class":129},[123,110552,134],{"class":133},[123,110554,103818],{"class":129},[123,110556,110557],{"class":125,"line":2097},[123,110558,232],{"emptyLinePlaceholder":231},[123,110560,110561,110563,110565,110567],{"class":125,"line":2114},[123,110562,36588],{"class":133},[123,110564,110225],{"class":129},[123,110566,547],{"class":133},[123,110568,110230],{"class":129},[123,110570,110571,110574,110577,110579,110582,110584,110587],{"class":125,"line":2125},[123,110572,110573],{"class":133},"        while",[123,110575,110576],{"class":129}," viewer.is_running() ",[123,110578,32878],{"class":133},[123,110580,110581],{"class":129}," data.time ",[123,110583,3509],{"class":133},[123,110585,110586],{"class":164}," 5.0",[123,110588,1344],{"class":129},[123,110590,110591,110594,110596],{"class":125,"line":2130},[123,110592,110593],{"class":129},"            step_start ",[123,110595,134],{"class":133},[123,110597,110598],{"class":129}," time.time()\n",[123,110600,110601],{"class":125,"line":5033},[123,110602,110603],{"class":129},"            mujoco.mj_step(model, data)\n",[123,110605,110606],{"class":125,"line":5041},[123,110607,110608],{"class":129},"            viewer.sync()\n",[123,110610,110611],{"class":125,"line":5046},[123,110612,232],{"emptyLinePlaceholder":231},[123,110614,110615,110618,110620,110622,110624,110626,110628],{"class":125,"line":5052},[123,110616,110617],{"class":129},"            sleep_time ",[123,110619,134],{"class":133},[123,110621,110349],{"class":129},[123,110623,3135],{"class":133},[123,110625,110354],{"class":129},[123,110627,3135],{"class":133},[123,110629,110359],{"class":129},[123,110631,110632,110634,110637,110639,110641],{"class":125,"line":5058},[123,110633,7079],{"class":133},[123,110635,110636],{"class":129}," sleep_time ",[123,110638,3559],{"class":133},[123,110640,6532],{"class":164},[123,110642,1344],{"class":129},[123,110644,110645],{"class":125,"line":5063},[123,110646,110647],{"class":129},"                time.sleep(sleep_time)\n",[123,110649,110650],{"class":125,"line":10380},[123,110651,232],{"emptyLinePlaceholder":231},[123,110653,110654],{"class":125,"line":10404},[123,110655,232],{"emptyLinePlaceholder":231},[123,110657,110658,110660,110662,110664,110666],{"class":125,"line":10409},[123,110659,3998],{"class":133},[123,110661,33635],{"class":164},[123,110663,103951],{"class":133},[123,110665,103954],{"class":143},[123,110667,1344],{"class":129},[123,110669,110670],{"class":125,"line":10415},[123,110671,103961],{"class":129},[19,110673,105960],{},[113,110675,110677],{"className":328,"code":110676,"language":330,"meta":118,"style":118},"touch ch5_viewer.py\n",[120,110678,110679],{"__ignoreMap":118},[123,110680,110681,110683],{"class":125,"line":126},[123,110682,103676],{"class":337},[123,110684,110685],{"class":143}," ch5_viewer.py\n",[19,110687,110688],{},"离屏 Renderer 保存图片:",[113,110690,110692],{"className":115,"code":110691,"language":117,"meta":118,"style":118},"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",[120,110693,110694,110706,110710,110716,110726,110730,110734,110742,110747,110751,110755,110759,110763,110768,110772,110776,110780,110784,110788,110792,110796,110800,110804,110808,110812,110824,110836,110844,110869,110873,110889,110893,110897,110912,110921,110925,110939,110944,110949,110953,110965,110977,110981,110985,110997],{"__ignoreMap":118},[123,110695,110696,110698,110701,110703],{"class":125,"line":126},[123,110697,391],{"class":133},[123,110699,110700],{"class":129}," pathlib ",[123,110702,223],{"class":133},[123,110704,110705],{"class":129}," Path\n",[123,110707,110708],{"class":125,"line":140},[123,110709,232],{"emptyLinePlaceholder":231},[123,110711,110712,110714],{"class":125,"line":156},[123,110713,223],{"class":133},[123,110715,103694],{"class":129},[123,110717,110718,110720,110722,110724],{"class":125,"line":168},[123,110719,391],{"class":133},[123,110721,49670],{"class":164},[123,110723,49673],{"class":133},[123,110725,49676],{"class":129},[123,110727,110728],{"class":125,"line":268},[123,110729,232],{"emptyLinePlaceholder":231},[123,110731,110732],{"class":125,"line":291},[123,110733,232],{"emptyLinePlaceholder":231},[123,110735,110736,110738,110740],{"class":125,"line":300},[123,110737,103707],{"class":164},[123,110739,15995],{"class":133},[123,110741,103712],{"class":143},[123,110743,110744],{"class":125,"line":305},[123,110745,110746],{"class":143},"\u003Cmujoco model=\"renderer_demo\">\n",[123,110748,110749],{"class":125,"line":316},[123,110750,103722],{"class":143},[123,110752,110753],{"class":125,"line":673},[123,110754,232],{"emptyLinePlaceholder":231},[123,110756,110757],{"class":125,"line":692},[123,110758,103731],{"class":143},[123,110760,110761],{"class":125,"line":713},[123,110762,110476],{"class":143},[123,110764,110765],{"class":125,"line":718},[123,110766,110767],{"class":143},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[123,110769,110770],{"class":125,"line":1138},[123,110771,110481],{"class":143},[123,110773,110774],{"class":125,"line":1429},[123,110775,232],{"emptyLinePlaceholder":231},[123,110777,110778],{"class":125,"line":1439},[123,110779,103745],{"class":143},[123,110781,110782],{"class":125,"line":1444},[123,110783,103750],{"class":143},[123,110785,110786],{"class":125,"line":1453},[123,110787,110498],{"class":143},[123,110789,110790],{"class":125,"line":1458},[123,110791,103760],{"class":143},[123,110793,110794],{"class":125,"line":1476},[123,110795,103765],{"class":143},[123,110797,110798],{"class":125,"line":1494},[123,110799,103770],{"class":143},[123,110801,110802],{"class":125,"line":1499},[123,110803,98092],{"class":143},[123,110805,110806],{"class":125,"line":1517},[123,110807,232],{"emptyLinePlaceholder":231},[123,110809,110810],{"class":125,"line":1534},[123,110811,232],{"emptyLinePlaceholder":231},[123,110813,110814,110816,110818,110820,110822],{"class":125,"line":1539},[123,110815,34359],{"class":133},[123,110817,4417],{"class":337},[123,110819,103791],{"class":129},[123,110821,98080],{"class":164},[123,110823,1344],{"class":129},[123,110825,110826,110828,110830,110832,110834],{"class":125,"line":2080},[123,110827,103800],{"class":129},[123,110829,134],{"class":133},[123,110831,103805],{"class":129},[123,110833,103707],{"class":164},[123,110835,288],{"class":129},[123,110837,110838,110840,110842],{"class":125,"line":2097},[123,110839,1349],{"class":129},[123,110841,134],{"class":133},[123,110843,103818],{"class":129},[123,110845,110846,110849,110851,110853,110855,110857,110859,110861,110863,110865,110867],{"class":125,"line":2114},[123,110847,110848],{"class":129},"    renderer ",[123,110850,134],{"class":133},[123,110852,110263],{"class":129},[123,110854,27403],{"class":279},[123,110856,134],{"class":133},[123,110858,44750],{"class":164},[123,110860,251],{"class":129},[123,110862,27399],{"class":279},[123,110864,134],{"class":133},[123,110866,110278],{"class":164},[123,110868,288],{"class":129},[123,110870,110871],{"class":125,"line":2125},[123,110872,232],{"emptyLinePlaceholder":231},[123,110874,110875,110877,110879,110881,110883,110885,110887],{"class":125,"line":2130},[123,110876,5641],{"class":133},[123,110878,103893],{"class":129},[123,110880,1405],{"class":133},[123,110882,34855],{"class":164},[123,110884,1315],{"class":129},[123,110886,259],{"class":164},[123,110888,33201],{"class":129},[123,110890,110891],{"class":125,"line":5033},[123,110892,103908],{"class":129},[123,110894,110895],{"class":125,"line":5041},[123,110896,232],{"emptyLinePlaceholder":231},[123,110898,110899,110902,110905,110907,110910],{"class":125,"line":5046},[123,110900,110901],{"class":129},"    renderer.update_scene(data, ",[123,110903,110904],{"class":279},"camera",[123,110906,134],{"class":133},[123,110908,110909],{"class":143},"\"fixed_camera\"",[123,110911,288],{"class":129},[123,110913,110914,110917,110919],{"class":125,"line":5052},[123,110915,110916],{"class":129},"    image ",[123,110918,134],{"class":133},[123,110920,109975],{"class":129},[123,110922,110923],{"class":125,"line":5058},[123,110924,232],{"emptyLinePlaceholder":231},[123,110926,110927,110930,110932,110935,110937],{"class":125,"line":5063},[123,110928,110929],{"class":129},"    output_path ",[123,110931,134],{"class":133},[123,110933,110934],{"class":129}," Path(",[123,110936,110404],{"class":143},[123,110938,288],{"class":129},[123,110940,110941],{"class":125,"line":10380},[123,110942,110943],{"class":129},"    Image.fromarray(image).save(output_path)\n",[123,110945,110946],{"class":125,"line":10404},[123,110947,110948],{"class":129},"    renderer.close()\n",[123,110950,110951],{"class":125,"line":10409},[123,110952,232],{"emptyLinePlaceholder":231},[123,110954,110955,110957,110959,110962],{"class":125,"line":10415},[123,110956,33714],{"class":164},[123,110958,1315],{"class":129},[123,110960,110961],{"class":143},"\"saved:\"",[123,110963,110964],{"class":129},", output_path.resolve())\n",[123,110966,110967,110969,110971,110974],{"class":125,"line":10442},[123,110968,33714],{"class":164},[123,110970,1315],{"class":129},[123,110972,110973],{"class":143},"\"image shape:\"",[123,110975,110976],{"class":129},", image.shape)\n",[123,110978,110979],{"class":125,"line":10447},[123,110980,232],{"emptyLinePlaceholder":231},[123,110982,110983],{"class":125,"line":10453},[123,110984,232],{"emptyLinePlaceholder":231},[123,110986,110987,110989,110991,110993,110995],{"class":125,"line":10465},[123,110988,3998],{"class":133},[123,110990,33635],{"class":164},[123,110992,103951],{"class":133},[123,110994,103954],{"class":143},[123,110996,1344],{"class":129},[123,110998,110999],{"class":125,"line":10477},[123,111000,103961],{"class":129},[19,111002,105960],{},[113,111004,111006],{"className":328,"code":111005,"language":330,"meta":118,"style":118},"touch ch5_renderer.py\n",[120,111007,111008],{"__ignoreMap":118},[123,111009,111010,111012],{"class":125,"line":126},[123,111011,103676],{"class":337},[123,111013,111014],{"class":143}," ch5_renderer.py\n",[2587,111016,103964],{"id":103964},[19,111018,111019],{},"viewer 上下文：",[113,111021,111023],{"className":115,"code":111022,"language":117,"meta":118,"style":118},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[120,111024,111025],{"__ignoreMap":118},[123,111026,111027,111029,111031,111033],{"class":125,"line":126},[123,111028,1309],{"class":133},[123,111030,110225],{"class":129},[123,111032,547],{"class":133},[123,111034,110230],{"class":129},[19,111036,111037,111039],{},[120,111038,1309],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,111041,111042],{},"窗口循环：",[113,111044,111046],{"className":115,"code":111045,"language":117,"meta":118,"style":118},"while viewer.is_running() and data.time \u003C 5.0:\n",[120,111047,111048],{"__ignoreMap":118},[123,111049,111050,111053,111055,111057,111059,111061,111063],{"class":125,"line":126},[123,111051,111052],{"class":133},"while",[123,111054,110576],{"class":129},[123,111056,32878],{"class":133},[123,111058,110581],{"class":129},[123,111060,3509],{"class":133},[123,111062,110586],{"class":164},[123,111064,1344],{"class":129},[19,111066,111067],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,111069,111070],{},"固定相机：",[113,111072,111074],{"className":55470,"code":111073,"language":55472,"meta":118,"style":118},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[120,111075,111076],{"__ignoreMap":118},[123,111077,111078,111080,111082,111084,111086,111088,111090,111092,111095,111098,111100,111103],{"class":125,"line":126},[123,111079,3509],{"class":129},[123,111081,110904],{"class":53707},[123,111083,17350],{"class":337},[123,111085,134],{"class":129},[123,111087,110909],{"class":143},[123,111089,103499],{"class":337},[123,111091,134],{"class":129},[123,111093,111094],{"class":143},"\"1.5 -2.0 1.2\"",[123,111096,111097],{"class":337}," xyaxes",[123,111099,134],{"class":129},[123,111101,111102],{"class":143},"\"1 0.75 0 0 0 1\"",[123,111104,103537],{"class":129},[19,111106,111107],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[2587,111109,111111],{"id":111110},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[113,111113,111115],{"className":115,"code":111114,"language":117,"meta":118,"style":118},"import time\n",[120,111116,111117],{"__ignoreMap":118},[123,111118,111119,111121],{"class":125,"line":126},[123,111120,223],{"class":133},[123,111122,34241],{"class":129},[19,111124,111125],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[113,111127,111129],{"className":115,"code":111128,"language":117,"meta":118,"style":118},"import mujoco\nimport mujoco.viewer\n",[120,111130,111131,111137],{"__ignoreMap":118},[123,111132,111133,111135],{"class":125,"line":126},[123,111134,223],{"class":133},[123,111136,103694],{"class":129},[123,111138,111139,111141],{"class":125,"line":140},[123,111140,223],{"class":133},[123,111142,109942],{"class":129},[19,111144,111145],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[113,111147,111148],{"className":115,"code":111022,"language":117,"meta":118,"style":118},[120,111149,111150],{"__ignoreMap":118},[123,111151,111152,111154,111156,111158],{"class":125,"line":126},[123,111153,1309],{"class":133},[123,111155,110225],{"class":129},[123,111157,547],{"class":133},[123,111159,110230],{"class":129},[19,111161,111162,111163,111166],{},"打开一个 viewer 窗口。",[120,111164,111165],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[113,111168,111169],{"className":115,"code":111045,"language":117,"meta":118,"style":118},[120,111170,111171],{"__ignoreMap":118},[123,111172,111173,111175,111177,111179,111181,111183,111185],{"class":125,"line":126},[123,111174,111052],{"class":133},[123,111176,110576],{"class":129},[123,111178,32878],{"class":133},[123,111180,110581],{"class":129},[123,111182,3509],{"class":133},[123,111184,110586],{"class":164},[123,111186,1344],{"class":129},[19,111188,111189,111190,111193],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[120,111191,111192],{},"viewer.is_running()"," 会变成 false，循环结束。",[113,111195,111197],{"className":115,"code":111196,"language":117,"meta":118,"style":118},"step_start = time.time()\n",[120,111198,111199],{"__ignoreMap":118},[123,111200,111201,111204,111206],{"class":125,"line":126},[123,111202,111203],{"class":129},"step_start ",[123,111205,134],{"class":133},[123,111207,110598],{"class":129},[19,111209,111210],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[113,111212,111213],{"className":115,"code":110307,"language":117,"meta":118,"style":118},[120,111214,111215,111219],{"__ignoreMap":118},[123,111216,111217],{"class":125,"line":126},[123,111218,106895],{"class":129},[123,111220,111221],{"class":125,"line":140},[123,111222,110318],{"class":129},[19,111224,111225,111227,111228,111230,111231,111233,111234,111237],{},[120,111226,103608],{}," 推进物理仿真。",[120,111229,110326],{}," 把最新的 ",[120,111232,35812],{}," 同步到窗口里显示。没有 ",[120,111235,111236],{},"sync()","，窗口可能看不到最新状态。",[113,111239,111240],{"className":115,"code":110337,"language":117,"meta":118,"style":118},[120,111241,111242],{"__ignoreMap":118},[123,111243,111244,111246,111248,111250,111252,111254,111256],{"class":125,"line":126},[123,111245,110344],{"class":129},[123,111247,134],{"class":133},[123,111249,110349],{"class":129},[123,111251,3135],{"class":133},[123,111253,110354],{"class":129},[123,111255,3135],{"class":133},[123,111257,110359],{"class":129},[19,111259,111260],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[113,111262,111264],{"className":115,"code":111263,"language":117,"meta":118,"style":118},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[120,111265,111266,111278],{"__ignoreMap":118},[123,111267,111268,111270,111272,111274,111276],{"class":125,"line":126},[123,111269,3998],{"class":133},[123,111271,110636],{"class":129},[123,111273,3559],{"class":133},[123,111275,6532],{"class":164},[123,111277,1344],{"class":129},[123,111279,111280],{"class":125,"line":140},[123,111281,111282],{"class":129},"    time.sleep(sleep_time)\n",[19,111284,111285],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[2587,111287,111289],{"id":111288},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[113,111291,111293],{"className":115,"code":111292,"language":117,"meta":118,"style":118},"from pathlib import Path\n",[120,111294,111295],{"__ignoreMap":118},[123,111296,111297,111299,111301,111303],{"class":125,"line":126},[123,111298,391],{"class":133},[123,111300,110700],{"class":129},[123,111302,223],{"class":133},[123,111304,110705],{"class":129},[19,111306,111307,111308,111311,111312,111315],{},"导入 ",[120,111309,111310],{},"Path","，用来处理文件路径。相比直接写字符串，",[120,111313,111314],{},"Path(\"render_output.png\")"," 更清晰。",[113,111317,111319],{"className":115,"code":111318,"language":117,"meta":118,"style":118},"from PIL import Image\n",[120,111320,111321],{"__ignoreMap":118},[123,111322,111323,111325,111327,111329],{"class":125,"line":126},[123,111324,391],{"class":133},[123,111326,49670],{"class":164},[123,111328,49673],{"class":133},[123,111330,49676],{"class":129},[19,111332,111333],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[113,111335,111336],{"className":55470,"code":111073,"language":55472,"meta":118,"style":118},[120,111337,111338],{"__ignoreMap":118},[123,111339,111340,111342,111344,111346,111348,111350,111352,111354,111356,111358,111360,111362],{"class":125,"line":126},[123,111341,3509],{"class":129},[123,111343,110904],{"class":53707},[123,111345,17350],{"class":337},[123,111347,134],{"class":129},[123,111349,110909],{"class":143},[123,111351,103499],{"class":337},[123,111353,134],{"class":129},[123,111355,111094],{"class":143},[123,111357,111097],{"class":337},[123,111359,134],{"class":129},[123,111361,111102],{"class":143},[123,111363,103537],{"class":129},[19,111365,111366,111367,111369,111370,111372,111373,111376,111377,111379],{},"定义一个相机。",[120,111368,663],{}," 是相机名字。",[120,111371,106536],{}," 是相机在世界里的位置。",[120,111374,111375],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[120,111378,106536],{}," 来调视角。",[113,111381,111383],{"className":115,"code":111382,"language":117,"meta":118,"style":118},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[120,111384,111385],{"__ignoreMap":118},[123,111386,111387,111389,111391,111393,111395,111397,111399,111401,111403,111405,111407],{"class":125,"line":126},[123,111388,109960],{"class":129},[123,111390,134],{"class":133},[123,111392,110263],{"class":129},[123,111394,27403],{"class":279},[123,111396,134],{"class":133},[123,111398,44750],{"class":164},[123,111400,251],{"class":129},[123,111402,27399],{"class":279},[123,111404,134],{"class":133},[123,111406,110278],{"class":164},[123,111408,288],{"class":129},[19,111410,111411,111412,103411,111414,111416],{},"创建离屏渲染器。",[120,111413,27403],{},[120,111415,27399],{}," 决定输出图片大小。",[113,111418,111419],{"className":115,"code":104067,"language":117,"meta":118,"style":118},[120,111420,111421,111437],{"__ignoreMap":118},[123,111422,111423,111425,111427,111429,111431,111433,111435],{"class":125,"line":126},[123,111424,1399],{"class":133},[123,111426,103893],{"class":129},[123,111428,1405],{"class":133},[123,111430,34855],{"class":164},[123,111432,1315],{"class":129},[123,111434,259],{"class":164},[123,111436,33201],{"class":129},[123,111438,111439],{"class":125,"line":140},[123,111440,104090],{"class":129},[19,111442,111443],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[113,111445,111447],{"className":115,"code":111446,"language":117,"meta":118,"style":118},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[120,111448,111449],{"__ignoreMap":118},[123,111450,111451,111454,111456,111458,111460],{"class":125,"line":126},[123,111452,111453],{"class":129},"renderer.update_scene(data, ",[123,111455,110904],{"class":279},[123,111457,134],{"class":133},[123,111459,110909],{"class":143},[123,111461,288],{"class":129},[19,111463,111464,111465,111467,111468,111471],{},"告诉 renderer：用当前 ",[120,111466,35812],{}," 的状态更新画面，并使用名为 ",[120,111469,111470],{},"fixed_camera"," 的相机视角。",[113,111473,111474],{"className":115,"code":110369,"language":117,"meta":118,"style":118},[120,111475,111476],{"__ignoreMap":118},[123,111477,111478,111480,111482],{"class":125,"line":126},[123,111479,109970],{"class":129},[123,111481,134],{"class":133},[123,111483,109975],{"class":129},[19,111485,111486,111487,111490],{},"真正渲染出图像。",[120,111488,111489],{},"image"," 是一个 NumPy 数组，不是文件。",[113,111492,111494],{"className":115,"code":111493,"language":117,"meta":118,"style":118},"Image.fromarray(image).save(output_path)\n",[120,111495,111496],{"__ignoreMap":118},[123,111497,111498],{"class":125,"line":126},[123,111499,111493],{"class":129},[19,111501,111502,111503,2494],{},"把数组转换成图片，并保存到 ",[120,111504,111505],{},"render_output.png",[113,111507,111509],{"className":115,"code":111508,"language":117,"meta":118,"style":118},"renderer.close()\n",[120,111510,111511],{"__ignoreMap":118},[123,111512,111513],{"class":125,"line":126},[123,111514,111508],{"class":129},[19,111516,111517],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111519,104707],{"id":104706},[19,111521,111522,111523,111525,111526,2494],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[120,111524,111505],{},"，并输出图像数组形状，例如 ",[120,111527,111528],{},"(480, 640, 3)",[19,111530,111531],{},"如果图片里看不到方块，先检查：",[26,111533,111534,111537,111540],{},[29,111535,111536],{},"方块是否掉到相机视野外。",[29,111538,111539],{},"camera 位置是否合理。",[29,111541,111542,111543,111546],{},"是否在 ",[120,111544,111545],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111548,104739],{"id":104738},[19,111550,111551],{},"运行 viewer:",[113,111553,111555],{"className":328,"code":111554,"language":330,"meta":118,"style":118},"python ch5_viewer.py\n",[120,111556,111557],{"__ignoreMap":118},[123,111558,111559,111561],{"class":125,"line":126},[123,111560,117],{"class":337},[123,111562,110685],{"class":143},[19,111564,111565],{},"运行 renderer:",[113,111567,111569],{"className":328,"code":111568,"language":330,"meta":118,"style":118},"python ch5_renderer.py\n",[120,111570,111571],{"__ignoreMap":118},[123,111572,111573,111575],{"class":125,"line":126},[123,111574,117],{"class":337},[123,111576,111014],{"class":143},[19,111578,111579],{},"如果在服务器上运行:",[113,111581,111583],{"className":328,"code":111582,"language":330,"meta":118,"style":118},"MUJOCO_GL=egl python ch5_renderer.py\n",[120,111584,111585],{"__ignoreMap":118},[123,111586,111587,111589,111591,111593,111596],{"class":125,"line":126},[123,111588,110204],{"class":129},[123,111590,134],{"class":133},[123,111592,110194],{"class":143},[123,111594,111595],{"class":337}," python",[123,111597,111014],{"class":143},[19,111599,110172],{},[113,111601,111603],{"className":328,"code":111602,"language":330,"meta":118,"style":118},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[120,111604,111605],{"__ignoreMap":118},[123,111606,111607,111609,111611,111613,111615],{"class":125,"line":126},[123,111608,110204],{"class":129},[123,111610,134],{"class":133},[123,111612,110198],{"class":143},[123,111614,111595],{"class":337},[123,111616,111014],{"class":143},[19,111618,111619],{},"再做几个练习：",[26,111621,111622,111629,111632,111638],{},[29,111623,111624,111625,111628],{},"把 renderer 分辨率改成 ",[120,111626,111627],{},"height=240, width=320","，观察输出 shape。",[29,111630,111631],{},"把方块颜色改成蓝色，重新保存图片。",[29,111633,111634,111635,111637],{},"把相机 ",[120,111636,106536],{}," 改远一点，观察画面中物体是否变小。",[29,111639,111640,111641,104805,111644,111647],{},"把 viewer 示例中的 ",[120,111642,111643],{},"data.time \u003C 5.0",[120,111645,111646],{},"data.time \u003C 20.0","，观察更长时间。",[14,111649,104844],{"id":104843},[2587,111651,111653],{"id":111652},"viewer-窗口打不开","viewer 窗口打不开",[19,111655,111656],{},"安装:",[113,111658,111660],{"className":328,"code":111659,"language":330,"meta":118,"style":118},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[120,111661,111662],{"__ignoreMap":118},[123,111663,111664,111666,111668,111670,111672,111674,111676,111678,111680,111682,111684],{"class":125,"line":126},[123,111665,26999],{"class":337},[123,111667,28736],{"class":143},[123,111669,341],{"class":143},[123,111671,28821],{"class":164},[123,111673,104897],{"class":143},[123,111675,103227],{"class":143},[123,111677,104902],{"class":143},[123,111679,103240],{"class":143},[123,111681,103246],{"class":143},[123,111683,103237],{"class":143},[123,111685,111686],{"class":143}," libXinerama\n",[2587,111688,111690],{"id":111689},"glfwerror",[120,111691,111692],{},"GLFWError",[19,111694,111695],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[2587,111697,111699],{"id":111698},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111701,111702,111703,84936,111705,111707],{},"尝试 ",[120,111704,103430],{},[120,111706,103433],{},"。可能存在版本差异。",[2587,111709,111710],{"id":111710},"保存图片是黑的",[19,111712,104966],{},[26,111714,111715,111718,111721,111731],{},[29,111716,111717],{},"XML 里是否有 light。",[29,111719,111720],{},"相机是否对着模型。",[29,111722,111723,111724,111727,111728,2494],{},"是否先 ",[120,111725,111726],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[120,111729,111730],{},"renderer.render()",[29,111732,111733],{},"物体是否已经掉出视野。",[2587,111735,111736],{"id":111736},"远程服务器没有显示器",[19,111738,111739],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[113,111741,111742],{"className":328,"code":111582,"language":330,"meta":118,"style":118},[120,111743,111744],{"__ignoreMap":118},[123,111745,111746,111748,111750,111752,111754],{"class":125,"line":126},[123,111747,110204],{"class":129},[123,111749,134],{"class":133},[123,111751,110194],{"class":143},[123,111753,111595],{"class":337},[123,111755,111014],{"class":143},[19,111757,111758],{},"如果 EGL 不可用，再尝试：",[113,111760,111761],{"className":328,"code":111602,"language":330,"meta":118,"style":118},[120,111762,111763],{"__ignoreMap":118},[123,111764,111765,111767,111769,111771,111773],{"class":125,"line":126},[123,111766,110204],{"class":129},[123,111768,134],{"class":133},[123,111770,110198],{"class":143},[123,111772,111595],{"class":337},[123,111774,111014],{"class":143},[14,111776,104998],{"id":104997},[19,111778,111779],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,111781,111782,111785,111788],{},[29,111783,111784],{},"先用 viewer 看模型和控制是否正常。",[29,111786,111787],{},"再用 renderer 保存图片或构造视觉观测。",[29,111789,111790],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2526,111792,111793],{},"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":118,"searchDepth":140,"depth":140,"links":111795},[111796,111797,111798,111803,111808,111809,111810,111817],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":111799},[111800,111801,111802],{"id":110300,"depth":156,"text":110301},{"id":110330,"depth":156,"text":110331},{"id":110365,"depth":156,"text":110366},{"id":103645,"depth":140,"text":103646,"children":111804},[111805,111806,111807],{"id":103964,"depth":156,"text":103964},{"id":111110,"depth":156,"text":111111},{"id":111288,"depth":156,"text":111289},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":111811},[111812,111813,111814,111815,111816],{"id":111652,"depth":156,"text":111653},{"id":111689,"depth":156,"text":111692},{"id":111698,"depth":156,"text":111699},{"id":111710,"depth":156,"text":111710},{"id":111736,"depth":156,"text":111736},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109909,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111824,"title":111825,"body":111826,"description":118,"extension":2545,"meta":113737,"navigation":231,"path":113738,"seo":113739,"stem":113740,"__hash__":113741},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111827,"toc":113713},[111828,111831,111833,111836,111838,111857,111860,111866,111869,111871,111873,111897,111899,111913,111915,111956,111958,111969,111971,111974,111980,111983,112017,112020,112052,112055,112087,112091,112094,112134,112137,112143,112146,112152,112156,112159,112165,112168,112172,112175,112215,112217,112230,112233,112235,112817,112819,112831,112834,112845,112847,112850,112869,112881,112884,112905,112908,112911,112954,112957,112960,112980,112987,112989,113007,113022,113025,113031,113034,113040,113057,113064,113095,113106,113140,113151,113168,113177,113185,113190,113204,113207,113228,113234,113248,113253,113283,113293,113318,113326,113349,113352,113368,113371,113379,113385,113407,113420,113441,113450,113489,113500,113502,113505,113511,113514,113517,113523,113526,113546,113549,113551,113590,113592,113595,113603,113606,113609,113636,113639,113649,113655,113658,113664,113666,113672,113676,113679,113681,113684,113708,113711],[10,111829,111825],{"id":111830},"_6控制任务cartpole",[14,111832,103040],{"id":103039},[19,111834,111835],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111837,106721],{},[26,111839,111840,111843,111845,111848,111851,111854],{},[29,111841,111842],{},"slide joint",[29,111844,108574],{},[29,111846,111847],{},"cart force actuator",[29,111849,111850],{},"状态观测",[29,111852,111853],{},"简单控制循环",[29,111855,111856],{},"reward 设计雏形",[19,111858,111859],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[113,111861,111864],{"className":111862,"code":111863,"language":7621,"meta":118},[7619],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[120,111865,111863],{"__ignoreMap":118},[19,111867,111868],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111870,103163],{"id":103162},[19,111872,103166],{},[113,111874,111875],{"className":328,"code":106778,"language":330,"meta":118,"style":118},[120,111876,111877],{"__ignoreMap":118},[123,111878,111879,111881,111883,111885,111887,111889,111891,111893,111895],{"class":125,"line":126},[123,111880,26999],{"class":337},[123,111882,28736],{"class":143},[123,111884,341],{"class":143},[123,111886,28821],{"class":164},[123,111888,106793],{"class":143},[123,111890,103191],{"class":143},[123,111892,104892],{"class":143},[123,111894,103207],{"class":143},[123,111896,106802],{"class":143},[19,111898,105209],{},[113,111900,111901],{"className":328,"code":103312,"language":330,"meta":118,"style":118},[120,111902,111903],{"__ignoreMap":118},[123,111904,111905,111907,111909,111911],{"class":125,"line":126},[123,111906,338],{"class":337},[123,111908,341],{"class":143},[123,111910,103323],{"class":143},[123,111912,103326],{"class":143},[19,111914,105226],{},[113,111916,111918],{"className":328,"code":111917,"language":330,"meta":118,"style":118},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[120,111919,111920,111937,111946],{"__ignoreMap":118},[123,111921,111922,111924,111926,111928,111931,111933,111935],{"class":125,"line":126},[123,111923,32750],{"class":337},[123,111925,31596],{"class":143},[123,111927,27537],{"class":164},[123,111929,111930],{"class":143}," mujoco-cartpole",[123,111932,103368],{"class":143},[123,111934,103371],{"class":164},[123,111936,103374],{"class":164},[123,111938,111939,111941,111943],{"class":125,"line":140},[123,111940,32750],{"class":337},[123,111942,103381],{"class":143},[123,111944,111945],{"class":143}," mujoco-cartpole\n",[123,111947,111948,111950,111952,111954],{"class":125,"line":156},[123,111949,338],{"class":337},[123,111951,341],{"class":143},[123,111953,103323],{"class":143},[123,111955,103326],{"class":143},[19,111957,103397],{},[26,111959,111960,111963,111966],{},[29,111961,111962],{},"本章不依赖 Gymnasium。",[29,111964,111965],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,111967,111968],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111970,103438],{"id":103437},[19,111972,111973],{},"Cartpole 的模型结构:",[113,111975,111978],{"className":111976,"code":111977,"language":7621,"meta":118},[7619],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[120,111979,111977],{"__ignoreMap":118},[19,111981,111982],{},"小车通过 slide joint 左右移动:",[113,111984,111986],{"className":55470,"code":111985,"language":55472,"meta":118,"style":118},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[120,111987,111988],{"__ignoreMap":118},[123,111989,111990,111992,111994,111996,111998,112001,112003,112005,112008,112010,112012,112015],{"class":125,"line":126},[123,111991,3509],{"class":129},[123,111993,105346],{"class":53707},[123,111995,17350],{"class":337},[123,111997,134],{"class":129},[123,111999,112000],{"class":143},"\"cart_x\"",[123,112002,56227],{"class":337},[123,112004,134],{"class":129},[123,112006,112007],{"class":143},"\"slide\"",[123,112009,108418],{"class":337},[123,112011,134],{"class":129},[123,112013,112014],{"class":143},"\"1 0 0\"",[123,112016,103537],{"class":129},[19,112018,112019],{},"杆子通过 hinge joint 旋转:",[113,112021,112023],{"className":55470,"code":112022,"language":55472,"meta":118,"style":118},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[120,112024,112025],{"__ignoreMap":118},[123,112026,112027,112029,112031,112033,112035,112038,112040,112042,112044,112046,112048,112050],{"class":125,"line":126},[123,112028,3509],{"class":129},[123,112030,105346],{"class":53707},[123,112032,17350],{"class":337},[123,112034,134],{"class":129},[123,112036,112037],{"class":143},"\"pole_hinge\"",[123,112039,56227],{"class":337},[123,112041,134],{"class":129},[123,112043,108409],{"class":143},[123,112045,108418],{"class":337},[123,112047,134],{"class":129},[123,112049,108423],{"class":143},[123,112051,103537],{"class":129},[19,112053,112054],{},"控制力作用在小车 slide joint 上:",[113,112056,112058],{"className":55470,"code":112057,"language":55472,"meta":118,"style":118},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[120,112059,112060],{"__ignoreMap":118},[123,112061,112062,112064,112066,112068,112070,112073,112075,112077,112079,112081,112083,112085],{"class":125,"line":126},[123,112063,3509],{"class":129},[123,112065,108464],{"class":53707},[123,112067,17350],{"class":337},[123,112069,134],{"class":129},[123,112071,112072],{"class":143},"\"cart_motor\"",[123,112074,108474],{"class":337},[123,112076,134],{"class":129},[123,112078,112000],{"class":143},[123,112080,108481],{"class":337},[123,112082,134],{"class":129},[123,112084,56719],{"class":143},[123,112086,103537],{"class":129},[2587,112088,112090],{"id":112089},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,112092,112093],{},"这个简化模型有两个关节：",[48,112095,112096,112107],{},[51,112097,112098],{},[54,112099,112100,112102,112104],{},[57,112101,105149],{"align":26163},[57,112103,26164],{"align":26163},[57,112105,112106],{"align":26163},"对应状态",[64,112108,112109,112122],{},[54,112110,112111,112116,112119],{},[69,112112,112113],{"align":26163},[120,112114,112115],{},"cart_x",[69,112117,112118],{"align":26163},"slide",[69,112120,112121],{"align":26163},"小车 x 位置",[54,112123,112124,112129,112131],{},[69,112125,112126],{"align":26163},[120,112127,112128],{},"pole_hinge",[69,112130,108230],{"align":26163},[69,112132,112133],{"align":26163},"杆子角度",[19,112135,112136],{},"所以：",[113,112138,112141],{"className":112139,"code":112140,"language":7621,"meta":118},[7619],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[120,112142,112140],{"__ignoreMap":118},[19,112144,112145],{},"把它们拼起来就是观测：",[113,112147,112150],{"className":112148,"code":112149,"language":7621,"meta":118},[7619],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[120,112151,112149],{"__ignoreMap":118},[2587,112153,112155],{"id":112154},"action-是什么","action 是什么",[19,112157,112158],{},"本章只有一个 actuator：",[113,112160,112163],{"className":112161,"code":112162,"language":7621,"meta":118},[7619],"data.ctrl[0] = action\n",[120,112164,112162],{"__ignoreMap":118},[19,112166,112167],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[2587,112169,112171],{"id":112170},"reward-是什么","reward 是什么",[19,112173,112174],{},"奖励函数：",[113,112176,112178],{"className":115,"code":112177,"language":117,"meta":118,"style":118},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[120,112179,112180],{"__ignoreMap":118},[123,112181,112182,112184,112187,112189,112191,112193,112196,112198,112201,112203,112205,112207,112210,112212],{"class":125,"line":126},[123,112183,19474],{"class":133},[123,112185,112186],{"class":164}," float",[123,112188,1315],{"class":129},[123,112190,104794],{"class":164},[123,112192,54674],{"class":133},[123,112194,112195],{"class":164}," 0.1",[123,112197,8951],{"class":133},[123,112199,112200],{"class":129}," cart_x ",[123,112202,3060],{"class":133},[123,112204,112200],{"class":129},[123,112206,3135],{"class":133},[123,112208,112209],{"class":129}," pole_angle ",[123,112211,3060],{"class":133},[123,112213,112214],{"class":129}," pole_angle)\n",[19,112216,108616],{},[26,112218,112219,112224,112227],{},[29,112220,112221,112222,2494],{},"基础奖励是 ",[120,112223,104794],{},[29,112225,112226],{},"小车离中心越远，扣分越多。",[29,112228,112229],{},"杆子角度越大，扣分越多。",[19,112231,112232],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112234,103646],{"id":103645},[113,112236,112238],{"className":115,"code":112237,"language":117,"meta":118,"style":118},"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",[120,112239,112240,112246,112256,112260,112264,112272,112277,112281,112285,112289,112294,112298,112303,112308,112313,112317,112322,112327,112332,112336,112340,112344,112348,112352,112357,112361,112365,112369,112373,112377,112387,112394,112398,112402,112416,112430,112443,112473,112477,112481,112493,112505,112513,112517,112530,112534,112538,112547,112551,112567,112577,112590,112603,112607,112630,112648,112652,112664,112668,112672,112682,112692,112696,112712,112753,112757,112777,112793,112797,112801,112813],{"__ignoreMap":118},[123,112241,112242,112244],{"class":125,"line":126},[123,112243,223],{"class":133},[123,112245,103694],{"class":129},[123,112247,112248,112250,112252,112254],{"class":125,"line":140},[123,112249,223],{"class":133},[123,112251,33795],{"class":129},[123,112253,547],{"class":133},[123,112255,33800],{"class":129},[123,112257,112258],{"class":125,"line":156},[123,112259,232],{"emptyLinePlaceholder":231},[123,112261,112262],{"class":125,"line":168},[123,112263,232],{"emptyLinePlaceholder":231},[123,112265,112266,112268,112270],{"class":125,"line":268},[123,112267,103707],{"class":164},[123,112269,15995],{"class":133},[123,112271,103712],{"class":143},[123,112273,112274],{"class":125,"line":291},[123,112275,112276],{"class":143},"\u003Cmujoco model=\"cartpole\">\n",[123,112278,112279],{"class":125,"line":300},[123,112280,103722],{"class":143},[123,112282,112283],{"class":125,"line":305},[123,112284,232],{"emptyLinePlaceholder":231},[123,112286,112287],{"class":125,"line":316},[123,112288,103731],{"class":143},[123,112290,112291],{"class":125,"line":673},[123,112292,112293],{"class":143},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[123,112295,112296],{"class":125,"line":692},[123,112297,232],{"emptyLinePlaceholder":231},[123,112299,112300],{"class":125,"line":713},[123,112301,112302],{"class":143},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[123,112304,112305],{"class":125,"line":718},[123,112306,112307],{"class":143},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[123,112309,112310],{"class":125,"line":1138},[123,112311,112312],{"class":143},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[123,112314,112315],{"class":125,"line":1429},[123,112316,232],{"emptyLinePlaceholder":231},[123,112318,112319],{"class":125,"line":1439},[123,112320,112321],{"class":143},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[123,112323,112324],{"class":125,"line":1444},[123,112325,112326],{"class":143},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[123,112328,112329],{"class":125,"line":1453},[123,112330,112331],{"class":143},"        \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",[123,112333,112334],{"class":125,"line":1458},[123,112335,108828],{"class":143},[123,112337,112338],{"class":125,"line":1476},[123,112339,103760],{"class":143},[123,112341,112342],{"class":125,"line":1494},[123,112343,103765],{"class":143},[123,112345,112346],{"class":125,"line":1499},[123,112347,232],{"emptyLinePlaceholder":231},[123,112349,112350],{"class":125,"line":1517},[123,112351,108845],{"class":143},[123,112353,112354],{"class":125,"line":1534},[123,112355,112356],{"class":143},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[123,112358,112359],{"class":125,"line":1539},[123,112360,108855],{"class":143},[123,112362,112363],{"class":125,"line":2080},[123,112364,103770],{"class":143},[123,112366,112367],{"class":125,"line":2097},[123,112368,98092],{"class":143},[123,112370,112371],{"class":125,"line":2114},[123,112372,232],{"emptyLinePlaceholder":231},[123,112374,112375],{"class":125,"line":2125},[123,112376,232],{"emptyLinePlaceholder":231},[123,112378,112379,112381,112384],{"class":125,"line":2130},[123,112380,34359],{"class":133},[123,112382,112383],{"class":337}," get_observation",[123,112385,112386],{"class":129},"(data: mujoco.MjData) -> np.ndarray:\n",[123,112388,112389,112391],{"class":125,"line":5033},[123,112390,6529],{"class":133},[123,112392,112393],{"class":129}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[123,112395,112396],{"class":125,"line":5041},[123,112397,232],{"emptyLinePlaceholder":231},[123,112399,112400],{"class":125,"line":5046},[123,112401,232],{"emptyLinePlaceholder":231},[123,112403,112404,112406,112409,112412,112414],{"class":125,"line":5052},[123,112405,34359],{"class":133},[123,112407,112408],{"class":337}," compute_reward",[123,112410,112411],{"class":129},"(obs: np.ndarray) -> ",[123,112413,2656],{"class":164},[123,112415,1344],{"class":129},[123,112417,112418,112421,112423,112426,112428],{"class":125,"line":5058},[123,112419,112420],{"class":129},"    cart_x ",[123,112422,134],{"class":133},[123,112424,112425],{"class":129}," obs[",[123,112427,2799],{"class":164},[123,112429,998],{"class":129},[123,112431,112432,112435,112437,112439,112441],{"class":125,"line":5063},[123,112433,112434],{"class":129},"    pole_angle ",[123,112436,134],{"class":133},[123,112438,112425],{"class":129},[123,112440,2825],{"class":164},[123,112442,998],{"class":129},[123,112444,112445,112447,112449,112451,112453,112455,112457,112459,112461,112463,112465,112467,112469,112471],{"class":125,"line":10380},[123,112446,6529],{"class":133},[123,112448,112186],{"class":164},[123,112450,1315],{"class":129},[123,112452,104794],{"class":164},[123,112454,54674],{"class":133},[123,112456,112195],{"class":164},[123,112458,8951],{"class":133},[123,112460,112200],{"class":129},[123,112462,3060],{"class":133},[123,112464,112200],{"class":129},[123,112466,3135],{"class":133},[123,112468,112209],{"class":129},[123,112470,3060],{"class":133},[123,112472,112214],{"class":129},[123,112474,112475],{"class":125,"line":10404},[123,112476,232],{"emptyLinePlaceholder":231},[123,112478,112479],{"class":125,"line":10409},[123,112480,232],{"emptyLinePlaceholder":231},[123,112482,112483,112485,112487,112489,112491],{"class":125,"line":10415},[123,112484,34359],{"class":133},[123,112486,4417],{"class":337},[123,112488,103791],{"class":129},[123,112490,98080],{"class":164},[123,112492,1344],{"class":129},[123,112494,112495,112497,112499,112501,112503],{"class":125,"line":10442},[123,112496,103800],{"class":129},[123,112498,134],{"class":133},[123,112500,103805],{"class":129},[123,112502,103707],{"class":164},[123,112504,288],{"class":129},[123,112506,112507,112509,112511],{"class":125,"line":10447},[123,112508,1349],{"class":129},[123,112510,134],{"class":133},[123,112512,103818],{"class":129},[123,112514,112515],{"class":125,"line":10453},[123,112516,232],{"emptyLinePlaceholder":231},[123,112518,112519,112521,112523,112525,112527],{"class":125,"line":10465},[123,112520,107459],{"class":129},[123,112522,2825],{"class":164},[123,112524,1941],{"class":129},[123,112526,134],{"class":133},[123,112528,112529],{"class":164}," 0.1\n",[123,112531,112532],{"class":125,"line":10477},[123,112533,107472],{"class":129},[123,112535,112536],{"class":125,"line":10489},[123,112537,232],{"emptyLinePlaceholder":231},[123,112539,112540,112543,112545],{"class":125,"line":12148},[123,112541,112542],{"class":129},"    total_reward ",[123,112544,134],{"class":133},[123,112546,107151],{"class":164},[123,112548,112549],{"class":125,"line":12173},[123,112550,232],{"emptyLinePlaceholder":231},[123,112552,112553,112555,112557,112559,112561,112563,112565],{"class":125,"line":12196},[123,112554,5641],{"class":133},[123,112556,34028],{"class":129},[123,112558,1405],{"class":133},[123,112560,34855],{"class":164},[123,112562,1315],{"class":129},[123,112564,8843],{"class":164},[123,112566,33201],{"class":129},[123,112568,112569,112572,112574],{"class":125,"line":12220},[123,112570,112571],{"class":129},"        obs ",[123,112573,134],{"class":133},[123,112575,112576],{"class":129}," get_observation(data)\n",[123,112578,112579,112582,112584,112586,112588],{"class":125,"line":12225},[123,112580,112581],{"class":129},"        pole_angle ",[123,112583,134],{"class":133},[123,112585,112425],{"class":129},[123,112587,2825],{"class":164},[123,112589,998],{"class":129},[123,112591,112592,112595,112597,112599,112601],{"class":125,"line":12230},[123,112593,112594],{"class":129},"        pole_angular_velocity ",[123,112596,134],{"class":133},[123,112598,112425],{"class":129},[123,112600,2686],{"class":164},[123,112602,998],{"class":129},[123,112604,112605],{"class":125,"line":12235},[123,112606,232],{"emptyLinePlaceholder":231},[123,112608,112609,112612,112614,112617,112619,112621,112623,112625,112627],{"class":125,"line":12244},[123,112610,112611],{"class":129},"        action ",[123,112613,134],{"class":133},[123,112615,112616],{"class":164}," 2.0",[123,112618,8951],{"class":133},[123,112620,112209],{"class":129},[123,112622,3086],{"class":133},[123,112624,64269],{"class":164},[123,112626,8951],{"class":133},[123,112628,112629],{"class":129}," pole_angular_velocity\n",[123,112631,112632,112634,112636,112638,112640,112642,112644,112646],{"class":125,"line":12249},[123,112633,112611],{"class":129},[123,112635,134],{"class":133},[123,112637,109837],{"class":129},[123,112639,3135],{"class":133},[123,112641,104794],{"class":164},[123,112643,251],{"class":129},[123,112645,104794],{"class":164},[123,112647,288],{"class":129},[123,112649,112650],{"class":125,"line":12255},[123,112651,232],{"emptyLinePlaceholder":231},[123,112653,112654,112656,112658,112660,112662],{"class":125,"line":12276},[123,112655,109007],{"class":129},[123,112657,2799],{"class":164},[123,112659,1941],{"class":129},[123,112661,134],{"class":133},[123,112663,109860],{"class":129},[123,112665,112666],{"class":125,"line":12282},[123,112667,103908],{"class":129},[123,112669,112670],{"class":125,"line":12296},[123,112671,232],{"emptyLinePlaceholder":231},[123,112673,112674,112677,112679],{"class":125,"line":12302},[123,112675,112676],{"class":129},"        reward ",[123,112678,134],{"class":133},[123,112680,112681],{"class":129}," compute_reward(get_observation(data))\n",[123,112683,112684,112687,112689],{"class":125,"line":12329},[123,112685,112686],{"class":129},"        total_reward ",[123,112688,11909],{"class":133},[123,112690,112691],{"class":129}," reward\n",[123,112693,112694],{"class":125,"line":12338},[123,112695,232],{"emptyLinePlaceholder":231},[123,112697,112698,112700,112702,112704,112706,112708,112710],{"class":125,"line":12344},[123,112699,4940],{"class":133},[123,112701,34028],{"class":129},[123,112703,2935],{"class":133},[123,112705,8187],{"class":164},[123,112707,103951],{"class":133},[123,112709,6532],{"class":164},[123,112711,1344],{"class":129},[123,112713,112714,112716,112718,112721,112724,112727,112730,112732,112735,112738,112740,112742,112744,112746,112749,112751],{"class":125,"line":12352},[123,112715,37060],{"class":164},[123,112717,1315],{"class":129},[123,112719,112720],{"class":143},"\"step:\"",[123,112722,112723],{"class":129},", step, ",[123,112725,112726],{"class":143},"\"obs:\"",[123,112728,112729],{"class":129},", np.round(obs, ",[123,112731,2686],{"class":164},[123,112733,112734],{"class":129},"), ",[123,112736,112737],{"class":143},"\"action:\"",[123,112739,251],{"class":129},[123,112741,34430],{"class":164},[123,112743,1315],{"class":129},[123,112745,2656],{"class":164},[123,112747,112748],{"class":129},"(action), ",[123,112750,2686],{"class":164},[123,112752,32913],{"class":129},[123,112754,112755],{"class":125,"line":12357},[123,112756,232],{"emptyLinePlaceholder":231},[123,112758,112759,112761,112763,112766,112768,112770,112773,112775],{"class":125,"line":19032},[123,112760,33714],{"class":164},[123,112762,1315],{"class":129},[123,112764,112765],{"class":143},"\"total_reward:\"",[123,112767,251],{"class":129},[123,112769,34430],{"class":164},[123,112771,112772],{"class":129},"(total_reward, ",[123,112774,2686],{"class":164},[123,112776,32913],{"class":129},[123,112778,112779,112781,112783,112786,112789,112791],{"class":125,"line":19038},[123,112780,33714],{"class":164},[123,112782,1315],{"class":129},[123,112784,112785],{"class":143},"\"final obs:\"",[123,112787,112788],{"class":129},", np.round(get_observation(data), ",[123,112790,2686],{"class":164},[123,112792,32913],{"class":129},[123,112794,112795],{"class":125,"line":19061},[123,112796,232],{"emptyLinePlaceholder":231},[123,112798,112799],{"class":125,"line":19067},[123,112800,232],{"emptyLinePlaceholder":231},[123,112802,112803,112805,112807,112809,112811],{"class":125,"line":19090},[123,112804,3998],{"class":133},[123,112806,33635],{"class":164},[123,112808,103951],{"class":133},[123,112810,103954],{"class":143},[123,112812,1344],{"class":129},[123,112814,112815],{"class":125,"line":19104},[123,112816,103961],{"class":129},[19,112818,105960],{},[113,112820,112822],{"className":328,"code":112821,"language":330,"meta":118,"style":118},"touch ch6_cartpole.py\n",[120,112823,112824],{"__ignoreMap":118},[123,112825,112826,112828],{"class":125,"line":126},[123,112827,103676],{"class":337},[123,112829,112830],{"class":143}," ch6_cartpole.py\n",[19,112832,112833],{},"运行：",[113,112835,112837],{"className":328,"code":112836,"language":330,"meta":118,"style":118},"python ch6_cartpole.py\n",[120,112838,112839],{"__ignoreMap":118},[123,112840,112841,112843],{"class":125,"line":126},[123,112842,117],{"class":337},[123,112844,112830],{"class":143},[2587,112846,103964],{"id":103964},[19,112848,112849],{},"构造观测：",[113,112851,112853],{"className":115,"code":112852,"language":117,"meta":118,"style":118},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[120,112854,112855,112863],{"__ignoreMap":118},[123,112856,112857,112859,112861],{"class":125,"line":126},[123,112858,34359],{"class":133},[123,112860,112383],{"class":337},[123,112862,112386],{"class":129},[123,112864,112865,112867],{"class":125,"line":140},[123,112866,6529],{"class":133},[123,112868,112393],{"class":129},[19,112870,112871,112874,112875,112877,112878,112880],{},[120,112872,112873],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[120,112876,106420],{}," 2 维，",[120,112879,106750],{}," 2 维，所以 obs 是 4 维。",[19,112882,112883],{},"设置初始角度：",[113,112885,112887],{"className":115,"code":112886,"language":117,"meta":118,"style":118},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[120,112888,112889,112901],{"__ignoreMap":118},[123,112890,112891,112893,112895,112897,112899],{"class":125,"line":126},[123,112892,107089],{"class":129},[123,112894,2825],{"class":164},[123,112896,1941],{"class":129},[123,112898,134],{"class":133},[123,112900,112529],{"class":164},[123,112902,112903],{"class":125,"line":140},[123,112904,106933],{"class":129},[19,112906,112907],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112909,112910],{},"简单反馈控制：",[113,112912,112914],{"className":115,"code":112913,"language":117,"meta":118,"style":118},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[120,112915,112916,112936],{"__ignoreMap":118},[123,112917,112918,112920,112922,112924,112926,112928,112930,112932,112934],{"class":125,"line":126},[123,112919,109832],{"class":129},[123,112921,134],{"class":133},[123,112923,112616],{"class":164},[123,112925,8951],{"class":133},[123,112927,112209],{"class":129},[123,112929,3086],{"class":133},[123,112931,64269],{"class":164},[123,112933,8951],{"class":133},[123,112935,112629],{"class":129},[123,112937,112938,112940,112942,112944,112946,112948,112950,112952],{"class":125,"line":140},[123,112939,109832],{"class":129},[123,112941,134],{"class":133},[123,112943,109837],{"class":129},[123,112945,3135],{"class":133},[123,112947,104794],{"class":164},[123,112949,251],{"class":129},[123,112951,104794],{"class":164},[123,112953,288],{"class":129},[19,112955,112956],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112958,112959],{},"限制动作：",[113,112961,112963],{"className":115,"code":112962,"language":117,"meta":118,"style":118},"np.clip(action, -1.0, 1.0)\n",[120,112964,112965],{"__ignoreMap":118},[123,112966,112967,112970,112972,112974,112976,112978],{"class":125,"line":126},[123,112968,112969],{"class":129},"np.clip(action, ",[123,112971,3135],{"class":133},[123,112973,104794],{"class":164},[123,112975,251],{"class":129},[123,112977,104794],{"class":164},[123,112979,288],{"class":129},[19,112981,112982,112983,112986],{},"因为 XML 里 ",[120,112984,112985],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[2587,112988,104099],{"id":104099},[113,112990,112991],{"className":115,"code":112852,"language":117,"meta":118,"style":118},[120,112992,112993,113001],{"__ignoreMap":118},[123,112994,112995,112997,112999],{"class":125,"line":126},[123,112996,34359],{"class":133},[123,112998,112383],{"class":337},[123,113000,112386],{"class":129},[123,113002,113003,113005],{"class":125,"line":140},[123,113004,6529],{"class":133},[123,113006,112393],{"class":129},[19,113008,113009,113010,113013,113014,113017,113018,113021],{},"这段定义了一个函数，用来获取当前观测。",[120,113011,113012],{},"data.qpos.copy()"," 是位置数组副本，",[120,113015,113016],{},"data.qvel.copy()"," 是速度数组副本。",[120,113019,113020],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,113023,113024],{},"在本章模型里：",[113,113026,113029],{"className":113027,"code":113028,"language":7621,"meta":118},[7619],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[120,113030,113028],{"__ignoreMap":118},[19,113032,113033],{},"所以返回的 obs 是：",[113,113035,113038],{"className":113036,"code":113037,"language":7621,"meta":118},[7619],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[120,113039,113037],{"__ignoreMap":118},[113,113041,113043],{"className":115,"code":113042,"language":117,"meta":118,"style":118},"def compute_reward(obs: np.ndarray) -> float:\n",[120,113044,113045],{"__ignoreMap":118},[123,113046,113047,113049,113051,113053,113055],{"class":125,"line":126},[123,113048,34359],{"class":133},[123,113050,112408],{"class":337},[123,113052,112411],{"class":129},[123,113054,2656],{"class":164},[123,113056,1344],{"class":129},[19,113058,113059,113060,113063],{},"这行定义奖励函数。输入是观测 ",[120,113061,113062],{},"obs","，输出是一个浮点数奖励。",[113,113065,113067],{"className":115,"code":113066,"language":117,"meta":118,"style":118},"cart_x = obs[0]\npole_angle = obs[1]\n",[120,113068,113069,113082],{"__ignoreMap":118},[123,113070,113071,113074,113076,113078,113080],{"class":125,"line":126},[123,113072,113073],{"class":129},"cart_x ",[123,113075,134],{"class":133},[123,113077,112425],{"class":129},[123,113079,2799],{"class":164},[123,113081,998],{"class":129},[123,113083,113084,113087,113089,113091,113093],{"class":125,"line":140},[123,113085,113086],{"class":129},"pole_angle ",[123,113088,134],{"class":133},[123,113090,112425],{"class":129},[123,113092,2825],{"class":164},[123,113094,998],{"class":129},[19,113096,113097,113098,113101,113102,113105],{},"数组索引从 0 开始。",[120,113099,113100],{},"obs[0]"," 是第一个元素，也就是小车位置。",[120,113103,113104],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[113,113107,113108],{"className":115,"code":112177,"language":117,"meta":118,"style":118},[120,113109,113110],{"__ignoreMap":118},[123,113111,113112,113114,113116,113118,113120,113122,113124,113126,113128,113130,113132,113134,113136,113138],{"class":125,"line":126},[123,113113,19474],{"class":133},[123,113115,112186],{"class":164},[123,113117,1315],{"class":129},[123,113119,104794],{"class":164},[123,113121,54674],{"class":133},[123,113123,112195],{"class":164},[123,113125,8951],{"class":133},[123,113127,112200],{"class":129},[123,113129,3060],{"class":133},[123,113131,112200],{"class":129},[123,113133,3135],{"class":133},[123,113135,112209],{"class":129},[123,113137,3060],{"class":133},[123,113139,112214],{"class":129},[19,113141,113142,113143,113146,113147,113150],{},"这行计算奖励。",[120,113144,113145],{},"cart_x * cart_x"," 是小车位置的平方，",[120,113148,113149],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[113,113152,113154],{"className":115,"code":113153,"language":117,"meta":118,"style":118},"data.qpos[1] = 0.1\n",[120,113155,113156],{"__ignoreMap":118},[123,113157,113158,113160,113162,113164,113166],{"class":125,"line":126},[123,113159,107089],{"class":129},[123,113161,2825],{"class":164},[123,113163,1941],{"class":129},[123,113165,134],{"class":133},[123,113167,112529],{"class":164},[19,113169,113170,113171,113173,113174,113176],{},"手动设置杆子的初始角度。因为 ",[120,113172,107846],{}," 是小车位置，",[120,113175,107849],{}," 是杆子角度，所以这里改的是杆子。",[113,113178,113179],{"className":115,"code":106933,"language":117,"meta":118,"style":118},[120,113180,113181],{"__ignoreMap":118},[123,113182,113183],{"class":125,"line":126},[123,113184,106933],{"class":129},[19,113186,107892,113187,113189],{},[120,113188,106420],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[113,113191,113193],{"className":115,"code":113192,"language":117,"meta":118,"style":118},"total_reward = 0.0\n",[120,113194,113195],{"__ignoreMap":118},[123,113196,113197,113200,113202],{"class":125,"line":126},[123,113198,113199],{"class":129},"total_reward ",[123,113201,134],{"class":133},[123,113203,107151],{"class":164},[19,113205,113206],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[113,113208,113210],{"className":115,"code":113209,"language":117,"meta":118,"style":118},"for step in range(1000):\n",[120,113211,113212],{"__ignoreMap":118},[123,113213,113214,113216,113218,113220,113222,113224,113226],{"class":125,"line":126},[123,113215,1399],{"class":133},[123,113217,34028],{"class":129},[123,113219,1405],{"class":133},[123,113221,34855],{"class":164},[123,113223,1315],{"class":129},[123,113225,8843],{"class":164},[123,113227,33201],{"class":129},[19,113229,113230,113231,113233],{},"循环 1000 步。",[120,113232,109524],{}," 是当前步数，从 0 到 999。",[113,113235,113237],{"className":115,"code":113236,"language":117,"meta":118,"style":118},"obs = get_observation(data)\n",[120,113238,113239],{"__ignoreMap":118},[123,113240,113241,113244,113246],{"class":125,"line":126},[123,113242,113243],{"class":129},"obs ",[123,113245,134],{"class":133},[123,113247,112576],{"class":129},[19,113249,113250,113251,2494],{},"读取当前状态，保存到 ",[120,113252,113062],{},[113,113254,113256],{"className":115,"code":113255,"language":117,"meta":118,"style":118},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[120,113257,113258,113270],{"__ignoreMap":118},[123,113259,113260,113262,113264,113266,113268],{"class":125,"line":126},[123,113261,113086],{"class":129},[123,113263,134],{"class":133},[123,113265,112425],{"class":129},[123,113267,2825],{"class":164},[123,113269,998],{"class":129},[123,113271,113272,113275,113277,113279,113281],{"class":125,"line":140},[123,113273,113274],{"class":129},"pole_angular_velocity ",[123,113276,134],{"class":133},[123,113278,112425],{"class":129},[123,113280,2686],{"class":164},[123,113282,998],{"class":129},[19,113284,113285,113286,113289,113290,2494],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[120,113287,113288],{},"obs[3]","？因为 obs 的顺序是 ",[120,113291,113292],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[113,113294,113296],{"className":115,"code":113295,"language":117,"meta":118,"style":118},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[120,113297,113298],{"__ignoreMap":118},[123,113299,113300,113302,113304,113306,113308,113310,113312,113314,113316],{"class":125,"line":126},[123,113301,109832],{"class":129},[123,113303,134],{"class":133},[123,113305,112616],{"class":164},[123,113307,8951],{"class":133},[123,113309,112209],{"class":129},[123,113311,3086],{"class":133},[123,113313,64269],{"class":164},[123,113315,8951],{"class":133},[123,113317,112629],{"class":129},[19,113319,113320,113321,103411,113323,113325],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[120,113322,107650],{},[120,113324,37739],{}," 是人为设置的系数，不是固定公式。",[113,113327,113329],{"className":115,"code":113328,"language":117,"meta":118,"style":118},"action = np.clip(action, -1.0, 1.0)\n",[120,113330,113331],{"__ignoreMap":118},[123,113332,113333,113335,113337,113339,113341,113343,113345,113347],{"class":125,"line":126},[123,113334,109832],{"class":129},[123,113336,134],{"class":133},[123,113338,109837],{"class":129},[123,113340,3135],{"class":133},[123,113342,104794],{"class":164},[123,113344,251],{"class":129},[123,113346,104794],{"class":164},[123,113348,288],{"class":129},[19,113350,113351],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[113,113353,113354],{"className":115,"code":112162,"language":117,"meta":118,"style":118},[120,113355,113356],{"__ignoreMap":118},[123,113357,113358,113360,113362,113364,113366],{"class":125,"line":126},[123,113359,108261],{"class":129},[123,113361,2799],{"class":164},[123,113363,1941],{"class":129},[123,113365,134],{"class":133},[123,113367,109860],{"class":129},[19,113369,113370],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[113,113372,113373],{"className":115,"code":106895,"language":117,"meta":118,"style":118},[120,113374,113375],{"__ignoreMap":118},[123,113376,113377],{"class":125,"line":126},[123,113378,106895],{"class":129},[19,113380,113381,113382,113384],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[120,113383,108516],{}," 计算小车和杆子的下一刻状态。",[113,113386,113388],{"className":115,"code":113387,"language":117,"meta":118,"style":118},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[120,113389,113390,113399],{"__ignoreMap":118},[123,113391,113392,113395,113397],{"class":125,"line":126},[123,113393,113394],{"class":129},"reward ",[123,113396,134],{"class":133},[123,113398,112681],{"class":129},[123,113400,113401,113403,113405],{"class":125,"line":140},[123,113402,113199],{"class":129},[123,113404,11909],{"class":133},[123,113406,112691],{"class":129},[19,113408,113409,113410,113412,113413,113416,113417,2494],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[120,113411,11909],{}," 是简写，",[120,113414,113415],{},"total_reward += reward"," 等价于 ",[120,113418,113419],{},"total_reward = total_reward + reward",[113,113421,113423],{"className":115,"code":113422,"language":117,"meta":118,"style":118},"if step % 100 == 0:\n",[120,113424,113425],{"__ignoreMap":118},[123,113426,113427,113429,113431,113433,113435,113437,113439],{"class":125,"line":126},[123,113428,3998],{"class":133},[123,113430,34028],{"class":129},[123,113432,2935],{"class":133},[123,113434,8187],{"class":164},[123,113436,103951],{"class":133},[123,113438,6532],{"class":164},[123,113440,1344],{"class":129},[19,113442,113443,113445,113446,113449],{},[120,113444,2935],{}," 是取余数。",[120,113447,113448],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[113,113451,113453],{"className":115,"code":113452,"language":117,"meta":118,"style":118},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[120,113454,113455],{"__ignoreMap":118},[123,113456,113457,113459,113461,113463,113465,113467,113469,113471,113473,113475,113477,113479,113481,113483,113485,113487],{"class":125,"line":126},[123,113458,294],{"class":164},[123,113460,1315],{"class":129},[123,113462,112720],{"class":143},[123,113464,112723],{"class":129},[123,113466,112726],{"class":143},[123,113468,112729],{"class":129},[123,113470,2686],{"class":164},[123,113472,112734],{"class":129},[123,113474,112737],{"class":143},[123,113476,251],{"class":129},[123,113478,34430],{"class":164},[123,113480,1315],{"class":129},[123,113482,2656],{"class":164},[123,113484,112748],{"class":129},[123,113486,2686],{"class":164},[123,113488,32913],{"class":129},[19,113490,113491,113492,113495,113496,113499],{},"打印当前步数、观测和动作。",[120,113493,113494],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[120,113497,113498],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113501,104707],{"id":104706},[19,113503,113504],{},"观测向量:",[113,113506,113509],{"className":113507,"code":113508,"language":7621,"meta":118},[7619],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[120,113510,113508],{"__ignoreMap":118},[19,113512,113513],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113515,113516],{},"每隔 100 步会打印一次：",[113,113518,113521],{"className":113519,"code":113520,"language":7621,"meta":118},[7619],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[120,113522,113520],{"__ignoreMap":118},[19,113524,113525],{},"重点观察：",[26,113527,113528,113534,113539],{},[29,113529,113530,113533],{},[120,113531,113532],{},"pole_angle"," 是否越来越大。",[29,113535,113536,113538],{},[120,113537,112115],{}," 是否跑得太远。",[29,113540,113541,113542,84936,113544,2494],{},"action 是否经常被 clip 到 ",[120,113543,106305],{},[120,113545,2825],{},[19,113547,113548],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113550,104739],{"id":104738},[26,113552,113553,113559,113562,113568,113578,113584,113587],{},[29,113554,113555,113556,2494],{},"把初始角度改为 ",[120,113557,113558],{},"data.qpos[1] = 0.3",[29,113560,113561],{},"重新运行，观察控制是否变差。",[29,113563,113564,113565,113567],{},"把 actuator ",[120,113566,109457],{}," 改小。",[29,113569,113570,113571,113574,113575,2494],{},"打印 ",[120,113572,113573],{},"model.nq, model.nv, model.nu","，应为 ",[120,113576,113577],{},"2 2 1",[29,113579,113580,113581,113583],{},"把 reward 里的 ",[120,113582,113149],{}," 系数改大，观察总奖励变化。",[29,113585,113586],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,113588,113589],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113591,104844],{"id":104843},[2587,113593,113594],{"id":113594},"杆子方向和预期不一致",[19,113596,104787,113597,113599,113600,113602],{},[120,113598,108629],{}," 和 capsule 的 ",[120,113601,105566],{},"，必要时用 viewer 可视化确认。",[2587,113604,113605],{"id":113605},"控制器越控越倒",[19,113607,113608],{},"说明反馈符号可能反了，尝试:",[113,113610,113612],{"className":115,"code":113611,"language":117,"meta":118,"style":118},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[120,113613,113614],{"__ignoreMap":118},[123,113615,113616,113618,113620,113622,113624,113626,113628,113630,113632,113634],{"class":125,"line":126},[123,113617,109832],{"class":129},[123,113619,134],{"class":133},[123,113621,54674],{"class":133},[123,113623,107650],{"class":164},[123,113625,8951],{"class":133},[123,113627,112209],{"class":129},[123,113629,3135],{"class":133},[123,113631,64269],{"class":164},[123,113633,8951],{"class":133},[123,113635,112629],{"class":129},[2587,113637,113638],{"id":113638},"小车飞走",[19,113640,113641,113642,113644,113645,113648],{},"降低 ",[120,113643,109457],{}," 或缩小 ",[120,113646,113647],{},"action"," 的 clip 范围。",[2587,113650,113652,113654],{"id":113651},"obs3-为什么是杆子角速度",[120,113653,113288],{}," 为什么是杆子角速度",[19,113656,113657],{},"因为这个模型里：",[113,113659,113662],{"className":113660,"code":113661,"language":7621,"meta":118},[7619],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[120,113663,113661],{"__ignoreMap":118},[19,113665,112136],{},[113,113667,113670],{"className":113668,"code":113669,"language":7621,"meta":118},[7619],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[120,113671,113669],{"__ignoreMap":118},[2587,113673,113675],{"id":113674},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113677,113678],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113680,104998],{"id":104997},[19,113682,113683],{},"一个控制任务通常包含：",[26,113685,113686,113689,113697,113702,113705],{},[29,113687,113688],{},"模型：Cartpole 的 body、joint、actuator。",[29,113690,113691,113692,2820,113694,113696],{},"观测：从 ",[120,113693,106420],{},[120,113695,106750],{}," 里取状态。",[29,113698,113699,113700,2494],{},"动作：写入 ",[120,113701,103469],{},[29,113703,113704],{},"奖励：根据任务目标打分。",[29,113706,113707],{},"循环：obs -> action -> step -> reward。",[19,113709,113710],{},"这就是后面 Gymnasium 环境的基本骨架。",[2526,113712,106676],{},{"title":118,"searchDepth":140,"depth":140,"links":113714},[113715,113716,113717,113722,113726,113727,113728,113736],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":113718},[113719,113720,113721],{"id":112089,"depth":156,"text":112090},{"id":112154,"depth":156,"text":112155},{"id":112170,"depth":156,"text":112171},{"id":103645,"depth":140,"text":103646,"children":113723},[113724,113725],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":113729},[113730,113731,113732,113733,113735],{"id":113594,"depth":156,"text":113594},{"id":113605,"depth":156,"text":113605},{"id":113638,"depth":156,"text":113638},{"id":113651,"depth":156,"text":113734},"obs[3] 为什么是杆子角速度",{"id":113674,"depth":156,"text":113675},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111825,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113743,"title":113744,"body":113745,"description":118,"extension":2545,"meta":115758,"navigation":231,"path":115759,"seo":115760,"stem":115761,"__hash__":115762},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113746,"toc":115734},[113747,113750,113752,113755,113757,113774,113777,113780,113786,113789,113791,113793,113817,113819,113833,113835,113876,113878,113896,113898,113901,113907,113910,113938,113942,113948,113973,113976,114007,114014,114017,114020,114026,114029,114035,114038,114044,114048,114051,114076,114079,114081,114840,114842,114854,114856,114867,114869,114872,114889,114892,114894,114905,114908,114910,114956,114959,114972,114975,115057,115060,115062,115078,115088,115101,115104,115143,115153,115164,115174,115187,115190,115219,115222,115232,115235,115241,115258,115269,115271,115277,115294,115305,115326,115329,115341,115344,115365,115368,115376,115384,115401,115404,115473,115480,115488,115491,115504,115511,115513,115516,115522,115525,115528,115534,115540,115542,115582,115584,115590,115599,115602,115604,115624,115627,115630,115636,115640,115642,115669,115672,115675,115702,115708,115711,115714,115716,115719,115722,115728,115731],[10,113748,113744],{"id":113749},"_7控制任务reacher-机械臂到达目标",[14,113751,103040],{"id":103039},[19,113753,113754],{},"本章搭建一个二维两关节 reacher 任务。",[19,113756,106721],{},[26,113758,113759,113762,113765,113768,113771],{},[29,113760,113761],{},"两个 hinge joint",[29,113763,113764],{},"两个 motor actuator",[29,113766,113767],{},"site 作为末端点和目标点",[29,113769,113770],{},"根据末端和目标距离设计 reward",[29,113772,113773],{},"构造机械臂任务的基本形式",[19,113775,113776],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113778,113779],{},"Reacher 任务可以理解为：",[113,113781,113784],{"className":113782,"code":113783,"language":7621,"meta":118},[7619],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[120,113785,113783],{"__ignoreMap":118},[19,113787,113788],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113790,103163],{"id":103162},[19,113792,103166],{},[113,113794,113795],{"className":328,"code":106778,"language":330,"meta":118,"style":118},[120,113796,113797],{"__ignoreMap":118},[123,113798,113799,113801,113803,113805,113807,113809,113811,113813,113815],{"class":125,"line":126},[123,113800,26999],{"class":337},[123,113802,28736],{"class":143},[123,113804,341],{"class":143},[123,113806,28821],{"class":164},[123,113808,106793],{"class":143},[123,113810,103191],{"class":143},[123,113812,104892],{"class":143},[123,113814,103207],{"class":143},[123,113816,106802],{"class":143},[19,113818,105209],{},[113,113820,113821],{"className":328,"code":103312,"language":330,"meta":118,"style":118},[120,113822,113823],{"__ignoreMap":118},[123,113824,113825,113827,113829,113831],{"class":125,"line":126},[123,113826,338],{"class":337},[123,113828,341],{"class":143},[123,113830,103323],{"class":143},[123,113832,103326],{"class":143},[19,113834,105226],{},[113,113836,113838],{"className":328,"code":113837,"language":330,"meta":118,"style":118},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[120,113839,113840,113857,113866],{"__ignoreMap":118},[123,113841,113842,113844,113846,113848,113851,113853,113855],{"class":125,"line":126},[123,113843,32750],{"class":337},[123,113845,31596],{"class":143},[123,113847,27537],{"class":164},[123,113849,113850],{"class":143}," mujoco-reacher",[123,113852,103368],{"class":143},[123,113854,103371],{"class":164},[123,113856,103374],{"class":164},[123,113858,113859,113861,113863],{"class":125,"line":140},[123,113860,32750],{"class":337},[123,113862,103381],{"class":143},[123,113864,113865],{"class":143}," mujoco-reacher\n",[123,113867,113868,113870,113872,113874],{"class":125,"line":156},[123,113869,338],{"class":337},[123,113871,341],{"class":143},[123,113873,103323],{"class":143},[123,113875,103326],{"class":143},[19,113877,103397],{},[26,113879,113880,113883,113886],{},[29,113881,113882],{},"本章使用低维状态，不使用图像输入。",[29,113884,113885],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,113887,113888,113889,2820,113891,2820,113893,113895],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[120,113890,106420],{},[120,113892,106750],{},[120,113894,106070],{}," 的方法一致。",[14,113897,103438],{"id":103437},[19,113899,113900],{},"Reacher 任务核心:",[113,113902,113905],{"className":113903,"code":113904,"language":7621,"meta":118},[7619],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[120,113906,113904],{"__ignoreMap":118},[19,113908,113909],{},"读取 site 世界坐标:",[113,113911,113913],{"className":115,"code":113912,"language":117,"meta":118,"style":118},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[120,113914,113915,113928],{"__ignoreMap":118},[123,113916,113917,113919,113921,113923,113926],{"class":125,"line":126},[123,113918,106024],{"class":129},[123,113920,134],{"class":133},[123,113922,105795],{"class":129},[123,113924,113925],{"class":143},"\"tip\"",[123,113927,288],{"class":129},[123,113929,113930,113933,113935],{"class":125,"line":140},[123,113931,113932],{"class":129},"tip_pos ",[123,113934,134],{"class":133},[123,113936,113937],{"class":129}," data.site_xpos[site_id]\n",[2587,113939,113941],{"id":113940},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113943,113944,113945,113947],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[120,113946,106420],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[113,113949,113951],{"className":115,"code":113950,"language":117,"meta":118,"style":118},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[120,113952,113953,113963],{"__ignoreMap":118},[123,113954,113955,113958,113960],{"class":125,"line":126},[123,113956,113957],{"class":129},"tip ",[123,113959,134],{"class":133},[123,113961,113962],{"class":129}," data.site_xpos[tip_site_id]\n",[123,113964,113965,113968,113970],{"class":125,"line":140},[123,113966,113967],{"class":129},"target ",[123,113969,134],{"class":133},[123,113971,113972],{"class":129}," data.site_xpos[target_site_id]\n",[19,113974,113975],{},"这样 reward 就很容易写：",[113,113977,113979],{"className":115,"code":113978,"language":117,"meta":118,"style":118},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[120,113980,113981,113996],{"__ignoreMap":118},[123,113982,113983,113986,113988,113991,113993],{"class":125,"line":126},[123,113984,113985],{"class":129},"dist ",[123,113987,134],{"class":133},[123,113989,113990],{"class":129}," np.linalg.norm(tip ",[123,113992,3135],{"class":133},[123,113994,113995],{"class":129}," target)\n",[123,113997,113998,114000,114002,114004],{"class":125,"line":140},[123,113999,113394],{"class":129},[123,114001,134],{"class":133},[123,114003,54674],{"class":133},[123,114005,114006],{"class":129},"dist\n",[19,114008,114009,114010,114013],{},"距离越小，",[120,114011,114012],{},"-dist"," 越接近 0，奖励越高。",[2587,114015,114016],{"id":114016},"两关节机械臂的状态",[19,114018,114019],{},"这个模型有两个 hinge joint：",[113,114021,114024],{"className":114022,"code":114023,"language":7621,"meta":118},[7619],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[120,114025,114023],{"__ignoreMap":118},[19,114027,114028],{},"再加上末端和目标位置：",[113,114030,114033],{"className":114031,"code":114032,"language":7621,"meta":118},[7619],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[120,114034,114032],{"__ignoreMap":118},[19,114036,114037],{},"总维度：",[113,114039,114042],{"className":114040,"code":114041,"language":7621,"meta":118},[7619],"2 + 2 + 3 + 3 = 10\n",[120,114043,114041],{"__ignoreMap":118},[2587,114045,114047],{"id":114046},"为什么-gravity-是-0","为什么 gravity 是 0",[19,114049,114050],{},"本章把重力设为：",[113,114052,114054],{"className":55470,"code":114053,"language":55472,"meta":118,"style":118},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[120,114055,114056],{"__ignoreMap":118},[123,114057,114058,114060,114062,114064,114066,114068,114070,114072,114074],{"class":125,"line":126},[123,114059,3509],{"class":129},[123,114061,71567],{"class":53707},[123,114063,103587],{"class":337},[123,114065,134],{"class":129},[123,114067,103592],{"class":143},[123,114069,103595],{"class":337},[123,114071,134],{"class":129},[123,114073,106161],{"class":143},[123,114075,103537],{"class":129},[19,114077,114078],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114080,103646],{"id":103645},[113,114082,114084],{"className":115,"code":114083,"language":117,"meta":118,"style":118},"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",[120,114085,114086,114092,114102,114106,114110,114118,114123,114128,114132,114136,114141,114146,114150,114155,114160,114165,114169,114174,114179,114184,114189,114193,114197,114201,114205,114209,114214,114219,114223,114227,114231,114235,114239,114254,114263,114275,114298,114305,114309,114313,114323,114337,114351,114358,114362,114366,114380,114392,114404,114417,114432,114449,114453,114457,114469,114481,114489,114497,114501,114517,114522,114535,114548,114563,114567,114601,114633,114637,114641,114650,114654,114670,114680,114691,114707,114723,114739,114755,114759,114777,114797,114816,114820,114824,114836],{"__ignoreMap":118},[123,114087,114088,114090],{"class":125,"line":126},[123,114089,223],{"class":133},[123,114091,103694],{"class":129},[123,114093,114094,114096,114098,114100],{"class":125,"line":140},[123,114095,223],{"class":133},[123,114097,33795],{"class":129},[123,114099,547],{"class":133},[123,114101,33800],{"class":129},[123,114103,114104],{"class":125,"line":156},[123,114105,232],{"emptyLinePlaceholder":231},[123,114107,114108],{"class":125,"line":168},[123,114109,232],{"emptyLinePlaceholder":231},[123,114111,114112,114114,114116],{"class":125,"line":268},[123,114113,103707],{"class":164},[123,114115,15995],{"class":133},[123,114117,103712],{"class":143},[123,114119,114120],{"class":125,"line":291},[123,114121,114122],{"class":143},"\u003Cmujoco model=\"two_link_reacher\">\n",[123,114124,114125],{"class":125,"line":300},[123,114126,114127],{"class":143},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[123,114129,114130],{"class":125,"line":305},[123,114131,232],{"emptyLinePlaceholder":231},[123,114133,114134],{"class":125,"line":316},[123,114135,103731],{"class":143},[123,114137,114138],{"class":125,"line":673},[123,114139,114140],{"class":143},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[123,114142,114143],{"class":125,"line":692},[123,114144,114145],{"class":143},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[123,114147,114148],{"class":125,"line":713},[123,114149,232],{"emptyLinePlaceholder":231},[123,114151,114152],{"class":125,"line":718},[123,114153,114154],{"class":143},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[123,114156,114157],{"class":125,"line":1138},[123,114158,114159],{"class":143},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[123,114161,114162],{"class":125,"line":1429},[123,114163,114164],{"class":143},"      \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",[123,114166,114167],{"class":125,"line":1439},[123,114168,232],{"emptyLinePlaceholder":231},[123,114170,114171],{"class":125,"line":1444},[123,114172,114173],{"class":143},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[123,114175,114176],{"class":125,"line":1453},[123,114177,114178],{"class":143},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[123,114180,114181],{"class":125,"line":1458},[123,114182,114183],{"class":143},"        \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",[123,114185,114186],{"class":125,"line":1476},[123,114187,114188],{"class":143},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[123,114190,114191],{"class":125,"line":1494},[123,114192,108828],{"class":143},[123,114194,114195],{"class":125,"line":1499},[123,114196,103760],{"class":143},[123,114198,114199],{"class":125,"line":1517},[123,114200,103765],{"class":143},[123,114202,114203],{"class":125,"line":1534},[123,114204,232],{"emptyLinePlaceholder":231},[123,114206,114207],{"class":125,"line":1539},[123,114208,108845],{"class":143},[123,114210,114211],{"class":125,"line":2080},[123,114212,114213],{"class":143},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[123,114215,114216],{"class":125,"line":2097},[123,114217,114218],{"class":143},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[123,114220,114221],{"class":125,"line":2114},[123,114222,108855],{"class":143},[123,114224,114225],{"class":125,"line":2125},[123,114226,103770],{"class":143},[123,114228,114229],{"class":125,"line":2130},[123,114230,98092],{"class":143},[123,114232,114233],{"class":125,"line":5033},[123,114234,232],{"emptyLinePlaceholder":231},[123,114236,114237],{"class":125,"line":5041},[123,114238,232],{"emptyLinePlaceholder":231},[123,114240,114241,114243,114246,114249,114251],{"class":125,"line":5046},[123,114242,34359],{"class":133},[123,114244,114245],{"class":337}," site_position",[123,114247,114248],{"class":129},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[123,114250,3769],{"class":164},[123,114252,114253],{"class":129},") -> np.ndarray:\n",[123,114255,114256,114258,114260],{"class":125,"line":5052},[123,114257,105790],{"class":129},[123,114259,134],{"class":133},[123,114261,114262],{"class":129}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[123,114264,114265,114267,114269,114271,114273],{"class":125,"line":5058},[123,114266,1711],{"class":133},[123,114268,105839],{"class":129},[123,114270,3509],{"class":133},[123,114272,6532],{"class":164},[123,114274,1344],{"class":129},[123,114276,114277,114279,114281,114283,114285,114288,114290,114292,114294,114296],{"class":125,"line":5063},[123,114278,105822],{"class":133},[123,114280,105825],{"class":164},[123,114282,1315],{"class":129},[123,114284,2667],{"class":133},[123,114286,114287],{"class":143},"\"site not found: ",[123,114289,3495],{"class":164},[123,114291,663],{"class":129},[123,114293,3545],{"class":164},[123,114295,2859],{"class":143},[123,114297,288],{"class":129},[123,114299,114300,114302],{"class":125,"line":10380},[123,114301,6529],{"class":133},[123,114303,114304],{"class":129}," data.site_xpos[site_id].copy()\n",[123,114306,114307],{"class":125,"line":10404},[123,114308,232],{"emptyLinePlaceholder":231},[123,114310,114311],{"class":125,"line":10409},[123,114312,232],{"emptyLinePlaceholder":231},[123,114314,114315,114317,114320],{"class":125,"line":10415},[123,114316,34359],{"class":133},[123,114318,114319],{"class":337}," get_obs",[123,114321,114322],{"class":129},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[123,114324,114325,114328,114330,114333,114335],{"class":125,"line":10442},[123,114326,114327],{"class":129},"    tip ",[123,114329,134],{"class":133},[123,114331,114332],{"class":129}," site_position(model, data, ",[123,114334,113925],{"class":143},[123,114336,288],{"class":129},[123,114338,114339,114342,114344,114346,114349],{"class":125,"line":10447},[123,114340,114341],{"class":129},"    target ",[123,114343,134],{"class":133},[123,114345,114332],{"class":129},[123,114347,114348],{"class":143},"\"target\"",[123,114350,288],{"class":129},[123,114352,114353,114355],{"class":125,"line":10453},[123,114354,6529],{"class":133},[123,114356,114357],{"class":129}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[123,114359,114360],{"class":125,"line":10465},[123,114361,232],{"emptyLinePlaceholder":231},[123,114363,114364],{"class":125,"line":10477},[123,114365,232],{"emptyLinePlaceholder":231},[123,114367,114368,114370,114373,114376,114378],{"class":125,"line":10489},[123,114369,34359],{"class":133},[123,114371,114372],{"class":337}," reward",[123,114374,114375],{"class":129},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[123,114377,2656],{"class":164},[123,114379,1344],{"class":129},[123,114381,114382,114384,114386,114388,114390],{"class":125,"line":12148},[123,114383,114327],{"class":129},[123,114385,134],{"class":133},[123,114387,114332],{"class":129},[123,114389,113925],{"class":143},[123,114391,288],{"class":129},[123,114393,114394,114396,114398,114400,114402],{"class":125,"line":12173},[123,114395,114341],{"class":129},[123,114397,134],{"class":133},[123,114399,114332],{"class":129},[123,114401,114348],{"class":143},[123,114403,288],{"class":129},[123,114405,114406,114409,114411,114413,114415],{"class":125,"line":12196},[123,114407,114408],{"class":129},"    dist ",[123,114410,134],{"class":133},[123,114412,113990],{"class":129},[123,114414,3135],{"class":133},[123,114416,113995],{"class":129},[123,114418,114419,114422,114424,114427,114429],{"class":125,"line":12220},[123,114420,114421],{"class":129},"    control_cost ",[123,114423,134],{"class":133},[123,114425,114426],{"class":164}," 0.01",[123,114428,8951],{"class":133},[123,114430,114431],{"class":129}," np.sum(np.square(data.ctrl))\n",[123,114433,114434,114436,114438,114440,114442,114444,114446],{"class":125,"line":12225},[123,114435,6529],{"class":133},[123,114437,112186],{"class":164},[123,114439,1315],{"class":129},[123,114441,3135],{"class":133},[123,114443,113985],{"class":129},[123,114445,3135],{"class":133},[123,114447,114448],{"class":129}," control_cost)\n",[123,114450,114451],{"class":125,"line":12230},[123,114452,232],{"emptyLinePlaceholder":231},[123,114454,114455],{"class":125,"line":12235},[123,114456,232],{"emptyLinePlaceholder":231},[123,114458,114459,114461,114463,114465,114467],{"class":125,"line":12244},[123,114460,34359],{"class":133},[123,114462,4417],{"class":337},[123,114464,103791],{"class":129},[123,114466,98080],{"class":164},[123,114468,1344],{"class":129},[123,114470,114471,114473,114475,114477,114479],{"class":125,"line":12249},[123,114472,103800],{"class":129},[123,114474,134],{"class":133},[123,114476,103805],{"class":129},[123,114478,103707],{"class":164},[123,114480,288],{"class":129},[123,114482,114483,114485,114487],{"class":125,"line":12255},[123,114484,1349],{"class":129},[123,114486,134],{"class":133},[123,114488,103818],{"class":129},[123,114490,114491,114493,114495],{"class":125,"line":12276},[123,114492,112542],{"class":129},[123,114494,134],{"class":133},[123,114496,107151],{"class":164},[123,114498,114499],{"class":125,"line":12282},[123,114500,232],{"emptyLinePlaceholder":231},[123,114502,114503,114505,114507,114509,114511,114513,114515],{"class":125,"line":12296},[123,114504,5641],{"class":133},[123,114506,34028],{"class":129},[123,114508,1405],{"class":133},[123,114510,34855],{"class":164},[123,114512,1315],{"class":129},[123,114514,67475],{"class":164},[123,114516,33201],{"class":129},[123,114518,114519],{"class":125,"line":12302},[123,114520,114521],{"class":129},"        mujoco.mj_forward(model, data)\n",[123,114523,114524,114527,114529,114531,114533],{"class":125,"line":12329},[123,114525,114526],{"class":129},"        tip ",[123,114528,134],{"class":133},[123,114530,114332],{"class":129},[123,114532,113925],{"class":143},[123,114534,288],{"class":129},[123,114536,114537,114540,114542,114544,114546],{"class":125,"line":12338},[123,114538,114539],{"class":129},"        target ",[123,114541,134],{"class":133},[123,114543,114332],{"class":129},[123,114545,114348],{"class":143},[123,114547,288],{"class":129},[123,114549,114550,114553,114555,114558,114560],{"class":125,"line":12344},[123,114551,114552],{"class":129},"        error ",[123,114554,134],{"class":133},[123,114556,114557],{"class":129}," target ",[123,114559,3135],{"class":133},[123,114561,114562],{"class":129}," tip\n",[123,114564,114565],{"class":125,"line":12352},[123,114566,232],{"emptyLinePlaceholder":231},[123,114568,114569,114571,114573,114575,114577,114580,114582,114584,114587,114589,114591,114593,114595,114597,114599],{"class":125,"line":12357},[123,114570,109007],{"class":129},[123,114572,2799],{"class":164},[123,114574,1941],{"class":129},[123,114576,134],{"class":133},[123,114578,114579],{"class":129}," np.clip(",[123,114581,107650],{"class":164},[123,114583,8951],{"class":133},[123,114585,114586],{"class":129}," error[",[123,114588,2692],{"class":164},[123,114590,1048],{"class":129},[123,114592,3135],{"class":133},[123,114594,104794],{"class":164},[123,114596,251],{"class":129},[123,114598,104794],{"class":164},[123,114600,288],{"class":129},[123,114602,114603,114605,114607,114609,114611,114613,114615,114617,114619,114621,114623,114625,114627,114629,114631],{"class":125,"line":19032},[123,114604,109007],{"class":129},[123,114606,2825],{"class":164},[123,114608,1941],{"class":129},[123,114610,134],{"class":133},[123,114612,114579],{"class":129},[123,114614,107650],{"class":164},[123,114616,8951],{"class":133},[123,114618,114586],{"class":129},[123,114620,2799],{"class":164},[123,114622,1048],{"class":129},[123,114624,3135],{"class":133},[123,114626,104794],{"class":164},[123,114628,251],{"class":129},[123,114630,104794],{"class":164},[123,114632,288],{"class":129},[123,114634,114635],{"class":125,"line":19038},[123,114636,232],{"emptyLinePlaceholder":231},[123,114638,114639],{"class":125,"line":19061},[123,114640,103908],{"class":129},[123,114642,114643,114645,114647],{"class":125,"line":19067},[123,114644,112686],{"class":129},[123,114646,11909],{"class":133},[123,114648,114649],{"class":129}," reward(model, data)\n",[123,114651,114652],{"class":125,"line":19090},[123,114653,232],{"emptyLinePlaceholder":231},[123,114655,114656,114658,114660,114662,114664,114666,114668],{"class":125,"line":19104},[123,114657,4940],{"class":133},[123,114659,34028],{"class":129},[123,114661,2935],{"class":133},[123,114663,8187],{"class":164},[123,114665,103951],{"class":133},[123,114667,6532],{"class":164},[123,114669,1344],{"class":129},[123,114671,114672,114675,114677],{"class":125,"line":19124},[123,114673,114674],{"class":129},"            obs ",[123,114676,134],{"class":133},[123,114678,114679],{"class":129}," get_obs(model, data)\n",[123,114681,114682,114684,114686,114688],{"class":125,"line":19130},[123,114683,37060],{"class":164},[123,114685,1315],{"class":129},[123,114687,112720],{"class":143},[123,114689,114690],{"class":129},", step)\n",[123,114692,114693,114695,114697,114700,114703,114705],{"class":125,"line":19141},[123,114694,37060],{"class":164},[123,114696,1315],{"class":129},[123,114698,114699],{"class":143},"\"  tip:\"",[123,114701,114702],{"class":129},", np.round(tip, ",[123,114704,2686],{"class":164},[123,114706,32913],{"class":129},[123,114708,114709,114711,114713,114716,114719,114721],{"class":125,"line":19164},[123,114710,37060],{"class":164},[123,114712,1315],{"class":129},[123,114714,114715],{"class":143},"\"  target:\"",[123,114717,114718],{"class":129},", np.round(target, ",[123,114720,2686],{"class":164},[123,114722,32913],{"class":129},[123,114724,114725,114727,114729,114732,114735,114737],{"class":125,"line":19186},[123,114726,37060],{"class":164},[123,114728,1315],{"class":129},[123,114730,114731],{"class":143},"\"  ctrl:\"",[123,114733,114734],{"class":129},", np.round(data.ctrl.copy(), ",[123,114736,2686],{"class":164},[123,114738,32913],{"class":129},[123,114740,114741,114743,114745,114748,114751,114753],{"class":125,"line":19191},[123,114742,37060],{"class":164},[123,114744,1315],{"class":129},[123,114746,114747],{"class":143},"\"  obs_dim:\"",[123,114749,114750],{"class":129},", obs.shape[",[123,114752,2799],{"class":164},[123,114754,444],{"class":129},[123,114756,114757],{"class":125,"line":19197},[123,114758,232],{"emptyLinePlaceholder":231},[123,114760,114761,114763,114765,114767,114769,114771,114773,114775],{"class":125,"line":19211},[123,114762,33714],{"class":164},[123,114764,1315],{"class":129},[123,114766,112765],{"class":143},[123,114768,251],{"class":129},[123,114770,34430],{"class":164},[123,114772,112772],{"class":129},[123,114774,2686],{"class":164},[123,114776,32913],{"class":129},[123,114778,114779,114781,114783,114786,114789,114791,114793,114795],{"class":125,"line":19224},[123,114780,33714],{"class":164},[123,114782,1315],{"class":129},[123,114784,114785],{"class":143},"\"final tip:\"",[123,114787,114788],{"class":129},", np.round(site_position(model, data, ",[123,114790,113925],{"class":143},[123,114792,112734],{"class":129},[123,114794,2686],{"class":164},[123,114796,32913],{"class":129},[123,114798,114799,114801,114803,114806,114808,114810,114812,114814],{"class":125,"line":19229},[123,114800,33714],{"class":164},[123,114802,1315],{"class":129},[123,114804,114805],{"class":143},"\"target:\"",[123,114807,114788],{"class":129},[123,114809,114348],{"class":143},[123,114811,112734],{"class":129},[123,114813,2686],{"class":164},[123,114815,32913],{"class":129},[123,114817,114818],{"class":125,"line":19243},[123,114819,232],{"emptyLinePlaceholder":231},[123,114821,114822],{"class":125,"line":19248},[123,114823,232],{"emptyLinePlaceholder":231},[123,114825,114826,114828,114830,114832,114834],{"class":125,"line":19254},[123,114827,3998],{"class":133},[123,114829,33635],{"class":164},[123,114831,103951],{"class":133},[123,114833,103954],{"class":143},[123,114835,1344],{"class":129},[123,114837,114838],{"class":125,"line":19259},[123,114839,103961],{"class":129},[19,114841,105960],{},[113,114843,114845],{"className":328,"code":114844,"language":330,"meta":118,"style":118},"touch ch7_reacher.py\n",[120,114846,114847],{"__ignoreMap":118},[123,114848,114849,114851],{"class":125,"line":126},[123,114850,103676],{"class":337},[123,114852,114853],{"class":143}," ch7_reacher.py\n",[19,114855,112833],{},[113,114857,114859],{"className":328,"code":114858,"language":330,"meta":118,"style":118},"python ch7_reacher.py\n",[120,114860,114861],{"__ignoreMap":118},[123,114862,114863,114865],{"class":125,"line":126},[123,114864,117],{"class":337},[123,114866,114853],{"class":143},[2587,114868,103964],{"id":103964},[19,114870,114871],{},"读取 site 坐标：",[113,114873,114875],{"className":115,"code":114874,"language":117,"meta":118,"style":118},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[120,114876,114877],{"__ignoreMap":118},[123,114878,114879,114881,114883,114885,114887],{"class":125,"line":126},[123,114880,34359],{"class":133},[123,114882,114245],{"class":337},[123,114884,114248],{"class":129},[123,114886,3769],{"class":164},[123,114888,114253],{"class":129},[19,114890,114891],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114893,112849],{},[113,114895,114897],{"className":115,"code":114896,"language":117,"meta":118,"style":118},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[120,114898,114899],{"__ignoreMap":118},[123,114900,114901,114903],{"class":125,"line":126},[123,114902,19474],{"class":133},[123,114904,114357],{"class":129},[19,114906,114907],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114909,112174],{},[113,114911,114913],{"className":115,"code":114912,"language":117,"meta":118,"style":118},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[120,114914,114915,114927,114940],{"__ignoreMap":118},[123,114916,114917,114919,114921,114923,114925],{"class":125,"line":126},[123,114918,113985],{"class":129},[123,114920,134],{"class":133},[123,114922,113990],{"class":129},[123,114924,3135],{"class":133},[123,114926,113995],{"class":129},[123,114928,114929,114932,114934,114936,114938],{"class":125,"line":140},[123,114930,114931],{"class":129},"control_cost ",[123,114933,134],{"class":133},[123,114935,114426],{"class":164},[123,114937,8951],{"class":133},[123,114939,114431],{"class":129},[123,114941,114942,114944,114946,114948,114950,114952,114954],{"class":125,"line":156},[123,114943,19474],{"class":133},[123,114945,112186],{"class":164},[123,114947,1315],{"class":129},[123,114949,3135],{"class":133},[123,114951,113985],{"class":129},[123,114953,3135],{"class":133},[123,114955,114448],{"class":129},[19,114957,114958],{},"奖励由两部分组成：",[26,114960,114961,114966],{},[29,114962,114963,114965],{},[120,114964,114012],{},"：末端离目标越远，奖励越低。",[29,114967,114968,114971],{},[120,114969,114970],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114973,114974],{},"简单控制器：",[113,114976,114978],{"className":115,"code":114977,"language":117,"meta":118,"style":118},"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",[120,114979,114980,114993,115025],{"__ignoreMap":118},[123,114981,114982,114985,114987,114989,114991],{"class":125,"line":126},[123,114983,114984],{"class":129},"error ",[123,114986,134],{"class":133},[123,114988,114557],{"class":129},[123,114990,3135],{"class":133},[123,114992,114562],{"class":129},[123,114994,114995,114997,114999,115001,115003,115005,115007,115009,115011,115013,115015,115017,115019,115021,115023],{"class":125,"line":140},[123,114996,108261],{"class":129},[123,114998,2799],{"class":164},[123,115000,1941],{"class":129},[123,115002,134],{"class":133},[123,115004,114579],{"class":129},[123,115006,107650],{"class":164},[123,115008,8951],{"class":133},[123,115010,114586],{"class":129},[123,115012,2692],{"class":164},[123,115014,1048],{"class":129},[123,115016,3135],{"class":133},[123,115018,104794],{"class":164},[123,115020,251],{"class":129},[123,115022,104794],{"class":164},[123,115024,288],{"class":129},[123,115026,115027,115029,115031,115033,115035,115037,115039,115041,115043,115045,115047,115049,115051,115053,115055],{"class":125,"line":156},[123,115028,108261],{"class":129},[123,115030,2825],{"class":164},[123,115032,1941],{"class":129},[123,115034,134],{"class":133},[123,115036,114579],{"class":129},[123,115038,107650],{"class":164},[123,115040,8951],{"class":133},[123,115042,114586],{"class":129},[123,115044,2799],{"class":164},[123,115046,1048],{"class":129},[123,115048,3135],{"class":133},[123,115050,104794],{"class":164},[123,115052,251],{"class":129},[123,115054,104794],{"class":164},[123,115056,288],{"class":129},[19,115058,115059],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[2587,115061,104099],{"id":104099},[113,115063,115064],{"className":115,"code":114874,"language":117,"meta":118,"style":118},[120,115065,115066],{"__ignoreMap":118},[123,115067,115068,115070,115072,115074,115076],{"class":125,"line":126},[123,115069,34359],{"class":133},[123,115071,114245],{"class":337},[123,115073,114248],{"class":129},[123,115075,3769],{"class":164},[123,115077,114253],{"class":129},[19,115079,115080,115081,115083,115084,84936,115086,2494],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[120,115082,663],{}," 是 site 的名字，比如 ",[120,115085,113925],{},[120,115087,114348],{},[113,115089,115091],{"className":115,"code":115090,"language":117,"meta":118,"style":118},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[120,115092,115093],{"__ignoreMap":118},[123,115094,115095,115097,115099],{"class":125,"line":126},[123,115096,106024],{"class":129},[123,115098,134],{"class":133},[123,115100,114262],{"class":129},[19,115102,115103],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[113,115105,115107],{"className":115,"code":115106,"language":117,"meta":118,"style":118},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[120,115108,115109,115121],{"__ignoreMap":118},[123,115110,115111,115113,115115,115117,115119],{"class":125,"line":126},[123,115112,3998],{"class":133},[123,115114,105839],{"class":129},[123,115116,3509],{"class":133},[123,115118,6532],{"class":164},[123,115120,1344],{"class":129},[123,115122,115123,115125,115127,115129,115131,115133,115135,115137,115139,115141],{"class":125,"line":140},[123,115124,106285],{"class":133},[123,115126,105825],{"class":164},[123,115128,1315],{"class":129},[123,115130,2667],{"class":133},[123,115132,114287],{"class":143},[123,115134,3495],{"class":164},[123,115136,663],{"class":129},[123,115138,3545],{"class":164},[123,115140,2859],{"class":143},[123,115142,288],{"class":129},[19,115144,115145,115146,115149,115150,115152],{},"如果 site 没找到，就主动报错。",[120,115147,115148],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[120,115151,663],{}," 的值放进字符串里。",[113,115154,115156],{"className":115,"code":115155,"language":117,"meta":118,"style":118},"return data.site_xpos[site_id].copy()\n",[120,115157,115158],{"__ignoreMap":118},[123,115159,115160,115162],{"class":125,"line":126},[123,115161,19474],{"class":133},[123,115163,114304],{"class":129},[19,115165,115166,115167,115169,115170,115173],{},"返回这个 site 的世界坐标。",[120,115168,106070],{}," 里的每一行都是一个 site 的 ",[120,115171,115172],{},"(x, y, z)"," 坐标。",[113,115175,115177],{"className":115,"code":115176,"language":117,"meta":118,"style":118},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[120,115178,115179],{"__ignoreMap":118},[123,115180,115181,115183,115185],{"class":125,"line":126},[123,115182,34359],{"class":133},[123,115184,114319],{"class":337},[123,115186,114322],{"class":129},[19,115188,115189],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[113,115191,115193],{"className":115,"code":115192,"language":117,"meta":118,"style":118},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[120,115194,115195,115207],{"__ignoreMap":118},[123,115196,115197,115199,115201,115203,115205],{"class":125,"line":126},[123,115198,113957],{"class":129},[123,115200,134],{"class":133},[123,115202,114332],{"class":129},[123,115204,113925],{"class":143},[123,115206,288],{"class":129},[123,115208,115209,115211,115213,115215,115217],{"class":125,"line":140},[123,115210,113967],{"class":129},[123,115212,134],{"class":133},[123,115214,114332],{"class":129},[123,115216,114348],{"class":143},[123,115218,288],{"class":129},[19,115220,115221],{},"分别读取末端点和目标点的世界坐标。",[113,115223,115224],{"className":115,"code":114896,"language":117,"meta":118,"style":118},[120,115225,115226],{"__ignoreMap":118},[123,115227,115228,115230],{"class":125,"line":126},[123,115229,19474],{"class":133},[123,115231,114357],{"class":129},[19,115233,115234],{},"把四部分拼成一个观测数组：",[113,115236,115239],{"className":115237,"code":115238,"language":7621,"meta":118},[7619],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[120,115240,115238],{"__ignoreMap":118},[113,115242,115244],{"className":115,"code":115243,"language":117,"meta":118,"style":118},"dist = np.linalg.norm(tip - target)\n",[120,115245,115246],{"__ignoreMap":118},[123,115247,115248,115250,115252,115254,115256],{"class":125,"line":126},[123,115249,113985],{"class":129},[123,115251,134],{"class":133},[123,115253,113990],{"class":129},[123,115255,3135],{"class":133},[123,115257,113995],{"class":129},[19,115259,115260,115261,115264,115265,115268],{},"计算 tip 到 target 的距离。",[120,115262,115263],{},"tip - target"," 得到一个三维向量，",[120,115266,115267],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115270,17063],{},[113,115272,115275],{"className":115273,"code":115274,"language":7621,"meta":118},[7619],"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",[120,115276,115274],{"__ignoreMap":118},[113,115278,115280],{"className":115,"code":115279,"language":117,"meta":118,"style":118},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[120,115281,115282],{"__ignoreMap":118},[123,115283,115284,115286,115288,115290,115292],{"class":125,"line":126},[123,115285,114931],{"class":129},[123,115287,134],{"class":133},[123,115289,114426],{"class":164},[123,115291,8951],{"class":133},[123,115293,114431],{"class":129},[19,115295,115296,115297,115300,115301,115304],{},"计算动作惩罚。",[120,115298,115299],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[120,115302,115303],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[113,115306,115308],{"className":115,"code":115307,"language":117,"meta":118,"style":118},"return float(-dist - control_cost)\n",[120,115309,115310],{"__ignoreMap":118},[123,115311,115312,115314,115316,115318,115320,115322,115324],{"class":125,"line":126},[123,115313,19474],{"class":133},[123,115315,112186],{"class":164},[123,115317,1315],{"class":129},[123,115319,3135],{"class":133},[123,115321,113985],{"class":129},[123,115323,3135],{"class":133},[123,115325,114448],{"class":129},[19,115327,115328],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[113,115330,115331],{"className":115,"code":113192,"language":117,"meta":118,"style":118},[120,115332,115333],{"__ignoreMap":118},[123,115334,115335,115337,115339],{"class":125,"line":126},[123,115336,113199],{"class":129},[123,115338,134],{"class":133},[123,115340,107151],{"class":164},[19,115342,115343],{},"累计奖励变量，记录整个运行过程的总分。",[113,115345,115347],{"className":115,"code":115346,"language":117,"meta":118,"style":118},"for step in range(500):\n",[120,115348,115349],{"__ignoreMap":118},[123,115350,115351,115353,115355,115357,115359,115361,115363],{"class":125,"line":126},[123,115352,1399],{"class":133},[123,115354,34028],{"class":129},[123,115356,1405],{"class":133},[123,115358,34855],{"class":164},[123,115360,1315],{"class":129},[123,115362,67475],{"class":164},[123,115364,33201],{"class":129},[19,115366,115367],{},"运行 500 个控制步。",[113,115369,115370],{"className":115,"code":106933,"language":117,"meta":118,"style":118},[120,115371,115372],{"__ignoreMap":118},[123,115373,115374],{"class":125,"line":126},[123,115375,106933],{"class":129},[19,115377,115378,115379,103411,115381,115383],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[120,115380,105621],{},[120,115382,105624],{}," 是当前状态下的坐标。",[113,115385,115387],{"className":115,"code":115386,"language":117,"meta":118,"style":118},"error = target - tip\n",[120,115388,115389],{"__ignoreMap":118},[123,115390,115391,115393,115395,115397,115399],{"class":125,"line":126},[123,115392,114984],{"class":129},[123,115394,134],{"class":133},[123,115396,114557],{"class":129},[123,115398,3135],{"class":133},[123,115400,114562],{"class":129},[19,115402,115403],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[113,115405,115407],{"className":115,"code":115406,"language":117,"meta":118,"style":118},"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",[120,115408,115409,115441],{"__ignoreMap":118},[123,115410,115411,115413,115415,115417,115419,115421,115423,115425,115427,115429,115431,115433,115435,115437,115439],{"class":125,"line":126},[123,115412,108261],{"class":129},[123,115414,2799],{"class":164},[123,115416,1941],{"class":129},[123,115418,134],{"class":133},[123,115420,114579],{"class":129},[123,115422,107650],{"class":164},[123,115424,8951],{"class":133},[123,115426,114586],{"class":129},[123,115428,2692],{"class":164},[123,115430,1048],{"class":129},[123,115432,3135],{"class":133},[123,115434,104794],{"class":164},[123,115436,251],{"class":129},[123,115438,104794],{"class":164},[123,115440,288],{"class":129},[123,115442,115443,115445,115447,115449,115451,115453,115455,115457,115459,115461,115463,115465,115467,115469,115471],{"class":125,"line":140},[123,115444,108261],{"class":129},[123,115446,2825],{"class":164},[123,115448,1941],{"class":129},[123,115450,134],{"class":133},[123,115452,114579],{"class":129},[123,115454,107650],{"class":164},[123,115456,8951],{"class":133},[123,115458,114586],{"class":129},[123,115460,2799],{"class":164},[123,115462,1048],{"class":129},[123,115464,3135],{"class":133},[123,115466,104794],{"class":164},[123,115468,251],{"class":129},[123,115470,104794],{"class":164},[123,115472,288],{"class":129},[19,115474,115475,115476,115479],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[120,115477,115478],{},"error -> ctrl -> step"," 的流程。",[113,115481,115482],{"className":115,"code":106895,"language":117,"meta":118,"style":118},[120,115483,115484],{"__ignoreMap":118},[123,115485,115486],{"class":125,"line":126},[123,115487,106895],{"class":129},[19,115489,115490],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[113,115492,115494],{"className":115,"code":115493,"language":117,"meta":118,"style":118},"obs = get_obs(model, data)\n",[120,115495,115496],{"__ignoreMap":118},[123,115497,115498,115500,115502],{"class":125,"line":126},[123,115499,113243],{"class":129},[123,115501,134],{"class":133},[123,115503,114679],{"class":129},[19,115505,115506,115507,115510],{},"读取最新观测。后面打印 ",[120,115508,115509],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115512,104707],{"id":104706},[19,115514,115515],{},"观测维度为:",[113,115517,115520],{"className":115518,"code":115519,"language":7621,"meta":118},[7619],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[120,115521,115519],{"__ignoreMap":118},[19,115523,115524],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115526,115527],{},"程序每 100 步打印：",[113,115529,115532],{"className":115530,"code":115531,"language":7621,"meta":118},[7619],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[120,115533,115531],{"__ignoreMap":118},[19,115535,115536,115537,115539],{},"如果控制有效，你应该看到最终 ",[120,115538,105621],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115541,104739],{"id":104738},[26,115543,115544,115547,115550,115556,115562,115569,115579],{},[29,115545,115546],{},"修改目标点位置。",[29,115548,115549],{},"重新运行，观察最终 tip 是否变化。",[29,115551,115552,115553,115555],{},"把 gravity 改成 ",[120,115554,104980],{},"，观察控制是否变差。",[29,115557,113570,115558,113574,115560,2494],{},[120,115559,104549],{},[120,115561,2692],{},[29,115563,104802,115564,104805,115566,115568],{},[120,115565,112985],{},[120,115567,109697],{},"，观察机械臂是否更难移动。",[29,115570,104802,115571,84927,115573,104805,115575,115578],{},[120,115572,105624],{},[120,115574,106536],{},[120,115576,115577],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,115580,115581],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115583,104844],{"id":104843},[2587,115585,115587],{"id":115586},"site-not-found",[120,115588,115589],{},"site not found",[19,115591,115592,115593,103411,115596,2494],{},"检查 XML 中是否有 ",[120,115594,115595],{},"site name=\"tip\"",[120,115597,115598],{},"site name=\"target\"",[2587,115600,115601],{"id":115601},"机械臂完全不动",[19,115603,104914],{},[26,115605,115606,115611,115614,115619],{},[29,115607,115608,115610],{},[120,115609,104549],{}," 是否为 2",[29,115612,115613],{},"actuator 是否引用正确 joint",[29,115615,115616,115618],{},[120,115617,103469],{}," 是否被赋值",[29,115620,115621,115622],{},"是否执行了 ",[120,115623,103078],{},[2587,115625,115626],{"id":115626},"控制效果不好",[19,115628,115629],{},"正常。本章重点不是控制器最优，而是任务结构:",[113,115631,115634],{"className":115632,"code":115633,"language":7621,"meta":118},[7619],"obs → action → mj_step → reward → next_obs\n",[120,115635,115633],{"__ignoreMap":118},[2587,115637,115639],{"id":115638},"tip-坐标不变化","tip 坐标不变化",[19,115641,104966],{},[26,115643,115644,115649,115657,115666],{},[29,115645,115646,115647,2494],{},"是否每步调用了 ",[120,115648,103078],{},[29,115650,115651,115652,103411,115654,2494],{},"是否写入了 ",[120,115653,108516],{},[120,115655,115656],{},"data.ctrl[1]",[29,115658,115659,115660,2820,115663,2494],{},"actuator 是否正确引用 ",[120,115661,115662],{},"joint1",[120,115664,115665],{},"joint2",[29,115667,115668],{},"控制输入是否太小。",[2587,115670,115671],{"id":115671},"目标点不会动",[19,115673,115674],{},"本章的 target 是固定 site：",[113,115676,115678],{"className":55470,"code":115677,"language":55472,"meta":118,"style":118},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[120,115679,115680],{"__ignoreMap":118},[123,115681,115682,115684,115686,115688,115690,115692,115694,115696,115699],{"class":125,"line":126},[123,115683,3509],{"class":129},[123,115685,105600],{"class":53707},[123,115687,17350],{"class":337},[123,115689,134],{"class":129},[123,115691,114348],{"class":143},[123,115693,103499],{"class":337},[123,115695,134],{"class":129},[123,115697,115698],{"class":143},"\"0.5 0 0.4\"",[123,115700,115701],{"class":129}," ...\u002F>\n",[19,115703,115704,115705,115707],{},"它直接挂在 ",[120,115706,104232],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[2587,115709,115710],{"id":115710},"机械臂不像真实机械臂",[19,115712,115713],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115715,104998],{"id":104997},[19,115717,115718],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115720,115721],{},"核心公式：",[113,115723,115726],{"className":115724,"code":115725,"language":7621,"meta":118},[7619],"distance = ||tip - target||\nreward = -distance - action_cost\n",[120,115727,115725],{"__ignoreMap":118},[19,115729,115730],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2526,115732,115733],{},"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":118,"searchDepth":140,"depth":140,"links":115735},[115736,115737,115738,115743,115747,115748,115749,115757],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":115739},[115740,115741,115742],{"id":113940,"depth":156,"text":113941},{"id":114016,"depth":156,"text":114016},{"id":114046,"depth":156,"text":114047},{"id":103645,"depth":140,"text":103646,"children":115744},[115745,115746],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":115750},[115751,115752,115753,115754,115755,115756],{"id":115586,"depth":156,"text":115589},{"id":115601,"depth":156,"text":115601},{"id":115626,"depth":156,"text":115626},{"id":115638,"depth":156,"text":115639},{"id":115671,"depth":156,"text":115671},{"id":115710,"depth":156,"text":115710},{"id":104997,"depth":140,"text":104998},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113744,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115764,"title":115765,"body":115766,"description":118,"extension":2545,"meta":119228,"navigation":231,"path":119229,"seo":119230,"stem":119231,"__hash__":119232},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115767,"toc":119199},[115768,115771,115773,115776,115779,115804,115807,115813,115816,115822,115824,115826,115850,115852,115870,115872,115915,115917,115944,115946,115949,116001,116004,116010,116019,116022,116060,116063,116102,116105,116113,116120,116123,116129,116131,116185,116192,116237,116240,116244,116260,116270,116272,117533,117535,117547,117549,117560,117562,117565,117586,117589,117592,117625,117631,117634,117667,117670,117673,117714,117719,117733,117736,117749,117754,117777,117779,117794,117804,117819,117826,117846,117861,117879,117882,117899,117907,117923,117929,117961,117974,118006,118016,118051,118065,118111,118125,118167,118178,118191,118197,118230,118233,118260,118270,118310,118320,118337,118344,118362,118365,118406,118419,118434,118437,118460,118463,118475,118478,118497,118502,118523,118526,118541,118544,118578,118590,118605,118608,118633,118636,118655,118658,118690,118693,118717,118723,118753,118760,118773,118776,118778,118780,118786,118789,118792,118804,118807,118809,118863,118865,118869,118875,118884,118887,118894,118896,118919,118922,118926,118928,118946,118952,118954,118987,118990,118996,119000,119003,119023,119028,119032,119039,119059,119064,119068,119071,119091,119094,119180,119184,119187,119193,119196],[10,115769,115765],{"id":115770},"_8gymnasium-风格强化学习接口基础",[14,115772,103040],{"id":103039},[19,115774,115775],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115777,115778],{},"你将实现:",[113,115780,115782],{"className":115,"code":115781,"language":117,"meta":118,"style":118},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[120,115783,115784,115794],{"__ignoreMap":118},[123,115785,115786,115789,115791],{"class":125,"line":126},[123,115787,115788],{"class":129},"obs, info ",[123,115790,134],{"class":133},[123,115792,115793],{"class":129}," env.reset()\n",[123,115795,115796,115799,115801],{"class":125,"line":140},[123,115797,115798],{"class":129},"obs, reward, terminated, truncated, info ",[123,115800,134],{"class":133},[123,115802,115803],{"class":129}," env.step(action)\n",[19,115805,115806],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115808,115809,115810,115812],{},"前面章节的代码都是“脚本式”的：在 ",[120,115811,104686],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115814,115815],{},"可以先记住 Gymnasium 环境的核心交互：",[113,115817,115820],{"className":115818,"code":115819,"language":7621,"meta":118},[7619],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[120,115821,115819],{"__ignoreMap":118},[14,115823,103163],{"id":103162},[19,115825,103166],{},[113,115827,115828],{"className":328,"code":106778,"language":330,"meta":118,"style":118},[120,115829,115830],{"__ignoreMap":118},[123,115831,115832,115834,115836,115838,115840,115842,115844,115846,115848],{"class":125,"line":126},[123,115833,26999],{"class":337},[123,115835,28736],{"class":143},[123,115837,341],{"class":143},[123,115839,28821],{"class":164},[123,115841,106793],{"class":143},[123,115843,103191],{"class":143},[123,115845,104892],{"class":143},[123,115847,103207],{"class":143},[123,115849,106802],{"class":143},[19,115851,105209],{},[113,115853,115855],{"className":328,"code":115854,"language":330,"meta":118,"style":118},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[120,115856,115857],{"__ignoreMap":118},[123,115858,115859,115861,115863,115865,115867],{"class":125,"line":126},[123,115860,338],{"class":337},[123,115862,341],{"class":143},[123,115864,103323],{"class":143},[123,115866,110101],{"class":143},[123,115868,115869],{"class":143}," gymnasium\n",[19,115871,105226],{},[113,115873,115875],{"className":328,"code":115874,"language":330,"meta":118,"style":118},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[120,115876,115877,115894,115903],{"__ignoreMap":118},[123,115878,115879,115881,115883,115885,115888,115890,115892],{"class":125,"line":126},[123,115880,32750],{"class":337},[123,115882,31596],{"class":143},[123,115884,27537],{"class":164},[123,115886,115887],{"class":143}," mujoco-gym-api",[123,115889,103368],{"class":143},[123,115891,103371],{"class":164},[123,115893,103374],{"class":164},[123,115895,115896,115898,115900],{"class":125,"line":140},[123,115897,32750],{"class":337},[123,115899,103381],{"class":143},[123,115901,115902],{"class":143}," mujoco-gym-api\n",[123,115904,115905,115907,115909,115911,115913],{"class":125,"line":156},[123,115906,338],{"class":337},[123,115908,341],{"class":143},[123,115910,103323],{"class":143},[123,115912,110101],{"class":143},[123,115914,115869],{"class":143},[19,115916,103397],{},[26,115918,115919,115929,115932,115938],{},[29,115920,115921,115922,115925,115926,2494],{},"本章使用 ",[120,115923,115924],{},"gymnasium","，不是旧版 ",[120,115927,115928],{},"gym",[29,115930,115931],{},"Gymnasium API 与旧 Gym API 有差异。",[29,115933,115934,115935,2494],{},"旧 Gym 常见返回值是 4 个: ",[120,115936,115937],{},"obs, reward, done, info",[29,115939,115940,115941,2494],{},"Gymnasium 返回值是 5 个: ",[120,115942,115943],{},"obs, reward, terminated, truncated, info",[14,115945,103438],{"id":103437},[19,115947,115948],{},"强化学习环境接口包含:",[48,115950,115951,115960],{},[51,115952,115953],{},[54,115954,115955,115958],{},[57,115956,115957],{"align":26163},"方法",[57,115959,739],{"align":26163},[64,115961,115962,115972,115982,115992],{},[54,115963,115964,115969],{},[69,115965,115966],{"align":26163},[120,115967,115968],{},"reset()",[69,115970,115971],{"align":26163},"重置环境",[54,115973,115974,115979],{},[69,115975,115976],{"align":26163},[120,115977,115978],{},"step(action)",[69,115980,115981],{"align":26163},"执行动作",[54,115983,115984,115989],{},[69,115985,115986],{"align":26163},[120,115987,115988],{},"observation_space",[69,115990,115991],{"align":26163},"观测空间",[54,115993,115994,115999],{},[69,115995,115996],{"align":26163},[120,115997,115998],{},"action_space",[69,116000,26081],{"align":26163},[19,116002,116003],{},"一个最小环境需要完成:",[113,116005,116008],{"className":116006,"code":116007,"language":7621,"meta":118},[7619],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[120,116009,116007],{"__ignoreMap":118},[2587,116011,116013,103411,116016,107028],{"id":116012},"terminated-和-truncated-的区别",[120,116014,116015],{},"terminated",[120,116017,116018],{},"truncated",[19,116020,116021],{},"Gymnasium 把“结束”拆成两个概念：",[48,116023,116024,116034],{},[51,116025,116026],{},[54,116027,116028,116030,116032],{},[57,116029,106964],{"align":26163},[57,116031,103093],{"align":26163},[57,116033,23614],{"align":26163},[64,116035,116036,116048],{},[54,116037,116038,116042,116045],{},[69,116039,116040],{"align":26163},[120,116041,116015],{},[69,116043,116044],{"align":26163},"任务自然结束",[69,116046,116047],{"align":26163},"机械臂到达目标、机器人摔倒",[54,116049,116050,116054,116057],{},[69,116051,116052],{"align":26163},[120,116053,116018],{},[69,116055,116056],{"align":26163},"因外部限制截断",[69,116058,116059],{"align":26163},"达到最大步数、时间限制",[19,116061,116062],{},"本章中：",[113,116064,116066],{"className":115,"code":116065,"language":117,"meta":118,"style":118},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[120,116067,116068,116083],{"__ignoreMap":118},[123,116069,116070,116073,116075,116078,116080],{"class":125,"line":126},[123,116071,116072],{"class":129},"terminated ",[123,116074,134],{"class":133},[123,116076,116077],{"class":129}," dist ",[123,116079,3509],{"class":133},[123,116081,116082],{"class":164}," 0.05\n",[123,116084,116085,116088,116090,116092,116095,116097,116099],{"class":125,"line":140},[123,116086,116087],{"class":129},"truncated ",[123,116089,134],{"class":133},[123,116091,41282],{"class":164},[123,116093,116094],{"class":129},".steps ",[123,116096,4164],{"class":133},[123,116098,41282],{"class":164},[123,116100,116101],{"class":129},".max_steps\n",[19,116103,116104],{},"也就是：",[26,116106,116107,116110],{},[29,116108,116109],{},"末端距离目标小于 0.05，任务成功结束。",[29,116111,116112],{},"步数超过上限，episode 被截断。",[2587,116114,116116,103411,116118],{"id":116115},"observation_space-和-action_space",[120,116117,115988],{},[120,116119,115998],{},[19,116121,116122],{},"这两个对象告诉算法：",[113,116124,116127],{"className":116125,"code":116126,"language":7621,"meta":118},[7619],"观测长什么样\n动作允许多大\n",[120,116128,116126],{"__ignoreMap":118},[19,116130,17063],{},[113,116132,116134],{"className":115,"code":116133,"language":117,"meta":118,"style":118},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[120,116135,116136],{"__ignoreMap":118},[123,116137,116138,116140,116143,116145,116148,116151,116154,116156,116158,116161,116163,116165,116167,116169,116171,116173,116175,116178,116180,116182],{"class":125,"line":126},[123,116139,33238],{"class":164},[123,116141,116142],{"class":129},".action_space ",[123,116144,134],{"class":133},[123,116146,116147],{"class":129}," spaces.Box(",[123,116149,116150],{"class":279},"low",[123,116152,116153],{"class":133},"=-",[123,116155,104794],{"class":164},[123,116157,251],{"class":129},[123,116159,116160],{"class":279},"high",[123,116162,134],{"class":133},[123,116164,104794],{"class":164},[123,116166,251],{"class":129},[123,116168,98357],{"class":279},[123,116170,134],{"class":133},[123,116172,1315],{"class":129},[123,116174,2692],{"class":164},[123,116176,116177],{"class":129},",), ",[123,116179,95894],{"class":279},[123,116181,134],{"class":133},[123,116183,116184],{"class":129},"np.float32)\n",[19,116186,116187,116188,116191],{},"表示动作是 2 维数组，每个值都在 ",[120,116189,116190],{},"[-1, 1]"," 范围内。",[113,116193,116195],{"className":115,"code":116194,"language":117,"meta":118,"style":118},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[120,116196,116197],{"__ignoreMap":118},[123,116198,116199,116201,116204,116206,116208,116210,116212,116215,116217,116219,116221,116223,116225,116227,116229,116231,116233,116235],{"class":125,"line":126},[123,116200,33238],{"class":164},[123,116202,116203],{"class":129},".observation_space ",[123,116205,134],{"class":133},[123,116207,116147],{"class":129},[123,116209,116150],{"class":279},[123,116211,116153],{"class":133},[123,116213,116214],{"class":129},"np.inf, ",[123,116216,116160],{"class":279},[123,116218,134],{"class":133},[123,116220,116214],{"class":129},[123,116222,98357],{"class":279},[123,116224,134],{"class":133},[123,116226,1315],{"class":129},[123,116228,2193],{"class":164},[123,116230,116177],{"class":129},[123,116232,95894],{"class":279},[123,116234,134],{"class":133},[123,116236,116184],{"class":129},[19,116238,116239],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[2587,116241,116243],{"id":116242},"frame_skip-是什么","frame_skip 是什么",[113,116245,116247],{"className":115,"code":116246,"language":117,"meta":118,"style":118},"self.frame_skip = 5\n",[120,116248,116249],{"__ignoreMap":118},[123,116250,116251,116253,116256,116258],{"class":125,"line":126},[123,116252,33238],{"class":164},[123,116254,116255],{"class":129},".frame_skip ",[123,116257,134],{"class":133},[123,116259,56830],{"class":164},[19,116261,116262,116263,116266,116267,116269],{},"表示外部调用一次 ",[120,116264,116265],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[120,116268,103608],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116271,103646],{"id":103645},[113,116273,116275],{"className":115,"code":116274,"language":117,"meta":118,"style":118},"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",[120,116276,116277,116289,116295,116305,116316,116320,116324,116332,116337,116341,116345,116349,116353,116357,116361,116365,116370,116374,116378,116382,116387,116391,116395,116399,116403,116407,116411,116415,116419,116423,116427,116431,116435,116439,116457,116472,116476,116489,116499,116514,116531,116535,116556,116575,116600,116614,116618,116628,116640,116650,116654,116696,116734,116738,116748,116764,116779,116798,116805,116809,116822,116837,116852,116865,116884,116900,116904,116945,116960,116975,116979,117018,117029,117042,117046,117056,117065,117069,117079,117094,117112,117116,117127,117144,117157,117161,117171,117175,117186,117197,117201,117215,117229,117245,117249,117262,117279,117294,117301,117305,117309,117321,117331,117349,117361,117373,117377,117385,117401,117410,117419,117427,117469,117482,117487,117491,117509,117513,117517,117529],{"__ignoreMap":118},[123,116278,116279,116281,116284,116286],{"class":125,"line":126},[123,116280,223],{"class":133},[123,116282,116283],{"class":129}," gymnasium ",[123,116285,547],{"class":133},[123,116287,116288],{"class":129}," gym\n",[123,116290,116291,116293],{"class":125,"line":140},[123,116292,223],{"class":133},[123,116294,103694],{"class":129},[123,116296,116297,116299,116301,116303],{"class":125,"line":156},[123,116298,223],{"class":133},[123,116300,33795],{"class":129},[123,116302,547],{"class":133},[123,116304,33800],{"class":129},[123,116306,116307,116309,116311,116313],{"class":125,"line":168},[123,116308,391],{"class":133},[123,116310,116283],{"class":129},[123,116312,223],{"class":133},[123,116314,116315],{"class":129}," spaces\n",[123,116317,116318],{"class":125,"line":268},[123,116319,232],{"emptyLinePlaceholder":231},[123,116321,116322],{"class":125,"line":291},[123,116323,232],{"emptyLinePlaceholder":231},[123,116325,116326,116328,116330],{"class":125,"line":300},[123,116327,103707],{"class":164},[123,116329,15995],{"class":133},[123,116331,103712],{"class":143},[123,116333,116334],{"class":125,"line":305},[123,116335,116336],{"class":143},"\u003Cmujoco model=\"gym_reacher\">\n",[123,116338,116339],{"class":125,"line":316},[123,116340,114127],{"class":143},[123,116342,116343],{"class":125,"line":673},[123,116344,232],{"emptyLinePlaceholder":231},[123,116346,116347],{"class":125,"line":692},[123,116348,103731],{"class":143},[123,116350,116351],{"class":125,"line":713},[123,116352,114145],{"class":143},[123,116354,116355],{"class":125,"line":718},[123,116356,232],{"emptyLinePlaceholder":231},[123,116358,116359],{"class":125,"line":1138},[123,116360,114154],{"class":143},[123,116362,116363],{"class":125,"line":1429},[123,116364,114159],{"class":143},[123,116366,116367],{"class":125,"line":1439},[123,116368,116369],{"class":143},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[123,116371,116372],{"class":125,"line":1444},[123,116373,232],{"emptyLinePlaceholder":231},[123,116375,116376],{"class":125,"line":1453},[123,116377,114173],{"class":143},[123,116379,116380],{"class":125,"line":1458},[123,116381,114178],{"class":143},[123,116383,116384],{"class":125,"line":1476},[123,116385,116386],{"class":143},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[123,116388,116389],{"class":125,"line":1494},[123,116390,114188],{"class":143},[123,116392,116393],{"class":125,"line":1499},[123,116394,108828],{"class":143},[123,116396,116397],{"class":125,"line":1517},[123,116398,103760],{"class":143},[123,116400,116401],{"class":125,"line":1534},[123,116402,103765],{"class":143},[123,116404,116405],{"class":125,"line":1539},[123,116406,232],{"emptyLinePlaceholder":231},[123,116408,116409],{"class":125,"line":2080},[123,116410,108845],{"class":143},[123,116412,116413],{"class":125,"line":2097},[123,116414,114213],{"class":143},[123,116416,116417],{"class":125,"line":2114},[123,116418,114218],{"class":143},[123,116420,116421],{"class":125,"line":2125},[123,116422,108855],{"class":143},[123,116424,116425],{"class":125,"line":2130},[123,116426,103770],{"class":143},[123,116428,116429],{"class":125,"line":5033},[123,116430,98092],{"class":143},[123,116432,116433],{"class":125,"line":5041},[123,116434,232],{"emptyLinePlaceholder":231},[123,116436,116437],{"class":125,"line":5046},[123,116438,232],{"emptyLinePlaceholder":231},[123,116440,116441,116443,116446,116448,116450,116452,116455],{"class":125,"line":5052},[123,116442,17124],{"class":133},[123,116444,116445],{"class":337}," ReacherEnv",[123,116447,1315],{"class":129},[123,116449,115928],{"class":337},[123,116451,3161],{"class":129},[123,116453,116454],{"class":337},"Env",[123,116456,33201],{"class":129},[123,116458,116459,116462,116464,116466,116469],{"class":125,"line":5058},[123,116460,116461],{"class":129},"    metadata ",[123,116463,134],{"class":133},[123,116465,241],{"class":129},[123,116467,116468],{"class":143},"\"render_modes\"",[123,116470,116471],{"class":129},": []}\n",[123,116473,116474],{"class":125,"line":5063},[123,116475,232],{"emptyLinePlaceholder":231},[123,116477,116478,116480,116482,116485,116487],{"class":125,"line":10380},[123,116479,33216],{"class":133},[123,116481,33219],{"class":164},[123,116483,116484],{"class":129},"(self) -> ",[123,116486,98080],{"class":164},[123,116488,1344],{"class":129},[123,116490,116491,116493,116495,116497],{"class":125,"line":10404},[123,116492,33232],{"class":164},[123,116494,19689],{"class":129},[123,116496,33244],{"class":164},[123,116498,4420],{"class":129},[123,116500,116501,116503,116506,116508,116510,116512],{"class":125,"line":10409},[123,116502,33260],{"class":164},[123,116504,116505],{"class":129},".model ",[123,116507,134],{"class":133},[123,116509,103805],{"class":129},[123,116511,103707],{"class":164},[123,116513,288],{"class":129},[123,116515,116516,116518,116521,116523,116526,116528],{"class":125,"line":10415},[123,116517,33260],{"class":164},[123,116519,116520],{"class":129},".data ",[123,116522,134],{"class":133},[123,116524,116525],{"class":129}," mujoco.MjData(",[123,116527,33238],{"class":164},[123,116529,116530],{"class":129},".model)\n",[123,116532,116533],{"class":125,"line":10442},[123,116534,232],{"emptyLinePlaceholder":231},[123,116536,116537,116539,116542,116544,116547,116549,116552,116554],{"class":125,"line":10447},[123,116538,33260],{"class":164},[123,116540,116541],{"class":129},".tip_site_id ",[123,116543,134],{"class":133},[123,116545,116546],{"class":129}," mujoco.mj_name2id(",[123,116548,33238],{"class":164},[123,116550,116551],{"class":129},".model, mujoco.mjtObj.mjOBJ_SITE, ",[123,116553,113925],{"class":143},[123,116555,288],{"class":129},[123,116557,116558,116560,116563,116565,116567,116569,116571,116573],{"class":125,"line":10453},[123,116559,33260],{"class":164},[123,116561,116562],{"class":129},".target_site_id ",[123,116564,134],{"class":133},[123,116566,116546],{"class":129},[123,116568,33238],{"class":164},[123,116570,116551],{"class":129},[123,116572,114348],{"class":143},[123,116574,288],{"class":129},[123,116576,116577,116579,116581,116583,116585,116587,116590,116592,116594,116596,116598],{"class":125,"line":10465},[123,116578,4940],{"class":133},[123,116580,41282],{"class":164},[123,116582,116541],{"class":129},[123,116584,3509],{"class":133},[123,116586,6532],{"class":164},[123,116588,116589],{"class":133}," or",[123,116591,41282],{"class":164},[123,116593,116562],{"class":129},[123,116595,3509],{"class":133},[123,116597,6532],{"class":164},[123,116599,1344],{"class":129},[123,116601,116602,116605,116607,116609,116612],{"class":125,"line":10477},[123,116603,116604],{"class":133},"            raise",[123,116606,105825],{"class":164},[123,116608,1315],{"class":129},[123,116610,116611],{"class":143},"\"required sites not found\"",[123,116613,288],{"class":129},[123,116615,116616],{"class":125,"line":10489},[123,116617,232],{"emptyLinePlaceholder":231},[123,116619,116620,116622,116624,116626],{"class":125,"line":12148},[123,116621,33260],{"class":164},[123,116623,116255],{"class":129},[123,116625,134],{"class":133},[123,116627,56830],{"class":164},[123,116629,116630,116632,116635,116637],{"class":125,"line":12173},[123,116631,33260],{"class":164},[123,116633,116634],{"class":129},".max_steps ",[123,116636,134],{"class":133},[123,116638,116639],{"class":164}," 200\n",[123,116641,116642,116644,116646,116648],{"class":125,"line":12196},[123,116643,33260],{"class":164},[123,116645,116094],{"class":129},[123,116647,134],{"class":133},[123,116649,49740],{"class":164},[123,116651,116652],{"class":125,"line":12220},[123,116653,232],{"emptyLinePlaceholder":231},[123,116655,116656,116658,116660,116662,116664,116666,116668,116670,116672,116674,116676,116678,116680,116682,116684,116686,116688,116690,116692,116694],{"class":125,"line":12225},[123,116657,33260],{"class":164},[123,116659,116142],{"class":129},[123,116661,134],{"class":133},[123,116663,116147],{"class":129},[123,116665,116150],{"class":279},[123,116667,116153],{"class":133},[123,116669,104794],{"class":164},[123,116671,251],{"class":129},[123,116673,116160],{"class":279},[123,116675,134],{"class":133},[123,116677,104794],{"class":164},[123,116679,251],{"class":129},[123,116681,98357],{"class":279},[123,116683,134],{"class":133},[123,116685,1315],{"class":129},[123,116687,2692],{"class":164},[123,116689,116177],{"class":129},[123,116691,95894],{"class":279},[123,116693,134],{"class":133},[123,116695,116184],{"class":129},[123,116697,116698,116700,116702,116704,116706,116708,116710,116712,116714,116716,116718,116720,116722,116724,116726,116728,116730,116732],{"class":125,"line":12230},[123,116699,33260],{"class":164},[123,116701,116203],{"class":129},[123,116703,134],{"class":133},[123,116705,116147],{"class":129},[123,116707,116150],{"class":279},[123,116709,116153],{"class":133},[123,116711,116214],{"class":129},[123,116713,116160],{"class":279},[123,116715,134],{"class":133},[123,116717,116214],{"class":129},[123,116719,98357],{"class":279},[123,116721,134],{"class":133},[123,116723,1315],{"class":129},[123,116725,2193],{"class":164},[123,116727,116177],{"class":129},[123,116729,95894],{"class":279},[123,116731,134],{"class":133},[123,116733,116184],{"class":129},[123,116735,116736],{"class":125,"line":12235},[123,116737,232],{"emptyLinePlaceholder":231},[123,116739,116740,116742,116745],{"class":125,"line":12244},[123,116741,33216],{"class":133},[123,116743,116744],{"class":337}," _get_obs",[123,116746,116747],{"class":129},"(self) -> np.ndarray:\n",[123,116749,116750,116752,116754,116756,116759,116761],{"class":125,"line":12249},[123,116751,114526],{"class":129},[123,116753,134],{"class":133},[123,116755,41282],{"class":164},[123,116757,116758],{"class":129},".data.site_xpos[",[123,116760,33238],{"class":164},[123,116762,116763],{"class":129},".tip_site_id].copy()\n",[123,116765,116766,116768,116770,116772,116774,116776],{"class":125,"line":12255},[123,116767,114539],{"class":129},[123,116769,134],{"class":133},[123,116771,41282],{"class":164},[123,116773,116758],{"class":129},[123,116775,33238],{"class":164},[123,116777,116778],{"class":129},".target_site_id].copy()\n",[123,116780,116781,116783,116785,116788,116790,116793,116795],{"class":125,"line":12276},[123,116782,112571],{"class":129},[123,116784,134],{"class":133},[123,116786,116787],{"class":129}," np.concatenate([",[123,116789,33238],{"class":164},[123,116791,116792],{"class":129},".data.qpos.copy(), ",[123,116794,33238],{"class":164},[123,116796,116797],{"class":129},".data.qvel.copy(), tip, target])\n",[123,116799,116800,116802],{"class":125,"line":12282},[123,116801,17182],{"class":133},[123,116803,116804],{"class":129}," obs.astype(np.float32)\n",[123,116806,116807],{"class":125,"line":12296},[123,116808,232],{"emptyLinePlaceholder":231},[123,116810,116811,116813,116816,116818,116820],{"class":125,"line":12302},[123,116812,33216],{"class":133},[123,116814,116815],{"class":337}," _get_reward",[123,116817,116484],{"class":129},[123,116819,2656],{"class":164},[123,116821,1344],{"class":129},[123,116823,116824,116826,116828,116830,116832,116834],{"class":125,"line":12329},[123,116825,114526],{"class":129},[123,116827,134],{"class":133},[123,116829,41282],{"class":164},[123,116831,116758],{"class":129},[123,116833,33238],{"class":164},[123,116835,116836],{"class":129},".tip_site_id]\n",[123,116838,116839,116841,116843,116845,116847,116849],{"class":125,"line":12338},[123,116840,114539],{"class":129},[123,116842,134],{"class":133},[123,116844,41282],{"class":164},[123,116846,116758],{"class":129},[123,116848,33238],{"class":164},[123,116850,116851],{"class":129},".target_site_id]\n",[123,116853,116854,116857,116859,116861,116863],{"class":125,"line":12344},[123,116855,116856],{"class":129},"        dist ",[123,116858,134],{"class":133},[123,116860,113990],{"class":129},[123,116862,3135],{"class":133},[123,116864,113995],{"class":129},[123,116866,116867,116870,116872,116874,116876,116879,116881],{"class":125,"line":12352},[123,116868,116869],{"class":129},"        control_cost ",[123,116871,134],{"class":133},[123,116873,114426],{"class":164},[123,116875,8951],{"class":133},[123,116877,116878],{"class":129}," np.sum(np.square(",[123,116880,33238],{"class":164},[123,116882,116883],{"class":129},".data.ctrl))\n",[123,116885,116886,116888,116890,116892,116894,116896,116898],{"class":125,"line":12357},[123,116887,17182],{"class":133},[123,116889,112186],{"class":164},[123,116891,1315],{"class":129},[123,116893,3135],{"class":133},[123,116895,113985],{"class":129},[123,116897,3135],{"class":133},[123,116899,114448],{"class":129},[123,116901,116902],{"class":125,"line":19032},[123,116903,232],{"emptyLinePlaceholder":231},[123,116905,116906,116908,116911,116914,116916,116919,116921,116923,116925,116927,116929,116932,116935,116937,116939,116941,116943],{"class":125,"line":19038},[123,116907,33216],{"class":133},[123,116909,116910],{"class":337}," reset",[123,116912,116913],{"class":129},"(self, ",[123,116915,3060],{"class":133},[123,116917,116918],{"class":129},", seed: ",[123,116920,1742],{"class":164},[123,116922,27531],{"class":133},[123,116924,41341],{"class":164},[123,116926,15995],{"class":133},[123,116928,41341],{"class":164},[123,116930,116931],{"class":129},", options: ",[123,116933,116934],{"class":164},"dict",[123,116936,27531],{"class":133},[123,116938,41341],{"class":164},[123,116940,15995],{"class":133},[123,116942,41341],{"class":164},[123,116944,33201],{"class":129},[123,116946,116947,116949,116952,116955,116957],{"class":125,"line":19061},[123,116948,33232],{"class":164},[123,116950,116951],{"class":129},"().reset(",[123,116953,116954],{"class":279},"seed",[123,116956,134],{"class":133},[123,116958,116959],{"class":129},"seed)\n",[123,116961,116962,116965,116967,116970,116972],{"class":125,"line":19067},[123,116963,116964],{"class":129},"        mujoco.mj_resetData(",[123,116966,33238],{"class":164},[123,116968,116969],{"class":129},".model, ",[123,116971,33238],{"class":164},[123,116973,116974],{"class":129},".data)\n",[123,116976,116977],{"class":125,"line":19090},[123,116978,232],{"emptyLinePlaceholder":231},[123,116980,116981,116983,116986,116988,116990,116993,116995,116997,116999,117001,117003,117005,117007,117009,117011,117013,117015],{"class":125,"line":19104},[123,116982,33260],{"class":164},[123,116984,116985],{"class":129},".data.qpos[:] ",[123,116987,134],{"class":133},[123,116989,41282],{"class":164},[123,116991,116992],{"class":129},".np_random.uniform(",[123,116994,116150],{"class":279},[123,116996,116153],{"class":133},[123,116998,88606],{"class":164},[123,117000,251],{"class":129},[123,117002,116160],{"class":279},[123,117004,134],{"class":133},[123,117006,88606],{"class":164},[123,117008,251],{"class":129},[123,117010,33908],{"class":279},[123,117012,134],{"class":133},[123,117014,33238],{"class":164},[123,117016,117017],{"class":129},".model.nq)\n",[123,117019,117020,117022,117025,117027],{"class":125,"line":19124},[123,117021,33260],{"class":164},[123,117023,117024],{"class":129},".data.qvel[:] ",[123,117026,134],{"class":133},[123,117028,107151],{"class":164},[123,117030,117031,117034,117036,117038,117040],{"class":125,"line":19130},[123,117032,117033],{"class":129},"        mujoco.mj_forward(",[123,117035,33238],{"class":164},[123,117037,116969],{"class":129},[123,117039,33238],{"class":164},[123,117041,116974],{"class":129},[123,117043,117044],{"class":125,"line":19141},[123,117045,232],{"emptyLinePlaceholder":231},[123,117047,117048,117050,117052,117054],{"class":125,"line":19164},[123,117049,33260],{"class":164},[123,117051,116094],{"class":129},[123,117053,134],{"class":133},[123,117055,49740],{"class":164},[123,117057,117058,117060,117062],{"class":125,"line":19186},[123,117059,17182],{"class":133},[123,117061,41282],{"class":164},[123,117063,117064],{"class":129},"._get_obs(), {}\n",[123,117066,117067],{"class":125,"line":19191},[123,117068,232],{"emptyLinePlaceholder":231},[123,117070,117071,117073,117076],{"class":125,"line":19197},[123,117072,33216],{"class":133},[123,117074,117075],{"class":337}," step",[123,117077,117078],{"class":129},"(self, action):\n",[123,117080,117081,117083,117085,117088,117090,117092],{"class":125,"line":19211},[123,117082,112611],{"class":129},[123,117084,134],{"class":133},[123,117086,117087],{"class":129}," np.asarray(action, ",[123,117089,95894],{"class":279},[123,117091,134],{"class":133},[123,117093,116184],{"class":129},[123,117095,117096,117098,117100,117102,117104,117107,117109],{"class":125,"line":19224},[123,117097,112611],{"class":129},[123,117099,134],{"class":133},[123,117101,109837],{"class":129},[123,117103,33238],{"class":164},[123,117105,117106],{"class":129},".action_space.low, ",[123,117108,33238],{"class":164},[123,117110,117111],{"class":129},".action_space.high)\n",[123,117113,117114],{"class":125,"line":19229},[123,117115,232],{"emptyLinePlaceholder":231},[123,117117,117118,117120,117123,117125],{"class":125,"line":19243},[123,117119,33260],{"class":164},[123,117121,117122],{"class":129},".data.ctrl[:] ",[123,117124,134],{"class":133},[123,117126,109860],{"class":129},[123,117128,117129,117131,117133,117135,117137,117139,117141],{"class":125,"line":19248},[123,117130,5843],{"class":133},[123,117132,103893],{"class":129},[123,117134,1405],{"class":133},[123,117136,34855],{"class":164},[123,117138,1315],{"class":129},[123,117140,33238],{"class":164},[123,117142,117143],{"class":129},".frame_skip):\n",[123,117145,117146,117149,117151,117153,117155],{"class":125,"line":19254},[123,117147,117148],{"class":129},"            mujoco.mj_step(",[123,117150,33238],{"class":164},[123,117152,116969],{"class":129},[123,117154,33238],{"class":164},[123,117156,116974],{"class":129},[123,117158,117159],{"class":125,"line":19259},[123,117160,232],{"emptyLinePlaceholder":231},[123,117162,117163,117165,117167,117169],{"class":125,"line":19273},[123,117164,33260],{"class":164},[123,117166,116094],{"class":129},[123,117168,11909],{"class":133},[123,117170,58101],{"class":164},[123,117172,117173],{"class":125,"line":19278},[123,117174,232],{"emptyLinePlaceholder":231},[123,117176,117177,117179,117181,117183],{"class":125,"line":19283},[123,117178,112571],{"class":129},[123,117180,134],{"class":133},[123,117182,41282],{"class":164},[123,117184,117185],{"class":129},"._get_obs()\n",[123,117187,117188,117190,117192,117194],{"class":125,"line":19297},[123,117189,112676],{"class":129},[123,117191,134],{"class":133},[123,117193,41282],{"class":164},[123,117195,117196],{"class":129},"._get_reward()\n",[123,117198,117199],{"class":125,"line":19309},[123,117200,232],{"emptyLinePlaceholder":231},[123,117202,117203,117205,117207,117209,117211,117213],{"class":125,"line":19314},[123,117204,114526],{"class":129},[123,117206,134],{"class":133},[123,117208,41282],{"class":164},[123,117210,116758],{"class":129},[123,117212,33238],{"class":164},[123,117214,116836],{"class":129},[123,117216,117217,117219,117221,117223,117225,117227],{"class":125,"line":19327},[123,117218,114539],{"class":129},[123,117220,134],{"class":133},[123,117222,41282],{"class":164},[123,117224,116758],{"class":129},[123,117226,33238],{"class":164},[123,117228,116851],{"class":129},[123,117230,117231,117233,117235,117237,117240,117242],{"class":125,"line":19332},[123,117232,116856],{"class":129},[123,117234,134],{"class":133},[123,117236,112186],{"class":164},[123,117238,117239],{"class":129},"(np.linalg.norm(tip ",[123,117241,3135],{"class":133},[123,117243,117244],{"class":129}," target))\n",[123,117246,117247],{"class":125,"line":19337},[123,117248,232],{"emptyLinePlaceholder":231},[123,117250,117251,117254,117256,117258,117260],{"class":125,"line":19342},[123,117252,117253],{"class":129},"        terminated ",[123,117255,134],{"class":133},[123,117257,116077],{"class":129},[123,117259,3509],{"class":133},[123,117261,116082],{"class":164},[123,117263,117264,117267,117269,117271,117273,117275,117277],{"class":125,"line":19355},[123,117265,117266],{"class":129},"        truncated ",[123,117268,134],{"class":133},[123,117270,41282],{"class":164},[123,117272,116094],{"class":129},[123,117274,4164],{"class":133},[123,117276,41282],{"class":164},[123,117278,116101],{"class":129},[123,117280,117281,117284,117286,117288,117291],{"class":125,"line":19360},[123,117282,117283],{"class":129},"        info ",[123,117285,134],{"class":133},[123,117287,241],{"class":129},[123,117289,117290],{"class":143},"\"distance\"",[123,117292,117293],{"class":129},": dist}\n",[123,117295,117296,117298],{"class":125,"line":35045},[123,117297,17182],{"class":133},[123,117299,117300],{"class":129}," obs, reward, terminated, truncated, info\n",[123,117302,117303],{"class":125,"line":35051},[123,117304,232],{"emptyLinePlaceholder":231},[123,117306,117307],{"class":125,"line":35057},[123,117308,232],{"emptyLinePlaceholder":231},[123,117310,117311,117313,117315,117317,117319],{"class":125,"line":35063},[123,117312,34359],{"class":133},[123,117314,4417],{"class":337},[123,117316,103791],{"class":129},[123,117318,98080],{"class":164},[123,117320,1344],{"class":129},[123,117322,117323,117326,117328],{"class":125,"line":35069},[123,117324,117325],{"class":129},"    env ",[123,117327,134],{"class":133},[123,117329,117330],{"class":129}," ReacherEnv()\n",[123,117332,117333,117336,117338,117341,117343,117345,117347],{"class":125,"line":35080},[123,117334,117335],{"class":129},"    obs, info ",[123,117337,134],{"class":133},[123,117339,117340],{"class":129}," env.reset(",[123,117342,116954],{"class":279},[123,117344,134],{"class":133},[123,117346,2799],{"class":164},[123,117348,288],{"class":129},[123,117350,117351,117353,117355,117358],{"class":125,"line":35086},[123,117352,33714],{"class":164},[123,117354,1315],{"class":129},[123,117356,117357],{"class":143},"\"initial obs shape:\"",[123,117359,117360],{"class":129},", obs.shape)\n",[123,117362,117363,117365,117367,117370],{"class":125,"line":35106},[123,117364,33714],{"class":164},[123,117366,1315],{"class":129},[123,117368,117369],{"class":143},"\"initial info:\"",[123,117371,117372],{"class":129},", info)\n",[123,117374,117375],{"class":125,"line":35112},[123,117376,232],{"emptyLinePlaceholder":231},[123,117378,117379,117381,117383],{"class":125,"line":35123},[123,117380,112542],{"class":129},[123,117382,134],{"class":133},[123,117384,107151],{"class":164},[123,117386,117387,117389,117391,117393,117395,117397,117399],{"class":125,"line":35129},[123,117388,5641],{"class":133},[123,117390,34028],{"class":129},[123,117392,1405],{"class":133},[123,117394,34855],{"class":164},[123,117396,1315],{"class":129},[123,117398,3302],{"class":164},[123,117400,33201],{"class":129},[123,117402,117403,117405,117407],{"class":125,"line":35135},[123,117404,112611],{"class":129},[123,117406,134],{"class":133},[123,117408,117409],{"class":129}," env.action_space.sample()\n",[123,117411,117412,117415,117417],{"class":125,"line":35141},[123,117413,117414],{"class":129},"        obs, reward, terminated, truncated, info ",[123,117416,134],{"class":133},[123,117418,115803],{"class":129},[123,117420,117421,117423,117425],{"class":125,"line":35147},[123,117422,112686],{"class":129},[123,117424,11909],{"class":133},[123,117426,112691],{"class":129},[123,117428,117429,117431,117433,117435,117437,117440,117442,117444,117447,117449,117451,117454,117456,117458,117461,117463,117465,117467],{"class":125,"line":35153},[123,117430,34863],{"class":164},[123,117432,1315],{"class":129},[123,117434,112720],{"class":143},[123,117436,112723],{"class":129},[123,117438,117439],{"class":143},"\"reward:\"",[123,117441,251],{"class":129},[123,117443,34430],{"class":164},[123,117445,117446],{"class":129},"(reward, ",[123,117448,2686],{"class":164},[123,117450,112734],{"class":129},[123,117452,117453],{"class":143},"\"distance:\"",[123,117455,251],{"class":129},[123,117457,34430],{"class":164},[123,117459,117460],{"class":129},"(info[",[123,117462,117290],{"class":143},[123,117464,1048],{"class":129},[123,117466,2686],{"class":164},[123,117468,32913],{"class":129},[123,117470,117471,117473,117476,117479],{"class":125,"line":35159},[123,117472,4940],{"class":133},[123,117474,117475],{"class":129}," terminated ",[123,117477,117478],{"class":133},"or",[123,117480,117481],{"class":129}," truncated:\n",[123,117483,117484],{"class":125,"line":35165},[123,117485,117486],{"class":133},"            break\n",[123,117488,117489],{"class":125,"line":35185},[123,117490,232],{"emptyLinePlaceholder":231},[123,117492,117493,117495,117497,117499,117501,117503,117505,117507],{"class":125,"line":35191},[123,117494,33714],{"class":164},[123,117496,1315],{"class":129},[123,117498,112765],{"class":143},[123,117500,251],{"class":129},[123,117502,34430],{"class":164},[123,117504,112772],{"class":129},[123,117506,2686],{"class":164},[123,117508,32913],{"class":129},[123,117510,117511],{"class":125,"line":35207},[123,117512,232],{"emptyLinePlaceholder":231},[123,117514,117515],{"class":125,"line":35213},[123,117516,232],{"emptyLinePlaceholder":231},[123,117518,117519,117521,117523,117525,117527],{"class":125,"line":35227},[123,117520,3998],{"class":133},[123,117522,33635],{"class":164},[123,117524,103951],{"class":133},[123,117526,103954],{"class":143},[123,117528,1344],{"class":129},[123,117530,117531],{"class":125,"line":35233},[123,117532,103961],{"class":129},[19,117534,105960],{},[113,117536,117538],{"className":328,"code":117537,"language":330,"meta":118,"style":118},"touch ch8_gym_env.py\n",[120,117539,117540],{"__ignoreMap":118},[123,117541,117542,117544],{"class":125,"line":126},[123,117543,103676],{"class":337},[123,117545,117546],{"class":143}," ch8_gym_env.py\n",[19,117548,112833],{},[113,117550,117552],{"className":328,"code":117551,"language":330,"meta":118,"style":118},"python ch8_gym_env.py\n",[120,117553,117554],{"__ignoreMap":118},[123,117555,117556,117558],{"class":125,"line":126},[123,117557,117],{"class":337},[123,117559,117546],{"class":143},[2587,117561,103964],{"id":103964},[19,117563,117564],{},"继承 Gymnasium 环境：",[113,117566,117568],{"className":115,"code":117567,"language":117,"meta":118,"style":118},"class ReacherEnv(gym.Env):\n",[120,117569,117570],{"__ignoreMap":118},[123,117571,117572,117574,117576,117578,117580,117582,117584],{"class":125,"line":126},[123,117573,17124],{"class":133},[123,117575,116445],{"class":337},[123,117577,1315],{"class":129},[123,117579,115928],{"class":337},[123,117581,3161],{"class":129},[123,117583,116454],{"class":337},[123,117585,33201],{"class":129},[19,117587,117588],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117590,117591],{},"初始化模型：",[113,117593,117595],{"className":115,"code":117594,"language":117,"meta":118,"style":118},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[120,117596,117597,117611],{"__ignoreMap":118},[123,117598,117599,117601,117603,117605,117607,117609],{"class":125,"line":126},[123,117600,33238],{"class":164},[123,117602,116505],{"class":129},[123,117604,134],{"class":133},[123,117606,103805],{"class":129},[123,117608,103707],{"class":164},[123,117610,288],{"class":129},[123,117612,117613,117615,117617,117619,117621,117623],{"class":125,"line":140},[123,117614,33238],{"class":164},[123,117616,116520],{"class":129},[123,117618,134],{"class":133},[123,117620,116525],{"class":129},[123,117622,33238],{"class":164},[123,117624,116530],{"class":129},[19,117626,117627,117628,117630],{},"这和前面章节一样，只是现在放到了类的 ",[120,117629,33244],{}," 里。",[19,117632,117633],{},"缓存 site ID：",[113,117635,117637],{"className":115,"code":117636,"language":117,"meta":118,"style":118},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[120,117638,117639,117653],{"__ignoreMap":118},[123,117640,117641,117643,117645,117647,117649,117651],{"class":125,"line":126},[123,117642,33238],{"class":164},[123,117644,116541],{"class":129},[123,117646,134],{"class":133},[123,117648,116546],{"class":129},[123,117650,91949],{"class":164},[123,117652,288],{"class":129},[123,117654,117655,117657,117659,117661,117663,117665],{"class":125,"line":140},[123,117656,33238],{"class":164},[123,117658,116562],{"class":129},[123,117660,134],{"class":133},[123,117662,116546],{"class":129},[123,117664,91949],{"class":164},[123,117666,288],{"class":129},[19,117668,117669],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117671,117672],{},"reset：",[113,117674,117676],{"className":115,"code":117675,"language":117,"meta":118,"style":118},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[120,117677,117678],{"__ignoreMap":118},[123,117679,117680,117682,117684,117686,117688,117690,117692,117694,117696,117698,117700,117702,117704,117706,117708,117710,117712],{"class":125,"line":126},[123,117681,34359],{"class":133},[123,117683,116910],{"class":337},[123,117685,116913],{"class":129},[123,117687,3060],{"class":133},[123,117689,116918],{"class":129},[123,117691,1742],{"class":164},[123,117693,27531],{"class":133},[123,117695,41341],{"class":164},[123,117697,15995],{"class":133},[123,117699,41341],{"class":164},[123,117701,116931],{"class":129},[123,117703,116934],{"class":164},[123,117705,27531],{"class":133},[123,117707,41341],{"class":164},[123,117709,15995],{"class":133},[123,117711,41341],{"class":164},[123,117713,33201],{"class":129},[19,117715,117716,117718],{},[120,117717,72456],{}," 做四件事：",[26,117720,117721,117724,117727,117730],{},[29,117722,117723],{},"设置随机种子。",[29,117725,117726],{},"重置 MuJoCo data。",[29,117728,117729],{},"随机初始化关节角。",[29,117731,117732],{},"返回初始观测和 info。",[19,117734,117735],{},"step：",[113,117737,117739],{"className":115,"code":117738,"language":117,"meta":118,"style":118},"def step(self, action):\n",[120,117740,117741],{"__ignoreMap":118},[123,117742,117743,117745,117747],{"class":125,"line":126},[123,117744,34359],{"class":133},[123,117746,117075],{"class":337},[123,117748,117078],{"class":129},[19,117750,117751,117753],{},[120,117752,109524],{}," 做六件事：",[26,117755,117756,117759,117765,117768,117771,117774],{},[29,117757,117758],{},"检查并裁剪 action。",[29,117760,117761,117762,2494],{},"写入 ",[120,117763,117764],{},"self.data.ctrl",[29,117766,117767],{},"连续推进若干个 MuJoCo 物理步。",[29,117769,117770],{},"计算新观测。",[29,117772,117773],{},"计算奖励和结束条件。",[29,117775,117776],{},"返回 Gymnasium 标准五元组。",[2587,117778,104099],{"id":104099},[113,117780,117782],{"className":115,"code":117781,"language":117,"meta":118,"style":118},"import gymnasium as gym\n",[120,117783,117784],{"__ignoreMap":118},[123,117785,117786,117788,117790,117792],{"class":125,"line":126},[123,117787,223],{"class":133},[123,117789,116283],{"class":129},[123,117791,547],{"class":133},[123,117793,116288],{"class":129},[19,117795,117796,117797,117799,117800,117803],{},"导入 Gymnasium，并起别名 ",[120,117798,115928],{},"。后面写 ",[120,117801,117802],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[113,117805,117807],{"className":115,"code":117806,"language":117,"meta":118,"style":118},"from gymnasium import spaces\n",[120,117808,117809],{"__ignoreMap":118},[123,117810,117811,117813,117815,117817],{"class":125,"line":126},[123,117812,391],{"class":133},[123,117814,116283],{"class":129},[123,117816,223],{"class":133},[123,117818,116315],{"class":129},[19,117820,117821,117822,117825],{},"导入空间定义工具。",[120,117823,117824],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[113,117827,117828],{"className":115,"code":117567,"language":117,"meta":118,"style":118},[120,117829,117830],{"__ignoreMap":118},[123,117831,117832,117834,117836,117838,117840,117842,117844],{"class":125,"line":126},[123,117833,17124],{"class":133},[123,117835,116445],{"class":337},[123,117837,1315],{"class":129},[123,117839,115928],{"class":337},[123,117841,3161],{"class":129},[123,117843,116454],{"class":337},[123,117845,33201],{"class":129},[19,117847,117848,117849,117852,117853,117855,117856,103411,117858,117860],{},"定义一个类，名字叫 ",[120,117850,117851],{},"ReacherEnv","。括号里的 ",[120,117854,117802],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[120,117857,72456],{},[120,117859,109524],{}," 这两个核心方法。",[113,117862,117864],{"className":115,"code":117863,"language":117,"meta":118,"style":118},"metadata = {\"render_modes\": []}\n",[120,117865,117866],{"__ignoreMap":118},[123,117867,117868,117871,117873,117875,117877],{"class":125,"line":126},[123,117869,117870],{"class":129},"metadata ",[123,117872,134],{"class":133},[123,117874,241],{"class":129},[123,117876,116468],{"class":143},[123,117878,116471],{"class":129},[19,117880,117881],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[113,117883,117885],{"className":115,"code":117884,"language":117,"meta":118,"style":118},"def __init__(self) -> None:\n",[120,117886,117887],{"__ignoreMap":118},[123,117888,117889,117891,117893,117895,117897],{"class":125,"line":126},[123,117890,34359],{"class":133},[123,117892,33219],{"class":164},[123,117894,116484],{"class":129},[123,117896,98080],{"class":164},[123,117898,1344],{"class":129},[19,117900,117901,117903,117904,2494],{},[120,117902,33244],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[120,117905,117906],{},"env = ReacherEnv()",[113,117908,117910],{"className":115,"code":117909,"language":117,"meta":118,"style":118},"super().__init__()\n",[120,117911,117912],{"__ignoreMap":118},[123,117913,117914,117917,117919,117921],{"class":125,"line":126},[123,117915,117916],{"class":164},"super",[123,117918,19689],{"class":129},[123,117920,33244],{"class":164},[123,117922,4420],{"class":129},[19,117924,117925,117926,117928],{},"调用父类 ",[120,117927,117802],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[113,117930,117931],{"className":115,"code":117594,"language":117,"meta":118,"style":118},[120,117932,117933,117947],{"__ignoreMap":118},[123,117934,117935,117937,117939,117941,117943,117945],{"class":125,"line":126},[123,117936,33238],{"class":164},[123,117938,116505],{"class":129},[123,117940,134],{"class":133},[123,117942,103805],{"class":129},[123,117944,103707],{"class":164},[123,117946,288],{"class":129},[123,117948,117949,117951,117953,117955,117957,117959],{"class":125,"line":140},[123,117950,33238],{"class":164},[123,117952,116520],{"class":129},[123,117954,134],{"class":133},[123,117956,116525],{"class":129},[123,117958,33238],{"class":164},[123,117960,116530],{"class":129},[19,117962,117963,117964,117966,117967,103411,117970,117973],{},"把 MuJoCo 模型和状态保存到 ",[120,117965,33238],{}," 上。",[120,117968,117969],{},"self.model",[120,117971,117972],{},"self.data"," 表示这个环境对象自己的模型和状态。",[113,117975,117976],{"className":115,"code":117636,"language":117,"meta":118,"style":118},[120,117977,117978,117992],{"__ignoreMap":118},[123,117979,117980,117982,117984,117986,117988,117990],{"class":125,"line":126},[123,117981,33238],{"class":164},[123,117983,116541],{"class":129},[123,117985,134],{"class":133},[123,117987,116546],{"class":129},[123,117989,91949],{"class":164},[123,117991,288],{"class":129},[123,117993,117994,117996,117998,118000,118002,118004],{"class":125,"line":140},[123,117995,33238],{"class":164},[123,117997,116562],{"class":129},[123,117999,134],{"class":133},[123,118001,116546],{"class":129},[123,118003,91949],{"class":164},[123,118005,288],{"class":129},[19,118007,118008,118009,103411,118012,118015],{},"提前查好 tip 和 target 的 site ID。这样 ",[120,118010,118011],{},"_get_obs",[120,118013,118014],{},"_get_reward"," 里就不用每次按名字查找。",[113,118017,118019],{"className":115,"code":118018,"language":117,"meta":118,"style":118},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[120,118020,118021,118031,118041],{"__ignoreMap":118},[123,118022,118023,118025,118027,118029],{"class":125,"line":126},[123,118024,33238],{"class":164},[123,118026,116255],{"class":129},[123,118028,134],{"class":133},[123,118030,56830],{"class":164},[123,118032,118033,118035,118037,118039],{"class":125,"line":140},[123,118034,33238],{"class":164},[123,118036,116634],{"class":129},[123,118038,134],{"class":133},[123,118040,116639],{"class":164},[123,118042,118043,118045,118047,118049],{"class":125,"line":156},[123,118044,33238],{"class":164},[123,118046,116094],{"class":129},[123,118048,134],{"class":133},[123,118050,49740],{"class":164},[19,118052,118053,118056,118057,118060,118061,118064],{},[120,118054,118055],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[120,118058,118059],{},"max_steps"," 是一个 episode 最多运行多少步。",[120,118062,118063],{},"steps"," 记录当前 episode 已经走了多少步。",[113,118066,118067],{"className":115,"code":116133,"language":117,"meta":118,"style":118},[120,118068,118069],{"__ignoreMap":118},[123,118070,118071,118073,118075,118077,118079,118081,118083,118085,118087,118089,118091,118093,118095,118097,118099,118101,118103,118105,118107,118109],{"class":125,"line":126},[123,118072,33238],{"class":164},[123,118074,116142],{"class":129},[123,118076,134],{"class":133},[123,118078,116147],{"class":129},[123,118080,116150],{"class":279},[123,118082,116153],{"class":133},[123,118084,104794],{"class":164},[123,118086,251],{"class":129},[123,118088,116160],{"class":279},[123,118090,134],{"class":133},[123,118092,104794],{"class":164},[123,118094,251],{"class":129},[123,118096,98357],{"class":279},[123,118098,134],{"class":133},[123,118100,1315],{"class":129},[123,118102,2692],{"class":164},[123,118104,116177],{"class":129},[123,118106,95894],{"class":279},[123,118108,134],{"class":133},[123,118110,116184],{"class":129},[19,118112,118113,118114,118117,118118,103411,118121,118124],{},"定义动作空间。",[120,118115,118116],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[120,118119,118120],{},"low=-1.0",[120,118122,118123],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[113,118126,118127],{"className":115,"code":116194,"language":117,"meta":118,"style":118},[120,118128,118129],{"__ignoreMap":118},[123,118130,118131,118133,118135,118137,118139,118141,118143,118145,118147,118149,118151,118153,118155,118157,118159,118161,118163,118165],{"class":125,"line":126},[123,118132,33238],{"class":164},[123,118134,116203],{"class":129},[123,118136,134],{"class":133},[123,118138,116147],{"class":129},[123,118140,116150],{"class":279},[123,118142,116153],{"class":133},[123,118144,116214],{"class":129},[123,118146,116160],{"class":279},[123,118148,134],{"class":133},[123,118150,116214],{"class":129},[123,118152,98357],{"class":279},[123,118154,134],{"class":133},[123,118156,1315],{"class":129},[123,118158,2193],{"class":164},[123,118160,116177],{"class":129},[123,118162,95894],{"class":279},[123,118164,134],{"class":133},[123,118166,116184],{"class":129},[19,118168,118169,118170,118173,118174,118177],{},"定义观测空间。",[120,118171,118172],{},"shape=(10,)"," 表示观测是 10 个数。",[120,118175,118176],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[113,118179,118181],{"className":115,"code":118180,"language":117,"meta":118,"style":118},"def _get_obs(self) -> np.ndarray:\n",[120,118182,118183],{"__ignoreMap":118},[123,118184,118185,118187,118189],{"class":125,"line":126},[123,118186,34359],{"class":133},[123,118188,116744],{"class":337},[123,118190,116747],{"class":129},[19,118192,118193,118194,118196],{},"定义内部函数，用来生成观测。函数名前面的 ",[120,118195,3591],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[113,118198,118200],{"className":115,"code":118199,"language":117,"meta":118,"style":118},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[120,118201,118202,118216],{"__ignoreMap":118},[123,118203,118204,118206,118208,118210,118212,118214],{"class":125,"line":126},[123,118205,113957],{"class":129},[123,118207,134],{"class":133},[123,118209,41282],{"class":164},[123,118211,116758],{"class":129},[123,118213,33238],{"class":164},[123,118215,116763],{"class":129},[123,118217,118218,118220,118222,118224,118226,118228],{"class":125,"line":140},[123,118219,113967],{"class":129},[123,118221,134],{"class":133},[123,118223,41282],{"class":164},[123,118225,116758],{"class":129},[123,118227,33238],{"class":164},[123,118229,116778],{"class":129},[19,118231,118232],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[113,118234,118236],{"className":115,"code":118235,"language":117,"meta":118,"style":118},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[120,118237,118238,118254],{"__ignoreMap":118},[123,118239,118240,118242,118244,118246,118248,118250,118252],{"class":125,"line":126},[123,118241,113243],{"class":129},[123,118243,134],{"class":133},[123,118245,116787],{"class":129},[123,118247,33238],{"class":164},[123,118249,116792],{"class":129},[123,118251,33238],{"class":164},[123,118253,116797],{"class":129},[123,118255,118256,118258],{"class":125,"line":140},[123,118257,19474],{"class":133},[123,118259,116804],{"class":129},[19,118261,118262,118263,118266,118267,118269],{},"拼接观测，并转换成 ",[120,118264,118265],{},"float32","。很多强化学习库默认使用 ",[120,118268,118265],{},"，所以这里主动转换。",[113,118271,118272],{"className":115,"code":117675,"language":117,"meta":118,"style":118},[120,118273,118274],{"__ignoreMap":118},[123,118275,118276,118278,118280,118282,118284,118286,118288,118290,118292,118294,118296,118298,118300,118302,118304,118306,118308],{"class":125,"line":126},[123,118277,34359],{"class":133},[123,118279,116910],{"class":337},[123,118281,116913],{"class":129},[123,118283,3060],{"class":133},[123,118285,116918],{"class":129},[123,118287,1742],{"class":164},[123,118289,27531],{"class":133},[123,118291,41341],{"class":164},[123,118293,15995],{"class":133},[123,118295,41341],{"class":164},[123,118297,116931],{"class":129},[123,118299,116934],{"class":164},[123,118301,27531],{"class":133},[123,118303,41341],{"class":164},[123,118305,15995],{"class":133},[123,118307,41341],{"class":164},[123,118309,33201],{"class":129},[19,118311,118312,118313,118315,118316,118319],{},"定义 reset。",[120,118314,116954],{}," 用来控制随机数，保证实验可以复现。",[120,118317,118318],{},"options"," 用来接收额外配置，本章暂时不用。",[113,118321,118323],{"className":115,"code":118322,"language":117,"meta":118,"style":118},"super().reset(seed=seed)\n",[120,118324,118325],{"__ignoreMap":118},[123,118326,118327,118329,118331,118333,118335],{"class":125,"line":126},[123,118328,117916],{"class":164},[123,118330,116951],{"class":129},[123,118332,116954],{"class":279},[123,118334,134],{"class":133},[123,118336,116959],{"class":129},[19,118338,118339,118340,118343],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[120,118341,118342],{},"self.np_random"," 生成可复现的随机数。",[113,118345,118347],{"className":115,"code":118346,"language":117,"meta":118,"style":118},"mujoco.mj_resetData(self.model, self.data)\n",[120,118348,118349],{"__ignoreMap":118},[123,118350,118351,118354,118356,118358,118360],{"class":125,"line":126},[123,118352,118353],{"class":129},"mujoco.mj_resetData(",[123,118355,33238],{"class":164},[123,118357,116969],{"class":129},[123,118359,33238],{"class":164},[123,118361,116974],{"class":129},[19,118363,118364],{},"把 MuJoCo 状态重置到默认状态。",[113,118366,118368],{"className":115,"code":118367,"language":117,"meta":118,"style":118},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[120,118369,118370],{"__ignoreMap":118},[123,118371,118372,118374,118376,118378,118380,118382,118384,118386,118388,118390,118392,118394,118396,118398,118400,118402,118404],{"class":125,"line":126},[123,118373,33238],{"class":164},[123,118375,116985],{"class":129},[123,118377,134],{"class":133},[123,118379,41282],{"class":164},[123,118381,116992],{"class":129},[123,118383,116150],{"class":279},[123,118385,116153],{"class":133},[123,118387,88606],{"class":164},[123,118389,251],{"class":129},[123,118391,116160],{"class":279},[123,118393,134],{"class":133},[123,118395,88606],{"class":164},[123,118397,251],{"class":129},[123,118399,33908],{"class":279},[123,118401,134],{"class":133},[123,118403,33238],{"class":164},[123,118405,117017],{"class":129},[19,118407,117729,118408,118411,118412,118415,118416,118418],{},[120,118409,118410],{},"[:]"," 表示修改整个数组。",[120,118413,118414],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[120,118417,104541],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[113,118420,118422],{"className":115,"code":118421,"language":117,"meta":118,"style":118},"self.data.qvel[:] = 0.0\n",[120,118423,118424],{"__ignoreMap":118},[123,118425,118426,118428,118430,118432],{"class":125,"line":126},[123,118427,33238],{"class":164},[123,118429,117024],{"class":129},[123,118431,134],{"class":133},[123,118433,107151],{"class":164},[19,118435,118436],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[113,118438,118440],{"className":115,"code":118439,"language":117,"meta":118,"style":118},"self.steps = 0\nreturn self._get_obs(), {}\n",[120,118441,118442,118452],{"__ignoreMap":118},[123,118443,118444,118446,118448,118450],{"class":125,"line":126},[123,118445,33238],{"class":164},[123,118447,116094],{"class":129},[123,118449,134],{"class":133},[123,118451,49740],{"class":164},[123,118453,118454,118456,118458],{"class":125,"line":140},[123,118455,19474],{"class":133},[123,118457,41282],{"class":164},[123,118459,117064],{"class":129},[19,118461,118462],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[113,118464,118465],{"className":115,"code":117738,"language":117,"meta":118,"style":118},[120,118466,118467],{"__ignoreMap":118},[123,118468,118469,118471,118473],{"class":125,"line":126},[123,118470,34359],{"class":133},[123,118472,117075],{"class":337},[123,118474,117078],{"class":129},[19,118476,118477],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[113,118479,118481],{"className":115,"code":118480,"language":117,"meta":118,"style":118},"action = np.asarray(action, dtype=np.float32)\n",[120,118482,118483],{"__ignoreMap":118},[123,118484,118485,118487,118489,118491,118493,118495],{"class":125,"line":126},[123,118486,109832],{"class":129},[123,118488,134],{"class":133},[123,118490,117087],{"class":129},[123,118492,95894],{"class":279},[123,118494,134],{"class":133},[123,118496,116184],{"class":129},[19,118498,118499,118500,2494],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[120,118501,118265],{},[113,118503,118505],{"className":115,"code":118504,"language":117,"meta":118,"style":118},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[120,118506,118507],{"__ignoreMap":118},[123,118508,118509,118511,118513,118515,118517,118519,118521],{"class":125,"line":126},[123,118510,109832],{"class":129},[123,118512,134],{"class":133},[123,118514,109837],{"class":129},[123,118516,33238],{"class":164},[123,118518,117106],{"class":129},[123,118520,33238],{"class":164},[123,118522,117111],{"class":129},[19,118524,118525],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[113,118527,118529],{"className":115,"code":118528,"language":117,"meta":118,"style":118},"self.data.ctrl[:] = action\n",[120,118530,118531],{"__ignoreMap":118},[123,118532,118533,118535,118537,118539],{"class":125,"line":126},[123,118534,33238],{"class":164},[123,118536,117122],{"class":129},[123,118538,134],{"class":133},[123,118540,109860],{"class":129},[19,118542,118543],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[113,118545,118547],{"className":115,"code":118546,"language":117,"meta":118,"style":118},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[120,118548,118549,118565],{"__ignoreMap":118},[123,118550,118551,118553,118555,118557,118559,118561,118563],{"class":125,"line":126},[123,118552,1399],{"class":133},[123,118554,103893],{"class":129},[123,118556,1405],{"class":133},[123,118558,34855],{"class":164},[123,118560,1315],{"class":129},[123,118562,33238],{"class":164},[123,118564,117143],{"class":129},[123,118566,118567,118570,118572,118574,118576],{"class":125,"line":140},[123,118568,118569],{"class":129},"    mujoco.mj_step(",[123,118571,33238],{"class":164},[123,118573,116969],{"class":129},[123,118575,33238],{"class":164},[123,118577,116974],{"class":129},[19,118579,118580,118581,118584,118585,118587,118588,2494],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[120,118582,118583],{},"frame_skip=5","，所以外部调用一次 ",[120,118586,116265],{},"，内部实际执行 5 次 ",[120,118589,103608],{},[113,118591,118593],{"className":115,"code":118592,"language":117,"meta":118,"style":118},"self.steps += 1\n",[120,118594,118595],{"__ignoreMap":118},[123,118596,118597,118599,118601,118603],{"class":125,"line":126},[123,118598,33238],{"class":164},[123,118600,116094],{"class":129},[123,118602,11909],{"class":133},[123,118604,58101],{"class":164},[19,118606,118607],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[113,118609,118611],{"className":115,"code":118610,"language":117,"meta":118,"style":118},"obs = self._get_obs()\nreward = self._get_reward()\n",[120,118612,118613,118623],{"__ignoreMap":118},[123,118614,118615,118617,118619,118621],{"class":125,"line":126},[123,118616,113243],{"class":129},[123,118618,134],{"class":133},[123,118620,41282],{"class":164},[123,118622,117185],{"class":129},[123,118624,118625,118627,118629,118631],{"class":125,"line":140},[123,118626,113394],{"class":129},[123,118628,134],{"class":133},[123,118630,41282],{"class":164},[123,118632,117196],{"class":129},[19,118634,118635],{},"计算新的观测和奖励。",[113,118637,118639],{"className":115,"code":118638,"language":117,"meta":118,"style":118},"dist = float(np.linalg.norm(tip - target))\n",[120,118640,118641],{"__ignoreMap":118},[123,118642,118643,118645,118647,118649,118651,118653],{"class":125,"line":126},[123,118644,113985],{"class":129},[123,118646,134],{"class":133},[123,118648,112186],{"class":164},[123,118650,117239],{"class":129},[123,118652,3135],{"class":133},[123,118654,117244],{"class":129},[19,118656,118657],{},"计算末端到目标的距离，并转换成 Python float。",[113,118659,118660],{"className":115,"code":116065,"language":117,"meta":118,"style":118},[120,118661,118662,118674],{"__ignoreMap":118},[123,118663,118664,118666,118668,118670,118672],{"class":125,"line":126},[123,118665,116072],{"class":129},[123,118667,134],{"class":133},[123,118669,116077],{"class":129},[123,118671,3509],{"class":133},[123,118673,116082],{"class":164},[123,118675,118676,118678,118680,118682,118684,118686,118688],{"class":125,"line":140},[123,118677,116087],{"class":129},[123,118679,134],{"class":133},[123,118681,41282],{"class":164},[123,118683,116094],{"class":129},[123,118685,4164],{"class":133},[123,118687,41282],{"class":164},[123,118689,116101],{"class":129},[19,118691,118692],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[113,118694,118696],{"className":115,"code":118695,"language":117,"meta":118,"style":118},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[120,118697,118698,118711],{"__ignoreMap":118},[123,118699,118700,118703,118705,118707,118709],{"class":125,"line":126},[123,118701,118702],{"class":129},"info ",[123,118704,134],{"class":133},[123,118706,241],{"class":129},[123,118708,117290],{"class":143},[123,118710,117293],{"class":129},[123,118712,118713,118715],{"class":125,"line":140},[123,118714,19474],{"class":133},[123,118716,117300],{"class":129},[19,118718,118719,118722],{},[120,118720,118721],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[113,118724,118726],{"className":115,"code":118725,"language":117,"meta":118,"style":118},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[120,118727,118728,118737],{"__ignoreMap":118},[123,118729,118730,118733,118735],{"class":125,"line":126},[123,118731,118732],{"class":129},"env ",[123,118734,134],{"class":133},[123,118736,117330],{"class":129},[123,118738,118739,118741,118743,118745,118747,118749,118751],{"class":125,"line":140},[123,118740,115788],{"class":129},[123,118742,134],{"class":133},[123,118744,117340],{"class":129},[123,118746,116954],{"class":279},[123,118748,134],{"class":133},[123,118750,2799],{"class":164},[123,118752,288],{"class":129},[19,118754,118755,118756,118759],{},"创建环境并重置。",[120,118757,118758],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[113,118761,118763],{"className":115,"code":118762,"language":117,"meta":118,"style":118},"action = env.action_space.sample()\n",[120,118764,118765],{"__ignoreMap":118},[123,118766,118767,118769,118771],{"class":125,"line":126},[123,118768,109832],{"class":129},[123,118770,134],{"class":133},[123,118772,117409],{"class":129},[19,118774,118775],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118777,104707],{"id":104706},[19,118779,107874],{},[113,118781,118784],{"className":118782,"code":118783,"language":7621,"meta":118},[7619],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[120,118785,118783],{"__ignoreMap":118},[19,118787,118788],{},"这个环境已经具备强化学习环境的基本结构。",[19,118790,118791],{},"主函数里使用随机动作：",[113,118793,118794],{"className":115,"code":118762,"language":117,"meta":118,"style":118},[120,118795,118796],{"__ignoreMap":118},[123,118797,118798,118800,118802],{"class":125,"line":126},[123,118799,109832],{"class":129},[123,118801,134],{"class":133},[123,118803,117409],{"class":129},[19,118805,118806],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118808,104739],{"id":104738},[26,118810,118811,118814,118820,118829,118838,118847,118853],{},[29,118812,118813],{},"运行程序。",[29,118815,118816,118817,2494],{},"确认 ",[120,118818,118819],{},"obs.shape == (10,)",[29,118821,113570,118822,118825,118826,2494],{},[120,118823,118824],{},"env.action_space","，应类似 ",[120,118827,118828],{},"Box(-1.0, 1.0, (2,), float32)",[29,118830,107975,118831,118834,118835,2494],{},[120,118832,118833],{},"self.max_steps = 10","，确认环境会更快 ",[120,118836,118837],{},"truncated=True",[29,118839,104802,118840,104805,118843,118846],{},[120,118841,118842],{},"terminated = dist \u003C 0.05",[120,118844,118845],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,118848,104802,118849,118852],{},[120,118850,118851],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,118854,118855,118856,118858,118859,118862],{},"在 ",[120,118857,118721],{}," 里加入 ",[120,118860,118861],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118864,104844],{"id":104843},[2587,118866,118868],{"id":118867},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118870,118871,118872,118874],{},"Gymnasium 的 ",[120,118873,109524],{}," 返回 5 个值:",[113,118876,118878],{"className":115,"code":118877,"language":117,"meta":118,"style":118},"obs, reward, terminated, truncated, info\n",[120,118879,118880],{"__ignoreMap":118},[123,118881,118882],{"class":125,"line":126},[123,118883,118877],{"class":129},[19,118885,118886],{},"不是旧 Gym 的 4 个值。",[2587,118888,118890,118893],{"id":118889},"datactrl-action-维度错误",[120,118891,118892],{},"data.ctrl[:] = action"," 维度错误",[19,118895,104914],{},[113,118897,118899],{"className":115,"code":118898,"language":117,"meta":118,"style":118},"print(self.model.nu)\nprint(action.shape)\n",[120,118900,118901,118912],{"__ignoreMap":118},[123,118902,118903,118905,118907,118909],{"class":125,"line":126},[123,118904,294],{"class":164},[123,118906,1315],{"class":129},[123,118908,33238],{"class":164},[123,118910,118911],{"class":129},".model.nu)\n",[123,118913,118914,118916],{"class":125,"line":140},[123,118915,294],{"class":164},[123,118917,118918],{"class":129},"(action.shape)\n",[19,118920,118921],{},"两者必须匹配。",[2587,118923,118925],{"id":118924},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118927,104853],{},[113,118929,118931],{"className":115,"code":118930,"language":117,"meta":118,"style":118},"mujoco.mj_forward(self.model, self.data)\n",[120,118932,118933],{"__ignoreMap":118},[123,118934,118935,118938,118940,118942,118944],{"class":125,"line":126},[123,118936,118937],{"class":129},"mujoco.mj_forward(",[123,118939,33238],{"class":164},[123,118941,116969],{"class":129},[123,118943,33238],{"class":164},[123,118945,116974],{"class":129},[2587,118947,118949,118951],{"id":118948},"observation_space-维度和-obs-不一致",[120,118950,115988],{}," 维度和 obs 不一致",[19,118953,104966],{},[113,118955,118957],{"className":115,"code":118956,"language":117,"meta":118,"style":118},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[120,118958,118959,118969,118976],{"__ignoreMap":118},[123,118960,118961,118963,118965,118967],{"class":125,"line":126},[123,118962,113243],{"class":129},[123,118964,134],{"class":133},[123,118966,41282],{"class":164},[123,118968,117185],{"class":129},[123,118970,118971,118973],{"class":125,"line":140},[123,118972,294],{"class":164},[123,118974,118975],{"class":129},"(obs.shape)\n",[123,118977,118978,118980,118982,118984],{"class":125,"line":156},[123,118979,294],{"class":164},[123,118981,1315],{"class":129},[123,118983,33238],{"class":164},[123,118985,118986],{"class":129},".observation_space.shape)\n",[19,118988,118989],{},"两者必须一致。本章观测是：",[113,118991,118994],{"className":118992,"code":118993,"language":7621,"meta":118},[7619],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[120,118995,118993],{"__ignoreMap":118},[2587,118997,118999],{"id":118998},"action-超过范围","action 超过范围",[19,119001,119002],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[113,119004,119005],{"className":115,"code":118504,"language":117,"meta":118,"style":118},[120,119006,119007],{"__ignoreMap":118},[123,119008,119009,119011,119013,119015,119017,119019,119021],{"class":125,"line":126},[123,119010,109832],{"class":129},[123,119012,134],{"class":133},[123,119014,109837],{"class":129},[123,119016,33238],{"class":164},[123,119018,117106],{"class":129},[123,119020,33238],{"class":164},[123,119022,117111],{"class":129},[19,119024,119025,119026,2494],{},"这能避免无效动作直接写入 ",[120,119027,103469],{},[2587,119029,119031],{"id":119030},"忘记返回-info","忘记返回 info",[19,119033,118871,119034,103411,119036,119038],{},[120,119035,72456],{},[120,119037,109524],{}," 都会返回 info：",[113,119040,119041],{"className":115,"code":115781,"language":117,"meta":118,"style":118},[120,119042,119043,119051],{"__ignoreMap":118},[123,119044,119045,119047,119049],{"class":125,"line":126},[123,119046,115788],{"class":129},[123,119048,134],{"class":133},[123,119050,115793],{"class":129},[123,119052,119053,119055,119057],{"class":125,"line":140},[123,119054,115798],{"class":129},[123,119056,134],{"class":133},[123,119058,115803],{"class":129},[19,119060,119061,119062,2494],{},"即使暂时没有额外信息，也返回 ",[120,119063,34871],{},[14,119065,119067],{"id":119066},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,119069,119070],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,119072,119073,119076,119079,119082,119085,119088],{},[29,119074,119075],{},"更稳定的 reward。",[29,119077,119078],{},"合理的 episode 长度。",[29,119080,119081],{},"可重复的随机目标采样。",[29,119083,119084],{},"render 接口。",[29,119086,119087],{},"环境注册代码。",[29,119089,119090],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,119092,119093],{},"如果只是自己写训练循环，最小形式是：",[113,119095,119097],{"className":115,"code":119096,"language":117,"meta":118,"style":118},"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",[120,119098,119099,119107,119123,119127,119143,119152,119161,119171],{"__ignoreMap":118},[123,119100,119101,119103,119105],{"class":125,"line":126},[123,119102,118732],{"class":129},[123,119104,134],{"class":133},[123,119106,117330],{"class":129},[123,119108,119109,119111,119113,119115,119117,119119,119121],{"class":125,"line":140},[123,119110,115788],{"class":129},[123,119112,134],{"class":133},[123,119114,117340],{"class":129},[123,119116,116954],{"class":279},[123,119118,134],{"class":133},[123,119120,2799],{"class":164},[123,119122,288],{"class":129},[123,119124,119125],{"class":125,"line":156},[123,119126,232],{"emptyLinePlaceholder":231},[123,119128,119129,119131,119133,119135,119137,119139,119141],{"class":125,"line":168},[123,119130,1399],{"class":133},[123,119132,103893],{"class":129},[123,119134,1405],{"class":133},[123,119136,34855],{"class":164},[123,119138,1315],{"class":129},[123,119140,8843],{"class":164},[123,119142,33201],{"class":129},[123,119144,119145,119148,119150],{"class":125,"line":268},[123,119146,119147],{"class":129},"    action ",[123,119149,134],{"class":133},[123,119151,117409],{"class":129},[123,119153,119154,119157,119159],{"class":125,"line":291},[123,119155,119156],{"class":129},"    obs, reward, terminated, truncated, info ",[123,119158,134],{"class":133},[123,119160,115803],{"class":129},[123,119162,119163,119165,119167,119169],{"class":125,"line":300},[123,119164,1711],{"class":133},[123,119166,117475],{"class":129},[123,119168,117478],{"class":133},[123,119170,117481],{"class":129},[123,119172,119173,119176,119178],{"class":125,"line":305},[123,119174,119175],{"class":129},"        obs, info ",[123,119177,134],{"class":133},[123,119179,115793],{"class":129},[14,119181,119183],{"id":119182},"_9本章小结","9.本章小结",[19,119185,119186],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[113,119188,119191],{"className":119189,"code":119190,"language":7621,"meta":118},[7619],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[120,119192,119190],{"__ignoreMap":118},[19,119194,119195],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2526,119197,119198],{},"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":118,"searchDepth":140,"depth":140,"links":119200},[119201,119202,119203,119210,119214,119215,119216,119226,119227],{"id":103039,"depth":140,"text":103040},{"id":103162,"depth":140,"text":103163},{"id":103437,"depth":140,"text":103438,"children":119204},[119205,119207,119209],{"id":116012,"depth":156,"text":119206},"terminated 和 truncated 的区别",{"id":116115,"depth":156,"text":119208},"observation_space 和 action_space",{"id":116242,"depth":156,"text":116243},{"id":103645,"depth":140,"text":103646,"children":119211},[119212,119213],{"id":103964,"depth":156,"text":103964},{"id":104099,"depth":156,"text":104099},{"id":104706,"depth":140,"text":104707},{"id":104738,"depth":140,"text":104739},{"id":104843,"depth":140,"text":104844,"children":119217},[119218,119219,119221,119222,119224,119225],{"id":118867,"depth":156,"text":118868},{"id":118889,"depth":156,"text":119220},"data.ctrl[:] = action 维度错误",{"id":118924,"depth":156,"text":118925},{"id":118948,"depth":156,"text":119223},"observation_space 维度和 obs 不一致",{"id":118998,"depth":156,"text":118999},{"id":119030,"depth":156,"text":119031},{"id":119066,"depth":140,"text":119067},{"id":119182,"depth":140,"text":119183},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115765,"description":118},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119234,"title":119235,"body":119236,"description":119659,"extension":2545,"meta":119660,"navigation":231,"path":119661,"seo":119662,"stem":119663,"__hash__":119664},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119237,"toc":119649},[119238,119242,119245,119248,119268,119274,119280,119290,119293,119296,119316,119319,119323,119326,119332,119335,119349,119352,119355,119429,119432,119438,119441,119464,119467,119517,119520,119526,119529,119532,119535,119554,119557,119563,119566,119569,119572,119592,119595,119598,119601,119646],[10,119239,119241],{"id":119240},"mujoco-学习","MuJoCo 学习",[19,119243,119244],{},"初版",[19,119246,119247],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,119249,119250,119253,119256,119265],{},[29,119251,119252],{},"MuJoCo 模型文件在描述什么。",[29,119254,119255],{},"Python 代码怎样读取和推进仿真。",[29,119257,119258,2820,119260,2820,119262,119264],{},[120,119259,106420],{},[120,119261,106750],{},[120,119263,106753],{}," 这些数组为什么重要。",[29,119266,119267],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119269,119270,119271,119273],{},"默认环境为 Fedora 44、Python >= 3.10、",[120,119272,103420],{}," 官方 Python bindings。",[19,119275,119276,119277,119279],{},"注意：本文禁止使用 ",[120,119278,103405],{},"。所有示例均使用：",[113,119281,119282],{"className":115,"code":103970,"language":117,"meta":118,"style":118},[120,119283,119284],{"__ignoreMap":118},[123,119285,119286,119288],{"class":125,"line":126},[123,119287,223],{"class":133},[123,119289,103694],{"class":129},[14,119291,119292],{"id":119292},"适合谁阅读",[19,119294,119295],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,119297,119298,119301,119304,119307],{},[29,119299,119300],{},"没学过 MuJoCo，只会一点 Python。",[29,119302,119303],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,119305,119306],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,119308,119309,119310,119312,119313,119315],{},"以前接触过 ",[120,119311,103405],{},"，现在想迁移到官方 ",[120,119314,103414],{}," Python bindings。",[19,119317,119318],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119320,119322],{"id":119321},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119324,119325],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[113,119327,119330],{"className":119328,"code":119329,"language":7621,"meta":118},[7619],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[120,119331,119329],{"__ignoreMap":118},[19,119333,119334],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,119336,119337,119340,119343,119346],{},[29,119338,119339],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,119341,119342],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,119344,119345],{},"生成强化学习环境。",[29,119347,119348],{},"采集状态、动作、图像、奖励等训练数据。",[14,119350,119351],{"id":119351},"学习前的心智模型",[19,119353,119354],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[48,119356,119357,119369],{},[51,119358,119359],{},[54,119360,119361,119364,119367],{},[57,119362,119363],{"align":26163},"部分",[57,119365,119366],{"align":26163},"负责什么",[57,119368,23614],{"align":26163},[64,119370,119371,119382,119394,119406,119418],{},[54,119372,119373,119376,119379],{},[69,119374,119375],{"align":26163},"MJCF XML",[69,119377,119378],{"align":26163},"定义世界和机器人结构",[69,119380,119381],{"align":26163},"地面、盒子、关节、电机、摄像头",[54,119383,119384,119388,119391],{},[69,119385,119386],{"align":26163},[120,119387,103102],{},[69,119389,119390],{"align":26163},"编译后的静态模型",[69,119392,119393],{"align":26163},"有几个关节、有几个电机、时间步长是多少",[54,119395,119396,119400,119403],{},[69,119397,119398],{"align":26163},[120,119399,103112],{},[69,119401,119402],{"align":26163},"运行中的动态状态",[69,119404,119405],{"align":26163},"当前时间、位置、速度、电机输入",[54,119407,119408,119412,119415],{},[69,119409,119410],{"align":26163},[120,119411,103608],{},[69,119413,119414],{"align":26163},"推进一步物理仿真",[69,119416,119417],{"align":26163},"根据重力、力、碰撞更新状态",[54,119419,119420,119423,119426],{},[69,119421,119422],{"align":26163},"Viewer \u002F Renderer",[69,119424,119425],{"align":26163},"把仿真显示出来",[69,119427,119428],{"align":26163},"打开窗口或保存图片",[19,119430,119431],{},"一句话总结：",[113,119433,119436],{"className":119434,"code":119435,"language":7621,"meta":118},[7619],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[120,119437,119435],{"__ignoreMap":118},[19,119439,119440],{},"参考来源：",[3606,119442,119443,119450,119457],{},[29,119444,119445,119446],{},"MuJoCo Python 官方文档：",[2846,119447,119448],{"href":119448,"rel":119449},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26287],[29,119451,119452,119453],{},"MuJoCo XML Reference：",[2846,119454,119455],{"href":119455,"rel":119456},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26287],[29,119458,119459,119460],{},"MuJoCo Overview：",[2846,119461,119462],{"href":119462,"rel":119463},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26287],[14,119465,119466],{"id":119466},"章节目录",[26,119468,119469,119475,119481,119487,119493,119499,119505,119511],{},[29,119470,119471],{},[2846,119472,119474],{"href":119473},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,119476,119477],{},[2846,119478,119480],{"href":119479},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,119482,119483],{},[2846,119484,119486],{"href":119485},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,119488,119489],{},[2846,119490,119492],{"href":119491},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,119494,119495],{},[2846,119496,119498],{"href":119497},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,119500,119501],{},[2846,119502,119504],{"href":119503},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,119506,119507],{},[2846,119508,119510],{"href":119509},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,119512,119513],{},[2846,119514,119516],{"href":119515},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119518,119519],{"id":119519},"推荐学习路线",[113,119521,119524],{"className":119522,"code":119523,"language":7621,"meta":118},[7619],"环境安装\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",[120,119525,119523],{"__ignoreMap":118},[19,119527,119528],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119530,119531],{"id":119531},"建议的目录结构",[19,119533,119534],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[113,119536,119538],{"className":328,"code":119537,"language":330,"meta":118,"style":118},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[120,119539,119540,119548],{"__ignoreMap":118},[123,119541,119542,119544,119546],{"class":125,"line":126},[123,119543,103659],{"class":337},[123,119545,31636],{"class":164},[123,119547,103664],{"class":143},[123,119549,119550,119552],{"class":125,"line":140},[123,119551,103669],{"class":164},[123,119553,103664],{"class":143},[19,119555,119556],{},"每一章的代码都单独保存：",[113,119558,119561],{"className":119559,"code":119560,"language":7621,"meta":118},[7619],"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",[120,119562,119560],{"__ignoreMap":118},[19,119564,119565],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119567,119568],{"id":119568},"学习方法",[19,119570,119571],{},"每章建议按这个顺序操作：",[26,119573,119574,119577,119580,119583,119586,119589],{},[29,119575,119576],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,119578,119579],{},"复制最小可运行代码，保存成指定文件。",[29,119581,119582],{},"运行代码，确认没有报错。",[29,119584,119585],{},"对照“运行结果说明”理解输出。",[29,119587,119588],{},"做“验证步骤”，主动改一两个参数。",[29,119590,119591],{},"遇到报错先看“常见错误与解决方案”。",[19,119593,119594],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119596,119597],{"id":119597},"全局排错顺序",[19,119599,119600],{},"遇到问题时，按下面顺序查：",[26,119602,119603,119609,119615,119620,119623,119626,119633,119643],{},[29,119604,119605,119606],{},"Python 环境是否激活：",[120,119607,119608],{},"which python",[29,119610,119611,119612],{},"MuJoCo 是否能导入：",[120,119613,119614],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,119616,119617,119618],{},"是否误装了 ",[120,119619,103405],{},[29,119621,119622],{},"XML 标签是否闭合、属性是否拼写正确",[29,119624,119625],{},"actuator 引用的 joint 名字是否存在",[29,119627,119628,119630,119631],{},[120,119629,103469],{}," 的长度是否等于 ",[120,119632,104549],{},[29,119634,107975,119635,84936,119637,119639,119640],{},[120,119636,106420],{},[120,119638,106750],{}," 后是否调用了 ",[120,119641,119642],{},"mujoco.mj_forward",[29,119644,119645],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2526,119647,119648],{},"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":118,"searchDepth":140,"depth":140,"links":119650},[119651,119652,119653,119654,119655,119656,119657,119658],{"id":119292,"depth":140,"text":119292},{"id":119321,"depth":140,"text":119322},{"id":119351,"depth":140,"text":119351},{"id":119466,"depth":140,"text":119466},{"id":119519,"depth":140,"text":119519},{"id":119531,"depth":140,"text":119531},{"id":119568,"depth":140,"text":119568},{"id":119597,"depth":140,"text":119597},"仿真搭建。",{"category":25805},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119235,"description":119659},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119666,"title":119667,"body":119668,"description":2544,"extension":2545,"meta":120123,"navigation":231,"path":120124,"seo":120125,"stem":120126,"__hash__":120127},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119669,"toc":120121},[119670,119673,119676,119682,120118],[10,119671,119667],{"id":119672},"_1-最常用的基本操作更新",[19,119674,119675],{},"装linux系统教程：",[19,119677,119678],{},[2846,119679,119680],{"href":119680,"rel":119681},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26287],[113,119683,119687],{"className":119684,"code":119685,"language":119686,"meta":118,"style":118},"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",[120,119688,119689,119694,119699,119708,119713,119722,119727,119747,119752,119763,119768,119777,119782,119810,119815,119834,119839,119858,119862,119867,119883,119887,119892,119922,119926,119931,119947,119951,119956,119971,119975,119980,119996,120000,120005,120017,120029,120033,120038,120055,120059,120064,120082,120086,120091,120100,120104,120109],{"__ignoreMap":118},[123,119690,119691],{"class":125,"line":126},[123,119692,119693],{"class":2673},"#更新相关的知识\n",[123,119695,119696],{"class":125,"line":140},[123,119697,119698],{"class":2673},"# 更新软件包列表（从服务器获取最新软件信息）\n",[123,119700,119701,119703,119706],{"class":125,"line":156},[123,119702,26999],{"class":337},[123,119704,119705],{"class":143}," apt",[123,119707,28663],{"class":143},[123,119709,119710],{"class":125,"line":168},[123,119711,119712],{"class":2673},"# 升级所有可更新的软件包（不删除旧包）\n",[123,119714,119715,119717,119719],{"class":125,"line":268},[123,119716,26999],{"class":337},[123,119718,119705],{"class":143},[123,119720,119721],{"class":143}," upgrade\n",[123,119723,119724],{"class":125,"line":291},[123,119725,119726],{"class":2673},"#更新和升级软件包\n",[123,119728,119729,119731,119733,119736,119738,119740,119742,119745],{"class":125,"line":300},[123,119730,26999],{"class":337},[123,119732,119705],{"class":143},[123,119734,119735],{"class":143}," update",[123,119737,28611],{"class":129},[123,119739,26999],{"class":337},[123,119741,119705],{"class":143},[123,119743,119744],{"class":143}," upgrade",[123,119746,103374],{"class":164},[123,119748,119749],{"class":125,"line":305},[123,119750,119751],{"class":2673},"#列出可更新的软件包及版本信息\n",[123,119753,119754,119757,119760],{"class":125,"line":316},[123,119755,119756],{"class":337},"apt",[123,119758,119759],{"class":143}," list",[123,119761,119762],{"class":164}," --upgradable\n",[123,119764,119765],{"class":125,"line":673},[123,119766,119767],{"class":2673},"#彻底升级（处理依赖关系，可能删除旧包）\n",[123,119769,119770,119772,119774],{"class":125,"line":692},[123,119771,26999],{"class":337},[123,119773,119705],{"class":143},[123,119775,119776],{"class":143}," full-upgrade\n",[123,119778,119779],{"class":125,"line":713},[123,119780,119781],{"class":2673},"#设置指定版本\n",[123,119783,119784,119786,119788,119790,119792,119795,119797,119799,119801,119803,119806,119808],{"class":125,"line":718},[123,119785,26999],{"class":337},[123,119787,119705],{"class":143},[123,119789,341],{"class":143},[123,119791,31322],{"class":133},[123,119793,119794],{"class":143},"package_nam",[123,119796,2689],{"class":129},[123,119798,3559],{"class":133},[123,119800,134],{"class":143},[123,119802,3509],{"class":133},[123,119804,119805],{"class":143},"version_numbe",[123,119807,3272],{"class":129},[123,119809,53714],{"class":133},[123,119811,119812],{"class":125,"line":1138},[123,119813,119814],{"class":2673},"#只安装软件包不升级\n",[123,119816,119817,119819,119821,119823,119825,119827,119829,119831],{"class":125,"line":1429},[123,119818,26999],{"class":337},[123,119820,119705],{"class":143},[123,119822,341],{"class":143},[123,119824,31322],{"class":133},[123,119826,119794],{"class":143},[123,119828,2689],{"class":129},[123,119830,3559],{"class":133},[123,119832,119833],{"class":164}," --no-upgrade\n",[123,119835,119836],{"class":125,"line":1439},[123,119837,119838],{"class":2673},"#只升级，不存在就不安装\n",[123,119840,119841,119843,119845,119847,119849,119851,119853,119855],{"class":125,"line":1444},[123,119842,26999],{"class":337},[123,119844,119705],{"class":143},[123,119846,341],{"class":143},[123,119848,31322],{"class":133},[123,119850,119794],{"class":143},[123,119852,2689],{"class":129},[123,119854,3559],{"class":133},[123,119856,119857],{"class":164}," --only-upgrade\n",[123,119859,119860],{"class":125,"line":1453},[123,119861,232],{"emptyLinePlaceholder":231},[123,119863,119864],{"class":125,"line":1458},[123,119865,119866],{"class":2673},"#安装指定的软件命令\n",[123,119868,119869,119871,119873,119875,119877,119879,119881],{"class":125,"line":1476},[123,119870,26999],{"class":337},[123,119872,119705],{"class":143},[123,119874,341],{"class":143},[123,119876,31322],{"class":133},[123,119878,119794],{"class":143},[123,119880,2689],{"class":129},[123,119882,53714],{"class":133},[123,119884,119885],{"class":125,"line":1494},[123,119886,232],{"emptyLinePlaceholder":231},[123,119888,119889],{"class":125,"line":1499},[123,119890,119891],{"class":2673},"#安装多个软件包\n",[123,119893,119894,119896,119898,119900,119902,119905,119908,119910,119912,119915,119917,119919],{"class":125,"line":1517},[123,119895,26999],{"class":337},[123,119897,119705],{"class":143},[123,119899,341],{"class":143},[123,119901,31322],{"class":133},[123,119903,119904],{"class":143},"package_",[123,119906,119907],{"class":133},"1>",[123,119909,31322],{"class":133},[123,119911,119904],{"class":143},[123,119913,119914],{"class":133},"2>",[123,119916,31322],{"class":133},[123,119918,119904],{"class":143},[123,119920,119921],{"class":133},"3>\n",[123,119923,119924],{"class":125,"line":1534},[123,119925,232],{"emptyLinePlaceholder":231},[123,119927,119928],{"class":125,"line":1539},[123,119929,119930],{"class":2673},"#更新指定的软件命令\n",[123,119932,119933,119935,119937,119939,119941,119943,119945],{"class":125,"line":2080},[123,119934,26999],{"class":337},[123,119936,119705],{"class":143},[123,119938,119735],{"class":143},[123,119940,31322],{"class":133},[123,119942,119794],{"class":143},[123,119944,2689],{"class":129},[123,119946,53714],{"class":133},[123,119948,119949],{"class":125,"line":2097},[123,119950,232],{"emptyLinePlaceholder":231},[123,119952,119953],{"class":125,"line":2114},[123,119954,119955],{"class":2673},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[123,119957,119958,119960,119963,119965,119967,119969],{"class":125,"line":2125},[123,119959,119756],{"class":337},[123,119961,119962],{"class":143}," show",[123,119964,31322],{"class":133},[123,119966,119794],{"class":143},[123,119968,2689],{"class":129},[123,119970,53714],{"class":133},[123,119972,119973],{"class":125,"line":2130},[123,119974,232],{"emptyLinePlaceholder":231},[123,119976,119977],{"class":125,"line":5033},[123,119978,119979],{"class":2673},"#删除软件包命令\n",[123,119981,119982,119984,119986,119988,119990,119992,119994],{"class":125,"line":5041},[123,119983,26999],{"class":337},[123,119985,119705],{"class":143},[123,119987,28500],{"class":143},[123,119989,31322],{"class":133},[123,119991,119794],{"class":143},[123,119993,2689],{"class":129},[123,119995,53714],{"class":133},[123,119997,119998],{"class":125,"line":5046},[123,119999,232],{"emptyLinePlaceholder":231},[123,120001,120002],{"class":125,"line":5052},[123,120003,120004],{"class":2673},"# 清理旧版本和缓存（释放磁盘空间）\n",[123,120006,120007,120009,120011,120014],{"class":125,"line":5058},[123,120008,26999],{"class":337},[123,120010,119705],{"class":143},[123,120012,120013],{"class":143}," autoremove",[123,120015,120016],{"class":2673},"  # 删除不再需要的依赖和库文件\n",[123,120018,120019,120021,120023,120026],{"class":125,"line":5063},[123,120020,26999],{"class":337},[123,120022,119705],{"class":143},[123,120024,120025],{"class":143}," clean",[123,120027,120028],{"class":2673},"       # 清理下载的缓存包\n",[123,120030,120031],{"class":125,"line":10380},[123,120032,232],{"emptyLinePlaceholder":231},[123,120034,120035],{"class":125,"line":10404},[123,120036,120037],{"class":2673},"#移除软件包及配置文件\n",[123,120039,120040,120042,120044,120047,120049,120051,120053],{"class":125,"line":10409},[123,120041,26999],{"class":337},[123,120043,119705],{"class":143},[123,120045,120046],{"class":143}," purge",[123,120048,31322],{"class":133},[123,120050,119794],{"class":143},[123,120052,2689],{"class":129},[123,120054,53714],{"class":133},[123,120056,120057],{"class":125,"line":10415},[123,120058,232],{"emptyLinePlaceholder":231},[123,120060,120061],{"class":125,"line":10442},[123,120062,120063],{"class":2673},"#查找软件包命令\n",[123,120065,120066,120068,120070,120073,120075,120078,120080],{"class":125,"line":10447},[123,120067,26999],{"class":337},[123,120069,119705],{"class":143},[123,120071,120072],{"class":143}," search",[123,120074,31322],{"class":133},[123,120076,120077],{"class":143},"keywor",[123,120079,2921],{"class":129},[123,120081,53714],{"class":133},[123,120083,120084],{"class":125,"line":10453},[123,120085,232],{"emptyLinePlaceholder":231},[123,120087,120088],{"class":125,"line":10465},[123,120089,120090],{"class":2673},"#列出所有已安装的包\n",[123,120092,120093,120095,120097],{"class":125,"line":10477},[123,120094,119756],{"class":337},[123,120096,119759],{"class":143},[123,120098,120099],{"class":164}," --installed\n",[123,120101,120102],{"class":125,"line":10489},[123,120103,232],{"emptyLinePlaceholder":231},[123,120105,120106],{"class":125,"line":12148},[123,120107,120108],{"class":2673},"#列出所有已安装的包的版本信息\n",[123,120110,120111,120113,120115],{"class":125,"line":12173},[123,120112,119756],{"class":337},[123,120114,119759],{"class":143},[123,120116,120117],{"class":164}," --all-versions\n",[2526,120119,120120],{},"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":118,"searchDepth":140,"depth":140,"links":120122},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119667,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120129,"title":120130,"body":120131,"description":2544,"extension":2545,"meta":120872,"navigation":231,"path":120873,"seo":120874,"stem":120875,"__hash__":120876},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120132,"toc":120859},[120133,120136,120140,120143,120149,120153,120157,120163,120168,120173,120178,120183,120188,120191,120194,120197,120200,120204,120207,120212,120215,120220,120223,120228,120235,120238,120241,120244,120247,120250,120261,120265,120269,120274,120279,120283,120288,120292,120297,120301,120305,120310,120313,120358,120363,120367,120371,120376,120382,120387,120397,120402,120412,120417,120422,120449,120453,120456,120461,120464,120489,120493,120498,120501,120506,120511,120531,120536,120539,120554,120558,120611,120614,120619,120623,120626,120641,120644,120647,120652,120656,120660,120663,120667,120671,120674,120679,120684,120688,120695,120703,120706,120713,120718,120723,120726,120731,120738,120743,120750,120754,120756,120761,120765,120768,120771,120776,120779,120784,120787,120792,120797,120802,120806,120811,120815,120856],[10,120134,120130],{"id":120135},"_2-linux装机教程",[14,120137,120139],{"id":120138},"_21-实体机","2.1 实体机",[19,120141,120142],{},"使用清华源：（Ubuntu24.04）",[19,120144,120145],{},[2846,120146,120147],{"href":120147,"rel":120148},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26287],[14,120150,120152],{"id":120151},"_22-普通虚拟机","2.2 普通虚拟机",[2587,120154,120156],{"id":120155},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,120158,120159],{},[2846,120160,120161],{"href":120161,"rel":120162},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26287],[19,120164,120165],{},[3929,120166],{"alt":118,"src":120167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120169,120170],{},[3929,120171],{"alt":118,"src":120172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120174,120175],{},[3929,120176],{"alt":118,"src":120177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120179,120180],{},[3929,120181],{"alt":118,"src":120182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120184,120185],{},[3929,120186],{"alt":118,"src":120187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120189,120190],{},"内存4G（4096MB）；",[19,120192,120193],{},"CPU给4个核；",[19,120195,120196],{},"硬盘动态分配60G；",[19,120198,120199],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[2587,120201,120203],{"id":120202},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120205,120206],{},"按照1.1的步骤下载Ubuntu",[19,120208,120209],{},[3929,120210],{"alt":118,"src":120211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120213,120214],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120216,120217],{},[3929,120218],{"alt":118,"src":120219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120221,120222],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120224,120225],{},[3929,120226],{"alt":118,"src":120227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120229,120230,120231,120234],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2759,120232,120233],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120236,120237],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120239,120240],{},"将改动写入磁盘吗 继续",[19,120242,120243],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120245,120246],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120248,120249],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120251,120252,120253,120256,120257,120260],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2759,120254,120255],{},"除了"," 选不发送系统信息与不升级之外， ",[2759,120258,120259],{},"其它"," 都跳过或前进）",[2587,120262,120264],{"id":120263},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24425,120266,120268],{"id":120267},"_2231-全屏","2.2.3.1 全屏",[19,120270,120271],{},[3929,120272],{"alt":118,"src":120273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120275,120276],{},[3929,120277],{"alt":118,"src":120278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24425,120280,120282],{"id":120281},"_2232-文件交换","2.2.3.2 文件交换",[19,120284,120285],{},[3929,120286],{"alt":118,"src":120287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24425,120289,120291],{"id":120290},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120293,120294],{},[3929,120295],{"alt":118,"src":120296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120298,120300],{"id":120299},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[2587,120302,120304],{"id":120303},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,120306,120307],{},[29,120308,120309],{},"什么情况下推荐？",[19,120311,120312],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,120314,120315],{"start":140},[29,120316,120317,120318],{},"优缺点：",[26,120319,120320,120350],{},[29,120321,120322,120323],{},"优点：",[26,120324,120325,120328,120335,120338,120341,120344,120347],{},[29,120326,120327],{},"WSL2是最好的Linux发行版;(bushi)",[29,120329,120330,120331,120334],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2759,120332,120333],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,120336,120337],{},"非常方便调用USB设备，可以USB直通;",[29,120339,120340],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,120342,120343],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,120345,120346],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,120348,120349],{},"非常方便使用Windows的VScode远程开发;",[29,120351,120352,120353],{},"缺点：",[26,120354,120355],{},[29,120356,120357],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,120359,120360],{},[3929,120361],{"alt":118,"src":120362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[2587,120364,120366],{"id":120365},"_232-安装教程","2.3.2 安装教程",[24425,120368,120370],{"id":120369},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,120372,120373],{},[29,120374,120375],{},"方法一(图形界面)",[19,120377,120378,120379,1159],{},"用Win+R输入",[120,120380,120381],{},"appwiz.cpl",[19,120383,120384],{},[3929,120385],{"alt":118,"src":120386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120388,120389,120390,120393,120394,28894],{},"点击OK进入 ",[2759,120391,120392],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2759,120395,120396],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120398,120399],{},[3929,120400],{"alt":118,"src":120401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120403,120404,120405,103411,120408,120411],{},"选择 ",[2759,120406,120407],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2759,120409,120410],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120413,120414],{},[3929,120415],{"alt":118,"src":120416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,120418,120419],{"start":140},[29,120420,120421],{},"方法二(命令行)",[113,120423,120427],{"className":120424,"code":120425,"language":120426,"meta":118,"style":118},"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",[120,120428,120429,120434,120439,120444],{"__ignoreMap":118},[123,120430,120431],{"class":125,"line":126},[123,120432,120433],{},"# 开启 Linux 子系统\n",[123,120435,120436],{"class":125,"line":140},[123,120437,120438],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[123,120440,120441],{"class":125,"line":156},[123,120442,120443],{},"# 开启虚拟机平台\n",[123,120445,120446],{"class":125,"line":168},[123,120447,120448],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24425,120450,120452],{"id":120451},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120454,120455],{},"用管理员权限打开powershell",[19,120457,120458],{},[3929,120459],{"alt":118,"src":120460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120462,120463],{},"升级WSL并设置默认版本为WSL2",[113,120465,120467],{"className":120424,"code":120466,"language":120426,"meta":118,"style":118},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[120,120468,120469,120474,120479,120484],{"__ignoreMap":118},[123,120470,120471],{"class":125,"line":126},[123,120472,120473],{},"# 更新 wsl\n",[123,120475,120476],{"class":125,"line":140},[123,120477,120478],{},"wsl --update\n",[123,120480,120481],{"class":125,"line":156},[123,120482,120483],{},"# 将 wsl 版本设置为 wsl2\n",[123,120485,120486],{"class":125,"line":168},[123,120487,120488],{},"wsl --set-default-version 2\n",[24425,120490,120492],{"id":120491},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,120494,120495],{},[29,120496,120497],{},"方式一(商店下载)",[19,120499,120500],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120502,120503],{},[3929,120504],{"alt":118,"src":120505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,120507,120508],{"start":140},[29,120509,120510],{},"方式二(命令行安装)",[113,120512,120514],{"className":120424,"code":120513,"language":120426,"meta":118,"style":118},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[120,120515,120516,120521,120526],{"__ignoreMap":118},[123,120517,120518],{"class":125,"line":126},[123,120519,120520],{},"# 列出可安装的 Linux 版本\n",[123,120522,120523],{"class":125,"line":140},[123,120524,120525],{},"#（需要科学手段）\n",[123,120527,120528],{"class":125,"line":156},[123,120529,120530],{},"wsl --list --online\n",[19,120532,120533],{},[3929,120534],{"alt":118,"src":120535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120537,120538],{},"选择对应发行版并安装",[113,120540,120542],{"className":120424,"code":120541,"language":120426,"meta":118,"style":118},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[120,120543,120544,120549],{"__ignoreMap":118},[123,120545,120546],{"class":125,"line":126},[123,120547,120548],{},"# Ubuntu安装完毕后需要重启系统\n",[123,120550,120551],{"class":125,"line":140},[123,120552,120553],{},"wsl --install -d Ubuntu-24.04\n",[24425,120555,120557],{"id":120556},"_2324-查看系统状态","2.3.2.4 查看系统状态",[113,120559,120561],{"className":120424,"code":120560,"language":120426,"meta":118,"style":118},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[120,120562,120563,120568,120573,120578,120583,120587,120591,120596,120601,120606],{"__ignoreMap":118},[123,120564,120565],{"class":125,"line":126},[123,120566,120567],{},"# 查看 wsl\n",[123,120569,120570],{"class":125,"line":140},[123,120571,120572],{},"wsl -l\n",[123,120574,120575],{"class":125,"line":156},[123,120576,120577],{},"# 查看 wsl 运行版本或模式\n",[123,120579,120580],{"class":125,"line":168},[123,120581,120582],{},"wsl -l -v\n",[123,120584,120585],{"class":125,"line":268},[123,120586,232],{"emptyLinePlaceholder":231},[123,120588,120589],{"class":125,"line":291},[123,120590,232],{"emptyLinePlaceholder":231},[123,120592,120593],{"class":125,"line":300},[123,120594,120595],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[123,120597,120598],{"class":125,"line":305},[123,120599,120600],{},"wsl --set-version \u003Cdistro> 2\n",[123,120602,120603],{"class":125,"line":316},[123,120604,120605],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[123,120607,120608],{"class":125,"line":673},[123,120609,120610],{},"wsl --unregister \u003Cdistro>\n",[19,120612,120613],{},"输出Version为2即正常",[19,120615,120616],{},[3929,120617],{"alt":118,"src":120618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24425,120620,120622],{"id":120621},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120624,120625],{},"直接在Powershell里输入wsl命令进入子系统",[113,120627,120629],{"className":120424,"code":120628,"language":120426,"meta":118,"style":118},"# 进入子系统\nwsl\n",[120,120630,120631,120636],{"__ignoreMap":118},[123,120632,120633],{"class":125,"line":126},[123,120634,120635],{},"# 进入子系统\n",[123,120637,120638],{"class":125,"line":140},[123,120639,120640],{},"wsl\n",[19,120642,120643],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120645,120646],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120648,120649],{},[3929,120650],{"alt":118,"src":120651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[2587,120653,120655],{"id":120654},"_233-配置各种环境","2.3.3 配置各种环境",[24425,120657,120659],{"id":120658},"_2331-换源","2.3.3.1 换源",[19,120661,120662],{},"(同实体机LINUX，往下找教程)",[24425,120664,120666],{"id":120665},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25337,120668,120670],{"id":120669},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120672,120673],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120675,120676],{},[3929,120677],{"alt":118,"src":120678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120680,120681],{},[3929,120682],{"alt":118,"src":120683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25337,120685,120687],{"id":120686},"_23322-cuda","2.3.3.2.2 CUDA",[19,120689,120690,120691],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2846,120692,120693],{"href":120693,"rel":120694},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26287],[19,120696,120697,120700],{},[3929,120698],{"alt":118,"src":120699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3929,120701],{"alt":118,"src":120702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120704,120705],{},"在下方的网站，选择合适的版本。",[19,120707,120708,120709],{},"WSL2 专属 CUDA 指南：",[2846,120710,120711],{"href":120711,"rel":120712},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26287],[19,120714,120715],{},[2759,120716,120717],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120719,120720],{},[3929,120721],{"alt":118,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120724,120725],{},"挨行敲一遍",[19,120727,120728],{},[3929,120729],{"alt":118,"src":120730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120732,120733,120734,120737],{},"敲完后，输入",[120,120735,120736],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120739,120740],{},[3929,120741],{"alt":118,"src":120742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120744,120745,120746,120749],{},"（请详看下方教程的",[2759,120747,120748],{},"安装CUDA的配置环境来看","如何配置环境）",[25337,120751,120753],{"id":120752},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120755,120662],{},[19,120757,120758],{},[3929,120759],{"alt":118,"src":120760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24425,120762,120764],{"id":120763},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120766,120767],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120769,120770],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120772,120773],{},[3929,120774],{"alt":118,"src":120775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120777,120778],{},"连接WSL2",[19,120780,120781],{},[3929,120782],{"alt":118,"src":120783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120785,120786],{},"远程开发成功。",[19,120788,120789],{},[3929,120790],{"alt":118,"src":120791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120793,120794],{},[3929,120795],{"alt":118,"src":120796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120798,120799],{},[3929,120800],{"alt":118,"src":120801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24425,120803,120805],{"id":120804},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120807,120808],{},[3929,120809],{"alt":118,"src":120810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24425,120812,120814],{"id":120813},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[113,120816,120818],{"className":119684,"code":120817,"language":119686,"meta":118,"style":118},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[120,120819,120820,120828,120836,120847,120851],{"__ignoreMap":118},[123,120821,120822,120824,120826],{"class":125,"line":126},[123,120823,26999],{"class":337},[123,120825,119705],{"class":143},[123,120827,28663],{"class":143},[123,120829,120830,120832,120834],{"class":125,"line":140},[123,120831,26999],{"class":337},[123,120833,119705],{"class":143},[123,120835,119721],{"class":143},[123,120837,120838,120840,120842,120844],{"class":125,"line":156},[123,120839,26999],{"class":337},[123,120841,119705],{"class":143},[123,120843,341],{"class":143},[123,120845,120846],{"class":143}," mesa-utils\n",[123,120848,120849],{"class":125,"line":168},[123,120850,232],{"emptyLinePlaceholder":231},[123,120852,120853],{"class":125,"line":268},[123,120854,120855],{"class":2673},"#然后重启wsl2即可\n",[2526,120857,120858],{},"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":118,"searchDepth":140,"depth":140,"links":120860},[120861,120862,120867],{"id":120138,"depth":140,"text":120139},{"id":120151,"depth":140,"text":120152,"children":120863},[120864,120865,120866],{"id":120155,"depth":156,"text":120156},{"id":120202,"depth":156,"text":120203},{"id":120263,"depth":156,"text":120264},{"id":120299,"depth":140,"text":120300,"children":120868},[120869,120870,120871],{"id":120303,"depth":156,"text":120304},{"id":120365,"depth":156,"text":120366},{"id":120654,"depth":156,"text":120655},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120130,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120878,"title":120879,"body":120880,"description":2544,"extension":2545,"meta":123816,"navigation":231,"path":123817,"seo":123818,"stem":123819,"__hash__":123820},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120881,"toc":123788},[120882,120885,120889,120895,120899,120905,120909,121097,121100,121105,121109,121113,121116,121119,121125,121130,121133,121136,121141,121174,121179,121183,121260,121263,121268,121272,121275,121314,121317,121326,121344,121349,121356,121473,121478,121481,121508,121513,121517,121526,121576,121583,121587,121590,121604,121611,121645,121650,121654,121677,121680,121685,121689,121692,121695,121698,121740,121744,121747,121750,121791,121795,121799,121802,121807,121812,121815,121838,121841,121849,121854,121857,121862,121867,121870,121875,121879,121884,121907,121912,121974,121982,121987,121992,121995,122000,122003,122008,122013,122031,122036,122042,122047,122061,122065,122068,122071,122074,122117,122120,122125,122226,122229,122234,122238,122242,122279,122283,122287,122291,122337,122341,122386,122390,122397,122405,122460,122463,122540,122543,122566,122570,122573,122578,122583,122591,122594,122599,122604,122609,122612,122617,122626,122629,122634,122637,122708,122713,122716,122721,122724,122729,122732,122737,122740,122745,122750,122753,122828,122831,122844,122849,122852,122866,122869,122898,122903,122932,122935,122940,122944,122949,122958,122961,122966,122969,122974,122977,122980,122985,122988,122993,122998,123001,123006,123009,123134,123139,123169,123172,123177,123182,123199,123202,123245,123248,123275,123280,123293,123436,123440,123445,123459,123462,123513,123516,123546,123549,123565,123570,123584,123587,123654,123659,123668,123673,123676,123688,123693,123700,123724,123727,123732,123735,123754,123759,123766,123778,123785],[10,120883,120879],{"id":120884},"_3-安装必备配置",[14,120886,120888],{"id":120887},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[113,120890,120893],{"className":120891,"code":120892,"language":7621},[7619],"  打开下方网站（注意，该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",[120,120894,120892],{"__ignoreMap":118},[2587,120896,120898],{"id":120897},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[113,120900,120903],{"className":120901,"code":120902,"language":7621},[7619],"  输入以下命令\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",[120,120904,120902],{"__ignoreMap":118},[2587,120906,120908],{"id":120907},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[113,120910,120914],{"className":120911,"code":120912,"language":120913,"meta":118,"style":118},"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",[120,120915,120916,120924,120935,120947,120961,120965,120975,120980,120984,120988,120993,120997,121009,121013,121018,121022,121033,121037,121053,121057,121068,121072,121077,121081,121089],{"__ignoreMap":118},[123,120917,120918,120920,120922],{"class":125,"line":126},[123,120919,26999],{"class":337},[123,120921,119705],{"class":143},[123,120923,28663],{"class":143},[123,120925,120926,120928,120930,120932],{"class":125,"line":140},[123,120927,26999],{"class":337},[123,120929,119705],{"class":143},[123,120931,341],{"class":143},[123,120933,120934],{"class":143}," vim\n",[123,120936,120937,120939,120942,120944],{"class":125,"line":156},[123,120938,26999],{"class":337},[123,120940,120941],{"class":143}," rm",[123,120943,27747],{"class":164},[123,120945,120946],{"class":143}," \u002Fetc\u002Fapt\u002Fsources.list\n",[123,120948,120949,120951,120953,120955,120958],{"class":125,"line":168},[123,120950,26999],{"class":337},[123,120952,120941],{"class":143},[123,120954,27747],{"class":164},[123,120956,120957],{"class":143}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[123,120959,120960],{"class":164},"**\n",[123,120962,120963],{"class":125,"line":268},[123,120964,232],{"emptyLinePlaceholder":231},[123,120966,120967,120969,120972],{"class":125,"line":291},[123,120968,26999],{"class":337},[123,120970,120971],{"class":143}," vim",[123,120973,120974],{"class":143}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[123,120976,120977],{"class":125,"line":300},[123,120978,120979],{"class":143},"```\n",[123,120981,120982],{"class":125,"line":305},[123,120983,232],{"emptyLinePlaceholder":231},[123,120985,120986],{"class":125,"line":316},[123,120987,232],{"emptyLinePlaceholder":231},[123,120989,120990],{"class":125,"line":673},[123,120991,120992],{"class":337},"选择好Ubuntu版本后，复制下方的内容。\n",[123,120994,120995],{"class":125,"line":692},[123,120996,232],{"emptyLinePlaceholder":231},[123,120998,120999,121001,121004,121007],{"class":125,"line":713},[123,121000,2834],{"class":133},[123,121002,121003],{"class":143},"[](",[123,121005,121006],{"class":337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[123,121008,288],{"class":143},[123,121010,121011],{"class":125,"line":718},[123,121012,232],{"emptyLinePlaceholder":231},[123,121014,121015],{"class":125,"line":1138},[123,121016,121017],{"class":337},"粘贴进去\n",[123,121019,121020],{"class":125,"line":1429},[123,121021,232],{"emptyLinePlaceholder":231},[123,121023,121024,121026,121028,121031],{"class":125,"line":1439},[123,121025,2834],{"class":133},[123,121027,121003],{"class":143},[123,121029,121030],{"class":337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[123,121032,288],{"class":143},[123,121034,121035],{"class":125,"line":1444},[123,121036,232],{"emptyLinePlaceholder":231},[123,121038,121039,121042,121045,121048,121050],{"class":125,"line":1453},[123,121040,121041],{"class":337},"按一下ESC，然后英文冒号，输入",[123,121043,121044],{"class":143}," `",[123,121046,121047],{"class":337},":wq!",[123,121049,3571],{"class":143},[123,121051,121052],{"class":337},"然后回车\n",[123,121054,121055],{"class":125,"line":1458},[123,121056,232],{"emptyLinePlaceholder":231},[123,121058,121059,121061,121063,121066],{"class":125,"line":1476},[123,121060,2834],{"class":133},[123,121062,121003],{"class":143},[123,121064,121065],{"class":337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[123,121067,288],{"class":143},[123,121069,121070],{"class":125,"line":1494},[123,121071,232],{"emptyLinePlaceholder":231},[123,121073,121074],{"class":125,"line":1499},[123,121075,121076],{"class":337},"输入以下命令\n",[123,121078,121079],{"class":125,"line":1517},[123,121080,232],{"emptyLinePlaceholder":231},[123,121082,121083,121086],{"class":125,"line":1534},[123,121084,121085],{"class":143},"```",[123,121087,121088],{"class":337},"Bash\n",[123,121090,121091,121093,121095],{"class":125,"line":1539},[123,121092,26999],{"class":337},[123,121094,119705],{"class":143},[123,121096,28663],{"class":143},[19,121098,121099],{},"这里被替换成对应学校则成功",[19,121101,121102],{},[3929,121103],{"alt":118,"src":121104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121106,121108],{"id":121107},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[2587,121110,121112],{"id":121111},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,121114,121115],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,121117,121118],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,121120,121121],{},[2846,121122,121123],{"href":121123,"rel":121124},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26287],[19,121126,121127],{},[3929,121128],{"alt":118,"src":121129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,121131,121132],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,121134,121135],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,121137,121138],{},[3929,121139],{"alt":118,"src":121140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[113,121142,121144],{"className":119684,"code":121143,"language":119686,"meta":118,"style":118},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[120,121145,121146,121151,121158,121163],{"__ignoreMap":118},[123,121147,121148],{"class":125,"line":126},[123,121149,121150],{"class":2673},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[123,121152,121153,121155],{"class":125,"line":140},[123,121154,103669],{"class":164},[123,121156,121157],{"class":143}," ~\u002FDownloads\n",[123,121159,121160],{"class":125,"line":156},[123,121161,121162],{"class":2673},"#下方chrome安装包名不一定是这个，根据名字来看\n",[123,121164,121165,121167,121169,121171],{"class":125,"line":168},[123,121166,26999],{"class":337},[123,121168,119705],{"class":143},[123,121170,341],{"class":143},[123,121172,121173],{"class":143}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121175,121176],{},[3929,121177],{"alt":118,"src":121178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[2587,121180,121182],{"id":121181},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[113,121184,121186],{"className":119684,"code":121185,"language":119686,"meta":118,"style":118},"# 老版\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",[120,121187,121188,121193,121201,121212,121217,121221,121226,121236,121244,121255],{"__ignoreMap":118},[123,121189,121190],{"class":125,"line":126},[123,121191,121192],{"class":2673},"# 老版\n",[123,121194,121195,121197,121199],{"class":125,"line":140},[123,121196,26999],{"class":337},[123,121198,119705],{"class":143},[123,121200,28663],{"class":143},[123,121202,121203,121205,121207,121209],{"class":125,"line":156},[123,121204,26999],{"class":337},[123,121206,119705],{"class":143},[123,121208,341],{"class":143},[123,121210,121211],{"class":143}," neofetch\n",[123,121213,121214],{"class":125,"line":168},[123,121215,121216],{"class":337},"neofetch\n",[123,121218,121219],{"class":125,"line":268},[123,121220,232],{"emptyLinePlaceholder":231},[123,121222,121223],{"class":125,"line":291},[123,121224,121225],{"class":2673},"# 新版\n",[123,121227,121228,121230,121233],{"class":125,"line":300},[123,121229,26999],{"class":337},[123,121231,121232],{"class":143}," add-apt-repository",[123,121234,121235],{"class":143}," ppa:zhangsongcui3371\u002Ffastfetch\n",[123,121237,121238,121240,121242],{"class":125,"line":305},[123,121239,26999],{"class":337},[123,121241,119705],{"class":143},[123,121243,28663],{"class":143},[123,121245,121246,121248,121250,121252],{"class":125,"line":316},[123,121247,26999],{"class":337},[123,121249,119705],{"class":143},[123,121251,341],{"class":143},[123,121253,121254],{"class":143}," fastfetch\n",[123,121256,121257],{"class":125,"line":673},[123,121258,121259],{"class":337},"fastfetch\n",[19,121261,121262],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121264,121265],{},[3929,121266],{"alt":118,"src":121267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[2587,121269,121271],{"id":121270},"_323-移除snap应用","3.2.3 移除snap应用",[19,121273,121274],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[113,121276,121278],{"className":119684,"code":121277,"language":119686,"meta":118,"style":118},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[120,121279,121280,121292,121303],{"__ignoreMap":118},[123,121281,121282,121284,121286,121289],{"class":125,"line":126},[123,121283,26999],{"class":337},[123,121285,28934],{"class":143},[123,121287,121288],{"class":143}," disable",[123,121290,121291],{"class":143}," snapd.service\n",[123,121293,121294,121296,121298,121300],{"class":125,"line":140},[123,121295,26999],{"class":337},[123,121297,28934],{"class":143},[123,121299,121288],{"class":143},[123,121301,121302],{"class":143}," snapd.socket\n",[123,121304,121305,121307,121309,121311],{"class":125,"line":156},[123,121306,26999],{"class":337},[123,121308,28934],{"class":143},[123,121310,121288],{"class":143},[123,121312,121313],{"class":143}," snapd.seeded.service\n",[19,121315,121316],{},"然后查看snap应用列表",[19,121318,121319,121320,121325],{},"根据你安装的选择不同（最小安装或普通安装），有",[2846,121321,121324],{"href":121322,"rel":121323},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26287],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[113,121327,121329],{"className":119684,"code":121328,"language":119686,"meta":118,"style":118},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[120,121330,121331,121336],{"__ignoreMap":118},[123,121332,121333],{"class":125,"line":126},[123,121334,121335],{"class":2673},"# 查询当前系统上snap安装了哪些app\n",[123,121337,121338,121341],{"class":125,"line":140},[123,121339,121340],{"class":337},"snap",[123,121342,121343],{"class":143}," list\n",[19,121345,121346],{},[3929,121347],{"alt":118,"src":121348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121350,121351,121352,121355],{},"卸载掉图中所有应用，按照 ",[2759,121353,121354],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[113,121357,121359],{"className":119684,"code":121358,"language":119686,"meta":118,"style":118},"#移除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",[120,121360,121361,121366,121378,121383,121394,121399,121410,121415,121426,121431,121435,121440,121451,121462],{"__ignoreMap":118},[123,121362,121363],{"class":125,"line":126},[123,121364,121365],{"class":2673},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[123,121367,121368,121370,121373,121375],{"class":125,"line":140},[123,121369,26999],{"class":337},[123,121371,121372],{"class":143}," snap",[123,121374,28500],{"class":143},[123,121376,121377],{"class":143}," snap-store\n",[123,121379,121380],{"class":125,"line":156},[123,121381,121382],{"class":2673},"#移除firefox浏览器\n",[123,121384,121385,121387,121389,121391],{"class":125,"line":168},[123,121386,26999],{"class":337},[123,121388,121372],{"class":143},[123,121390,28500],{"class":143},[123,121392,121393],{"class":143}," firefox\n",[123,121395,121396],{"class":125,"line":268},[123,121397,121398],{"class":2673},"#移除gnome-42-2204\n",[123,121400,121401,121403,121405,121407],{"class":125,"line":291},[123,121402,26999],{"class":337},[123,121404,121372],{"class":143},[123,121406,28500],{"class":143},[123,121408,121409],{"class":143}," gnome-42-2204\n",[123,121411,121412],{"class":125,"line":300},[123,121413,121414],{"class":2673},"#移除gtk-common-themes\n",[123,121416,121417,121419,121421,121423],{"class":125,"line":305},[123,121418,26999],{"class":337},[123,121420,121372],{"class":143},[123,121422,28500],{"class":143},[123,121424,121425],{"class":143}," gtk-common-themes\n",[123,121427,121428],{"class":125,"line":316},[123,121429,121430],{"class":2673},"#移除其它...\n",[123,121432,121433],{"class":125,"line":673},[123,121434,5116],{"class":129},[123,121436,121437],{"class":125,"line":692},[123,121438,121439],{"class":2673},"#移除core22,bare以及snapd\n",[123,121441,121442,121444,121446,121448],{"class":125,"line":713},[123,121443,26999],{"class":337},[123,121445,121372],{"class":143},[123,121447,28500],{"class":143},[123,121449,121450],{"class":143}," core22\n",[123,121452,121453,121455,121457,121459],{"class":125,"line":718},[123,121454,26999],{"class":337},[123,121456,121372],{"class":143},[123,121458,28500],{"class":143},[123,121460,121461],{"class":143}," bare\n",[123,121463,121464,121466,121468,121470],{"class":125,"line":1138},[123,121465,26999],{"class":337},[123,121467,121372],{"class":143},[123,121469,28500],{"class":143},[123,121471,121472],{"class":143}," snapd\n",[19,121474,121475],{},[3929,121476],{"alt":118,"src":121477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121479,121480],{},"输入以下命令查看是否还有snap包",[113,121482,121484],{"className":119684,"code":121483,"language":119686,"meta":118,"style":118},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[120,121485,121486,121492,121496,121500,121504],{"__ignoreMap":118},[123,121487,121488,121490],{"class":125,"line":126},[123,121489,121340],{"class":337},[123,121491,121343],{"class":143},[123,121493,121494],{"class":125,"line":140},[123,121495,121192],{"class":2673},[123,121497,121498],{"class":125,"line":156},[123,121499,121216],{"class":337},[123,121501,121502],{"class":125,"line":168},[123,121503,121225],{"class":2673},[123,121505,121506],{"class":125,"line":268},[123,121507,121259],{"class":337},[19,121509,121510],{},[3929,121511],{"alt":118,"src":121512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[2587,121514,121516],{"id":121515},"_324-移除snap","3.2.4 移除snap",[19,121518,121519,121520,121525],{},"在删除掉",[2846,121521,121524],{"href":121522,"rel":121523},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26287],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[113,121527,121529],{"className":119684,"code":121528,"language":119686,"meta":118,"style":118}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[120,121530,121531,121536,121549,121554,121565],{"__ignoreMap":118},[123,121532,121533],{"class":125,"line":126},[123,121534,121535],{"class":2673}," #使用apt移除掉snap\n",[123,121537,121538,121540,121542,121544,121547],{"class":125,"line":140},[123,121539,26999],{"class":337},[123,121541,119705],{"class":143},[123,121543,120013],{"class":143},[123,121545,121546],{"class":164}," --purge",[123,121548,121472],{"class":143},[123,121550,121551],{"class":125,"line":156},[123,121552,121553],{"class":2673},"#移除snapd的一些目录\n",[123,121555,121556,121558,121560,121562],{"class":125,"line":168},[123,121557,26999],{"class":337},[123,121559,120941],{"class":143},[123,121561,27747],{"class":164},[123,121563,121564],{"class":143}," \u002Fvar\u002Fcache\u002Fsnapd\n",[123,121566,121567,121569,121571,121573],{"class":125,"line":268},[123,121568,26999],{"class":337},[123,121570,120941],{"class":143},[123,121572,27747],{"class":164},[123,121574,121575],{"class":143}," ~\u002Fsnap\n",[19,121577,121578,121579,121582],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[120,121580,121581],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[2587,121584,121586],{"id":121585},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121588,121589],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[113,121591,121593],{"className":119684,"code":121592,"language":119686,"meta":118,"style":118},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[120,121594,121595],{"__ignoreMap":118},[123,121596,121597,121599,121601],{"class":125,"line":126},[123,121598,26999],{"class":337},[123,121600,120971],{"class":143},[123,121602,121603],{"class":143}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121605,121606,121607,121610],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[120,121608,121609],{},":wq"," 回车",[113,121612,121614],{"className":119684,"code":121613,"language":119686,"meta":118,"style":118},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[120,121615,121616,121623,121637],{"__ignoreMap":118},[123,121617,121618,121621],{"class":125,"line":126},[123,121619,121620],{"class":337},"Package:",[123,121622,121472],{"class":143},[123,121624,121625,121628,121631,121634],{"class":125,"line":140},[123,121626,121627],{"class":337},"Pin:",[123,121629,121630],{"class":143}," release",[123,121632,121633],{"class":143}," a=",[123,121635,121636],{"class":164},"*\n",[123,121638,121639,121642],{"class":125,"line":156},[123,121640,121641],{"class":337},"Pin-Priority:",[123,121643,121644],{"class":164}," -10\n",[19,121646,121647],{},[3929,121648],{"alt":118,"src":121649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[2587,121651,121653],{"id":121652},"_326-测试是否成功","3.2.6 测试是否成功",[113,121655,121657],{"className":119684,"code":121656,"language":119686,"meta":118,"style":118},"sudo apt update\nsudo apt install firefox\n",[120,121658,121659,121667],{"__ignoreMap":118},[123,121660,121661,121663,121665],{"class":125,"line":126},[123,121662,26999],{"class":337},[123,121664,119705],{"class":143},[123,121666,28663],{"class":143},[123,121668,121669,121671,121673,121675],{"class":125,"line":140},[123,121670,26999],{"class":337},[123,121672,119705],{"class":143},[123,121674,341],{"class":143},[123,121676,121393],{"class":143},[19,121678,121679],{},"这里提示snapd无法被安装，就证明成功了",[19,121681,121682],{},[3929,121683],{"alt":118,"src":121684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[2587,121686,121688],{"id":121687},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121690,121691],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121693,121694],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121696,121697],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[113,121699,121701],{"className":119684,"code":121700,"language":119686,"meta":118,"style":118},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[120,121702,121703,121708,121717,121722,121730],{"__ignoreMap":118},[123,121704,121705],{"class":125,"line":126},[123,121706,121707],{"class":2673},"# 添加Mozilla提供的源\n",[123,121709,121710,121712,121714],{"class":125,"line":140},[123,121711,26999],{"class":337},[123,121713,121232],{"class":143},[123,121715,121716],{"class":143}," ppa:mozillateam\u002Fppa\n",[123,121718,121719],{"class":125,"line":156},[123,121720,121721],{"class":2673},"# 安装Firefox\n",[123,121723,121724,121726,121728],{"class":125,"line":168},[123,121725,26999],{"class":337},[123,121727,119705],{"class":143},[123,121729,28663],{"class":143},[123,121731,121732,121734,121736,121738],{"class":125,"line":268},[123,121733,26999],{"class":337},[123,121735,119705],{"class":143},[123,121737,341],{"class":143},[123,121739,121393],{"class":143},[2587,121741,121743],{"id":121742},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121745,121746],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121748,121749],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[113,121751,121753],{"className":119684,"code":121752,"language":119686,"meta":118,"style":118},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[120,121754,121755,121760,121770,121778,121782],{"__ignoreMap":118},[123,121756,121757],{"class":125,"line":126},[123,121758,121759],{"class":2673},"#删掉禁止安装snap的配置文件\n",[123,121761,121762,121764,121766,121768],{"class":125,"line":140},[123,121763,26999],{"class":337},[123,121765,120941],{"class":143},[123,121767,27747],{"class":164},[123,121769,121603],{"class":143},[123,121771,121772,121774,121776],{"class":125,"line":156},[123,121773,26999],{"class":337},[123,121775,119705],{"class":143},[123,121777,28663],{"class":143},[123,121779,121780],{"class":125,"line":168},[123,121781,232],{"emptyLinePlaceholder":231},[123,121783,121784,121786,121788],{"class":125,"line":268},[123,121785,26999],{"class":337},[123,121787,119705],{"class":143},[123,121789,121790],{"class":143}," dist-update\n",[14,121792,121794],{"id":121793},"_33-中文输入法","3.3 中文输入法",[2587,121796,121798],{"id":121797},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121800,121801],{},"官网下载搜狗输入法",[19,121803,121804],{},[3929,121805],{"alt":118,"src":121806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121808,121809],{},[3929,121810],{"alt":118,"src":121811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121813,121814],{},"打开终端输入如下",[113,121816,121818],{"className":119684,"code":121817,"language":119686,"meta":118,"style":118},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[120,121819,121820,121827],{"__ignoreMap":118},[123,121821,121822,121824],{"class":125,"line":126},[123,121823,103669],{"class":164},[123,121825,121826],{"class":143}," ~\u002FDownloads\u002F\n",[123,121828,121829,121831,121833,121835],{"class":125,"line":140},[123,121830,26999],{"class":337},[123,121832,119705],{"class":143},[123,121834,341],{"class":143},[123,121836,121837],{"class":143}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121839,121840],{},"打开Fcitx",[19,121842,121843,121846],{},[3929,121844],{"alt":118,"src":121845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3929,121847],{"alt":118,"src":121848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121850,121851],{},[3929,121852],{"alt":118,"src":121853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121855,121856],{},"添加搜狗输入法",[19,121858,121859],{},[3929,121860],{"alt":118,"src":121861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121863,121864],{},[3929,121865],{"alt":118,"src":121866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121868,121869],{},"将搜狗输入法设置为唯一输入法",[19,121871,121872],{},[3929,121873],{"alt":118,"src":121874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[2587,121876,121878],{"id":121877},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,121880,121881],{},[29,121882,121883],{},"卸载旧输入法",[113,121885,121887],{"className":120911,"code":121886,"language":120913,"meta":118,"style":118},"sudo apt purge fcitx* ibus*\n",[120,121888,121889],{"__ignoreMap":118},[123,121890,121891,121893,121895,121897,121900,121902,121905],{"class":125,"line":126},[123,121892,26999],{"class":337},[123,121894,119705],{"class":143},[123,121896,120046],{"class":143},[123,121898,121899],{"class":143}," fcitx",[123,121901,3060],{"class":164},[123,121903,121904],{"class":143}," ibus",[123,121906,121636],{"class":164},[26,121908,121909],{"start":140},[29,121910,121911],{},"安装Fcitx5",[113,121913,121915],{"className":119684,"code":121914,"language":119686,"meta":118,"style":118},"# 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",[120,121916,121917,121922,121936,121940,121945,121954,121962],{"__ignoreMap":118},[123,121918,121919],{"class":125,"line":126},[123,121920,121921],{"class":2673},"# Ubuntu22.04及以上、Debian12及以上\n",[123,121923,121924,121926,121928,121930,121933],{"class":125,"line":140},[123,121925,26999],{"class":337},[123,121927,119705],{"class":143},[123,121929,341],{"class":143},[123,121931,121932],{"class":143}," fcitx5",[123,121934,121935],{"class":143}," fcitx5-chinese-addons\n",[123,121937,121938],{"class":125,"line":156},[123,121939,232],{"emptyLinePlaceholder":231},[123,121941,121942],{"class":125,"line":168},[123,121943,121944],{"class":2673},"# Ubuntu20.04\n",[123,121946,121947,121949,121951],{"class":125,"line":268},[123,121948,26999],{"class":337},[123,121950,121232],{"class":143},[123,121952,121953],{"class":143}," ppa:zhsj\u002Ffcitx5\n",[123,121955,121956,121958,121960],{"class":125,"line":291},[123,121957,26999],{"class":337},[123,121959,119705],{"class":143},[123,121961,28663],{"class":143},[123,121963,121964,121966,121968,121970,121972],{"class":125,"line":300},[123,121965,26999],{"class":337},[123,121967,119705],{"class":143},[123,121969,341],{"class":143},[123,121971,121932],{"class":143},[123,121973,121935],{"class":143},[26,121975,121976,121979],{"start":156},[29,121977,121978],{},"Reboot System",[29,121980,121981],{},"启动Fcitx5",[19,121983,121984],{},[3929,121985],{"alt":118,"src":121986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,121988,121989],{"start":268},[29,121990,121991],{},"修改一些设置",[19,121993,121994],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121996,121997],{},[3929,121998],{"alt":118,"src":121999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122001,122002],{},"添加快捷键以便于更好切换中英文",[19,122004,122005],{},[3929,122006],{"alt":118,"src":122007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,122009,122010],{"start":291},[29,122011,122012],{},"重启",[113,122014,122016],{"className":120911,"code":122015,"language":120913,"meta":118,"style":118},"sudo shutdown -r now\n",[120,122017,122018],{"__ignoreMap":118},[123,122019,122020,122022,122025,122028],{"class":125,"line":126},[123,122021,26999],{"class":337},[123,122023,122024],{"class":143}," shutdown",[123,122026,122027],{"class":164}," -r",[123,122029,122030],{"class":143}," now\n",[26,122032,122033],{"start":300},[29,122034,122035],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,122037,122038],{},[2846,122039,122040],{"href":122040,"rel":122041},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26287],[26,122043,122044],{"start":305},[29,122045,122046],{},"再重启",[113,122048,122049],{"className":120911,"code":122015,"language":120913,"meta":118,"style":118},[120,122050,122051],{"__ignoreMap":118},[123,122052,122053,122055,122057,122059],{"class":125,"line":126},[123,122054,26999],{"class":337},[123,122056,122024],{"class":143},[123,122058,122027],{"class":164},[123,122060,122030],{"class":143},[14,122062,122064],{"id":122063},"_34-pip3源替换","3.4 pip3源替换",[19,122066,122067],{},"非Debian系发行版需要做。",[19,122069,122070],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122072,122073],{},"使用dnf的系统也可能不用做。",[113,122075,122077],{"className":119684,"code":122076,"language":119686,"meta":118,"style":118},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[120,122078,122079,122084,122091,122096,122101],{"__ignoreMap":118},[123,122080,122081],{"class":125,"line":126},[123,122082,122083],{"class":2673},"# 检查是否已安装 pip\n",[123,122085,122086,122089],{"class":125,"line":140},[123,122087,122088],{"class":337},"pip3",[123,122090,28714],{"class":164},[123,122092,122093],{"class":125,"line":156},[123,122094,122095],{"class":2673},"# 如果未安装，先安装 pip3（见下方）\n",[123,122097,122098],{"class":125,"line":168},[123,122099,122100],{"class":2673},"# 配置 pip 使用清华源\n",[123,122102,122103,122105,122108,122111,122114],{"class":125,"line":268},[123,122104,122088],{"class":337},[123,122106,122107],{"class":143}," config",[123,122109,122110],{"class":143}," set",[123,122112,122113],{"class":143}," global.index-url",[123,122115,122116],{"class":143}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,122118,122119],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,122121,122122],{},[3929,122123],{"alt":118,"src":122124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[113,122126,122128],{"className":119684,"code":122127,"language":119686,"meta":118,"style":118},"#安装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",[120,122129,122130,122135,122143,122154,122158,122163,122182,122186,122191,122203,122207,122212],{"__ignoreMap":118},[123,122131,122132],{"class":125,"line":126},[123,122133,122134],{"class":2673},"#安装pip3\n",[123,122136,122137,122139,122141],{"class":125,"line":140},[123,122138,26999],{"class":337},[123,122140,119705],{"class":143},[123,122142,28663],{"class":143},[123,122144,122145,122147,122149,122151],{"class":125,"line":156},[123,122146,26999],{"class":337},[123,122148,28497],{"class":143},[123,122150,341],{"class":143},[123,122152,122153],{"class":143}," python3-pip\n",[123,122155,122156],{"class":125,"line":168},[123,122157,232],{"emptyLinePlaceholder":231},[123,122159,122160],{"class":125,"line":268},[123,122161,122162],{"class":2673},"#更新pip3\n",[123,122164,122165,122167,122169,122171,122173,122175,122178,122180],{"class":125,"line":291},[123,122166,103272],{"class":337},[123,122168,103275],{"class":164},[123,122170,103298],{"class":143},[123,122172,341],{"class":143},[123,122174,28851],{"class":164},[123,122176,122177],{"class":143}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[123,122179,103303],{"class":164},[123,122181,103306],{"class":143},[123,122183,122184],{"class":125,"line":300},[123,122185,232],{"emptyLinePlaceholder":231},[123,122187,122188],{"class":125,"line":305},[123,122189,122190],{"class":2673},"#设置pip源为清华源\n",[123,122192,122193,122195,122197,122199,122201],{"class":125,"line":316},[123,122194,122088],{"class":337},[123,122196,122107],{"class":143},[123,122198,122110],{"class":143},[123,122200,122113],{"class":143},[123,122202,122116],{"class":143},[123,122204,122205],{"class":125,"line":673},[123,122206,232],{"emptyLinePlaceholder":231},[123,122208,122209],{"class":125,"line":692},[123,122210,122211],{"class":2673},"#测试\n",[123,122213,122214,122216,122218,122220,122222,122224],{"class":125,"line":713},[123,122215,103272],{"class":337},[123,122217,103275],{"class":164},[123,122219,103298],{"class":143},[123,122221,341],{"class":143},[123,122223,103303],{"class":164},[123,122225,103306],{"class":143},[19,122227,122228],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122230,122231],{},[3929,122232],{"alt":118,"src":122233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122235,122237],{"id":122236},"_35-显卡驱动安装","3.5 显卡驱动安装",[2587,122239,122241],{"id":122240},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[113,122243,122245],{"className":120911,"code":122244,"language":120913,"meta":118,"style":118},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[120,122246,122247,122252,122267,122272],{"__ignoreMap":118},[123,122248,122249],{"class":125,"line":126},[123,122250,122251],{"class":2673},"# 如果是使用apt安装的驱动\n",[123,122253,122254,122256,122258,122260,122262,122265],{"class":125,"line":140},[123,122255,26999],{"class":337},[123,122257,28497],{"class":143},[123,122259,28500],{"class":143},[123,122261,121546],{"class":164},[123,122263,122264],{"class":143}," nvidia",[123,122266,121636],{"class":164},[123,122268,122269],{"class":125,"line":156},[123,122270,122271],{"class":2673},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[123,122273,122274,122276],{"class":125,"line":168},[123,122275,26999],{"class":337},[123,122277,122278],{"class":143}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[2587,122280,122282],{"id":122281},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24425,122284,122286],{"id":122285},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25337,122288,122290],{"id":122289},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[113,122292,122294],{"className":120911,"code":122293,"language":120913,"meta":118,"style":118},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[120,122295,122296,122301,122312,122317,122327,122332],{"__ignoreMap":118},[123,122297,122298],{"class":125,"line":126},[123,122299,122300],{"class":2673},"# 安装英伟达驱动\n",[123,122302,122303,122305,122307,122309],{"class":125,"line":140},[123,122304,26999],{"class":337},[123,122306,119705],{"class":143},[123,122308,341],{"class":143},[123,122310,122311],{"class":143}," nvidia-driver-版本号\n",[123,122313,122314],{"class":125,"line":156},[123,122315,122316],{"class":2673},"# 重启 \n",[123,122318,122319,122321,122323,122325],{"class":125,"line":168},[123,122320,26999],{"class":337},[123,122322,122024],{"class":143},[123,122324,122027],{"class":164},[123,122326,122030],{"class":143},[123,122328,122329],{"class":125,"line":268},[123,122330,122331],{"class":2673},"# 检查驱动是否安装成功\n",[123,122333,122334],{"class":125,"line":291},[123,122335,122336],{"class":337},"nvidia-smi\n",[25337,122338,122340],{"id":122339},"_35212-debian","3.5.2.1.2 Debian",[113,122342,122344],{"className":120911,"code":122343,"language":120913,"meta":118,"style":118},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[120,122345,122346,122350,122364,122368,122378,122382],{"__ignoreMap":118},[123,122347,122348],{"class":125,"line":126},[123,122349,122300],{"class":2673},[123,122351,122352,122354,122356,122358,122361],{"class":125,"line":140},[123,122353,26999],{"class":337},[123,122355,119705],{"class":143},[123,122357,341],{"class":143},[123,122359,122360],{"class":143}," nvidia-driver",[123,122362,122363],{"class":143}," nvidia-settings\n",[123,122365,122366],{"class":125,"line":156},[123,122367,122316],{"class":2673},[123,122369,122370,122372,122374,122376],{"class":125,"line":168},[123,122371,26999],{"class":337},[123,122373,122024],{"class":143},[123,122375,122027],{"class":164},[123,122377,122030],{"class":143},[123,122379,122380],{"class":125,"line":268},[123,122381,122331],{"class":2673},[123,122383,122384],{"class":125,"line":291},[123,122385,122336],{"class":337},[24425,122387,122389],{"id":122388},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122391,122392,122393,122396],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2759,122394,122395],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122398,122399,122400],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25980,122401,122402],{},[2759,122403,122404],{},"（也可以不禁用桌面环境，直接进行下一步。）",[113,122406,122408],{"className":120911,"code":122407,"language":120913,"meta":118,"style":118},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[120,122409,122410,122415,122425,122430,122443,122448],{"__ignoreMap":118},[123,122411,122412],{"class":125,"line":126},[123,122413,122414],{"class":2673},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[123,122416,122417,122419,122422],{"class":125,"line":140},[123,122418,26999],{"class":337},[123,122420,122421],{"class":143}," telinit",[123,122423,122424],{"class":164}," 3\n",[123,122426,122427],{"class":125,"line":156},[123,122428,122429],{"class":2673},"# ubuntu 使用下方命令\n",[123,122431,122432,122434,122437,122440],{"class":125,"line":168},[123,122433,26999],{"class":337},[123,122435,122436],{"class":143}," service",[123,122438,122439],{"class":143}," lightdm",[123,122441,122442],{"class":143}," stop\n",[123,122444,122445],{"class":125,"line":268},[123,122446,122447],{"class":2673},"# Fedora 使用下方命令\n",[123,122449,122450,122452,122454,122457],{"class":125,"line":291},[123,122451,26999],{"class":337},[123,122453,28934],{"class":143},[123,122455,122456],{"class":143}," isolate",[123,122458,122459],{"class":143}," multi-user.target\n",[19,122461,122462],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[113,122464,122466],{"className":120911,"code":122465,"language":120913,"meta":118,"style":118},"# 编译环境+准备工作\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",[120,122467,122468,122473,122484,122489,122496,122501,122513,122518,122525,122530],{"__ignoreMap":118},[123,122469,122470],{"class":125,"line":126},[123,122471,122472],{"class":2673},"# 编译环境+准备工作\n",[123,122474,122475,122477,122479,122481],{"class":125,"line":140},[123,122476,26999],{"class":337},[123,122478,119705],{"class":143},[123,122480,341],{"class":143},[123,122482,122483],{"class":143}," build-essential\n",[123,122485,122486],{"class":125,"line":156},[123,122487,122488],{"class":2673},"# 进入到.run目录中\n",[123,122490,122491,122493],{"class":125,"line":168},[123,122492,103669],{"class":164},[123,122494,122495],{"class":143}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[123,122497,122498],{"class":125,"line":268},[123,122499,122500],{"class":2673},"# 给驱动文件增加可执行权限：\n",[123,122502,122503,122505,122507,122510],{"class":125,"line":291},[123,122504,26999],{"class":337},[123,122506,27002],{"class":143},[123,122508,122509],{"class":143}," a+x",[123,122511,122512],{"class":143}," NVIDIA-Linux-x86_64-550.107.02.run\n",[123,122514,122515],{"class":125,"line":300},[123,122516,122517],{"class":2673},"# 然后执行安装：\n",[123,122519,122520,122522],{"class":125,"line":305},[123,122521,26999],{"class":337},[123,122523,122524],{"class":143}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[123,122526,122527],{"class":125,"line":316},[123,122528,122529],{"class":2673},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[123,122531,122532,122534,122537],{"class":125,"line":673},[123,122533,26999],{"class":337},[123,122535,122536],{"class":143}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[123,122538,122539],{"class":164},"  --no-opengl-files\n",[19,122541,122542],{},"安装完毕重启即可",[113,122544,122546],{"className":120911,"code":122545,"language":120913,"meta":118,"style":118},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[120,122547,122548,122552,122558,122562],{"__ignoreMap":118},[123,122549,122550],{"class":125,"line":126},[123,122551,122316],{"class":2673},[123,122553,122554,122556],{"class":125,"line":140},[123,122555,26999],{"class":337},[123,122557,29068],{"class":143},[123,122559,122560],{"class":125,"line":156},[123,122561,122331],{"class":2673},[123,122563,122564],{"class":125,"line":168},[123,122565,122336],{"class":337},[2587,122567,122569],{"id":122568},"_353-安装cuda","3.5.3 安装CUDA",[19,122571,122572],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122574,122575],{},[3929,122576],{"alt":118,"src":122577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,122579,122580],{},[29,122581,122582],{},"先查看显卡驱动所支持的最高CUDA版本",[113,122584,122585],{"className":120911,"code":122336,"language":120913,"meta":118,"style":118},[120,122586,122587],{"__ignoreMap":118},[123,122588,122589],{"class":125,"line":126},[123,122590,122336],{"class":337},[19,122592,122593],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122595,122596],{},[3929,122597],{"alt":118,"src":122598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,122600,122601],{"start":140},[29,122602,122603],{},"下载CUDA并安装CUDA",[19,122605,120690,122606],{},[2846,122607,120693],{"href":120693,"rel":122608},[26287],[19,122610,122611],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122613,122614],{},[3929,122615],{"alt":118,"src":122616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122618,122619,122620,122625],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2846,122621,122624],{"href":122622,"rel":122623},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26287],"Vinci机器人队单片机教程","）",[19,122627,122628],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122630,122631],{},[3929,122632],{"alt":118,"src":122633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122635,122636],{},"将最下方框框里的命令敲入终端",[113,122638,122640],{"className":120911,"code":122639,"language":120913,"meta":118,"style":118},"# 在当前文件夹下创建一个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",[120,122641,122642,122647,122656,122661,122668,122673,122681,122686,122697,122702],{"__ignoreMap":118},[123,122643,122644],{"class":125,"line":126},[123,122645,122646],{"class":2673},"# 在当前文件夹下创建一个ttt的子文件夹\n",[123,122648,122649,122651,122653],{"class":125,"line":140},[123,122650,103659],{"class":337},[123,122652,31636],{"class":164},[123,122654,122655],{"class":143}," .\u002Fttt\n",[123,122657,122658],{"class":125,"line":156},[123,122659,122660],{"class":2673},"# 进入ttt文件夹\n",[123,122662,122663,122665],{"class":125,"line":168},[123,122664,103669],{"class":164},[123,122666,122667],{"class":143}," ttt\n",[123,122669,122670],{"class":125,"line":268},[123,122671,122672],{"class":2673},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[123,122674,122675,122678],{"class":125,"line":291},[123,122676,122677],{"class":337},"wget",[123,122679,122680],{"class":143}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[123,122682,122683],{"class":125,"line":300},[123,122684,122685],{"class":2673},"# 给予权限\n",[123,122687,122688,122690,122692,122694],{"class":125,"line":305},[123,122689,26999],{"class":337},[123,122691,27002],{"class":143},[123,122693,122509],{"class":143},[123,122695,122696],{"class":143}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[123,122698,122699],{"class":125,"line":316},[123,122700,122701],{"class":2673},"# 运行脚本\n",[123,122703,122704,122706],{"class":125,"line":673},[123,122705,26999],{"class":337},[123,122707,122696],{"class":143},[19,122709,122710],{},[3929,122711],{"alt":118,"src":122712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122714,122715],{},"正在安装中：",[19,122717,122718],{},[3929,122719],{"alt":118,"src":122720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122722,122723],{},"输入accept接受即可",[19,122725,122726],{},[3929,122727],{"alt":118,"src":122728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122730,122731],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122733,122734],{},[3929,122735],{"alt":118,"src":122736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122738,122739],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122741,122742],{},[3929,122743],{"alt":118,"src":122744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,122746,122747],{"start":156},[29,122748,122749],{},"配置环境",[19,122751,122752],{},"根据上方确认一下路径，比如我上面红色框起来的为",[113,122754,122756],{"className":120911,"code":122755,"language":120913,"meta":118,"style":118},"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",[120,122757,122758,122774,122789],{"__ignoreMap":118},[123,122759,122760,122763,122766,122769,122772],{"class":125,"line":126},[123,122761,122762],{"class":337},"Please",[123,122764,122765],{"class":143}," make",[123,122767,122768],{"class":143}," sure",[123,122770,122771],{"class":143}," that",[123,122773,5116],{"class":129},[123,122775,122776,122778,122781,122784,122787],{"class":125,"line":140},[123,122777,54674],{"class":337},[123,122779,122780],{"class":143},"   PATH",[123,122782,122783],{"class":143}," includes",[123,122785,122786],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[123,122788,5116],{"class":129},[123,122790,122791,122793,122796,122798,122801,122804,122806,122809,122812,122815,122818,122820,122823,122825],{"class":125,"line":156},[123,122792,54674],{"class":337},[123,122794,122795],{"class":143},"   LD_LIBRARY_PATH",[123,122797,122783],{"class":143},[123,122799,122800],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[123,122802,122803],{"class":143}," or,",[123,122805,7643],{"class":143},[123,122807,122808],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[123,122810,122811],{"class":143}," to",[123,122813,122814],{"class":143}," \u002Fetc\u002Fld.so.conf",[123,122816,122817],{"class":143}," and",[123,122819,29651],{"class":143},[123,122821,122822],{"class":143}," ldconfig",[123,122824,67005],{"class":143},[123,122826,122827],{"class":143}," root\n",[19,122829,122830],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[113,122832,122834],{"className":120911,"code":122833,"language":120913,"meta":118,"style":118},"which nvcc\n",[120,122835,122836],{"__ignoreMap":118},[123,122837,122838,122841],{"class":125,"line":126},[123,122839,122840],{"class":164},"which",[123,122842,122843],{"class":143}," nvcc\n",[19,122845,122846],{},[3929,122847],{"alt":118,"src":122848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122850,122851],{},"所以我进行以下操作：",[113,122853,122855],{"className":120911,"code":122854,"language":120913,"meta":118,"style":118},"sudo vim ~\u002F.bashrc\n",[120,122856,122857],{"__ignoreMap":118},[123,122858,122859,122861,122863],{"class":125,"line":126},[123,122860,26999],{"class":337},[123,122862,120971],{"class":143},[123,122864,122865],{"class":143}," ~\u002F.bashrc\n",[19,122867,122868],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[113,122870,122872],{"className":120911,"code":122871,"language":120913,"meta":118,"style":118},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[120,122873,122874,122886],{"__ignoreMap":118},[123,122875,122876,122878,122881,122883],{"class":125,"line":126},[123,122877,27464],{"class":133},[123,122879,122880],{"class":129}," PATH",[123,122882,134],{"class":133},[123,122884,122885],{"class":129},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[123,122887,122888,122890,122893,122895],{"class":125,"line":140},[123,122889,27464],{"class":133},[123,122891,122892],{"class":129}," LD_LIBRARY_PATH",[123,122894,134],{"class":133},[123,122896,122897],{"class":129},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122899,122900],{},[3929,122901],{"alt":118,"src":122902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[113,122904,122906],{"className":120911,"code":122905,"language":120913,"meta":118,"style":118},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[120,122907,122908,122913,122919,122924],{"__ignoreMap":118},[123,122909,122910],{"class":125,"line":126},[123,122911,122912],{"class":2673},"# 刷新当前终端的环境变量\n",[123,122914,122915,122917],{"class":125,"line":140},[123,122916,103286],{"class":164},[123,122918,122865],{"class":143},[123,122920,122921],{"class":125,"line":156},[123,122922,122923],{"class":2673},"# 验证CUDA是否安装成功\n",[123,122925,122926,122929],{"class":125,"line":168},[123,122927,122928],{"class":337},"nvcc",[123,122930,122931],{"class":164}," -V\n",[19,122933,122934],{},"出现下图这种则安装成功。",[19,122936,122937],{},[3929,122938],{"alt":118,"src":122939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[2587,122941,122943],{"id":122942},"_354-安装cudnn","3.5.4 安装cuDNN",[26,122945,122946],{},[29,122947,122948],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122950,122951,122952,122957],{},"前往 NVIDIA cuDNN 下载页面：",[2846,122953,122956],{"href":122954,"rel":122955},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26287],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122959,122960],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122962,122963],{},[3929,122964],{"alt":118,"src":122965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122967,122968],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122970,122971],{},[3929,122972],{"alt":118,"src":122973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122975,122976],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122978,122979],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122981,122982],{},[2759,122983,122984],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122986,122987],{},"下载好的：",[19,122989,122990],{},[3929,122991],{"alt":118,"src":122992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,122994,122995],{"start":140},[29,122996,122997],{},"安装cuDNN",[19,122999,123000],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123002,123003],{},[3929,123004],{"alt":118,"src":123005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123007,123008],{},"解压文件，并复制到对应位置完成安装",[113,123010,123012],{"className":120911,"code":123011,"language":120913,"meta":118,"style":118},"# 解压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",[120,123013,123014,123019,123030,123035,123042,123047,123063,123077,123082,123093,123102,123106,123122],{"__ignoreMap":118},[123,123015,123016],{"class":125,"line":126},[123,123017,123018],{"class":2673},"# 解压cuDNN文件\n",[123,123020,123021,123024,123027],{"class":125,"line":140},[123,123022,123023],{"class":337},"tar",[123,123025,123026],{"class":164}," -xvf",[123,123028,123029],{"class":143}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[123,123031,123032],{"class":125,"line":156},[123,123033,123034],{"class":2673},"# cd进文件夹\n",[123,123036,123037,123039],{"class":125,"line":168},[123,123038,103669],{"class":164},[123,123040,123041],{"class":143}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[123,123043,123044],{"class":125,"line":268},[123,123045,123046],{"class":2673},"# 复制cuDNN文件到CUDA目录\n",[123,123048,123049,123051,123053,123056,123058,123061],{"class":125,"line":291},[123,123050,26999],{"class":337},[123,123052,30282],{"class":143},[123,123054,123055],{"class":143}," include\u002Fcudnn",[123,123057,3060],{"class":164},[123,123059,123060],{"class":143},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[123,123062,5116],{"class":129},[123,123064,123065,123067,123069,123072,123074],{"class":125,"line":300},[123,123066,26999],{"class":337},[123,123068,30282],{"class":143},[123,123070,123071],{"class":143}," lib\u002Flibcudnn",[123,123073,3060],{"class":164},[123,123075,123076],{"class":143},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[123,123078,123079],{"class":125,"line":305},[123,123080,123081],{"class":2673},"# 对比一下有没有缺文件\n",[123,123083,123084,123086,123089,123091],{"class":125,"line":316},[123,123085,29182],{"class":337},[123,123087,123088],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[123,123090,3060],{"class":164},[123,123092,5116],{"class":129},[123,123094,123095,123097,123100],{"class":125,"line":673},[123,123096,29182],{"class":337},[123,123098,123099],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[123,123101,121636],{"class":164},[123,123103,123104],{"class":125,"line":692},[123,123105,122685],{"class":2673},[123,123107,123108,123110,123112,123115,123117,123119],{"class":125,"line":713},[123,123109,26999],{"class":337},[123,123111,27002],{"class":143},[123,123113,123114],{"class":143}," a+r",[123,123116,123088],{"class":143},[123,123118,3060],{"class":164},[123,123120,123121],{"class":129},"   \n",[123,123123,123124,123126,123128,123130,123132],{"class":125,"line":718},[123,123125,26999],{"class":337},[123,123127,27002],{"class":143},[123,123129,123114],{"class":143},[123,123131,123099],{"class":143},[123,123133,121636],{"class":164},[26,123135,123136],{"start":156},[29,123137,123138],{},"检查是否安装成功",[113,123140,123142],{"className":120911,"code":123141,"language":120913,"meta":118,"style":118},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[120,123143,123144,123149],{"__ignoreMap":118},[123,123145,123146],{"class":125,"line":126},[123,123147,123148],{"class":2673},"# 检查cuDNN版本命令\n",[123,123150,123151,123154,123157,123159,123161,123164,123167],{"class":125,"line":140},[123,123152,123153],{"class":337},"cat",[123,123155,123156],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[123,123158,27531],{"class":133},[123,123160,32656],{"class":337},[123,123162,123163],{"class":143}," CUDNN_MAJOR",[123,123165,123166],{"class":164}," -A",[123,123168,50130],{"class":164},[19,123170,123171],{},"出现下图这样的就是安装成功了",[19,123173,123174],{},[3929,123175],{"alt":118,"src":123176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,123178,123179],{"start":168},[29,123180,123181],{},"软链接(一般不需要)",[113,123183,123185],{"className":120911,"code":123184,"language":120913,"meta":118,"style":118},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[120,123186,123187,123192],{"__ignoreMap":118},[123,123188,123189],{"class":125,"line":126},[123,123190,123191],{"class":2673},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[123,123193,123194,123196],{"class":125,"line":140},[123,123195,26999],{"class":337},[123,123197,123198],{"class":143}," ldconfig\n",[19,123200,123201],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[113,123203,123208],{"className":123204,"code":123205,"language":123206,"meta":123207,"style":118},"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",[120,123209,123210,123215,123220,123225,123230,123235,123240],{"__ignoreMap":118},[123,123211,123212],{"class":125,"line":126},[123,123213,123214],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[123,123216,123217],{"class":125,"line":140},[123,123218,123219],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[123,123221,123222],{"class":125,"line":156},[123,123223,123224],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[123,123226,123227],{"class":125,"line":168},[123,123228,123229],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[123,123231,123232],{"class":125,"line":268},[123,123233,123234],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[123,123236,123237],{"class":125,"line":291},[123,123238,123239],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[123,123241,123242],{"class":125,"line":300},[123,123243,123244],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123246,123247],{},"运行下方的命令",[113,123249,123251],{"className":120911,"code":123250,"language":120913,"meta":118,"style":118},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[120,123252,123253,123258,123265,123270],{"__ignoreMap":118},[123,123254,123255],{"class":125,"line":126},[123,123256,123257],{"class":2673},"# cd进入CUDA路径\n",[123,123259,123260,123262],{"class":125,"line":140},[123,123261,103669],{"class":164},[123,123263,123264],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[123,123266,123267],{"class":125,"line":156},[123,123268,123269],{"class":2673}," # 查看本路径下的需要软链接的文件名\n",[123,123271,123272],{"class":125,"line":168},[123,123273,123274],{"class":337}," ls\n",[19,123276,123277],{},[3929,123278],{"alt":118,"src":123279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123281,123282,123283,20838,123286,20838,123289,123292],{},"如上图，我需要将",[120,123284,123285],{},"libcudnn_xxx_xxxxx.so.8.9.7",[120,123287,123288],{},"libcudnn_xxx_xxxxx.so.8",[120,123290,123291],{},"libcudnn_xxx_xxxxx.so","软链接",[113,123294,123296],{"className":120911,"code":123295,"language":120913,"meta":118,"style":118},"# 创建符号链接。对于每个 .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",[120,123297,123298,123303,123319,123333,123347,123361,123375,123389,123403,123408,123414,123419],{"__ignoreMap":118},[123,123299,123300],{"class":125,"line":126},[123,123301,123302],{"class":2673},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[123,123304,123305,123307,123310,123313,123316],{"class":125,"line":140},[123,123306,26999],{"class":337},[123,123308,123309],{"class":143}," ln",[123,123311,123312],{"class":164}," -sf",[123,123314,123315],{"class":143}," libcudnn_cnn_train.so.8.9.7",[123,123317,123318],{"class":143}," libcudnn_cnn_train.so.8\n",[123,123320,123321,123323,123325,123327,123330],{"class":125,"line":156},[123,123322,26999],{"class":337},[123,123324,123309],{"class":143},[123,123326,123312],{"class":164},[123,123328,123329],{"class":143}," libcudnn_adv_infer.so.8.9.7",[123,123331,123332],{"class":143}," libcudnn_adv_infer.so.8\n",[123,123334,123335,123337,123339,123341,123344],{"class":125,"line":168},[123,123336,26999],{"class":337},[123,123338,123309],{"class":143},[123,123340,123312],{"class":164},[123,123342,123343],{"class":143}," libcudnn_adv_train.so.8.9.7",[123,123345,123346],{"class":143}," libcudnn_adv_train.so.8\n",[123,123348,123349,123351,123353,123355,123358],{"class":125,"line":268},[123,123350,26999],{"class":337},[123,123352,123309],{"class":143},[123,123354,123312],{"class":164},[123,123356,123357],{"class":143}," libcudnn_cnn_infer.so.8.9.7",[123,123359,123360],{"class":143}," libcudnn_cnn_infer.so.8\n",[123,123362,123363,123365,123367,123369,123372],{"class":125,"line":291},[123,123364,26999],{"class":337},[123,123366,123309],{"class":143},[123,123368,123312],{"class":164},[123,123370,123371],{"class":143}," libcudnn.so.8.9.7",[123,123373,123374],{"class":143}," libcudnn.so.8\n",[123,123376,123377,123379,123381,123383,123386],{"class":125,"line":300},[123,123378,26999],{"class":337},[123,123380,123309],{"class":143},[123,123382,123312],{"class":164},[123,123384,123385],{"class":143}," libcudnn_ops_infer.so.8.9.7",[123,123387,123388],{"class":143}," libcudnn_ops_infer.so.8\n",[123,123390,123391,123393,123395,123397,123400],{"class":125,"line":305},[123,123392,26999],{"class":337},[123,123394,123309],{"class":143},[123,123396,123312],{"class":164},[123,123398,123399],{"class":143}," libcudnn_ops_train.so.8.9.7",[123,123401,123402],{"class":143}," libcudnn_ops_train.so.8\n",[123,123404,123405],{"class":125,"line":316},[123,123406,123407],{"class":2673},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[123,123409,123410,123412],{"class":125,"line":673},[123,123411,26999],{"class":337},[123,123413,123198],{"class":143},[123,123415,123416],{"class":125,"line":692},[123,123417,123418],{"class":2673},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[123,123420,123421,123423,123426,123429,123431,123434],{"class":125,"line":713},[123,123422,29182],{"class":337},[123,123424,123425],{"class":164}," -l",[123,123427,123428],{"class":143}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[123,123430,3060],{"class":164},[123,123432,123433],{"class":143},".so",[123,123435,121636],{"class":164},[2587,123437,123439],{"id":123438},"_355-常见问题","3.5.5 常见问题",[26,123441,123442],{},[29,123443,123444],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[113,123446,123448],{"className":120911,"code":123447,"language":120913,"meta":118,"style":118},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[120,123449,123450],{"__ignoreMap":118},[123,123451,123452,123454,123456],{"class":125,"line":126},[123,123453,26999],{"class":337},[123,123455,120971],{"class":143},[123,123457,123458],{"class":143}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123460,123461],{},"blacklist-nouveau.conf文件内容如下：",[113,123463,123465],{"className":120911,"code":123464,"language":120913,"meta":118,"style":118},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[120,123466,123467,123475,123482,123494,123504],{"__ignoreMap":118},[123,123468,123469,123472],{"class":125,"line":126},[123,123470,123471],{"class":337},"blacklist",[123,123473,123474],{"class":143}," nouveau\n",[123,123476,123477,123479],{"class":125,"line":140},[123,123478,123471],{"class":337},[123,123480,123481],{"class":143}," lbm-nouveau\n",[123,123483,123484,123486,123489,123492],{"class":125,"line":156},[123,123485,118318],{"class":337},[123,123487,123488],{"class":143}," nouveau",[123,123490,123491],{"class":143}," modeset=",[123,123493,5526],{"class":164},[123,123495,123496,123499,123501],{"class":125,"line":168},[123,123497,123498],{"class":164},"alias",[123,123500,123488],{"class":143},[123,123502,123503],{"class":143}," off\n",[123,123505,123506,123508,123511],{"class":125,"line":268},[123,123507,123498],{"class":164},[123,123509,123510],{"class":143}," lbm-nouveau",[123,123512,123503],{"class":143},[19,123514,123515],{},"接着运行下方命令",[113,123517,123519],{"className":120911,"code":123518,"language":120913,"meta":118,"style":118},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[120,123520,123521,123531,123536],{"__ignoreMap":118},[123,123522,123523,123525,123528],{"class":125,"line":126},[123,123524,26999],{"class":337},[123,123526,123527],{"class":143}," update-initramfs",[123,123529,123530],{"class":164}," -u\n",[123,123532,123533],{"class":125,"line":140},[123,123534,123535],{"class":337},"或者\n",[123,123537,123538,123540,123543],{"class":125,"line":156},[123,123539,26999],{"class":337},[123,123541,123542],{"class":143}," dracut",[123,123544,123545],{"class":164}," --force\n",[19,123547,123548],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[113,123550,123552],{"className":120911,"code":123551,"language":120913,"meta":118,"style":118},"lsmod | grep nouveau\n",[120,123553,123554],{"__ignoreMap":118},[123,123555,123556,123559,123561,123563],{"class":125,"line":126},[123,123557,123558],{"class":337},"lsmod",[123,123560,27531],{"class":133},[123,123562,32656],{"class":337},[123,123564,123474],{"class":143},[26,123566,123567],{"start":140},[29,123568,123569],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[113,123571,123573],{"className":120911,"code":123572,"language":120913,"meta":118,"style":118},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[120,123574,123575],{"__ignoreMap":118},[123,123576,123577,123579,123581],{"class":125,"line":126},[123,123578,26999],{"class":337},[123,123580,120971],{"class":143},[123,123582,123583],{"class":143}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123585,123586],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[113,123588,123590],{"className":120911,"code":123589,"language":120913,"meta":118,"style":118},"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",[120,123591,123592,123600,123608,123616,123623,123631,123641,123649],{"__ignoreMap":118},[123,123593,123594,123597],{"class":125,"line":126},[123,123595,123596],{"class":337},"Section",[123,123598,123599],{"class":143}," \"OutputClass\"\n",[123,123601,123602,123605],{"class":125,"line":140},[123,123603,123604],{"class":337},"   Identifier",[123,123606,123607],{"class":143}," \"nvidia\"\n",[123,123609,123610,123613],{"class":125,"line":156},[123,123611,123612],{"class":337},"   MatchDriver",[123,123614,123615],{"class":143}," \"nvidia-drm\"\n",[123,123617,123618,123621],{"class":125,"line":168},[123,123619,123620],{"class":337},"   Driver",[123,123622,123607],{"class":143},[123,123624,123625,123628],{"class":125,"line":268},[123,123626,123627],{"class":337},"   Option",[123,123629,123630],{"class":143}," \"AllowEmptyInitialConfiguration\"\n",[123,123632,123633,123635,123638],{"class":125,"line":291},[123,123634,123627],{"class":337},[123,123636,123637],{"class":143}," \"PrimaryGPU\"",[123,123639,123640],{"class":143}," \"yes\"\n",[123,123642,123643,123646],{"class":125,"line":300},[123,123644,123645],{"class":337},"   ModulePath",[123,123647,123648],{"class":143}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[123,123650,123651],{"class":125,"line":305},[123,123652,123653],{"class":337},"EndSection\n",[26,123655,123656],{"start":156},[29,123657,123658],{},"安装N卡驱动提示错误",[113,123660,123662],{"className":123204,"code":123661,"language":123206,"meta":123207,"style":118},"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",[120,123663,123664],{"__ignoreMap":118},[123,123665,123666],{"class":125,"line":126},[123,123667,123661],{},[26,123669,123670],{},[29,123671,123672],{},"检查当前运行的内核版本：",[19,123674,123675],{},"运行以下命令以查看你当前正在使用的内核版本：",[113,123677,123679],{"className":119684,"code":123678,"language":119686,"meta":118,"style":118},"uname -r\n",[120,123680,123681],{"__ignoreMap":118},[123,123682,123683,123685],{"class":125,"line":126},[123,123684,72604],{"class":337},[123,123686,123687],{"class":164}," -r\n",[26,123689,123690],{"start":140},[29,123691,123692],{},"安装内核开发文件：",[19,123694,123695,123696,123699],{},"确保你已经安装了与当前内核版本相匹配的 ",[120,123697,123698],{},"kernel-devel"," 包。运行以下命令来安装：",[113,123701,123703],{"className":119684,"code":123702,"language":119686,"meta":118,"style":118},"sudo dnf install kernel-devel-$(uname -r)\n",[120,123704,123705],{"__ignoreMap":118},[123,123706,123707,123709,123711,123713,123716,123718,123720,123722],{"class":125,"line":126},[123,123708,26999],{"class":337},[123,123710,28736],{"class":143},[123,123712,341],{"class":143},[123,123714,123715],{"class":143}," kernel-devel-",[123,123717,27521],{"class":129},[123,123719,72604],{"class":337},[123,123721,122027],{"class":164},[123,123723,288],{"class":129},[19,123725,123726],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,123728,123729],{"start":156},[29,123730,123731],{},"安装内核源代码（如果需要）：",[19,123733,123734],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[113,123736,123738],{"className":119684,"code":123737,"language":119686,"meta":118,"style":118},"sudo dnf install kernel-headers kernel-source\n",[120,123739,123740],{"__ignoreMap":118},[123,123741,123742,123744,123746,123748,123751],{"class":125,"line":126},[123,123743,26999],{"class":337},[123,123745,28736],{"class":143},[123,123747,341],{"class":143},[123,123749,123750],{"class":143}," kernel-headers",[123,123752,123753],{"class":143}," kernel-source\n",[26,123755,123756],{"start":168},[29,123757,123758],{},"检查安装：",[19,123760,123761,123762,123765],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[120,123763,123764],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[113,123767,123769],{"className":119684,"code":123768,"language":119686,"meta":118,"style":118},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[120,123770,123771],{"__ignoreMap":118},[123,123772,123773,123775],{"class":125,"line":126},[123,123774,29182],{"class":337},[123,123776,123777],{"class":143}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123779,123780,123781,123784],{},"如果仍然遇到问题，可以通过 ",[120,123782,123783],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2526,123786,123787],{},"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":118,"searchDepth":140,"depth":140,"links":123789},[123790,123794,123804,123808,123809],{"id":120887,"depth":140,"text":120888,"children":123791},[123792,123793],{"id":120897,"depth":156,"text":120898},{"id":120907,"depth":156,"text":120908},{"id":121107,"depth":140,"text":121108,"children":123795},[123796,123797,123798,123799,123800,123801,123802,123803],{"id":121111,"depth":156,"text":121112},{"id":121181,"depth":156,"text":121182},{"id":121270,"depth":156,"text":121271},{"id":121515,"depth":156,"text":121516},{"id":121585,"depth":156,"text":121586},{"id":121652,"depth":156,"text":121653},{"id":121687,"depth":156,"text":121688},{"id":121742,"depth":156,"text":121743},{"id":121793,"depth":140,"text":121794,"children":123805},[123806,123807],{"id":121797,"depth":156,"text":121798},{"id":121877,"depth":156,"text":121878},{"id":122063,"depth":140,"text":122064},{"id":122236,"depth":140,"text":122237,"children":123810},[123811,123812,123813,123814,123815],{"id":122240,"depth":156,"text":122241},{"id":122281,"depth":156,"text":122282},{"id":122568,"depth":156,"text":122569},{"id":122942,"depth":156,"text":122943},{"id":123438,"depth":156,"text":123439},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120879,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123822,"title":123823,"body":123824,"description":2544,"extension":2545,"meta":124164,"navigation":231,"path":124165,"seo":124166,"stem":124167,"__hash__":124168},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123825,"toc":124162},[123826,123829,123834,123837,124083,124088,124091,124127,124130,124159],[10,123827,123823],{"id":123828},"_4-命令教程长期积累",[26,123830,123831],{},[29,123832,123833],{},"大多数命令",[19,123835,123836],{},"常用 Linux 命令速查：",[113,123838,123840],{"className":119684,"code":123839,"language":119686,"meta":118,"style":118},"# 文件与目录\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",[120,123841,123842,123847,123854,123861,123869,123876,123883,123891,123899,123906,123913,123921,123925,123930,123937,123945,123952,123956,123961,123968,123976,123984,123992,124000,124004,124009,124017,124024,124031,124039,124047,124051,124056,124065,124074],{"__ignoreMap":118},[123,123843,123844],{"class":125,"line":126},[123,123845,123846],{"class":2673},"# 文件与目录\n",[123,123848,123849,123851],{"class":125,"line":140},[123,123850,29182],{"class":337},[123,123852,123853],{"class":2673},"        # 列出目录内容\n",[123,123855,123856,123858],{"class":125,"line":156},[123,123857,103669],{"class":164},[123,123859,123860],{"class":2673},"        # 切换目录\n",[123,123862,123863,123866],{"class":125,"line":168},[123,123864,123865],{"class":164},"pwd",[123,123867,123868],{"class":2673},"       # 显示当前路径\n",[123,123870,123871,123873],{"class":125,"line":268},[123,123872,103659],{"class":337},[123,123874,123875],{"class":2673},"     # 创建目录\n",[123,123877,123878,123880],{"class":125,"line":291},[123,123879,27744],{"class":337},[123,123881,123882],{"class":2673},"        # 删除文件或目录\n",[123,123884,123885,123888],{"class":125,"line":300},[123,123886,123887],{"class":337},"cp",[123,123889,123890],{"class":2673},"        # 复制文件或目录\n",[123,123892,123893,123896],{"class":125,"line":305},[123,123894,123895],{"class":337},"mv",[123,123897,123898],{"class":2673},"        # 移动\u002F重命名文件或目录\n",[123,123900,123901,123903],{"class":125,"line":316},[123,123902,103676],{"class":337},[123,123904,123905],{"class":2673},"     # 创建空文件\n",[123,123907,123908,123910],{"class":125,"line":673},[123,123909,123153],{"class":337},[123,123911,123912],{"class":2673},"       # 查看文件内容\n",[123,123914,123915,123918],{"class":125,"line":692},[123,123916,123917],{"class":337},"head\u002Ftail",[123,123919,123920],{"class":2673}," # 查看文件头部\u002F尾部\n",[123,123922,123923],{"class":125,"line":713},[123,123924,232],{"emptyLinePlaceholder":231},[123,123926,123927],{"class":125,"line":718},[123,123928,123929],{"class":2673},"# 权限管理\n",[123,123931,123932,123934],{"class":125,"line":1138},[123,123933,27034],{"class":337},[123,123935,123936],{"class":2673},"     # 修改文件权限\n",[123,123938,123939,123942],{"class":125,"line":1429},[123,123940,123941],{"class":337},"chown",[123,123943,123944],{"class":2673},"     # 修改文件所有者\n",[123,123946,123947,123949],{"class":125,"line":1439},[123,123948,26999],{"class":337},[123,123950,123951],{"class":2673},"      # 以管理员身份执行\n",[123,123953,123954],{"class":125,"line":1444},[123,123955,232],{"emptyLinePlaceholder":231},[123,123957,123958],{"class":125,"line":1453},[123,123959,123960],{"class":2673},"# 系统信息\n",[123,123962,123963,123965],{"class":125,"line":1458},[123,123964,72604],{"class":337},[123,123966,123967],{"class":2673},"     # 系统信息\n",[123,123969,123970,123973],{"class":125,"line":1476},[123,123971,123972],{"class":337},"df",[123,123974,123975],{"class":2673},"        # 磁盘使用情况\n",[123,123977,123978,123981],{"class":125,"line":1494},[123,123979,123980],{"class":337},"free",[123,123982,123983],{"class":2673},"      # 内存使用情况\n",[123,123985,123986,123989],{"class":125,"line":1499},[123,123987,123988],{"class":337},"top\u002Fhtop",[123,123990,123991],{"class":2673},"  # 进程监控\n",[123,123993,123994,123997],{"class":125,"line":1517},[123,123995,123996],{"class":337},"ps",[123,123998,123999],{"class":2673},"        # 查看进程\n",[123,124001,124002],{"class":125,"line":1534},[123,124003,232],{"emptyLinePlaceholder":231},[123,124005,124006],{"class":125,"line":1539},[123,124007,124008],{"class":2673},"# 网络\n",[123,124010,124011,124014],{"class":125,"line":2080},[123,124012,124013],{"class":337},"ping",[123,124015,124016],{"class":2673},"      # 测试网络连通性\n",[123,124018,124019,124021],{"class":125,"line":2097},[123,124020,29270],{"class":337},[123,124022,124023],{"class":2673},"      # 发送 HTTP 请求\n",[123,124025,124026,124028],{"class":125,"line":2114},[123,124027,122677],{"class":337},[123,124029,124030],{"class":2673},"      # 下载文件\n",[123,124032,124033,124036],{"class":125,"line":2125},[123,124034,124035],{"class":337},"ssh",[123,124037,124038],{"class":2673},"       # 远程登录\n",[123,124040,124041,124044],{"class":125,"line":2130},[123,124042,124043],{"class":337},"scp",[123,124045,124046],{"class":2673},"       # 远程文件传输\n",[123,124048,124049],{"class":125,"line":5033},[123,124050,232],{"emptyLinePlaceholder":231},[123,124052,124053],{"class":125,"line":5041},[123,124054,124055],{"class":2673},"# 包管理（Debian\u002FUbuntu）\n",[123,124057,124058,124060,124062],{"class":125,"line":5046},[123,124059,119756],{"class":337},[123,124061,119735],{"class":143},[123,124063,124064],{"class":2673},"   # 更新软件源\n",[123,124066,124067,124069,124071],{"class":125,"line":5052},[123,124068,119756],{"class":337},[123,124070,341],{"class":143},[123,124072,124073],{"class":2673},"  # 安装软件包\n",[123,124075,124076,124078,124080],{"class":125,"line":5058},[123,124077,119756],{"class":337},[123,124079,28500],{"class":143},[123,124081,124082],{"class":2673},"   # 卸载软件包\n",[26,124084,124085],{"start":140},[29,124086,124087],{},"KDE Dolphin 以root打开",[19,124089,124090],{},"kde5",[113,124092,124094],{"className":119684,"code":124093,"language":119686,"meta":118,"style":118},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[120,124095,124096],{"__ignoreMap":118},[123,124097,124098,124101,124104,124107,124109,124111,124114,124117,124119,124122,124124],{"class":125,"line":126},[123,124099,124100],{"class":337},"pkexec",[123,124102,124103],{"class":143}," env",[123,124105,124106],{"class":143}," DISPLAY=",[123,124108,30564],{"class":129},[123,124110,30622],{"class":143},[123,124112,124113],{"class":129},"$XAUTHORITY ",[123,124115,124116],{"class":143},"KDE_SESSION_VERSION=",[123,124118,2926],{"class":164},[123,124120,124121],{"class":143}," KDE_FULL_SESSION=",[123,124123,3829],{"class":164},[123,124125,124126],{"class":143}," dolphin\n",[19,124128,124129],{},"kde6",[113,124131,124133],{"className":119684,"code":124132,"language":119686,"meta":118,"style":118},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[120,124134,124135],{"__ignoreMap":118},[123,124136,124137,124139,124141,124143,124145,124147,124149,124151,124153,124155,124157],{"class":125,"line":126},[123,124138,124100],{"class":337},[123,124140,124103],{"class":143},[123,124142,124106],{"class":143},[123,124144,30564],{"class":129},[123,124146,30622],{"class":143},[123,124148,124113],{"class":129},[123,124150,124116],{"class":143},[123,124152,2951],{"class":164},[123,124154,124121],{"class":143},[123,124156,3829],{"class":164},[123,124158,124126],{"class":143},[2526,124160,124161],{},"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":118,"searchDepth":140,"depth":140,"links":124163},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123823,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124170,"title":124171,"body":124172,"description":2544,"extension":2545,"meta":124186,"navigation":231,"path":124187,"seo":124188,"stem":124189,"__hash__":124190},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124173,"toc":124184},[124174,124177],[10,124175,124171],{"id":124176},"_5-各种环境配置",[19,124178,124179],{},[2846,124180,124183],{"href":124181,"rel":124182},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26287],"电控组环境搭建大全",{"title":118,"searchDepth":140,"depth":140,"links":124185},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124171,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124192,"title":124193,"body":124194,"description":2544,"extension":2545,"meta":124542,"navigation":231,"path":124543,"seo":124544,"stem":124545,"__hash__":124546},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124195,"toc":124534},[124196,124199,124203,124207,124211,124216,124223,124227,124520,124524,124531],[10,124197,124193],{"id":124198},"_6-拓展功能",[14,124200,124202],{"id":124201},"_61-wine","6.1 Wine",[14,124204,124206],{"id":124205},"_62-android","6.2 Android",[2587,124208,124210],{"id":124209},"_621-i卡a卡","6.2.1 I卡、A卡",[26,124212,124213],{},[29,124214,124215],{},"Wayland-Waydroid(体验超级好)",[19,124217,124218,124219],{},"Waydroid 官网与安装指南：",[2846,124220,124221],{"href":124221,"rel":124222},"https:\u002F\u002Fwaydro.id\u002F",[26287],[2587,124224,124226],{"id":124225},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,124228,124229],{},[29,124230,124231,124232,124234,124235,124239,124241,124244,124249,124446],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56119,124233],{},"BlissOS 官网下载：",[2846,124236,124237],{"href":124237,"rel":124238},"https:\u002F\u002Fblissos.org\u002F",[26287],[56119,124240],{},[3929,124242],{"alt":118,"src":124243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,124245,124246],{"start":156},[29,124247,124248],{},"比较推荐的配置",[113,124250,124252],{"className":119684,"code":124251,"language":119686,"meta":118,"style":118},"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",[120,124253,124254,124261,124271,124281,124291,124303,124313,124320,124330,124339,124348,124358,124368,124377,124387,124397,124409,124419,124428,124438],{"__ignoreMap":118},[123,124255,124256,124259],{"class":125,"line":126},[123,124257,124258],{"class":337},"qemu-system-x86_64",[123,124260,27100],{"class":164},[123,124262,124263,124266,124269],{"class":125,"line":140},[123,124264,124265],{"class":164},"        -M",[123,124267,124268],{"class":143}," q35,vmport=off",[123,124270,27100],{"class":164},[123,124272,124273,124276,124279],{"class":125,"line":156},[123,124274,124275],{"class":164},"        -accel",[123,124277,124278],{"class":143}," kvm",[123,124280,27100],{"class":164},[123,124282,124283,124286,124289],{"class":125,"line":168},[123,124284,124285],{"class":164},"        -cpu",[123,124287,124288],{"class":143}," qemu64,+sse3,+sse4.2",[123,124290,27100],{"class":164},[123,124292,124293,124296,124299,124301],{"class":125,"line":268},[123,124294,124295],{"class":164},"        -smp",[123,124297,124298],{"class":143}," 8,cores=",[123,124300,2901],{"class":164},[123,124302,27100],{"class":164},[123,124304,124305,124308,124311],{"class":125,"line":291},[123,124306,124307],{"class":164},"        -m",[123,124309,124310],{"class":143}," 6G",[123,124312,27100],{"class":164},[123,124314,124315,124318],{"class":125,"line":300},[123,124316,124317],{"class":164},"        -usb",[123,124319,27100],{"class":164},[123,124321,124322,124325,124328],{"class":125,"line":305},[123,124323,124324],{"class":164},"        -device",[123,124326,124327],{"class":143}," virtio-tablet",[123,124329,27100],{"class":164},[123,124331,124332,124334,124337],{"class":125,"line":316},[123,124333,124324],{"class":164},[123,124335,124336],{"class":143}," virtio-keyboard",[123,124338,27100],{"class":164},[123,124340,124341,124343,124346],{"class":125,"line":673},[123,124342,124324],{"class":164},[123,124344,124345],{"class":143}," usb-tablet",[123,124347,27100],{"class":164},[123,124349,124350,124353,124356],{"class":125,"line":692},[123,124351,124352],{"class":164},"        -bios",[123,124354,124355],{"class":143}," OVMF-pure-efi64.fd",[123,124357,27100],{"class":164},[123,124359,124360,124363,124366],{"class":125,"line":713},[123,124361,124362],{"class":164},"        -net",[123,124364,124365],{"class":143}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[123,124367,27100],{"class":164},[123,124369,124370,124372,124375],{"class":125,"line":718},[123,124371,124362],{"class":164},[123,124373,124374],{"class":143}," nic,model=virtio",[123,124376,27100],{"class":164},[123,124378,124379,124382,124385],{"class":125,"line":1138},[123,124380,124381],{"class":164},"        -audio",[123,124383,124384],{"class":143}," sdl,model=hda",[123,124386,27100],{"class":164},[123,124388,124389,124392,124395],{"class":125,"line":1429},[123,124390,124391],{"class":164},"        -display",[123,124393,124394],{"class":143}," sdl,gl=on,show-cursor=on",[123,124396,27100],{"class":164},[123,124398,124399,124401,124404,124407],{"class":125,"line":1439},[123,124400,124324],{"class":164},[123,124402,124403],{"class":143}," virtio-vga-gl,xres=1920,yres=",[123,124405,124406],{"class":164},"1080",[123,124408,27100],{"class":164},[123,124410,124411,124414,124417],{"class":125,"line":1444},[123,124412,124413],{"class":164},"        -drive",[123,124415,124416],{"class":143}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[123,124418,27100],{"class":164},[123,124420,124421,124423,124426],{"class":125,"line":1453},[123,124422,124413],{"class":164},[123,124424,124425],{"class":143}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[123,124427,27100],{"class":164},[123,124429,124430,124433,124436],{"class":125,"line":1458},[123,124431,124432],{"class":164},"        -monitor",[123,124434,124435],{"class":143}," stdio",[123,124437,27100],{"class":164},[123,124439,124440,124443],{"class":125,"line":1476},[123,124441,124442],{"class":164},"        -serial",[123,124444,124445],{"class":143}," none\n",[26,124447,124448],{"start":268},[29,124449,124450,124451],{},"常用操作：",[26,124452,124453,124456,124512],{},[29,124454,124455],{},"全屏：Ctrl+Alt+F",[29,124457,124458,124459,124464],{},"adb调试",[26,124460,124461],{},[29,124462,124463],{},"使Linux与Android用ADB连接。",[113,124465,124467],{"className":119684,"code":124466,"language":119686,"meta":118,"style":118},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[120,124468,124469,124474,124485,124490,124502,124507],{"__ignoreMap":118},[123,124470,124471],{"class":125,"line":126},[123,124472,124473],{"class":2673},"# 连接安卓\n",[123,124475,124476,124479,124482],{"class":125,"line":140},[123,124477,124478],{"class":337},"adb",[123,124480,124481],{"class":143}," connect",[123,124483,124484],{"class":164}," 127.0.0.1\n",[123,124486,124487],{"class":125,"line":156},[123,124488,124489],{"class":2673},"# 打开shell\n",[123,124491,124492,124494,124496,124499],{"class":125,"line":168},[123,124493,124478],{"class":337},[123,124495,29304],{"class":164},[123,124497,124498],{"class":143}," 127.0.0.1:5555",[123,124500,124501],{"class":143}," shell\n",[123,124503,124504],{"class":125,"line":268},[123,124505,124506],{"class":2673},"# 使用root权限\n",[123,124508,124509],{"class":125,"line":291},[123,124510,124511],{"class":337},"su\n",[29,124513,124514,124515],{},"中文输入法",[26,124516,124517],{},[29,124518,124519],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124521,124523],{"id":124522},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124525,124526,124527],{},"rEFInd 官网与文档：",[2846,124528,124529],{"href":124529,"rel":124530},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26287],[2526,124532,124533],{},"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":118,"searchDepth":140,"depth":140,"links":124535},[124536,124537,124541],{"id":124201,"depth":140,"text":124202},{"id":124205,"depth":140,"text":124206,"children":124538},[124539,124540],{"id":124209,"depth":156,"text":124210},{"id":124225,"depth":156,"text":124226},{"id":124522,"depth":140,"text":124523},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124193,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124548,"title":124549,"body":124550,"description":2544,"extension":2545,"meta":127849,"navigation":231,"path":127850,"seo":127851,"stem":127852,"__hash__":127853},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124551,"toc":127823},[124552,124555,124559,124562,124569,124819,124822,124894,124897,124901,124905,124910,124913,124916,124919,124924,124927,124930,124933,124938,124941,124946,124949,124952,124957,124960,124965,124968,124972,124976,124979,124984,124987,125001,125004,125007,125016,125019,125028,125031,125034,125043,125046,125055,125058,125061,125070,125073,125076,125091,125094,125097,125106,125111,125114,125117,125126,125129,125138,125141,125150,125153,125162,125167,125170,125178,125183,125186,125195,125198,125206,125211,125214,125223,125226,125229,125233,125236,125241,125244,125249,125263,125268,125273,125284,125289,125295,125300,125315,125320,125323,125328,125333,125338,125346,125351,125358,125363,125374,125379,125382,125386,125389,125392,125397,125400,125419,125424,125427,125436,125441,125444,125466,125469,125499,125502,125507,125510,125524,125529,125548,125551,125554,125559,125571,125576,125581,125584,125589,125592,125607,125610,125615,125620,125624,125629,125669,125672,125676,125682,125688,125693,125696,125703,125708,125715,125718,125721,125728,125742,125745,125805,125808,125822,125834,125837,125840,125843,125907,125910,125913,125916,125936,125939,125944,125951,125955,125958,125962,125967,125972,125976,125979,125982,126024,126029,126032,126054,126069,126071,126076,126088,126148,126150,126152,126206,126208,126210,126216,126221,126224,126229,126233,126236,126298,126303,126306,126308,126312,126324,126406,126408,126410,126464,126470,126472,126476,126481,126483,126488,126492,126512,126547,126551,126554,126557,126560,126567,126570,126582,126585,126600,126603,126622,126670,126673,126690,126693,126707,126712,126715,126724,126739,126751,126789,126794,126803,126808,126813,126839,126848,126852,126856,126861,126864,126868,126872,126877,126880,126885,126888,126893,126896,126901,126904,126908,126913,126916,126921,126924,126928,126933,126936,126941,126944,126949,126952,126956,126961,126964,126969,126972,126977,126980,126984,126989,126992,126997,127000,127005,127008,127013,127016,127021,127024,127029,127032,127036,127041,127044,127049,127056,127060,127065,127068,127073,127076,127080,127085,127088,127091,127094,127097,127100,127104,127107,127117,127122,127127,127149,127154,127159,127166,127170,127175,127178,127181,127186,127189,127192,127195,127198,127201,127204,127207,127210,127213,127216,127219,127222,127227,127232,127237,127242,127247,127252,127257,127260,127264,127267,127271,127276,127281,127286,127291,127295,127301,127309,127314,127317,127322,127337,127340,127345,127379,127394,127397,127452,127478,127490,127493,127502,127505,127520,127525,127528,127534,127539,127542,127547,127550,127555,127560,127567,127570,127585,127588,127623,127628,127636,127674,127677,127680,127685,127688,127693,127704,127738,127743,127746,127755,127760,127766,127769,127774,127783,127788,127791,127794,127799,127807,127810,127815,127820],[10,124553,124549],{"id":124554},"_7-其他操作",[14,124556,124558],{"id":124557},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124560,124561],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124563,124564,124565,124568],{},"进入工控机的硬盘目录，进入",[120,124566,124567],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[113,124570,124574],{"className":124571,"code":124572,"language":124573,"meta":118,"style":118},"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",[120,124575,124576,124584,124595,124602,124609,124621,124628,124640,124651,124662,124669,124676,124683,124695,124707,124714,124726,124738,124745,124757,124769,124781,124792,124799,124810],{"__ignoreMap":118},[123,124577,124578,124581],{"class":125,"line":126},[123,124579,124580],{"class":53707},"network",[123,124582,124583],{"class":129},": \n",[123,124585,124586,124589,124591,124593],{"class":125,"line":140},[123,124587,124588],{"class":53707},"  version",[123,124590,147],{"class":129},[123,124592,2692],{"class":164},[123,124594,5116],{"class":129},[123,124596,124597,124600],{"class":125,"line":156},[123,124598,124599],{"class":53707},"  wifis",[123,124601,124583],{"class":129},[123,124603,124604,124607],{"class":125,"line":168},[123,124605,124606],{"class":53707},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[123,124608,124583],{"class":129},[123,124610,124611,124614,124616,124619],{"class":125,"line":268},[123,124612,124613],{"class":53707},"      renderer",[123,124615,147],{"class":129},[123,124617,124618],{"class":143},"NetworkManager",[123,124620,5116],{"class":129},[123,124622,124623,124626],{"class":125,"line":291},[123,124624,124625],{"class":53707},"      match",[123,124627,124583],{"class":129},[123,124629,124630,124633,124635,124638],{"class":125,"line":300},[123,124631,124632],{"class":53707},"        name",[123,124634,147],{"class":129},[123,124636,124637],{"class":143},"\"wlan0\"",[123,124639,5116],{"class":129},[123,124641,124642,124645,124647,124649],{"class":125,"line":305},[123,124643,124644],{"class":53707},"      dhcp4",[123,124646,147],{"class":129},[123,124648,3829],{"class":164},[123,124650,5116],{"class":129},[123,124652,124653,124656,124658,124660],{"class":125,"line":316},[123,124654,124655],{"class":53707},"      dhcp6",[123,124657,147],{"class":129},[123,124659,3829],{"class":164},[123,124661,5116],{"class":129},[123,124663,124664,124667],{"class":125,"line":673},[123,124665,124666],{"class":53707},"      access-points",[123,124668,124583],{"class":129},[123,124670,124671,124674],{"class":125,"line":692},[123,124672,124673],{"class":143},"        \"EMIS_Vinci_Robocon_5G\"",[123,124675,124583],{"class":129},[123,124677,124678,124681],{"class":125,"line":713},[123,124679,124680],{"class":53707},"          auth",[123,124682,124583],{"class":129},[123,124684,124685,124688,124690,124693],{"class":125,"line":718},[123,124686,124687],{"class":53707},"            key-management",[123,124689,147],{"class":129},[123,124691,124692],{"class":143},"\"psk\"",[123,124694,5116],{"class":129},[123,124696,124697,124700,124702,124705],{"class":125,"line":1138},[123,124698,124699],{"class":53707},"            password",[123,124701,147],{"class":129},[123,124703,124704],{"class":143},"\"vinci666\"",[123,124706,5116],{"class":129},[123,124708,124709,124712],{"class":125,"line":1429},[123,124710,124711],{"class":53707},"          networkmanager",[123,124713,124583],{"class":129},[123,124715,124716,124719,124721,124724],{"class":125,"line":1439},[123,124717,124718],{"class":53707},"            uuid",[123,124720,147],{"class":129},[123,124722,124723],{"class":143},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[123,124725,5116],{"class":129},[123,124727,124728,124731,124733,124736],{"class":125,"line":1444},[123,124729,124730],{"class":53707},"            name",[123,124732,147],{"class":129},[123,124734,124735],{"class":143},"\"EMIS_Vinci_Robocon_5G\"",[123,124737,5116],{"class":129},[123,124739,124740,124743],{"class":125,"line":1453},[123,124741,124742],{"class":53707},"            passthrough",[123,124744,124583],{"class":129},[123,124746,124747,124750,124752,124755],{"class":125,"line":1458},[123,124748,124749],{"class":53707},"              wifi-security.auth-alg",[123,124751,147],{"class":129},[123,124753,124754],{"class":143},"\"open\"",[123,124756,5116],{"class":129},[123,124758,124759,124762,124764,124767],{"class":125,"line":1476},[123,124760,124761],{"class":53707},"              ipv6.addr-gen-mode",[123,124763,147],{"class":129},[123,124765,124766],{"class":143},"\"default\"",[123,124768,5116],{"class":129},[123,124770,124771,124774,124776,124779],{"class":125,"line":1494},[123,124772,124773],{"class":53707},"              ipv6.ip6-privacy",[123,124775,147],{"class":129},[123,124777,124778],{"class":143},"\"-1\"",[123,124780,5116],{"class":129},[123,124782,124783,124786,124788,124790],{"class":125,"line":1499},[123,124784,124785],{"class":53707},"              proxy._",[123,124787,147],{"class":129},[123,124789,1629],{"class":143},[123,124791,5116],{"class":129},[123,124793,124794,124797],{"class":125,"line":1517},[123,124795,124796],{"class":53707},"      networkmanager",[123,124798,124583],{"class":129},[123,124800,124801,124804,124806,124808],{"class":125,"line":1534},[123,124802,124803],{"class":53707},"        uuid",[123,124805,147],{"class":129},[123,124807,124723],{"class":143},[123,124809,5116],{"class":129},[123,124811,124812,124814,124816],{"class":125,"line":1539},[123,124813,124632],{"class":53707},[123,124815,147],{"class":129},[123,124817,124818],{"class":143},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124820,124821],{},"将其改为新wifi的名和密码：",[113,124823,124825],{"className":124571,"code":124824,"language":124573,"meta":118,"style":118},"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",[120,124826,124827,124833,124842,124848,124855,124864,124872,124878,124884],{"__ignoreMap":118},[123,124828,124829,124831],{"class":125,"line":126},[123,124830,124580],{"class":53707},[123,124832,1344],{"class":129},[123,124834,124835,124837,124839],{"class":125,"line":140},[123,124836,124588],{"class":53707},[123,124838,147],{"class":129},[123,124840,124841],{"class":164},"2\n",[123,124843,124844,124846],{"class":125,"line":156},[123,124845,124599],{"class":53707},[123,124847,1344],{"class":129},[123,124849,124850,124853],{"class":125,"line":168},[123,124851,124852],{"class":53707},"    wlan0",[123,124854,1344],{"class":129},[123,124856,124857,124859,124861],{"class":125,"line":268},[123,124858,124644],{"class":53707},[123,124860,147],{"class":129},[123,124862,124863],{"class":164},"true\n",[123,124865,124866,124868,124870],{"class":125,"line":291},[123,124867,124655],{"class":53707},[123,124869,147],{"class":129},[123,124871,124863],{"class":164},[123,124873,124874,124876],{"class":125,"line":300},[123,124875,124666],{"class":53707},[123,124877,1344],{"class":129},[123,124879,124880,124882],{"class":125,"line":305},[123,124881,124673],{"class":143},[123,124883,1344],{"class":129},[123,124885,124886,124889,124891],{"class":125,"line":316},[123,124887,124888],{"class":53707},"          password",[123,124890,147],{"class":129},[123,124892,124893],{"class":143},"\"vinci666\"\n",[19,124895,124896],{},"工控机开机即可连上网。",[14,124898,124900],{"id":124899},"_72-ssh远程开发","7.2 SSH远程开发",[2587,124902,124904],{"id":124903},"_721-环境准备","7.2.1 环境准备",[19,124906,124907],{},[2759,124908,124909],{},"1.硬件准备",[19,124911,124912],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124914,124915],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124917,124918],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124920,124921],{},[2759,124922,124923],{},"2.设置固定IP",[19,124925,124926],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124928,124929],{},"1.进入设置界面",[19,124931,124932],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124934,124935],{},[3929,124936],{"alt":118,"src":124937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124939,124940],{},"2.配置所连接的网络",[19,124942,124943],{},[3929,124944],{"alt":118,"src":124945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124947,124948],{},"3.设置固定IP",[19,124950,124951],{},"查看当前IP地址。",[19,124953,124954],{},[3929,124955],{"alt":118,"src":124956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124958,124959],{},"设置固定IP。",[19,124961,124962],{},[3929,124963],{"alt":118,"src":124964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124966,124967],{},"至此，IP配置完毕。",[2587,124969,124971],{"id":124970},"_722-环境搭建","7.2.2 环境搭建",[19,124973,124974],{},[2759,124975,28175],{},[19,124977,124978],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124980,124981],{},[2759,124982,124983],{},"实现",[19,124985,124986],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,124988,124989,124992,124995,124998],{},[29,124990,124991],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,124993,124994],{},"远程主机启动SSH服务；",[29,124996,124997],{},"本地主机登陆远程主机；",[29,124999,125000],{},"实现数据传输。",[19,125002,125003],{},"1.安装SSH客户端与服务端",[19,125005,125006],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[113,125008,125010],{"className":123204,"code":125009,"language":123206,"meta":123207,"style":118}," sudo apt install openssh-server\n",[120,125011,125012],{"__ignoreMap":118},[123,125013,125014],{"class":125,"line":126},[123,125015,125009],{},[19,125017,125018],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[113,125020,125022],{"className":123204,"code":125021,"language":123206,"meta":123207,"style":118},"sudo apt install openssh-client\n",[120,125023,125024],{"__ignoreMap":118},[123,125025,125026],{"class":125,"line":126},[123,125027,125021],{},[19,125029,125030],{},"2.远程主机启动SSH服务",[19,125032,125033],{},"远程主机启动 ssh 服务命令如下：",[113,125035,125037],{"className":123204,"code":125036,"language":123206,"meta":123207,"style":118},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[120,125038,125039],{"__ignoreMap":118},[123,125040,125041],{"class":125,"line":126},[123,125042,125036],{},[19,125044,125045],{},"启动后可使用如下命令查看服务是否正常运行：",[113,125047,125049],{"className":123204,"code":125048,"language":123206,"meta":123207,"style":118},"ps -e | grep ssh\n",[120,125050,125051],{"__ignoreMap":118},[123,125052,125053],{"class":125,"line":126},[123,125054,125048],{},[19,125056,125057],{},"如果启动成功，会包含 sshd 程序。",[19,125059,125060],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[113,125062,125064],{"className":123204,"code":125063,"language":123206,"meta":123207,"style":118},"sudo systemctl enable ssh\n",[120,125065,125066],{"__ignoreMap":118},[123,125067,125068],{"class":125,"line":126},[123,125069,125063],{},[19,125071,125072],{},"3.本地远程登录",[19,125074,125075],{},"登录远程主机可以调用如下命令:",[113,125077,125079],{"className":119684,"code":125078,"language":119686,"meta":118,"style":118},"ssh -X 用户名@ip地址\n",[120,125080,125081],{"__ignoreMap":118},[123,125082,125083,125085,125088],{"class":125,"line":126},[123,125084,124035],{"class":337},[123,125086,125087],{"class":164}," -X",[123,125089,125090],{"class":143}," 用户名@ip地址\n",[19,125092,125093],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,125095,125096],{},"如果退出，可以调用exit命令：",[113,125098,125100],{"className":123204,"code":125099,"language":123206,"meta":123207,"style":118},"exit\n",[120,125101,125102],{"__ignoreMap":118},[123,125103,125104],{"class":125,"line":126},[123,125105,125099],{},[19,125107,125108],{},[2759,125109,125110],{},"4.实现数据传输",[19,125112,125113],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,125115,125116],{},"上传文件指令格式如下：",[113,125118,125120],{"className":123204,"code":125119,"language":123206,"meta":123207,"style":118},"scp 本地文件路径 账号@ip:路径\n",[120,125121,125122],{"__ignoreMap":118},[123,125123,125124],{"class":125,"line":126},[123,125125,125119],{},[19,125127,125128],{},"上传文件夹指令格式如下：",[113,125130,125132],{"className":123204,"code":125131,"language":123206,"meta":123207,"style":118},"scp -r 本地文件夹路径 账号@ip:路径\n",[120,125133,125134],{"__ignoreMap":118},[123,125135,125136],{"class":125,"line":126},[123,125137,125131],{},[19,125139,125140],{},"下载文件指令格式如下：",[113,125142,125144],{"className":123204,"code":125143,"language":123206,"meta":123207,"style":118},"scp 账号@ip:路径 本地文件夹路径\n",[120,125145,125146],{"__ignoreMap":118},[123,125147,125148],{"class":125,"line":126},[123,125149,125143],{},[19,125151,125152],{},"下载文件夹指令格式如下：",[113,125154,125156],{"className":123204,"code":125155,"language":123206,"meta":123207,"style":118},"scp -r 账号@ip:路径 本地文件夹路径\n",[120,125157,125158],{"__ignoreMap":118},[123,125159,125160],{"class":125,"line":126},[123,125161,125155],{},[19,125163,125164],{},[2759,125165,125166],{},"优化",[19,125168,125169],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,125171,125172,125175],{},[29,125173,125174],{},"本地生成密钥对；",[29,125176,125177],{},"将公钥上传至远程主机。",[19,125179,125180],{},[2759,125181,125182],{},"1.生成密钥对",[19,125184,125185],{},"本地客户端生成公私钥：（一路回车默认即可）",[113,125187,125189],{"className":123204,"code":125188,"language":123206,"meta":123207,"style":118},"ssh-keygen\n",[120,125190,125191],{"__ignoreMap":118},[123,125192,125193],{"class":125,"line":126},[123,125194,125188],{},[19,125196,125197],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,125199,125200,125203],{},[29,125201,125202],{},"id_rsa （私钥）；",[29,125204,125205],{},"id_rsa.pub (公钥)。",[19,125207,125208],{},[2759,125209,125210],{},"2.公钥上传",[19,125212,125213],{},"上传指令如下：",[113,125215,125217],{"className":123204,"code":125216,"language":123206,"meta":123207,"style":118},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[120,125218,125219],{"__ignoreMap":118},[123,125220,125221],{"class":125,"line":126},[123,125222,125216],{},[19,125224,125225],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125227,125228],{},"以后再远程登录就无需录入密码了。",[2587,125230,125232],{"id":125231},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125234,125235],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125237,125238],{},[2759,125239,125240],{},"1.准备工作",[19,125242,125243],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125245,125246],{},[2759,125247,125248],{},"2.为VScode安装远程开发插件",[19,125250,125251,125252,125255,125256,125259,125260,2494],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[120,125253,125254],{},"扩展：商店","的搜索栏输入",[120,125257,125258],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[120,125261,125262],{},"安装",[19,125264,125265],{},[3929,125266],{"alt":118,"src":125267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125269,125270],{},[2759,125271,125272],{},"3.配置远程连接",[19,125274,125275,125276,125279,125280,125283],{},"步骤1：使用快捷键",[120,125277,125278],{},"ctrl + shift + p","打开命令输入窗口，并输入",[120,125281,125282],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125285,125286],{},[3929,125287],{"alt":118,"src":125288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125290,125291,125292,2494],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[120,125293,125294],{},"Add New SSH Host",[19,125296,125297],{},[3929,125298],{"alt":118,"src":125299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125301,125302,125303,125306,125307,125310,125311,125314],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[120,125304,125305],{},"ssh +X ubuntu@192.168.43.164","，其中，",[120,125308,125309],{},"ubuntu","需要替换为你的登录用户名，",[120,125312,125313],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125316,125317],{},[3929,125318],{"alt":118,"src":125319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125321,125322],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125324,125325],{},[3929,125326],{"alt":118,"src":125327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125329,125330],{},[3929,125331],{"alt":118,"src":125332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125334,125335],{},[2759,125336,125337],{},"4.使用",[19,125339,125340,125341,125279,125343,125345],{},"步骤1：继续使用快捷键",[120,125342,125278],{},[120,125344,125282],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125347,125348],{},[3929,125349],{"alt":118,"src":125350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125352,125353,125354,125357],{},"或者，也可以点击侧边栏的",[120,125355,125356],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,125359,125360],{},[3929,125361],{"alt":118,"src":125362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,125364,125365,125366,125369,125370,125373],{},"步骤2：选择菜单栏的",[120,125367,125368],{},"文件","下的",[120,125371,125372],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125375,125376],{},[3929,125377],{"alt":118,"src":125378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125380,125381],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125383,125385],{"id":125384},"_73-远程桌面","7.3 远程桌面",[19,125387,125388],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125390,125391],{},"我们选择使用VNC来看。",[26,125393,125394],{},[29,125395,125396],{},"安装VNC服务器：",[19,125398,125399],{},"这里以TigerVNC为例进行安装：",[113,125401,125403],{"className":119684,"code":125402,"language":119686,"meta":118,"style":118},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[120,125404,125405],{"__ignoreMap":118},[123,125406,125407,125409,125411,125413,125416],{"class":125,"line":126},[123,125408,26999],{"class":337},[123,125410,119705],{"class":143},[123,125412,341],{"class":143},[123,125414,125415],{"class":143}," tigervnc-standalone-server",[123,125417,125418],{"class":143}," tigervnc-common\n",[26,125420,125421],{"start":140},[29,125422,125423],{},"设置VNC密码：",[19,125425,125426],{},"为VNC用户设置密码，运行以下命令：",[113,125428,125430],{"className":119684,"code":125429,"language":119686,"meta":118,"style":118},"vncpasswd\n",[120,125431,125432],{"__ignoreMap":118},[123,125433,125434],{"class":125,"line":126},[123,125435,125429],{"class":337},[26,125437,125438],{"start":156},[29,125439,125440],{},"配置VNC启动脚本:",[19,125442,125443],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[113,125445,125447],{"className":119684,"code":125446,"language":119686,"meta":118,"style":118},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[120,125448,125449,125458],{"__ignoreMap":118},[123,125450,125451,125453,125455],{"class":125,"line":126},[123,125452,103659],{"class":337},[123,125454,31636],{"class":164},[123,125456,125457],{"class":143}," ~\u002F.vnc\n",[123,125459,125460,125463],{"class":125,"line":140},[123,125461,125462],{"class":337},"nano",[123,125464,125465],{"class":143}," ~\u002F.vnc\u002Fxstartup\n",[19,125467,125468],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[113,125470,125472],{"className":119684,"code":125471,"language":119686,"meta":118,"style":118},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[120,125473,125474,125479,125487,125494],{"__ignoreMap":118},[123,125475,125476],{"class":125,"line":126},[123,125477,125478],{"class":2673},"#!\u002Fbin\u002Fsh\n",[123,125480,125481,125484],{"class":125,"line":140},[123,125482,125483],{"class":164},"unset",[123,125485,125486],{"class":143}," SESSION_MANAGER\n",[123,125488,125489,125491],{"class":125,"line":156},[123,125490,125483],{"class":164},[123,125492,125493],{"class":143}," DBUS_SESSION_BUS_ADDRESS\n",[123,125495,125496],{"class":125,"line":168},[123,125497,125498],{"class":337},"gnome-session\n",[19,125500,125501],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,125503,125504],{"start":168},[29,125505,125506],{},"给予执行权限：",[19,125508,125509],{},"为xstartup文件设置执行权限：",[113,125511,125513],{"className":119684,"code":125512,"language":119686,"meta":118,"style":118},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[120,125514,125515],{"__ignoreMap":118},[123,125516,125517,125519,125522],{"class":125,"line":126},[123,125518,27034],{"class":337},[123,125520,125521],{"class":143}," +x",[123,125523,125465],{"class":143},[26,125525,125526],{"start":268},[29,125527,125528],{},"启动VNC服务器：",[113,125530,125532],{"className":119684,"code":125531,"language":119686,"meta":118,"style":118},"vncserver -geometry 1920x1080 -localhost=0\n",[120,125533,125534],{"__ignoreMap":118},[123,125535,125536,125539,125542,125545],{"class":125,"line":126},[123,125537,125538],{"class":337},"vncserver",[123,125540,125541],{"class":164}," -geometry",[123,125543,125544],{"class":143}," 1920x1080",[123,125546,125547],{"class":164}," -localhost=0\n",[19,125549,125550],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125552,125553],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,125555,125556],{"start":291},[29,125557,125558],{},"查看已开启的VNC服务器：",[113,125560,125562],{"className":119684,"code":125561,"language":119686,"meta":118,"style":118},"vncserver -list\n",[120,125563,125564],{"__ignoreMap":118},[123,125565,125566,125568],{"class":125,"line":126},[123,125567,125538],{"class":337},[123,125569,125570],{"class":164}," -list\n",[19,125572,125573],{},[3929,125574],{"alt":118,"src":125575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,125577,125578],{"start":300},[29,125579,125580],{},"连接到VNC服务器：",[19,125582,125583],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,125585,125586],{"start":305},[29,125587,125588],{},"停止VNC服务器：",[19,125590,125591],{},"如果需要停止VNC服务器，可以使用以下命令：",[113,125593,125595],{"className":119684,"code":125594,"language":119686,"meta":118,"style":118},"vncserver -kill :1\n",[120,125596,125597],{"__ignoreMap":118},[123,125598,125599,125601,125604],{"class":125,"line":126},[123,125600,125538],{"class":337},[123,125602,125603],{"class":164}," -kill",[123,125605,125606],{"class":143}," :1\n",[19,125608,125609],{},"将:1替换为你实际使用的显示编号。",[19,125611,125612],{},[3929,125613],{"alt":118,"src":125614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125616,125617],{},[3929,125618],{"alt":118,"src":125619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125621,125623],{"id":125622},"_74-usb端口设置","7.4 USB端口设置",[19,125625,125626],{},[2759,125627,125628],{},"首先先配置好权限",[113,125630,125632],{"className":119684,"code":125631,"language":119686,"meta":118,"style":118},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[120,125633,125634,125639,125652,125659,125664],{"__ignoreMap":118},[123,125635,125636],{"class":125,"line":126},[123,125637,125638],{"class":2673},"# 将用户权限提高\n",[123,125640,125641,125643,125645,125647,125650],{"class":125,"line":140},[123,125642,26999],{"class":337},[123,125644,28995],{"class":143},[123,125646,28998],{"class":164},[123,125648,125649],{"class":143}," dialout",[123,125651,29003],{"class":129},[123,125653,125654,125656],{"class":125,"line":156},[123,125655,29022],{"class":337},[123,125657,125658],{"class":143}," dialout\n",[123,125660,125661],{"class":125,"line":168},[123,125662,125663],{"class":2673},"# 查看下面命令是否输出dialout（若输出才正常）\n",[123,125665,125666],{"class":125,"line":268},[123,125667,125668],{"class":337},"groups\n",[19,125670,125671],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[2587,125673,125675],{"id":125674},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125677,125678,125681],{},[2759,125679,125680],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125683,125684,125687],{},[2759,125685,125686],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125689,125690],{},[2759,125691,125692],{},"流程如下：",[19,125694,125695],{},"（1）.查找设备idVendor和idProduct",[19,125697,125698,125699,125702],{},"接入两个USB设备，在终端调用指令",[120,125700,125701],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125704,125705],{},[3929,125706],{"alt":118,"src":125707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125709,125710,125711,125714],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[120,125712,125713],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125716,125717],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125719,125720],{},"（2）.编写映射规则",[19,125722,125723,125724,125727],{},"在",[120,125725,125726],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[113,125729,125731],{"className":119684,"code":125730,"language":119686,"meta":118,"style":118},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[120,125732,125733],{"__ignoreMap":118},[123,125734,125735,125737,125739],{"class":125,"line":126},[123,125736,26999],{"class":337},[123,125738,120971],{"class":143},[123,125740,125741],{"class":143}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125743,125744],{},"输入如下内容：",[113,125746,125748],{"className":119684,"code":125747,"language":119686,"meta":118,"style":118},"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",[120,125749,125750,125780],{"__ignoreMap":118},[123,125751,125752,125755,125757,125760,125763,125766,125769,125771,125774,125777],{"class":125,"line":126},[123,125753,125754],{"class":129},"KERNEL",[123,125756,134],{"class":133},[123,125758,125759],{"class":143},"=\"ttyUSB*\",",[123,125761,125762],{"class":337}," ATTRS",[123,125764,125765],{"class":143},"{idVendor}==",[123,125767,125768],{"class":337},"\"10c4\"",[123,125770,2985],{"class":337},[123,125772,125773],{"class":143}," ATTRS{idProduct}==\"ea60\",",[123,125775,125776],{"class":143}," MODE:=\"0777\",",[123,125778,125779],{"class":143}," SYMLINK+=\"mylidar\"\n",[123,125781,125782,125784,125786,125788,125790,125792,125795,125797,125800,125802],{"class":125,"line":140},[123,125783,125754],{"class":129},[123,125785,134],{"class":133},[123,125787,125759],{"class":143},[123,125789,125762],{"class":337},[123,125791,125765],{"class":143},[123,125793,125794],{"class":337},"\"1a86\"",[123,125796,2985],{"class":337},[123,125798,125799],{"class":143}," ATTRS{idProduct}==\"7523\",",[123,125801,125776],{"class":143},[123,125803,125804],{"class":143}," SYMLINK+=\"mycar\"\n",[19,125806,125807],{},"代码解释：",[3606,125809,125810,125813,125816,125819],{},[29,125811,125812],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,125814,125815],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,125817,125818],{},"SYMLINK是符号连接，即绑定的别名；",[29,125820,125821],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125823,125824,125825,125828,125831],{},"***小提示：***",[25980,125826,125827],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[120,125829,125830],{},"\u002Fetc\u002Fudev\u002Frule.d",[25980,125832,125833],{},"目录即可。",[19,125835,125836],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125838,125839],{},"（3）.使规则生效",[19,125841,125842],{},"在终端下输入如下指令：",[113,125844,125846],{"className":119684,"code":125845,"language":119686,"meta":118,"style":118},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[120,125847,125848,125853,125865,125876,125880,125885,125898],{"__ignoreMap":118},[123,125849,125850],{"class":125,"line":126},[123,125851,125852],{"class":2673},"# Ubuntu用下方命令\n",[123,125854,125855,125857,125859,125862],{"class":125,"line":140},[123,125856,26999],{"class":337},[123,125858,122436],{"class":143},[123,125860,125861],{"class":143}," udev",[123,125863,125864],{"class":143}," reload\n",[123,125866,125867,125869,125871,125873],{"class":125,"line":156},[123,125868,26999],{"class":337},[123,125870,122436],{"class":143},[123,125872,125861],{"class":143},[123,125874,125875],{"class":143}," restart\n",[123,125877,125878],{"class":125,"line":168},[123,125879,232],{"emptyLinePlaceholder":231},[123,125881,125882],{"class":125,"line":268},[123,125883,125884],{"class":2673},"#Fedora用下方命令\n",[123,125886,125887,125889,125892,125895],{"class":125,"line":291},[123,125888,26999],{"class":337},[123,125890,125891],{"class":143}," udevadm",[123,125893,125894],{"class":143}," control",[123,125896,125897],{"class":164}," --reload\n",[123,125899,125900,125902,125904],{"class":125,"line":300},[123,125901,26999],{"class":337},[123,125903,125891],{"class":143},[123,125905,125906],{"class":143}," trigger\n",[19,125908,125909],{},"再重新插拔设备即可。",[19,125911,125912],{},"（4）.测试",[19,125914,125915],{},"终端下输入如下指令",[113,125917,125919],{"className":119684,"code":125918,"language":119686,"meta":118,"style":118},"ll \u002Fdev | grep ttyUSB\n",[120,125920,125921],{"__ignoreMap":118},[123,125922,125923,125926,125929,125931,125933],{"class":125,"line":126},[123,125924,125925],{"class":337},"ll",[123,125927,125928],{"class":143}," \u002Fdev",[123,125930,27531],{"class":133},[123,125932,32656],{"class":337},[123,125934,125935],{"class":143}," ttyUSB\n",[19,125937,125938],{},"运行结果如下：",[19,125940,125941],{},[3929,125942],{"alt":118,"src":125943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125945,125946,125947,125950],{},"也可以多次插拔USB设备，会发现设备端口",[120,125948,125949],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125952,125953],{},[2759,125954,120352],{},[19,125956,125957],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[2587,125959,125961],{"id":125960},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125963,125964,125966],{},[2759,125965,125680],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125968,125969,125971],{},[2759,125970,125686],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125973,125974],{},[2759,125975,125692],{},[19,125977,125978],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125980,125981],{},"调用如下指令查看第一台雷达的USB信息：",[113,125983,125985],{"className":119684,"code":125984,"language":119686,"meta":118,"style":118},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[120,125986,125987,126007],{"__ignoreMap":118},[123,125988,125989,125992,125994,125997,126000,126002,126004],{"class":125,"line":126},[123,125990,125991],{"class":337},"udevadm",[123,125993,72221],{"class":143},[123,125995,125996],{"class":164}," --attribute-walk",[123,125998,125999],{"class":164}," --name=\u002Fdev\u002FttyUSB0",[123,126001,27531],{"class":133},[123,126003,32656],{"class":337},[123,126005,126006],{"class":143}," KERNELS\n",[123,126008,126009,126011,126013,126015,126018,126020,126022],{"class":125,"line":140},[123,126010,125991],{"class":337},[123,126012,72221],{"class":143},[123,126014,125996],{"class":164},[123,126016,126017],{"class":164}," --name=\u002Fdev\u002FttyACM0",[123,126019,27531],{"class":133},[123,126021,32656],{"class":337},[123,126023,126006],{"class":143},[19,126025,126026],{},[3929,126027],{"alt":118,"src":126028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,126030,126031],{},"调用如下指令查看第二台雷达的USB信息：",[113,126033,126035],{"className":119684,"code":126034,"language":119686,"meta":118,"style":118},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[120,126036,126037],{"__ignoreMap":118},[123,126038,126039,126041,126043,126045,126048,126050,126052],{"class":125,"line":126},[123,126040,125991],{"class":337},[123,126042,72221],{"class":143},[123,126044,125996],{"class":164},[123,126046,126047],{"class":164}," --name=\u002Fdev\u002FttyUSB1",[123,126049,27531],{"class":133},[123,126051,32656],{"class":337},[123,126053,126006],{"class":143},[19,126055,126056,126057,126060,126061,126064,126065,126068],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[120,126058,126059],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[120,126062,126063],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2759,126066,126067],{},"唯一性标识","”。",[19,126070,125720],{},[19,126072,125723,126073,126075],{},[120,126074,125726],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[113,126077,126078],{"className":119684,"code":125730,"language":119686,"meta":118,"style":118},[120,126079,126080],{"__ignoreMap":118},[123,126081,126082,126084,126086],{"class":125,"line":126},[123,126083,26999],{"class":337},[123,126085,120971],{"class":143},[123,126087,125741],{"class":143},[113,126089,126091],{"className":119684,"code":126090,"language":119686,"meta":118,"style":118},"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",[120,126092,126093,126122],{"__ignoreMap":118},[123,126094,126095,126097,126099,126101,126104,126106,126109,126112,126114,126117,126119],{"class":125,"line":126},[123,126096,125754],{"class":129},[123,126098,134],{"class":133},[123,126100,125759],{"class":143},[123,126102,126103],{"class":129}," KERNELS",[123,126105,134],{"class":133},[123,126107,126108],{"class":143},"=\"1-1.3:1.0\",",[123,126110,126111],{"class":337}," MODE:",[123,126113,134],{"class":143},[123,126115,126116],{"class":337},"\"0777\"",[123,126118,2985],{"class":337},[123,126120,126121],{"class":143}," SYMLINK+=\"rplidar_front\"\n",[123,126123,126124,126126,126128,126130,126132,126134,126137,126139,126141,126143,126145],{"class":125,"line":140},[123,126125,125754],{"class":129},[123,126127,134],{"class":133},[123,126129,125759],{"class":143},[123,126131,126103],{"class":129},[123,126133,134],{"class":133},[123,126135,126136],{"class":143},"=\"1-1.4:1.0\",",[123,126138,126111],{"class":337},[123,126140,134],{"class":143},[123,126142,126116],{"class":337},[123,126144,2985],{"class":337},[123,126146,126147],{"class":143}," SYMLINK+=\"rplidar_back\"\n",[19,126149,125839],{},[19,126151,125842],{},[113,126153,126154],{"className":119684,"code":125845,"language":119686,"meta":118,"style":118},[120,126155,126156,126160,126170,126180,126184,126188,126198],{"__ignoreMap":118},[123,126157,126158],{"class":125,"line":126},[123,126159,125852],{"class":2673},[123,126161,126162,126164,126166,126168],{"class":125,"line":140},[123,126163,26999],{"class":337},[123,126165,122436],{"class":143},[123,126167,125861],{"class":143},[123,126169,125864],{"class":143},[123,126171,126172,126174,126176,126178],{"class":125,"line":156},[123,126173,26999],{"class":337},[123,126175,122436],{"class":143},[123,126177,125861],{"class":143},[123,126179,125875],{"class":143},[123,126181,126182],{"class":125,"line":168},[123,126183,232],{"emptyLinePlaceholder":231},[123,126185,126186],{"class":125,"line":268},[123,126187,125884],{"class":2673},[123,126189,126190,126192,126194,126196],{"class":125,"line":291},[123,126191,26999],{"class":337},[123,126193,125891],{"class":143},[123,126195,125894],{"class":143},[123,126197,125897],{"class":164},[123,126199,126200,126202,126204],{"class":125,"line":300},[123,126201,26999],{"class":337},[123,126203,125891],{"class":143},[123,126205,125906],{"class":143},[19,126207,125909],{},[19,126209,125912],{},[19,126211,125915,126212,126215],{},[120,126213,126214],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126217,126218],{},[3929,126219],{"alt":118,"src":126220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126222,126223],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126225,126226,126228],{},[2759,126227,120352],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[2587,126230,126232],{"id":126231},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126234,126235],{},"（1）.查看所连接的主机USB接口的信息",[113,126237,126239],{"className":119684,"code":126238,"language":119686,"meta":118,"style":118},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[120,126240,126241,126271],{"__ignoreMap":118},[123,126242,126243,126245,126247,126250,126252,126254,126256,126258,126261,126264,126266,126269],{"class":125,"line":126},[123,126244,125991],{"class":337},[123,126246,72221],{"class":143},[123,126248,126249],{"class":164}," -a",[123,126251,31636],{"class":164},[123,126253,30842],{"class":129},[123,126255,125991],{"class":337},[123,126257,72221],{"class":143},[123,126259,126260],{"class":164}," -q",[123,126262,126263],{"class":143}," path",[123,126265,27537],{"class":164},[123,126267,126268],{"class":143}," \u002Fdev\u002FttyACM0",[123,126270,288],{"class":129},[123,126272,126273,126275,126277,126279,126281,126283,126285,126287,126289,126291,126293,126296],{"class":125,"line":140},[123,126274,125991],{"class":337},[123,126276,72221],{"class":143},[123,126278,126249],{"class":164},[123,126280,31636],{"class":164},[123,126282,30842],{"class":129},[123,126284,125991],{"class":337},[123,126286,72221],{"class":143},[123,126288,126260],{"class":164},[123,126290,126263],{"class":143},[123,126292,27537],{"class":164},[123,126294,126295],{"class":143}," \u002Fdev\u002FttyUSB0",[123,126297,288],{"class":129},[19,126299,126300],{},[3929,126301],{"alt":118,"src":126302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126304,126305],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126307,125720],{},[19,126309,125723,126310,126075],{},[120,126311,125726],{},[113,126313,126314],{"className":119684,"code":125730,"language":119686,"meta":118,"style":118},[120,126315,126316],{"__ignoreMap":118},[123,126317,126318,126320,126322],{"class":125,"line":126},[123,126319,26999],{"class":337},[123,126321,120971],{"class":143},[123,126323,125741],{"class":143},[113,126325,126327],{"className":119684,"code":126326,"language":119686,"meta":118,"style":118},"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",[120,126328,126329,126357,126383],{"__ignoreMap":118},[123,126330,126331,126333,126335,126338,126340,126342,126344,126346,126349,126352,126354],{"class":125,"line":126},[123,126332,125754],{"class":129},[123,126334,134],{"class":133},[123,126336,126337],{"class":143},"=\"ttyACM*\",",[123,126339,125762],{"class":337},[123,126341,125765],{"class":143},[123,126343,125794],{"class":337},[123,126345,2985],{"class":337},[123,126347,126348],{"class":143}," ATTRS{idProduct}==\"55d4\",",[123,126350,126351],{"class":143}," ATTRS{serial}==\"0001\",",[123,126353,125776],{"class":143},[123,126355,126356],{"class":143}," SYMLINK+=\"ttyACM_MCU\"\n",[123,126358,126359,126361,126363,126365,126367,126369,126371,126373,126375,126378,126380],{"class":125,"line":140},[123,126360,125754],{"class":129},[123,126362,134],{"class":133},[123,126364,126337],{"class":143},[123,126366,125762],{"class":337},[123,126368,125765],{"class":143},[123,126370,125794],{"class":337},[123,126372,2985],{"class":337},[123,126374,126348],{"class":143},[123,126376,126377],{"class":143}," ATTRS{serial}==\"0002\",",[123,126379,125776],{"class":143},[123,126381,126382],{"class":143}," SYMLINK+=\"ttyACM_Lidar\"\n",[123,126384,126385,126387,126389,126391,126393,126395,126397,126399,126401,126403],{"class":125,"line":156},[123,126386,125754],{"class":129},[123,126388,134],{"class":133},[123,126390,125759],{"class":143},[123,126392,125762],{"class":337},[123,126394,125765],{"class":143},[123,126396,125794],{"class":337},[123,126398,2985],{"class":337},[123,126400,125799],{"class":143},[123,126402,125776],{"class":143},[123,126404,126405],{"class":143}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126407,125839],{},[19,126409,125842],{},[113,126411,126412],{"className":119684,"code":125845,"language":119686,"meta":118,"style":118},[120,126413,126414,126418,126428,126438,126442,126446,126456],{"__ignoreMap":118},[123,126415,126416],{"class":125,"line":126},[123,126417,125852],{"class":2673},[123,126419,126420,126422,126424,126426],{"class":125,"line":140},[123,126421,26999],{"class":337},[123,126423,122436],{"class":143},[123,126425,125861],{"class":143},[123,126427,125864],{"class":143},[123,126429,126430,126432,126434,126436],{"class":125,"line":156},[123,126431,26999],{"class":337},[123,126433,122436],{"class":143},[123,126435,125861],{"class":143},[123,126437,125875],{"class":143},[123,126439,126440],{"class":125,"line":168},[123,126441,232],{"emptyLinePlaceholder":231},[123,126443,126444],{"class":125,"line":268},[123,126445,125884],{"class":2673},[123,126447,126448,126450,126452,126454],{"class":125,"line":291},[123,126449,26999],{"class":337},[123,126451,125891],{"class":143},[123,126453,125894],{"class":143},[123,126455,125897],{"class":164},[123,126457,126458,126460,126462],{"class":125,"line":300},[123,126459,26999],{"class":337},[123,126461,125891],{"class":143},[123,126463,125906],{"class":143},[19,126465,126466,126467],{},"再重新插拔设备即可，或者 ",[2759,126468,126469],{},"直接重启系统。",[19,126471,125912],{},[19,126473,125915,126474,126215],{},[120,126475,126214],{},[19,126477,126478],{},[3929,126479],{"alt":118,"src":126480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126482,126223],{},[19,126484,126485,126487],{},[2759,126486,120352],{}," 一些设备可能没有串口号等。",[2587,126489,126491],{"id":126490},"_744-其他注意事项","7.4.4 其他注意事项",[19,126493,126494,126495,126497,126498,126501,126502,20838,126505,126508,126509,126511],{},"并非所有的USB设备端口号都是",[120,126496,125949],{},"的格式，比如Arduino的端口号可能是",[120,126499,126500],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[120,126503,126504],{},"videon",[120,126506,126507],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[120,126510,126504],{},"端口，绑定时需要关联的也是该接口。",[19,126513,126514,126515,126518,126519,126522,126523,126525,126526,126529,126530,126533,126534,126537,126538,126537,126541,126537,126544,2494],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[120,126516,126517],{},"KERNEL==\"ttyUSB*\"","修改为",[120,126520,126521],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[120,126524,126517],{},"修改为类似于",[120,126527,126528],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[120,126531,126532],{},"video[0,2,4,6]","表示可以绑定的端口为",[120,126535,126536],{},"video0","或",[120,126539,126540],{},"video2",[120,126542,126543],{},"video4",[120,126545,126546],{},"video6",[14,126548,126550],{"id":126549},"_75-挂载内网网页","7.5 挂载内网网页",[19,126552,126553],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126555,126556],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126558,126559],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126561,126562,126563],{},"Termux 下载地址（F-Droid）：",[2846,126564,126565],{"href":126565,"rel":126566},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26287],[19,126568,126569],{},"首先打开app后，先更新软件缓存：",[113,126571,126573],{"className":119684,"code":126572,"language":119686,"meta":118,"style":118},"pkg update\n",[120,126574,126575],{"__ignoreMap":118},[123,126576,126577,126580],{"class":125,"line":126},[123,126578,126579],{"class":337},"pkg",[123,126581,28663],{"class":143},[19,126583,126584],{},"然后换源",[113,126586,126588],{"className":119684,"code":126587,"language":119686,"meta":118,"style":118},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[120,126589,126590],{"__ignoreMap":118},[123,126591,126592,126594,126597],{"class":125,"line":126},[123,126593,125462],{"class":337},[123,126595,126596],{"class":129}," $PREFIX",[123,126598,126599],{"class":143},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126601,126602],{},"将该文件内容替换为下面：",[113,126604,126606],{"className":119684,"code":126605,"language":119686,"meta":118,"style":118},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[120,126607,126608],{"__ignoreMap":118},[123,126609,126610,126613,126616,126619],{"class":125,"line":126},[123,126611,126612],{"class":337},"deb",[123,126614,126615],{"class":143}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[123,126617,126618],{"class":143}," stable",[123,126620,126621],{"class":143}," main\n",[3606,126623,126624,126651],{},[29,126625,126626,126627,126629,126630],{},"如果你使用的是",[120,126628,125462],{},"编辑器：",[3606,126631,126632,126639,126645],{},[29,126633,126634,126635,126638],{},"按 ",[120,126636,126637],{},"Ctrl+O"," 保存文件。",[29,126640,126634,126641,126644],{},[120,126642,126643],{},"Enter"," 确认文件名。",[29,126646,126634,126647,126650],{},[120,126648,126649],{},"Ctrl+X"," 退出编辑器。",[29,126652,126626,126653,126629,126656],{},[120,126654,126655],{},"vim",[3606,126657,126658,126664],{},[29,126659,126634,126660,126663],{},[120,126661,126662],{},"Esc"," 退出编辑模式。",[29,126665,126666,126667,126669],{},"输入 ",[120,126668,121609],{}," 保存并退出。",[19,126671,126672],{},"接下来重新更新软件源：",[113,126674,126676],{"className":119684,"code":126675,"language":119686,"meta":118,"style":118},"pkg update && pkg upgrade\n",[120,126677,126678],{"__ignoreMap":118},[123,126679,126680,126682,126684,126686,126688],{"class":125,"line":126},[123,126681,126579],{"class":337},[123,126683,119735],{"class":143},[123,126685,28611],{"class":129},[123,126687,126579],{"class":337},[123,126689,119721],{"class":143},[19,126691,126692],{},"安装python：",[113,126694,126696],{"className":119684,"code":126695,"language":119686,"meta":118,"style":118},"pkg install python\n",[120,126697,126698],{"__ignoreMap":118},[123,126699,126700,126702,126704],{"class":125,"line":126},[123,126701,126579],{"class":337},[123,126703,341],{"class":143},[123,126705,126706],{"class":143}," python\n",[19,126708,126709,28894],{},[2759,126710,126711],{},"通过Termux访问设备存储",[19,126713,126714],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[113,126716,126718],{"className":119684,"code":126717,"language":119686,"meta":118,"style":118},"termux-setup-storage\n",[120,126719,126720],{"__ignoreMap":118},[123,126721,126722],{"class":125,"line":126},[123,126723,126717],{"class":337},[26,126725,126726],{},[29,126727,126728,28894,126731],{},[2759,126729,126730],{},"进入HTML文件所在的目录",[26,126732,126733],{},[29,126734,126735,126736,126738],{},"使用",[120,126737,103669],{},"命令进入HTML文件所在的目录：",[113,126740,126742],{"className":119684,"code":126741,"language":119686,"meta":118,"style":118},"cd ~\u002Fyour_html_folder\n",[120,126743,126744],{"__ignoreMap":118},[123,126745,126746,126748],{"class":125,"line":126},[123,126747,103669],{"class":164},[123,126749,126750],{"class":143}," ~\u002Fyour_html_folder\n",[26,126752,126753],{"start":140},[29,126754,126755,28894,126758,126763,126780],{},[2759,126756,126757],{},"启动Python HTTP服务器",[26,126759,126760],{},[29,126761,126762],{},"运行以下命令启动一个简单的HTTP服务器：",[113,126764,126766],{"className":119684,"code":126765,"language":119686,"meta":118,"style":118},"python -m http.server 8000\n",[120,126767,126768],{"__ignoreMap":118},[123,126769,126770,126772,126774,126777],{"class":125,"line":126},[123,126771,117],{"class":337},[123,126773,103275],{"class":164},[123,126775,126776],{"class":143}," http.server",[123,126778,126779],{"class":164}," 8000\n",[26,126781,126782],{"start":156},[29,126783,126784,126785,126788],{},"这会在端口",[120,126786,126787],{},"8000","上启动一个Web服务器。",[3606,126790,126791],{},[29,126792,126793],{},"启动服务器后，Termux会显示日志信息，例如：",[113,126795,126797],{"className":123204,"code":126796,"language":123206,"meta":123207,"style":118},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[120,126798,126799],{"__ignoreMap":118},[123,126800,126801],{"class":125,"line":126},[123,126802,126796],{},[3606,126804,126805],{},[29,126806,126807],{},"这表示服务器已成功启动。",[19,126809,126810],{},[2759,126811,126812],{},"在浏览器中访问HTML文件",[26,126814,126815],{},[29,126816,126817,28894,126820,126825],{},[2759,126818,126819],{},"在同一设备上访问",[26,126821,126822],{},[29,126823,126824],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[113,126826,126829],{"className":126827,"code":126828,"language":74064,"meta":118,"style":118},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[120,126830,126831],{"__ignoreMap":118},[123,126832,126833,126836],{"class":125,"line":126},[123,126834,126835],{"class":129},"http:",[123,126837,126838],{"class":2673},"\u002F\u002Flocalhost:8000\n",[3606,126840,126841],{},[29,126842,126843,126844,126847],{},"如果HTML文件中有",[120,126845,126846],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126849,126851],{"id":126850},"_76-linux重点知识","7.6 Linux重点知识",[2587,126853,126855],{"id":126854},"_761-关于点的说明","7.6.1 关于点的说明",[19,126857,126858],{},[3929,126859],{"alt":118,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126862,126863],{},"一点本目录，两点上目录",[2587,126865,126867],{"id":126866},"_762-目录","7.6.2 目录",[24425,126869,126871],{"id":126870},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126873,126874],{},[2759,126875,126876],{},"\u002Fboot:",[19,126878,126879],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126881,126882],{},[2759,126883,126884],{},"\u002Fetc:",[19,126886,126887],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126889,126890],{},[2759,126891,126892],{},"\u002Flib：",[19,126894,126895],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126897,126898],{},[2759,126899,126900],{},"\u002Fsys:",[19,126902,126903],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24425,126905,126907],{"id":126906},"_7622-指令集合","7.6.2.2 指令集合",[19,126909,126910],{},[2759,126911,126912],{},"\u002Fbin:",[19,126914,126915],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126917,126918],{},[2759,126919,126920],{},"\u002Fsbin:",[19,126922,126923],{},"只有系统管理员才能使用的程序和指令",[24425,126925,126927],{"id":126926},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126929,126930],{},[2759,126931,126932],{},"\u002Fdev:",[19,126934,126935],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126937,126938],{},[2759,126939,126940],{},"\u002Fmedia:",[19,126942,126943],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126945,126946],{},[2759,126947,126948],{},"\u002Fmnt:",[19,126950,126951],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24425,126953,126955],{"id":126954},"_7624-临时文件","7.6.2.4 临时文件",[19,126957,126958],{},[2759,126959,126960],{},"\u002Frun:",[19,126962,126963],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126965,126966],{},[2759,126967,126968],{},"\u002Flost+found:",[19,126970,126971],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126973,126974],{},[2759,126975,126976],{},"\u002Ftmp:",[19,126978,126979],{},"这个目录是用来存放一些临时文件的",[24425,126981,126983],{"id":126982},"_7625-账户","7.6.2.5 账户",[19,126985,126986],{},[2759,126987,126988],{},"\u002Froot：",[19,126990,126991],{},"系统管理员的用户主目录",[19,126993,126994,28894],{},[2759,126995,126996],{},"\u002Fhome",[19,126998,126999],{},"用户的主目录，以用户的账号命名的",[19,127001,127002,28894],{},[2759,127003,127004],{},"\u002Fusr",[19,127006,127007],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,127009,127010],{},[2759,127011,127012],{},"\u002Fusr\u002Fbin：",[19,127014,127015],{},"系统用户使用的应用程序与指令",[19,127017,127018],{},[2759,127019,127020],{},"\u002Fusr\u002Fsbin：",[19,127022,127023],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,127025,127026],{},[2759,127027,127028],{},"\u002Fusr\u002Fsrc：",[19,127030,127031],{},"内核源代码默认的放置目录",[24425,127033,127035],{"id":127034},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,127037,127038],{},[2759,127039,127040],{},"\u002Fvar：",[19,127042,127043],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,127045,127046],{},[2759,127047,127048],{},"\u002Fproc:",[19,127050,127051,127052,127055],{},"管理 ",[2759,127053,127054],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24425,127057,127059],{"id":127058},"_7627-扩展用的","7.6.2.7 扩展用的",[19,127061,127062],{},[2759,127063,127064],{},"\u002Fopt:",[19,127066,127067],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,127069,127070],{},[2759,127071,127072],{},"\u002Fsrv:",[19,127074,127075],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[2587,127077,127079],{"id":127078},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,127081,127082],{},[3929,127083],{"alt":118,"src":127084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,127086,127087],{},"windows-->linux:",[19,127089,127090],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,127092,127093],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,127095,127096],{},"linux传输文件到windows",[19,127098,127099],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[2587,127101,127103],{"id":127102},"_764-易忘知识","7.6.4 易忘知识",[19,127105,127106],{},"操作系统内核查看",[113,127108,127109],{"className":119684,"code":123678,"language":119686,"meta":118,"style":118},[120,127110,127111],{"__ignoreMap":118},[123,127112,127113,127115],{"class":125,"line":126},[123,127114,72604],{"class":337},[123,127116,123687],{"class":164},[19,127118,127119],{},[3929,127120],{"alt":118,"src":127121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,127123,127124],{},[3929,127125],{"alt":118,"src":127126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[113,127128,127130],{"className":119684,"code":127129,"language":119686,"meta":118,"style":118},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[120,127131,127132,127144],{"__ignoreMap":118},[123,127133,127134,127136,127139,127142],{"class":125,"line":126},[123,127135,123895],{"class":337},[123,127137,127138],{"class":143}," mvtest",[123,127140,127141],{"class":143}," mvtest2",[123,127143,5116],{"class":129},[123,127145,127146],{"class":125,"line":140},[123,127147,127148],{"class":337},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,127150,127151],{},[3929,127152],{"alt":118,"src":127153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,127155,127156],{},[3929,127157],{"alt":118,"src":127158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,127160,127161,127162,127165],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[120,127163,127164],{},"du -a"," 可以快速查看磁盘使用细节。",[2587,127167,127169],{"id":127168},"_765-vim","7.6.5 Vim",[19,127171,127172],{},[3929,127173],{"alt":118,"src":127174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127176,127177],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127179,127180],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127182,127183],{},[2759,127184,127185],{},"1.命令模式：",[19,127187,127188],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127190,127191],{},"x 删除当前光标所在处的字符",[19,127193,127194],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127196,127197],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127199,127200],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127202,127203],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127205,127206],{},"dd 剪切当前行",[19,127208,127209],{},"yy 复制当前行",[19,127211,127212],{},"p 粘贴剪贴板内容到光标下方",[19,127214,127215],{},"P 粘贴剪贴板内容到光标上方",[19,127217,127218],{},"u 撤销上一次操作",[19,127220,127221],{},"ctrl+r 重做上一次操作",[19,127223,127224,127226],{},[3397,127225],{}," 保存文件",[19,127228,127229,127231],{},[3247,127230],{}," 退出Vim编辑器",[19,127233,127234,127236],{},[3247,127235],{},"! 强制退出Vim编辑器，不保存修改",[19,127238,127239],{},[2759,127240,127241],{},"2.输入模式：",[19,127243,127244],{},[3929,127245],{"alt":118,"src":127246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127248,127249],{},[2759,127250,127251],{},"3.底线命令模式：",[19,127253,127254],{},[3929,127255],{"alt":118,"src":127256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127258,127259],{},"按下esc可以退出底线命令模式",[2587,127261,127263],{"id":127262},"_766-apt","7.6.6 apt",[19,127265,127266],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[2587,127268,127270],{"id":127269},"_767-home与root的区别","7.6.7 home与root的区别",[19,127272,127273],{},[3929,127274],{"alt":118,"src":127275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127277,127278],{},[3929,127279],{"alt":118,"src":127280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127282,127283],{},[3929,127284],{"alt":118,"src":127285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127287,127288],{},[3929,127289],{"alt":118,"src":127290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[2587,127292,127294],{"id":127293},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127296,127297],{},[2846,127298,127299],{"href":127299,"rel":127300},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26287],[26,127302,127303,127306],{},[29,127304,127305],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,127307,127308],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127310,127311],{},[3929,127312],{"alt":118,"src":127313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127315,127316],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127318,127319],{},[3929,127320],{"alt":118,"src":127321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[113,127323,127325],{"className":123204,"code":127324,"language":123206,"meta":123207,"style":118},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[120,127326,127327,127332],{"__ignoreMap":118},[123,127328,127329],{"class":125,"line":126},[123,127330,127331],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[123,127333,127334],{"class":125,"line":140},[123,127335,127336],{},".\u002Fpycharm.sh\n",[19,127338,127339],{},"3️⃣创建.desktop文件",[19,127341,127342],{},[2759,127343,127344],{},"原理：",[3606,127346,127347,127357],{},[29,127348,127349,127350,127356],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2759,127351,127352,127355],{},[120,127353,127354],{},".desktop"," 文件"," 来识别应用。",[29,127358,127359,127361,127362],{},[120,127360,127354],{}," 文件相当于一个“应用注册表”，告诉系统：",[3606,127363,127364,127367,127370,127373,127376],{},[29,127365,127366],{},"应用名字（Name）",[29,127368,127369],{},"图标（Icon）",[29,127371,127372],{},"执行命令（Exec）",[29,127374,127375],{},"分类（Categories）",[29,127377,127378],{},"是否需要终端（Terminal）",[113,127380,127382],{"className":123204,"code":127381,"language":123206,"meta":123207,"style":118},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[120,127383,127384,127389],{"__ignoreMap":118},[123,127385,127386],{"class":125,"line":126},[123,127387,127388],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[123,127390,127391],{"class":125,"line":140},[123,127392,127393],{},"nano pycharm.desktop\n",[19,127395,127396],{},"nano是一个命令行下的编辑器，也可以使用vim",[113,127398,127400],{"className":123204,"code":127399,"language":123206,"meta":123207,"style":118},"[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",[120,127401,127402,127407,127412,127417,127422,127427,127432,127437,127442,127447],{"__ignoreMap":118},[123,127403,127404],{"class":125,"line":126},[123,127405,127406],{},"[Desktop Entry]\n",[123,127408,127409],{"class":125,"line":140},[123,127410,127411],{},"Version=1.0\n",[123,127413,127414],{"class":125,"line":156},[123,127415,127416],{},"Type=Application\n",[123,127418,127419],{"class":125,"line":168},[123,127420,127421],{},"Name=PyCharm\n",[123,127423,127424],{"class":125,"line":268},[123,127425,127426],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[123,127428,127429],{"class":125,"line":291},[123,127430,127431],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[123,127433,127434],{"class":125,"line":300},[123,127435,127436],{},"Comment=JetBrains PyCharm IDE\n",[123,127438,127439],{"class":125,"line":305},[123,127440,127441],{},"Categories=Development;IDE;\n",[123,127443,127444],{"class":125,"line":316},[123,127445,127446],{},"Terminal=false\n",[123,127448,127449],{"class":125,"line":673},[123,127450,127451],{},"StartupWMClass=jetbrains-pycharm\n",[3606,127453,127454,127460,127466,127472],{},[29,127455,127456,127459],{},[120,127457,127458],{},"Exec"," → 点击图标时执行的命令",[29,127461,127462,127465],{},[120,127463,127464],{},"Icon"," → 显示在菜单和桌面上的图标",[29,127467,127468,127471],{},[120,127469,127470],{},"Terminal=false"," → 不打开终端",[29,127473,127474,127477],{},[120,127475,127476],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127479,127480,127481],"blockquote",{},[19,127482,127483,127484,127486,127487],{},"可以理解成 ",[120,127485,127354],{}," 文件是 Linux 的 ",[2759,127488,127489],{},"快捷方式配置文件",[19,127491,127492],{},"4️⃣设置可执行权限",[113,127494,127496],{"className":123204,"code":127495,"language":123206,"meta":123207,"style":118},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[120,127497,127498],{"__ignoreMap":118},[123,127499,127500],{"class":125,"line":126},[123,127501,127495],{},[19,127503,127504],{},"5️⃣桌面图标启动的话如下：",[113,127506,127508],{"className":123204,"code":127507,"language":123206,"meta":123207,"style":118},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[120,127509,127510,127515],{"__ignoreMap":118},[123,127511,127512],{"class":125,"line":126},[123,127513,127514],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[123,127516,127517],{"class":125,"line":140},[123,127518,127519],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,127521,127522],{"start":156},[29,127523,127524],{},"下载Appimage文件实现软件的安装",[19,127526,127527],{},"1️⃣先下载appimage",[19,127529,127530],{},[2846,127531,127532],{"href":127532,"rel":127533},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26287],[19,127535,127536],{},[3929,127537],{"alt":118,"src":127538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127540,127541],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127543,127544],{},[3929,127545],{"alt":118,"src":127546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127548,127549],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127551,127552],{},[3929,127553],{"alt":118,"src":127554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127556,127557],{},[3929,127558],{"alt":118,"src":127559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127561,127562,127563,127566],{},"3️⃣给他们放在",[120,127564,127565],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127568,127569],{},"4️⃣给软件执行权限",[113,127571,127573],{"className":123204,"code":127572,"language":123206,"meta":123207,"style":118},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[120,127574,127575,127580],{"__ignoreMap":118},[123,127576,127577],{"class":125,"line":126},[123,127578,127579],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[123,127581,127582],{"class":125,"line":140},[123,127583,127584],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127586,127587],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[113,127589,127591],{"className":119684,"code":127590,"language":119686,"meta":118,"style":118},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[120,127592,127593,127600,127607,127613],{"__ignoreMap":118},[123,127594,127595,127597],{"class":125,"line":126},[123,127596,103669],{"class":164},[123,127598,127599],{"class":143}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[123,127601,127602,127604],{"class":125,"line":140},[123,127603,103676],{"class":337},[123,127605,127606],{"class":143}," .\u002Fqqmusic.desktop\n",[123,127608,127609,127611],{"class":125,"line":156},[123,127610,126655],{"class":337},[123,127612,127606],{"class":143},[123,127614,127615,127617,127619,127621],{"class":125,"line":168},[123,127616,26999],{"class":337},[123,127618,27002],{"class":143},[123,127620,125521],{"class":143},[123,127622,127606],{"class":143},[19,127624,127625,127627],{},[120,127626,103676],{},"：一个 Linux 命令，主要功能是：",[3606,127629,127630,127633],{},[29,127631,127632],{},"如果文件不存在，就创建一个新的空文件",[29,127634,127635],{},"如果文件已存在，就更新该文件的最后修改时间",[113,127637,127639],{"className":123204,"code":127638,"language":123206,"meta":123207,"style":118},"[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",[120,127640,127641,127645,127650,127655,127660,127664,127669],{"__ignoreMap":118},[123,127642,127643],{"class":125,"line":126},[123,127644,127406],{},[123,127646,127647],{"class":125,"line":140},[123,127648,127649],{},"Name=QQ音乐\n",[123,127651,127652],{"class":125,"line":156},[123,127653,127654],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[123,127656,127657],{"class":125,"line":168},[123,127658,127659],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[123,127661,127662],{"class":125,"line":268},[123,127663,127416],{},[123,127665,127666],{"class":125,"line":291},[123,127667,127668],{},"Categories=Audio;Music;Player;\n",[123,127670,127671],{"class":125,"line":300},[123,127672,127673],{},"Comment=QQ Music Client for Linux\n",[19,127675,127676],{},"将文件复制进去",[19,127678,127679],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127681,127682],{},[3929,127683],{"alt":118,"src":127684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127686,127687],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127689,127690],{},[3929,127691],{"alt":118,"src":127692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127694,127695,127696,127699,127700,127703],{},"如果你用的不是KDE，那么也可以直接修改",[120,127697,127698],{},"qqmuic.desktop","：在exec的末尾加上",[120,127701,127702],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[113,127705,127707],{"className":123204,"code":127706,"language":123206,"meta":123207,"style":118},"[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",[120,127708,127709,127713,127717,127722,127726,127730,127734],{"__ignoreMap":118},[123,127710,127711],{"class":125,"line":126},[123,127712,127406],{},[123,127714,127715],{"class":125,"line":140},[123,127716,127649],{},[123,127718,127719],{"class":125,"line":156},[123,127720,127721],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[123,127723,127724],{"class":125,"line":168},[123,127725,127659],{},[123,127727,127728],{"class":125,"line":268},[123,127729,127416],{},[123,127731,127732],{"class":125,"line":291},[123,127733,127668],{},[123,127735,127736],{"class":125,"line":300},[123,127737,127673],{},[19,127739,127740],{},[3929,127741],{"alt":118,"src":127742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127744,127745],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[113,127747,127749],{"className":123204,"code":127748,"language":123206,"meta":123207,"style":118},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[120,127750,127751],{"__ignoreMap":118},[123,127752,127753],{"class":125,"line":126},[123,127754,127748],{},[26,127756,127757],{"start":168},[29,127758,127759],{},"去Flathub上安装软件",[19,127761,127762],{},[2846,127763,127764],{"href":127764,"rel":127765},"https:\u002F\u002Fflathub.org\u002F",[26287],[19,127767,127768],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127770,127771],{},[3929,127772],{"alt":118,"src":127773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[113,127775,127777],{"className":123204,"code":127776,"language":123206,"meta":123207,"style":118},"flatpak install flathub com.obsproject.Studio\n",[120,127778,127779],{"__ignoreMap":118},[123,127780,127781],{"class":125,"line":126},[123,127782,127776],{},[19,127784,127785],{},[3929,127786],{"alt":118,"src":127787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127789,127790],{},"2️⃣运行软件",[19,127792,127793],{},"a.官方方式：",[19,127795,127796],{},[3929,127797],{"alt":118,"src":127798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[113,127800,127801],{"className":123204,"code":127776,"language":123206,"meta":123207,"style":118},[120,127802,127803],{"__ignoreMap":118},[123,127804,127805],{"class":125,"line":126},[123,127806,127776],{},[19,127808,127809],{},"b.当普通软件运行：",[19,127811,127812],{},[3929,127813],{"alt":118,"src":127814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127816,127817],{},[3929,127818],{"alt":118,"src":127819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2526,127821,127822],{},"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":118,"searchDepth":140,"depth":140,"links":127824},[127825,127826,127831,127832,127838,127839],{"id":124557,"depth":140,"text":124558},{"id":124899,"depth":140,"text":124900,"children":127827},[127828,127829,127830],{"id":124903,"depth":156,"text":124904},{"id":124970,"depth":156,"text":124971},{"id":125231,"depth":156,"text":125232},{"id":125384,"depth":140,"text":125385},{"id":125622,"depth":140,"text":125623,"children":127833},[127834,127835,127836,127837],{"id":125674,"depth":156,"text":125675},{"id":125960,"depth":156,"text":125961},{"id":126231,"depth":156,"text":126232},{"id":126490,"depth":156,"text":126491},{"id":126549,"depth":140,"text":126550},{"id":126850,"depth":140,"text":126851,"children":127840},[127841,127842,127843,127844,127845,127846,127847,127848],{"id":126854,"depth":156,"text":126855},{"id":126866,"depth":156,"text":126867},{"id":127078,"depth":156,"text":127079},{"id":127102,"depth":156,"text":127103},{"id":127168,"depth":156,"text":127169},{"id":127262,"depth":156,"text":127263},{"id":127269,"depth":156,"text":127270},{"id":127293,"depth":156,"text":127294},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124549,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127855,"title":127856,"body":127857,"description":2544,"extension":2545,"meta":127861,"navigation":231,"path":127862,"seo":127863,"stem":127864,"__hash__":127865},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127858,"toc":127859},[],{"title":118,"searchDepth":140,"depth":140,"links":127860},[],{"category":32683},"\u002Fwiki\u002F2025-01-27-linux",{"title":127856,"description":2544},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127867,"title":127868,"body":127869,"description":127873,"extension":2545,"meta":128264,"navigation":231,"path":128265,"seo":128266,"stem":128267,"__hash__":128268},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127870,"toc":128262},[127871,127874,127878,127895,127898,127951,127955,127957,127997,128006,128010,128013,128254,128259],[19,127872,127873],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127875,127877],{"id":127876},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,127879,127880,127883,127886,127889,127892],{},[29,127881,127882],{},"ubuntu环境换源",[29,127884,127885],{},"安装cuda",[29,127887,127888],{},"安装miniconda",[29,127890,127891],{},"安装pytorch",[29,127893,127894],{},"安装genesis",[19,127896,127897],{},"参考链接：",[113,127899,127901],{"className":328,"code":127900,"language":330,"meta":118,"style":118},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[120,127902,127903],{"__ignoreMap":118},[123,127904,127905,127908,127911,127914,127916,127919,127922,127924,127927,127930,127932,127935,127938,127940,127943,127946,127948],{"class":125,"line":126},[123,127906,127907],{"class":337},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[123,127909,127910],{"class":143},"=blogdetail",[123,127912,127913],{"class":129},"&sharetype",[123,127915,134],{"class":133},[123,127917,127918],{"class":143},"blogdetail",[123,127920,127921],{"class":129},"&sharerId",[123,127923,134],{"class":133},[123,127925,127926],{"class":143},"144728092",[123,127928,127929],{"class":129},"&sharerefer",[123,127931,134],{"class":133},[123,127933,127934],{"class":143},"PC",[123,127936,127937],{"class":129},"&sharesource",[123,127939,134],{"class":133},[123,127941,127942],{"class":143},"qq_69379513",[123,127944,127945],{"class":129},"&sharefrom",[123,127947,134],{"class":133},[123,127949,127950],{"class":143},"from_link\n",[10,127952,127954],{"id":127953},"_2genesis-报错issue","2.Genesis 报错issue",[19,127956,127897],{},[113,127958,127959],{"className":328,"code":127900,"language":330,"meta":118,"style":118},[120,127960,127961],{"__ignoreMap":118},[123,127962,127963,127965,127967,127969,127971,127973,127975,127977,127979,127981,127983,127985,127987,127989,127991,127993,127995],{"class":125,"line":126},[123,127964,127907],{"class":337},[123,127966,127910],{"class":143},[123,127968,127913],{"class":129},[123,127970,134],{"class":133},[123,127972,127918],{"class":143},[123,127974,127921],{"class":129},[123,127976,134],{"class":133},[123,127978,127926],{"class":143},[123,127980,127929],{"class":129},[123,127982,134],{"class":133},[123,127984,127934],{"class":143},[123,127986,127937],{"class":129},[123,127988,134],{"class":133},[123,127990,127942],{"class":143},[123,127992,127945],{"class":129},[123,127994,134],{"class":133},[123,127996,127950],{"class":143},[113,127998,128000],{"className":328,"code":127999,"language":330,"meta":118,"style":118},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[120,128001,128002],{"__ignoreMap":118},[123,128003,128004],{"class":125,"line":126},[123,128005,127999],{"class":337},[10,128007,128009],{"id":128008},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128011,128012],{},"hello_robot.py",[113,128014,128016],{"className":115,"code":128015,"language":117,"meta":118,"style":118},"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",[120,128017,128018,128024,128039,128043,128055,128067,128071,128084,128088,128107,128117,128127,128141,128145,128149,128154,128158,128168,128175,128189,128196,128206,128211,128215,128233,128238,128242,128249],{"__ignoreMap":118},[123,128019,128020,128022],{"class":125,"line":126},[123,128021,223],{"class":133},[123,128023,47713],{"class":129},[123,128025,128026,128029,128032,128034,128036],{"class":125,"line":140},[123,128027,128028],{"class":129},"os.environ[",[123,128030,128031],{"class":143},"'PYOPENGL_PLATFORM'",[123,128033,1941],{"class":129},[123,128035,134],{"class":133},[123,128037,128038],{"class":143}," 'glx'\n",[123,128040,128041],{"class":125,"line":156},[123,128042,232],{"emptyLinePlaceholder":231},[123,128044,128045,128047,128050,128052],{"class":125,"line":168},[123,128046,223],{"class":133},[123,128048,128049],{"class":129}," genesis ",[123,128051,547],{"class":133},[123,128053,128054],{"class":129}," gs\n",[123,128056,128057,128059,128062,128064],{"class":125,"line":268},[123,128058,391],{"class":133},[123,128060,128061],{"class":129}," pynput ",[123,128063,223],{"class":133},[123,128065,128066],{"class":129}," keyboard\n",[123,128068,128069],{"class":125,"line":291},[123,128070,232],{"emptyLinePlaceholder":231},[123,128072,128073,128076,128079,128081],{"class":125,"line":300},[123,128074,128075],{"class":129},"gs.init(",[123,128077,128078],{"class":279},"backend",[123,128080,134],{"class":133},[123,128082,128083],{"class":129},"gs.gpu)\n",[123,128085,128086],{"class":125,"line":305},[123,128087,232],{"emptyLinePlaceholder":231},[123,128089,128090,128093,128095,128098,128101,128103,128105],{"class":125,"line":316},[123,128091,128092],{"class":129},"scene ",[123,128094,134],{"class":133},[123,128096,128097],{"class":129}," gs.Scene(",[123,128099,128100],{"class":279},"show_viewer",[123,128102,134],{"class":133},[123,128104,870],{"class":164},[123,128106,288],{"class":129},[123,128108,128109,128112,128114],{"class":125,"line":673},[123,128110,128111],{"class":129},"plane ",[123,128113,134],{"class":133},[123,128115,128116],{"class":129}," scene.add_entity(gs.morphs.Plane())\n",[123,128118,128119,128122,128124],{"class":125,"line":692},[123,128120,128121],{"class":129},"franka ",[123,128123,134],{"class":133},[123,128125,128126],{"class":129}," scene.add_entity(\n",[123,128128,128129,128132,128134,128136,128139],{"class":125,"line":713},[123,128130,128131],{"class":129},"    gs.morphs.MJCF(",[123,128133,1357],{"class":279},[123,128135,134],{"class":133},[123,128137,128138],{"class":143},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[123,128140,650],{"class":129},[123,128142,128143],{"class":125,"line":718},[123,128144,288],{"class":129},[123,128146,128147],{"class":125,"line":1138},[123,128148,232],{"emptyLinePlaceholder":231},[123,128150,128151],{"class":125,"line":1429},[123,128152,128153],{"class":129},"scene.build()\n",[123,128155,128156],{"class":125,"line":1439},[123,128157,232],{"emptyLinePlaceholder":231},[123,128159,128160,128162,128165],{"class":125,"line":1444},[123,128161,34359],{"class":133},[123,128163,128164],{"class":337}," on_press",[123,128166,128167],{"class":129},"(key):\n",[123,128169,128170,128173],{"class":125,"line":1453},[123,128171,128172],{"class":133},"    try",[123,128174,1344],{"class":129},[123,128176,128177,128179,128182,128184,128187],{"class":125,"line":1458},[123,128178,4940],{"class":133},[123,128180,128181],{"class":129}," key.char ",[123,128183,5391],{"class":133},[123,128185,128186],{"class":143}," 'q'",[123,128188,1344],{"class":129},[123,128190,128191,128193],{"class":125,"line":1476},[123,128192,18160],{"class":133},[123,128194,128195],{"class":164}," False\n",[123,128197,128198,128201,128204],{"class":125,"line":1494},[123,128199,128200],{"class":133},"    except",[123,128202,128203],{"class":164}," AttributeError",[123,128205,1344],{"class":129},[123,128207,128208],{"class":125,"line":1499},[123,128209,128210],{"class":133},"        pass\n",[123,128212,128213],{"class":125,"line":1517},[123,128214,232],{"emptyLinePlaceholder":231},[123,128216,128217,128220,128222,128225,128228,128230],{"class":125,"line":1534},[123,128218,128219],{"class":129},"listener ",[123,128221,134],{"class":133},[123,128223,128224],{"class":129}," keyboard.Listener(",[123,128226,128227],{"class":279},"on_press",[123,128229,134],{"class":133},[123,128231,128232],{"class":129},"on_press)\n",[123,128234,128235],{"class":125,"line":1539},[123,128236,128237],{"class":129},"listener.start()\n",[123,128239,128240],{"class":125,"line":2080},[123,128241,232],{"emptyLinePlaceholder":231},[123,128243,128244,128246],{"class":125,"line":2097},[123,128245,111052],{"class":133},[123,128247,128248],{"class":129}," listener.running:\n",[123,128250,128251],{"class":125,"line":2114},[123,128252,128253],{"class":129},"    scene.step()\n",[19,128255,128256],{},[3929,128257],{"alt":118,"src":128258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2526,128260,128261],{},"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":118,"searchDepth":140,"depth":140,"links":128263},[],{"category":25805},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127868,"description":127873},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128270,"title":128271,"body":128272,"description":2544,"extension":2545,"meta":128287,"navigation":231,"path":128288,"seo":128289,"stem":128290,"__hash__":128291},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128273,"toc":128284},[128274,128277,128281],[10,128275,128271],{"id":128276},"_1-基础知识",[14,128278,128280],{"id":128279},"_11-js的组成","1.1 js的组成",[19,128282,128283],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":118,"searchDepth":140,"depth":140,"links":128285},[128286],{"id":128279,"depth":140,"text":128280},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128271,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128293,"title":128294,"body":128295,"description":2544,"extension":2545,"meta":128434,"navigation":231,"path":128435,"seo":128436,"stem":128437,"__hash__":128438},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128296,"toc":128422},[128297,128300,128304,128307,128311,128321,128325,128328,128331,128334,128338,128345,128351,128355,128361,128372,128376,128379,128383,128386,128390,128393,128397,128400,128404,128407,128410,128413,128416,128419],[10,128298,128294],{"id":128299},"_2-vscode必备内容",[14,128301,128303],{"id":128302},"_21-标签分类","2.1 标签分类",[19,128305,128306],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128308,128310],{"id":128309},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128312,128313,128314,128316,128317,128320],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[120,128315,2834],{}," 然后按 ",[120,128318,128319],{},"Tab","，快速自动生成基本结构。",[14,128322,128324],{"id":128323},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128326,128327],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128329,128330],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128332,128333],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128335,128337],{"id":128336},"_24-视图缩放","2.4 视图缩放",[19,128339,128340,128341,128344],{},"缩放视图 ",[120,128342,128343],{},"ctrl+"," 可实现代码增大。",[19,128346,128347,128350],{},[120,128348,128349],{},"ctrl-"," 可实现代码减小。",[14,128352,128354],{"id":128353},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128356,128357,128358,2494],{},"VSCode 新建文件快捷键为 ",[120,128359,128360],{},"ctrl+N",[19,128362,128363,128364,128367,128368,128371],{},"保存快捷键为 ",[120,128365,128366],{},"ctrl+S","，将文本保存为 ",[120,128369,128370],{},".html"," 文件。",[14,128373,128375],{"id":128374},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128377,128378],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128380,128382],{"id":128381},"_27-vscode-icons","2.7 vscode-icons",[19,128384,128385],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128387,128389],{"id":128388},"_28-easy-less","2.8 Easy LESS",[19,128391,128392],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128394,128396],{"id":128395},"_29-会了吧插件","2.9 会了吧插件",[19,128398,128399],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128401,128403],{"id":128402},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128405,128406],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128408,128409],{},"②选定多个相同的单词:ctrl+D",[19,128411,128412],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128414,128415],{},"④全局替换某些单词:ctrl+h",[19,128417,128418],{},"⑤快速定位到某一行:ctrl+g",[19,128420,128421],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":118,"searchDepth":140,"depth":140,"links":128423},[128424,128425,128426,128427,128428,128429,128430,128431,128432,128433],{"id":128302,"depth":140,"text":128303},{"id":128309,"depth":140,"text":128310},{"id":128323,"depth":140,"text":128324},{"id":128336,"depth":140,"text":128337},{"id":128353,"depth":140,"text":128354},{"id":128374,"depth":140,"text":128375},{"id":128381,"depth":140,"text":128382},{"id":128388,"depth":140,"text":128389},{"id":128395,"depth":140,"text":128396},{"id":128402,"depth":140,"text":128403},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128294,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128440,"title":128441,"body":128442,"description":2544,"extension":2545,"meta":128601,"navigation":231,"path":128602,"seo":128603,"stem":128604,"__hash__":128605},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128443,"toc":128593},[128444,128447,128451,128461,128467,128473,128477,128486,128490,128495,128498,128501,128505,128508,128518,128527,128536,128545,128555,128562,128567,128572,128585],[10,128445,128441],{"id":128446},"_3-html文本与容器标签",[14,128448,128450],{"id":128449},"_31-标题标签","3.1 标题标签",[19,128452,128453,128456,128457,128460],{},[120,128454,128455],{},"\u003Ch1>","我是一级标签",[120,128458,128459],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128462,128463,128456,128465],{},[120,128464,128455],{},[120,128466,128459],{},[19,128468,125723,128469,128472],{},[120,128470,128471],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128474,128476],{"id":128475},"_32-段落标签","3.2 段落标签",[19,128478,128479,128482,128483],{},[120,128480,128481],{},"\u003Cp>","....",[120,128484,128485],{},"\u003C\u002Fp>",[14,128487,128489],{"id":128488},"_33-换行标签","3.3 换行标签",[19,128491,128492],{},[120,128493,128494],{},"\u003Cbr \u002F>",[19,128496,128497],{},"具有强制换行的作用",[19,128499,128500],{},"单标签",[14,128502,128504],{"id":128503},"_34-文本格式化标签","3.4 文本格式化标签",[19,128506,128507],{},"提供粗体、斜体和下划线等效果",[19,128509,128510,128511,84936,128514,128517],{},"加粗：",[120,128512,128513],{},"\u003Cstrong>...\u003C\u002Fstrong>",[120,128515,128516],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128519,128520,128521,84936,128524,128517],{},"斜体：",[120,128522,128523],{},"\u003Cem>...\u003C\u002Fem>",[120,128525,128526],{},"\u003Ci>...\u003C\u002Fi>",[19,128528,128529,128530,84936,128533,128517],{},"删除线：",[120,128531,128532],{},"\u003Cdel>...\u003C\u002Fdel>",[120,128534,128535],{},"\u003Cs>...\u003C\u002Fs>",[19,128537,128538,128539,84936,128542,128517],{},"下划线：",[120,128540,128541],{},"\u003Cins>...\u003C\u002Fins>",[120,128543,128544],{},"\u003Cu>...\u003C\u002Fu>",[14,128546,128548,128549,20838,128552,105084],{"id":128547},"_35-div和span标签","3.5 ",[120,128550,128551],{},"\u003Cdiv>",[120,128553,128554],{},"\u003Cspan>",[19,128556,128557,103411,128559,128561],{},[120,128558,128551],{},[120,128560,128554],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128563,128564],{},[120,128565,128566],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128568,128569],{},[120,128570,128571],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128573,128574,128575,128577,128578,128580,128581,128584],{},"两者特点：①",[120,128576,128551],{}," 标签用来布局，但一行通常只放一个 ",[120,128579,128551],{},"。可以理解为一个大盒子，独占一行，在 ",[120,128582,128583],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128586,79649,128587,128589,128590,128592],{},[120,128588,128554],{}," 标签也可用于布局，一行可以放多个 ",[120,128591,128554],{},"，可理解为小盒子。",{"title":118,"searchDepth":140,"depth":140,"links":128594},[128595,128596,128597,128598,128599],{"id":128449,"depth":140,"text":128450},{"id":128475,"depth":140,"text":128476},{"id":128488,"depth":140,"text":128489},{"id":128503,"depth":140,"text":128504},{"id":128547,"depth":140,"text":128600},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128441,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128607,"title":128608,"body":128609,"description":2544,"extension":2545,"meta":128806,"navigation":231,"path":128807,"seo":128808,"stem":128809,"__hash__":128810},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128610,"toc":128798},[128611,128614,128618,128621,128627,128634,128640,128646,128649,128652,128655,128658,128661,128664,128667,128671,128674,128677,128680,128686,128692,128698,128705,128709,128715,128721,128724,128727,128733,128739,128745,128748,128751,128755,128758,128768,128774,128778,128787,128791,128794],[10,128612,128608],{"id":128613},"_4-html图像与链接",[14,128615,128617],{"id":128616},"_41-图像标签","4.1 图像标签",[19,128619,128620],{},"（1）标签",[19,128622,128623,128626],{},[120,128624,128625],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128628,128629,128630,128633],{},"src是",[120,128631,128632],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128635,128636,128637],{},"alt:文本，替换文本。图像不能显示的文字 ",[120,128638,128639],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128641,128642,128643],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[120,128644,128645],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128647,128648],{},"width:像素，设置图像的宽度",[19,128650,128651],{},"height:像素，设置图像的高度",[19,128653,128654],{},"border：像素，设置图像的边框粗细",[19,128656,128657],{},"（2）图像标签属性的注意点：",[19,128659,128660],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128662,128663],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128665,128666],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128668,128670],{"id":128669},"_42-路径注意要点","4.2 路径注意要点：",[19,128672,128673],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128675,128676],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128678,128679],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128681,128682,128683],{},"①同一级路径：图像文件位于HTML文件同一级，如",[120,128684,128685],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128687,128688,128689],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[120,128690,128691],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128693,128694,128695],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[120,128696,128697],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128699,128700,128701,2859],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2846,128702,128703],{"href":128703,"rel":128704},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26287],[14,128706,128708],{"id":128707},"_43-超链接标签","4.3 超链接标签",[19,128710,128711,128714],{},[120,128712,128713],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128716,128717,128718],{},"①语法格式：",[120,128719,128720],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128722,128723],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128725,128726],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128728,128729,128730],{},"③链接分类：外部链接：",[120,128731,128732],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128734,128735,128736],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[120,128737,128738],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128740,128741,128742],{},"空链接：如果当时没有确定链接目标时，",[120,128743,128744],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128746,128747],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128749,128750],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128752,128754],{"id":128753},"_44-锚点链接","4.4 锚点链接",[19,128756,128757],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128759,128760,128761,128764,128765],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[120,128762,128763],{},"\u003Ca href=\"#two\">","第二级",[120,128766,128767],{},"\u003C\u002Fa>",[19,128769,128770,128771],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[120,128772,128773],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128775,128777],{"id":128776},"_45-注释标签","4.5 注释标签",[19,128779,128780,128783,128784],{},[120,128781,128782],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[120,128785,128786],{},"ctrl+\u002F",[14,128788,128790],{"id":128789},"_46-特殊字符","4.6 特殊字符",[19,128792,128793],{},"可以实现添加多个空格",[3929,128795],{"style":128796,"src":128797},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":118,"searchDepth":140,"depth":140,"links":128799},[128800,128801,128802,128803,128804,128805],{"id":128616,"depth":140,"text":128617},{"id":128669,"depth":140,"text":128670},{"id":128707,"depth":140,"text":128708},{"id":128753,"depth":140,"text":128754},{"id":128776,"depth":140,"text":128777},{"id":128789,"depth":140,"text":128790},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128608,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128812,"title":128813,"body":128814,"description":2544,"extension":2545,"meta":129107,"navigation":231,"path":129108,"seo":129109,"stem":129110,"__hash__":129111},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128815,"toc":129098},[128816,128819,128823,128826,128829,128832,128835,128838,128841,128844,128847,128850,128870,128876,128880,128883,128886,128889,128892,128895,128898,128902,128905,128908,128911,128914,128927,128932,128935,128938,128953,128956,128959,128962,128965,128968,128972,128975,128982,128985,128988,128991,128994,128997,129003,129006,129009,129015,129018,129021,129024,129030,129033,129036,129050,129057,129060,129063,129070,129079,129082,129085,129088,129092,129095],[10,128817,128813],{"id":128818},"_5-html表格列表与表单",[14,128820,128822],{"id":128821},"_51-表格标签","5.1 表格标签",[19,128824,128825],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128827,128828],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128830,128831],{},"②表格基本语法：",[3929,128833],{"style":128796,"src":128834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128836,128837],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3929,128839],{"style":128796,"src":128840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128842,128843],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3929,128845],{"style":128796,"src":128846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128848,128849],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128851,128852,128855,128856,128858,128859,128862,128863,128865,128866,128869],{},[120,128853,128854],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[120,128857,128854],{},"内部必须拥有",[120,128860,128861],{},"\u003Ctr>","标签，一般位于第一行，",[120,128864,128854],{},"比",[120,128867,128868],{},"\u003Cth>","范围广",[19,128871,128872,128875],{},[120,128873,128874],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128877,128879],{"id":128878},"_52-合并单元格","5.2 合并单元格",[19,128881,128882],{},"（1）合并单元格方式：",[19,128884,128885],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128887,128888],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128890,128891],{},"（2）目标单元格：",[19,128893,128894],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128896,128897],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128899,128901],{"id":128900},"_53-列表标签","5.3 列表标签",[19,128903,128904],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128906,128907],{},"①无序列表：",[3929,128909],{"style":128796,"src":128910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128912,128913],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128915,128916,128919,128920,128923,128924,128926],{},[120,128917,128918],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[120,128921,128922],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[120,128925,128918],{},"中输入其他标签或文字是不对的",[19,128928,128929,128931],{},[120,128930,128922],{},"之间相当于一个容器，可以容纳所有元素",[19,128933,128934],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128936,128937],{},"在css中去除前边的小圆点采用如下代码:",[113,128939,128943],{"className":128940,"code":128941,"language":128942,"meta":118,"style":118},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[120,128944,128945],{"__ignoreMap":118},[123,128946,128947,128950],{"class":125,"line":126},[123,128948,128949],{"class":53707},"list-style",[123,128951,128952],{"class":129},": none;\n",[19,128954,128955],{},"②有序列表：",[3929,128957],{"style":128796,"src":128958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128960,128961],{},"③自定义列表：",[3929,128963],{"style":128796,"src":128964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3929,128966],{"style":128796,"src":128967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128969,128971],{"id":128970},"_54-表单标签","5.4 表单标签",[19,128973,128974],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128976,128977,128978,128981],{},"（1）表单域：包含单元素的区域，",[120,128979,128980],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3929,128983],{"style":128796,"src":128984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128986,128987],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128989,128990],{},"表单元素提交必须有name属性",[19,128992,128993],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128995,128996],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128998,79626,128999,129002],{},[120,129000,129001],{},"\u003Cinput>","输入表单元素",[3929,129004],{"style":128796,"src":129005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3929,129007],{"style":128796,"src":129008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129010,129011,129012],{},"单选按钮：",[120,129013,129014],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3929,129016],{"style":128796,"src":129017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129019,129020],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3929,129022],{"style":128796,"src":129023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129025,129026,129029],{},[2759,129027,129028],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129031,129032],{},"②select下拉表单元素：可以节约页面控件",[3929,129034],{"style":128796,"src":129035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,129037,129038,16225,129040,129043,129044,129046,129047,129049],{},[2759,129039,2646],{},[120,129041,129042],{},"\u003Cselect>","中至少包含一对",[120,129045,105104],{},"；在",[120,129048,105104],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129051,129052,129053,129056],{},"③",[120,129054,129055],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3929,129058],{"style":128796,"src":129059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129061,129062],{},"3行20列",[14,129064,129066,129067,105084],{"id":129065},"_55-lable标签","5.5 ",[120,129068,129069],{},"\u003Clable>",[19,129071,129072,129073,129075,129076,129078],{},"它不是表单标签，但常常与表单标签搭配使用，",[120,129074,129069],{},"标签用于绑定一个表单标签，当点击",[120,129077,129069],{},"标签内的文本",[19,129080,129081],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3929,129083],{"style":128796,"src":129084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3929,129086],{"style":128796,"src":129087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129089,129091],{"id":129090},"_56-实例","5.6 实例",[3929,129093],{"style":128796,"src":129094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2526,129096,129097],{},"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":118,"searchDepth":140,"depth":140,"links":129099},[129100,129101,129102,129103,129104,129106],{"id":128821,"depth":140,"text":128822},{"id":128878,"depth":140,"text":128879},{"id":128900,"depth":140,"text":128901},{"id":128970,"depth":140,"text":128971},{"id":129065,"depth":140,"text":129105},"5.5 \u003Clable>标签",{"id":129090,"depth":140,"text":129091},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128813,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129113,"title":129114,"body":129115,"description":2544,"extension":2545,"meta":129664,"navigation":231,"path":129665,"seo":129666,"stem":129667,"__hash__":129668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129116,"toc":129639},[129117,129120,129124,129127,129130,129134,129137,129140,129143,129146,129149,129152,129155,129159,129162,129166,129169,129172,129175,129179,129182,129185,129188,129194,129197,129200,129203,129206,129209,129212,129215,129248,129252,129255,129258,129261,129265,129268,129271,129274,129277,129280,129284,129287,129290,129293,129297,129300,129304,129307,129311,129314,129319,129323,129326,129330,129333,129336,129339,129342,129369,129372,129376,129379,129382,129387,129390,129393,129397,129400,129405,129408,129411,129414,129418,129421,129424,129427,129431,129434,129437,129440,129444,129448,129451,129491,129494,129498,129505,129508,129512,129515,129561,129565,129568,129571,129574,129602,129606,129609,129636],[10,129118,129114],{"id":129119},"_6-css语法与文本样式",[14,129121,129123],{"id":129122},"_61-css语法规范","6.1 css语法规范",[19,129125,129126],{},"由两部分组成，选择器及一条或多条声明",[3929,129128],{"style":128796,"src":129129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129131,129132],{},[2759,129133,2646],{},[19,129135,129136],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129138,129139],{},"②属性与属性值以“键值对”的形式出现",[19,129141,129142],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129144,129145],{},"④属性和属性值之间用英文“;”分开",[3929,129147],{"style":128796,"src":129148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3929,129150],{"style":128796,"src":129151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3929,129153],{"style":128796,"src":129154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129156,129158],{"id":129157},"_62-css选择器","6.2 css选择器",[19,129160,129161],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[2587,129163,129165],{"id":129164},"_621-标签选择器","6.2.1 标签选择器",[19,129167,129168],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129170,129171],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3929,129173],{"style":128796,"src":129174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[2587,129176,129178],{"id":129177},"_622-类选择器","6.2.2 类选择器",[19,129180,129181],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129183,129184],{},"②样例",[3929,129186],{"style":128796,"src":129187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129189,129190,129191,129193],{},"③ ",[2759,129192,129028],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129195,129196],{},"可以理解为给这个标签起了个名字，来表示；",[19,129198,129199],{},"长名称或词组可以使用横线来为选择器命名；",[19,129201,129202],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129204,129205],{},"命名要有意义；",[3929,129207],{"style":128796,"src":129208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129210,129211],{},"类选择器也可以指定特殊的元素p.center{}",[19,129213,129214],{},"p.center和.center都对",[113,129216,129218],{"className":128940,"code":129217,"language":128942,"meta":118,"style":118},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[120,129219,129220,129225,129234,129244],{"__ignoreMap":118},[123,129221,129222],{"class":125,"line":126},[123,129223,129224],{"class":2673},"\u002F* 类选择器指定特殊元素 *\u002F\n",[123,129226,129227,129229,129232],{"class":125,"line":140},[123,129228,19],{"class":53707},[123,129230,129231],{"class":337},".center",[123,129233,137],{"class":129},[123,129235,129236,129238,129240,129242],{"class":125,"line":156},[123,129237,72926],{"class":164},[123,129239,147],{"class":129},[123,129241,53997],{"class":164},[123,129243,3760],{"class":129},[123,129245,129246],{"class":125,"line":168},[123,129247,171],{"class":129},[2587,129249,129251],{"id":129250},"_623-多类名使用","6.2.3 多类名使用",[19,129253,129254],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3929,129256],{"style":128796,"src":129257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129259,129260],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[2587,129262,129264],{"id":129263},"_624-id选择器","6.2.4 id选择器",[19,129266,129267],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129269,129270],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3929,129272],{"style":128796,"src":129273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129275,129276],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129278,129279],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[2587,129281,129283],{"id":129282},"_625-通配符选择器","6.2.5 通配符选择器",[19,129285,129286],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129288,129289],{},"* {",[19,129291,129292],{},"color=\"red\"}",[2587,129294,129296],{"id":129295},"_626-总结","6.2.6 总结",[3929,129298],{"style":128796,"src":129299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129301,129303],{"id":129302},"_63-css字体属性","6.3 css字体属性",[19,129305,129306],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[2587,129308,129310],{"id":129309},"_631-字体系列","6.3.1 字体系列",[19,129312,129313],{},"font-family: '宋体';",[19,129315,129316,129318],{},[2759,129317,2646],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[2587,129320,129322],{"id":129321},"_632-字体大小","6.3.2 字体大小",[19,129324,129325],{},"font-size: 20px",[19,129327,129328,28894],{},[2759,129329,129028],{},[19,129331,129332],{},"①px（像素）大小是网页的最常用单位",[19,129334,129335],{},"②谷歌浏览器默认为16px",[19,129337,129338],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129340,129341],{},"④可以给body指定整个页面的大小：会自动引用",[113,129343,129345],{"className":128940,"code":129344,"language":128942,"meta":118,"style":118},"body {\n  font-size: 16px;\n}\n",[120,129346,129347,129353,129365],{"__ignoreMap":118},[123,129348,129349,129351],{"class":125,"line":126},[123,129350,54205],{"class":53707},[123,129352,137],{"class":129},[123,129354,129355,129357,129359,129361,129363],{"class":125,"line":140},[123,129356,73026],{"class":164},[123,129358,147],{"class":129},[123,129360,3204],{"class":164},[123,129362,53897],{"class":133},[123,129364,3760],{"class":129},[123,129366,129367],{"class":125,"line":156},[123,129368,171],{"class":129},[19,129370,129371],{},"⑤标题标签比较特殊，需要单独指定大小",[2587,129373,129375],{"id":129374},"_633-字体粗细","6.3.3 字体粗细",[19,129377,129378],{},"font-weight: bold;",[19,129380,129381],{},"font-weight: 100；",[19,129383,129384,129386],{},[2759,129385,2646],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129388,129389],{},"font-weight= 400;",[19,129391,129392],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[2587,129394,129396],{"id":129395},"_634-文字样式","6.3.4 文字样式",[19,129398,129399],{},"font-style: normal；",[19,129401,129402,28894],{},[2759,129403,129404],{},"属性值",[19,129406,129407],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129409,129410],{},"②italic：浏览器会显示斜体的字体样式",[3929,129412],{"style":128796,"src":129413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[2587,129415,129417],{"id":129416},"_635-字体符合属性","6.3.5 字体符合属性",[3929,129419],{"style":128796,"src":129420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3929,129422],{"style":128796,"src":129423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129425,129426],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129428,129429,28894],{},[2759,129430,129028],{},[19,129432,129433],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129435,129436],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129438,129439],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129441,129443],{"id":129442},"_64-css-test文本属性","6.4 css test文本属性",[2587,129445,129447],{"id":129446},"_641-文本颜色","6.4.1 文本颜色",[19,129449,129450],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[113,129452,129454],{"className":128940,"code":129453,"language":128942,"meta":118,"style":118},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[120,129455,129456,129461,129467,129477,129482,129487],{"__ignoreMap":118},[123,129457,129458],{"class":125,"line":126},[123,129459,129460],{"class":2673},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[123,129462,129463,129465],{"class":125,"line":140},[123,129464,19],{"class":53707},[123,129466,137],{"class":129},[123,129468,129469,129471,129473,129475],{"class":125,"line":156},[123,129470,73305],{"class":164},[123,129472,147],{"class":129},[123,129474,59823],{"class":164},[123,129476,3760],{"class":129},[123,129478,129479],{"class":125,"line":168},[123,129480,129481],{"class":2673},"  \u002F* color: #ff0000; *\u002F\n",[123,129483,129484],{"class":125,"line":268},[123,129485,129486],{"class":2673},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[123,129488,129489],{"class":125,"line":291},[123,129490,171],{"class":129},[3929,129492],{"style":128796,"src":129493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[2587,129495,129497],{"id":129496},"_642-对齐文本","6.4.2 对齐文本",[19,129499,129500,129501,129504],{},"text-align属于用于设置元素内文本内容的 ",[2759,129502,129503],{},"水平对齐"," 方式",[19,129506,129507],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[2587,129509,129511],{"id":129510},"_643-装饰文本","6.4.3 装饰文本",[19,129513,129514],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[113,129516,129518],{"className":128940,"code":129517,"language":128942,"meta":118,"style":118},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[120,129519,129520,129526,129536,129540,129546,129557],{"__ignoreMap":118},[123,129521,129522,129524],{"class":125,"line":126},[123,129523,2846],{"class":53707},[123,129525,137],{"class":129},[123,129527,129528,129530,129532,129534],{"class":125,"line":140},[123,129529,72902],{"class":164},[123,129531,147],{"class":129},[123,129533,57140],{"class":164},[123,129535,3760],{"class":129},[123,129537,129538],{"class":125,"line":156},[123,129539,171],{"class":129},[123,129541,129542,129544],{"class":125,"line":168},[123,129543,19],{"class":53707},[123,129545,137],{"class":129},[123,129547,129548,129550,129552,129555],{"class":125,"line":268},[123,129549,72902],{"class":164},[123,129551,147],{"class":129},[123,129553,129554],{"class":164},"underline",[123,129556,3760],{"class":129},[123,129558,129559],{"class":125,"line":291},[123,129560,171],{"class":129},[2587,129562,129564],{"id":129563},"_644-文本缩进","6.4.4 文本缩进",[19,129566,129567],{},"实现文本的第一行首行缩进自己指定的距离",[19,129569,129570],{},"20px往右边走；-20px往左边走",[19,129572,129573],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[113,129575,129577],{"className":128940,"code":129576,"language":128942,"meta":118,"style":118},"p {\n  text-indent: 2em;\n}\n",[120,129578,129579,129585,129598],{"__ignoreMap":118},[123,129580,129581,129583],{"class":125,"line":126},[123,129582,19],{"class":53707},[123,129584,137],{"class":129},[123,129586,129587,129590,129592,129594,129596],{"class":125,"line":140},[123,129588,129589],{"class":164},"  text-indent",[123,129591,147],{"class":129},[123,129593,2692],{"class":164},[123,129595,25980],{"class":133},[123,129597,3760],{"class":129},[123,129599,129600],{"class":125,"line":156},[123,129601,171],{"class":129},[2587,129603,129605],{"id":129604},"_645-行间距","6.4.5 行间距",[19,129607,129608],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[113,129610,129612],{"className":128940,"code":129611,"language":128942,"meta":118,"style":118},"p {\n  line-height: 1.6;\n}\n",[120,129613,129614,129620,129632],{"__ignoreMap":118},[123,129615,129616,129618],{"class":125,"line":126},[123,129617,19],{"class":53707},[123,129619,137],{"class":129},[123,129621,129622,129625,129627,129630],{"class":125,"line":140},[123,129623,129624],{"class":164},"  line-height",[123,129626,147],{"class":129},[123,129628,129629],{"class":164},"1.6",[123,129631,3760],{"class":129},[123,129633,129634],{"class":125,"line":156},[123,129635,171],{"class":129},[2526,129637,129638],{},"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":118,"searchDepth":140,"depth":140,"links":129640},[129641,129642,129650,129657],{"id":129122,"depth":140,"text":129123},{"id":129157,"depth":140,"text":129158,"children":129643},[129644,129645,129646,129647,129648,129649],{"id":129164,"depth":156,"text":129165},{"id":129177,"depth":156,"text":129178},{"id":129250,"depth":156,"text":129251},{"id":129263,"depth":156,"text":129264},{"id":129282,"depth":156,"text":129283},{"id":129295,"depth":156,"text":129296},{"id":129302,"depth":140,"text":129303,"children":129651},[129652,129653,129654,129655,129656],{"id":129309,"depth":156,"text":129310},{"id":129321,"depth":156,"text":129322},{"id":129374,"depth":156,"text":129375},{"id":129395,"depth":156,"text":129396},{"id":129416,"depth":156,"text":129417},{"id":129442,"depth":140,"text":129443,"children":129658},[129659,129660,129661,129662,129663],{"id":129446,"depth":156,"text":129447},{"id":129496,"depth":156,"text":129497},{"id":129510,"depth":156,"text":129511},{"id":129563,"depth":156,"text":129564},{"id":129604,"depth":156,"text":129605},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129114,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129670,"title":129671,"body":129672,"description":2544,"extension":2545,"meta":130321,"navigation":231,"path":130322,"seo":130323,"stem":130324,"__hash__":130325},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129673,"toc":130302},[129674,129677,129681,129685,129745,129749,129759,129762,129765,129769,129794,129798,129801,129804,129807,129810,129813,129817,129820,129823,129865,129868,129894,129900,129903,129907,129911,129917,129920,129923,129926,129929,129932,129935,129980,129984,129987,129990,129994,129998,130027,130030,130035,130038,130041,130044,130047,130051,130055,130058,130060,130063,130067,130070,130074,130077,130080,130083,130087,130091,130097,130107,130110,130113,130116,130119,130122,130245,130253,130261,130299],[10,129675,129671],{"id":129676},"_7-css引入方式与选择器进阶",[14,129678,129680],{"id":129679},"_71-css引入方式","7.1 css引入方式",[2587,129682,129684],{"id":129683},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[113,129686,129690],{"className":129687,"code":129688,"language":129689,"meta":118,"style":118},"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",[120,129691,129692,129700,129707,129719,129732,129737],{"__ignoreMap":118},[123,129693,129694,129696,129698],{"class":125,"line":126},[123,129695,3509],{"class":129},[123,129697,2526],{"class":53707},[123,129699,53714],{"class":129},[123,129701,129702,129705],{"class":125,"line":140},[123,129703,129704],{"class":53707},"  h1",[123,129706,137],{"class":129},[123,129708,129709,129712,129714,129717],{"class":125,"line":156},[123,129710,129711],{"class":164},"    color",[123,129713,147],{"class":129},[123,129715,129716],{"class":164},"blue",[123,129718,3760],{"class":129},[123,129720,129721,129724,129726,129728,129730],{"class":125,"line":168},[123,129722,129723],{"class":164},"    font-size",[123,129725,147],{"class":129},[123,129727,3402],{"class":164},[123,129729,53897],{"class":133},[123,129731,3760],{"class":129},[123,129733,129734],{"class":125,"line":268},[123,129735,129736],{"class":129},"  }\n",[123,129738,129739,129741,129743],{"class":125,"line":291},[123,129740,54190],{"class":129},[123,129742,2526],{"class":53707},[123,129744,53714],{"class":129},[19,129746,129747,28894],{},[2759,129748,129028],{},[19,129750,79626,129751,129754,129755,129758],{},[120,129752,129753],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[120,129756,129757],{},"\u003Chead>","标签中",[19,129760,129761],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129763,129764],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[2587,129766,129768],{"id":129767},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[113,129770,129772],{"className":129687,"code":129771,"language":129689,"meta":118,"style":118},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[120,129773,129774],{"__ignoreMap":118},[123,129775,129776,129778,129780,129782,129784,129787,129790,129792],{"class":125,"line":126},[123,129777,3509],{"class":129},[123,129779,19],{"class":53707},[123,129781,65028],{"class":337},[123,129783,134],{"class":129},[123,129785,129786],{"class":143},"\"color: red; font-size: 16px;\"",[123,129788,129789],{"class":129},">这是一个段落\u003C\u002F",[123,129791,19],{"class":53707},[123,129793,53714],{"class":129},[19,129795,129796,28894],{},[2759,129797,129028],{},[19,129799,129800],{},"①style其实就是标签的属性",[19,129802,129803],{},"②在双引号中间，写法要符合css规范",[19,129805,129806],{},"③可以控制当前的标签设置样式",[19,129808,129809],{},"④书写繁琐，简单时才用",[19,129811,129812],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[2587,129814,129816],{"id":129815},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129818,129819],{},"使用最多，单独建一个css文件，然后html引用",[19,129821,129822],{},"①css文件部分： style.css",[113,129824,129826],{"className":128940,"code":129825,"language":128942,"meta":118,"style":118},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[120,129827,129828,129833,129839,129849,129861],{"__ignoreMap":118},[123,129829,129830],{"class":125,"line":126},[123,129831,129832],{"class":2673},"\u002F* style.css *\u002F\n",[123,129834,129835,129837],{"class":125,"line":140},[123,129836,10],{"class":53707},[123,129838,137],{"class":129},[123,129840,129841,129843,129845,129847],{"class":125,"line":156},[123,129842,73305],{"class":164},[123,129844,147],{"class":129},[123,129846,129716],{"class":164},[123,129848,3760],{"class":129},[123,129850,129851,129853,129855,129857,129859],{"class":125,"line":168},[123,129852,73026],{"class":164},[123,129854,147],{"class":129},[123,129856,3402],{"class":164},[123,129858,53897],{"class":133},[123,129860,3760],{"class":129},[123,129862,129863],{"class":125,"line":268},[123,129864,171],{"class":129},[19,129866,129867],{},"②html部分",[113,129869,129871],{"className":129687,"code":129870,"language":129689,"meta":118,"style":118},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[120,129872,129873],{"__ignoreMap":118},[123,129874,129875,129877,129879,129881,129883,129885,129887,129889,129892],{"class":125,"line":126},[123,129876,3509],{"class":129},[123,129878,71406],{"class":53707},[123,129880,71409],{"class":337},[123,129882,134],{"class":129},[123,129884,71414],{"class":143},[123,129886,63459],{"class":337},[123,129888,134],{"class":129},[123,129890,129891],{"class":143},"\"style.css\"",[123,129893,53714],{"class":129},[19,129895,129896,129899],{},[120,129897,129898],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129901,129902],{},"ctrl+0回到页面原来大小",[14,129904,129906],{"id":129905},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[2587,129908,129910],{"id":129909},"_721-快速生成html","7.2.1 快速生成html",[19,129912,129913,129914],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[120,129915,129916],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129918,129919],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129921,129922],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129924,129925],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129927,129928],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129930,129931],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129933,129934],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[113,129936,129938],{"className":129687,"code":129937,"language":129689,"meta":118,"style":118},"\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",[120,129939,129940,129945,129950,129955,129960,129965,129970,129975],{"__ignoreMap":118},[123,129941,129942],{"class":125,"line":126},[123,129943,129944],{"class":2673},"\u003C!-- Emmet 语法示例 -->\n",[123,129946,129947],{"class":125,"line":140},[123,129948,129949],{"class":2673},"\u003C!-- div*3        → 生成3个div -->\n",[123,129951,129952],{"class":125,"line":156},[123,129953,129954],{"class":2673},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[123,129956,129957],{"class":125,"line":168},[123,129958,129959],{"class":2673},"\u003C!-- div+p        → 兄弟div和p -->\n",[123,129961,129962],{"class":125,"line":268},[123,129963,129964],{"class":2673},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[123,129966,129967],{"class":125,"line":291},[123,129968,129969],{"class":2673},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[123,129971,129972],{"class":125,"line":300},[123,129973,129974],{"class":2673},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[123,129976,129977],{"class":125,"line":305},[123,129978,129979],{"class":2673},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[2587,129981,129983],{"id":129982},"_722-快速生成css","7.2.2 快速生成css",[19,129985,129986],{},"简写开头",[19,129988,129989],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129991,129993],{"id":129992},"_73-css复合选择器","7.3 css复合选择器",[2587,129995,129997],{"id":129996},"_731-后代选择器","7.3.1 后代选择器",[113,129999,130001],{"className":128940,"code":130000,"language":128942,"meta":118,"style":118},".parent .child {\n  color: blue;\n}\n",[120,130002,130003,130013,130023],{"__ignoreMap":118},[123,130004,130005,130008,130011],{"class":125,"line":126},[123,130006,130007],{"class":337},".parent",[123,130009,130010],{"class":337}," .child",[123,130012,137],{"class":129},[123,130014,130015,130017,130019,130021],{"class":125,"line":140},[123,130016,73305],{"class":164},[123,130018,147],{"class":129},[123,130020,129716],{"class":164},[123,130022,3760],{"class":129},[123,130024,130025],{"class":125,"line":156},[123,130026,171],{"class":129},[19,130028,130029],{},"元素1 元素2 {样式声明}",[19,130031,130032],{},[2759,130033,130034],{},"注意点:",[19,130036,130037],{},"①元素1和元素2中间用空格隔开",[19,130039,130040],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,130042,130043],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,130045,130046],{},"④元素1和元素2可以是任意基础选择器",[2587,130048,130050],{"id":130049},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130052,130053],{},[2759,130054,130034],{},[19,130056,130057],{},"①元素1和元素2中间用大于号隔开",[19,130059,130040],{},[19,130061,130062],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[2587,130064,130066],{"id":130065},"_733-并集选择器","7.3.3 并集选择器",[19,130068,130069],{},"元素1，元素2 {样式声明}",[19,130071,130072],{},[2759,130073,130034],{},[19,130075,130076],{},"①元素1和元素2中间用逗号隔开",[19,130078,130079],{},"②逗号可以理解为和的意思",[19,130081,130082],{},"③并集选择器通常用于集体声明",[2587,130084,130086],{"id":130085},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130088,130089],{},[2759,130090,130034],{},[19,130092,130093,130094,130096],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71406,130095],{},"－:visited－:hover－:active。",[19,130098,130099,130100,130103,130104,28162],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130101,130102],"hover",{}," 、 ",[130105,130106],"first-child",{},[19,130108,130109],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130111,130112],{},"link对没访问的进行设置",[19,130114,130115],{},"vistied对已访问的进行改变",[19,130117,130118],{},"hover鼠标经过就会变",[19,130120,130121],{},"active常按(点)就会变",[113,130123,130125],{"className":128940,"code":130124,"language":128942,"meta":118,"style":118},"\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",[120,130126,130127,130132,130141,130151,130161,130165,130174,130185,130189,130197,130207,130217,130221,130230,130241],{"__ignoreMap":118},[123,130128,130129],{"class":125,"line":126},[123,130130,130131],{"class":2673},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[123,130133,130134,130136,130139],{"class":125,"line":140},[123,130135,2846],{"class":53707},[123,130137,130138],{"class":337},":link",[123,130140,137],{"class":129},[123,130142,130143,130145,130147,130149],{"class":125,"line":156},[123,130144,73305],{"class":164},[123,130146,147],{"class":129},[123,130148,64771],{"class":164},[123,130150,3760],{"class":129},[123,130152,130153,130155,130157,130159],{"class":125,"line":168},[123,130154,72902],{"class":164},[123,130156,147],{"class":129},[123,130158,57140],{"class":164},[123,130160,3760],{"class":129},[123,130162,130163],{"class":125,"line":268},[123,130164,171],{"class":129},[123,130166,130167,130169,130172],{"class":125,"line":291},[123,130168,2846],{"class":53707},[123,130170,130171],{"class":337},":visited",[123,130173,137],{"class":129},[123,130175,130176,130178,130180,130183],{"class":125,"line":300},[123,130177,73305],{"class":164},[123,130179,147],{"class":129},[123,130181,130182],{"class":164},"purple",[123,130184,3760],{"class":129},[123,130186,130187],{"class":125,"line":305},[123,130188,171],{"class":129},[123,130190,130191,130193,130195],{"class":125,"line":316},[123,130192,2846],{"class":53707},[123,130194,63342],{"class":337},[123,130196,137],{"class":129},[123,130198,130199,130201,130203,130205],{"class":125,"line":673},[123,130200,73305],{"class":164},[123,130202,147],{"class":129},[123,130204,57292],{"class":164},[123,130206,3760],{"class":129},[123,130208,130209,130211,130213,130215],{"class":125,"line":692},[123,130210,72902],{"class":164},[123,130212,147],{"class":129},[123,130214,129554],{"class":164},[123,130216,3760],{"class":129},[123,130218,130219],{"class":125,"line":713},[123,130220,171],{"class":129},[123,130222,130223,130225,130228],{"class":125,"line":718},[123,130224,2846],{"class":53707},[123,130226,130227],{"class":337},":active",[123,130229,137],{"class":129},[123,130231,130232,130234,130236,130239],{"class":125,"line":1138},[123,130233,73305],{"class":164},[123,130235,147],{"class":129},[123,130237,130238],{"class":164},"green",[123,130240,3760],{"class":129},[123,130242,130243],{"class":125,"line":1429},[123,130244,171],{"class":129},[2587,130246,130248,130249,130252],{"id":130247},"_735-伪类选择器","7.3.5 ",[130250,130251],"focus",{},"伪类选择器",[19,130254,130255,130257,130258,130260],{},[130250,130256],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[120,130259,129001],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[113,130262,130264],{"className":128940,"code":130263,"language":128942,"meta":118,"style":118},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[120,130265,130266,130274,130285,130295],{"__ignoreMap":118},[123,130267,130268,130270,130272],{"class":125,"line":126},[123,130269,56224],{"class":53707},[123,130271,64302],{"class":337},[123,130273,137],{"class":129},[123,130275,130276,130279,130281,130283],{"class":125,"line":140},[123,130277,130278],{"class":164},"  border-color",[123,130280,147],{"class":129},[123,130282,57292],{"class":164},[123,130284,3760],{"class":129},[123,130286,130287,130289,130291,130293],{"class":125,"line":156},[123,130288,73198],{"class":164},[123,130290,147],{"class":129},[123,130292,57140],{"class":164},[123,130294,3760],{"class":129},[123,130296,130297],{"class":125,"line":168},[123,130298,171],{"class":129},[2526,130300,130301],{},"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":118,"searchDepth":140,"depth":140,"links":130303},[130304,130309,130313],{"id":129679,"depth":140,"text":129680,"children":130305},[130306,130307,130308],{"id":129683,"depth":156,"text":129684},{"id":129767,"depth":156,"text":129768},{"id":129815,"depth":156,"text":129816},{"id":129905,"depth":140,"text":129906,"children":130310},[130311,130312],{"id":129909,"depth":156,"text":129910},{"id":129982,"depth":156,"text":129983},{"id":129992,"depth":140,"text":129993,"children":130314},[130315,130316,130317,130318,130319],{"id":129996,"depth":156,"text":129997},{"id":130049,"depth":156,"text":130050},{"id":130065,"depth":156,"text":130066},{"id":130085,"depth":156,"text":130086},{"id":130247,"depth":156,"text":130320},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129671,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130327,"title":130328,"body":130329,"description":2544,"extension":2545,"meta":132252,"navigation":231,"path":132253,"seo":132254,"stem":132255,"__hash__":132256},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130330,"toc":132226},[130331,130334,130338,130347,130351,130377,130382,130385,130388,130391,130394,130398,130401,130411,130419,130423,130458,130463,130466,130469,130472,130475,130479,130482,130491,130495,130508,130513,130516,130519,130522,130526,130529,130533,130536,130591,130594,130625,130628,130682,130686,130689,130855,130978,130981,130984,130987,130990,130994,130997,131001,131004,131007,131011,131014,131045,131072,131100,131103,131107,131133,131176,131180,131274,131277,131304,131307,131310,131313,131316,131319,131322,131325,131328,131331,131335,131392,131419,131423,131471,131475,131516,131518,131521,131524,131527,131530,131534,131626,131629,131632,131635,131639,131762,131963,131967,131971,131974,131977,131980,131984,131987,131990,132015,132018,132021,132024,132027,132030,132034,132042,132104,132107,132165,132168,132171,132174,132177,132180,132183,132186,132223],[10,130332,130328],{"id":130333},"_8-css显示模式与背景特性",[14,130335,130337],{"id":130336},"_81-css元素显示模式","8.1 css元素显示模式",[19,130339,130340,130341,130343,130344,130346],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[120,130342,128551],{},"自己占一行，比如一行可以放多个",[120,130345,128554],{},"，HTML 元素一般分为块元素和行内元素两种类型",[2587,130348,130350],{"id":130349},"_811-块元素","8.1.1 块元素",[19,130352,130353,130354,130356,130357,2820,130360,2820,130362,2820,130364,2820,130367,2820,130370,130373,130374,130376],{},"常见的块元素有",[120,130355,128455],{},"~",[120,130358,130359],{},"\u003Ch6>",[120,130361,128481],{},[120,130363,128551],{},[120,130365,130366],{},"\u003Cul>",[120,130368,130369],{},"\u003Col>",[120,130371,130372],{},"\u003Cli>","等，其中 ",[120,130375,128551],{}," 标签是最典型的块元素",[19,130378,130379],{},[2759,130380,130381],{},"块级元素的特点：",[19,130383,130384],{},"① 比较霸道，自己独占一行。",[19,130386,130387],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130389,130390],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130392,130393],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130395,130396],{},[2759,130397,2646],{},[19,130399,130400],{},"①文字类的元素内不能使用块级元素",[19,130402,79649,130403,130405,130406,130408,130409],{},[120,130404,128481],{}," 标签主要用于存放文字，因此 ",[120,130407,128481],{}," 里面不能放块级元素，特别是不能放",[120,130410,128551],{},[19,130412,130413,130414,130356,130416,130418],{},"⑥同理， ",[120,130415,128455],{},[120,130417,130359],{},"等都是文字类块级标签，里面也不能放其他块级元素",[2587,130420,130422],{"id":130421},"_812-行内元素","8.1.2 行内元素",[19,130424,130425,130426,2820,130428,2820,130431,2820,130434,2820,130437,2820,130440,2820,130443,2820,130446,2820,130449,2820,130452,130454,130455,130457],{},"常见的行内元素有 ",[120,130427,128713],{},[120,130429,130430],{},"\u003Cstrong>",[120,130432,130433],{},"\u003Cb>",[120,130435,130436],{},"\u003Cem>",[120,130438,130439],{},"\u003Ci>",[120,130441,130442],{},"\u003Cdel>",[120,130444,130445],{},"\u003Cs>",[120,130447,130448],{},"\u003Cins>",[120,130450,130451],{},"\u003Cu>",[120,130453,128554],{}," 等，其中 ",[120,130456,128554],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130459,130460],{},[2759,130461,130462],{},"特点：",[19,130464,130465],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130467,130468],{},"② 高、宽直接设置是无效的。",[19,130470,130471],{},"③ 默认宽度就是它本身内容的宽度。",[19,130473,130474],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130476,130477],{},[2759,130478,2646],{},[19,130480,130481],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130483,130484,130485,130487,130488,130490],{},"②特殊情况链接 ",[120,130486,128713],{}," 里面可以放块级元素，但是给 ",[120,130489,128713],{}," 转换一下块级模式最安全",[2587,130492,130494],{"id":130493},"_813-行内块元素","8.1.3 行内块元素",[19,130496,130497,130498,2820,130501,2820,130504,130507],{},"在行内元素中有几个特殊的标签 —— ",[120,130499,130500],{},"\u003Cimg \u002F>",[120,130502,130503],{},"\u003Cinput \u002F>",[120,130505,130506],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130509,130510],{},[2759,130511,130512],{},"行内块元素的特点：",[19,130514,130515],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130517,130518],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130520,130521],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[2587,130523,130525],{"id":130524},"_814-总结","8.1.4 总结",[3929,130527],{"style":128796,"src":130528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[2587,130530,130532],{"id":130531},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130534,130535],{},"①转换为块元素：display:block;",[113,130537,130539],{"className":128940,"code":130538,"language":128942,"meta":118,"style":118},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[120,130540,130541,130546,130552,130563,130575,130587],{"__ignoreMap":118},[123,130542,130543],{"class":125,"line":126},[123,130544,130545],{"class":2673},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[123,130547,130548,130550],{"class":125,"line":140},[123,130549,2846],{"class":53707},[123,130551,137],{"class":129},[123,130553,130554,130557,130559,130561],{"class":125,"line":156},[123,130555,130556],{"class":164},"  display",[123,130558,147],{"class":129},[123,130560,63271],{"class":164},[123,130562,3760],{"class":129},[123,130564,130565,130567,130569,130571,130573],{"class":125,"line":168},[123,130566,72968],{"class":164},[123,130568,147],{"class":129},[123,130570,259],{"class":164},[123,130572,53897],{"class":133},[123,130574,3760],{"class":129},[123,130576,130577,130579,130581,130583,130585],{"class":125,"line":268},[123,130578,73188],{"class":164},[123,130580,147],{"class":129},[123,130582,3007],{"class":164},[123,130584,53897],{"class":133},[123,130586,3760],{"class":129},[123,130588,130589],{"class":125,"line":291},[123,130590,171],{"class":129},[19,130592,130593],{},"②转换为行内元素：display:inline;",[113,130595,130597],{"className":128940,"code":130596,"language":128942,"meta":118,"style":118},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[120,130598,130599,130604,130610,130621],{"__ignoreMap":118},[123,130600,130601],{"class":125,"line":126},[123,130602,130603],{"class":2673},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[123,130605,130606,130608],{"class":125,"line":140},[123,130607,54016],{"class":53707},[123,130609,137],{"class":129},[123,130611,130612,130614,130616,130619],{"class":125,"line":156},[123,130613,130556],{"class":164},[123,130615,147],{"class":129},[123,130617,130618],{"class":164},"inline",[123,130620,3760],{"class":129},[123,130622,130623],{"class":125,"line":168},[123,130624,171],{"class":129},[19,130626,130627],{},"③转换为行内块：display:inline-block;",[113,130629,130631],{"className":128940,"code":130630,"language":128942,"meta":118,"style":118},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[120,130632,130633,130638,130644,130654,130666,130678],{"__ignoreMap":118},[123,130634,130635],{"class":125,"line":126},[123,130636,130637],{"class":2673},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[123,130639,130640,130642],{"class":125,"line":140},[123,130641,123],{"class":53707},[123,130643,137],{"class":129},[123,130645,130646,130648,130650,130652],{"class":125,"line":156},[123,130647,130556],{"class":164},[123,130649,147],{"class":129},[123,130651,74783],{"class":164},[123,130653,3760],{"class":129},[123,130655,130656,130658,130660,130662,130664],{"class":125,"line":168},[123,130657,72968],{"class":164},[123,130659,147],{"class":129},[123,130661,1068],{"class":164},[123,130663,53897],{"class":133},[123,130665,3760],{"class":129},[123,130667,130668,130670,130672,130674,130676],{"class":125,"line":268},[123,130669,73188],{"class":164},[123,130671,147],{"class":129},[123,130673,3550],{"class":164},[123,130675,53897],{"class":133},[123,130677,3760],{"class":129},[123,130679,130680],{"class":125,"line":291},[123,130681,171],{"class":129},[2587,130683,130685],{"id":130684},"_816-小米侧边栏","8.1.6 小米侧边栏",[3929,130687],{"style":128796,"src":130688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[113,130690,130692],{"className":129687,"code":130691,"language":129689,"meta":118,"style":118},"\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",[120,130693,130694,130699,130714,130733,130752,130771,130790,130809,130828,130847],{"__ignoreMap":118},[123,130695,130696],{"class":125,"line":126},[123,130697,130698],{"class":2673},"\u003C!-- 小米侧边栏案例 -->\n",[123,130700,130701,130703,130705,130707,130709,130712],{"class":125,"line":140},[123,130702,3509],{"class":129},[123,130704,54016],{"class":53707},[123,130706,55889],{"class":337},[123,130708,134],{"class":129},[123,130710,130711],{"class":143},"\"sidebar\"",[123,130713,53714],{"class":129},[123,130715,130716,130718,130720,130722,130724,130726,130729,130731],{"class":125,"line":156},[123,130717,54548],{"class":129},[123,130719,2846],{"class":53707},[123,130721,63459],{"class":337},[123,130723,134],{"class":129},[123,130725,63464],{"class":143},[123,130727,130728],{"class":129},">手机 电话卡\u003C\u002F",[123,130730,2846],{"class":53707},[123,130732,53714],{"class":129},[123,130734,130735,130737,130739,130741,130743,130745,130748,130750],{"class":125,"line":168},[123,130736,54548],{"class":129},[123,130738,2846],{"class":53707},[123,130740,63459],{"class":337},[123,130742,134],{"class":129},[123,130744,63464],{"class":143},[123,130746,130747],{"class":129},">电视 盒子\u003C\u002F",[123,130749,2846],{"class":53707},[123,130751,53714],{"class":129},[123,130753,130754,130756,130758,130760,130762,130764,130767,130769],{"class":125,"line":268},[123,130755,54548],{"class":129},[123,130757,2846],{"class":53707},[123,130759,63459],{"class":337},[123,130761,134],{"class":129},[123,130763,63464],{"class":143},[123,130765,130766],{"class":129},">笔记本 平板\u003C\u002F",[123,130768,2846],{"class":53707},[123,130770,53714],{"class":129},[123,130772,130773,130775,130777,130779,130781,130783,130786,130788],{"class":125,"line":291},[123,130774,54548],{"class":129},[123,130776,2846],{"class":53707},[123,130778,63459],{"class":337},[123,130780,134],{"class":129},[123,130782,63464],{"class":143},[123,130784,130785],{"class":129},">出行 穿戴\u003C\u002F",[123,130787,2846],{"class":53707},[123,130789,53714],{"class":129},[123,130791,130792,130794,130796,130798,130800,130802,130805,130807],{"class":125,"line":300},[123,130793,54548],{"class":129},[123,130795,2846],{"class":53707},[123,130797,63459],{"class":337},[123,130799,134],{"class":129},[123,130801,63464],{"class":143},[123,130803,130804],{"class":129},">智能 路由器\u003C\u002F",[123,130806,2846],{"class":53707},[123,130808,53714],{"class":129},[123,130810,130811,130813,130815,130817,130819,130821,130824,130826],{"class":125,"line":305},[123,130812,54548],{"class":129},[123,130814,2846],{"class":53707},[123,130816,63459],{"class":337},[123,130818,134],{"class":129},[123,130820,63464],{"class":143},[123,130822,130823],{"class":129},">健康 儿童\u003C\u002F",[123,130825,2846],{"class":53707},[123,130827,53714],{"class":129},[123,130829,130830,130832,130834,130836,130838,130840,130843,130845],{"class":125,"line":316},[123,130831,54548],{"class":129},[123,130833,2846],{"class":53707},[123,130835,63459],{"class":337},[123,130837,134],{"class":129},[123,130839,63464],{"class":143},[123,130841,130842],{"class":129},">耳机 音响\u003C\u002F",[123,130844,2846],{"class":53707},[123,130846,53714],{"class":129},[123,130848,130849,130851,130853],{"class":125,"line":673},[123,130850,54190],{"class":129},[123,130852,54016],{"class":53707},[123,130854,53714],{"class":129},[113,130856,130858],{"className":128940,"code":130857,"language":128942,"meta":118,"style":118},".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",[120,130859,130860,130869,130879,130892,130904,130916,130928,130938,130949,130953,130963,130974],{"__ignoreMap":118},[123,130861,130862,130865,130867],{"class":125,"line":126},[123,130863,130864],{"class":337},".sidebar",[123,130866,3865],{"class":53707},[123,130868,137],{"class":129},[123,130870,130871,130873,130875,130877],{"class":125,"line":140},[123,130872,130556],{"class":164},[123,130874,147],{"class":129},[123,130876,63271],{"class":164},[123,130878,3760],{"class":129},[123,130880,130881,130883,130885,130888,130890],{"class":125,"line":156},[123,130882,72968],{"class":164},[123,130884,147],{"class":129},[123,130886,130887],{"class":164},"234",[123,130889,53897],{"class":133},[123,130891,3760],{"class":129},[123,130893,130894,130896,130898,130900,130902],{"class":125,"line":168},[123,130895,73188],{"class":164},[123,130897,147],{"class":129},[123,130899,3057],{"class":164},[123,130901,53897],{"class":133},[123,130903,3760],{"class":129},[123,130905,130906,130908,130910,130912,130914],{"class":125,"line":268},[123,130907,129624],{"class":164},[123,130909,147],{"class":129},[123,130911,3057],{"class":164},[123,130913,53897],{"class":133},[123,130915,3760],{"class":129},[123,130917,130918,130920,130922,130924,130926],{"class":125,"line":291},[123,130919,73223],{"class":164},[123,130921,147],{"class":129},[123,130923,3550],{"class":164},[123,130925,53897],{"class":133},[123,130927,3760],{"class":129},[123,130929,130930,130932,130934,130936],{"class":125,"line":300},[123,130931,73305],{"class":164},[123,130933,147],{"class":129},[123,130935,63244],{"class":164},[123,130937,3760],{"class":129},[123,130939,130940,130942,130944,130947],{"class":125,"line":305},[123,130941,73278],{"class":164},[123,130943,147],{"class":129},[123,130945,130946],{"class":164},"#55585a",[123,130948,3760],{"class":129},[123,130950,130951],{"class":125,"line":316},[123,130952,171],{"class":129},[123,130954,130955,130957,130959,130961],{"class":125,"line":673},[123,130956,130864],{"class":337},[123,130958,3865],{"class":53707},[123,130960,63342],{"class":337},[123,130962,137],{"class":129},[123,130964,130965,130967,130969,130972],{"class":125,"line":692},[123,130966,73278],{"class":164},[123,130968,147],{"class":129},[123,130970,130971],{"class":164},"#ff6700",[123,130973,3760],{"class":129},[123,130975,130976],{"class":125,"line":713},[123,130977,171],{"class":129},[3929,130979],{"style":128796,"src":130980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130982,130983],{},"行高=盒子高度：实现文字的垂直居中",[19,130985,130986],{},"原理讲解：",[3929,130988],{"style":128796,"src":130989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130991,130993],{"id":130992},"_82-css背景","8.2 css背景",[19,130995,130996],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[2587,130998,131000],{"id":130999},"_821-背景颜色","8.2.1 背景颜色",[19,131002,131003],{},"background-color:颜色值;",[19,131005,131006],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[2587,131008,131010],{"id":131009},"_822-背景图片","8.2.2 背景图片",[19,131012,131013],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[113,131015,131017],{"className":128940,"code":131016,"language":128942,"meta":118,"style":118},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[120,131018,131019,131025,131041],{"__ignoreMap":118},[123,131020,131021,131023],{"class":125,"line":126},[123,131022,54016],{"class":53707},[123,131024,137],{"class":129},[123,131026,131027,131030,131032,131034,131036,131039],{"class":125,"line":140},[123,131028,131029],{"class":164},"  background-image",[123,131031,147],{"class":129},[123,131033,64128],{"class":164},[123,131035,1315],{"class":129},[123,131037,131038],{"class":279},"images\u002Fbg.png",[123,131040,5161],{"class":129},[123,131042,131043],{"class":125,"line":156},[123,131044,171],{"class":129},[48,131046,131047,131056],{},[51,131048,131049],{},[54,131050,131051,131054],{},[57,131052,131053],{"align":26163},"参数值",[57,131055,739],{"align":26163},[64,131057,131058,131065],{},[54,131059,131060,131062],{},[69,131061,57140],{"align":26163},[69,131063,131064],{"align":26163},"无背景图（默认的）",[54,131066,131067,131069],{},[69,131068,64128],{"align":26163},[69,131070,131071],{"align":26163},"使用绝对或相对地址指定背景图像",[113,131073,131074],{"className":128940,"code":131016,"language":128942,"meta":118,"style":118},[120,131075,131076,131082,131096],{"__ignoreMap":118},[123,131077,131078,131080],{"class":125,"line":126},[123,131079,54016],{"class":53707},[123,131081,137],{"class":129},[123,131083,131084,131086,131088,131090,131092,131094],{"class":125,"line":140},[123,131085,131029],{"class":164},[123,131087,147],{"class":129},[123,131089,64128],{"class":164},[123,131091,1315],{"class":129},[123,131093,131038],{"class":279},[123,131095,5161],{"class":129},[123,131097,131098],{"class":125,"line":156},[123,131099,171],{"class":129},[19,131101,131102],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[2587,131104,131106],{"id":131105},"_823-背景平铺","8.2.3 背景平铺",[113,131108,131110],{"className":128940,"code":131109,"language":128942,"meta":118,"style":118},"div {\n  background-repeat: no-repeat;\n}\n",[120,131111,131112,131118,131129],{"__ignoreMap":118},[123,131113,131114,131116],{"class":125,"line":126},[123,131115,54016],{"class":53707},[123,131117,137],{"class":129},[123,131119,131120,131123,131125,131127],{"class":125,"line":140},[123,131121,131122],{"class":164},"  background-repeat",[123,131124,147],{"class":129},[123,131126,64138],{"class":164},[123,131128,3760],{"class":129},[123,131130,131131],{"class":125,"line":156},[123,131132,171],{"class":129},[48,131134,131135,131143],{},[51,131136,131137],{},[54,131138,131139,131141],{},[57,131140,131053],{"align":26163},[57,131142,739],{"align":26163},[64,131144,131145,131153,131160,131168],{},[54,131146,131147,131150],{},[69,131148,131149],{"align":26163},"repeat",[69,131151,131152],{"align":26163},"背景图像在纵向和横向上平铺（默认的）",[54,131154,131155,131157],{},[69,131156,64138],{"align":26163},[69,131158,131159],{"align":26163},"背景图像不平铺",[54,131161,131162,131165],{},[69,131163,131164],{"align":26163},"repeat-x",[69,131166,131167],{"align":26163},"背景图像在横向上平铺",[54,131169,131170,131173],{},[69,131171,131172],{"align":26163},"repeat-y",[69,131174,131175],{"align":26163},"背景图像在纵向平铺",[2587,131177,131179],{"id":131178},"_824-背景图片位置","8.2.4 背景图片位置",[113,131181,131183],{"className":128940,"code":131182,"language":128942,"meta":118,"style":118},"\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",[120,131184,131185,131190,131196,131210,131214,131219,131225,131241,131245,131250,131256,131270],{"__ignoreMap":118},[123,131186,131187],{"class":125,"line":126},[123,131188,131189],{"class":2673},"\u002F* 方位名词 *\u002F\n",[123,131191,131192,131194],{"class":125,"line":140},[123,131193,54016],{"class":53707},[123,131195,137],{"class":129},[123,131197,131198,131201,131203,131205,131208],{"class":125,"line":156},[123,131199,131200],{"class":164},"  background-position",[123,131202,147],{"class":129},[123,131204,53997],{"class":164},[123,131206,131207],{"class":164}," top",[123,131209,3760],{"class":129},[123,131211,131212],{"class":125,"line":168},[123,131213,171],{"class":129},[123,131215,131216],{"class":125,"line":268},[123,131217,131218],{"class":2673},"\u002F* 精确单位 *\u002F\n",[123,131220,131221,131223],{"class":125,"line":291},[123,131222,54016],{"class":53707},[123,131224,137],{"class":129},[123,131226,131227,131229,131231,131233,131235,131237,131239],{"class":125,"line":300},[123,131228,131200],{"class":164},[123,131230,147],{"class":129},[123,131232,3302],{"class":164},[123,131234,53897],{"class":133},[123,131236,59906],{"class":164},[123,131238,53897],{"class":133},[123,131240,3760],{"class":129},[123,131242,131243],{"class":125,"line":305},[123,131244,171],{"class":129},[123,131246,131247],{"class":125,"line":316},[123,131248,131249],{"class":2673},"\u002F* 混合单位 *\u002F\n",[123,131251,131252,131254],{"class":125,"line":673},[123,131253,54016],{"class":53707},[123,131255,137],{"class":129},[123,131257,131258,131260,131262,131264,131266,131268],{"class":125,"line":692},[123,131259,131200],{"class":164},[123,131261,147],{"class":129},[123,131263,3302],{"class":164},[123,131265,53897],{"class":133},[123,131267,19572],{"class":164},[123,131269,3760],{"class":129},[123,131271,131272],{"class":125,"line":713},[123,131273,171],{"class":129},[19,131275,131276],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[48,131278,131279,131287],{},[51,131280,131281],{},[54,131282,131283,131285],{},[57,131284,131053],{"align":26163},[57,131286,28291],{"align":26163},[64,131288,131289,131296],{},[54,131290,131291,131293],{},[69,131292,54372],{"align":26163},[69,131294,131295],{"align":26163},"百分数|由浮点数和单位标识符组成的长度值",[54,131297,131298,131301],{},[69,131299,131300],{"align":26163},"position",[69,131302,131303],{"align":26163},"top|center|bottom|left|center|right 方位名词",[19,131305,131306],{},"其他说明：",[19,131308,131309],{},"①参数是方位名词",[19,131311,131312],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131314,131315],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131317,131318],{},"②参数是精确单位",[19,131320,131321],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131323,131324],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131326,131327],{},"③参数是混合单位",[19,131329,131330],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[2587,131332,131334],{"id":131333},"_825-背景图片固定","8.2.5 背景图片固定",[113,131336,131338],{"className":128940,"code":131337,"language":128942,"meta":118,"style":118},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[120,131339,131340,131345,131351,131363,131367,131372,131378,131388],{"__ignoreMap":118},[123,131341,131342],{"class":125,"line":126},[123,131343,131344],{"class":2673},"\u002F* 背景滚动（默认） *\u002F\n",[123,131346,131347,131349],{"class":125,"line":140},[123,131348,54016],{"class":53707},[123,131350,137],{"class":129},[123,131352,131353,131356,131358,131361],{"class":125,"line":156},[123,131354,131355],{"class":164},"  background-attachment",[123,131357,147],{"class":129},[123,131359,131360],{"class":164},"scroll",[123,131362,3760],{"class":129},[123,131364,131365],{"class":125,"line":168},[123,131366,171],{"class":129},[123,131368,131369],{"class":125,"line":268},[123,131370,131371],{"class":2673},"\u002F* 背景固定 *\u002F\n",[123,131373,131374,131376],{"class":125,"line":291},[123,131375,54016],{"class":53707},[123,131377,137],{"class":129},[123,131379,131380,131382,131384,131386],{"class":125,"line":300},[123,131381,131355],{"class":164},[123,131383,147],{"class":129},[123,131385,88629],{"class":164},[123,131387,3760],{"class":129},[123,131389,131390],{"class":125,"line":305},[123,131391,171],{"class":129},[48,131393,131394,131403],{},[51,131395,131396],{},[54,131397,131398,131401],{},[57,131399,131400],{"align":26163},"参数",[57,131402,739],{"align":26163},[64,131404,131405,131412],{},[54,131406,131407,131409],{},[69,131408,131360],{"align":26163},[69,131410,131411],{"align":26163},"背景图像是随对象内容滚动",[54,131413,131414,131416],{},[69,131415,88629],{"align":26163},[69,131417,131418],{"align":26163},"背景图像固定",[2587,131420,131422],{"id":131421},"_826-背景样式合写","8.2.6 背景样式合写",[113,131424,131426],{"className":128940,"code":131425,"language":128942,"meta":118,"style":118},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[120,131427,131428,131433,131439,131467],{"__ignoreMap":118},[123,131429,131430],{"class":125,"line":126},[123,131431,131432],{"class":2673},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[123,131434,131435,131437],{"class":125,"line":140},[123,131436,54016],{"class":53707},[123,131438,137],{"class":129},[123,131440,131441,131443,131445,131447,131450,131452,131454,131456,131458,131461,131463,131465],{"class":125,"line":156},[123,131442,73011],{"class":164},[123,131444,147],{"class":129},[123,131446,63244],{"class":164},[123,131448,131449],{"class":164}," url",[123,131451,1315],{"class":129},[123,131453,131038],{"class":279},[123,131455,1336],{"class":129},[123,131457,64138],{"class":164},[123,131459,131460],{"class":164}," fixed",[123,131462,19572],{"class":164},[123,131464,131207],{"class":164},[123,131466,3760],{"class":129},[123,131468,131469],{"class":125,"line":168},[123,131470,171],{"class":129},[2587,131472,131474],{"id":131473},"_827-背景色半透明","8.2.7 背景色半透明",[113,131476,131478],{"className":128940,"code":131477,"language":128942,"meta":118,"style":118},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[120,131479,131480,131486,131512],{"__ignoreMap":118},[123,131481,131482,131484],{"class":125,"line":126},[123,131483,54016],{"class":53707},[123,131485,137],{"class":129},[123,131487,131488,131490,131492,131494,131496,131498,131500,131502,131504,131506,131508,131510],{"class":125,"line":140},[123,131489,73011],{"class":164},[123,131491,147],{"class":129},[123,131493,57513],{"class":164},[123,131495,1315],{"class":129},[123,131497,2799],{"class":164},[123,131499,251],{"class":129},[123,131501,2799],{"class":164},[123,131503,251],{"class":129},[123,131505,2799],{"class":164},[123,131507,251],{"class":129},[123,131509,102914],{"class":164},[123,131511,5161],{"class":129},[123,131513,131514],{"class":125,"line":156},[123,131515,171],{"class":129},[19,131517,101789],{},[19,131519,131520],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131522,131523],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131525,131526],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131528,131529],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[2587,131531,131533],{"id":131532},"_828-总结","8.2.8 总结",[48,131535,131536,131547],{},[51,131537,131538],{},[54,131539,131540,131543,131545],{},[57,131541,131542],{"align":26163},"属性",[57,131544,739],{"align":26163},[57,131546,2762],{"align":26163},[64,131548,131549,131560,131571,131582,131593,131604,131615],{},[54,131550,131551,131554,131557],{},[69,131552,131553],{"align":26163},"background-color",[69,131555,131556],{"align":26163},"背景颜色",[69,131558,131559],{"align":26163},"预定义的颜色值\u002F十六进制\u002FRGB代码",[54,131561,131562,131565,131568],{},[69,131563,131564],{"align":26163},"background-image",[69,131566,131567],{"align":26163},"背景图片",[69,131569,131570],{"align":26163},"url(图片路径)",[54,131572,131573,131576,131579],{},[69,131574,131575],{"align":26163},"background-repeat",[69,131577,131578],{"align":26163},"是否平铺",[69,131580,131581],{"align":26163},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[54,131583,131584,131587,131590],{},[69,131585,131586],{"align":26163},"background-position",[69,131588,131589],{"align":26163},"背景位置",[69,131591,131592],{"align":26163},"length\u002Fposition 分别是x和y坐标",[54,131594,131595,131598,131601],{},[69,131596,131597],{"align":26163},"background-attachment",[69,131599,131600],{"align":26163},"背景附着",[69,131602,131603],{"align":26163},"scroll(背景滚动) \u002Ffixed (背景固定)",[54,131605,131606,131609,131612],{},[69,131607,131608],{"align":26163},"背景简写",[69,131610,131611],{"align":26163},"书写更简单",[69,131613,131614],{"align":26163},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[54,131616,131617,131620,131623],{},[69,131618,131619],{"align":26163},"背景半透明",[69,131621,131622],{"align":26163},"背景颜色半透明",[69,131624,131625],{"align":26163},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131627,131628],{},"颜色渐变：",[3929,131630],{"style":128796,"src":131631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3929,131633],{"style":128796,"src":131634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[2587,131636,131638],{"id":131637},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[113,131640,131642],{"className":129687,"code":131641,"language":129689,"meta":118,"style":118},"\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",[120,131643,131644,131659,131678,131697,131716,131735,131754],{"__ignoreMap":118},[123,131645,131646,131648,131650,131652,131654,131657],{"class":125,"line":126},[123,131647,3509],{"class":129},[123,131649,54016],{"class":53707},[123,131651,55889],{"class":337},[123,131653,134],{"class":129},[123,131655,131656],{"class":143},"\"nav\"",[123,131658,53714],{"class":129},[123,131660,131661,131663,131665,131667,131669,131671,131674,131676],{"class":125,"line":140},[123,131662,54548],{"class":129},[123,131664,2846],{"class":53707},[123,131666,63459],{"class":337},[123,131668,134],{"class":129},[123,131670,63464],{"class":143},[123,131672,131673],{"class":129},">五彩导航1\u003C\u002F",[123,131675,2846],{"class":53707},[123,131677,53714],{"class":129},[123,131679,131680,131682,131684,131686,131688,131690,131693,131695],{"class":125,"line":156},[123,131681,54548],{"class":129},[123,131683,2846],{"class":53707},[123,131685,63459],{"class":337},[123,131687,134],{"class":129},[123,131689,63464],{"class":143},[123,131691,131692],{"class":129},">五彩导航2\u003C\u002F",[123,131694,2846],{"class":53707},[123,131696,53714],{"class":129},[123,131698,131699,131701,131703,131705,131707,131709,131712,131714],{"class":125,"line":168},[123,131700,54548],{"class":129},[123,131702,2846],{"class":53707},[123,131704,63459],{"class":337},[123,131706,134],{"class":129},[123,131708,63464],{"class":143},[123,131710,131711],{"class":129},">五彩导航3\u003C\u002F",[123,131713,2846],{"class":53707},[123,131715,53714],{"class":129},[123,131717,131718,131720,131722,131724,131726,131728,131731,131733],{"class":125,"line":268},[123,131719,54548],{"class":129},[123,131721,2846],{"class":53707},[123,131723,63459],{"class":337},[123,131725,134],{"class":129},[123,131727,63464],{"class":143},[123,131729,131730],{"class":129},">五彩导航4\u003C\u002F",[123,131732,2846],{"class":53707},[123,131734,53714],{"class":129},[123,131736,131737,131739,131741,131743,131745,131747,131750,131752],{"class":125,"line":291},[123,131738,54548],{"class":129},[123,131740,2846],{"class":53707},[123,131742,63459],{"class":337},[123,131744,134],{"class":129},[123,131746,63464],{"class":143},[123,131748,131749],{"class":129},">五彩导航5\u003C\u002F",[123,131751,2846],{"class":53707},[123,131753,53714],{"class":129},[123,131755,131756,131758,131760],{"class":125,"line":300},[123,131757,54190],{"class":129},[123,131759,54016],{"class":53707},[123,131761,53714],{"class":129},[113,131763,131765],{"className":128940,"code":131764,"language":128942,"meta":118,"style":118},".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",[120,131766,131767,131776,131786,131798,131810,131820,131832,131842,131846,131871,131894,131917,131940],{"__ignoreMap":118},[123,131768,131769,131772,131774],{"class":125,"line":126},[123,131770,131771],{"class":337},".nav",[123,131773,3865],{"class":53707},[123,131775,137],{"class":129},[123,131777,131778,131780,131782,131784],{"class":125,"line":140},[123,131779,130556],{"class":164},[123,131781,147],{"class":129},[123,131783,74783],{"class":164},[123,131785,3760],{"class":129},[123,131787,131788,131790,131792,131794,131796],{"class":125,"line":156},[123,131789,72968],{"class":164},[123,131791,147],{"class":129},[123,131793,462],{"class":164},[123,131795,53897],{"class":133},[123,131797,3760],{"class":129},[123,131799,131800,131802,131804,131806,131808],{"class":125,"line":168},[123,131801,73188],{"class":164},[123,131803,147],{"class":129},[123,131805,3457],{"class":164},[123,131807,53897],{"class":133},[123,131809,3760],{"class":129},[123,131811,131812,131814,131816,131818],{"class":125,"line":268},[123,131813,72926],{"class":164},[123,131815,147],{"class":129},[123,131817,53997],{"class":164},[123,131819,3760],{"class":129},[123,131821,131822,131824,131826,131828,131830],{"class":125,"line":291},[123,131823,129624],{"class":164},[123,131825,147],{"class":129},[123,131827,3457],{"class":164},[123,131829,53897],{"class":133},[123,131831,3760],{"class":129},[123,131833,131834,131836,131838,131840],{"class":125,"line":300},[123,131835,73305],{"class":164},[123,131837,147],{"class":129},[123,131839,63244],{"class":164},[123,131841,3760],{"class":129},[123,131843,131844],{"class":125,"line":305},[123,131845,171],{"class":129},[123,131847,131848,131850,131852,131855,131857,131859,131862,131864,131866,131868],{"class":125,"line":316},[123,131849,131771],{"class":337},[123,131851,3865],{"class":53707},[123,131853,131854],{"class":337},":nth-child",[123,131856,1315],{"class":129},[123,131858,2825],{"class":164},[123,131860,131861],{"class":129},") { ",[123,131863,131553],{"class":164},[123,131865,147],{"class":129},[123,131867,130971],{"class":164},[123,131869,131870],{"class":129},"; }\n",[123,131872,131873,131875,131877,131879,131881,131883,131885,131887,131889,131892],{"class":125,"line":673},[123,131874,131771],{"class":337},[123,131876,3865],{"class":53707},[123,131878,131854],{"class":337},[123,131880,1315],{"class":129},[123,131882,2692],{"class":164},[123,131884,131861],{"class":129},[123,131886,131553],{"class":164},[123,131888,147],{"class":129},[123,131890,131891],{"class":164},"#ff0000",[123,131893,131870],{"class":129},[123,131895,131896,131898,131900,131902,131904,131906,131908,131910,131912,131915],{"class":125,"line":692},[123,131897,131771],{"class":337},[123,131899,3865],{"class":53707},[123,131901,131854],{"class":337},[123,131903,1315],{"class":129},[123,131905,2686],{"class":164},[123,131907,131861],{"class":129},[123,131909,131553],{"class":164},[123,131911,147],{"class":129},[123,131913,131914],{"class":164},"#00a4ff",[123,131916,131870],{"class":129},[123,131918,131919,131921,131923,131925,131927,131929,131931,131933,131935,131938],{"class":125,"line":713},[123,131920,131771],{"class":337},[123,131922,3865],{"class":53707},[123,131924,131854],{"class":337},[123,131926,1315],{"class":129},[123,131928,2901],{"class":164},[123,131930,131861],{"class":129},[123,131932,131553],{"class":164},[123,131934,147],{"class":129},[123,131936,131937],{"class":164},"#ff00ff",[123,131939,131870],{"class":129},[123,131941,131942,131944,131946,131948,131950,131952,131954,131956,131958,131961],{"class":125,"line":718},[123,131943,131771],{"class":337},[123,131945,3865],{"class":53707},[123,131947,131854],{"class":337},[123,131949,1315],{"class":129},[123,131951,2926],{"class":164},[123,131953,131861],{"class":129},[123,131955,131553],{"class":164},[123,131957,147],{"class":129},[123,131959,131960],{"class":164},"#00ff00",[123,131962,131870],{"class":129},[14,131964,131966],{"id":131965},"_83-css三大特性","8.3 css三大特性",[2587,131968,131970],{"id":131969},"_831-层叠性","8.3.1 层叠性",[19,131972,131973],{},"为了解决样式冲突问题",[19,131975,131976],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131978,131979],{},"   ②样式不冲突，不会层叠",[2587,131981,131983],{"id":131982},"_832-继承性","8.3.2 继承性",[19,131985,131986],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131988,131989],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[113,131991,131993],{"className":128940,"code":131992,"language":128942,"meta":118,"style":118},"p {\n  color: #333;\n}\n",[120,131994,131995,132001,132011],{"__ignoreMap":118},[123,131996,131997,131999],{"class":125,"line":126},[123,131998,19],{"class":53707},[123,132000,137],{"class":129},[123,132002,132003,132005,132007,132009],{"class":125,"line":140},[123,132004,73305],{"class":164},[123,132006,147],{"class":129},[123,132008,64771],{"class":164},[123,132010,3760],{"class":129},[123,132012,132013],{"class":125,"line":156},[123,132014,171],{"class":129},[3929,132016],{"style":128796,"src":132017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132019,132020],{},"解释：①行高可以跟单位也可以不跟单位",[19,132022,132023],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132025,132026],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132028,132029],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[2587,132031,132033],{"id":132032},"_833-优先级","8.3.3 优先级",[26,132035,132036,132039],{},[29,132037,132038],{},"选择器相同，则执行层叠性",[29,132040,132041],{},"选择器不同，则根据选择器权重执行",[48,132043,132044,132054],{},[51,132045,132046],{},[54,132047,132048,132051],{},[57,132049,132050],{"align":26163},"选择器",[57,132052,132053],{"align":26163},"选择器权重",[64,132055,132056,132064,132072,132080,132088,132096],{},[54,132057,132058,132061],{},[69,132059,132060],{"align":26163},"继承 或者*",[69,132062,132063],{"align":26163},"0，0，0，0",[54,132065,132066,132069],{},[69,132067,132068],{"align":26163},"标签选择器",[69,132070,132071],{"align":26163},"0，0，0，1",[54,132073,132074,132077],{},[69,132075,132076],{"align":26163},"类选择器，伪类选择器",[69,132078,132079],{"align":26163},"0，0，1，0",[54,132081,132082,132085],{},[69,132083,132084],{"align":26163},"ID选择器",[69,132086,132087],{"align":26163},"0，1，0，0",[54,132089,132090,132093],{},[69,132091,132092],{"align":26163},"行内样式",[69,132094,132095],{"align":26163},"1，0，0，0",[54,132097,132098,132101],{},[69,132099,132100],{"align":26163},"！important",[69,132102,132103],{"align":26163},"无穷大",[19,132105,132106],{},"! important用法：",[113,132108,132110],{"className":128940,"code":132109,"language":128942,"meta":118,"style":118},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[120,132111,132112,132117,132123,132136,132140,132145,132151,132161],{"__ignoreMap":118},[123,132113,132114],{"class":125,"line":126},[123,132115,132116],{"class":2673},"\u002F* !important 拥有最高优先级 *\u002F\n",[123,132118,132119,132121],{"class":125,"line":140},[123,132120,54016],{"class":53707},[123,132122,137],{"class":129},[123,132124,132125,132127,132129,132131,132134],{"class":125,"line":156},[123,132126,73305],{"class":164},[123,132128,147],{"class":129},[123,132130,54050],{"class":164},[123,132132,132133],{"class":133}," !important",[123,132135,3760],{"class":129},[123,132137,132138],{"class":125,"line":168},[123,132139,171],{"class":129},[123,132141,132142],{"class":125,"line":268},[123,132143,132144],{"class":2673},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[123,132146,132147,132149],{"class":125,"line":291},[123,132148,54016],{"class":53707},[123,132150,137],{"class":129},[123,132152,132153,132155,132157,132159],{"class":125,"line":300},[123,132154,73305],{"class":164},[123,132156,147],{"class":129},[123,132158,59823],{"class":164},[123,132160,3760],{"class":129},[123,132162,132163],{"class":125,"line":305},[123,132164,171],{"class":129},[19,132166,132167],{},"优先级注意点：",[19,132169,132170],{},"①权重是有4组数字组成,但是不会有进位",[19,132172,132173],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132175,132176],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132178,132179],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132181,132182],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132184,132185],{},"⑥复合选择器",[48,132187,132188,132198],{},[51,132189,132190],{},[54,132191,132192,132195],{},[57,132193,132194],{"align":26163},"div ul li",[57,132196,132197],{"align":26163},"0,0,0,3",[64,132199,132200,132208,132216],{},[54,132201,132202,132205],{},[69,132203,132204],{"align":26163},".nav ul li",[69,132206,132207],{"align":26163},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[54,132209,132210,132213],{},[69,132211,132212],{"align":26163},"a:hover",[69,132214,132215],{"align":26163},"0,0,1,1",[54,132217,132218,132221],{},[69,132219,132220],{"align":26163},".nav a",[69,132222,132215],{"align":26163},[2526,132224,132225],{},"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":118,"searchDepth":140,"depth":140,"links":132227},[132228,132236,132247],{"id":130336,"depth":140,"text":130337,"children":132229},[132230,132231,132232,132233,132234,132235],{"id":130349,"depth":156,"text":130350},{"id":130421,"depth":156,"text":130422},{"id":130493,"depth":156,"text":130494},{"id":130524,"depth":156,"text":130525},{"id":130531,"depth":156,"text":130532},{"id":130684,"depth":156,"text":130685},{"id":130992,"depth":140,"text":130993,"children":132237},[132238,132239,132240,132241,132242,132243,132244,132245,132246],{"id":130999,"depth":156,"text":131000},{"id":131009,"depth":156,"text":131010},{"id":131105,"depth":156,"text":131106},{"id":131178,"depth":156,"text":131179},{"id":131333,"depth":156,"text":131334},{"id":131421,"depth":156,"text":131422},{"id":131473,"depth":156,"text":131474},{"id":131532,"depth":156,"text":131533},{"id":131637,"depth":156,"text":131638},{"id":131965,"depth":140,"text":131966,"children":132248},[132249,132250,132251],{"id":131969,"depth":156,"text":131970},{"id":131982,"depth":156,"text":131983},{"id":132032,"depth":156,"text":132033},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130328,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132258,"title":132259,"body":132260,"description":2544,"extension":2545,"meta":133850,"navigation":231,"path":133851,"seo":133852,"stem":133853,"__hash__":133854},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132261,"toc":133829},[132262,132265,132269,132272,132275,132278,132281,132284,132287,132290,132294,132302,132339,132375,132378,132392,132397,132431,132434,132527,132532,132535,132565,132568,132573,132581,132585,132592,132638,132682,132687,132690,132693,132696,132699,132702,132705,132707,132710,132714,132719,132763,132768,132771,132774,132811,132816,132819,132822,132825,132828,132860,132863,132866,132869,132901,132904,132907,132910,132914,132917,132949,132952,132956,132976,132979,132987,132990,132994,132999,133002,133034,133039,133042,133080,133084,133089,133092,133095,133126,133129,133146,133151,133203,133263,133268,133322,133360,133364,133368,133371,133375,133383,133386,133388,133399,133404,133452,133486,133489,133492,133495,133498,133542,133545,133548,133551,133554,133557,133560,133604,133607,133610,133613,133616,133619,133622,133628,133631,133675,133678,133681,133684,133687,133690,133734,133737,133739,133742,133746,133750,133788,133792,133795,133798,133802,133810,133814,133817,133820,133823,133826],[10,132263,132259],{"id":132264},"_9-css盒模型浮动与切图",[14,132266,132268],{"id":132267},"_91-盒子模型","9.1 盒子模型",[19,132270,132271],{},"利用盒子来设计网页",[19,132273,132274],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132276,132277],{},"网页布局设置：",[19,132279,132280],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132282,132283],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132285,132286],{},"③往盒子里装内容",[3929,132288],{"style":128796,"src":132289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[2587,132291,132293],{"id":132292},"_911-边框border","9.1.1 边框（border）",[26,132295,132296,132299],{},[29,132297,132298],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,132300,132301],{},"语法",[113,132303,132305],{"className":128940,"code":132304,"language":128942,"meta":118,"style":118},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[120,132306,132307,132312,132318,132335],{"__ignoreMap":118},[123,132308,132309],{"class":125,"line":126},[123,132310,132311],{"class":2673},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[123,132313,132314,132316],{"class":125,"line":140},[123,132315,54016],{"class":53707},[123,132317,137],{"class":129},[123,132319,132320,132322,132324,132326,132328,132330,132333],{"class":125,"line":156},[123,132321,73296],{"class":164},[123,132323,147],{"class":129},[123,132325,2825],{"class":164},[123,132327,53897],{"class":133},[123,132329,53926],{"class":164},[123,132331,132332],{"class":164}," #ccc",[123,132334,3760],{"class":129},[123,132336,132337],{"class":125,"line":168},[123,132338,171],{"class":129},[48,132340,132341,132349],{},[51,132342,132343],{},[54,132344,132345,132347],{},[57,132346,131542],{"align":26163},[57,132348,739],{"align":26163},[64,132350,132351,132359,132367],{},[54,132352,132353,132356],{},[69,132354,132355],{"align":26163},"border-width",[69,132357,132358],{"align":26163},"定义边框粗细，单位是px",[54,132360,132361,132364],{},[69,132362,132363],{"align":26163},"border-style",[69,132365,132366],{"align":26163},"边框的样式",[54,132368,132369,132372],{},[69,132370,132371],{"align":26163},"border-color",[69,132373,132374],{"align":26163},"边框的颜色",[19,132376,132377],{},"边框样式 border-style 可以设置如下值：",[3606,132379,132380,132383,132386,132389],{},[29,132381,132382],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,132384,132385],{},"solid：边框为单实线(最为常用的)",[29,132387,132388],{},"dashed：边框为虚线",[29,132390,132391],{},"dotted：边框为点线",[26,132393,132394],{"start":156},[29,132395,132396],{},"边框的合写分写",[113,132398,132399],{"className":128940,"code":132304,"language":128942,"meta":118,"style":118},[120,132400,132401,132405,132411,132427],{"__ignoreMap":118},[123,132402,132403],{"class":125,"line":126},[123,132404,132311],{"class":2673},[123,132406,132407,132409],{"class":125,"line":140},[123,132408,54016],{"class":53707},[123,132410,137],{"class":129},[123,132412,132413,132415,132417,132419,132421,132423,132425],{"class":125,"line":156},[123,132414,73296],{"class":164},[123,132416,147],{"class":129},[123,132418,2825],{"class":164},[123,132420,53897],{"class":133},[123,132422,53926],{"class":164},[123,132424,132332],{"class":164},[123,132426,3760],{"class":129},[123,132428,132429],{"class":125,"line":168},[123,132430,171],{"class":129},[19,132432,132433],{},"边框分开写法：",[113,132435,132437],{"className":128940,"code":132436,"language":128942,"meta":118,"style":118},"\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",[120,132438,132439,132444,132450,132468,132486,132505,132523],{"__ignoreMap":118},[123,132440,132441],{"class":125,"line":126},[123,132442,132443],{"class":2673},"\u002F* 边框分开写法 *\u002F\n",[123,132445,132446,132448],{"class":125,"line":140},[123,132447,54016],{"class":53707},[123,132449,137],{"class":129},[123,132451,132452,132455,132457,132459,132461,132463,132466],{"class":125,"line":156},[123,132453,132454],{"class":164},"  border-top",[123,132456,147],{"class":129},[123,132458,2825],{"class":164},[123,132460,53897],{"class":133},[123,132462,53926],{"class":164},[123,132464,132465],{"class":164}," #000",[123,132467,3760],{"class":129},[123,132469,132470,132473,132475,132477,132479,132481,132484],{"class":125,"line":168},[123,132471,132472],{"class":164},"  border-right",[123,132474,147],{"class":129},[123,132476,2692],{"class":164},[123,132478,53897],{"class":133},[123,132480,64643],{"class":164},[123,132482,132483],{"class":164}," #333",[123,132485,3760],{"class":129},[123,132487,132488,132491,132493,132495,132497,132500,132503],{"class":125,"line":268},[123,132489,132490],{"class":164},"  border-bottom",[123,132492,147],{"class":129},[123,132494,2686],{"class":164},[123,132496,53897],{"class":133},[123,132498,132499],{"class":164}," dotted",[123,132501,132502],{"class":164}," #666",[123,132504,3760],{"class":129},[123,132506,132507,132510,132512,132514,132516,132518,132521],{"class":125,"line":291},[123,132508,132509],{"class":164},"  border-left",[123,132511,147],{"class":129},[123,132513,2825],{"class":164},[123,132515,53897],{"class":133},[123,132517,53926],{"class":164},[123,132519,132520],{"class":164}," #999",[123,132522,3760],{"class":129},[123,132524,132525],{"class":125,"line":300},[123,132526,171],{"class":129},[26,132528,132529],{"start":168},[29,132530,132531],{},"表格的细线边框",[19,132533,132534],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[113,132536,132538],{"className":128940,"code":132537,"language":128942,"meta":118,"style":118},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[120,132539,132540,132545,132551,132561],{"__ignoreMap":118},[123,132541,132542],{"class":125,"line":126},[123,132543,132544],{"class":2673},"\u002F* 表格细线边框合并 *\u002F\n",[123,132546,132547,132549],{"class":125,"line":140},[123,132548,48],{"class":53707},[123,132550,137],{"class":129},[123,132552,132553,132555,132557,132559],{"class":125,"line":156},[123,132554,72978],{"class":164},[123,132556,147],{"class":129},[123,132558,67436],{"class":164},[123,132560,3760],{"class":129},[123,132562,132563],{"class":125,"line":168},[123,132564,171],{"class":129},[19,132566,132567],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,132569,132570],{"start":268},[29,132571,132572],{},"解决边框额外增加盒子的实际大小的方法：",[3606,132574,132575,132578],{},[29,132576,132577],{},"测量盒子大小的时候,不量边框",[29,132579,132580],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[2587,132582,132584],{"id":132583},"_912-内边距","9.1.2 内边距",[26,132586,132587,132590],{},[29,132588,132589],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,132591,132301],{},[48,132593,132594,132604],{},[51,132595,132596],{},[54,132597,132598,132601],{},[57,132599,132600],{"align":26163},"值的个数",[57,132602,132603],{"align":26163},"表达意思",[64,132605,132606,132614,132622,132630],{},[54,132607,132608,132611],{},[69,132609,132610],{"align":26163},"padding: 5px;",[69,132612,132613],{"align":26163},"1个值，代表上下左右都有5个元素",[54,132615,132616,132619],{},[69,132617,132618],{"align":26163},"padding: 5px 10px;",[69,132620,132621],{"align":26163},"2个值，代表上下内边距为5像素，左右内边距为10像素",[54,132623,132624,132627],{},[69,132625,132626],{"align":26163},"padding: 5px 10px 20px;",[69,132628,132629],{"align":26163},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[54,132631,132632,132635],{},[69,132633,132634],{"align":26163},"padding: 5px 10px 20px 30px;",[69,132636,132637],{"align":26163},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[48,132639,132640,132648],{},[51,132641,132642],{},[54,132643,132644,132646],{},[57,132645,131542],{"align":26163},[57,132647,739],{"align":26163},[64,132649,132650,132658,132666,132674],{},[54,132651,132652,132655],{},[69,132653,132654],{"align":26163},"padding-left",[69,132656,132657],{"align":26163},"左内边距",[54,132659,132660,132663],{},[69,132661,132662],{"align":26163},"padding-right",[69,132664,132665],{"align":26163},"右内边距",[54,132667,132668,132671],{},[69,132669,132670],{"align":26163},"padding-top",[69,132672,132673],{"align":26163},"上内边距",[54,132675,132676,132679],{},[69,132677,132678],{"align":26163},"padding-bottom",[69,132680,132681],{"align":26163},"下内边距",[26,132683,132684],{"start":156},[29,132685,132686],{},"内边距会影响盒子的实际大小",[19,132688,132689],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132691,132692],{},"①内容和边框有了距离，添加了内边距",[19,132694,132695],{},"②padding影响了盒子实际大小",[19,132697,132698],{},"内边距对盒子大小的影响：",[19,132700,132701],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132703,132704],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132706,97614],{},[19,132708,132709],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[2587,132711,132713],{"id":132712},"_913-外边距","9.1.3 外边距",[26,132715,132716],{},[29,132717,132718],{},"控制盒子与盒子之间的距离",[48,132720,132721,132729],{},[51,132722,132723],{},[54,132724,132725,132727],{},[57,132726,131542],{"align":26163},[57,132728,739],{"align":26163},[64,132730,132731,132739,132747,132755],{},[54,132732,132733,132736],{},[69,132734,132735],{"align":26163},"margin-left",[69,132737,132738],{"align":26163},"左外边距",[54,132740,132741,132744],{},[69,132742,132743],{"align":26163},"margin-right",[69,132745,132746],{"align":26163},"右外边距",[54,132748,132749,132752],{},[69,132750,132751],{"align":26163},"margin-top",[69,132753,132754],{"align":26163},"上外边距",[54,132756,132757,132760],{},[69,132758,132759],{"align":26163},"margin-bottom",[69,132761,132762],{"align":26163},"下外边距",[26,132764,132765],{"start":140},[29,132766,132767],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132769,132770],{},"①盒子必须指定了宽度（width）",[19,132772,132773],{},"②盒子左右的外边距都设置为 auto",[113,132775,132777],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[120,132778,132779,132784,132791,132807],{"__ignoreMap":118},[123,132780,132781],{"class":125,"line":126},[123,132782,132783],{"class":2673},"\u002F* margin 复合写法（同上） *\u002F\n",[123,132785,132786,132789],{"class":125,"line":140},[123,132787,132788],{"class":337},".box",[123,132790,137],{"class":129},[123,132792,132793,132795,132797,132799,132801,132804],{"class":125,"line":156},[123,132794,72870],{"class":164},[123,132796,147],{"class":129},[123,132798,2799],{"class":164},[123,132800,53961],{"class":164},[123,132802,132803],{"class":129},";  ",[123,132805,132806],{"class":2673},"\u002F* 块级盒子水平居中 *\u002F\n",[123,132808,132809],{"class":125,"line":168},[123,132810,171],{"class":129},[26,132812,132813],{"start":156},[29,132814,132815],{},"外边距塌陷问题",[19,132817,132818],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3929,132820],{"style":128796,"src":132821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132823,132824],{},"解决方案：",[19,132826,132827],{},"①可以为父亲元素定义上边距",[113,132829,132830],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},[120,132831,132832,132836,132842,132856],{"__ignoreMap":118},[123,132833,132834],{"class":125,"line":126},[123,132835,132783],{"class":2673},[123,132837,132838,132840],{"class":125,"line":140},[123,132839,132788],{"class":337},[123,132841,137],{"class":129},[123,132843,132844,132846,132848,132850,132852,132854],{"class":125,"line":156},[123,132845,72870],{"class":164},[123,132847,147],{"class":129},[123,132849,2799],{"class":164},[123,132851,53961],{"class":164},[123,132853,132803],{"class":129},[123,132855,132806],{"class":2673},[123,132857,132858],{"class":125,"line":168},[123,132859,171],{"class":129},[19,132861,132862],{},"②可以为父亲元素定义上内边距",[19,132864,132865],{},"③可以为父亲元素添加overflow:hidden",[3929,132867],{"style":128796,"src":132868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[113,132870,132871],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},[120,132872,132873,132877,132883,132897],{"__ignoreMap":118},[123,132874,132875],{"class":125,"line":126},[123,132876,132783],{"class":2673},[123,132878,132879,132881],{"class":125,"line":140},[123,132880,132788],{"class":337},[123,132882,137],{"class":129},[123,132884,132885,132887,132889,132891,132893,132895],{"class":125,"line":156},[123,132886,72870],{"class":164},[123,132888,147],{"class":129},[123,132890,2799],{"class":164},[123,132892,53961],{"class":164},[123,132894,132803],{"class":129},[123,132896,132806],{"class":2673},[123,132898,132899],{"class":125,"line":168},[123,132900,171],{"class":129},[3929,132902],{"style":128796,"src":132903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132905,132906],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132908,132909],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[2587,132911,132913],{"id":132912},"_914-清除内外边距","9.1.4 清除内外边距",[19,132915,132916],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[113,132918,132919],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},[120,132920,132921,132925,132931,132945],{"__ignoreMap":118},[123,132922,132923],{"class":125,"line":126},[123,132924,132783],{"class":2673},[123,132926,132927,132929],{"class":125,"line":140},[123,132928,132788],{"class":337},[123,132930,137],{"class":129},[123,132932,132933,132935,132937,132939,132941,132943],{"class":125,"line":156},[123,132934,72870],{"class":164},[123,132936,147],{"class":129},[123,132938,2799],{"class":164},[123,132940,53961],{"class":164},[123,132942,132803],{"class":129},[123,132944,132806],{"class":2673},[123,132946,132947],{"class":125,"line":168},[123,132948,171],{"class":129},[19,132950,132951],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[2587,132953,132955],{"id":132954},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3606,132957,132958,132961,132964,132967,132970,132973],{},[29,132959,132960],{},"文件→打开 ：可以打开我们要测量的图片",[29,132962,132963],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,132965,132966],{},"右击标尺，把里面的单位改为像素",[29,132968,132969],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,132971,132972],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,132974,132975],{},"用选区拖动 可以测量大小",[3929,132977],{"style":128796,"src":132978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3606,132980,132981,132984],{},[29,132982,132983],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,132985,132986],{},"吸管取色工具",[3929,132988],{"style":128796,"src":132989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[2587,132991,132993],{"id":132992},"_916-案例","9.1.6 案例",[26,132995,132996],{},[29,132997,132998],{},"小米商品",[3929,133000],{"style":128796,"src":133001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[113,133003,133004],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},[120,133005,133006,133010,133016,133030],{"__ignoreMap":118},[123,133007,133008],{"class":125,"line":126},[123,133009,132783],{"class":2673},[123,133011,133012,133014],{"class":125,"line":140},[123,133013,132788],{"class":337},[123,133015,137],{"class":129},[123,133017,133018,133020,133022,133024,133026,133028],{"class":125,"line":156},[123,133019,72870],{"class":164},[123,133021,147],{"class":129},[123,133023,2799],{"class":164},[123,133025,53961],{"class":164},[123,133027,132803],{"class":129},[123,133029,132806],{"class":2673},[123,133031,133032],{"class":125,"line":168},[123,133033,171],{"class":129},[26,133035,133036],{"start":140},[29,133037,133038],{},"快报模块",[3929,133040],{"style":128796,"src":133041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[113,133043,133045],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[120,133046,133047,133052,133067,133072],{"__ignoreMap":118},[123,133048,133049],{"class":125,"line":126},[123,133050,133051],{"class":2673},"\u003C!-- HTML 代码示例 -->\n",[123,133053,133054,133056,133058,133060,133062,133065],{"class":125,"line":140},[123,133055,3509],{"class":129},[123,133057,54016],{"class":53707},[123,133059,55889],{"class":337},[123,133061,134],{"class":129},[123,133063,133064],{"class":143},"\"example\"",[123,133066,53714],{"class":129},[123,133068,133069],{"class":125,"line":156},[123,133070,133071],{"class":129},"  示例内容\n",[123,133073,133074,133076,133078],{"class":125,"line":168},[123,133075,54190],{"class":129},[123,133077,54016],{"class":53707},[123,133079,53714],{"class":129},[2587,133081,133083],{"id":133082},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,133085,133086],{},[29,133087,133088],{},"圆角边框",[19,133090,133091],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3929,133093],{"style":128796,"src":133094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[113,133096,133098],{"className":128940,"code":133097,"language":128942,"meta":118,"style":118},"div {\n  border: 1px solid #ccc;\n}\n",[120,133099,133100,133106,133122],{"__ignoreMap":118},[123,133101,133102,133104],{"class":125,"line":126},[123,133103,54016],{"class":53707},[123,133105,137],{"class":129},[123,133107,133108,133110,133112,133114,133116,133118,133120],{"class":125,"line":140},[123,133109,73296],{"class":164},[123,133111,147],{"class":129},[123,133113,2825],{"class":164},[123,133115,53897],{"class":133},[123,133117,53926],{"class":164},[123,133119,132332],{"class":164},[123,133121,3760],{"class":129},[123,133123,133124],{"class":125,"line":156},[123,133125,171],{"class":129},[19,133127,133128],{},"解释:",[3606,133130,133131,133134,133137,133140,133143],{},[29,133132,133133],{},"参数值可以为数值或百分比的形式",[29,133135,133136],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,133138,133139],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,133141,133142],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,133144,133145],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,133147,133148],{"start":140},[29,133149,133150],{},"盒子阴影",[113,133152,133154],{"className":128940,"code":133153,"language":128942,"meta":118,"style":118},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[120,133155,133156,133162,133199],{"__ignoreMap":118},[123,133157,133158,133160],{"class":125,"line":126},[123,133159,54016],{"class":53707},[123,133161,137],{"class":129},[123,133163,133164,133167,133169,133171,133173,133175,133177,133179,133181,133183,133185,133187,133189,133191,133193,133195,133197],{"class":125,"line":140},[123,133165,133166],{"class":164},"  box-shadow",[123,133168,147],{"class":129},[123,133170,2799],{"class":164},[123,133172,17185],{"class":164},[123,133174,53897],{"class":133},[123,133176,4482],{"class":164},[123,133178,53897],{"class":133},[123,133180,81165],{"class":164},[123,133182,1315],{"class":129},[123,133184,2799],{"class":164},[123,133186,251],{"class":129},[123,133188,2799],{"class":164},[123,133190,251],{"class":129},[123,133192,2799],{"class":164},[123,133194,251],{"class":129},[123,133196,88606],{"class":164},[123,133198,5161],{"class":129},[123,133200,133201],{"class":125,"line":156},[123,133202,171],{"class":129},[48,133204,133205,133213],{},[51,133206,133207],{},[54,133208,133209,133211],{},[57,133210,2762],{"align":26163},[57,133212,29910],{"align":26163},[64,133214,133215,133223,133231,133239,133247,133255],{},[54,133216,133217,133220],{},[69,133218,133219],{"align":26163},"h-shadow",[69,133221,133222],{"align":26163},"必需,水平阴影的位置,允许负值",[54,133224,133225,133228],{},[69,133226,133227],{"align":26163},"v-shadow",[69,133229,133230],{"align":26163},"必需,垂直阴影的位置,允许负值",[54,133232,133233,133236],{},[69,133234,133235],{"align":26163},"blur",[69,133237,133238],{"align":26163},"可选,模糊距离,就是影子的虚实",[54,133240,133241,133244],{},[69,133242,133243],{"align":26163},"spread",[69,133245,133246],{"align":26163},"可选,阴影尺寸",[54,133248,133249,133252],{},[69,133250,133251],{"align":26163},"color",[69,133253,133254],{"align":26163},"可选,阴影的颜色",[54,133256,133257,133260],{},[69,133258,133259],{"align":26163},"inset",[69,133261,133262],{"align":26163},"可选,将外部阴影(outset)改为内部阴影",[26,133264,133265],{"start":156},[29,133266,133267],{},"文字阴影",[113,133269,133271],{"className":128940,"code":133270,"language":128942,"meta":118,"style":118},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[120,133272,133273,133279,133318],{"__ignoreMap":118},[123,133274,133275,133277],{"class":125,"line":126},[123,133276,19],{"class":53707},[123,133278,137],{"class":129},[123,133280,133281,133284,133286,133288,133290,133292,133294,133296,133298,133300,133302,133304,133306,133308,133310,133312,133314,133316],{"class":125,"line":140},[123,133282,133283],{"class":164},"  text-shadow",[123,133285,147],{"class":129},[123,133287,2825],{"class":164},[123,133289,53897],{"class":133},[123,133291,27540],{"class":164},[123,133293,53897],{"class":133},[123,133295,17185],{"class":164},[123,133297,53897],{"class":133},[123,133299,81165],{"class":164},[123,133301,1315],{"class":129},[123,133303,2799],{"class":164},[123,133305,251],{"class":129},[123,133307,2799],{"class":164},[123,133309,251],{"class":129},[123,133311,2799],{"class":164},[123,133313,251],{"class":129},[123,133315,102914],{"class":164},[123,133317,5161],{"class":129},[123,133319,133320],{"class":125,"line":156},[123,133321,171],{"class":129},[48,133323,133324,133332],{},[51,133325,133326],{},[54,133327,133328,133330],{},[57,133329,2762],{"align":26163},[57,133331,29910],{"align":26163},[64,133333,133334,133340,133347,133354],{},[54,133335,133336,133338],{},[69,133337,133219],{"align":26163},[69,133339,133222],{"align":26163},[54,133341,133342,133344],{},[69,133343,133227],{"align":26163},[69,133345,133346],{"align":26163},"必需,垂直阴影位置,允许负值",[54,133348,133349,133351],{},[69,133350,133235],{"align":26163},[69,133352,133353],{"align":26163},"可选,模糊的距离",[54,133355,133356,133358],{},[69,133357,133251],{"align":26163},[69,133359,133254],{"align":26163},[14,133361,133363],{"id":133362},"_92-浮动","9.2 浮动",[2587,133365,133367],{"id":133366},"_921-浮动介绍","9.2.1 浮动介绍",[19,133369,133370],{},"在16.2中详细介绍",[2587,133372,133374],{"id":133373},"_922-清除浮动","9.2.2 清除浮动",[26,133376,133377,133380],{},[29,133378,133379],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,133381,133382],{},"清除浮动的本质",[19,133384,133385],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133387,11457],{},[3606,133389,133390,133393,133396],{},[29,133391,133392],{},"如果父盒子本身有高度，则不需要清除浮动",[29,133394,133395],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,133397,133398],{},"父级有了高度，就不会影响下面的标准流了",[26,133400,133401],{"start":156},[29,133402,133403],{},"清除浮动样式",[113,133405,133407],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[120,133408,133409,133416,133427,133431,133438,133448],{"__ignoreMap":118},[123,133410,133411,133414],{"class":125,"line":126},[123,133412,133413],{"class":337},".left",[123,133415,137],{"class":129},[123,133417,133418,133421,133423,133425],{"class":125,"line":140},[123,133419,133420],{"class":164},"  float",[123,133422,147],{"class":129},[123,133424,26163],{"class":164},[123,133426,3760],{"class":129},[123,133428,133429],{"class":125,"line":156},[123,133430,171],{"class":129},[123,133432,133433,133436],{"class":125,"line":168},[123,133434,133435],{"class":337},".right",[123,133437,137],{"class":129},[123,133439,133440,133442,133444,133446],{"class":125,"line":268},[123,133441,133420],{"class":164},[123,133443,147],{"class":129},[123,133445,74922],{"class":164},[123,133447,3760],{"class":129},[123,133449,133450],{"class":125,"line":291},[123,133451,171],{"class":129},[48,133453,133454,133462],{},[51,133455,133456],{},[54,133457,133458,133460],{},[57,133459,129404],{"align":26163},[57,133461,29910],{"align":26163},[64,133463,133464,133471,133478],{},[54,133465,133466,133468],{},[69,133467,26163],{"align":26163},[69,133469,133470],{"align":26163},"不允许左侧有浮动元素（清除左侧浮动的影响）",[54,133472,133473,133475],{},[69,133474,74922],{"align":26163},[69,133476,133477],{"align":26163},"不允许右侧有浮动元素（清除右侧浮动的影响）",[54,133479,133480,133483],{},[69,133481,133482],{"align":26163},"both",[69,133484,133485],{"align":26163},"同时清除左右侧浮动的影响",[19,133487,133488],{},"法一",[19,133490,133491],{},"额外标签法也称为隔墙法",[19,133493,133494],{},"使用方式：",[19,133496,133497],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[113,133499,133500],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,133501,133502,133508,133518,133522,133528,133538],{"__ignoreMap":118},[123,133503,133504,133506],{"class":125,"line":126},[123,133505,133413],{"class":337},[123,133507,137],{"class":129},[123,133509,133510,133512,133514,133516],{"class":125,"line":140},[123,133511,133420],{"class":164},[123,133513,147],{"class":129},[123,133515,26163],{"class":164},[123,133517,3760],{"class":129},[123,133519,133520],{"class":125,"line":156},[123,133521,171],{"class":129},[123,133523,133524,133526],{"class":125,"line":168},[123,133525,133435],{"class":337},[123,133527,137],{"class":129},[123,133529,133530,133532,133534,133536],{"class":125,"line":268},[123,133531,133420],{"class":164},[123,133533,147],{"class":129},[123,133535,74922],{"class":164},[123,133537,3760],{"class":129},[123,133539,133540],{"class":125,"line":291},[123,133541,171],{"class":129},[19,133543,133544],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133546,133547],{},"优点： 通俗易懂，书写方便",[19,133549,133550],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133552,133553],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133555,133556],{},"法二",[19,133558,133559],{},"父级添加overflow属性",[113,133561,133562],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,133563,133564,133570,133580,133584,133590,133600],{"__ignoreMap":118},[123,133565,133566,133568],{"class":125,"line":126},[123,133567,133413],{"class":337},[123,133569,137],{"class":129},[123,133571,133572,133574,133576,133578],{"class":125,"line":140},[123,133573,133420],{"class":164},[123,133575,147],{"class":129},[123,133577,26163],{"class":164},[123,133579,3760],{"class":129},[123,133581,133582],{"class":125,"line":156},[123,133583,171],{"class":129},[123,133585,133586,133588],{"class":125,"line":168},[123,133587,133435],{"class":337},[123,133589,137],{"class":129},[123,133591,133592,133594,133596,133598],{"class":125,"line":268},[123,133593,133420],{"class":164},[123,133595,147],{"class":129},[123,133597,74922],{"class":164},[123,133599,3760],{"class":129},[123,133601,133602],{"class":125,"line":291},[123,133603,171],{"class":129},[19,133605,133606],{},"overflow: hidden;",[19,133608,133609],{},"优点：代码简洁",[19,133611,133612],{},"缺点：无法显示溢出的部分",[19,133614,133615],{},"注意：是给父元素添加代码",[19,133617,133618],{},"法三",[19,133620,133621],{},"父级添加after伪元素",[19,133623,133624,133627],{},[133625,133626],"after",{}," 方式是额外标签法的升级版",[19,133629,133630],{},"使用的时候复制就可以",[113,133632,133633],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,133634,133635,133641,133651,133655,133661,133671],{"__ignoreMap":118},[123,133636,133637,133639],{"class":125,"line":126},[123,133638,133413],{"class":337},[123,133640,137],{"class":129},[123,133642,133643,133645,133647,133649],{"class":125,"line":140},[123,133644,133420],{"class":164},[123,133646,147],{"class":129},[123,133648,26163],{"class":164},[123,133650,3760],{"class":129},[123,133652,133653],{"class":125,"line":156},[123,133654,171],{"class":129},[123,133656,133657,133659],{"class":125,"line":168},[123,133658,133435],{"class":337},[123,133660,137],{"class":129},[123,133662,133663,133665,133667,133669],{"class":125,"line":268},[123,133664,133420],{"class":164},[123,133666,147],{"class":129},[123,133668,74922],{"class":164},[123,133670,3760],{"class":129},[123,133672,133673],{"class":125,"line":291},[123,133674,171],{"class":129},[19,133676,133677],{},"优点：没有增加标签，结构更简单",[19,133679,133680],{},"缺点：照顾低版本浏览器",[19,133682,133683],{},"代表网站： 百度、淘宝网、网易等",[19,133685,133686],{},"法四",[19,133688,133689],{},"父级添加双伪元素",[113,133691,133692],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,133693,133694,133700,133710,133714,133720,133730],{"__ignoreMap":118},[123,133695,133696,133698],{"class":125,"line":126},[123,133697,133413],{"class":337},[123,133699,137],{"class":129},[123,133701,133702,133704,133706,133708],{"class":125,"line":140},[123,133703,133420],{"class":164},[123,133705,147],{"class":129},[123,133707,26163],{"class":164},[123,133709,3760],{"class":129},[123,133711,133712],{"class":125,"line":156},[123,133713,171],{"class":129},[123,133715,133716,133718],{"class":125,"line":168},[123,133717,133435],{"class":337},[123,133719,137],{"class":129},[123,133721,133722,133724,133726,133728],{"class":125,"line":268},[123,133723,133420],{"class":164},[123,133725,147],{"class":129},[123,133727,74922],{"class":164},[123,133729,3760],{"class":129},[123,133731,133732],{"class":125,"line":291},[123,133733,171],{"class":129},[19,133735,133736],{},"优点：代码更简洁",[19,133738,133680],{},[19,133740,133741],{},"代表网站：小米、腾讯等",[14,133743,133745],{"id":133744},"_93-ps切图","9.3 PS切图",[2587,133747,133749],{"id":133748},"_931-常见图片格式","9.3.1 常见图片格式",[48,133751,133752,133762],{},[51,133753,133754],{},[54,133755,133756,133759],{},[57,133757,133758],{"align":26163},"jpg图像格式",[57,133760,133761],{"align":26163},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[64,133763,133764,133772,133780],{},[54,133765,133766,133769],{},[69,133767,133768],{"align":26163},"gif图像格式",[69,133770,133771],{"align":26163},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[54,133773,133774,133777],{},[69,133775,133776],{"align":26163},"png图像格式",[69,133778,133779],{"align":26163},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[54,133781,133782,133785],{},[69,133783,133784],{"align":26163},"PSD图像格式",[69,133786,133787],{"align":26163},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[2587,133789,133791],{"id":133790},"_932-图层切图","9.3.2 图层切图",[19,133793,133794],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133796,133797],{},"按住shift选中两个图层->图层菜单->合并图层",[2587,133799,133801],{"id":133800},"_933-切片切图","9.3.3 切片切图",[3606,133803,133804,133807],{},[29,133805,133806],{},"利用切片工具手动划出",[29,133808,133809],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[2587,133811,133813],{"id":133812},"_934-切图步骤","9.3.4 切图步骤",[19,133815,133816],{},"用切片工具选中：",[3929,133818],{"style":128796,"src":133819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133821,133822],{},"文件 -> 导出",[3929,133824],{"style":128796,"src":133825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2526,133827,133828],{},"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":118,"searchDepth":140,"depth":140,"links":133830},[133831,133840,133844],{"id":132267,"depth":140,"text":132268,"children":133832},[133833,133834,133835,133836,133837,133838,133839],{"id":132292,"depth":156,"text":132293},{"id":132583,"depth":156,"text":132584},{"id":132712,"depth":156,"text":132713},{"id":132912,"depth":156,"text":132913},{"id":132954,"depth":156,"text":132955},{"id":132992,"depth":156,"text":132993},{"id":133082,"depth":156,"text":133083},{"id":133362,"depth":140,"text":133363,"children":133841},[133842,133843],{"id":133366,"depth":156,"text":133367},{"id":133373,"depth":156,"text":133374},{"id":133744,"depth":140,"text":133745,"children":133845},[133846,133847,133848,133849],{"id":133748,"depth":156,"text":133749},{"id":133790,"depth":156,"text":133791},{"id":133800,"depth":156,"text":133801},{"id":133812,"depth":156,"text":133813},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132259,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133856,"title":133857,"body":133858,"description":2544,"extension":2545,"meta":134499,"navigation":231,"path":134500,"seo":134501,"stem":134502,"__hash__":134503},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133859,"toc":134487},[133860,133863,133867,133893,133927,133931,133935,133938,133980,133987,133997,134005,134007,134010,134013,134016,134023,134037,134041,134044,134073,134077,134080,134094,134098,134101,134129,134133,134136,134162,134166,134171,134204,134209,134237,134241,134258,134304,134309,134353,134370,134477,134485],[10,133861,133857],{"id":133862},"_10-css规范与学成在线案例",[14,133864,133866],{"id":133865},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,133868,133869,133875,133881,133887],{},[29,133870,133871,133874],{},[2759,133872,133873],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,133876,133877,133880],{},[2759,133878,133879],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,133882,133883,133886],{},[2759,133884,133885],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,133888,133889,133892],{},[2759,133890,133891],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[113,133894,133895],{"className":128940,"code":132304,"language":128942,"meta":118,"style":118},[120,133896,133897,133901,133907,133923],{"__ignoreMap":118},[123,133898,133899],{"class":125,"line":126},[123,133900,132311],{"class":2673},[123,133902,133903,133905],{"class":125,"line":140},[123,133904,54016],{"class":53707},[123,133906,137],{"class":129},[123,133908,133909,133911,133913,133915,133917,133919,133921],{"class":125,"line":156},[123,133910,73296],{"class":164},[123,133912,147],{"class":129},[123,133914,2825],{"class":164},[123,133916,53897],{"class":133},[123,133918,53926],{"class":164},[123,133920,132332],{"class":164},[123,133922,3760],{"class":129},[123,133924,133925],{"class":125,"line":168},[123,133926,171],{"class":129},[14,133928,133930],{"id":133929},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[2587,133932,133934],{"id":133933},"_1021-header头部制作","10.2.1 header头部制作",[3929,133936],{"style":128796,"src":133937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3606,133939,133940,133947,133954,133960,133967,133974],{},[29,133941,133942,133943,133946],{},"1号是版心盒子 ",[2759,133944,133945],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,133948,133949,133950,133953],{},"版心盒子 里面包含 2号盒子 ",[2759,133951,133952],{},"logo"," 图标",[29,133955,133956,133957,133959],{},"版心盒子 里面包含 3号盒子 ",[2759,133958,56116],{}," 导航栏",[29,133961,133962,133963,133966],{},"版心盒子 里面包含 4号盒子 ",[2759,133964,133965],{},"search"," 搜索框",[29,133968,133969,133970,133973],{},"版心盒子 里面包含 5号盒子 ",[2759,133971,133972],{},"user"," 个人信息",[29,133975,133976,133977],{},"注意，要求里面的 ",[2759,133978,133979],{},"4个子盒子 必须都浮动",[26,133981,133982],{},[29,133983,133984],{},[2759,133985,133986],{},"导航栏注意点:",[19,133988,133989,133990,133993,133994],{},"实际开发中， ",[2759,133991,133992],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2759,133995,133996],{},"用 li 包含链接(li+a)的做法",[3606,133998,133999,134002],{},[29,134000,134001],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,134003,134004],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134006,11457],{},[19,134008,134009],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134011,134012],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134014,134015],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,134017,134018],{"start":140},[29,134019,134020],{},[2759,134021,134022],{},"4号盒子search的细节：",[3606,134024,134025,134028,134031],{},[29,134026,134027],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,134029,134030],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,134032,134033,134036],{},[120,134034,134035],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[2587,134038,134040],{"id":134039},"_1022-banner制作","10.2.2 banner制作",[3929,134042],{"style":128796,"src":134043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3606,134045,134046,134053,134059,134066],{},[29,134047,134048,134049,134052],{},"1号盒子是通栏的大盒子 ",[2759,134050,134051],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,134054,134055,134056,134058],{},"2号盒子是版心 ",[2759,134057,3397],{}," ， 要水平居中对齐",[29,134060,134061,134062,134065],{},"3号盒子版心内，左对齐 ",[2759,134063,134064],{},"subnav"," 侧导航栏",[29,134067,134068,134069,134072],{},"4号盒子版心内，右对齐 ",[2759,134070,134071],{},"course"," 课程",[2587,134074,134076],{"id":134075},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3929,134078],{"style":128796,"src":134079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3606,134081,134082,134085,134088,134091],{},[29,134083,134084],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,134086,134087],{},"1号盒子是标题 H3 左侧浮动",[29,134089,134090],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,134092,134093],{},"3号盒子 右浮动 mod 修改",[2587,134095,134097],{"id":134096},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3929,134099],{"style":128796,"src":134100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3606,134102,134103,134109,134116,134123,134126],{},[29,134104,134105,134106,134108],{},"1号盒子为最大的盒子 ",[2759,134107,56117],{}," 版心水平居中对齐",[29,134110,134111,134112,134115],{},"2号盒子为上面部分 ",[2759,134113,134114],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,134117,134118,134119,134122],{},"3号盒子为底下部分 ",[2759,134120,134121],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,134124,134125],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,134127,134128],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[2587,134130,134132],{"id":134131},"_1025-底部模块制作","10.2.5 底部模块制作",[3929,134134],{"style":128796,"src":134135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3606,134137,134138,134145,134148,134155],{},[29,134139,134140,134141,134144],{},"1号盒子通栏大盒子 底部 ",[2759,134142,134143],{},"footer"," 给高度 底色是白色",[29,134146,134147],{},"2号盒子版心水平居中",[29,134149,134150,134151,134154],{},"3号盒子版权 ",[2759,134152,134153],{},"copyright"," 左对齐",[29,134156,134157,134158,134161],{},"4号盒子 链接组 ",[2759,134159,134160],{},"links"," 右对齐",[2587,134163,134165],{"id":134164},"_1026-代码模块","10.2.6 代码模块",[26,134167,134168],{},[29,134169,134170],{},"html部分",[113,134172,134174],{"className":129687,"code":134173,"language":129689,"meta":118,"style":118},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[120,134175,134176],{"__ignoreMap":118},[123,134177,134178,134180,134182,134184,134186,134189,134192,134194,134197,134200,134202],{"class":125,"line":126},[123,134179,3509],{"class":129},[123,134181,2846],{"class":53707},[123,134183,63459],{"class":337},[123,134185,134],{"class":129},[123,134187,134188],{"class":143},"\"https:\u002F\u002Fexample.com\"",[123,134190,134191],{"class":337}," target",[123,134193,134],{"class":129},[123,134195,134196],{"class":143},"\"_blank\"",[123,134198,134199],{"class":129},">链接文字\u003C\u002F",[123,134201,2846],{"class":53707},[123,134203,53714],{"class":129},[26,134205,134206],{"start":140},[29,134207,134208],{},"css部分",[113,134210,134211],{"className":129687,"code":134173,"language":129689,"meta":118,"style":118},[120,134212,134213],{"__ignoreMap":118},[123,134214,134215,134217,134219,134221,134223,134225,134227,134229,134231,134233,134235],{"class":125,"line":126},[123,134216,3509],{"class":129},[123,134218,2846],{"class":53707},[123,134220,63459],{"class":337},[123,134222,134],{"class":129},[123,134224,134188],{"class":143},[123,134226,134191],{"class":337},[123,134228,134],{"class":129},[123,134230,134196],{"class":143},[123,134232,134199],{"class":129},[123,134234,2846],{"class":53707},[123,134236,53714],{"class":129},[2587,134238,134240],{"id":134239},"_1027-收获","10.2.7 收获",[26,134242,134243,134246,134249,134252,134255],{},[29,134244,134245],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,134247,134248],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,134250,134251],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,134253,134254],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,134256,134257],{},"遗忘代码",[113,134259,134261],{"className":128940,"code":134260,"language":128942,"meta":118,"style":118},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[120,134262,134263,134285,134290,134300],{"__ignoreMap":118},[123,134264,134265,134267,134269,134271,134273,134275,134277,134279,134281,134283],{"class":125,"line":126},[123,134266,54016],{"class":53707},[123,134268,251],{"class":129},[123,134270,19],{"class":53707},[123,134272,251],{"class":129},[123,134274,10],{"class":53707},[123,134276,251],{"class":129},[123,134278,3606],{"class":53707},[123,134280,251],{"class":129},[123,134282,29],{"class":53707},[123,134284,137],{"class":129},[123,134286,134287],{"class":125,"line":140},[123,134288,134289],{"class":2673},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[123,134291,134292,134294,134296,134298],{"class":125,"line":156},[123,134293,130556],{"class":164},[123,134295,147],{"class":129},[123,134297,63271],{"class":164},[123,134299,3760],{"class":129},[123,134301,134302],{"class":125,"line":168},[123,134303,171],{"class":129},[26,134305,134306],{"start":291},[29,134307,134308],{},"html引css的程序",[113,134310,134311],{"className":128940,"code":134260,"language":128942,"meta":118,"style":118},[120,134312,134313,134335,134339,134349],{"__ignoreMap":118},[123,134314,134315,134317,134319,134321,134323,134325,134327,134329,134331,134333],{"class":125,"line":126},[123,134316,54016],{"class":53707},[123,134318,251],{"class":129},[123,134320,19],{"class":53707},[123,134322,251],{"class":129},[123,134324,10],{"class":53707},[123,134326,251],{"class":129},[123,134328,3606],{"class":53707},[123,134330,251],{"class":129},[123,134332,29],{"class":53707},[123,134334,137],{"class":129},[123,134336,134337],{"class":125,"line":140},[123,134338,134289],{"class":2673},[123,134340,134341,134343,134345,134347],{"class":125,"line":156},[123,134342,130556],{"class":164},[123,134344,147],{"class":129},[123,134346,63271],{"class":164},[123,134348,3760],{"class":129},[123,134350,134351],{"class":125,"line":168},[123,134352,171],{"class":129},[26,134354,134355,134358,134361,134364,134367],{"start":300},[29,134356,134357],{},"浮动的盒子不会有外边距合并问题",[29,134359,134360],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,134362,134363],{},"ctrl+g快速定位行；shift+alt多个光标",[29,134365,134366],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,134368,134369],{},"在写选择器时尽量写全一些，例如",[113,134371,134373],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},"\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",[120,134374,134375,134380,134396,134401,134416,134421,134436,134441,134456,134461],{"__ignoreMap":118},[123,134376,134377],{"class":125,"line":126},[123,134378,134379],{"class":2673},"\u002F* 静态定位（默认） *\u002F\n",[123,134381,134382,134385,134387,134389,134391,134394],{"class":125,"line":140},[123,134383,134384],{"class":337},".static",[123,134386,82205],{"class":129},[123,134388,131300],{"class":164},[123,134390,147],{"class":129},[123,134392,134393],{"class":164},"static",[123,134395,131870],{"class":129},[123,134397,134398],{"class":125,"line":156},[123,134399,134400],{"class":2673},"\u002F* 相对定位 *\u002F\n",[123,134402,134403,134406,134408,134410,134412,134414],{"class":125,"line":168},[123,134404,134405],{"class":337},".relative",[123,134407,82205],{"class":129},[123,134409,131300],{"class":164},[123,134411,147],{"class":129},[123,134413,57167],{"class":164},[123,134415,131870],{"class":129},[123,134417,134418],{"class":125,"line":268},[123,134419,134420],{"class":2673},"\u002F* 绝对定位 *\u002F\n",[123,134422,134423,134426,134428,134430,134432,134434],{"class":125,"line":291},[123,134424,134425],{"class":337},".absolute",[123,134427,82205],{"class":129},[123,134429,131300],{"class":164},[123,134431,147],{"class":129},[123,134433,57234],{"class":164},[123,134435,131870],{"class":129},[123,134437,134438],{"class":125,"line":300},[123,134439,134440],{"class":2673},"\u002F* 固定定位 *\u002F\n",[123,134442,134443,134446,134448,134450,134452,134454],{"class":125,"line":305},[123,134444,134445],{"class":337},".fixed",[123,134447,82205],{"class":129},[123,134449,131300],{"class":164},[123,134451,147],{"class":129},[123,134453,88629],{"class":164},[123,134455,131870],{"class":129},[123,134457,134458],{"class":125,"line":316},[123,134459,134460],{"class":2673},"\u002F* 粘性定位 *\u002F\n",[123,134462,134463,134466,134468,134470,134472,134475],{"class":125,"line":673},[123,134464,134465],{"class":337},".sticky",[123,134467,82205],{"class":129},[123,134469,131300],{"class":164},[123,134471,147],{"class":129},[123,134473,134474],{"class":164},"sticky",[123,134476,131870],{"class":129},[26,134478,134479,134482],{"start":713},[29,134480,134481],{},"一定要用好注释",[29,134483,134484],{},"浮动的盒子不会有外边距合并的问题",[2526,134486,133828],{},{"title":118,"searchDepth":140,"depth":140,"links":134488},[134489,134490],{"id":133865,"depth":140,"text":133866},{"id":133929,"depth":140,"text":133930,"children":134491},[134492,134493,134494,134495,134496,134497,134498],{"id":133933,"depth":156,"text":133934},{"id":134039,"depth":156,"text":134040},{"id":134075,"depth":156,"text":134076},{"id":134096,"depth":156,"text":134097},{"id":134131,"depth":156,"text":134132},{"id":134164,"depth":156,"text":134165},{"id":134239,"depth":156,"text":134240},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133857,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134505,"title":134506,"body":134507,"description":2544,"extension":2545,"meta":135993,"navigation":231,"path":135994,"seo":135995,"stem":135996,"__hash__":135997},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134508,"toc":135985},[134509,134512,134516,134520,134531,134535,134552,134596,134629,134632,134649,134652,134655,134699,134703,134707,134710,134713,134717,134720,134731,134794,134835,134838,134853,134907,134915,134918,134929,134983,135009,135012,135025,135079,135111,135165,135188,135242,135245,135248,135255,135309,135330,135384,135387,135390,135475,135483,135540,135563,135567,135570,135588,135592,135611,135665,135703,135707,135710,135713,135735,135739,135747,135750,135755,135766,135769,135773,135787,135831,135834,135838,135841,135846,135872,135877,135954,135957,135961,135964,135967,135970,135973,135976,135979,135982],[10,134510,134506],{"id":134511},"_11-传统布局与定位体系",[14,134513,134515],{"id":134514},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[2587,134517,134519],{"id":134518},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3606,134521,134522,134525,134528],{},[29,134523,134524],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,134526,134527],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,134529,134530],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[2587,134532,134534],{"id":134533},"_1112-浮动","11.1.2 浮动",[3606,134536,134537,134540,134543,134546,134549],{},[29,134538,134539],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,134541,134542],{},"浮动可以改变元素标签默认的排列方式",[29,134544,134545],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,134547,134548],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,134550,134551],{},"在使用行内块转换时盒子之间是有空隙的",[113,134553,134554],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,134555,134556,134562,134572,134576,134582,134592],{"__ignoreMap":118},[123,134557,134558,134560],{"class":125,"line":126},[123,134559,133413],{"class":337},[123,134561,137],{"class":129},[123,134563,134564,134566,134568,134570],{"class":125,"line":140},[123,134565,133420],{"class":164},[123,134567,147],{"class":129},[123,134569,26163],{"class":164},[123,134571,3760],{"class":129},[123,134573,134574],{"class":125,"line":156},[123,134575,171],{"class":129},[123,134577,134578,134580],{"class":125,"line":168},[123,134579,133435],{"class":337},[123,134581,137],{"class":129},[123,134583,134584,134586,134588,134590],{"class":125,"line":268},[123,134585,133420],{"class":164},[123,134587,147],{"class":129},[123,134589,74922],{"class":164},[123,134591,3760],{"class":129},[123,134593,134594],{"class":125,"line":291},[123,134595,171],{"class":129},[48,134597,134598,134606],{},[51,134599,134600],{},[54,134601,134602,134604],{},[57,134603,129404],{"align":26163},[57,134605,29910],{"align":26163},[64,134607,134608,134615,134622],{},[54,134609,134610,134612],{},[69,134611,57140],{"align":26163},[69,134613,134614],{"align":26163},"元素不浮动（默认值）",[54,134616,134617,134619],{},[69,134618,26163],{"align":26163},[69,134620,134621],{"align":26163},"元素向左浮动",[54,134623,134624,134626],{},[69,134625,74922],{"align":26163},[69,134627,134628],{"align":26163},"元素向右浮动",[19,134630,134631],{},"浮动重点：",[3606,134633,134634,134637,134640,134643,134646],{},[29,134635,134636],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,134638,134639],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,134641,134642],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,134644,134645],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,134647,134648],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134650,134651],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134653,134654],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[113,134656,134657],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,134658,134659,134665,134675,134679,134685,134695],{"__ignoreMap":118},[123,134660,134661,134663],{"class":125,"line":126},[123,134662,133413],{"class":337},[123,134664,137],{"class":129},[123,134666,134667,134669,134671,134673],{"class":125,"line":140},[123,134668,133420],{"class":164},[123,134670,147],{"class":129},[123,134672,26163],{"class":164},[123,134674,3760],{"class":129},[123,134676,134677],{"class":125,"line":156},[123,134678,171],{"class":129},[123,134680,134681,134683],{"class":125,"line":168},[123,134682,133435],{"class":337},[123,134684,137],{"class":129},[123,134686,134687,134689,134691,134693],{"class":125,"line":268},[123,134688,133420],{"class":164},[123,134690,147],{"class":129},[123,134692,74922],{"class":164},[123,134694,3760],{"class":129},[123,134696,134697],{"class":125,"line":291},[123,134698,171],{"class":129},[2587,134700,134702],{"id":134701},"_1113-定位","11.1.3 定位",[24425,134704,134706],{"id":134705},"_11131-使用场景","11.1.3.1 使用场景",[19,134708,134709],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134711,134712],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24425,134714,134716],{"id":134715},"_11132-定位组成","11.1.3.2 定位组成",[19,134718,134719],{},"定位 = 定位模式 + 边偏移",[26,134721,134722],{},[29,134723,134724,134727,134728],{},[2759,134725,134726],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2759,134729,134730],{},"定位模式",[113,134732,134734],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[120,134735,134736,134742,134756,134773,134790],{"__ignoreMap":118},[123,134737,134738,134740],{"class":125,"line":126},[123,134739,132788],{"class":337},[123,134741,137],{"class":129},[123,134743,134744,134747,134749,134751,134753],{"class":125,"line":140},[123,134745,134746],{"class":164},"  position",[123,134748,147],{"class":129},[123,134750,57167],{"class":164},[123,134752,132803],{"class":129},[123,134754,134755],{"class":2673},"\u002F* 定位模式 *\u002F\n",[123,134757,134758,134761,134763,134765,134767,134770],{"class":125,"line":156},[123,134759,134760],{"class":164},"  top",[123,134762,147],{"class":129},[123,134764,2193],{"class":164},[123,134766,53897],{"class":133},[123,134768,134769],{"class":129},";           ",[123,134771,134772],{"class":2673},"\u002F* 边偏移：上 *\u002F\n",[123,134774,134775,134778,134780,134782,134784,134787],{"class":125,"line":168},[123,134776,134777],{"class":164},"  left",[123,134779,147],{"class":129},[123,134781,3302],{"class":164},[123,134783,53897],{"class":133},[123,134785,134786],{"class":129},";          ",[123,134788,134789],{"class":2673},"\u002F* 边偏移：左 *\u002F\n",[123,134791,134792],{"class":125,"line":268},[123,134793,171],{"class":129},[48,134795,134796,134805],{},[51,134797,134798],{},[54,134799,134800,134802],{},[57,134801,2762],{"align":26163},[57,134803,134804],{"align":26163},"语义",[64,134806,134807,134814,134821,134828],{},[54,134808,134809,134811],{},[69,134810,134393],{"align":26163},[69,134812,134813],{"align":26163},"静态定位",[54,134815,134816,134818],{},[69,134817,57167],{"align":26163},[69,134819,134820],{"align":26163},"相对定位",[54,134822,134823,134825],{},[69,134824,57234],{"align":26163},[69,134826,134827],{"align":26163},"绝对定位",[54,134829,134830,134832],{},[69,134831,88629],{"align":26163},[69,134833,134834],{"align":26163},"固定定位",[19,134836,134837],{},"（1）静态定位：",[3606,134839,134840,134851],{},[29,134841,134842,134843,134846,134847,134850],{},"静态定位是元素的 ",[2759,134844,134845],{},"默认定位方式"," ， ",[2759,134848,134849],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,134852,7615],{},[113,134854,134855],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,134856,134857,134863,134875,134889,134903],{"__ignoreMap":118},[123,134858,134859,134861],{"class":125,"line":126},[123,134860,132788],{"class":337},[123,134862,137],{"class":129},[123,134864,134865,134867,134869,134871,134873],{"class":125,"line":140},[123,134866,134746],{"class":164},[123,134868,147],{"class":129},[123,134870,57167],{"class":164},[123,134872,132803],{"class":129},[123,134874,134755],{"class":2673},[123,134876,134877,134879,134881,134883,134885,134887],{"class":125,"line":156},[123,134878,134760],{"class":164},[123,134880,147],{"class":129},[123,134882,2193],{"class":164},[123,134884,53897],{"class":133},[123,134886,134769],{"class":129},[123,134888,134772],{"class":2673},[123,134890,134891,134893,134895,134897,134899,134901],{"class":125,"line":168},[123,134892,134777],{"class":164},[123,134894,147],{"class":129},[123,134896,3302],{"class":164},[123,134898,53897],{"class":133},[123,134900,134786],{"class":129},[123,134902,134789],{"class":2673},[123,134904,134905],{"class":125,"line":268},[123,134906,171],{"class":129},[3606,134908,134909,134912],{},[29,134910,134911],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,134913,134914],{},"静态定位在布局时我们几乎不用的",[19,134916,134917],{},"（2）相对定位",[3606,134919,134920,134927],{},[29,134921,134922,134923,134926],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2759,134924,134925],{},"原来的位置"," 来说的（自恋型）",[29,134928,7615],{},[113,134930,134931],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,134932,134933,134939,134951,134965,134979],{"__ignoreMap":118},[123,134934,134935,134937],{"class":125,"line":126},[123,134936,132788],{"class":337},[123,134938,137],{"class":129},[123,134940,134941,134943,134945,134947,134949],{"class":125,"line":140},[123,134942,134746],{"class":164},[123,134944,147],{"class":129},[123,134946,57167],{"class":164},[123,134948,132803],{"class":129},[123,134950,134755],{"class":2673},[123,134952,134953,134955,134957,134959,134961,134963],{"class":125,"line":156},[123,134954,134760],{"class":164},[123,134956,147],{"class":129},[123,134958,2193],{"class":164},[123,134960,53897],{"class":133},[123,134962,134769],{"class":129},[123,134964,134772],{"class":2673},[123,134966,134967,134969,134971,134973,134975,134977],{"class":125,"line":168},[123,134968,134777],{"class":164},[123,134970,147],{"class":129},[123,134972,3302],{"class":164},[123,134974,53897],{"class":133},[123,134976,134786],{"class":129},[123,134978,134789],{"class":2673},[123,134980,134981],{"class":125,"line":268},[123,134982,171],{"class":129},[3606,134984,134985],{},[29,134986,134987,134988,134990,134991,134993,134994,134997,134998,135001,135002,135004,135005,135008],{},"相对定位的特点：",[56119,134989],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56119,134992],{},"  ② ",[2759,134995,134996],{},"原来"," 在标准流的 ",[2759,134999,135000],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56119,135003],{},"  ③因此， ",[2759,135006,135007],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135010,135011],{},"（3）绝对定位",[3606,135013,135014,135023],{},[29,135015,135016,135018,135019,135022],{},[2759,135017,134827],{}," 是元素在移动位置的时候，是相对于它 ",[2759,135020,135021],{},"祖先元素"," 来说的（拼爹型）",[29,135024,7615],{},[113,135026,135027],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,135028,135029,135035,135047,135061,135075],{"__ignoreMap":118},[123,135030,135031,135033],{"class":125,"line":126},[123,135032,132788],{"class":337},[123,135034,137],{"class":129},[123,135036,135037,135039,135041,135043,135045],{"class":125,"line":140},[123,135038,134746],{"class":164},[123,135040,147],{"class":129},[123,135042,57167],{"class":164},[123,135044,132803],{"class":129},[123,135046,134755],{"class":2673},[123,135048,135049,135051,135053,135055,135057,135059],{"class":125,"line":156},[123,135050,134760],{"class":164},[123,135052,147],{"class":129},[123,135054,2193],{"class":164},[123,135056,53897],{"class":133},[123,135058,134769],{"class":129},[123,135060,134772],{"class":2673},[123,135062,135063,135065,135067,135069,135071,135073],{"class":125,"line":168},[123,135064,134777],{"class":164},[123,135066,147],{"class":129},[123,135068,3302],{"class":164},[123,135070,53897],{"class":133},[123,135072,134786],{"class":129},[123,135074,134789],{"class":2673},[123,135076,135077],{"class":125,"line":268},[123,135078,171],{"class":129},[3606,135080,135081,135096,135105,135108],{},[29,135082,135083,135084,135086,135087,135089,135090,135092,135093,135095],{},"绝对定位的特点：",[56119,135085],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56119,135088],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56119,135091],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56119,135094],{},"  (4)固定定位",[29,135097,135098,135100,135101,135104],{},[2759,135099,134834],{}," 是元素 ",[2759,135102,135103],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,135106,135107],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,135109,135110],{},"语法:",[113,135112,135113],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,135114,135115,135121,135133,135147,135161],{"__ignoreMap":118},[123,135116,135117,135119],{"class":125,"line":126},[123,135118,132788],{"class":337},[123,135120,137],{"class":129},[123,135122,135123,135125,135127,135129,135131],{"class":125,"line":140},[123,135124,134746],{"class":164},[123,135126,147],{"class":129},[123,135128,57167],{"class":164},[123,135130,132803],{"class":129},[123,135132,134755],{"class":2673},[123,135134,135135,135137,135139,135141,135143,135145],{"class":125,"line":156},[123,135136,134760],{"class":164},[123,135138,147],{"class":129},[123,135140,2193],{"class":164},[123,135142,53897],{"class":133},[123,135144,134769],{"class":129},[123,135146,134772],{"class":2673},[123,135148,135149,135151,135153,135155,135157,135159],{"class":125,"line":168},[123,135150,134777],{"class":164},[123,135152,147],{"class":129},[123,135154,3302],{"class":164},[123,135156,53897],{"class":133},[123,135158,134786],{"class":129},[123,135160,134789],{"class":2673},[123,135162,135163],{"class":125,"line":268},[123,135164,171],{"class":129},[3606,135166,135167,135176],{},[29,135168,135169,135170,135172,135173,135175],{},"特点:",[56119,135171],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56119,135174],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,135177,135178,135179,135181,135182,135184,135185,135187],{},"固定在版心位置的方法:",[56119,135180],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56119,135183],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56119,135186],{},"  实例：",[113,135189,135190],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,135191,135192,135198,135210,135224,135238],{"__ignoreMap":118},[123,135193,135194,135196],{"class":125,"line":126},[123,135195,132788],{"class":337},[123,135197,137],{"class":129},[123,135199,135200,135202,135204,135206,135208],{"class":125,"line":140},[123,135201,134746],{"class":164},[123,135203,147],{"class":129},[123,135205,57167],{"class":164},[123,135207,132803],{"class":129},[123,135209,134755],{"class":2673},[123,135211,135212,135214,135216,135218,135220,135222],{"class":125,"line":156},[123,135213,134760],{"class":164},[123,135215,147],{"class":129},[123,135217,2193],{"class":164},[123,135219,53897],{"class":133},[123,135221,134769],{"class":129},[123,135223,134772],{"class":2673},[123,135225,135226,135228,135230,135232,135234,135236],{"class":125,"line":168},[123,135227,134777],{"class":164},[123,135229,147],{"class":129},[123,135231,3302],{"class":164},[123,135233,53897],{"class":133},[123,135235,134786],{"class":129},[123,135237,134789],{"class":2673},[123,135239,135240],{"class":125,"line":268},[123,135241,171],{"class":129},[3929,135243],{"style":128796,"src":135244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135246,135247],{},"(5)粘性定位",[3606,135249,135250,135253],{},[29,135251,135252],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,135254,7615],{},[113,135256,135257],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,135258,135259,135265,135277,135291,135305],{"__ignoreMap":118},[123,135260,135261,135263],{"class":125,"line":126},[123,135262,132788],{"class":337},[123,135264,137],{"class":129},[123,135266,135267,135269,135271,135273,135275],{"class":125,"line":140},[123,135268,134746],{"class":164},[123,135270,147],{"class":129},[123,135272,57167],{"class":164},[123,135274,132803],{"class":129},[123,135276,134755],{"class":2673},[123,135278,135279,135281,135283,135285,135287,135289],{"class":125,"line":156},[123,135280,134760],{"class":164},[123,135282,147],{"class":129},[123,135284,2193],{"class":164},[123,135286,53897],{"class":133},[123,135288,134769],{"class":129},[123,135290,134772],{"class":2673},[123,135292,135293,135295,135297,135299,135301,135303],{"class":125,"line":168},[123,135294,134777],{"class":164},[123,135296,147],{"class":129},[123,135298,3302],{"class":164},[123,135300,53897],{"class":133},[123,135302,134786],{"class":129},[123,135304,134789],{"class":2673},[123,135306,135307],{"class":125,"line":268},[123,135308,171],{"class":129},[3606,135310,135311],{},[29,135312,135313,135314,135316,135317,135319,135320,135322,135323,135326,135327,135329],{},"粘性定位的特点：",[56119,135315],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56119,135318],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56119,135321],{},"  ③必须添加 top 、left、right、bottom ",[2759,135324,135325],{},"其中一个"," 才有效",[56119,135328],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[113,135331,135332],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,135333,135334,135340,135352,135366,135380],{"__ignoreMap":118},[123,135335,135336,135338],{"class":125,"line":126},[123,135337,132788],{"class":337},[123,135339,137],{"class":129},[123,135341,135342,135344,135346,135348,135350],{"class":125,"line":140},[123,135343,134746],{"class":164},[123,135345,147],{"class":129},[123,135347,57167],{"class":164},[123,135349,132803],{"class":129},[123,135351,134755],{"class":2673},[123,135353,135354,135356,135358,135360,135362,135364],{"class":125,"line":156},[123,135355,134760],{"class":164},[123,135357,147],{"class":129},[123,135359,2193],{"class":164},[123,135361,53897],{"class":133},[123,135363,134769],{"class":129},[123,135365,134772],{"class":2673},[123,135367,135368,135370,135372,135374,135376,135378],{"class":125,"line":168},[123,135369,134777],{"class":164},[123,135371,147],{"class":129},[123,135373,3302],{"class":164},[123,135375,53897],{"class":133},[123,135377,134786],{"class":129},[123,135379,134789],{"class":2673},[123,135381,135382],{"class":125,"line":268},[123,135383,171],{"class":129},[3929,135385],{"style":128796,"src":135386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135388,135389],{},"(6)总结",[48,135391,135392,135407],{},[51,135393,135394],{},[54,135395,135396,135398,135401,135404],{},[57,135397,134730],{"align":26163},[57,135399,135400],{"align":26163},"是否脱标",[57,135402,135403],{"align":26163},"移动位置",[57,135405,135406],{"align":26163},"是否常用",[64,135408,135409,135422,135436,135450,135463],{},[54,135410,135411,135414,135416,135419],{},[69,135412,135413],{"align":26163},"Static 静态定位",[69,135415,107068],{"align":26163},[69,135417,135418],{"align":26163},"不能使用边偏移",[69,135420,135421],{"align":26163},"很少",[54,135423,135424,135427,135430,135433],{},[69,135425,135426],{"align":26163},"Relative 相对定位",[69,135428,135429],{"align":26163},"否(占有位置)",[69,135431,135432],{"align":26163},"相对于自身位置移动",[69,135434,135435],{"align":26163},"基本单独使用",[54,135437,135438,135441,135444,135447],{},[69,135439,135440],{"align":26163},"Absolute 绝对定位",[69,135442,135443],{"align":26163},"是(不占有位置)",[69,135445,135446],{"align":26163},"带有定位的父级",[69,135448,135449],{"align":26163},"要和定位父级元素搭配使用",[54,135451,135452,135455,135457,135460],{},[69,135453,135454],{"align":26163},"Fixed 固定定位",[69,135456,135443],{"align":26163},[69,135458,135459],{"align":26163},"浏览器可视区",[69,135461,135462],{"align":26163},"单独使用,不需要父级",[54,135464,135465,135468,135470,135472],{},[69,135466,135467],{"align":26163},"Sticky 粘性定位",[69,135469,135429],{"align":26163},[69,135471,135459],{"align":26163},[69,135473,135474],{"align":26163},"当前阶段少",[26,135476,135477],{"start":140},[29,135478,135479,135482],{},[2759,135480,135481],{},"边偏移"," 则决定了该元素的最终位置",[48,135484,135485,135496],{},[51,135486,135487],{},[54,135488,135489,135492,135494],{},[57,135490,135491],{"align":26163},"边偏移属性",[57,135493,29913],{"align":26163},[57,135495,29910],{"align":26163},[64,135497,135498,135509,135520,135530],{},[54,135499,135500,135503,135506],{},[69,135501,135502],{"align":26163},"top",[69,135504,135505],{"align":26163},"top: 80px;",[69,135507,135508],{"align":26163},"顶端偏移量，定义元素相对于父元素上边线的距离",[54,135510,135511,135514,135517],{},[69,135512,135513],{"align":26163},"bottom",[69,135515,135516],{"align":26163},"bottom: 80px ;",[69,135518,135519],{"align":26163},"底部偏移量，定义元素相对于其父元素下边线的距离",[54,135521,135522,135524,135527],{},[69,135523,26163],{"align":26163},[69,135525,135526],{"align":26163},"left: 80px ;",[69,135528,135529],{"align":26163},"左侧偏移量，定义元素相对于其父元素左边线的距离",[54,135531,135532,135534,135537],{},[69,135533,74922],{"align":26163},[69,135535,135536],{"align":26163},"right: 80px ;",[69,135538,135539],{"align":26163},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3606,135541,135542],{},[29,135543,11457,135544,135546,135547,135549,135550,135552,135553,135556,135557,135559,135560,135562],{},[56119,135545],{},"  ① ",[2759,135548,135481],{}," 需要和 ",[2759,135551,134730],{}," 联合使用， ",[2759,135554,135555],{},"单独使用无效"," ；",[56119,135558],{},"  ②top和bottom不要同时使用",[56119,135561],{},"  ③left和right不要同时使用",[24425,135564,135566],{"id":135565},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135568,135569],{},"子级是绝对定位的话，父级要用相对定位",[3606,135571,135572,135575,135578,135581],{},[29,135573,135574],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,135576,135577],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,135579,135580],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,135582,135583,135584,135587],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2759,135585,135586],{},"子绝父绝"," 也会遇到",[24425,135589,135591],{"id":135590},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3606,135593,135594,135609],{},[29,135595,135596,135597,135600,135601,135604,135605,135608],{},"在使用 ",[2759,135598,135599],{},"定位"," 布局时，可能会 ",[2759,135602,135603],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2759,135606,135607],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,135610,7615],{},[113,135612,135613],{"className":128940,"code":134733,"language":128942,"meta":118,"style":118},[120,135614,135615,135621,135633,135647,135661],{"__ignoreMap":118},[123,135616,135617,135619],{"class":125,"line":126},[123,135618,132788],{"class":337},[123,135620,137],{"class":129},[123,135622,135623,135625,135627,135629,135631],{"class":125,"line":140},[123,135624,134746],{"class":164},[123,135626,147],{"class":129},[123,135628,57167],{"class":164},[123,135630,132803],{"class":129},[123,135632,134755],{"class":2673},[123,135634,135635,135637,135639,135641,135643,135645],{"class":125,"line":156},[123,135636,134760],{"class":164},[123,135638,147],{"class":129},[123,135640,2193],{"class":164},[123,135642,53897],{"class":133},[123,135644,134769],{"class":129},[123,135646,134772],{"class":2673},[123,135648,135649,135651,135653,135655,135657,135659],{"class":125,"line":168},[123,135650,134777],{"class":164},[123,135652,147],{"class":129},[123,135654,3302],{"class":164},[123,135656,53897],{"class":133},[123,135658,134786],{"class":129},[123,135660,134789],{"class":2673},[123,135662,135663],{"class":125,"line":268},[123,135664,171],{"class":129},[3606,135666,135667],{},[29,135668,135669,135670,135546,135672,135674,135675,130103,135678,84936,135681,135683,135684,135686,135687,135690,135691,135556,135694,135696,135697,135700,135702],{},"z-index的特性",[56119,135671],{},[2759,135673,129404],{}," ： ",[2759,135676,135677],{},"正整数",[2759,135679,135680],{},"负整数",[2759,135682,2799],{}," ，默认值是 0，数值越大，盒子越靠上；",[56119,135685],{},"  ②如果 ",[2759,135688,135689],{},"属性值相同"," ，则按照书写顺序， ",[2759,135692,135693],{},"后来居上",[56119,135695],{},"  ③数字后面 ",[2759,135698,135699],{},"不能加单位",[56119,135701],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24425,135704,135706],{"id":135705},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135708,135709],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135711,135712],{},"方法:",[3606,135714,135715,135725],{},[29,135716,135717,135718,135721,135722],{},"left: 50%; 让 ",[2759,135719,135720],{},"盒子的左侧"," 移动到 ",[2759,135723,135724],{},"父级元素的水平中心位置",[29,135726,135727,135728,135731,135732],{},"margin-left: -100px; 让盒子 ",[2759,135729,135730],{},"向左"," 移动 ",[2759,135733,135734],{},"自身宽度的一半",[24425,135736,135738],{"id":135737},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,135740,135741,135744],{},[29,135742,135743],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,135745,135746],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135748,135749],{},"也就是说绝对定位和固定定位和浮动类似",[26,135751,135752],{"start":156},[29,135753,135754],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3606,135756,135757,135760,135763],{},[29,135758,135759],{},"可以用inline-block 转换为行内块",[29,135761,135762],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,135764,135765],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135767,135768],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24425,135770,135772],{"id":135771},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,135774,135775,135778,135781,135784],{},[29,135776,135777],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,135779,135780],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,135782,135783],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,135785,135786],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[113,135788,135789],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,135790,135791,135797,135807,135811,135817,135827],{"__ignoreMap":118},[123,135792,135793,135795],{"class":125,"line":126},[123,135794,133413],{"class":337},[123,135796,137],{"class":129},[123,135798,135799,135801,135803,135805],{"class":125,"line":140},[123,135800,133420],{"class":164},[123,135802,147],{"class":129},[123,135804,26163],{"class":164},[123,135806,3760],{"class":129},[123,135808,135809],{"class":125,"line":156},[123,135810,171],{"class":129},[123,135812,135813,135815],{"class":125,"line":168},[123,135814,133435],{"class":337},[123,135816,137],{"class":129},[123,135818,135819,135821,135823,135825],{"class":125,"line":268},[123,135820,133420],{"class":164},[123,135822,147],{"class":129},[123,135824,74922],{"class":164},[123,135826,3760],{"class":129},[123,135828,135829],{"class":125,"line":291},[123,135830,171],{"class":129},[3929,135832],{"style":128796,"src":135833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24425,135835,135837],{"id":135836},"_11138-轮播图","11.1.3.8 轮播图",[3929,135839],{"style":128796,"src":135840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,135842,135843],{},[29,135844,135845],{},"制作顺序:",[3606,135847,135848,135851,135854,135863],{},[29,135849,135850],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,135852,135853],{},"里面先放一张图片",[29,135855,135856,135857,135859,135860,135862],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56119,135858],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56119,135861],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,135864,135865,135866,135868,135869,135871],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56119,135867],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56119,135870],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,135873,135874],{"start":140},[29,135875,135876],{},"代码模块",[113,135878,135880],{"className":128940,"code":135879,"language":128942,"meta":118,"style":118},"\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",[120,135881,135882,135887,135894,135904,135914,135924,135928,135933,135940,135950],{"__ignoreMap":118},[123,135883,135884],{"class":125,"line":126},[123,135885,135886],{"class":2673},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[123,135888,135889,135892],{"class":125,"line":140},[123,135890,135891],{"class":337},".son",[123,135893,137],{"class":129},[123,135895,135896,135898,135900,135902],{"class":125,"line":156},[123,135897,134746],{"class":164},[123,135899,147],{"class":129},[123,135901,57234],{"class":164},[123,135903,3760],{"class":129},[123,135905,135906,135908,135910,135912],{"class":125,"line":168},[123,135907,134760],{"class":164},[123,135909,147],{"class":129},[123,135911,2799],{"class":164},[123,135913,3760],{"class":129},[123,135915,135916,135918,135920,135922],{"class":125,"line":268},[123,135917,134777],{"class":164},[123,135919,147],{"class":129},[123,135921,2799],{"class":164},[123,135923,3760],{"class":129},[123,135925,135926],{"class":125,"line":291},[123,135927,171],{"class":129},[123,135929,135930],{"class":125,"line":300},[123,135931,135932],{"class":2673},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[123,135934,135935,135938],{"class":125,"line":305},[123,135936,135937],{"class":337},".father",[123,135939,137],{"class":129},[123,135941,135942,135944,135946,135948],{"class":125,"line":316},[123,135943,134746],{"class":164},[123,135945,147],{"class":129},[123,135947,57167],{"class":164},[123,135949,3760],{"class":129},[123,135951,135952],{"class":125,"line":673},[123,135953,171],{"class":129},[19,135955,135956],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[2587,135958,135960],{"id":135959},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3929,135962],{"style":128796,"src":135963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135965,135966],{},"✨ 黄金口诀：",[19,135968,135969],{},"\"TOP正下负上，LEFT正右负左\"",[19,135971,135972],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135974,135975],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135977,135978],{},"✨ 简单记：",[19,135980,135981],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2526,135983,135984],{},"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":118,"searchDepth":140,"depth":140,"links":135986},[135987],{"id":134514,"depth":140,"text":134515,"children":135988},[135989,135990,135991,135992],{"id":134518,"depth":156,"text":134519},{"id":134533,"depth":156,"text":134534},{"id":134701,"depth":156,"text":134702},{"id":135959,"depth":156,"text":135960},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134506,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135999,"title":136000,"body":136001,"description":2544,"extension":2545,"meta":137424,"navigation":231,"path":137425,"seo":137426,"stem":137427,"__hash__":137428},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136002,"toc":137403},[136003,136006,136010,136018,136022,136027,136035,136047,136051,136056,136064,136075,136079,136084,136125,136133,136137,136140,136143,136146,136240,136243,136337,136340,136434,136437,136440,136475,136478,136481,136511,136514,136517,136520,136523,136526,136529,136532,136602,136605,136609,136613,136654,136658,136664,136667,136670,136674,136677,136680,136683,136764,136767,136770,136774,136778,136781,136784,136787,136790,136793,136799,136808,136812,136831,136835,136845,136848,136851,136854,136857,136860,136863,136866,136869,136878,136882,136891,136894,136899,136952,136957,137123,137126,137129,137134,137137,137140,137143,137146,137151,137299,137302,137305,137310,137313,137318,137352,137355,137358,137362,137365,137372,137375,137378,137381,137384,137387,137390,137393,137397,137400],[10,136004,136000],{"id":136005},"_12-显示隐藏与图形资源",[14,136007,136009],{"id":136008},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3606,136011,136012,136015],{},[29,136013,136014],{},"目的:让一个元素在页面中消失或者显示出来",[29,136016,136017],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[2587,136019,136021],{"id":136020},"_1211-display-显示","12.1.1 display 显示",[26,136023,136024],{},[29,136025,136026],{},"display 设置或检索对象是否及如何显示",[3606,136028,136029,136032],{},[29,136030,136031],{},"display: none;隐藏对象",[29,136033,136034],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,136036,136037,136044],{"start":140},[29,136038,136039,136040,136043],{},"特点： display 隐藏元素后， ",[2759,136041,136042],{},"不再占"," 有原来的位置",[29,136045,136046],{},"在js中使用非常的广泛",[2587,136048,136050],{"id":136049},"_1212-visibility可见性","12.1.2 visibility可见性",[26,136052,136053],{},[29,136054,136055],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3606,136057,136058,136061],{},[29,136059,136060],{},"visibility： visible；元素可见",[29,136062,136063],{},"visibility：hidden；元素隐藏",[26,136065,136066,136069,136072],{"start":140},[29,136067,136068],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,136070,136071],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,136073,136074],{},"隐藏后继续占有原有位置",[2587,136076,136078],{"id":136077},"_1213-overflow溢出","12.1.3 overflow溢出",[3606,136080,136081],{},[29,136082,136083],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[48,136085,136086,136094],{},[51,136087,136088],{},[54,136089,136090,136092],{},[57,136091,129404],{"align":26163},[57,136093,29910],{"align":26163},[64,136095,136096,136104,136111,136118],{},[54,136097,136098,136101],{},[69,136099,136100],{"align":26163},"visible",[69,136102,136103],{"align":26163},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[54,136105,136106,136108],{},[69,136107,64116],{"align":26163},[69,136109,136110],{"align":26163},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[54,136112,136113,136115],{},[69,136114,131360],{"align":26163},[69,136116,136117],{"align":26163},"不管超出内容否，总是显示滚动条",[54,136119,136120,136122],{},[69,136121,75063],{"align":26163},[69,136123,136124],{"align":26163},"超出自动显示滚动条，不超出不显示滚动条",[3606,136126,136127,136130],{},[29,136128,136129],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,136131,136132],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[2587,136134,136136],{"id":136135},"_1214-案例收获","12.1.4 案例收获",[3929,136138],{"style":128796,"src":136139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136141,136142],{},"问题：没做出来动态效果，使用hover没实现",[19,136144,136145],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[113,136147,136148],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,136149,136150,136154,136168,136172,136186,136190,136204,136208,136222,136226],{"__ignoreMap":118},[123,136151,136152],{"class":125,"line":126},[123,136153,134379],{"class":2673},[123,136155,136156,136158,136160,136162,136164,136166],{"class":125,"line":140},[123,136157,134384],{"class":337},[123,136159,82205],{"class":129},[123,136161,131300],{"class":164},[123,136163,147],{"class":129},[123,136165,134393],{"class":164},[123,136167,131870],{"class":129},[123,136169,136170],{"class":125,"line":156},[123,136171,134400],{"class":2673},[123,136173,136174,136176,136178,136180,136182,136184],{"class":125,"line":168},[123,136175,134405],{"class":337},[123,136177,82205],{"class":129},[123,136179,131300],{"class":164},[123,136181,147],{"class":129},[123,136183,57167],{"class":164},[123,136185,131870],{"class":129},[123,136187,136188],{"class":125,"line":268},[123,136189,134420],{"class":2673},[123,136191,136192,136194,136196,136198,136200,136202],{"class":125,"line":291},[123,136193,134425],{"class":337},[123,136195,82205],{"class":129},[123,136197,131300],{"class":164},[123,136199,147],{"class":129},[123,136201,57234],{"class":164},[123,136203,131870],{"class":129},[123,136205,136206],{"class":125,"line":300},[123,136207,134440],{"class":2673},[123,136209,136210,136212,136214,136216,136218,136220],{"class":125,"line":305},[123,136211,134445],{"class":337},[123,136213,82205],{"class":129},[123,136215,131300],{"class":164},[123,136217,147],{"class":129},[123,136219,88629],{"class":164},[123,136221,131870],{"class":129},[123,136223,136224],{"class":125,"line":316},[123,136225,134460],{"class":2673},[123,136227,136228,136230,136232,136234,136236,136238],{"class":125,"line":673},[123,136229,134465],{"class":337},[123,136231,82205],{"class":129},[123,136233,131300],{"class":164},[123,136235,147],{"class":129},[123,136237,134474],{"class":164},[123,136239,131870],{"class":129},[19,136241,136242],{},"完整代码：",[113,136244,136245],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,136246,136247,136251,136265,136269,136283,136287,136301,136305,136319,136323],{"__ignoreMap":118},[123,136248,136249],{"class":125,"line":126},[123,136250,134379],{"class":2673},[123,136252,136253,136255,136257,136259,136261,136263],{"class":125,"line":140},[123,136254,134384],{"class":337},[123,136256,82205],{"class":129},[123,136258,131300],{"class":164},[123,136260,147],{"class":129},[123,136262,134393],{"class":164},[123,136264,131870],{"class":129},[123,136266,136267],{"class":125,"line":156},[123,136268,134400],{"class":2673},[123,136270,136271,136273,136275,136277,136279,136281],{"class":125,"line":168},[123,136272,134405],{"class":337},[123,136274,82205],{"class":129},[123,136276,131300],{"class":164},[123,136278,147],{"class":129},[123,136280,57167],{"class":164},[123,136282,131870],{"class":129},[123,136284,136285],{"class":125,"line":268},[123,136286,134420],{"class":2673},[123,136288,136289,136291,136293,136295,136297,136299],{"class":125,"line":291},[123,136290,134425],{"class":337},[123,136292,82205],{"class":129},[123,136294,131300],{"class":164},[123,136296,147],{"class":129},[123,136298,57234],{"class":164},[123,136300,131870],{"class":129},[123,136302,136303],{"class":125,"line":300},[123,136304,134440],{"class":2673},[123,136306,136307,136309,136311,136313,136315,136317],{"class":125,"line":305},[123,136308,134445],{"class":337},[123,136310,82205],{"class":129},[123,136312,131300],{"class":164},[123,136314,147],{"class":129},[123,136316,88629],{"class":164},[123,136318,131870],{"class":129},[123,136320,136321],{"class":125,"line":316},[123,136322,134460],{"class":2673},[123,136324,136325,136327,136329,136331,136333,136335],{"class":125,"line":673},[123,136326,134465],{"class":337},[123,136328,82205],{"class":129},[123,136330,131300],{"class":164},[123,136332,147],{"class":129},[123,136334,134474],{"class":164},[123,136336,131870],{"class":129},[19,136338,136339],{},"分布思路重点详解：",[113,136341,136342],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,136343,136344,136348,136362,136366,136380,136384,136398,136402,136416,136420],{"__ignoreMap":118},[123,136345,136346],{"class":125,"line":126},[123,136347,134379],{"class":2673},[123,136349,136350,136352,136354,136356,136358,136360],{"class":125,"line":140},[123,136351,134384],{"class":337},[123,136353,82205],{"class":129},[123,136355,131300],{"class":164},[123,136357,147],{"class":129},[123,136359,134393],{"class":164},[123,136361,131870],{"class":129},[123,136363,136364],{"class":125,"line":156},[123,136365,134400],{"class":2673},[123,136367,136368,136370,136372,136374,136376,136378],{"class":125,"line":168},[123,136369,134405],{"class":337},[123,136371,82205],{"class":129},[123,136373,131300],{"class":164},[123,136375,147],{"class":129},[123,136377,57167],{"class":164},[123,136379,131870],{"class":129},[123,136381,136382],{"class":125,"line":268},[123,136383,134420],{"class":2673},[123,136385,136386,136388,136390,136392,136394,136396],{"class":125,"line":291},[123,136387,134425],{"class":337},[123,136389,82205],{"class":129},[123,136391,131300],{"class":164},[123,136393,147],{"class":129},[123,136395,57234],{"class":164},[123,136397,131870],{"class":129},[123,136399,136400],{"class":125,"line":300},[123,136401,134440],{"class":2673},[123,136403,136404,136406,136408,136410,136412,136414],{"class":125,"line":305},[123,136405,134445],{"class":337},[123,136407,82205],{"class":129},[123,136409,131300],{"class":164},[123,136411,147],{"class":129},[123,136413,88629],{"class":164},[123,136415,131870],{"class":129},[123,136417,136418],{"class":125,"line":316},[123,136419,134460],{"class":2673},[123,136421,136422,136424,136426,136428,136430,136432],{"class":125,"line":673},[123,136423,134465],{"class":337},[123,136425,82205],{"class":129},[123,136427,131300],{"class":164},[123,136429,147],{"class":129},[123,136431,134474],{"class":164},[123,136433,131870],{"class":129},[3929,136435],{"style":128796,"src":136436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136438,136439],{},"图片太大，盒子太小，此时需要修改图片的大小",[113,136441,136443],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[120,136444,136445],{"__ignoreMap":118},[123,136446,136447,136449,136451,136453,136455,136458,136460,136462,136465,136468,136470,136473],{"class":125,"line":126},[123,136448,3509],{"class":129},[123,136450,3929],{"class":53707},[123,136452,57642],{"class":337},[123,136454,134],{"class":129},[123,136456,136457],{"class":143},"\"images\u002Fpic.jpg\"",[123,136459,57650],{"class":337},[123,136461,134],{"class":129},[123,136463,136464],{"class":143},"\"描述文字\"",[123,136466,136467],{"class":337}," title",[123,136469,134],{"class":129},[123,136471,136472],{"class":143},"\"悬停提示\"",[123,136474,53714],{"class":129},[3929,136476],{"style":128796,"src":136477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136479,136480],{},"制造遮罩层",[113,136482,136483],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,136484,136485],{"__ignoreMap":118},[123,136486,136487,136489,136491,136493,136495,136497,136499,136501,136503,136505,136507,136509],{"class":125,"line":126},[123,136488,3509],{"class":129},[123,136490,3929],{"class":53707},[123,136492,57642],{"class":337},[123,136494,134],{"class":129},[123,136496,136457],{"class":143},[123,136498,57650],{"class":337},[123,136500,134],{"class":129},[123,136502,136464],{"class":143},[123,136504,136467],{"class":337},[123,136506,134],{"class":129},[123,136508,136472],{"class":143},[123,136510,53714],{"class":129},[19,136512,136513],{},"此时是这样的为标准流",[3929,136515],{"style":128796,"src":136516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136518,136519],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136521,136522],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136524,136525],{},"让他在中间，用center(background-position)",[19,136527,136528],{},"将需要变的尽可能放到一个盒子中",[19,136530,136531],{},"放大盒子上内部盒子发生变化",[113,136533,136535],{"className":128940,"code":136534,"language":128942,"meta":118,"style":118},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[120,136536,136537,136543,136553,136557,136564,136574,136586,136598],{"__ignoreMap":118},[123,136538,136539,136541],{"class":125,"line":126},[123,136540,130007],{"class":337},[123,136542,137],{"class":129},[123,136544,136545,136547,136549,136551],{"class":125,"line":140},[123,136546,134746],{"class":164},[123,136548,147],{"class":129},[123,136550,57167],{"class":164},[123,136552,3760],{"class":129},[123,136554,136555],{"class":125,"line":156},[123,136556,171],{"class":129},[123,136558,136559,136562],{"class":125,"line":168},[123,136560,136561],{"class":337},".child",[123,136563,137],{"class":129},[123,136565,136566,136568,136570,136572],{"class":125,"line":268},[123,136567,134746],{"class":164},[123,136569,147],{"class":129},[123,136571,57234],{"class":164},[123,136573,3760],{"class":129},[123,136575,136576,136578,136580,136582,136584],{"class":125,"line":291},[123,136577,134760],{"class":164},[123,136579,147],{"class":129},[123,136581,3258],{"class":164},[123,136583,2935],{"class":133},[123,136585,3760],{"class":129},[123,136587,136588,136590,136592,136594,136596],{"class":125,"line":300},[123,136589,134777],{"class":164},[123,136591,147],{"class":129},[123,136593,3258],{"class":164},[123,136595,2935],{"class":133},[123,136597,3760],{"class":129},[123,136599,136600],{"class":125,"line":305},[123,136601,171],{"class":129},[19,136603,136604],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136606,136608],{"id":136607},"_122-精灵图","12.2 精灵图",[2587,136610,136612],{"id":136611},"_1221-理解","12.2.1 理解",[26,136614,136615,136633],{},[29,136616,136617,136618,134846,136621,136624,136625,136628,136629,136632],{},"目的： ",[2759,136619,136620],{},"为了有效地减少服务器接收和发送请求的次数",[2759,136622,136623],{},"提高"," 页面的 ",[2759,136626,136627],{},"加载速度"," ，出现了 ",[2759,136630,136631],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,136634,136635,136636,136638,136639,136641,136642,136644,136645,136647,136648,136650,136651,136653],{},"使用精灵图核心：",[56119,136637],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56119,136640],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56119,136643],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56119,136646],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56119,136649],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56119,136652],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[2587,136655,136657],{"id":136656},"_1222-扒图","12.2.2 扒图",[113,136659,136662],{"className":136660,"code":136661,"language":7621},[7619],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[120,136663,136661],{"__ignoreMap":118},[3929,136665],{"style":128796,"src":136666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3929,136668],{"style":128796,"src":136669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[2587,136671,136673],{"id":136672},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3929,136675],{"style":128796,"src":136676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136678,136679],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3929,136681],{"style":128796,"src":136682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[113,136684,136686],{"className":128940,"code":136685,"language":128942,"meta":118,"style":118},"\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",[120,136687,136688,136693,136700,136712,136724,136743,136760],{"__ignoreMap":118},[123,136689,136690],{"class":125,"line":126},[123,136691,136692],{"class":2673},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[123,136694,136695,136698],{"class":125,"line":140},[123,136696,136697],{"class":337},".icon",[123,136699,137],{"class":129},[123,136701,136702,136704,136706,136708,136710],{"class":125,"line":156},[123,136703,72968],{"class":164},[123,136705,147],{"class":129},[123,136707,3302],{"class":164},[123,136709,53897],{"class":133},[123,136711,3760],{"class":129},[123,136713,136714,136716,136718,136720,136722],{"class":125,"line":168},[123,136715,73188],{"class":164},[123,136717,147],{"class":129},[123,136719,3302],{"class":164},[123,136721,53897],{"class":133},[123,136723,3760],{"class":129},[123,136725,136726,136728,136730,136732,136734,136737,136739,136741],{"class":125,"line":268},[123,136727,73011],{"class":164},[123,136729,147],{"class":129},[123,136731,64128],{"class":164},[123,136733,1315],{"class":129},[123,136735,136736],{"class":279},"sprites.png",[123,136738,1336],{"class":129},[123,136740,64138],{"class":164},[123,136742,3760],{"class":129},[123,136744,136745,136747,136749,136751,136753,136756,136758],{"class":125,"line":291},[123,136746,131200],{"class":164},[123,136748,147],{"class":129},[123,136750,54168],{"class":164},[123,136752,53897],{"class":133},[123,136754,136755],{"class":164}," -20",[123,136757,53897],{"class":133},[123,136759,3760],{"class":129},[123,136761,136762],{"class":125,"line":300},[123,136763,171],{"class":129},[3929,136765],{"style":128796,"src":136766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136768,136769],{},"在前端中坐标轴的正方向是右和下",[14,136771,136773],{"id":136772},"_123-字体图标","12.3 字体图标",[2587,136775,136777],{"id":136776},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136779,136780],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136782,136783],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136785,136786],{},"1.图片文件还是比较大的。",[19,136788,136789],{},"2.图片本身放大和缩小会失真。",[19,136791,136792],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136794,136795,136796,28162],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2759,136797,136798],{},"字体图标 iconfont",[19,136800,136801,136804,136805,2494],{},[2759,136802,136803],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2759,136806,136807],{},"展示的是图标，本质属于字体",[2587,136809,136811],{"id":136810},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3606,136813,136814,136819,136822,136825,136828],{},[29,136815,136816,136818],{},[2759,136817,28298],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,136820,136821],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,136823,136824],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,136826,136827],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,136829,136830],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[2587,136832,136834],{"id":136833},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3606,136836,136837],{},[29,136838,136839,136840],{},"icomoon字体库：",[2846,136841,136844],{"href":136842,"rel":136843},"http:\u002F\u002Ficomoon.io\u002F",[26287],"http:\u002F\u002Ficomoon.io",[19,136846,136847],{},"进去之后点icomoon app",[3929,136849],{"style":128796,"src":136850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136852,136853],{},"可以对其编辑：",[3929,136855],{"style":128796,"src":136856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136858,136859],{},"生成字体：",[3929,136861],{"style":128796,"src":136862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136864,136865],{},"下载：",[3929,136867],{"style":128796,"src":136868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3606,136870,136871],{},[29,136872,136873,136874],{},"阿里iconfont字体库： ",[2846,136875,136876],{"href":136876,"rel":136877},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26287],[2587,136879,136881],{"id":136880},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,136883,136884],{},[29,136885,136886,136887,136890],{},"把下载包里面的 ",[2759,136888,136889],{},"fonts"," 文件夹放入页面根目录下",[3929,136892],{"style":128796,"src":136893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,136895,136896],{"start":140},[29,136897,136898],{},"字体文件格式",[48,136900,136901,136910],{},[51,136902,136903],{},[54,136904,136905,136908],{},[57,136906,136907],{"align":26163},"格式",[57,136909,62],{"align":26163},[64,136911,136912,136922,136932,136942],{},[54,136913,136914,136919],{},[69,136915,136916],{"align":26163},[2759,136917,136918],{},".ttf",[69,136920,136921],{"align":26163},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[54,136923,136924,136929],{},[69,136925,136926],{"align":26163},[2759,136927,136928],{},".woff",[69,136930,136931],{"align":26163},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[54,136933,136934,136939],{},[69,136935,136936],{"align":26163},[2759,136937,136938],{},".eot",[69,136940,136941],{"align":26163},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[54,136943,136944,136949],{},[69,136945,136946],{"align":26163},[2759,136947,136948],{},"svg",[69,136950,136951],{"align":26163},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,136953,136954],{"start":156},[29,136955,136956],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[113,136958,136960],{"className":128940,"code":136959,"language":128942,"meta":118,"style":118},"\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",[120,136961,136962,136967,136974,136986,137002,137027,137048,137068,137088,137092,137098,137108,137119],{"__ignoreMap":118},[123,136963,136964],{"class":125,"line":126},[123,136965,136966],{"class":2673},"\u002F* 引入字体图标 *\u002F\n",[123,136968,136969,136972],{"class":125,"line":140},[123,136970,136971],{"class":133},"@font-face",[123,136973,137],{"class":129},[123,136975,136976,136979,136981,136984],{"class":125,"line":156},[123,136977,136978],{"class":164},"  font-family",[123,136980,147],{"class":129},[123,136982,136983],{"class":143},"'icomoon'",[123,136985,3760],{"class":129},[123,136987,136988,136991,136993,136995,136997,137000],{"class":125,"line":168},[123,136989,136990],{"class":164},"  src",[123,136992,147],{"class":129},[123,136994,64128],{"class":164},[123,136996,1315],{"class":129},[123,136998,136999],{"class":143},"'fonts\u002Ficomoon.eot'",[123,137001,5161],{"class":129},[123,137003,137004,137006,137008,137010,137012,137015,137017,137020,137022,137025],{"class":125,"line":268},[123,137005,136990],{"class":164},[123,137007,147],{"class":129},[123,137009,64128],{"class":164},[123,137011,1315],{"class":129},[123,137013,137014],{"class":143},"'fonts\u002Ficomoon.eot?#iefix'",[123,137016,1336],{"class":129},[123,137018,137019],{"class":164},"format",[123,137021,1315],{"class":129},[123,137023,137024],{"class":143},"'embedded-opentype'",[123,137026,650],{"class":129},[123,137028,137029,137032,137034,137037,137039,137041,137043,137046],{"class":125,"line":291},[123,137030,137031],{"class":164},"       url",[123,137033,1315],{"class":129},[123,137035,137036],{"class":143},"'fonts\u002Ficomoon.woff'",[123,137038,1336],{"class":129},[123,137040,137019],{"class":164},[123,137042,1315],{"class":129},[123,137044,137045],{"class":143},"'woff'",[123,137047,650],{"class":129},[123,137049,137050,137052,137054,137057,137059,137061,137063,137066],{"class":125,"line":300},[123,137051,137031],{"class":164},[123,137053,1315],{"class":129},[123,137055,137056],{"class":143},"'fonts\u002Ficomoon.ttf'",[123,137058,1336],{"class":129},[123,137060,137019],{"class":164},[123,137062,1315],{"class":129},[123,137064,137065],{"class":143},"'truetype'",[123,137067,650],{"class":129},[123,137069,137070,137072,137074,137077,137079,137081,137083,137086],{"class":125,"line":305},[123,137071,137031],{"class":164},[123,137073,1315],{"class":129},[123,137075,137076],{"class":143},"'fonts\u002Ficomoon.svg#icomoon'",[123,137078,1336],{"class":129},[123,137080,137019],{"class":164},[123,137082,1315],{"class":129},[123,137084,137085],{"class":143},"'svg'",[123,137087,5161],{"class":129},[123,137089,137090],{"class":125,"line":316},[123,137091,171],{"class":129},[123,137093,137094,137096],{"class":125,"line":673},[123,137095,136697],{"class":337},[123,137097,137],{"class":129},[123,137099,137100,137102,137104,137106],{"class":125,"line":692},[123,137101,136978],{"class":164},[123,137103,147],{"class":129},[123,137105,136983],{"class":143},[123,137107,3760],{"class":129},[123,137109,137110,137113,137115,137117],{"class":125,"line":713},[123,137111,137112],{"class":164},"  font-style",[123,137114,147],{"class":129},[123,137116,66242],{"class":164},[123,137118,3760],{"class":129},[123,137120,137121],{"class":125,"line":718},[123,137122,171],{"class":129},[19,137124,137125],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3929,137127],{"style":128796,"src":137128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,137130,137131],{"start":168},[29,137132,137133],{},"添加字体",[3929,137135],{"style":128796,"src":137136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137138,137139],{},"复制：",[3929,137141],{"style":128796,"src":137142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137144,137145],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,137147,137148],{"start":268},[29,137149,137150],{},"代码展示：",[113,137152,137153],{"className":128940,"code":136959,"language":128942,"meta":118,"style":118},[120,137154,137155,137159,137165,137175,137189,137211,137229,137247,137265,137269,137275,137285,137295],{"__ignoreMap":118},[123,137156,137157],{"class":125,"line":126},[123,137158,136966],{"class":2673},[123,137160,137161,137163],{"class":125,"line":140},[123,137162,136971],{"class":133},[123,137164,137],{"class":129},[123,137166,137167,137169,137171,137173],{"class":125,"line":156},[123,137168,136978],{"class":164},[123,137170,147],{"class":129},[123,137172,136983],{"class":143},[123,137174,3760],{"class":129},[123,137176,137177,137179,137181,137183,137185,137187],{"class":125,"line":168},[123,137178,136990],{"class":164},[123,137180,147],{"class":129},[123,137182,64128],{"class":164},[123,137184,1315],{"class":129},[123,137186,136999],{"class":143},[123,137188,5161],{"class":129},[123,137190,137191,137193,137195,137197,137199,137201,137203,137205,137207,137209],{"class":125,"line":268},[123,137192,136990],{"class":164},[123,137194,147],{"class":129},[123,137196,64128],{"class":164},[123,137198,1315],{"class":129},[123,137200,137014],{"class":143},[123,137202,1336],{"class":129},[123,137204,137019],{"class":164},[123,137206,1315],{"class":129},[123,137208,137024],{"class":143},[123,137210,650],{"class":129},[123,137212,137213,137215,137217,137219,137221,137223,137225,137227],{"class":125,"line":291},[123,137214,137031],{"class":164},[123,137216,1315],{"class":129},[123,137218,137036],{"class":143},[123,137220,1336],{"class":129},[123,137222,137019],{"class":164},[123,137224,1315],{"class":129},[123,137226,137045],{"class":143},[123,137228,650],{"class":129},[123,137230,137231,137233,137235,137237,137239,137241,137243,137245],{"class":125,"line":300},[123,137232,137031],{"class":164},[123,137234,1315],{"class":129},[123,137236,137056],{"class":143},[123,137238,1336],{"class":129},[123,137240,137019],{"class":164},[123,137242,1315],{"class":129},[123,137244,137065],{"class":143},[123,137246,650],{"class":129},[123,137248,137249,137251,137253,137255,137257,137259,137261,137263],{"class":125,"line":305},[123,137250,137031],{"class":164},[123,137252,1315],{"class":129},[123,137254,137076],{"class":143},[123,137256,1336],{"class":129},[123,137258,137019],{"class":164},[123,137260,1315],{"class":129},[123,137262,137085],{"class":143},[123,137264,5161],{"class":129},[123,137266,137267],{"class":125,"line":316},[123,137268,171],{"class":129},[123,137270,137271,137273],{"class":125,"line":673},[123,137272,136697],{"class":337},[123,137274,137],{"class":129},[123,137276,137277,137279,137281,137283],{"class":125,"line":692},[123,137278,136978],{"class":164},[123,137280,147],{"class":129},[123,137282,136983],{"class":143},[123,137284,3760],{"class":129},[123,137286,137287,137289,137291,137293],{"class":125,"line":713},[123,137288,137112],{"class":164},[123,137290,147],{"class":129},[123,137292,66242],{"class":164},[123,137294,3760],{"class":129},[123,137296,137297],{"class":125,"line":718},[123,137298,171],{"class":129},[3929,137300],{"style":128796,"src":137301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137303,137304],{},"更加细节展示：",[26,137306,137307],{},[29,137308,137309],{},"html 标签内添加小图标",[3929,137311],{"style":128796,"src":137312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,137314,137315],{"start":140},[29,137316,137317],{},"给标签定义字体",[113,137319,137320],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,137321,137322,137326,137340,137344],{"__ignoreMap":118},[123,137323,137324],{"class":125,"line":126},[123,137325,133051],{"class":2673},[123,137327,137328,137330,137332,137334,137336,137338],{"class":125,"line":140},[123,137329,3509],{"class":129},[123,137331,54016],{"class":53707},[123,137333,55889],{"class":337},[123,137335,134],{"class":129},[123,137337,133064],{"class":143},[123,137339,53714],{"class":129},[123,137341,137342],{"class":125,"line":156},[123,137343,133071],{"class":129},[123,137345,137346,137348,137350],{"class":125,"line":168},[123,137347,54190],{"class":129},[123,137349,54016],{"class":53707},[123,137351,53714],{"class":129},[19,137353,137354],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3929,137356],{"style":128796,"src":137357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[2587,137359,137361],{"id":137360},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137363,137364],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137366,137367,137368,137371],{},"把压缩包里面的 ",[2759,137369,137370],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137373,137374],{},"打开网站，点下方：",[3929,137376],{"style":128796,"src":137377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3929,137379],{"style":128796,"src":137380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3929,137382],{"style":128796,"src":137383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137385,137386],{},"点yes重新加载",[19,137388,137389],{},"然后重复之前的操作就可以实现了",[19,137391,137392],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[2587,137394,137396],{"id":137395},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3929,137398],{"style":128796,"src":137399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2526,137401,137402],{},"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":118,"searchDepth":140,"depth":140,"links":137404},[137405,137411,137416],{"id":136008,"depth":140,"text":136009,"children":137406},[137407,137408,137409,137410],{"id":136020,"depth":156,"text":136021},{"id":136049,"depth":156,"text":136050},{"id":136077,"depth":156,"text":136078},{"id":136135,"depth":156,"text":136136},{"id":136607,"depth":140,"text":136608,"children":137412},[137413,137414,137415],{"id":136611,"depth":156,"text":136612},{"id":136656,"depth":156,"text":136657},{"id":136672,"depth":156,"text":136673},{"id":136772,"depth":140,"text":136773,"children":137417},[137418,137419,137420,137421,137422,137423],{"id":136776,"depth":156,"text":136777},{"id":136810,"depth":156,"text":136811},{"id":136833,"depth":156,"text":136834},{"id":136880,"depth":156,"text":136881},{"id":137360,"depth":156,"text":137361},{"id":137395,"depth":156,"text":137396},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136000,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137430,"title":137431,"body":137432,"description":2544,"extension":2545,"meta":138659,"navigation":231,"path":138660,"seo":138661,"stem":138662,"__hash__":138663},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137433,"toc":138640},[137434,137437,137441,137444,137458,137526,137556,137559,137563,137567,137669,137716,137720,137723,137726,137760,137763,137766,137769,137772,137775,137778,137781,137783,137786,137789,137792,137795,137798,137801,137804,137832,137835,137839,137842,137849,137852,137855,137881,137884,137888,137891,137894,137901,137905,137908,137910,137942,137945,137948,137960,137966,137969,137972,137975,137977,137981,137984,137987,137990,138035,138039,138041,138044,138051,138093,138096,138100,138105,138119,138123,138126,138129,138132,138135,138138,138172,138175,138178,138232,138235,138238,138241,138244,138296,138299,138302,138351,138355,138357,138360,138363,138366,138369,138372,138430,138433,138439,138442,138445,138477,138480,138484,138488,138491,138523,138527,138530,138574,138578,138581,138584,138587,138590,138593,138596,138599,138601,138604,138606,138609,138612,138615,138618,138623,138626,138628,138631,138634,138637],[10,137435,137431],{"id":137436},"_13-界面样式与布局技巧",[14,137438,137440],{"id":137439},"_131-css三角","13.1 css三角",[19,137442,137443],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3606,137445,137446,137449,137452,137455],{},[29,137447,137448],{},"用css 边框可以模拟三角效果",[29,137450,137451],{},"宽度高度为0",[29,137453,137454],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,137456,137457],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[113,137459,137461],{"className":128940,"code":137460,"language":128942,"meta":118,"style":118},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[120,137462,137463,137468,137475,137485,137495,137511,137522],{"__ignoreMap":118},[123,137464,137465],{"class":125,"line":126},[123,137466,137467],{"class":2673},"\u002F* CSS 实现三角形 *\u002F\n",[123,137469,137470,137473],{"class":125,"line":140},[123,137471,137472],{"class":337},".triangle",[123,137474,137],{"class":129},[123,137476,137477,137479,137481,137483],{"class":125,"line":156},[123,137478,72968],{"class":164},[123,137480,147],{"class":129},[123,137482,2799],{"class":164},[123,137484,3760],{"class":129},[123,137486,137487,137489,137491,137493],{"class":125,"line":168},[123,137488,73188],{"class":164},[123,137490,147],{"class":129},[123,137492,2799],{"class":164},[123,137494,3760],{"class":129},[123,137496,137497,137499,137501,137503,137505,137507,137509],{"class":125,"line":268},[123,137498,73296],{"class":164},[123,137500,147],{"class":129},[123,137502,2193],{"class":164},[123,137504,53897],{"class":133},[123,137506,53926],{"class":164},[123,137508,66392],{"class":164},[123,137510,3760],{"class":129},[123,137512,137513,137516,137518,137520],{"class":125,"line":291},[123,137514,137515],{"class":164},"  border-bottom-color",[123,137517,147],{"class":129},[123,137519,64771],{"class":164},[123,137521,3760],{"class":129},[123,137523,137524],{"class":125,"line":300},[123,137525,171],{"class":129},[113,137527,137528],{"className":128940,"code":133097,"language":128942,"meta":118,"style":118},[120,137529,137530,137536,137552],{"__ignoreMap":118},[123,137531,137532,137534],{"class":125,"line":126},[123,137533,54016],{"class":53707},[123,137535,137],{"class":129},[123,137537,137538,137540,137542,137544,137546,137548,137550],{"class":125,"line":140},[123,137539,73296],{"class":164},[123,137541,147],{"class":129},[123,137543,2825],{"class":164},[123,137545,53897],{"class":133},[123,137547,53926],{"class":164},[123,137549,132332],{"class":164},[123,137551,3760],{"class":129},[123,137553,137554],{"class":125,"line":156},[123,137555,171],{"class":129},[3929,137557],{"style":128796,"src":137558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137560,137562],{"id":137561},"_132-css用户界面样式","13.2 css用户界面样式",[2587,137564,137566],{"id":137565},"_1321-鼠标样式","13.2.1 鼠标样式",[113,137568,137570],{"className":128940,"code":137569,"language":128942,"meta":118,"style":118},"\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",[120,137571,137572,137577,137596,137614,137633,137650],{"__ignoreMap":118},[123,137573,137574],{"class":125,"line":126},[123,137575,137576],{"class":2673},"\u002F* 鼠标样式 *\u002F\n",[123,137578,137579,137581,137583,137586,137588,137590,137593],{"class":125,"line":140},[123,137580,54016],{"class":53707},[123,137582,82205],{"class":129},[123,137584,137585],{"class":164},"cursor",[123,137587,147],{"class":129},[123,137589,64432],{"class":164},[123,137591,137592],{"class":129},"; }   ",[123,137594,137595],{"class":2673},"\u002F* 手型 *\u002F\n",[123,137597,137598,137600,137602,137604,137606,137609,137611],{"class":125,"line":156},[123,137599,54016],{"class":53707},[123,137601,82205],{"class":129},[123,137603,137585],{"class":164},[123,137605,147],{"class":129},[123,137607,137608],{"class":164},"default",[123,137610,137592],{"class":129},[123,137612,137613],{"class":2673},"\u002F* 默认 *\u002F\n",[123,137615,137616,137618,137620,137622,137624,137627,137630],{"class":125,"line":168},[123,137617,54016],{"class":53707},[123,137619,82205],{"class":129},[123,137621,137585],{"class":164},[123,137623,147],{"class":129},[123,137625,137626],{"class":164},"move",[123,137628,137629],{"class":129},"; }      ",[123,137631,137632],{"class":2673},"\u002F* 移动 *\u002F\n",[123,137634,137635,137637,137639,137641,137643,137645,137647],{"class":125,"line":268},[123,137636,54016],{"class":53707},[123,137638,82205],{"class":129},[123,137640,137585],{"class":164},[123,137642,147],{"class":129},[123,137644,7621],{"class":164},[123,137646,137629],{"class":129},[123,137648,137649],{"class":2673},"\u002F* 文本 *\u002F\n",[123,137651,137652,137654,137656,137658,137660,137663,137666],{"class":125,"line":291},[123,137653,54016],{"class":53707},[123,137655,82205],{"class":129},[123,137657,137585],{"class":164},[123,137659,147],{"class":129},[123,137661,137662],{"class":164},"not-allowed",[123,137664,137665],{"class":129},"; } ",[123,137667,137668],{"class":2673},"\u002F* 禁止 *\u002F\n",[48,137670,137671,137679],{},[51,137672,137673],{},[54,137674,137675,137677],{},[57,137676,129404],{"align":26163},[57,137678,29910],{"align":26163},[64,137680,137681,137688,137695,137702,137709],{},[54,137682,137683,137685],{},[69,137684,137608],{"align":26163},[69,137686,137687],{"align":26163},"小白 默认",[54,137689,137690,137692],{},[69,137691,64432],{"align":26163},[69,137693,137694],{"align":26163},"小手",[54,137696,137697,137699],{},[69,137698,137626],{"align":26163},[69,137700,137701],{"align":26163},"移动",[54,137703,137704,137706],{},[69,137705,7621],{"align":26163},[69,137707,137708],{"align":26163},"文本",[54,137710,137711,137713],{},[69,137712,137662],{"align":26163},[69,137714,137715],{"align":26163},"禁止",[2587,137717,137719],{"id":137718},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137721,137722],{},"去除表单轮廓线",[19,137724,137725],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[113,137727,137728],{"className":128940,"code":132304,"language":128942,"meta":118,"style":118},[120,137729,137730,137734,137740,137756],{"__ignoreMap":118},[123,137731,137732],{"class":125,"line":126},[123,137733,132311],{"class":2673},[123,137735,137736,137738],{"class":125,"line":140},[123,137737,54016],{"class":53707},[123,137739,137],{"class":129},[123,137741,137742,137744,137746,137748,137750,137752,137754],{"class":125,"line":156},[123,137743,73296],{"class":164},[123,137745,147],{"class":129},[123,137747,2825],{"class":164},[123,137749,53897],{"class":133},[123,137751,53926],{"class":164},[123,137753,132332],{"class":164},[123,137755,3760],{"class":129},[123,137757,137758],{"class":125,"line":168},[123,137759,171],{"class":129},[19,137761,137762],{},"文本域：",[3929,137764],{"style":128796,"src":137765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137767,137768],{},"此时会有一个空白区域",[3929,137770],{"style":128796,"src":137771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137773,137774],{},"写在同一行就不会出现这个问题",[3929,137776],{"style":128796,"src":137777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137779,137780],{},"文本域是行内块元素，一定记住！！！",[19,137782,100626],{},[3929,137784],{"style":128796,"src":137785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137787,137788],{},"文本域尽量放在一行",[19,137790,137791],{},"知识回顾：cols是列，rols是行",[3929,137793],{"style":128796,"src":137794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137796,137797],{},"它可以进行拖动，显然这是我们不愿意看到的",[3929,137799],{"style":128796,"src":137800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137802,137803],{},"使用resize进行解决",[113,137805,137807],{"className":128940,"code":137806,"language":128942,"meta":118,"style":118},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[120,137808,137809,137815,137828],{"__ignoreMap":118},[123,137810,137811,137813],{"class":125,"line":126},[123,137812,56224],{"class":53707},[123,137814,137],{"class":129},[123,137816,137817,137819,137821,137823,137825],{"class":125,"line":140},[123,137818,73198],{"class":164},[123,137820,147],{"class":129},[123,137822,57140],{"class":164},[123,137824,132803],{"class":129},[123,137826,137827],{"class":2673},"\u002F* 取消表单轮廓线 *\u002F\n",[123,137829,137830],{"class":125,"line":156},[123,137831,171],{"class":129},[19,137833,137834],{},"此时就无法通过右下方实现拖动了",[2587,137836,137838],{"id":137837},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137840,137841],{},"实现一个盒子中的文字和图片对齐",[19,137843,137844,137845,137848],{},"用于设置一个元素的 ",[2759,137846,137847],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137850,137851],{},"图片和文字默认是基线对齐",[3929,137853],{"style":128796,"src":137854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[113,137856,137857],{"className":128940,"code":137806,"language":128942,"meta":118,"style":118},[120,137858,137859,137865,137877],{"__ignoreMap":118},[123,137860,137861,137863],{"class":125,"line":126},[123,137862,56224],{"class":53707},[123,137864,137],{"class":129},[123,137866,137867,137869,137871,137873,137875],{"class":125,"line":140},[123,137868,73198],{"class":164},[123,137870,147],{"class":129},[123,137872,57140],{"class":164},[123,137874,132803],{"class":129},[123,137876,137827],{"class":2673},[123,137878,137879],{"class":125,"line":156},[123,137880,171],{"class":129},[3929,137882],{"style":128796,"src":137883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24425,137885,137887],{"id":137886},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137889,137890],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3929,137892],{"style":128796,"src":137893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137895,137896,137897,137900],{},"此时可以给图片、表单这些行内块元素的 ",[2759,137898,137899],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24425,137902,137904],{"id":137903},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137906,137907],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137909,17063],{},[113,137911,137913],{"className":128940,"code":137912,"language":128942,"meta":118,"style":118},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[120,137914,137915,137920,137926,137938],{"__ignoreMap":118},[123,137916,137917],{"class":125,"line":126},[123,137918,137919],{"class":2673},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[123,137921,137922,137924],{"class":125,"line":140},[123,137923,3929],{"class":53707},[123,137925,137],{"class":129},[123,137927,137928,137931,137933,137936],{"class":125,"line":156},[123,137929,137930],{"class":164},"  vertical-align",[123,137932,147],{"class":129},[123,137934,137935],{"class":164},"middle",[123,137937,3760],{"class":129},[123,137939,137940],{"class":125,"line":168},[123,137941,171],{"class":129},[3929,137943],{"style":128796,"src":137944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137946,137947],{},"主要解决方法有两种：",[26,137949,137950],{},[29,137951,137952,137955,137956,137959],{},[2759,137953,137954],{},"给图片"," 添加 ",[2759,137957,137958],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137961,137962,137963],{},"2.把图片转换为块级元素 ",[2759,137964,137965],{},"display: block",[19,137967,137968],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137970,137971],{},"img {",[19,137973,137974],{},"vertical-align:middle;",[19,137976,3545],{},[2587,137978,137980],{"id":137979},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137982,137983],{},"效果：",[3929,137985],{"style":128796,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137988,137989],{},"单行文本溢出显示省略号--必须满足三个条件：",[113,137991,137993],{"className":128940,"code":137992,"language":128942,"meta":118,"style":118},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[120,137994,137995,138000,138006,138016,138021,138031],{"__ignoreMap":118},[123,137996,137997],{"class":125,"line":126},[123,137998,137999],{"class":2673},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[123,138001,138002,138004],{"class":125,"line":140},[123,138003,3929],{"class":53707},[123,138005,137],{"class":129},[123,138007,138008,138010,138012,138014],{"class":125,"line":156},[123,138009,137930],{"class":164},[123,138011,147],{"class":129},[123,138013,137935],{"class":164},[123,138015,3760],{"class":129},[123,138017,138018],{"class":125,"line":168},[123,138019,138020],{"class":2673},"  \u002F* 或 *\u002F\n",[123,138022,138023,138025,138027,138029],{"class":125,"line":268},[123,138024,130556],{"class":164},[123,138026,147],{"class":129},[123,138028,63271],{"class":164},[123,138030,3760],{"class":129},[123,138032,138033],{"class":125,"line":291},[123,138034,171],{"class":129},[2587,138036,138038],{"id":138037},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,138040,137983],{},[3929,138042],{"style":128796,"src":138043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,138045,138046,138047,138050],{},"多行文本溢出显示省略号， ",[2759,138048,138049],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[113,138052,138053],{"className":128940,"code":137992,"language":128942,"meta":118,"style":118},[120,138054,138055,138059,138065,138075,138079,138089],{"__ignoreMap":118},[123,138056,138057],{"class":125,"line":126},[123,138058,137999],{"class":2673},[123,138060,138061,138063],{"class":125,"line":140},[123,138062,3929],{"class":53707},[123,138064,137],{"class":129},[123,138066,138067,138069,138071,138073],{"class":125,"line":156},[123,138068,137930],{"class":164},[123,138070,147],{"class":129},[123,138072,137935],{"class":164},[123,138074,3760],{"class":129},[123,138076,138077],{"class":125,"line":168},[123,138078,138020],{"class":2673},[123,138080,138081,138083,138085,138087],{"class":125,"line":268},[123,138082,130556],{"class":164},[123,138084,147],{"class":129},[123,138086,63271],{"class":164},[123,138088,3760],{"class":129},[123,138090,138091],{"class":125,"line":291},[123,138092,171],{"class":129},[19,138094,138095],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138097,138099],{"id":138098},"_133-常见布局技巧","13.3 常见布局技巧",[19,138101,138102],{},[2759,138103,138104],{},"巧妙利用一个技术更快更好的布局：",[26,138106,138107,138110,138113,138116],{},[29,138108,138109],{},"margin负值的运用",[29,138111,138112],{},"文字围绕浮动元素",[29,138114,138115],{},"行内块的巧妙运用",[29,138117,138118],{},"CSS三角强化",[2587,138120,138122],{"id":138121},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138124,138125],{},"应用场景：",[3929,138127],{"style":128796,"src":138128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3929,138130],{"style":128796,"src":138131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138133,138134],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138136,138137],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[113,138139,138140],{"className":128940,"code":132304,"language":128942,"meta":118,"style":118},[120,138141,138142,138146,138152,138168],{"__ignoreMap":118},[123,138143,138144],{"class":125,"line":126},[123,138145,132311],{"class":2673},[123,138147,138148,138150],{"class":125,"line":140},[123,138149,54016],{"class":53707},[123,138151,137],{"class":129},[123,138153,138154,138156,138158,138160,138162,138164,138166],{"class":125,"line":156},[123,138155,73296],{"class":164},[123,138157,147],{"class":129},[123,138159,2825],{"class":164},[123,138161,53897],{"class":133},[123,138163,53926],{"class":164},[123,138165,132332],{"class":164},[123,138167,3760],{"class":129},[123,138169,138170],{"class":125,"line":168},[123,138171,171],{"class":129},[3929,138173],{"style":128796,"src":138174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138176,138177],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[113,138179,138181],{"className":128940,"code":138180,"language":128942,"meta":118,"style":118},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[120,138182,138183,138188,138194,138204,138216,138228],{"__ignoreMap":118},[123,138184,138185],{"class":125,"line":126},[123,138186,138187],{"class":2673},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[123,138189,138190,138192],{"class":125,"line":140},[123,138191,132788],{"class":337},[123,138193,137],{"class":129},[123,138195,138196,138198,138200,138202],{"class":125,"line":156},[123,138197,134746],{"class":164},[123,138199,147],{"class":129},[123,138201,57167],{"class":164},[123,138203,3760],{"class":129},[123,138205,138206,138208,138210,138212,138214],{"class":125,"line":168},[123,138207,134760],{"class":164},[123,138209,147],{"class":129},[123,138211,2193],{"class":164},[123,138213,53897],{"class":133},[123,138215,3760],{"class":129},[123,138217,138218,138220,138222,138224,138226],{"class":125,"line":268},[123,138219,134777],{"class":164},[123,138221,147],{"class":129},[123,138223,3302],{"class":164},[123,138225,53897],{"class":133},[123,138227,3760],{"class":129},[123,138229,138230],{"class":125,"line":291},[123,138231,171],{"class":129},[19,138233,138234],{},"加上上述代码会发现：",[3929,138236],{"style":128796,"src":138237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138239,138240],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138242,138243],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[113,138245,138246],{"className":128940,"code":138180,"language":128942,"meta":118,"style":118},[120,138247,138248,138252,138258,138268,138280,138292],{"__ignoreMap":118},[123,138249,138250],{"class":125,"line":126},[123,138251,138187],{"class":2673},[123,138253,138254,138256],{"class":125,"line":140},[123,138255,132788],{"class":337},[123,138257,137],{"class":129},[123,138259,138260,138262,138264,138266],{"class":125,"line":156},[123,138261,134746],{"class":164},[123,138263,147],{"class":129},[123,138265,57167],{"class":164},[123,138267,3760],{"class":129},[123,138269,138270,138272,138274,138276,138278],{"class":125,"line":168},[123,138271,134760],{"class":164},[123,138273,147],{"class":129},[123,138275,2193],{"class":164},[123,138277,53897],{"class":133},[123,138279,3760],{"class":129},[123,138281,138282,138284,138286,138288,138290],{"class":125,"line":268},[123,138283,134777],{"class":164},[123,138285,147],{"class":129},[123,138287,3302],{"class":164},[123,138289,53897],{"class":133},[123,138291,3760],{"class":129},[123,138293,138294],{"class":125,"line":291},[123,138295,171],{"class":129},[19,138297,138298],{},"解决方式2：",[19,138300,138301],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[113,138303,138305],{"className":128940,"code":138304,"language":128942,"meta":118,"style":118},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[120,138306,138307,138313,138323,138335,138347],{"__ignoreMap":118},[123,138308,138309,138311],{"class":125,"line":126},[123,138310,54016],{"class":53707},[123,138312,137],{"class":129},[123,138314,138315,138317,138319,138321],{"class":125,"line":140},[123,138316,134746],{"class":164},[123,138318,147],{"class":129},[123,138320,57167],{"class":164},[123,138322,3760],{"class":129},[123,138324,138325,138327,138329,138331,138333],{"class":125,"line":156},[123,138326,134760],{"class":164},[123,138328,147],{"class":129},[123,138330,2193],{"class":164},[123,138332,53897],{"class":133},[123,138334,3760],{"class":129},[123,138336,138337,138339,138341,138343,138345],{"class":125,"line":168},[123,138338,134777],{"class":164},[123,138340,147],{"class":129},[123,138342,3302],{"class":164},[123,138344,53897],{"class":133},[123,138346,3760],{"class":129},[123,138348,138349],{"class":125,"line":268},[123,138350,171],{"class":129},[2587,138352,138354],{"id":138353},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138356,138125],{},[3929,138358],{"style":128796,"src":138359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138361,138362],{},"实现结构图：",[3929,138364],{"style":128796,"src":138365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138367,138368],{},"巧妙运用浮动元素不会压住文字的特性",[19,138370,138371],{},"代码显示：",[113,138373,138375],{"className":128940,"code":138374,"language":128942,"meta":118,"style":118},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[120,138376,138377,138383,138393,138397,138402,138406,138412,138426],{"__ignoreMap":118},[123,138378,138379,138381],{"class":125,"line":126},[123,138380,132788],{"class":337},[123,138382,137],{"class":129},[123,138384,138385,138387,138389,138391],{"class":125,"line":140},[123,138386,133420],{"class":164},[123,138388,147],{"class":129},[123,138390,26163],{"class":164},[123,138392,3760],{"class":129},[123,138394,138395],{"class":125,"line":156},[123,138396,171],{"class":129},[123,138398,138399],{"class":125,"line":168},[123,138400,138401],{"class":129},"```Css\n",[123,138403,138404],{"class":125,"line":268},[123,138405,132783],{"class":2673},[123,138407,138408,138410],{"class":125,"line":291},[123,138409,132788],{"class":337},[123,138411,137],{"class":129},[123,138413,138414,138416,138418,138420,138422,138424],{"class":125,"line":300},[123,138415,72870],{"class":164},[123,138417,147],{"class":129},[123,138419,2799],{"class":164},[123,138421,53961],{"class":164},[123,138423,132803],{"class":129},[123,138425,132806],{"class":2673},[123,138427,138428],{"class":125,"line":305},[123,138429,171],{"class":129},[19,138431,138432],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[113,138434,138437],{"className":138435,"code":138436,"language":7621},[7619],"\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",[120,138438,138436],{"__ignoreMap":118},[3929,138440],{"style":128796,"src":138441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138443,138444],{},"最终展示结果：",[113,138446,138447],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},[120,138448,138449,138453,138459,138473],{"__ignoreMap":118},[123,138450,138451],{"class":125,"line":126},[123,138452,132783],{"class":2673},[123,138454,138455,138457],{"class":125,"line":140},[123,138456,132788],{"class":337},[123,138458,137],{"class":129},[123,138460,138461,138463,138465,138467,138469,138471],{"class":125,"line":156},[123,138462,72870],{"class":164},[123,138464,147],{"class":129},[123,138466,2799],{"class":164},[123,138468,53961],{"class":164},[123,138470,132803],{"class":129},[123,138472,132806],{"class":2673},[123,138474,138475],{"class":125,"line":168},[123,138476,171],{"class":129},[3929,138478],{"style":128796,"src":138479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138481,138483],{"id":138482},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[2587,138485,138487],{"id":138486},"_1341-原理","13.4.1 原理",[3929,138489],{"style":128796,"src":138490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[113,138492,138493],{"className":128940,"code":132776,"language":128942,"meta":118,"style":118},[120,138494,138495,138499,138505,138519],{"__ignoreMap":118},[123,138496,138497],{"class":125,"line":126},[123,138498,132783],{"class":2673},[123,138500,138501,138503],{"class":125,"line":140},[123,138502,132788],{"class":337},[123,138504,137],{"class":129},[123,138506,138507,138509,138511,138513,138515,138517],{"class":125,"line":156},[123,138508,72870],{"class":164},[123,138510,147],{"class":129},[123,138512,2799],{"class":164},[123,138514,53961],{"class":164},[123,138516,132803],{"class":129},[123,138518,132806],{"class":2673},[123,138520,138521],{"class":125,"line":168},[123,138522,171],{"class":129},[2587,138524,138526],{"id":138525},"_1342-实例","13.4.2 实例",[3929,138528],{"style":128796,"src":138529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[113,138531,138532],{"className":128940,"code":133406,"language":128942,"meta":118,"style":118},[120,138533,138534,138540,138550,138554,138560,138570],{"__ignoreMap":118},[123,138535,138536,138538],{"class":125,"line":126},[123,138537,133413],{"class":337},[123,138539,137],{"class":129},[123,138541,138542,138544,138546,138548],{"class":125,"line":140},[123,138543,133420],{"class":164},[123,138545,147],{"class":129},[123,138547,26163],{"class":164},[123,138549,3760],{"class":129},[123,138551,138552],{"class":125,"line":156},[123,138553,171],{"class":129},[123,138555,138556,138558],{"class":125,"line":168},[123,138557,133435],{"class":337},[123,138559,137],{"class":129},[123,138561,138562,138564,138566,138568],{"class":125,"line":268},[123,138563,133420],{"class":164},[123,138565,147],{"class":129},[123,138567,74922],{"class":164},[123,138569,3760],{"class":129},[123,138571,138572],{"class":125,"line":291},[123,138573,171],{"class":129},[14,138575,138577],{"id":138576},"_135-css的初始化","13.5 css的初始化",[19,138579,138580],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138582,138583],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138585,138586],{},"每个网页都必须首先进行 CSS初始化。",[19,138588,138589],{},"这里我们以 京东CSS初始化代码为例。",[19,138591,138592],{},"在网页右键查看网页源代码",[19,138594,138595],{},"找到css的link引入语句",[19,138597,138598],{},"然后ctrl+f 输入body",[19,138600,79626],{},[3929,138602],{"style":128796,"src":138603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138605,79649],{},[3929,138607],{"style":128796,"src":138608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138610,138611],{},"③打开了网页上传压缩的代码",[3929,138613],{"style":128796,"src":138614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138616,138617],{},"④从body前可以查看这个网页的初始化代码",[19,138619,138620],{},[2759,138621,138622],{},"Unicode编码字体：",[19,138624,138625],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138627,85604],{},[19,138629,138630],{},"黑体 \\9ED1\\4F53",[19,138632,138633],{},"宋体 \\5B8B\\4F53",[19,138635,138636],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2526,138638,138639],{},"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":118,"searchDepth":140,"depth":140,"links":138641},[138642,138643,138650,138654,138658],{"id":137439,"depth":140,"text":137440},{"id":137561,"depth":140,"text":137562,"children":138644},[138645,138646,138647,138648,138649],{"id":137565,"depth":156,"text":137566},{"id":137718,"depth":156,"text":137719},{"id":137837,"depth":156,"text":137838},{"id":137979,"depth":156,"text":137980},{"id":138037,"depth":156,"text":138038},{"id":138098,"depth":140,"text":138099,"children":138651},[138652,138653],{"id":138121,"depth":156,"text":138122},{"id":138353,"depth":156,"text":138354},{"id":138482,"depth":140,"text":138483,"children":138655},[138656,138657],{"id":138486,"depth":156,"text":138487},{"id":138525,"depth":156,"text":138526},{"id":138576,"depth":140,"text":138577},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137431,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138665,"title":138666,"body":138667,"description":2544,"extension":2545,"meta":140353,"navigation":231,"path":140354,"seo":140355,"stem":140356,"__hash__":140357},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138668,"toc":140342},[138669,138672,138676,138680,138683,138690,138693,138696,138734,138737,138739,138753,138757,138766,138770,138775,138778,138781,138784,138819,138824,138827,138857,138860,138865,138868,138871,138901,138904,138958,138961,138965,138970,138982,138985,138989,139019,139022,139027,139030,139060,139063,139067,139084,139088,139092,139095,139128,139131,139135,139138,139141,139144,139147,139150,139261,139264,139267,139270,139372,139375,139379,139383,139387,139390,139430,139433,139435,139451,139455,139458,139463,139544,139547,139550,139676,139681,139684,139692,139695,139700,139785,139788,139792,139795,139798,139802,139822,139827,139911,139914,139919,139922,139925,140003,140006,140009,140012,140015,140018,140023,140026,140029,140101,140104,140109,140112,140209,140212,140218,140221,140224,140227,140230,140233,140236,140239,140242,140246,140251,140254,140287,140292,140295,140336,140339],[10,138670,138666],{"id":138671},"_14-html5与css3新特性",[14,138673,138675],{"id":138674},"_141-html5的新特性","14.1 HTML5的新特性",[2587,138677,138679],{"id":138678},"_1411-基本标签","14.1.1 基本标签",[19,138681,138682],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138684,138685,138686,138689],{},"这些新特性都有兼容性问题，基本是 ",[2759,138687,138688],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138691,138692],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138694,138695],{},"现在使用的是新特性：",[3606,138697,138698,138704,138710,138716,138722,138728],{},[29,138699,138700,138703],{},[120,138701,138702],{},"\u003Cheader>"," 头部标签",[29,138705,138706,138709],{},[120,138707,138708],{},"\u003Cnav>"," 导航标签",[29,138711,138712,138715],{},[120,138713,138714],{},"\u003Carticle>"," 内容标签",[29,138717,138718,138721],{},[120,138719,138720],{},"\u003Csection>"," 定义文档某个区域",[29,138723,138724,138727],{},[120,138725,138726],{},"\u003Caside>"," 侧边栏标签",[29,138729,138730,138733],{},[120,138731,138732],{},"\u003Cfooter>"," 尾部标签",[3929,138735],{"style":128796,"src":138736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138738,2646],{},[3606,138740,138741,138744,138747,138750],{},[29,138742,138743],{},"这种语义化标准主要是针对搜索引擎的",[29,138745,138746],{},"这些标签页面中可以经常使用",[29,138748,138749],{},"在IE9中，需要把这些元素转换为块级元素",[29,138751,138752],{},"移动端更喜欢使用这些标签",[2587,138754,138756],{"id":138755},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138758,138759,138760,138762,138763,138765],{},"音频 ",[2759,138761,30595],{}," 和视频 ",[2759,138764,30604],{}," 两个标签",[24425,138767,138769],{"id":138768},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,138771,138772],{},[29,138773,138774],{},"支持格式：",[3929,138776],{"style":128796,"src":138777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138779,138780],{},"尽量使用MP4，兼容性好",[19,138782,138783],{},"用MP4就可以",[113,138785,138787],{"className":129687,"code":138786,"language":129689,"meta":118,"style":118},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[120,138788,138789],{"__ignoreMap":118},[123,138790,138791,138793,138795,138797,138799,138802,138804,138807,138810,138813,138815,138817],{"class":125,"line":126},[123,138792,3509],{"class":129},[123,138794,30604],{"class":53707},[123,138796,57642],{"class":337},[123,138798,134],{"class":129},[123,138800,138801],{"class":143},"\"movie.mp4\"",[123,138803,94817],{"class":337},[123,138805,138806],{"class":337}," autoplay",[123,138808,138809],{"class":337}," muted",[123,138811,138812],{"class":337}," loop",[123,138814,57717],{"class":129},[123,138816,30604],{"class":53707},[123,138818,53714],{"class":129},[26,138820,138821],{"start":140},[29,138822,138823],{},"兼容写法",[19,138825,138826],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[113,138828,138829],{"className":129687,"code":138786,"language":129689,"meta":118,"style":118},[120,138830,138831],{"__ignoreMap":118},[123,138832,138833,138835,138837,138839,138841,138843,138845,138847,138849,138851,138853,138855],{"class":125,"line":126},[123,138834,3509],{"class":129},[123,138836,30604],{"class":53707},[123,138838,57642],{"class":337},[123,138840,134],{"class":129},[123,138842,138801],{"class":143},[123,138844,94817],{"class":337},[123,138846,138806],{"class":337},[123,138848,138809],{"class":337},[123,138850,138812],{"class":337},[123,138852,57717],{"class":129},[123,138854,30604],{"class":53707},[123,138856,53714],{"class":129},[19,138858,138859],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138861,138862],{"start":156},[29,138863,138864],{},"video常用属性",[3929,138866],{"style":128796,"src":138867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138869,138870],{},"poster属性后面是跟的等待加载图片的地址",[113,138872,138873],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,138874,138875],{"__ignoreMap":118},[123,138876,138877,138879,138881,138883,138885,138887,138889,138891,138893,138895,138897,138899],{"class":125,"line":126},[123,138878,3509],{"class":129},[123,138880,3929],{"class":53707},[123,138882,57642],{"class":337},[123,138884,134],{"class":129},[123,138886,136457],{"class":143},[123,138888,57650],{"class":337},[123,138890,134],{"class":129},[123,138892,136464],{"class":143},[123,138894,136467],{"class":337},[123,138896,134],{"class":129},[123,138898,136472],{"class":143},[123,138900,53714],{"class":129},[19,138902,138903],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[113,138905,138907],{"className":128940,"code":138906,"language":128942,"meta":118,"style":118},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[120,138908,138909,138914,138920,138944,138949,138954],{"__ignoreMap":118},[123,138910,138911],{"class":125,"line":126},[123,138912,138913],{"class":2673},"\u002F* 2D 位移 *\u002F\n",[123,138915,138916,138918],{"class":125,"line":140},[123,138917,54016],{"class":53707},[123,138919,137],{"class":129},[123,138921,138922,138925,138927,138930,138932,138934,138936,138938,138940,138942],{"class":125,"line":156},[123,138923,138924],{"class":164},"  transform",[123,138926,147],{"class":129},[123,138928,138929],{"class":164},"translate",[123,138931,1315],{"class":129},[123,138933,259],{"class":164},[123,138935,53897],{"class":133},[123,138937,251],{"class":129},[123,138939,3258],{"class":164},[123,138941,53897],{"class":133},[123,138943,5161],{"class":129},[123,138945,138946],{"class":125,"line":168},[123,138947,138948],{"class":2673},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[123,138950,138951],{"class":125,"line":268},[123,138952,138953],{"class":2673},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[123,138955,138956],{"class":125,"line":291},[123,138957,171],{"class":129},[19,138959,138960],{},"muted:自动静音属性",[24425,138962,138964],{"id":138963},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,138966,138967],{},[29,138968,138969],{},"基本使用",[19,138971,138972,138973,138978,138979],{},"当前 ",[2759,138974,138975],{},[120,138976,138977],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2759,138980,138981],{},"mp3格式",[3929,138983],{"style":128796,"src":138984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,138986,138987],{"start":140},[29,138988,138823],{},[113,138990,138991],{"className":129687,"code":138786,"language":129689,"meta":118,"style":118},[120,138992,138993],{"__ignoreMap":118},[123,138994,138995,138997,138999,139001,139003,139005,139007,139009,139011,139013,139015,139017],{"class":125,"line":126},[123,138996,3509],{"class":129},[123,138998,30604],{"class":53707},[123,139000,57642],{"class":337},[123,139002,134],{"class":129},[123,139004,138801],{"class":143},[123,139006,94817],{"class":337},[123,139008,138806],{"class":337},[123,139010,138809],{"class":337},[123,139012,138812],{"class":337},[123,139014,57717],{"class":129},[123,139016,30604],{"class":53707},[123,139018,53714],{"class":129},[19,139020,139021],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,139023,139024],{"start":156},[29,139025,139026],{},"常用属性",[3929,139028],{"style":128796,"src":139029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[113,139031,139032],{"className":129687,"code":138786,"language":129689,"meta":118,"style":118},[120,139033,139034],{"__ignoreMap":118},[123,139035,139036,139038,139040,139042,139044,139046,139048,139050,139052,139054,139056,139058],{"class":125,"line":126},[123,139037,3509],{"class":129},[123,139039,30604],{"class":53707},[123,139041,57642],{"class":337},[123,139043,134],{"class":129},[123,139045,138801],{"class":143},[123,139047,94817],{"class":337},[123,139049,138806],{"class":337},[123,139051,138809],{"class":337},[123,139053,138812],{"class":337},[123,139055,57717],{"class":129},[123,139057,30604],{"class":53707},[123,139059,53714],{"class":129},[19,139061,139062],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24425,139064,139066],{"id":139065},"_14123-总结","14.1.2.3 总结",[3606,139068,139069,139072,139075,139078,139081],{},[29,139070,139071],{},"音频标签和视频标签使用方式基本一致",[29,139073,139074],{},"浏览器支持情况不同",[29,139076,139077],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,139079,139080],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,139082,139083],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[2587,139085,139087],{"id":139086},"_1413-表单元素","14.1.3 表单元素",[24425,139089,139091],{"id":139090},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3929,139093],{"style":128796,"src":139094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[113,139096,139098],{"className":129687,"code":139097,"language":129689,"meta":118,"style":118},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[120,139099,139100],{"__ignoreMap":118},[123,139101,139102,139104,139106,139108,139110,139112,139114,139116,139119,139121,139123,139126],{"class":125,"line":126},[123,139103,3509],{"class":129},[123,139105,56224],{"class":53707},[123,139107,56227],{"class":337},[123,139109,134],{"class":129},[123,139111,65100],{"class":143},[123,139113,17350],{"class":337},[123,139115,134],{"class":129},[123,139117,139118],{"class":143},"\"username\"",[123,139120,63422],{"class":337},[123,139122,134],{"class":129},[123,139124,139125],{"class":143},"\"请输入用户名\"",[123,139127,53714],{"class":129},[3929,139129],{"style":128796,"src":139130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24425,139132,139134],{"id":139133},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3929,139136],{"style":128796,"src":139137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139139,139140],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139142,139143],{},"快捷操作：",[3929,139145],{"style":128796,"src":139146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139148,139149],{},"例子1：",[113,139151,139153],{"className":129687,"code":139152,"language":129689,"meta":118,"style":118},"\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",[120,139154,139155,139178,139205,139234,139253],{"__ignoreMap":118},[123,139156,139157,139159,139161,139163,139165,139168,139171,139173,139176],{"class":125,"line":126},[123,139158,3509],{"class":129},[123,139160,69026],{"class":53707},[123,139162,69029],{"class":337},[123,139164,134],{"class":129},[123,139166,139167],{"class":143},"\"\u002Fsubmit\"",[123,139169,139170],{"class":337}," method",[123,139172,134],{"class":129},[123,139174,139175],{"class":143},"\"post\"",[123,139177,53714],{"class":129},[123,139179,139180,139182,139184,139186,139188,139190,139192,139194,139196,139198,139200,139203],{"class":125,"line":140},[123,139181,54548],{"class":129},[123,139183,56224],{"class":53707},[123,139185,56227],{"class":337},[123,139187,134],{"class":129},[123,139189,65100],{"class":143},[123,139191,17350],{"class":337},[123,139193,134],{"class":129},[123,139195,139118],{"class":143},[123,139197,63422],{"class":337},[123,139199,134],{"class":129},[123,139201,139202],{"class":143},"\"用户名\"",[123,139204,53714],{"class":129},[123,139206,139207,139209,139211,139213,139215,139218,139220,139222,139225,139227,139229,139232],{"class":125,"line":156},[123,139208,54548],{"class":129},[123,139210,56224],{"class":53707},[123,139212,56227],{"class":337},[123,139214,134],{"class":129},[123,139216,139217],{"class":143},"\"password\"",[123,139219,17350],{"class":337},[123,139221,134],{"class":129},[123,139223,139224],{"class":143},"\"pwd\"",[123,139226,63422],{"class":337},[123,139228,134],{"class":129},[123,139230,139231],{"class":143},"\"密码\"",[123,139233,53714],{"class":129},[123,139235,139236,139238,139240,139242,139244,139246,139249,139251],{"class":125,"line":168},[123,139237,54548],{"class":129},[123,139239,56290],{"class":53707},[123,139241,56227],{"class":337},[123,139243,134],{"class":129},[123,139245,69049],{"class":143},[123,139247,139248],{"class":129},">提交\u003C\u002F",[123,139250,56290],{"class":53707},[123,139252,53714],{"class":129},[123,139254,139255,139257,139259],{"class":125,"line":268},[123,139256,54190],{"class":129},[123,139258,69026],{"class":53707},[123,139260,53714],{"class":129},[3929,139262],{"style":128796,"src":139263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139265,139266],{},"value是表单域的内容",[19,139268,139269],{},"例子2：",[113,139271,139272],{"className":129687,"code":139152,"language":129689,"meta":118,"style":118},[120,139273,139274,139294,139320,139346,139364],{"__ignoreMap":118},[123,139275,139276,139278,139280,139282,139284,139286,139288,139290,139292],{"class":125,"line":126},[123,139277,3509],{"class":129},[123,139279,69026],{"class":53707},[123,139281,69029],{"class":337},[123,139283,134],{"class":129},[123,139285,139167],{"class":143},[123,139287,139170],{"class":337},[123,139289,134],{"class":129},[123,139291,139175],{"class":143},[123,139293,53714],{"class":129},[123,139295,139296,139298,139300,139302,139304,139306,139308,139310,139312,139314,139316,139318],{"class":125,"line":140},[123,139297,54548],{"class":129},[123,139299,56224],{"class":53707},[123,139301,56227],{"class":337},[123,139303,134],{"class":129},[123,139305,65100],{"class":143},[123,139307,17350],{"class":337},[123,139309,134],{"class":129},[123,139311,139118],{"class":143},[123,139313,63422],{"class":337},[123,139315,134],{"class":129},[123,139317,139202],{"class":143},[123,139319,53714],{"class":129},[123,139321,139322,139324,139326,139328,139330,139332,139334,139336,139338,139340,139342,139344],{"class":125,"line":156},[123,139323,54548],{"class":129},[123,139325,56224],{"class":53707},[123,139327,56227],{"class":337},[123,139329,134],{"class":129},[123,139331,139217],{"class":143},[123,139333,17350],{"class":337},[123,139335,134],{"class":129},[123,139337,139224],{"class":143},[123,139339,63422],{"class":337},[123,139341,134],{"class":129},[123,139343,139231],{"class":143},[123,139345,53714],{"class":129},[123,139347,139348,139350,139352,139354,139356,139358,139360,139362],{"class":125,"line":168},[123,139349,54548],{"class":129},[123,139351,56290],{"class":53707},[123,139353,56227],{"class":337},[123,139355,134],{"class":129},[123,139357,69049],{"class":143},[123,139359,139248],{"class":129},[123,139361,56290],{"class":53707},[123,139363,53714],{"class":129},[123,139365,139366,139368,139370],{"class":125,"line":268},[123,139367,54190],{"class":129},[123,139369,69026],{"class":53707},[123,139371,53714],{"class":129},[3929,139373],{"style":128796,"src":139374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139376,139378],{"id":139377},"_142-css新特性","14.2 CSS新特性",[2587,139380,139382],{"id":139381},"_1421-新增选择器","14.2.1 新增选择器",[24425,139384,139386],{"id":139385},"_14211-属性选择器","14.2.1.1 属性选择器",[3929,139388],{"style":128796,"src":139389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[113,139391,139393],{"className":128940,"code":139392,"language":128942,"meta":118,"style":118},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[120,139394,139395,139410,139426],{"__ignoreMap":118},[123,139396,139397,139399,139401,139403,139405,139407],{"class":125,"line":126},[123,139398,56224],{"class":53707},[123,139400,839],{"class":129},[123,139402,105497],{"class":337},[123,139404,134],{"class":133},[123,139406,65100],{"class":143},[123,139408,139409],{"class":129},"] {\n",[123,139411,139412,139414,139416,139418,139420,139422,139424],{"class":125,"line":140},[123,139413,73296],{"class":164},[123,139415,147],{"class":129},[123,139417,2825],{"class":164},[123,139419,53897],{"class":133},[123,139421,53926],{"class":164},[123,139423,132520],{"class":164},[123,139425,3760],{"class":129},[123,139427,139428],{"class":125,"line":156},[123,139429,171],{"class":129},[3929,139431],{"style":128796,"src":139432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139434,2646],{},[3606,139436,139437,139440,139443,139446],{},[29,139438,139439],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,139441,139442],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,139444,139445],{},"属性选择器也可以选择出来自定义的属性",[29,139447,139448,139450],{},[2759,139449,11457],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24425,139452,139454],{"id":139453},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3929,139456],{"style":128796,"src":139457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,139459,139460],{},[29,139461,139462],{},"fist-child",[113,139464,139466],{"className":128940,"code":139465,"language":128942,"meta":118,"style":118},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[120,139467,139468,139473,139488,139508,139526],{"__ignoreMap":118},[123,139469,139470],{"class":125,"line":126},[123,139471,139472],{"class":2673},"\u002F* 属性选择器 *\u002F\n",[123,139474,139475,139477,139479,139481,139483,139485],{"class":125,"line":140},[123,139476,56224],{"class":53707},[123,139478,839],{"class":129},[123,139480,105497],{"class":337},[123,139482,134],{"class":133},[123,139484,65100],{"class":143},[123,139486,139487],{"class":129},"] { }\n",[123,139489,139490,139492,139494,139496,139499,139502,139505],{"class":125,"line":156},[123,139491,56224],{"class":53707},[123,139493,839],{"class":129},[123,139495,17124],{"class":337},[123,139497,139498],{"class":133},"^=",[123,139500,139501],{"class":143},"\"icon\"",[123,139503,139504],{"class":129},"] { }  ",[123,139506,139507],{"class":2673},"\u002F* 以 icon 开头 *\u002F\n",[123,139509,139510,139512,139514,139516,139519,139521,139523],{"class":125,"line":168},[123,139511,56224],{"class":53707},[123,139513,839],{"class":129},[123,139515,17124],{"class":337},[123,139517,139518],{"class":133},"$=",[123,139520,139501],{"class":143},[123,139522,139504],{"class":129},[123,139524,139525],{"class":2673},"\u002F* 以 icon 结尾 *\u002F\n",[123,139527,139528,139530,139532,139534,139537,139539,139541],{"class":125,"line":268},[123,139529,56224],{"class":53707},[123,139531,839],{"class":129},[123,139533,17124],{"class":337},[123,139535,139536],{"class":133},"*=",[123,139538,139501],{"class":143},[123,139540,139504],{"class":129},[123,139542,139543],{"class":2673},"\u002F* 包含 icon *\u002F\n",[19,139545,139546],{},"ul的第一个儿子文本为红色",[19,139548,139549],{},"一定要在冒号前加空格，不然就是选中所有的了",[113,139551,139553],{"className":128940,"code":139552,"language":128942,"meta":118,"style":118},".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",[120,139554,139555,139561,139571,139575,139579,139584,139597,139610,139626,139643,139660],{"__ignoreMap":118},[123,139556,139557,139559],{"class":125,"line":126},[123,139558,129231],{"class":337},[123,139560,137],{"class":129},[123,139562,139563,139565,139567,139569],{"class":125,"line":140},[123,139564,73305],{"class":164},[123,139566,147],{"class":129},[123,139568,59823],{"class":164},[123,139570,3760],{"class":129},[123,139572,139573],{"class":125,"line":156},[123,139574,171],{"class":129},[123,139576,139577],{"class":125,"line":168},[123,139578,138401],{"class":129},[123,139580,139581],{"class":125,"line":268},[123,139582,139583],{"class":2673},"\u002F* 结构伪类选择器 *\u002F\n",[123,139585,139586,139588,139591,139594],{"class":125,"line":291},[123,139587,29],{"class":53707},[123,139589,139590],{"class":337},":first-child",[123,139592,139593],{"class":129}," { }           ",[123,139595,139596],{"class":2673},"\u002F* 第一个 *\u002F\n",[123,139598,139599,139601,139604,139607],{"class":125,"line":300},[123,139600,29],{"class":53707},[123,139602,139603],{"class":337},":last-child",[123,139605,139606],{"class":129}," { }            ",[123,139608,139609],{"class":2673},"\u002F* 最后一个 *\u002F\n",[123,139611,139612,139614,139616,139618,139620,139623],{"class":125,"line":305},[123,139613,29],{"class":53707},[123,139615,131854],{"class":337},[123,139617,1315],{"class":129},[123,139619,2692],{"class":164},[123,139621,139622],{"class":129},") { }          ",[123,139624,139625],{"class":2673},"\u002F* 第2个 *\u002F\n",[123,139627,139628,139630,139632,139634,139637,139640],{"class":125,"line":316},[123,139629,29],{"class":53707},[123,139631,131854],{"class":337},[123,139633,1315],{"class":129},[123,139635,139636],{"class":164},"2n",[123,139638,139639],{"class":129},") { }         ",[123,139641,139642],{"class":2673},"\u002F* 偶数 *\u002F\n",[123,139644,139645,139647,139649,139651,139654,139657],{"class":125,"line":673},[123,139646,29],{"class":53707},[123,139648,131854],{"class":337},[123,139650,1315],{"class":129},[123,139652,139653],{"class":164},"2n+1",[123,139655,139656],{"class":129},") { }       ",[123,139658,139659],{"class":2673},"\u002F* 奇数 *\u002F\n",[123,139661,139662,139664,139666,139668,139671,139673],{"class":125,"line":692},[123,139663,29],{"class":53707},[123,139665,131854],{"class":337},[123,139667,1315],{"class":129},[123,139669,139670],{"class":164},"-n+3",[123,139672,139656],{"class":129},[123,139674,139675],{"class":2673},"\u002F* 前3个 *\u002F\n",[54016,139677,139680],{"className":139678},[139679],"example","\n  示例内容\n",[19,139682,139683],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3606,139685,139686],{},[29,139687,139688,139691],{},[120,139689,139690],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139693,139694],{},"也就是说它选择的是熊大",[26,139696,139697],{"start":291},[29,139698,139699],{},"权重",[113,139701,139703],{"className":128940,"code":139702,"language":128942,"meta":118,"style":118},"\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",[120,139704,139705,139709,139719,139729,139743,139757,139771],{"__ignoreMap":118},[123,139706,139707],{"class":125,"line":126},[123,139708,139583],{"class":2673},[123,139710,139711,139713,139715,139717],{"class":125,"line":140},[123,139712,29],{"class":53707},[123,139714,139590],{"class":337},[123,139716,139593],{"class":129},[123,139718,139596],{"class":2673},[123,139720,139721,139723,139725,139727],{"class":125,"line":156},[123,139722,29],{"class":53707},[123,139724,139603],{"class":337},[123,139726,139606],{"class":129},[123,139728,139609],{"class":2673},[123,139730,139731,139733,139735,139737,139739,139741],{"class":125,"line":168},[123,139732,29],{"class":53707},[123,139734,131854],{"class":337},[123,139736,1315],{"class":129},[123,139738,2692],{"class":164},[123,139740,139622],{"class":129},[123,139742,139625],{"class":2673},[123,139744,139745,139747,139749,139751,139753,139755],{"class":125,"line":268},[123,139746,29],{"class":53707},[123,139748,131854],{"class":337},[123,139750,1315],{"class":129},[123,139752,139636],{"class":164},[123,139754,139639],{"class":129},[123,139756,139642],{"class":2673},[123,139758,139759,139761,139763,139765,139767,139769],{"class":125,"line":291},[123,139760,29],{"class":53707},[123,139762,131854],{"class":337},[123,139764,1315],{"class":129},[123,139766,139653],{"class":164},[123,139768,139656],{"class":129},[123,139770,139659],{"class":2673},[123,139772,139773,139775,139777,139779,139781,139783],{"class":125,"line":300},[123,139774,29],{"class":53707},[123,139776,131854],{"class":337},[123,139778,1315],{"class":129},[123,139780,139670],{"class":164},[123,139782,139656],{"class":129},[123,139784,139675],{"class":2673},[19,139786,139787],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24425,139789,139791],{"id":139790},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139793,139794],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3929,139796],{"style":128796,"src":139797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,139799,139800],{},[29,139801,2646],{},[3606,139803,139804,139807,139810,139813,139816,139819],{},[29,139805,139806],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,139808,139809],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,139811,139812],{},"语法： element::before {}",[29,139814,139815],{},"before 和 after 必须有 content 属性",[29,139817,139818],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,139820,139821],{},"伪元素选择器和标签选择器一样，权重为 1",[26,139823,139824],{"start":140},[29,139825,139826],{},"实例",[113,139828,139829],{"className":128940,"code":139702,"language":128942,"meta":118,"style":118},[120,139830,139831,139835,139845,139855,139869,139883,139897],{"__ignoreMap":118},[123,139832,139833],{"class":125,"line":126},[123,139834,139583],{"class":2673},[123,139836,139837,139839,139841,139843],{"class":125,"line":140},[123,139838,29],{"class":53707},[123,139840,139590],{"class":337},[123,139842,139593],{"class":129},[123,139844,139596],{"class":2673},[123,139846,139847,139849,139851,139853],{"class":125,"line":156},[123,139848,29],{"class":53707},[123,139850,139603],{"class":337},[123,139852,139606],{"class":129},[123,139854,139609],{"class":2673},[123,139856,139857,139859,139861,139863,139865,139867],{"class":125,"line":168},[123,139858,29],{"class":53707},[123,139860,131854],{"class":337},[123,139862,1315],{"class":129},[123,139864,2692],{"class":164},[123,139866,139622],{"class":129},[123,139868,139625],{"class":2673},[123,139870,139871,139873,139875,139877,139879,139881],{"class":125,"line":268},[123,139872,29],{"class":53707},[123,139874,131854],{"class":337},[123,139876,1315],{"class":129},[123,139878,139636],{"class":164},[123,139880,139639],{"class":129},[123,139882,139642],{"class":2673},[123,139884,139885,139887,139889,139891,139893,139895],{"class":125,"line":291},[123,139886,29],{"class":53707},[123,139888,131854],{"class":337},[123,139890,1315],{"class":129},[123,139892,139653],{"class":164},[123,139894,139656],{"class":129},[123,139896,139659],{"class":2673},[123,139898,139899,139901,139903,139905,139907,139909],{"class":125,"line":300},[123,139900,29],{"class":53707},[123,139902,131854],{"class":337},[123,139904,1315],{"class":129},[123,139906,139670],{"class":164},[123,139908,139656],{"class":129},[123,139910,139675],{"class":2673},[3929,139912],{"style":128796,"src":139913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,139915,139916],{"start":156},[29,139917,139918],{},"使用场景1",[3929,139920],{"style":128796,"src":139921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139923,139924],{},"不需要再加盒子来整红色那部分了",[113,139926,139928],{"className":128940,"code":139927,"language":128942,"meta":118,"style":118},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[120,139929,139930,139935,139944,139955,139965,139969,139978,139989,139999],{"__ignoreMap":118},[123,139931,139932],{"class":125,"line":126},[123,139933,139934],{"class":2673},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[123,139936,139937,139939,139942],{"class":125,"line":140},[123,139938,54016],{"class":53707},[123,139940,139941],{"class":337},"::before",[123,139943,137],{"class":129},[123,139945,139946,139949,139951,139953],{"class":125,"line":156},[123,139947,139948],{"class":164},"  content",[123,139950,147],{"class":129},[123,139952,1629],{"class":143},[123,139954,3760],{"class":129},[123,139956,139957,139959,139961,139963],{"class":125,"line":168},[123,139958,130556],{"class":164},[123,139960,147],{"class":129},[123,139962,63271],{"class":164},[123,139964,3760],{"class":129},[123,139966,139967],{"class":125,"line":268},[123,139968,171],{"class":129},[123,139970,139971,139973,139976],{"class":125,"line":291},[123,139972,54016],{"class":53707},[123,139974,139975],{"class":337},"::after",[123,139977,137],{"class":129},[123,139979,139980,139982,139984,139987],{"class":125,"line":300},[123,139981,139948],{"class":164},[123,139983,147],{"class":129},[123,139985,139986],{"class":143},"\"→\"",[123,139988,3760],{"class":129},[123,139990,139991,139993,139995,139997],{"class":125,"line":305},[123,139992,73305],{"class":164},[123,139994,147],{"class":129},[123,139996,64472],{"class":164},[123,139998,3760],{"class":129},[123,140000,140001],{"class":125,"line":316},[123,140002,171],{"class":129},[3929,140004],{"style":128796,"src":140005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140007,140008],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3929,140010],{"style":128796,"src":140011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140013,140014],{},"但是在引用时需要先转义一下",[19,140016,140017],{},"content='\\e930'",[26,140019,140020],{"start":168},[29,140021,140022],{},"使用场景2",[19,140024,140025],{},"仿土豆效果",[19,140027,140028],{},"通过使用伪元素选择器可以减少body中盒子的数量",[113,140030,140031],{"className":128940,"code":139927,"language":128942,"meta":118,"style":118},[120,140032,140033,140037,140045,140055,140065,140069,140077,140087,140097],{"__ignoreMap":118},[123,140034,140035],{"class":125,"line":126},[123,140036,139934],{"class":2673},[123,140038,140039,140041,140043],{"class":125,"line":140},[123,140040,54016],{"class":53707},[123,140042,139941],{"class":337},[123,140044,137],{"class":129},[123,140046,140047,140049,140051,140053],{"class":125,"line":156},[123,140048,139948],{"class":164},[123,140050,147],{"class":129},[123,140052,1629],{"class":143},[123,140054,3760],{"class":129},[123,140056,140057,140059,140061,140063],{"class":125,"line":168},[123,140058,130556],{"class":164},[123,140060,147],{"class":129},[123,140062,63271],{"class":164},[123,140064,3760],{"class":129},[123,140066,140067],{"class":125,"line":268},[123,140068,171],{"class":129},[123,140070,140071,140073,140075],{"class":125,"line":291},[123,140072,54016],{"class":53707},[123,140074,139975],{"class":337},[123,140076,137],{"class":129},[123,140078,140079,140081,140083,140085],{"class":125,"line":300},[123,140080,139948],{"class":164},[123,140082,147],{"class":129},[123,140084,139986],{"class":143},[123,140086,3760],{"class":129},[123,140088,140089,140091,140093,140095],{"class":125,"line":305},[123,140090,73305],{"class":164},[123,140092,147],{"class":129},[123,140094,64472],{"class":164},[123,140096,3760],{"class":129},[123,140098,140099],{"class":125,"line":316},[123,140100,171],{"class":129},[3929,140102],{"style":128796,"src":140103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,140105,140106],{"start":268},[29,140107,140108],{},"使用场景3",[19,140110,140111],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[113,140113,140115],{"className":128940,"code":140114,"language":128942,"meta":118,"style":118},".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",[120,140116,140117,140123,140133,140137,140141,140145,140153,140163,140173,140177,140185,140195,140205],{"__ignoreMap":118},[123,140118,140119,140121],{"class":125,"line":126},[123,140120,132788],{"class":337},[123,140122,137],{"class":129},[123,140124,140125,140127,140129,140131],{"class":125,"line":140},[123,140126,133420],{"class":164},[123,140128,147],{"class":129},[123,140130,26163],{"class":164},[123,140132,3760],{"class":129},[123,140134,140135],{"class":125,"line":156},[123,140136,171],{"class":129},[123,140138,140139],{"class":125,"line":168},[123,140140,138401],{"class":129},[123,140142,140143],{"class":125,"line":268},[123,140144,139934],{"class":2673},[123,140146,140147,140149,140151],{"class":125,"line":291},[123,140148,54016],{"class":53707},[123,140150,139941],{"class":337},[123,140152,137],{"class":129},[123,140154,140155,140157,140159,140161],{"class":125,"line":300},[123,140156,139948],{"class":164},[123,140158,147],{"class":129},[123,140160,1629],{"class":143},[123,140162,3760],{"class":129},[123,140164,140165,140167,140169,140171],{"class":125,"line":305},[123,140166,130556],{"class":164},[123,140168,147],{"class":129},[123,140170,63271],{"class":164},[123,140172,3760],{"class":129},[123,140174,140175],{"class":125,"line":316},[123,140176,171],{"class":129},[123,140178,140179,140181,140183],{"class":125,"line":673},[123,140180,54016],{"class":53707},[123,140182,139975],{"class":337},[123,140184,137],{"class":129},[123,140186,140187,140189,140191,140193],{"class":125,"line":692},[123,140188,139948],{"class":164},[123,140190,147],{"class":129},[123,140192,139986],{"class":143},[123,140194,3760],{"class":129},[123,140196,140197,140199,140201,140203],{"class":125,"line":713},[123,140198,73305],{"class":164},[123,140200,147],{"class":129},[123,140202,64472],{"class":164},[123,140204,3760],{"class":129},[123,140206,140207],{"class":125,"line":718},[123,140208,171],{"class":129},[19,140210,140211],{},"div {\nmargin: 0 auto;\n}",[113,140213,140216],{"className":140214,"code":140215,"language":7621},[7619],"\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",[120,140217,140215],{"__ignoreMap":118},[19,140219,140220],{},"如果想让多个元素都发生变化",[19,140222,140223],{},"不能如下操作：",[19,140225,140226],{},"transition: width 2s ease 0.5s;",[19,140228,140229],{},"transition: height 2s ease 0.5s;不对！！！",[19,140231,140232],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140234,140235],{},"使用如下：加逗号隔开",[19,140237,140238],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140240,140241],{},"transition all 2s ease;",[2587,140243,140245],{"id":140244},"_1426-过渡练习","14.2.6 过渡练习",[26,140247,140248],{},[29,140249,140250],{},"进度条",[3929,140252],{"style":128796,"src":140253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[113,140255,140257],{"className":128940,"code":140256,"language":128942,"meta":118,"style":118},"div {\n  transition: all 0.3s ease;\n}\n",[120,140258,140259,140265,140283],{"__ignoreMap":118},[123,140260,140261,140263],{"class":125,"line":126},[123,140262,54016],{"class":53707},[123,140264,137],{"class":129},[123,140266,140267,140270,140272,140274,140277,140279,140281],{"class":125,"line":140},[123,140268,140269],{"class":164},"  transition",[123,140271,147],{"class":129},[123,140273,30542],{"class":164},[123,140275,140276],{"class":164}," 0.3",[123,140278,3297],{"class":133},[123,140280,81078],{"class":164},[123,140282,3760],{"class":129},[123,140284,140285],{"class":125,"line":156},[123,140286,171],{"class":129},[26,140288,140289],{"start":140},[29,140290,140291],{},"小米logo",[19,140293,140294],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[113,140296,140298],{"className":128940,"code":140297,"language":128942,"meta":118,"style":118},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[120,140299,140300,140305,140311,140327,140332],{"__ignoreMap":118},[123,140301,140302],{"class":125,"line":126},[123,140303,140304],{"class":2673},"\u002F* CSS3 过渡 *\u002F\n",[123,140306,140307,140309],{"class":125,"line":140},[123,140308,54016],{"class":53707},[123,140310,137],{"class":129},[123,140312,140313,140315,140317,140319,140321,140323,140325],{"class":125,"line":156},[123,140314,140269],{"class":164},[123,140316,147],{"class":129},[123,140318,30542],{"class":164},[123,140320,140276],{"class":164},[123,140322,3297],{"class":133},[123,140324,81078],{"class":164},[123,140326,3760],{"class":129},[123,140328,140329],{"class":125,"line":168},[123,140330,140331],{"class":2673},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[123,140333,140334],{"class":125,"line":268},[123,140335,171],{"class":129},[19,140337,140338],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2526,140340,140341],{},"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":118,"searchDepth":140,"depth":140,"links":140343},[140344,140349],{"id":138674,"depth":140,"text":138675,"children":140345},[140346,140347,140348],{"id":138678,"depth":156,"text":138679},{"id":138755,"depth":156,"text":138756},{"id":139086,"depth":156,"text":139087},{"id":139377,"depth":140,"text":139378,"children":140350},[140351,140352],{"id":139381,"depth":156,"text":139382},{"id":140244,"depth":156,"text":140245},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138666,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140359,"title":140360,"body":140361,"description":2544,"extension":2545,"meta":142105,"navigation":231,"path":142106,"seo":142107,"stem":142108,"__hash__":142109},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140362,"toc":142086},[140363,140366,140370,140373,140379,140385,140389,140391,140394,140397,140400,140403,140406,140409,140412,140416,140420,140423,140426,140429,140433,140436,140439,140444,140447,140450,140453,140457,140460,140469,140472,140475,140479,140482,140485,140490,140497,140511,140519,140526,140531,140534,140537,140540,140547,140551,140557,140563,140566,140569,140574,140580,140582,140590,140595,140598,140604,140606,140611,140616,140619,140621,140626,140629,140634,140639,140673,140677,140681,140684,140688,140691,140777,140780,140817,140820,140856,140860,140865,140878,140932,140934,140962,140964,140992,140998,141012,141014,141058,141060,141104,141107,141114,141125,141127,141154,141156,141182,141189,141205,141207,141301,141303,141397,141404,141407,141412,141418,141492,141495,141497,141533,141535,141571,141574,141581,141600,141603,141606,141608,141633,141635,141659,141662,141665,141695,141699,141702,141765,141767,141833,141835,141899,141902,141934,141936,141962,141964,141990,141993,142024,142026,142052,142054,142080,142083],[10,140364,140360],{"id":140365},"_15-品优购项目上篇-搭建与公共模块",[14,140367,140369],{"id":140368},"_151-项目规划","15.1 项目规划",[3929,140371],{"style":128796,"src":140372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140374,140375,140378],{},[2759,140376,140377],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140380,140381,140384],{},[2759,140382,140383],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140386,140388],{"id":140387},"_152-项目介绍","15.2 项目介绍",[19,140390,140377],{},[3929,140392],{"style":128796,"src":140393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140395,140396],{},"主页：",[3929,140398],{"style":128796,"src":140399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140401,140402],{},"列表页：",[3929,140404],{"style":128796,"src":140405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140407,140408],{},"注册页：",[3929,140410],{"style":128796,"src":140411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140413,140415],{"id":140414},"_153-项目搭建工作","15.3 项目搭建工作",[2587,140417,140419],{"id":140418},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3929,140421],{"style":128796,"src":140422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140424,140425],{},"经常更换的图片要放到upload文件夹中",[19,140427,140428],{},"不经常换的放到images文件夹中",[2587,140430,140432],{"id":140431},"_1532-创建文件如下","15.3.2 创建文件如下",[3929,140434],{"style":128796,"src":140435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3929,140437],{"style":128796,"src":140438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140440,140441],{},[2759,140442,140443],{},"初始化样式：",[19,140445,140446],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140448,140449],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140451,140452],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[2587,140454,140456],{"id":140455},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140458,140459],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140461,140462,140463,140468],{},"这里最典型的应用就是 ",[2759,140464,140465],{},[120,140466,140467],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3929,140470],{"style":128796,"src":140471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140473,140474],{},"通过link方法来引入",[2587,140476,140478],{"id":140477},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3929,140480],{"style":128796,"src":140481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140483,140484],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,140486,140487],{},[29,140488,140489],{},"制作favicon图标",[19,140491,140492,140493,140496],{},"①把品优购图标切成 ",[120,140494,140495],{},"png"," 图片",[19,140498,140499,140500,140502,140503,140506,140507],{},"②把 ",[120,140501,140495],{}," 图片转换为 ",[120,140504,140505],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2846,140508,140509],{"href":140509,"rel":140510},"http:\u002F\u002Fwww.bitbug.net\u002F",[26287],[26,140512,140513,140516],{"start":140},[29,140514,140515],{},"favicon图标放到网站根目录下",[29,140517,140518],{},"HTML页面引入favicon",[19,140520,140521,140522,140525],{},"在html 页面里面的 ",[120,140523,140524],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140527,140528],{},[120,140529,140530],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140532,140533],{},"复制这行代码或者在生成这个的网站进行复制",[3929,140535],{"style":128796,"src":140536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140538,140539],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140541,140542,140543],{},"例如:",[2846,140544,140545],{"href":140545,"rel":140546},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26287],[2587,140548,140550],{"id":140549},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140552,140553,140556],{},[2759,140554,140555],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140558,140559,140562],{},[2759,140560,140561],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140564,140565],{},"页面必须有三个标签用来符合 SEO 优化",[3929,140567],{"style":128796,"src":140568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,140570,140571],{},[29,140572,140573],{},"title网站标题",[19,140575,140576,140579],{},[2759,140577,140578],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140581,71191],{},[3606,140583,140584,140587],{},[29,140585,140586],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,140588,140589],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,140591,140592],{"start":140},[29,140593,140594],{},"description网站描述",[19,140596,140597],{},"简要说明我们网站主要是做什么的",[19,140599,140600,140603],{},[2759,140601,140602],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140605,71191],{},[19,140607,140608],{},[120,140609,140610],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,140612,140613],{"start":156},[29,140614,140615],{},"keywords关键词",[19,140617,140618],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140620,71191],{},[19,140622,140623],{},[120,140624,140625],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140627,140628],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140630,140631],{},[2759,140632,140633],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,140635,140636],{"start":168},[29,140637,140638],{},"代码总结",[113,140640,140641],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,140642,140643,140647,140661,140665],{"__ignoreMap":118},[123,140644,140645],{"class":125,"line":126},[123,140646,133051],{"class":2673},[123,140648,140649,140651,140653,140655,140657,140659],{"class":125,"line":140},[123,140650,3509],{"class":129},[123,140652,54016],{"class":53707},[123,140654,55889],{"class":337},[123,140656,134],{"class":129},[123,140658,133064],{"class":143},[123,140660,53714],{"class":129},[123,140662,140663],{"class":125,"line":156},[123,140664,133071],{"class":129},[123,140666,140667,140669,140671],{"class":125,"line":168},[123,140668,54190],{"class":129},[123,140670,54016],{"class":53707},[123,140672,53714],{"class":129},[14,140674,140676],{"id":140675},"_154-项目公共部分制作","15.4 项目公共部分制作",[2587,140678,140680],{"id":140679},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3929,140682],{"style":128796,"src":140683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[2587,140685,140687],{"id":140686},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140689,140690],{},"布局思路：",[3606,140692,140693,140696,140699,140721,140754],{},[29,140694,140695],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,140697,140698],{},"里面包含版心的盒子",[29,140700,140701,140702],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3606,140703,140704,140712,140718],{},[29,140705,140706,140707,23927,140709,140711],{},"1 号盒子 里面包含一个",[120,140708,3606],{},[120,140710,3606],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,140713,140714,140715,140717],{},"里面的内容是水平排列，所以需要给",[120,140716,29],{},"设置浮动",[29,140719,140720],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,140722,140723,140724],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3606,140725,140726,140740,140745],{},[29,140727,140728,140729,23927,140731,140733,140734,140736,140737,140739],{},"2 号盒子 里面包含一个",[120,140730,3606],{},[120,140732,3606],{},"包裹",[120,140735,29],{},"，中间的",[120,140738,3520],{},"可以用样式去设置，也可以用字符 |",[29,140741,140742,140743,140717],{},"里面内容水平排列，给",[120,140744,29],{},[29,140746,140747,140748,140750,140751,140753],{},"找到里面所有偶数的 ",[120,140749,29],{}," 设置样式（偶数的 ",[120,140752,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,140755,140756,140757],{},"需要用到字体图标",[3606,140758,140759,140765,140768,140771,140774],{},[29,140760,140761,140762],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[120,140763,140764],{},"arrow-icon",[29,140766,140767],{},"先要引入字体图片的资源",[29,140769,140770],{},"在样式里面利用 font-face 来进行声明",[29,140772,140773],{},"在伪元素的 content属性设置 图标的编码",[29,140775,140776],{},"给伪元素设置font-family属性",[19,140778,140779],{},"结构实例代码：",[113,140781,140783],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},"div::before {\n  content: \"\";\n  display: block;\n}\n",[120,140784,140785,140793,140803,140813],{"__ignoreMap":118},[123,140786,140787,140789,140791],{"class":125,"line":126},[123,140788,54016],{"class":53707},[123,140790,139941],{"class":337},[123,140792,137],{"class":129},[123,140794,140795,140797,140799,140801],{"class":125,"line":140},[123,140796,139948],{"class":164},[123,140798,147],{"class":129},[123,140800,1629],{"class":143},[123,140802,3760],{"class":129},[123,140804,140805,140807,140809,140811],{"class":125,"line":156},[123,140806,130556],{"class":164},[123,140808,147],{"class":129},[123,140810,63271],{"class":164},[123,140812,3760],{"class":129},[123,140814,140815],{"class":125,"line":168},[123,140816,171],{"class":129},[19,140818,140819],{},"样式实例代码：",[113,140821,140822],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,140823,140824,140832,140842,140852],{"__ignoreMap":118},[123,140825,140826,140828,140830],{"class":125,"line":126},[123,140827,54016],{"class":53707},[123,140829,139941],{"class":337},[123,140831,137],{"class":129},[123,140833,140834,140836,140838,140840],{"class":125,"line":140},[123,140835,139948],{"class":164},[123,140837,147],{"class":129},[123,140839,1629],{"class":143},[123,140841,3760],{"class":129},[123,140843,140844,140846,140848,140850],{"class":125,"line":156},[123,140845,130556],{"class":164},[123,140847,147],{"class":129},[123,140849,63271],{"class":164},[123,140851,3760],{"class":129},[123,140853,140854],{"class":125,"line":168},[123,140855,171],{"class":129},[2587,140857,140859],{"id":140858},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3606,140861,140862],{},[29,140863,140864],{},"header 盒子必须要有高度",[19,140866,140867,140868,140870,140871],{},"1 号盒子是 ",[120,140869,133952],{}," 标志定位，在正常开发过程中， ",[2759,140872,140873,140874,140877],{},"logo的布局其实是有讲究的，需要进行 ",[120,140875,140876],{},"logoSEO","的优化 （★★★）",[3606,140879,140880,140888,140896,140923],{},[29,140881,140882,140884,140885,140887],{},[120,140883,133952],{}," 里面首先放一个 ",[120,140886,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,140889,140890,140892,140893,140895],{},[120,140891,10],{}," 里面再放一个链接，可以返回首页的，把 ",[120,140894,133952],{}," 的背景图片给链接即可",[29,140897,140898,140899],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3606,140900,140901,140916],{},[29,140902,140903,140904,140907,140908,140911,140912,140915],{},"方法1：",[120,140905,140906],{},"text-indent"," 移到盒子外面（",[120,140909,140910],{},"text-indent: -9999px",") ，然后 ",[120,140913,140914],{},"overflow:hidden"," ，淘宝的做法",[29,140917,140918,140919,140922],{},"方法2：直接给 ",[120,140920,140921],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,140924,140925,140926,140928,140929,140931],{},"最后给链接一个 ",[120,140927,642],{}," 属性，这样鼠标放到 ",[120,140930,133952],{}," 上就可以看到提示文字了",[19,140933,140779],{},[113,140935,140936],{"className":129687,"code":134173,"language":129689,"meta":118,"style":118},[120,140937,140938],{"__ignoreMap":118},[123,140939,140940,140942,140944,140946,140948,140950,140952,140954,140956,140958,140960],{"class":125,"line":126},[123,140941,3509],{"class":129},[123,140943,2846],{"class":53707},[123,140945,63459],{"class":337},[123,140947,134],{"class":129},[123,140949,134188],{"class":143},[123,140951,134191],{"class":337},[123,140953,134],{"class":129},[123,140955,134196],{"class":143},[123,140957,134199],{"class":129},[123,140959,2846],{"class":53707},[123,140961,53714],{"class":129},[19,140963,140819],{},[113,140965,140966],{"className":129687,"code":134173,"language":129689,"meta":118,"style":118},[120,140967,140968],{"__ignoreMap":118},[123,140969,140970,140972,140974,140976,140978,140980,140982,140984,140986,140988,140990],{"class":125,"line":126},[123,140971,3509],{"class":129},[123,140973,2846],{"class":53707},[123,140975,63459],{"class":337},[123,140977,134],{"class":129},[123,140979,134188],{"class":143},[123,140981,134191],{"class":337},[123,140983,134],{"class":129},[123,140985,134196],{"class":143},[123,140987,134199],{"class":129},[123,140989,2846],{"class":53707},[123,140991,53714],{"class":129},[19,140993,140994,140995,140997],{},"2 号盒子是 ",[120,140996,133965],{}," 搜索模块定位",[3606,140999,141000,141003,141006,141009],{},[29,141001,141002],{},"search盒子利用定位的方式放在对应的位置",[29,141004,141005],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,141007,141008],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,141010,141011],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141013,140779],{},[113,141015,141016],{"className":128940,"code":134260,"language":128942,"meta":118,"style":118},[120,141017,141018,141040,141044,141054],{"__ignoreMap":118},[123,141019,141020,141022,141024,141026,141028,141030,141032,141034,141036,141038],{"class":125,"line":126},[123,141021,54016],{"class":53707},[123,141023,251],{"class":129},[123,141025,19],{"class":53707},[123,141027,251],{"class":129},[123,141029,10],{"class":53707},[123,141031,251],{"class":129},[123,141033,3606],{"class":53707},[123,141035,251],{"class":129},[123,141037,29],{"class":53707},[123,141039,137],{"class":129},[123,141041,141042],{"class":125,"line":140},[123,141043,134289],{"class":2673},[123,141045,141046,141048,141050,141052],{"class":125,"line":156},[123,141047,130556],{"class":164},[123,141049,147],{"class":129},[123,141051,63271],{"class":164},[123,141053,3760],{"class":129},[123,141055,141056],{"class":125,"line":168},[123,141057,171],{"class":129},[19,141059,140819],{},[113,141061,141062],{"className":128940,"code":134260,"language":128942,"meta":118,"style":118},[120,141063,141064,141086,141090,141100],{"__ignoreMap":118},[123,141065,141066,141068,141070,141072,141074,141076,141078,141080,141082,141084],{"class":125,"line":126},[123,141067,54016],{"class":53707},[123,141069,251],{"class":129},[123,141071,19],{"class":53707},[123,141073,251],{"class":129},[123,141075,10],{"class":53707},[123,141077,251],{"class":129},[123,141079,3606],{"class":53707},[123,141081,251],{"class":129},[123,141083,29],{"class":53707},[123,141085,137],{"class":129},[123,141087,141088],{"class":125,"line":140},[123,141089,134289],{"class":2673},[123,141091,141092,141094,141096,141098],{"class":125,"line":156},[123,141093,130556],{"class":164},[123,141095,147],{"class":129},[123,141097,63271],{"class":164},[123,141099,3760],{"class":129},[123,141101,141102],{"class":125,"line":168},[123,141103,171],{"class":129},[19,141105,141106],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141108,141109,141110,141113],{},"3 号盒子是 ",[120,141111,141112],{},"hotwords"," 热词模块定位",[3606,141115,141116,141119,141122],{},[29,141117,141118],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,141120,141121],{},"给里面所有的a标签设置 左右10px的外边距",[29,141123,141124],{},"给第一个a标签设置文字变红色（#c81623）",[19,141126,140779],{},[113,141128,141130],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},"div {\n  margin: 0 auto;\n}\n",[120,141131,141132,141138,141150],{"__ignoreMap":118},[123,141133,141134,141136],{"class":125,"line":126},[123,141135,54016],{"class":53707},[123,141137,137],{"class":129},[123,141139,141140,141142,141144,141146,141148],{"class":125,"line":140},[123,141141,72870],{"class":164},[123,141143,147],{"class":129},[123,141145,2799],{"class":164},[123,141147,53961],{"class":164},[123,141149,3760],{"class":129},[123,141151,141152],{"class":125,"line":156},[123,141153,171],{"class":129},[19,141155,140819],{},[113,141157,141158],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,141159,141160,141166,141178],{"__ignoreMap":118},[123,141161,141162,141164],{"class":125,"line":126},[123,141163,54016],{"class":53707},[123,141165,137],{"class":129},[123,141167,141168,141170,141172,141174,141176],{"class":125,"line":140},[123,141169,72870],{"class":164},[123,141171,147],{"class":129},[123,141173,2799],{"class":164},[123,141175,53961],{"class":164},[123,141177,3760],{"class":129},[123,141179,141180],{"class":125,"line":156},[123,141181,171],{"class":129},[19,141183,141184,141185,141188],{},"4 号盒子是 ",[120,141186,141187],{},"shopcar"," 购物车模块",[3606,141190,141191,141196,141199,141202],{},[29,141192,125723,141193,141195],{},[120,141194,141187],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,141197,141198],{},"count 统计部分用绝对定位做",[29,141200,141201],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,141203,141204],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141206,140779],{},[113,141208,141209],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,141210,141211,141215,141229,141233,141247,141251,141265,141269,141283,141287],{"__ignoreMap":118},[123,141212,141213],{"class":125,"line":126},[123,141214,134379],{"class":2673},[123,141216,141217,141219,141221,141223,141225,141227],{"class":125,"line":140},[123,141218,134384],{"class":337},[123,141220,82205],{"class":129},[123,141222,131300],{"class":164},[123,141224,147],{"class":129},[123,141226,134393],{"class":164},[123,141228,131870],{"class":129},[123,141230,141231],{"class":125,"line":156},[123,141232,134400],{"class":2673},[123,141234,141235,141237,141239,141241,141243,141245],{"class":125,"line":168},[123,141236,134405],{"class":337},[123,141238,82205],{"class":129},[123,141240,131300],{"class":164},[123,141242,147],{"class":129},[123,141244,57167],{"class":164},[123,141246,131870],{"class":129},[123,141248,141249],{"class":125,"line":268},[123,141250,134420],{"class":2673},[123,141252,141253,141255,141257,141259,141261,141263],{"class":125,"line":291},[123,141254,134425],{"class":337},[123,141256,82205],{"class":129},[123,141258,131300],{"class":164},[123,141260,147],{"class":129},[123,141262,57234],{"class":164},[123,141264,131870],{"class":129},[123,141266,141267],{"class":125,"line":300},[123,141268,134440],{"class":2673},[123,141270,141271,141273,141275,141277,141279,141281],{"class":125,"line":305},[123,141272,134445],{"class":337},[123,141274,82205],{"class":129},[123,141276,131300],{"class":164},[123,141278,147],{"class":129},[123,141280,88629],{"class":164},[123,141282,131870],{"class":129},[123,141284,141285],{"class":125,"line":316},[123,141286,134460],{"class":2673},[123,141288,141289,141291,141293,141295,141297,141299],{"class":125,"line":673},[123,141290,134465],{"class":337},[123,141292,82205],{"class":129},[123,141294,131300],{"class":164},[123,141296,147],{"class":129},[123,141298,134474],{"class":164},[123,141300,131870],{"class":129},[19,141302,140819],{},[113,141304,141305],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,141306,141307,141311,141325,141329,141343,141347,141361,141365,141379,141383],{"__ignoreMap":118},[123,141308,141309],{"class":125,"line":126},[123,141310,134379],{"class":2673},[123,141312,141313,141315,141317,141319,141321,141323],{"class":125,"line":140},[123,141314,134384],{"class":337},[123,141316,82205],{"class":129},[123,141318,131300],{"class":164},[123,141320,147],{"class":129},[123,141322,134393],{"class":164},[123,141324,131870],{"class":129},[123,141326,141327],{"class":125,"line":156},[123,141328,134400],{"class":2673},[123,141330,141331,141333,141335,141337,141339,141341],{"class":125,"line":168},[123,141332,134405],{"class":337},[123,141334,82205],{"class":129},[123,141336,131300],{"class":164},[123,141338,147],{"class":129},[123,141340,57167],{"class":164},[123,141342,131870],{"class":129},[123,141344,141345],{"class":125,"line":268},[123,141346,134420],{"class":2673},[123,141348,141349,141351,141353,141355,141357,141359],{"class":125,"line":291},[123,141350,134425],{"class":337},[123,141352,82205],{"class":129},[123,141354,131300],{"class":164},[123,141356,147],{"class":129},[123,141358,57234],{"class":164},[123,141360,131870],{"class":129},[123,141362,141363],{"class":125,"line":300},[123,141364,134440],{"class":2673},[123,141366,141367,141369,141371,141373,141375,141377],{"class":125,"line":305},[123,141368,134445],{"class":337},[123,141370,82205],{"class":129},[123,141372,131300],{"class":164},[123,141374,147],{"class":129},[123,141376,88629],{"class":164},[123,141378,131870],{"class":129},[123,141380,141381],{"class":125,"line":316},[123,141382,134460],{"class":2673},[123,141384,141385,141387,141389,141391,141393,141395],{"class":125,"line":673},[123,141386,134465],{"class":337},[123,141388,82205],{"class":129},[123,141390,131300],{"class":164},[123,141392,147],{"class":129},[123,141394,134474],{"class":164},[123,141396,131870],{"class":129},[2587,141398,141400,141401,141403],{"id":141399},"_1544-nav导航模块制作","15.4.4 ",[120,141402,56116],{},"导航模块制作",[3929,141405],{"style":128796,"src":141406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141408,141409,141411],{},[120,141410,56116],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141413,141414,141415],{},"1 号盒子左侧浮动，",[120,141416,141417],{},"dropdown",[3606,141419,141420,141430,141438,141444,141452,141462,141470,141481],{},[29,141421,141422,141423,103411,141426,141429],{},"1号盒子有讲究，根据相关性 里面包含 ",[120,141424,141425],{},".dt",[120,141427,141428],{},".dd"," 两个盒子",[29,141431,141432,141434,141435,141437],{},[120,141433,141425],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[120,141436,141428],{}," 挤到下面去了",[29,141439,141440,141441,141443],{},"给 ",[120,141442,141428],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,141445,141440,141446,141448,141449,122625],{},[120,141447,141428],{}," 盒子里面定义 无序列表 （",[120,141450,141451],{},"ul > li > a",[29,141453,141454,141455,141457,141458,141461],{},"每个 ",[120,141456,29],{}," 都有一个高度（",[120,141459,141460],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,141463,141440,141464,141466,141467,122625],{},[120,141465,29],{}," 里面的a设置文字大小（",[120,141468,141469],{},"14px",[29,141471,141440,141472,141474,141475,141477,141478,141480],{},[120,141473,29],{}," 设置 ",[120,141476,130101],{},"，当鼠标移入的时候，让",[120,141479,29],{},"的背景变成白色，让里面的文字变成红色",[29,141482,141483,141485,141486,141488,141489,141491],{},[120,141484,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[120,141487,29],{},"的右侧，那么给",[120,141490,29],{},"设置相对定位",[19,141493,141494],{},"一定要注意相关性",[19,141496,140779],{},[113,141498,141499],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,141500,141501,141509,141519,141529],{"__ignoreMap":118},[123,141502,141503,141505,141507],{"class":125,"line":126},[123,141504,54016],{"class":53707},[123,141506,139941],{"class":337},[123,141508,137],{"class":129},[123,141510,141511,141513,141515,141517],{"class":125,"line":140},[123,141512,139948],{"class":164},[123,141514,147],{"class":129},[123,141516,1629],{"class":143},[123,141518,3760],{"class":129},[123,141520,141521,141523,141525,141527],{"class":125,"line":156},[123,141522,130556],{"class":164},[123,141524,147],{"class":129},[123,141526,63271],{"class":164},[123,141528,3760],{"class":129},[123,141530,141531],{"class":125,"line":168},[123,141532,171],{"class":129},[19,141534,140819],{},[113,141536,141537],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,141538,141539,141547,141557,141567],{"__ignoreMap":118},[123,141540,141541,141543,141545],{"class":125,"line":126},[123,141542,54016],{"class":53707},[123,141544,139941],{"class":337},[123,141546,137],{"class":129},[123,141548,141549,141551,141553,141555],{"class":125,"line":140},[123,141550,139948],{"class":164},[123,141552,147],{"class":129},[123,141554,1629],{"class":143},[123,141556,3760],{"class":129},[123,141558,141559,141561,141563,141565],{"class":125,"line":156},[123,141560,130556],{"class":164},[123,141562,147],{"class":129},[123,141564,63271],{"class":164},[123,141566,3760],{"class":129},[123,141568,141569],{"class":125,"line":168},[123,141570,171],{"class":129},[19,141572,141573],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141575,141576,141577,141580],{},"2 号盒子左侧浮动，",[120,141578,141579],{},"navitems"," 导航栏组",[3606,141582,141583,141588,141597],{},[29,141584,141585,141586],{},"里面结构是 ",[120,141587,141451],{},[29,141589,141590,141591,141593,141594,141596],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[120,141592,2846],{},"左右的",[120,141595,33298],{},"把两侧撑开",[29,141598,141599],{},"让文字垂直居中（行高等于高度）",[3929,141601],{"style":128796,"src":141602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141604,141605],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141607,140779],{},[113,141609,141611],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},".box {\n  float: left;\n}\n",[120,141612,141613,141619,141629],{"__ignoreMap":118},[123,141614,141615,141617],{"class":125,"line":126},[123,141616,132788],{"class":337},[123,141618,137],{"class":129},[123,141620,141621,141623,141625,141627],{"class":125,"line":140},[123,141622,133420],{"class":164},[123,141624,147],{"class":129},[123,141626,26163],{"class":164},[123,141628,3760],{"class":129},[123,141630,141631],{"class":125,"line":156},[123,141632,171],{"class":129},[19,141634,140819],{},[113,141636,141637],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,141638,141639,141645,141655],{"__ignoreMap":118},[123,141640,141641,141643],{"class":125,"line":126},[123,141642,132788],{"class":337},[123,141644,137],{"class":129},[123,141646,141647,141649,141651,141653],{"class":125,"line":140},[123,141648,133420],{"class":164},[123,141650,147],{"class":129},[123,141652,26163],{"class":164},[123,141654,3760],{"class":129},[123,141656,141657],{"class":125,"line":156},[123,141658,171],{"class":129},[19,141660,141661],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3929,141663],{"style":128796,"src":141664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[113,141666,141667],{"className":128940,"code":133097,"language":128942,"meta":118,"style":118},[120,141668,141669,141675,141691],{"__ignoreMap":118},[123,141670,141671,141673],{"class":125,"line":126},[123,141672,54016],{"class":53707},[123,141674,137],{"class":129},[123,141676,141677,141679,141681,141683,141685,141687,141689],{"class":125,"line":140},[123,141678,73296],{"class":164},[123,141680,147],{"class":129},[123,141682,2825],{"class":164},[123,141684,53897],{"class":133},[123,141686,53926],{"class":164},[123,141688,132332],{"class":164},[123,141690,3760],{"class":129},[123,141692,141693],{"class":125,"line":156},[123,141694,171],{"class":129},[2587,141696,141698],{"id":141697},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3929,141700],{"style":128796,"src":141701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3606,141703,141704,141709,141714],{},[29,141705,141706,141708],{},[120,141707,134143],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,141710,141711,141713],{},[120,141712,134143],{}," 里面有一个大的版心",[29,141715,141716,141717,141720,141721],{},"版心里面包含 1 号盒子，",[120,141718,141719],{},"mod_service"," 是服务模块，mod 是模块的意思",[3606,141722,141723,141728,141741,141757,141762],{},[29,141724,141440,141725,141727],{},[120,141726,141719],{}," 设置高度（80px）和下边框",[29,141729,141730,141731,141734,141735,141737,141738,141740],{},"在里面定义 ",[120,141732,141733],{},"ul > li"," ,每个",[120,141736,29],{}," 宽度是300px 高度是 50px，给每个",[120,141739,29],{},"设置35px的左内边距",[29,141742,141743,141744,141746,141747,141749,141750,141752,141753,20838,141755,122625],{},"在每个",[120,141745,29],{},"里面，放一个 ",[120,141748,25337],{},"（里面放图标），一个",[120,141751,54016],{},"（里面放",[120,141754,54016],{},[120,141756,19],{},[29,141758,141440,141759,141761],{},[120,141760,25337],{},"设置浮动，让h5与这个div左右排列",[29,141763,141764],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141766,140779],{},[113,141768,141770],{"className":128940,"code":141769,"language":128942,"meta":118,"style":118},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[120,141771,141772,141778,141790,141802,141829],{"__ignoreMap":118},[123,141773,141774,141776],{"class":125,"line":126},[123,141775,136697],{"class":337},[123,141777,137],{"class":129},[123,141779,141780,141782,141784,141786,141788],{"class":125,"line":140},[123,141781,72968],{"class":164},[123,141783,147],{"class":129},[123,141785,3302],{"class":164},[123,141787,53897],{"class":133},[123,141789,3760],{"class":129},[123,141791,141792,141794,141796,141798,141800],{"class":125,"line":156},[123,141793,73188],{"class":164},[123,141795,147],{"class":129},[123,141797,3302],{"class":164},[123,141799,53897],{"class":133},[123,141801,3760],{"class":129},[123,141803,141804,141806,141808,141810,141812,141814,141816,141818,141821,141823,141825,141827],{"class":125,"line":168},[123,141805,73011],{"class":164},[123,141807,147],{"class":129},[123,141809,64128],{"class":164},[123,141811,1315],{"class":129},[123,141813,136736],{"class":279},[123,141815,1336],{"class":129},[123,141817,64138],{"class":164},[123,141819,141820],{"class":164}," -10",[123,141822,53897],{"class":133},[123,141824,136755],{"class":164},[123,141826,53897],{"class":133},[123,141828,3760],{"class":129},[123,141830,141831],{"class":125,"line":268},[123,141832,171],{"class":129},[19,141834,140819],{},[113,141836,141837],{"className":128940,"code":141769,"language":128942,"meta":118,"style":118},[120,141838,141839,141845,141857,141869,141895],{"__ignoreMap":118},[123,141840,141841,141843],{"class":125,"line":126},[123,141842,136697],{"class":337},[123,141844,137],{"class":129},[123,141846,141847,141849,141851,141853,141855],{"class":125,"line":140},[123,141848,72968],{"class":164},[123,141850,147],{"class":129},[123,141852,3302],{"class":164},[123,141854,53897],{"class":133},[123,141856,3760],{"class":129},[123,141858,141859,141861,141863,141865,141867],{"class":125,"line":156},[123,141860,73188],{"class":164},[123,141862,147],{"class":129},[123,141864,3302],{"class":164},[123,141866,53897],{"class":133},[123,141868,3760],{"class":129},[123,141870,141871,141873,141875,141877,141879,141881,141883,141885,141887,141889,141891,141893],{"class":125,"line":168},[123,141872,73011],{"class":164},[123,141874,147],{"class":129},[123,141876,64128],{"class":164},[123,141878,1315],{"class":129},[123,141880,136736],{"class":279},[123,141882,1336],{"class":129},[123,141884,64138],{"class":164},[123,141886,141820],{"class":164},[123,141888,53897],{"class":133},[123,141890,136755],{"class":164},[123,141892,53897],{"class":133},[123,141894,3760],{"class":129},[123,141896,141897],{"class":125,"line":268},[123,141898,171],{"class":129},[19,141900,141901],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3606,141903,141904,141907,141913,141919,141931],{},[29,141905,141906],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,141908,141909,141910,122625],{},"里面的布局利用 自定义列表来实现（",[120,141911,141912],{},"dl > dt + dd",[29,141914,141440,141915,141918],{},[120,141916,141917],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,141920,141440,141921,141924,141925,20838,141927,141930],{},[120,141922,141923],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[120,141926,141923],{},[120,141928,141929],{},"dd","之间有些距离",[29,141932,141933],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141935,140779],{},[113,141937,141938],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,141939,141940,141946,141958],{"__ignoreMap":118},[123,141941,141942,141944],{"class":125,"line":126},[123,141943,54016],{"class":53707},[123,141945,137],{"class":129},[123,141947,141948,141950,141952,141954,141956],{"class":125,"line":140},[123,141949,72870],{"class":164},[123,141951,147],{"class":129},[123,141953,2799],{"class":164},[123,141955,53961],{"class":164},[123,141957,3760],{"class":129},[123,141959,141960],{"class":125,"line":156},[123,141961,171],{"class":129},[19,141963,140819],{},[113,141965,141966],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,141967,141968,141974,141986],{"__ignoreMap":118},[123,141969,141970,141972],{"class":125,"line":126},[123,141971,54016],{"class":53707},[123,141973,137],{"class":129},[123,141975,141976,141978,141980,141982,141984],{"class":125,"line":140},[123,141977,72870],{"class":164},[123,141979,147],{"class":129},[123,141981,2799],{"class":164},[123,141983,53961],{"class":164},[123,141985,3760],{"class":129},[123,141987,141988],{"class":125,"line":156},[123,141989,171],{"class":129},[19,141991,141992],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3606,141994,141995,142004,142007,142018],{},[29,141996,141997,141998,142000,142001,142003],{},"分为上下两块，上面是 ",[120,141999,134160],{}," 友情链接，下面是 ",[120,142002,134153],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,142005,142006],{},"把内容分别复制到相应模块中",[29,142008,141440,142009,142011,142012,142014,142015,142017],{},[120,142010,134160],{}," 设置 15px 的下外边距，给",[120,142013,134160],{}," 里面 的 ",[120,142016,2846],{}," 标签设置 左右 3px 的外边距",[29,142019,142020,142021,142023],{},"给",[120,142022,134153],{}," 设置 20px 的行高",[19,142025,140779],{},[113,142027,142028],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,142029,142030,142036,142048],{"__ignoreMap":118},[123,142031,142032,142034],{"class":125,"line":126},[123,142033,54016],{"class":53707},[123,142035,137],{"class":129},[123,142037,142038,142040,142042,142044,142046],{"class":125,"line":140},[123,142039,72870],{"class":164},[123,142041,147],{"class":129},[123,142043,2799],{"class":164},[123,142045,53961],{"class":164},[123,142047,3760],{"class":129},[123,142049,142050],{"class":125,"line":156},[123,142051,171],{"class":129},[19,142053,140819],{},[113,142055,142056],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,142057,142058,142064,142076],{"__ignoreMap":118},[123,142059,142060,142062],{"class":125,"line":126},[123,142061,54016],{"class":53707},[123,142063,137],{"class":129},[123,142065,142066,142068,142070,142072,142074],{"class":125,"line":140},[123,142067,72870],{"class":164},[123,142069,147],{"class":129},[123,142071,2799],{"class":164},[123,142073,53961],{"class":164},[123,142075,3760],{"class":129},[123,142077,142078],{"class":125,"line":156},[123,142079,171],{"class":129},[19,142081,142082],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2526,142084,142085],{},"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":118,"searchDepth":140,"depth":140,"links":142087},[142088,142089,142090,142097],{"id":140368,"depth":140,"text":140369},{"id":140387,"depth":140,"text":140388},{"id":140414,"depth":140,"text":140415,"children":142091},[142092,142093,142094,142095,142096],{"id":140418,"depth":156,"text":140419},{"id":140431,"depth":156,"text":140432},{"id":140455,"depth":156,"text":140456},{"id":140477,"depth":156,"text":140478},{"id":140549,"depth":156,"text":140550},{"id":140675,"depth":140,"text":140676,"children":142098},[142099,142100,142101,142102,142104],{"id":140679,"depth":156,"text":140680},{"id":140686,"depth":156,"text":140687},{"id":140858,"depth":156,"text":140859},{"id":141399,"depth":156,"text":142103},"15.4.4 nav导航模块制作",{"id":141697,"depth":156,"text":141698},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140360,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142111,"title":142112,"body":142113,"description":2544,"extension":2545,"meta":144515,"navigation":231,"path":144516,"seo":144517,"stem":144518,"__hash__":144519},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142114,"toc":144492},[142115,142118,142122,142126,142138,142141,142144,142147,142158,142160,142184,142186,142210,142215,142218,142220,142256,142258,142294,142297,142302,142305,142308,142311,142341,142348,142351,142361,142363,142397,142400,142434,142440,142457,142459,142495,142497,142533,142538,142563,142565,142591,142593,142617,142624,142627,142691,142693,142735,142737,142777,142784,142789,142791,142821,142823,142853,142857,142860,142867,142879,142881,142907,142909,142933,142936,142938,142962,142968,142978,142980,143010,143012,143042,143049,143090,143092,143128,143130,143166,143170,143173,143176,143179,143185,143190,143193,143216,143219,143243,143246,143270,143275,143278,143281,143284,143287,143290,143364,143366,143396,143398,143428,143431,143434,143466,143470,143474,143488,143497,143500,143505,143507,143601,143603,143697,143720,143722,143746,143748,143772,143779,143782,143792,143794,143818,143823,143831,143833,143863,143868,143908,143910,143936,143938,143964,143968,143971,143976,143979,143983,143991,143998,144006,144008,144038,144040,144070,144078,144081,144084,144086,144116,144118,144148,144151,144156,144158,144182,144184,144208,144211,144296,144298,144322,144324,144348,144352,144354,144378,144380,144414,144418,144432,144435,144440,144443,144448,144451,144481,144489],[10,142116,142112],{"id":142117},"_16-品优购项目下篇-主体与页面开发",[14,142119,142121],{"id":142120},"_161-项目主体模块制作","16.1 项目主体模块制作",[2587,142123,142125],{"id":142124},"_1611-首页制作","16.1.1 首页制作",[19,142127,142128,142130,142131,142133,142134,142137],{},[2759,142129,104449],{}," 主体模块是 ",[2759,142132,76458],{}," 里面专有的，注意需要新的样式文件 ",[2759,142135,142136],{},"index.css，"," 就不要写在common.css中了",[3929,142139],{"style":128796,"src":142140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3929,142142],{"style":128796,"src":142143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142145,142146],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3606,142148,142149,142152,142155],{},[29,142150,142151],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,142153,142154],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,142156,142157],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142159,140779],{},[113,142161,142162],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,142163,142164,142170,142180],{"__ignoreMap":118},[123,142165,142166,142168],{"class":125,"line":126},[123,142167,132788],{"class":337},[123,142169,137],{"class":129},[123,142171,142172,142174,142176,142178],{"class":125,"line":140},[123,142173,133420],{"class":164},[123,142175,147],{"class":129},[123,142177,26163],{"class":164},[123,142179,3760],{"class":129},[123,142181,142182],{"class":125,"line":156},[123,142183,171],{"class":129},[19,142185,140819],{},[113,142187,142188],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,142189,142190,142196,142206],{"__ignoreMap":118},[123,142191,142192,142194],{"class":125,"line":126},[123,142193,132788],{"class":337},[123,142195,137],{"class":129},[123,142197,142198,142200,142202,142204],{"class":125,"line":140},[123,142199,133420],{"class":164},[123,142201,147],{"class":129},[123,142203,26163],{"class":164},[123,142205,3760],{"class":129},[123,142207,142208],{"class":125,"line":156},[123,142209,171],{"class":129},[26,142211,142212],{},[29,142213,142214],{},"左侧focus模块制作",[3929,142216],{"style":128796,"src":142217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142219,140779],{},[113,142221,142222],{"className":128940,"code":130263,"language":128942,"meta":118,"style":118},[120,142223,142224,142232,142242,142252],{"__ignoreMap":118},[123,142225,142226,142228,142230],{"class":125,"line":126},[123,142227,56224],{"class":53707},[123,142229,64302],{"class":337},[123,142231,137],{"class":129},[123,142233,142234,142236,142238,142240],{"class":125,"line":140},[123,142235,130278],{"class":164},[123,142237,147],{"class":129},[123,142239,57292],{"class":164},[123,142241,3760],{"class":129},[123,142243,142244,142246,142248,142250],{"class":125,"line":156},[123,142245,73198],{"class":164},[123,142247,147],{"class":129},[123,142249,57140],{"class":164},[123,142251,3760],{"class":129},[123,142253,142254],{"class":125,"line":168},[123,142255,171],{"class":129},[19,142257,140819],{},[113,142259,142260],{"className":128940,"code":130263,"language":128942,"meta":118,"style":118},[120,142261,142262,142270,142280,142290],{"__ignoreMap":118},[123,142263,142264,142266,142268],{"class":125,"line":126},[123,142265,56224],{"class":53707},[123,142267,64302],{"class":337},[123,142269,137],{"class":129},[123,142271,142272,142274,142276,142278],{"class":125,"line":140},[123,142273,130278],{"class":164},[123,142275,147],{"class":129},[123,142277,57292],{"class":164},[123,142279,3760],{"class":129},[123,142281,142282,142284,142286,142288],{"class":125,"line":156},[123,142283,73198],{"class":164},[123,142285,147],{"class":129},[123,142287,57140],{"class":164},[123,142289,3760],{"class":129},[123,142291,142292],{"class":125,"line":168},[123,142293,171],{"class":129},[19,142295,142296],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,142298,142299],{"start":140},[29,142300,142301],{},"右侧newsflash模块制作",[3929,142303],{"style":128796,"src":142304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142306,142307],{},"右侧的模块 分为上中下三个盒子",[19,142309,142310],{},"结构代码：",[113,142312,142313],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,142314,142315],{"__ignoreMap":118},[123,142316,142317,142319,142321,142323,142325,142327,142329,142331,142333,142335,142337,142339],{"class":125,"line":126},[123,142318,3509],{"class":129},[123,142320,3929],{"class":53707},[123,142322,57642],{"class":337},[123,142324,134],{"class":129},[123,142326,136457],{"class":143},[123,142328,57650],{"class":337},[123,142330,134],{"class":129},[123,142332,136464],{"class":143},[123,142334,136467],{"class":337},[123,142336,134],{"class":129},[123,142338,136472],{"class":143},[123,142340,53714],{"class":129},[19,142342,142343,142344,142347],{},"1 号盒子为 ",[120,142345,142346],{},"news"," 新闻模块 高度为 165px",[3929,142349],{"style":128796,"src":142350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142352,142353,142354,142357,142358],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[120,142355,142356],{},"news-hd","，下面是 ",[120,142359,142360],{},"news-bd",[19,142362,142310],{},[113,142364,142365],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,142366,142367,142371,142385,142389],{"__ignoreMap":118},[123,142368,142369],{"class":125,"line":126},[123,142370,133051],{"class":2673},[123,142372,142373,142375,142377,142379,142381,142383],{"class":125,"line":140},[123,142374,3509],{"class":129},[123,142376,54016],{"class":53707},[123,142378,55889],{"class":337},[123,142380,134],{"class":129},[123,142382,133064],{"class":143},[123,142384,53714],{"class":129},[123,142386,142387],{"class":125,"line":156},[123,142388,133071],{"class":129},[123,142390,142391,142393,142395],{"class":125,"line":168},[123,142392,54190],{"class":129},[123,142394,54016],{"class":53707},[123,142396,53714],{"class":129},[19,142398,142399],{},"样式代码：",[113,142401,142402],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,142403,142404,142408,142422,142426],{"__ignoreMap":118},[123,142405,142406],{"class":125,"line":126},[123,142407,133051],{"class":2673},[123,142409,142410,142412,142414,142416,142418,142420],{"class":125,"line":140},[123,142411,3509],{"class":129},[123,142413,54016],{"class":53707},[123,142415,55889],{"class":337},[123,142417,134],{"class":129},[123,142419,133064],{"class":143},[123,142421,53714],{"class":129},[123,142423,142424],{"class":125,"line":156},[123,142425,133071],{"class":129},[123,142427,142428,142430,142432],{"class":125,"line":168},[123,142429,54190],{"class":129},[123,142431,54016],{"class":53707},[123,142433,53714],{"class":129},[19,142435,142436,142437,142439],{},"上面是",[120,142438,142356],{},"，设置高度是 33px，设置下边框",[3606,142441,142442,142448],{},[29,142443,142444,142445,142447],{},"里面放一个",[120,142446,25337],{}," 标题",[29,142449,142450,142451,142453,142454,142456],{},"放一个a",[120,142452,105084],{},"，内容是 更多，然后让 ",[120,142455,2846],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142458,142310],{},[113,142460,142461],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,142462,142463,142471,142481,142491],{"__ignoreMap":118},[123,142464,142465,142467,142469],{"class":125,"line":126},[123,142466,54016],{"class":53707},[123,142468,139941],{"class":337},[123,142470,137],{"class":129},[123,142472,142473,142475,142477,142479],{"class":125,"line":140},[123,142474,139948],{"class":164},[123,142476,147],{"class":129},[123,142478,1629],{"class":143},[123,142480,3760],{"class":129},[123,142482,142483,142485,142487,142489],{"class":125,"line":156},[123,142484,130556],{"class":164},[123,142486,147],{"class":129},[123,142488,63271],{"class":164},[123,142490,3760],{"class":129},[123,142492,142493],{"class":125,"line":168},[123,142494,171],{"class":129},[19,142496,142399],{},[113,142498,142499],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,142500,142501,142509,142519,142529],{"__ignoreMap":118},[123,142502,142503,142505,142507],{"class":125,"line":126},[123,142504,54016],{"class":53707},[123,142506,139941],{"class":337},[123,142508,137],{"class":129},[123,142510,142511,142513,142515,142517],{"class":125,"line":140},[123,142512,139948],{"class":164},[123,142514,147],{"class":129},[123,142516,1629],{"class":143},[123,142518,3760],{"class":129},[123,142520,142521,142523,142525,142527],{"class":125,"line":156},[123,142522,130556],{"class":164},[123,142524,147],{"class":129},[123,142526,63271],{"class":164},[123,142528,3760],{"class":129},[123,142530,142531],{"class":125,"line":168},[123,142532,171],{"class":129},[19,142534,142535,142536],{},"下面是",[120,142537,142360],{},[3606,142539,142540,142548],{},[29,142541,142542,142543,103411,142545,142547],{},"里面包含 ",[120,142544,3606],{},[120,142546,29],{}," 还有链接",[29,142549,142020,142550,142552,142553,142555,142556,142559,142560],{},[120,142551,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[120,142554,133606],{}," 2.设置 ",[120,142557,142558],{},"white-space: nowrap;"," 3. 设置 ",[120,142561,142562],{},"text-overflow: ellipsis;",[19,142564,142310],{},[113,142566,142568],{"className":128940,"code":142567,"language":128942,"meta":118,"style":118},"div {\n  overflow: hidden;\n}\n",[120,142569,142570,142576,142587],{"__ignoreMap":118},[123,142571,142572,142574],{"class":125,"line":126},[123,142573,54016],{"class":53707},[123,142575,137],{"class":129},[123,142577,142578,142581,142583,142585],{"class":125,"line":140},[123,142579,142580],{"class":164},"  overflow",[123,142582,147],{"class":129},[123,142584,64116],{"class":164},[123,142586,3760],{"class":129},[123,142588,142589],{"class":125,"line":156},[123,142590,171],{"class":129},[19,142592,142399],{},[113,142594,142595],{"className":128940,"code":142567,"language":128942,"meta":118,"style":118},[120,142596,142597,142603,142613],{"__ignoreMap":118},[123,142598,142599,142601],{"class":125,"line":126},[123,142600,54016],{"class":53707},[123,142602,137],{"class":129},[123,142604,142605,142607,142609,142611],{"class":125,"line":140},[123,142606,142580],{"class":164},[123,142608,147],{"class":129},[123,142610,64116],{"class":164},[123,142612,3760],{"class":129},[123,142614,142615],{"class":125,"line":156},[123,142616,171],{"class":129},[19,142618,142619,142620,142623],{},"2 号盒子为 ",[120,142621,142622],{},"lifeservice"," 生活服务模块 高度为 209px",[3929,142625],{"style":128796,"src":142626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3606,142628,142629,142632,142642,142666,142677],{},[29,142630,142631],{},"设置边框（左右下边框）",[29,142633,142634,142635,142638,142639,142641],{},"里面的内容 是 ",[120,142636,142637],{},"ul > 12*li","，给",[120,142640,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,142643,142644,142645],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3606,142646,142647,142652,142661],{},[29,142648,142649,142651],{},[120,142650,142622],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,142653,142654,142655,142657,142658,142660],{},"可以让 ",[120,142656,142622],{}," 里面的 ",[120,142659,3606],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,142662,142663,142665],{},[120,142664,142622],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,142667,118855,142668,142670,142671,142673,142674,142676],{},[120,142669,29],{}," 里面放一个 ",[120,142672,3047],{},"（里面放图标），下面的文本用 ",[120,142675,19],{}," 标签包裹",[29,142678,141440,142679,142681,142682,142684,142685,141474,142687,142690],{},[120,142680,3047],{}," 设置 24px宽和28px的高（注意 ",[120,142683,3047],{}," 是行内元素， 转成行内块），给 ",[120,142686,29],{},[120,142688,142689],{},"text-align:center"," 让里面内容居中显示",[19,142692,142310],{},[113,142694,142696],{"className":128940,"code":142695,"language":128942,"meta":118,"style":118},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[120,142697,142698,142716,142721,142731],{"__ignoreMap":118},[123,142699,142700,142702,142704,142706,142708,142710,142712,142714],{"class":125,"line":126},[123,142701,123],{"class":53707},[123,142703,251],{"class":129},[123,142705,2846],{"class":53707},[123,142707,251],{"class":129},[123,142709,25980],{"class":53707},[123,142711,251],{"class":129},[123,142713,2759],{"class":53707},[123,142715,137],{"class":129},[123,142717,142718],{"class":125,"line":140},[123,142719,142720],{"class":2673},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[123,142722,142723,142725,142727,142729],{"class":125,"line":156},[123,142724,130556],{"class":164},[123,142726,147],{"class":129},[123,142728,130618],{"class":164},[123,142730,3760],{"class":129},[123,142732,142733],{"class":125,"line":168},[123,142734,171],{"class":129},[19,142736,142399],{},[113,142738,142739],{"className":128940,"code":142695,"language":128942,"meta":118,"style":118},[120,142740,142741,142759,142763,142773],{"__ignoreMap":118},[123,142742,142743,142745,142747,142749,142751,142753,142755,142757],{"class":125,"line":126},[123,142744,123],{"class":53707},[123,142746,251],{"class":129},[123,142748,2846],{"class":53707},[123,142750,251],{"class":129},[123,142752,25980],{"class":53707},[123,142754,251],{"class":129},[123,142756,2759],{"class":53707},[123,142758,137],{"class":129},[123,142760,142761],{"class":125,"line":140},[123,142762,142720],{"class":2673},[123,142764,142765,142767,142769,142771],{"class":125,"line":156},[123,142766,130556],{"class":164},[123,142768,147],{"class":129},[123,142770,130618],{"class":164},[123,142772,3760],{"class":129},[123,142774,142775],{"class":125,"line":168},[123,142776,171],{"class":129},[19,142778,142779,142780,142783],{},"3 号盒子为 ",[120,142781,142782],{},"bargain"," 特价商品",[3606,142785,142786],{},[29,142787,142788],{},"这个比较简单，直接插入一张图片即可",[19,142790,142310],{},[113,142792,142793],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,142794,142795],{"__ignoreMap":118},[123,142796,142797,142799,142801,142803,142805,142807,142809,142811,142813,142815,142817,142819],{"class":125,"line":126},[123,142798,3509],{"class":129},[123,142800,3929],{"class":53707},[123,142802,57642],{"class":337},[123,142804,134],{"class":129},[123,142806,136457],{"class":143},[123,142808,57650],{"class":337},[123,142810,134],{"class":129},[123,142812,136464],{"class":143},[123,142814,136467],{"class":337},[123,142816,134],{"class":129},[123,142818,136472],{"class":143},[123,142820,53714],{"class":129},[19,142822,142399],{},[113,142824,142825],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,142826,142827],{"__ignoreMap":118},[123,142828,142829,142831,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851],{"class":125,"line":126},[123,142830,3509],{"class":129},[123,142832,3929],{"class":53707},[123,142834,57642],{"class":337},[123,142836,134],{"class":129},[123,142838,136457],{"class":143},[123,142840,57650],{"class":337},[123,142842,134],{"class":129},[123,142844,136464],{"class":143},[123,142846,136467],{"class":337},[123,142848,134],{"class":129},[123,142850,136472],{"class":143},[123,142852,53714],{"class":129},[2587,142854,142856],{"id":142855},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3929,142858],{"style":128796,"src":142859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142861,142862,142863,142866],{},"大盒子 ",[120,142864,142865],{},"recom"," 推荐模块 recommend",[3606,142868,142869],{},[29,142870,142871,142872,142874,142875,142878],{},"给这个 ",[120,142873,142865],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[120,142876,142877],{},"#ebebeb","），设置距离上边 12px",[19,142880,142310],{},[113,142882,142884],{"className":128940,"code":142883,"language":128942,"meta":118,"style":118},"div {\n  background-color: #f0f0f0;\n}\n",[120,142885,142886,142892,142903],{"__ignoreMap":118},[123,142887,142888,142890],{"class":125,"line":126},[123,142889,54016],{"class":53707},[123,142891,137],{"class":129},[123,142893,142894,142896,142898,142901],{"class":125,"line":140},[123,142895,73278],{"class":164},[123,142897,147],{"class":129},[123,142899,142900],{"class":164},"#f0f0f0",[123,142902,3760],{"class":129},[123,142904,142905],{"class":125,"line":156},[123,142906,171],{"class":129},[19,142908,142399],{},[113,142910,142911],{"className":128940,"code":142883,"language":128942,"meta":118,"style":118},[120,142912,142913,142919,142929],{"__ignoreMap":118},[123,142914,142915,142917],{"class":125,"line":126},[123,142916,54016],{"class":53707},[123,142918,137],{"class":129},[123,142920,142921,142923,142925,142927],{"class":125,"line":140},[123,142922,73278],{"class":164},[123,142924,147],{"class":129},[123,142926,142900],{"class":164},[123,142928,3760],{"class":129},[123,142930,142931],{"class":125,"line":156},[123,142932,171],{"class":129},[19,142934,142935],{},"里面包含 2 个盒子， 浮动即可",[19,142937,142310],{},[113,142939,142940],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,142941,142942,142948,142958],{"__ignoreMap":118},[123,142943,142944,142946],{"class":125,"line":126},[123,142945,132788],{"class":337},[123,142947,137],{"class":129},[123,142949,142950,142952,142954,142956],{"class":125,"line":140},[123,142951,133420],{"class":164},[123,142953,147],{"class":129},[123,142955,26163],{"class":164},[123,142957,3760],{"class":129},[123,142959,142960],{"class":125,"line":156},[123,142961,171],{"class":129},[19,142963,142964,142965],{},"1 号盒子 ",[120,142966,142967],{},"recom_hd",[3606,142969,142970,142973],{},[29,142971,142972],{},"设置宽度205px，高度163px",[29,142974,142444,142975,142977],{},[120,142976,3929],{},"标签，插入图片即可",[19,142979,142310],{},[113,142981,142982],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,142983,142984],{"__ignoreMap":118},[123,142985,142986,142988,142990,142992,142994,142996,142998,143000,143002,143004,143006,143008],{"class":125,"line":126},[123,142987,3509],{"class":129},[123,142989,3929],{"class":53707},[123,142991,57642],{"class":337},[123,142993,134],{"class":129},[123,142995,136457],{"class":143},[123,142997,57650],{"class":337},[123,142999,134],{"class":129},[123,143001,136464],{"class":143},[123,143003,136467],{"class":337},[123,143005,134],{"class":129},[123,143007,136472],{"class":143},[123,143009,53714],{"class":129},[19,143011,142399],{},[113,143013,143014],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,143015,143016],{"__ignoreMap":118},[123,143017,143018,143020,143022,143024,143026,143028,143030,143032,143034,143036,143038,143040],{"class":125,"line":126},[123,143019,3509],{"class":129},[123,143021,3929],{"class":53707},[123,143023,57642],{"class":337},[123,143025,134],{"class":129},[123,143027,136457],{"class":143},[123,143029,57650],{"class":337},[123,143031,134],{"class":129},[123,143033,136464],{"class":143},[123,143035,136467],{"class":337},[123,143037,134],{"class":129},[123,143039,136472],{"class":143},[123,143041,53714],{"class":129},[19,143043,143044,143045,143048],{},"2 号盒子 ",[120,143046,143047],{},"recom_bd"," ，注意里面的小竖线",[3606,143050,143051,143062,143065,143070,143075],{},[29,143052,143053,143054,143056,143057,143059,143060],{},"右侧结构里面放 ",[120,143055,3606],{}," 包含 4个 ",[120,143058,29],{},"，每个li里面包含一个",[120,143061,3929],{},[29,143063,143064],{},"直接利用切片工具把里面的内容当成一张图片",[29,143066,141440,143067,143069],{},[120,143068,29],{}," 设置浮动",[29,143071,141440,143072,143074],{},[120,143073,3929],{}," 设置宽高，宽度 248px，高度 163px",[29,143076,143077,143078,142638,143081,143083,143084,143086,143087],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[120,143079,143080],{},"top 10px",[120,143082,29],{},"设置相对定位（注意，最后一个",[120,143085,29],{},"不用设置伪元素），可以利用 ",[120,143088,143089],{},"nth-child(-n+3){...}",[19,143091,142310],{},[113,143093,143094],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,143095,143096,143104,143114,143124],{"__ignoreMap":118},[123,143097,143098,143100,143102],{"class":125,"line":126},[123,143099,54016],{"class":53707},[123,143101,139941],{"class":337},[123,143103,137],{"class":129},[123,143105,143106,143108,143110,143112],{"class":125,"line":140},[123,143107,139948],{"class":164},[123,143109,147],{"class":129},[123,143111,1629],{"class":143},[123,143113,3760],{"class":129},[123,143115,143116,143118,143120,143122],{"class":125,"line":156},[123,143117,130556],{"class":164},[123,143119,147],{"class":129},[123,143121,63271],{"class":164},[123,143123,3760],{"class":129},[123,143125,143126],{"class":125,"line":168},[123,143127,171],{"class":129},[19,143129,142399],{},[113,143131,143132],{"className":128940,"code":140782,"language":128942,"meta":118,"style":118},[120,143133,143134,143142,143152,143162],{"__ignoreMap":118},[123,143135,143136,143138,143140],{"class":125,"line":126},[123,143137,54016],{"class":53707},[123,143139,139941],{"class":337},[123,143141,137],{"class":129},[123,143143,143144,143146,143148,143150],{"class":125,"line":140},[123,143145,139948],{"class":164},[123,143147,147],{"class":129},[123,143149,1629],{"class":143},[123,143151,3760],{"class":129},[123,143153,143154,143156,143158,143160],{"class":125,"line":156},[123,143155,130556],{"class":164},[123,143157,147],{"class":129},[123,143159,63271],{"class":164},[123,143161,3760],{"class":129},[123,143163,143164],{"class":125,"line":168},[123,143165,171],{"class":129},[2587,143167,143169],{"id":143168},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3929,143171],{"style":128796,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143174,143175],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143177,143178],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143180,143181,143184],{},[120,143182,143183],{},"box_hd"," 制作",[19,143186,142964,143187,143189],{},[120,143188,143183],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3929,143191],{"style":128796,"src":143192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3606,143194,143195,143200,143205,143208],{},[29,143196,143197,143199],{},[120,143198,143183],{}," 给 30px 的高度，2个像素的下边框",[29,143201,143202,143203],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[120,143204,141451],{},[29,143206,143207],{},"左侧盒左浮动，右侧盒子右浮动",[29,143209,143210,143212,143213,143215],{},[120,143211,2846],{},"标签之间的距离用左右的",[120,143214,33298],{},"撑开即可",[19,143217,143218],{},"结构代码",[113,143220,143221],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,143222,143223,143229,143239],{"__ignoreMap":118},[123,143224,143225,143227],{"class":125,"line":126},[123,143226,132788],{"class":337},[123,143228,137],{"class":129},[123,143230,143231,143233,143235,143237],{"class":125,"line":140},[123,143232,133420],{"class":164},[123,143234,147],{"class":129},[123,143236,26163],{"class":164},[123,143238,3760],{"class":129},[123,143240,143241],{"class":125,"line":156},[123,143242,171],{"class":129},[19,143244,143245],{},"样式代码",[113,143247,143248],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,143249,143250,143256,143266],{"__ignoreMap":118},[123,143251,143252,143254],{"class":125,"line":126},[123,143253,132788],{"class":337},[123,143255,137],{"class":129},[123,143257,143258,143260,143262,143264],{"class":125,"line":140},[123,143259,133420],{"class":164},[123,143261,147],{"class":129},[123,143263,26163],{"class":164},[123,143265,3760],{"class":129},[123,143267,143268],{"class":125,"line":156},[123,143269,171],{"class":129},[19,143271,143272,143184],{},[120,143273,143274],{},"box_bd",[19,143276,143277],{},"2 号盒子 box_bd，不要给高度",[3929,143279],{"style":128796,"src":143280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143282,143283],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143285,143286],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143288,143289],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3606,143291,143292,143304,143320],{},[29,143293,143294,143296,143297,143300,143301,143303],{},[120,143295,143274],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[120,143298,143299],{},"tab_content","，在",[120,143302,143299],{}," 里面包裹tab选项卡对应的内容",[29,143305,143306,143307,143310,143311,143313,143314,143316,143317,143319],{},"内容被一个大盒子包裹（",[120,143308,143309],{},"tab_list_item","），里面是 ",[120,143312,3606],{}," 包裹 5个 ",[120,143315,29],{},"，每个",[120,143318,29],{},"设置对应的宽度，然后设置浮动",[29,143321,143322,143323,143325,143326,143328,143329],{},"而这5个",[120,143324,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[120,143327,29],{},"设置",[3606,143330,143331,143349,143352],{},[29,143332,143333,143334,143336,143337,143339,143340,143342,143343,143345,143346,143348],{},"第一个小 ",[120,143335,29],{}," 分为上下结构，上面是 ",[120,143338,3606],{}," 包裹 ",[120,143341,29],{}," ，",[120,143344,29],{},"里面包裹 ",[120,143347,2846],{},"，下面插入一张图片",[29,143350,143351],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,143353,143354,143355,143357,143358,143360,143361,143363],{},"后面的小 ",[120,143356,29],{}," 里面先放一个",[120,143359,2846],{},"标签，然后在",[120,143362,2846],{},"标签里面插入图片即可",[19,143365,143218],{},[113,143367,143368],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,143369,143370],{"__ignoreMap":118},[123,143371,143372,143374,143376,143378,143380,143382,143384,143386,143388,143390,143392,143394],{"class":125,"line":126},[123,143373,3509],{"class":129},[123,143375,3929],{"class":53707},[123,143377,57642],{"class":337},[123,143379,134],{"class":129},[123,143381,136457],{"class":143},[123,143383,57650],{"class":337},[123,143385,134],{"class":129},[123,143387,136464],{"class":143},[123,143389,136467],{"class":337},[123,143391,134],{"class":129},[123,143393,136472],{"class":143},[123,143395,53714],{"class":129},[19,143397,143245],{},[113,143399,143400],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,143401,143402],{"__ignoreMap":118},[123,143403,143404,143406,143408,143410,143412,143414,143416,143418,143420,143422,143424,143426],{"class":125,"line":126},[123,143405,3509],{"class":129},[123,143407,3929],{"class":53707},[123,143409,57642],{"class":337},[123,143411,134],{"class":129},[123,143413,136457],{"class":143},[123,143415,57650],{"class":337},[123,143417,134],{"class":129},[123,143419,136464],{"class":143},[123,143421,136467],{"class":337},[123,143423,134],{"class":129},[123,143425,136472],{"class":143},[123,143427,53714],{"class":129},[19,143429,143430],{},"tab栏切换需求！！！！！！介绍：",[3929,143432],{"style":128796,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3606,143435,143436,143444,143450,143453],{},[29,143437,143438,143441,143442],{},[120,143439,143440],{},"tab","栏的布局是 ",[120,143443,141451],{},[29,143445,143446,143447,143449],{},"有多少个",[120,143448,143440],{},"选项卡，那么对应就有多少个内容",[29,143451,143452],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,143454,143455,143456,143459,143460,143462,143463,143465],{},"等后面我们学习了",[120,143457,143458],{},"js","之后，我们就会配合",[120,143461,143458],{},"来实现，",[120,143464,143440],{},"栏的切换",[14,143467,143469],{"id":143468},"_162-列表制作","16.2 列表制作",[2587,143471,143473],{"id":143472},"_1621-准备工作","16.2.1 准备工作",[3606,143475,143476,143479,143482,143485],{},[29,143477,143478],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,143480,143481],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,143483,143484],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,143486,143487],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[2587,143489,143491,143492,103411,143494,143496],{"id":143490},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[120,143493,133945],{},[120,143495,56116],{}," 修改",[3929,143498],{"style":128796,"src":143499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3606,143501,143502],{},[29,143503,143504],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143506,142310],{},[113,143508,143509],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,143510,143511,143515,143529,143533,143547,143551,143565,143569,143583,143587],{"__ignoreMap":118},[123,143512,143513],{"class":125,"line":126},[123,143514,134379],{"class":2673},[123,143516,143517,143519,143521,143523,143525,143527],{"class":125,"line":140},[123,143518,134384],{"class":337},[123,143520,82205],{"class":129},[123,143522,131300],{"class":164},[123,143524,147],{"class":129},[123,143526,134393],{"class":164},[123,143528,131870],{"class":129},[123,143530,143531],{"class":125,"line":156},[123,143532,134400],{"class":2673},[123,143534,143535,143537,143539,143541,143543,143545],{"class":125,"line":168},[123,143536,134405],{"class":337},[123,143538,82205],{"class":129},[123,143540,131300],{"class":164},[123,143542,147],{"class":129},[123,143544,57167],{"class":164},[123,143546,131870],{"class":129},[123,143548,143549],{"class":125,"line":268},[123,143550,134420],{"class":2673},[123,143552,143553,143555,143557,143559,143561,143563],{"class":125,"line":291},[123,143554,134425],{"class":337},[123,143556,82205],{"class":129},[123,143558,131300],{"class":164},[123,143560,147],{"class":129},[123,143562,57234],{"class":164},[123,143564,131870],{"class":129},[123,143566,143567],{"class":125,"line":300},[123,143568,134440],{"class":2673},[123,143570,143571,143573,143575,143577,143579,143581],{"class":125,"line":305},[123,143572,134445],{"class":337},[123,143574,82205],{"class":129},[123,143576,131300],{"class":164},[123,143578,147],{"class":129},[123,143580,88629],{"class":164},[123,143582,131870],{"class":129},[123,143584,143585],{"class":125,"line":316},[123,143586,134460],{"class":2673},[123,143588,143589,143591,143593,143595,143597,143599],{"class":125,"line":673},[123,143590,134465],{"class":337},[123,143592,82205],{"class":129},[123,143594,131300],{"class":164},[123,143596,147],{"class":129},[123,143598,134474],{"class":164},[123,143600,131870],{"class":129},[19,143602,142399],{},[113,143604,143605],{"className":128940,"code":134372,"language":128942,"meta":118,"style":118},[120,143606,143607,143611,143625,143629,143643,143647,143661,143665,143679,143683],{"__ignoreMap":118},[123,143608,143609],{"class":125,"line":126},[123,143610,134379],{"class":2673},[123,143612,143613,143615,143617,143619,143621,143623],{"class":125,"line":140},[123,143614,134384],{"class":337},[123,143616,82205],{"class":129},[123,143618,131300],{"class":164},[123,143620,147],{"class":129},[123,143622,134393],{"class":164},[123,143624,131870],{"class":129},[123,143626,143627],{"class":125,"line":156},[123,143628,134400],{"class":2673},[123,143630,143631,143633,143635,143637,143639,143641],{"class":125,"line":168},[123,143632,134405],{"class":337},[123,143634,82205],{"class":129},[123,143636,131300],{"class":164},[123,143638,147],{"class":129},[123,143640,57167],{"class":164},[123,143642,131870],{"class":129},[123,143644,143645],{"class":125,"line":268},[123,143646,134420],{"class":2673},[123,143648,143649,143651,143653,143655,143657,143659],{"class":125,"line":291},[123,143650,134425],{"class":337},[123,143652,82205],{"class":129},[123,143654,131300],{"class":164},[123,143656,147],{"class":129},[123,143658,57234],{"class":164},[123,143660,131870],{"class":129},[123,143662,143663],{"class":125,"line":300},[123,143664,134440],{"class":2673},[123,143666,143667,143669,143671,143673,143675,143677],{"class":125,"line":305},[123,143668,134445],{"class":337},[123,143670,82205],{"class":129},[123,143672,131300],{"class":164},[123,143674,147],{"class":129},[123,143676,88629],{"class":164},[123,143678,131870],{"class":129},[123,143680,143681],{"class":125,"line":316},[123,143682,134460],{"class":2673},[123,143684,143685,143687,143689,143691,143693,143695],{"class":125,"line":673},[123,143686,134465],{"class":337},[123,143688,82205],{"class":129},[123,143690,131300],{"class":164},[123,143692,147],{"class":129},[123,143694,134474],{"class":164},[123,143696,131870],{"class":129},[3606,143698,143699,143710],{},[29,143700,143701,143702,143705,143706,103411,143708],{},"1 号盒子左侧浮动 ",[120,143703,143704],{},"sk_list"," 里面包含 ",[120,143707,3606],{},[120,143709,29],{},[29,143711,143712,143713,143705,143716,103411,143718],{},"2 号盒子左侧浮动 ",[120,143714,143715],{},"sk_con",[120,143717,3606],{},[120,143719,29],{},[19,143721,142310],{},[113,143723,143724],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,143725,143726,143732,143742],{"__ignoreMap":118},[123,143727,143728,143730],{"class":125,"line":126},[123,143729,132788],{"class":337},[123,143731,137],{"class":129},[123,143733,143734,143736,143738,143740],{"class":125,"line":140},[123,143735,133420],{"class":164},[123,143737,147],{"class":129},[123,143739,26163],{"class":164},[123,143741,3760],{"class":129},[123,143743,143744],{"class":125,"line":156},[123,143745,171],{"class":129},[19,143747,142399],{},[113,143749,143750],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,143751,143752,143758,143768],{"__ignoreMap":118},[123,143753,143754,143756],{"class":125,"line":126},[123,143755,132788],{"class":337},[123,143757,137],{"class":129},[123,143759,143760,143762,143764,143766],{"class":125,"line":140},[123,143761,133420],{"class":164},[123,143763,147],{"class":129},[123,143765,26163],{"class":164},[123,143767,3760],{"class":129},[123,143769,143770],{"class":125,"line":156},[123,143771,171],{"class":129},[2587,143773,143775,143776],{"id":143774},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[120,143777,143778],{},"sk_container",[3929,143780],{"style":128796,"src":143781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3606,143783,143784,143789],{},[29,143785,142964,143786,143788],{},[120,143787,143778],{}," 给宽度 1200，不要给高度",[29,143790,143791],{},"一定不要忘记清除浮动",[19,143793,142310],{},[113,143795,143796],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,143797,143798,143804,143814],{"__ignoreMap":118},[123,143799,143800,143802],{"class":125,"line":126},[123,143801,132788],{"class":337},[123,143803,137],{"class":129},[123,143805,143806,143808,143810,143812],{"class":125,"line":140},[123,143807,133420],{"class":164},[123,143809,147],{"class":129},[123,143811,26163],{"class":164},[123,143813,3760],{"class":129},[123,143815,143816],{"class":125,"line":156},[123,143817,171],{"class":129},[26,143819,143820],{},[29,143821,143822],{},"sk_hd制作",[3606,143824,143825],{},[29,143826,143044,143827,143830],{},[120,143828,143829],{},"sk_hd"," ，插入图片即可",[19,143832,142310],{},[113,143834,143835],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,143836,143837],{"__ignoreMap":118},[123,143838,143839,143841,143843,143845,143847,143849,143851,143853,143855,143857,143859,143861],{"class":125,"line":126},[123,143840,3509],{"class":129},[123,143842,3929],{"class":53707},[123,143844,57642],{"class":337},[123,143846,134],{"class":129},[123,143848,136457],{"class":143},[123,143850,57650],{"class":337},[123,143852,134],{"class":129},[123,143854,136464],{"class":143},[123,143856,136467],{"class":337},[123,143858,134],{"class":129},[123,143860,136472],{"class":143},[123,143862,53714],{"class":129},[26,143864,143865],{"start":140},[29,143866,143867],{},"sk_bd制作",[3606,143869,143870],{},[29,143871,143872,143873,143876,143877,103411,143879,143881],{},"3 号盒子 ",[120,143874,143875],{},"sk_bd"," ，里面包含很多的 ",[120,143878,3606],{},[120,143880,29],{},[3606,143882,143883,143892],{},[29,143884,143885,143886,143888,143889,143891],{},"当鼠标移入到 ",[120,143887,29],{}," 上面的时候显示红色的边框，在这里先给 ",[120,143890,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,143893,143894,143895,143897,143898,143900,143901,143904,143905,143907],{},"由于给每个 ",[120,143896,29],{}," 都设置了外边距，导致一行的最后一个 ",[120,143899,29],{}," 掉了下来，在这里我们利用 ",[120,143902,143903],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[120,143906,29],{},"，去掉外边距就好了",[19,143909,142310],{},[113,143911,143912],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,143913,143914,143920,143932],{"__ignoreMap":118},[123,143915,143916,143918],{"class":125,"line":126},[123,143917,54016],{"class":53707},[123,143919,137],{"class":129},[123,143921,143922,143924,143926,143928,143930],{"class":125,"line":140},[123,143923,72870],{"class":164},[123,143925,147],{"class":129},[123,143927,2799],{"class":164},[123,143929,53961],{"class":164},[123,143931,3760],{"class":129},[123,143933,143934],{"class":125,"line":156},[123,143935,171],{"class":129},[19,143937,142399],{},[113,143939,143940],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,143941,143942,143948,143960],{"__ignoreMap":118},[123,143943,143944,143946],{"class":125,"line":126},[123,143945,54016],{"class":53707},[123,143947,137],{"class":129},[123,143949,143950,143952,143954,143956,143958],{"class":125,"line":140},[123,143951,72870],{"class":164},[123,143953,147],{"class":129},[123,143955,2799],{"class":164},[123,143957,53961],{"class":164},[123,143959,3760],{"class":129},[123,143961,143962],{"class":125,"line":156},[123,143963,171],{"class":129},[14,143965,143967],{"id":143966},"_163-注册页面制作","16.3 注册页面制作",[3929,143969],{"style":128796,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143972,143973,143975],{},[2759,143974,11457],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3929,143977],{"style":128796,"src":143978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[2587,143980,143982],{"id":143981},"_1631-准备工作","16.3.1 准备工作",[3606,143984,143985,143988],{},[29,143986,143987],{},"创建register.html，引入 base.css，引入favicon图标",[29,143989,143990],{},"创建register.css ，在html页面进行引入",[2587,143992,143994,143995,143997],{"id":143993},"_1632-header-头部实现","16.3.2 ",[120,143996,133945],{}," 头部实现",[3606,143999,144000,144003],{},[29,144001,144002],{},"整个内容用 版心 进行包裹",[29,144004,144005],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144007,142310],{},[113,144009,144010],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,144011,144012],{"__ignoreMap":118},[123,144013,144014,144016,144018,144020,144022,144024,144026,144028,144030,144032,144034,144036],{"class":125,"line":126},[123,144015,3509],{"class":129},[123,144017,3929],{"class":53707},[123,144019,57642],{"class":337},[123,144021,134],{"class":129},[123,144023,136457],{"class":143},[123,144025,57650],{"class":337},[123,144027,134],{"class":129},[123,144029,136464],{"class":143},[123,144031,136467],{"class":337},[123,144033,134],{"class":129},[123,144035,136472],{"class":143},[123,144037,53714],{"class":129},[19,144039,142399],{},[113,144041,144042],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,144043,144044],{"__ignoreMap":118},[123,144045,144046,144048,144050,144052,144054,144056,144058,144060,144062,144064,144066,144068],{"class":125,"line":126},[123,144047,3509],{"class":129},[123,144049,3929],{"class":53707},[123,144051,57642],{"class":337},[123,144053,134],{"class":129},[123,144055,136457],{"class":143},[123,144057,57650],{"class":337},[123,144059,134],{"class":129},[123,144061,136464],{"class":143},[123,144063,136467],{"class":337},[123,144065,134],{"class":129},[123,144067,136472],{"class":143},[123,144069,53714],{"class":129},[2587,144071,144073,144074,144077],{"id":144072},"_1633-registerarea-主体模块实现","16.3.3 ",[120,144075,144076],{},"registerarea"," 主体模块实现",[3929,144079],{"style":128796,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144082,144083],{},"整个大盒子 高度为 522px，设置4个边框",[19,144085,142310],{},[113,144087,144088],{"className":128940,"code":133097,"language":128942,"meta":118,"style":118},[120,144089,144090,144096,144112],{"__ignoreMap":118},[123,144091,144092,144094],{"class":125,"line":126},[123,144093,54016],{"class":53707},[123,144095,137],{"class":129},[123,144097,144098,144100,144102,144104,144106,144108,144110],{"class":125,"line":140},[123,144099,73296],{"class":164},[123,144101,147],{"class":129},[123,144103,2825],{"class":164},[123,144105,53897],{"class":133},[123,144107,53926],{"class":164},[123,144109,132332],{"class":164},[123,144111,3760],{"class":129},[123,144113,144114],{"class":125,"line":156},[123,144115,171],{"class":129},[19,144117,142399],{},[113,144119,144120],{"className":128940,"code":133097,"language":128942,"meta":118,"style":118},[120,144121,144122,144128,144144],{"__ignoreMap":118},[123,144123,144124,144126],{"class":125,"line":126},[123,144125,54016],{"class":53707},[123,144127,137],{"class":129},[123,144129,144130,144132,144134,144136,144138,144140,144142],{"class":125,"line":140},[123,144131,73296],{"class":164},[123,144133,147],{"class":129},[123,144135,2825],{"class":164},[123,144137,53897],{"class":133},[123,144139,53926],{"class":164},[123,144141,132332],{"class":164},[123,144143,3760],{"class":129},[123,144145,144146],{"class":125,"line":156},[123,144147,171],{"class":129},[19,144149,144150],{},"1号盒子 是一个 h3 标签，放标题",[3606,144152,144153],{},[29,144154,144155],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144157,142310],{},[113,144159,144160],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,144161,144162,144168,144178],{"__ignoreMap":118},[123,144163,144164,144166],{"class":125,"line":126},[123,144165,132788],{"class":337},[123,144167,137],{"class":129},[123,144169,144170,144172,144174,144176],{"class":125,"line":140},[123,144171,133420],{"class":164},[123,144173,147],{"class":129},[123,144175,26163],{"class":164},[123,144177,3760],{"class":129},[123,144179,144180],{"class":125,"line":156},[123,144181,171],{"class":129},[19,144183,142399],{},[113,144185,144186],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,144187,144188,144194,144204],{"__ignoreMap":118},[123,144189,144190,144192],{"class":125,"line":126},[123,144191,132788],{"class":337},[123,144193,137],{"class":129},[123,144195,144196,144198,144200,144202],{"class":125,"line":140},[123,144197,133420],{"class":164},[123,144199,147],{"class":129},[123,144201,26163],{"class":164},[123,144203,3760],{"class":129},[123,144205,144206],{"class":125,"line":156},[123,144207,171],{"class":129},[19,144209,144210],{},"2号盒子 里面放注册的内容",[3606,144212,144213,144216,144225,144239,144252,144255,144258,144276,144290],{},[29,144214,144215],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,144217,144218,144219,144221,144222,144224],{},"里面的内容利用 ",[120,144220,3606],{}," 包含 ",[120,144223,29],{}," 来实现的（不需要用表格）",[29,144226,141454,144227,144229,144230,144232,144233,144235,144236,144238],{},[120,144228,29],{}," 里面，左侧放 ",[120,144231,36019],{}," 标签， 中间放",[120,144234,56224],{}," 标签， 右侧放 ",[120,144237,123],{}," 提示信息",[29,144240,144241,144242,144244,144245,144247,144248,144251],{},"左侧 ",[120,144243,36019],{},"里面的文字都是右对齐，我们可以给",[120,144246,36019],{},"设置一个宽度（88px），然后利用",[120,144249,144250],{},"text-align"," 来设置右对齐",[29,144253,144254],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,144256,144257],{},"右侧 span修饰一下文字颜色",[29,144259,144260,144261],{},"提示信息的样式优化",[3606,144262,144263,144266,144269],{},[29,144264,144265],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,144267,144268],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,144270,144271,144272,144275],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[120,144273,144274],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,144277,144278,144279],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3606,144280,144281,144287],{},[29,144282,144283,144284,144286],{},"设置 ",[120,144285,25980],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,144288,144289],{},"分别设置 背景颜色",[29,144291,144292,144293,144295],{},"同意协议 和 完成注册 都是用 ",[120,144294,29],{}," 进行包裹",[19,144297,142310],{},[113,144299,144300],{"className":128940,"code":142883,"language":128942,"meta":118,"style":118},[120,144301,144302,144308,144318],{"__ignoreMap":118},[123,144303,144304,144306],{"class":125,"line":126},[123,144305,54016],{"class":53707},[123,144307,137],{"class":129},[123,144309,144310,144312,144314,144316],{"class":125,"line":140},[123,144311,73278],{"class":164},[123,144313,147],{"class":129},[123,144315,142900],{"class":164},[123,144317,3760],{"class":129},[123,144319,144320],{"class":125,"line":156},[123,144321,171],{"class":129},[19,144323,142399],{},[113,144325,144326],{"className":128940,"code":142883,"language":128942,"meta":118,"style":118},[120,144327,144328,144334,144344],{"__ignoreMap":118},[123,144329,144330,144332],{"class":125,"line":126},[123,144331,54016],{"class":53707},[123,144333,137],{"class":129},[123,144335,144336,144338,144340,144342],{"class":125,"line":140},[123,144337,73278],{"class":164},[123,144339,147],{"class":129},[123,144341,142900],{"class":164},[123,144343,3760],{"class":129},[123,144345,144346],{"class":125,"line":156},[123,144347,171],{"class":129},[2587,144349,144351],{"id":144350},"_1634-底部实现","16.3.4 底部实现",[19,144353,142310],{},[113,144355,144356],{"className":128940,"code":142883,"language":128942,"meta":118,"style":118},[120,144357,144358,144364,144374],{"__ignoreMap":118},[123,144359,144360,144362],{"class":125,"line":126},[123,144361,54016],{"class":53707},[123,144363,137],{"class":129},[123,144365,144366,144368,144370,144372],{"class":125,"line":140},[123,144367,73278],{"class":164},[123,144369,147],{"class":129},[123,144371,142900],{"class":164},[123,144373,3760],{"class":129},[123,144375,144376],{"class":125,"line":156},[123,144377,171],{"class":129},[19,144379,142399],{},[113,144381,144382],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,144383,144384,144388,144402,144406],{"__ignoreMap":118},[123,144385,144386],{"class":125,"line":126},[123,144387,133051],{"class":2673},[123,144389,144390,144392,144394,144396,144398,144400],{"class":125,"line":140},[123,144391,3509],{"class":129},[123,144393,54016],{"class":53707},[123,144395,55889],{"class":337},[123,144397,134],{"class":129},[123,144399,133064],{"class":143},[123,144401,53714],{"class":129},[123,144403,144404],{"class":125,"line":156},[123,144405,133071],{"class":129},[123,144407,144408,144410,144412],{"class":125,"line":168},[123,144409,54190],{"class":129},[123,144411,54016],{"class":53707},[123,144413,53714],{"class":129},[14,144415,144417],{"id":144416},"_164-项目总结","16.4 项目总结",[26,144419,144420,144423,144426,144429],{},[29,144421,144422],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,144424,144425],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,144427,144428],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,144430,144431],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3929,144433],{"style":128796,"src":144434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,144436,144437],{"start":268},[29,144438,144439],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3929,144441],{"style":128796,"src":144442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,144444,144445],{"start":291},[29,144446,144447],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3929,144449],{"style":128796,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[113,144452,144453],{"className":129687,"code":139097,"language":129689,"meta":118,"style":118},[120,144454,144455],{"__ignoreMap":118},[123,144456,144457,144459,144461,144463,144465,144467,144469,144471,144473,144475,144477,144479],{"class":125,"line":126},[123,144458,3509],{"class":129},[123,144460,56224],{"class":53707},[123,144462,56227],{"class":337},[123,144464,134],{"class":129},[123,144466,65100],{"class":143},[123,144468,17350],{"class":337},[123,144470,134],{"class":129},[123,144472,139118],{"class":143},[123,144474,63422],{"class":337},[123,144476,134],{"class":129},[123,144478,139125],{"class":143},[123,144480,53714],{"class":129},[26,144482,144483,144486],{"start":300},[29,144484,144485],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,144487,144488],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2526,144490,144491],{},"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":118,"searchDepth":140,"depth":140,"links":144493},[144494,144499,144506,144514],{"id":142120,"depth":140,"text":142121,"children":144495},[144496,144497,144498],{"id":142124,"depth":156,"text":142125},{"id":142855,"depth":156,"text":142856},{"id":143168,"depth":156,"text":143169},{"id":143468,"depth":140,"text":143469,"children":144500},[144501,144502,144504],{"id":143472,"depth":156,"text":143473},{"id":143490,"depth":156,"text":144503},"16.2.2 列表页 header 和 nav 修改",{"id":143774,"depth":156,"text":144505},"16.2.3 列表页主体 sk_container",{"id":143966,"depth":140,"text":143967,"children":144507},[144508,144509,144511,144513],{"id":143981,"depth":156,"text":143982},{"id":143993,"depth":156,"text":144510},"16.3.2 header 头部实现",{"id":144072,"depth":156,"text":144512},"16.3.3 registerarea 主体模块实现",{"id":144350,"depth":156,"text":144351},{"id":144416,"depth":140,"text":144417},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142112,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144521,"title":144522,"body":144523,"description":2544,"extension":2545,"meta":144631,"navigation":231,"path":144632,"seo":144633,"stem":144634,"__hash__":144635},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144524,"toc":144626},[144525,144528,144532,144535,144538,144547,144556,144560,144565,144572,144590,144593,144596,144599,144602,144605,144608,144611,144614,144617,144620,144623],[10,144526,144522],{"id":144527},"_17-web服务器与网站发布",[14,144529,144531],{"id":144530},"_171-web服务器","17.1 Web服务器",[19,144533,144534],{},"把自己网站上传到服务器上，可以让其他人访问",[3929,144536],{"style":128796,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144539,144540,144543,144544],{},[2759,144541,144542],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2759,144545,144546],{},"Web 服务器等",[19,144548,144549,144550,103411,144553,28162],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2759,144551,144552],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2759,144554,144555],{},"远程服务器",[2587,144557,144559],{"id":144558},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144561,144562],{},[2759,144563,144564],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144566,144567,144568],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2846,144569,144570],{"href":144570,"rel":144571},"http:\u002F\u002Ffree.3v.do\u002F",[26287],[3606,144573,144574,144577,144580,144587],{},[29,144575,144576],{},"去免费空间网站注册账号。",[29,144578,144579],{},"记录下主机名、用户名、密码、域名。",[29,144581,144582,144583,144586],{},"利用 ",[120,144584,144585],{},"utftp"," 软件 上传网站到远程服务器",[29,144588,144589],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144591,144592],{},"使用软件上传，对上传软件文件进行解压",[3929,144594],{"style":128796,"src":144595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3929,144597],{"style":128796,"src":144598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144600,144601],{},"输入刚刚申请的服务器账号信息：",[3929,144603],{"style":128796,"src":144604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3929,144606],{"style":128796,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3929,144609],{"style":128796,"src":144610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3929,144612],{"style":128796,"src":144613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144615,144616],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3929,144618],{"style":128796,"src":144619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144621,144622],{},"浏览器输入域名即可访问",[19,144624,144625],{},"首页一定必须是index",{"title":118,"searchDepth":140,"depth":140,"links":144627},[144628],{"id":144530,"depth":140,"text":144531,"children":144629},[144630],{"id":144558,"depth":156,"text":144559},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144522,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144637,"title":144638,"body":144639,"description":2544,"extension":2545,"meta":145566,"navigation":231,"path":145567,"seo":145568,"stem":145569,"__hash__":145570},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144640,"toc":145549},[144641,144644,144648,144651,144654,144665,144668,144672,144676,144681,144684,144687,144690,144693,144697,144723,144727,144731,144734,144737,144741,144774,144778,144781,144784,144848,144852,144856,144859,144862,144865,144869,144914,144918,144921,144951,144955,144959,144962,144965,144969,144972,145041,145044,145152,145154,145160,145164,145167,145170,145266,145269,145273,145297,145301,145304,145308,145311,145315,145318,145321,145324,145327,145331,145334,145337,145341,145345,145348,145351,145354,145357,145361,145364,145368,145371,145374,145419,145423,145427,145430,145433,145436,145468,145472,145475,145509,145513,145516,145546],[10,144642,144638],{"id":144643},"_18-2d动画与3d转换",[14,144645,144647],{"id":144646},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144649,144650],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144652,144653],{},"转换（transform）你可以简单理解为变形",[3606,144655,144656,144659,144662],{},[29,144657,144658],{},"移动：translate",[29,144660,144661],{},"旋转：rotate",[29,144663,144664],{},"缩放：scale",[3929,144666],{"style":128796,"src":144667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[2587,144669,144671],{"id":144670},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24425,144673,144675],{"id":144674},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144677,144678,144679],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2759,144680,135599],{},[3929,144682],{"style":128796,"src":144683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144685,144686],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144688,144689],{},"对于行内元素无效",[19,144691,144692],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24425,144694,144696],{"id":144695},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[113,144698,144699],{"className":128940,"code":141129,"language":128942,"meta":118,"style":118},[120,144700,144701,144707,144719],{"__ignoreMap":118},[123,144702,144703,144705],{"class":125,"line":126},[123,144704,54016],{"class":53707},[123,144706,137],{"class":129},[123,144708,144709,144711,144713,144715,144717],{"class":125,"line":140},[123,144710,72870],{"class":164},[123,144712,147],{"class":129},[123,144714,2799],{"class":164},[123,144716,53961],{"class":164},[123,144718,3760],{"class":129},[123,144720,144721],{"class":125,"line":156},[123,144722,171],{"class":129},[2587,144724,144726],{"id":144725},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24425,144728,144730],{"id":144729},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144732,144733],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3929,144735],{"style":128796,"src":144736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24425,144738,144740],{"id":144739},"_18122-旋转效果","18.1.2.2 旋转效果",[113,144742,144744],{"className":128940,"code":144743,"language":128942,"meta":118,"style":118},"div {\n  transform: rotate(45deg);\n}\n",[120,144745,144746,144752,144770],{"__ignoreMap":118},[123,144747,144748,144750],{"class":125,"line":126},[123,144749,54016],{"class":53707},[123,144751,137],{"class":129},[123,144753,144754,144756,144758,144761,144763,144765,144768],{"class":125,"line":140},[123,144755,138924],{"class":164},[123,144757,147],{"class":129},[123,144759,144760],{"class":164},"rotate",[123,144762,1315],{"class":129},[123,144764,3132],{"class":164},[123,144766,144767],{"class":133},"deg",[123,144769,5161],{"class":129},[123,144771,144772],{"class":125,"line":156},[123,144773,171],{"class":129},[24425,144775,144777],{"id":144776},"_18123-三角做法","18.1.2.3 三角做法",[19,144779,144780],{},"该下标当经过最外层大盒子时会实现向上反转",[3929,144782],{"style":128796,"src":144783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[113,144785,144786],{"className":128940,"code":137460,"language":128942,"meta":118,"style":118},[120,144787,144788,144792,144798,144808,144818,144834,144844],{"__ignoreMap":118},[123,144789,144790],{"class":125,"line":126},[123,144791,137467],{"class":2673},[123,144793,144794,144796],{"class":125,"line":140},[123,144795,137472],{"class":337},[123,144797,137],{"class":129},[123,144799,144800,144802,144804,144806],{"class":125,"line":156},[123,144801,72968],{"class":164},[123,144803,147],{"class":129},[123,144805,2799],{"class":164},[123,144807,3760],{"class":129},[123,144809,144810,144812,144814,144816],{"class":125,"line":168},[123,144811,73188],{"class":164},[123,144813,147],{"class":129},[123,144815,2799],{"class":164},[123,144817,3760],{"class":129},[123,144819,144820,144822,144824,144826,144828,144830,144832],{"class":125,"line":268},[123,144821,73296],{"class":164},[123,144823,147],{"class":129},[123,144825,2193],{"class":164},[123,144827,53897],{"class":133},[123,144829,53926],{"class":164},[123,144831,66392],{"class":164},[123,144833,3760],{"class":129},[123,144835,144836,144838,144840,144842],{"class":125,"line":291},[123,144837,137515],{"class":164},[123,144839,147],{"class":129},[123,144841,64771],{"class":164},[123,144843,3760],{"class":129},[123,144845,144846],{"class":125,"line":300},[123,144847,171],{"class":129},[2587,144849,144851],{"id":144850},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24425,144853,144855],{"id":144854},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144857,144858],{},"设置中心点",[3929,144860],{"style":128796,"src":144861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144863,144864],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24425,144866,144868],{"id":144867},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[113,144870,144872],{"className":128940,"code":144871,"language":128942,"meta":118,"style":118},"\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",[120,144873,144874,144879,144885,144900,144905,144910],{"__ignoreMap":118},[123,144875,144876],{"class":125,"line":126},[123,144877,144878],{"class":2673},"\u002F* 转换中心点 *\u002F\n",[123,144880,144881,144883],{"class":125,"line":140},[123,144882,54016],{"class":53707},[123,144884,137],{"class":129},[123,144886,144887,144890,144892,144894,144896,144898],{"class":125,"line":156},[123,144888,144889],{"class":164},"  transform-origin",[123,144891,147],{"class":129},[123,144893,53997],{"class":164},[123,144895,19572],{"class":164},[123,144897,132803],{"class":129},[123,144899,137613],{"class":2673},[123,144901,144902],{"class":125,"line":168},[123,144903,144904],{"class":2673},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[123,144906,144907],{"class":125,"line":268},[123,144908,144909],{"class":2673},"  \u002F* transform-origin: left top; *\u002F\n",[123,144911,144912],{"class":125,"line":291},[123,144913,171],{"class":129},[24425,144915,144917],{"id":144916},"_18133-旋转案例","18.1.3.3 旋转案例",[3929,144919],{"style":128796,"src":144920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[113,144922,144923],{"className":128940,"code":144743,"language":128942,"meta":118,"style":118},[120,144924,144925,144931,144947],{"__ignoreMap":118},[123,144926,144927,144929],{"class":125,"line":126},[123,144928,54016],{"class":53707},[123,144930,137],{"class":129},[123,144932,144933,144935,144937,144939,144941,144943,144945],{"class":125,"line":140},[123,144934,138924],{"class":164},[123,144936,147],{"class":129},[123,144938,144760],{"class":164},[123,144940,1315],{"class":129},[123,144942,3132],{"class":164},[123,144944,144767],{"class":133},[123,144946,5161],{"class":129},[123,144948,144949],{"class":125,"line":156},[123,144950,171],{"class":129},[2587,144952,144954],{"id":144953},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24425,144956,144958],{"id":144957},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144960,144961],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3929,144963],{"style":128796,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24425,144966,144968],{"id":144967},"_18142-分页按钮","18.1.4.2 分页按钮",[3929,144970],{"style":128796,"src":144971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[113,144973,144975],{"className":128940,"code":144974,"language":128942,"meta":118,"style":118},"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",[120,144976,144977,144983,144999,145003,145007,145012,145018,145032,145037],{"__ignoreMap":118},[123,144978,144979,144981],{"class":125,"line":126},[123,144980,54016],{"class":53707},[123,144982,137],{"class":129},[123,144984,144985,144987,144989,144992,144994,144997],{"class":125,"line":140},[123,144986,138924],{"class":164},[123,144988,147],{"class":129},[123,144990,144991],{"class":164},"scale",[123,144993,1315],{"class":129},[123,144995,144996],{"class":164},"1.2",[123,144998,5161],{"class":129},[123,145000,145001],{"class":125,"line":156},[123,145002,171],{"class":129},[123,145004,145005],{"class":125,"line":168},[123,145006,138401],{"class":129},[123,145008,145009],{"class":125,"line":268},[123,145010,145011],{"class":2673},"\u002F* 2D 缩放 *\u002F\n",[123,145013,145014,145016],{"class":125,"line":291},[123,145015,54016],{"class":53707},[123,145017,137],{"class":129},[123,145019,145020,145022,145024,145026,145028,145030],{"class":125,"line":300},[123,145021,138924],{"class":164},[123,145023,147],{"class":129},[123,145025,144991],{"class":164},[123,145027,1315],{"class":129},[123,145029,144996],{"class":164},[123,145031,5161],{"class":129},[123,145033,145034],{"class":125,"line":305},[123,145035,145036],{"class":2673},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[123,145038,145039],{"class":125,"line":316},[123,145040,171],{"class":129},[19,145042,145043],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[113,145045,145047],{"className":128940,"code":145046,"language":128942,"meta":118,"style":118},"\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",[120,145048,145049,145054,145064,145085,145106,145110,145115,145121,145148],{"__ignoreMap":118},[123,145050,145051],{"class":125,"line":126},[123,145052,145053],{"class":2673},"\u002F* 定义动画 *\u002F\n",[123,145055,145056,145059,145062],{"class":125,"line":140},[123,145057,145058],{"class":133},"@keyframes",[123,145060,145061],{"class":279}," move",[123,145063,137],{"class":129},[123,145065,145066,145069,145071,145073,145075,145078,145080,145082],{"class":125,"line":156},[123,145067,145068],{"class":337},"  0%",[123,145070,82205],{"class":129},[123,145072,50541],{"class":164},[123,145074,147],{"class":129},[123,145076,145077],{"class":164},"translateX",[123,145079,1315],{"class":129},[123,145081,2799],{"class":164},[123,145083,145084],{"class":129},"); }\n",[123,145086,145087,145090,145092,145094,145096,145098,145100,145102,145104],{"class":125,"line":168},[123,145088,145089],{"class":337},"  100%",[123,145091,82205],{"class":129},[123,145093,50541],{"class":164},[123,145095,147],{"class":129},[123,145097,145077],{"class":164},[123,145099,1315],{"class":129},[123,145101,259],{"class":164},[123,145103,53897],{"class":133},[123,145105,145084],{"class":129},[123,145107,145108],{"class":125,"line":268},[123,145109,171],{"class":129},[123,145111,145112],{"class":125,"line":291},[123,145113,145114],{"class":2673},"\u002F* 调用动画 *\u002F\n",[123,145116,145117,145119],{"class":125,"line":300},[123,145118,54016],{"class":53707},[123,145120,137],{"class":129},[123,145122,145123,145126,145128,145130,145132,145134,145136,145138,145140,145143,145146],{"class":125,"line":305},[123,145124,145125],{"class":164},"  animation",[123,145127,147],{"class":129},[123,145129,137626],{"class":164},[123,145131,27540],{"class":164},[123,145133,3297],{"class":133},[123,145135,81078],{"class":164},[123,145137,6532],{"class":164},[123,145139,3297],{"class":133},[123,145141,145142],{"class":164}," infinite",[123,145144,145145],{"class":164}," alternate",[123,145147,3760],{"class":129},[123,145149,145150],{"class":125,"line":316},[123,145151,171],{"class":129},[19,145153,145043],{},[113,145155,145158],{"className":145156,"code":145157,"language":7621},[7619],"\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",[120,145159,145157],{"__ignoreMap":118},[24425,145161,145163],{"id":145162},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145165,145166],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3929,145168],{"style":128796,"src":145169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[113,145171,145172],{"className":128940,"code":145046,"language":128942,"meta":118,"style":118},[120,145173,145174,145178,145186,145204,145224,145228,145232,145238,145262],{"__ignoreMap":118},[123,145175,145176],{"class":125,"line":126},[123,145177,145053],{"class":2673},[123,145179,145180,145182,145184],{"class":125,"line":140},[123,145181,145058],{"class":133},[123,145183,145061],{"class":279},[123,145185,137],{"class":129},[123,145187,145188,145190,145192,145194,145196,145198,145200,145202],{"class":125,"line":156},[123,145189,145068],{"class":337},[123,145191,82205],{"class":129},[123,145193,50541],{"class":164},[123,145195,147],{"class":129},[123,145197,145077],{"class":164},[123,145199,1315],{"class":129},[123,145201,2799],{"class":164},[123,145203,145084],{"class":129},[123,145205,145206,145208,145210,145212,145214,145216,145218,145220,145222],{"class":125,"line":168},[123,145207,145089],{"class":337},[123,145209,82205],{"class":129},[123,145211,50541],{"class":164},[123,145213,147],{"class":129},[123,145215,145077],{"class":164},[123,145217,1315],{"class":129},[123,145219,259],{"class":164},[123,145221,53897],{"class":133},[123,145223,145084],{"class":129},[123,145225,145226],{"class":125,"line":268},[123,145227,171],{"class":129},[123,145229,145230],{"class":125,"line":291},[123,145231,145114],{"class":2673},[123,145233,145234,145236],{"class":125,"line":300},[123,145235,54016],{"class":53707},[123,145237,137],{"class":129},[123,145239,145240,145242,145244,145246,145248,145250,145252,145254,145256,145258,145260],{"class":125,"line":305},[123,145241,145125],{"class":164},[123,145243,147],{"class":129},[123,145245,137626],{"class":164},[123,145247,27540],{"class":164},[123,145249,3297],{"class":133},[123,145251,81078],{"class":164},[123,145253,6532],{"class":164},[123,145255,3297],{"class":133},[123,145257,145142],{"class":164},[123,145259,145145],{"class":164},[123,145261,3760],{"class":129},[123,145263,145264],{"class":125,"line":316},[123,145265,171],{"class":129},[19,145267,145268],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[2587,145270,145272],{"id":145271},"_1823-知识点回顾","18.2.3 知识点回顾",[113,145274,145275],{"className":128940,"code":131109,"language":128942,"meta":118,"style":118},[120,145276,145277,145283,145293],{"__ignoreMap":118},[123,145278,145279,145281],{"class":125,"line":126},[123,145280,54016],{"class":53707},[123,145282,137],{"class":129},[123,145284,145285,145287,145289,145291],{"class":125,"line":140},[123,145286,131122],{"class":164},[123,145288,147],{"class":129},[123,145290,64138],{"class":164},[123,145292,3760],{"class":129},[123,145294,145295],{"class":125,"line":156},[123,145296,171],{"class":129},[14,145298,145300],{"id":145299},"_183-3d-转换","18.3 3D 转换",[19,145302,145303],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[2587,145305,145307],{"id":145306},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3929,145309],{"style":128796,"src":145310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[2587,145312,145314],{"id":145313},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3929,145316],{"style":128796,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145319,145320],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145322,145323],{},"translate3d的效果需要搭配透视perspective来使用",[3929,145325],{"style":128796,"src":145326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[2587,145328,145330],{"id":145329},"_1833-透视-perspective","18.3.3 透视 perspective",[3929,145332],{"style":128796,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145335,145336],{},"透视写在父盒子上，单位为像素",[2587,145338,145340],{"id":145339},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24425,145342,145344],{"id":145343},"_18341-分开解释","18.3.4.1 分开解释",[3929,145346],{"style":128796,"src":145347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3929,145349],{"style":128796,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3929,145352],{"style":128796,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145355,145356],{},"总结来说就是左手原则",[24425,145358,145360],{"id":145359},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3929,145362],{"style":128796,"src":145363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[2587,145365,145367],{"id":145366},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3929,145369],{"style":128796,"src":145370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3929,145372],{"style":128796,"src":145373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[113,145375,145377],{"className":128940,"code":145376,"language":128942,"meta":118,"style":118},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[120,145378,145379,145385,145398,145415],{"__ignoreMap":118},[123,145380,145381,145383],{"class":125,"line":126},[123,145382,54016],{"class":53707},[123,145384,137],{"class":129},[123,145386,145387,145390,145392,145394,145396],{"class":125,"line":140},[123,145388,145389],{"class":164},"  perspective",[123,145391,147],{"class":129},[123,145393,67475],{"class":164},[123,145395,53897],{"class":133},[123,145397,3760],{"class":129},[123,145399,145400,145402,145404,145407,145409,145411,145413],{"class":125,"line":156},[123,145401,138924],{"class":164},[123,145403,147],{"class":129},[123,145405,145406],{"class":164},"rotateX",[123,145408,1315],{"class":129},[123,145410,3132],{"class":164},[123,145412,144767],{"class":133},[123,145414,5161],{"class":129},[123,145416,145417],{"class":125,"line":168},[123,145418,171],{"class":129},[2587,145420,145422],{"id":145421},"_1836-案例","18.3.6 案例",[24425,145424,145426],{"id":145425},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3929,145428],{"style":128796,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3929,145431],{"style":128796,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3929,145434],{"style":128796,"src":145435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[113,145437,145439],{"className":128940,"code":145438,"language":128942,"meta":118,"style":118},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[120,145440,145441,145446,145452,145464],{"__ignoreMap":118},[123,145442,145443],{"class":125,"line":126},[123,145444,145445],{"class":2673},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[123,145447,145448,145450],{"class":125,"line":140},[123,145449,135937],{"class":337},[123,145451,137],{"class":129},[123,145453,145454,145456,145458,145460,145462],{"class":125,"line":156},[123,145455,145389],{"class":164},[123,145457,147],{"class":129},[123,145459,67475],{"class":164},[123,145461,53897],{"class":133},[123,145463,3760],{"class":129},[123,145465,145466],{"class":125,"line":168},[123,145467,171],{"class":129},[24425,145469,145471],{"id":145470},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3929,145473],{"style":128796,"src":145474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[113,145476,145477],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,145478,145479,145483,145497,145501],{"__ignoreMap":118},[123,145480,145481],{"class":125,"line":126},[123,145482,133051],{"class":2673},[123,145484,145485,145487,145489,145491,145493,145495],{"class":125,"line":140},[123,145486,3509],{"class":129},[123,145488,54016],{"class":53707},[123,145490,55889],{"class":337},[123,145492,134],{"class":129},[123,145494,133064],{"class":143},[123,145496,53714],{"class":129},[123,145498,145499],{"class":125,"line":156},[123,145500,133071],{"class":129},[123,145502,145503,145505,145507],{"class":125,"line":168},[123,145504,54190],{"class":129},[123,145506,54016],{"class":53707},[123,145508,53714],{"class":129},[24425,145510,145512],{"id":145511},"_18363-旋转木马","18.3.6.3 旋转木马",[3929,145514],{"style":128796,"src":145515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[113,145517,145518],{"className":128940,"code":144743,"language":128942,"meta":118,"style":118},[120,145519,145520,145526,145542],{"__ignoreMap":118},[123,145521,145522,145524],{"class":125,"line":126},[123,145523,54016],{"class":53707},[123,145525,137],{"class":129},[123,145527,145528,145530,145532,145534,145536,145538,145540],{"class":125,"line":140},[123,145529,138924],{"class":164},[123,145531,147],{"class":129},[123,145533,144760],{"class":164},[123,145535,1315],{"class":129},[123,145537,3132],{"class":164},[123,145539,144767],{"class":133},[123,145541,5161],{"class":129},[123,145543,145544],{"class":125,"line":156},[123,145545,171],{"class":129},[2526,145547,145548],{},"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":118,"searchDepth":140,"depth":140,"links":145550},[145551,145558],{"id":144646,"depth":140,"text":144647,"children":145552},[145553,145554,145555,145556,145557],{"id":144670,"depth":156,"text":144671},{"id":144725,"depth":156,"text":144726},{"id":144850,"depth":156,"text":144851},{"id":144953,"depth":156,"text":144954},{"id":145271,"depth":156,"text":145272},{"id":145299,"depth":140,"text":145300,"children":145559},[145560,145561,145562,145563,145564,145565],{"id":145306,"depth":156,"text":145307},{"id":145313,"depth":156,"text":145314},{"id":145329,"depth":156,"text":145330},{"id":145339,"depth":156,"text":145340},{"id":145366,"depth":156,"text":145367},{"id":145421,"depth":156,"text":145422},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144638,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145572,"title":145573,"body":145574,"description":2544,"extension":2545,"meta":145777,"navigation":231,"path":145778,"seo":145779,"stem":145780,"__hash__":145781},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145575,"toc":145766},[145576,145579,145583,145586,145589,145593,145596,145599,145602,145606,145609,145613,145616,145620,145623,145627,145641,145645,145670,145673,145676,145693,145697,145701,145704,145707,145711,145714,145717,145735,145739,145742,145756,145760,145763],[10,145577,145573],{"id":145578},"_19-移动端基础-前缀现状与视口",[14,145580,145582],{"id":145581},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3929,145584],{"style":128796,"src":145585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145587,145588],{},"意思就是加个前缀，增加兼容性",[14,145590,145592],{"id":145591},"_192-移动端现状认识","19.2 移动端现状认识",[3929,145594],{"style":128796,"src":145595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145597,145598],{},"调试方法：",[3929,145600],{"style":128796,"src":145601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145603,145605],{"id":145604},"_193-视口","19.3 视口",[19,145607,145608],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[2587,145610,145612],{"id":145611},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3929,145614],{"style":128796,"src":145615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[2587,145617,145619],{"id":145618},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3929,145621],{"style":128796,"src":145622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[2587,145624,145626],{"id":145625},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3606,145628,145629,145632,145635,145638],{},[29,145630,145631],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,145633,145634],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,145636,145637],{},"需要手动添写meta视口标签通知浏览器操作",[29,145639,145640],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[2587,145642,145644],{"id":145643},"_1934-meta视口标签","19.3.4 meta视口标签",[113,145646,145648],{"className":129687,"code":145647,"language":129689,"meta":118,"style":118},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[120,145649,145650],{"__ignoreMap":118},[123,145651,145652,145654,145656,145658,145660,145662,145664,145666,145668],{"class":125,"line":126},[123,145653,3509],{"class":129},[123,145655,53751],{"class":53707},[123,145657,17350],{"class":337},[123,145659,134],{"class":129},[123,145661,53798],{"class":143},[123,145663,53778],{"class":337},[123,145665,134],{"class":129},[123,145667,53805],{"class":143},[123,145669,53714],{"class":129},[3929,145671],{"style":128796,"src":145672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145674,145675],{},"标准视口设置：",[26,145677,145678,145681,145684,145687,145690],{},[29,145679,145680],{},"视口宽度和设备保持一致",[29,145682,145683],{},"视口的默认缩放比例1.0",[29,145685,145686],{},"不允许用户自行缩放",[29,145688,145689],{},"最大允许的缩放比例1.0",[29,145691,145692],{},"最小允许的缩放比例1.0",[2587,145694,145696],{"id":145695},"_1935-二倍图","19.3.5 二倍图",[24425,145698,145700],{"id":145699},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3929,145702],{"style":128796,"src":145703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3929,145705],{"style":128796,"src":145706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24425,145708,145710],{"id":145709},"_19352-多倍图","19.3.5.2 多倍图",[3929,145712],{"style":128796,"src":145713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145715,145716],{},"二倍图法，代码如下：",[113,145718,145720],{"className":128940,"code":145719,"language":128942,"meta":118,"style":118},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[120,145721,145722,145727],{"__ignoreMap":118},[123,145723,145724],{"class":125,"line":126},[123,145725,145726],{"class":2673},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[123,145728,145729,145732],{"class":125,"line":140},[123,145730,145731],{"class":53707},"background-size",[123,145733,145734],{"class":129},": 50% 50%;\n",[24425,145736,145738],{"id":145737},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3929,145740],{"style":128796,"src":145741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,145743,145744,145747,145750,145753],{},[29,145745,145746],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,145748,145749],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,145751,145752],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,145754,145755],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24425,145757,145759],{"id":145758},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3929,145761],{"style":128796,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2526,145764,145765],{},"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":118,"searchDepth":140,"depth":140,"links":145767},[145768,145769,145770],{"id":145581,"depth":140,"text":145582},{"id":145591,"depth":140,"text":145592},{"id":145604,"depth":140,"text":145605,"children":145771},[145772,145773,145774,145775,145776],{"id":145611,"depth":156,"text":145612},{"id":145618,"depth":156,"text":145619},{"id":145625,"depth":156,"text":145626},{"id":145643,"depth":156,"text":145644},{"id":145695,"depth":156,"text":145696},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145573,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145783,"title":145784,"body":145785,"description":2544,"extension":2545,"meta":146662,"navigation":231,"path":146663,"seo":146664,"stem":146665,"__hash__":146666},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145786,"toc":146646},[145787,145790,145794,145801,145804,145811,145814,145819,145822,145826,145830,145837,145840,145843,145847,145850,145853,145856,145859,145862,145866,145869,145873,145875,145878,145881,145884,145887,145889,145892,145894,145924,145926,145956,145960,145963,145967,145970,145987,145990,145993,146069,146071,146074,146077,146080,146083,146085,146088,146091,146095,146117,146120,146123,146127,146130,146136,146139,146143,146146,146149,146153,146156,146159,146162,146166,146169,146172,146175,146178,146182,146185,146189,146196,146199,146202,146205,146208,146218,146221,146224,146231,146234,146238,146241,146244,146248,146251,146254,146257,146302,146305,146308,146311,146313,146442,146444,146482,146485,146488,146490,146608,146610,146644],[10,145788,145784],{"id":145789},"_20-移动端布局实战上篇",[14,145791,145793],{"id":145792},"_201-移动端主流方案","20.1 移动端主流方案",[26,145795,145796],{},[29,145797,145798],{},[2759,145799,145800],{},"单独移动端页面（主流）",[3929,145802],{"style":128796,"src":145803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,145805,145806],{"start":140},[29,145807,145808],{},[2759,145809,145810],{},"响应式兼容PC移动端",[3929,145812],{"style":128796,"src":145813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,145815,145816],{"start":156},[29,145817,145818],{},"两种页面选型布局方式",[3929,145820],{"style":128796,"src":145821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145823,145825],{"id":145824},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[2587,145827,145829],{"id":145828},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145831,145832,145833],{},"官网地址： ",[2846,145834,145835],{"href":145835,"rel":145836},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26287],[3929,145838],{"style":128796,"src":145839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3929,145841],{"style":128796,"src":145842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[2587,145844,145846],{"id":145845},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3929,145848],{"style":128796,"src":145849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3929,145851],{"style":128796,"src":145852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145854,145855],{},"去除高亮：",[19,145857,145858],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145860,145861],{},"-webkit- tap-highlight-color: transparent;",[14,145863,145865],{"id":145864},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3929,145867],{"style":128796,"src":145868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145870,145872],{"id":145871},"_204-流式布局案例","20.4 流式布局案例",[19,145874,2646],{},[19,145876,145877],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145879,145880],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145882,145883],{},"图片格式：",[3929,145885],{"style":128796,"src":145886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145888,137983],{},[3929,145890],{"style":128796,"src":145891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145893,142310],{},[113,145895,145896],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,145897,145898],{"__ignoreMap":118},[123,145899,145900,145902,145904,145906,145908,145910,145912,145914,145916,145918,145920,145922],{"class":125,"line":126},[123,145901,3509],{"class":129},[123,145903,3929],{"class":53707},[123,145905,57642],{"class":337},[123,145907,134],{"class":129},[123,145909,136457],{"class":143},[123,145911,57650],{"class":337},[123,145913,134],{"class":129},[123,145915,136464],{"class":143},[123,145917,136467],{"class":337},[123,145919,134],{"class":129},[123,145921,136472],{"class":143},[123,145923,53714],{"class":129},[19,145925,142399],{},[113,145927,145928],{"className":129687,"code":136442,"language":129689,"meta":118,"style":118},[120,145929,145930],{"__ignoreMap":118},[123,145931,145932,145934,145936,145938,145940,145942,145944,145946,145948,145950,145952,145954],{"class":125,"line":126},[123,145933,3509],{"class":129},[123,145935,3929],{"class":53707},[123,145937,57642],{"class":337},[123,145939,134],{"class":129},[123,145941,136457],{"class":143},[123,145943,57650],{"class":337},[123,145945,134],{"class":129},[123,145947,136464],{"class":143},[123,145949,136467],{"class":337},[123,145951,134],{"class":129},[123,145953,136472],{"class":143},[123,145955,53714],{"class":129},[14,145957,145959],{"id":145958},"_205-flex布局","20.5 flex布局",[3929,145961],{"style":128796,"src":145962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[2587,145964,145966],{"id":145965},"_2051-布局原理","20.5.1 布局原理",[19,145968,145969],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3606,145971,145972,145975,145978,145981,145984],{},[29,145973,145974],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,145976,145977],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,145979,145980],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,145982,145983],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,145985,145986],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145988,145989],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145991,145992],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[113,145994,145996],{"className":128940,"code":145995,"language":128942,"meta":118,"style":118},"\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",[120,145997,145998,146003,146010,146020,146032,146043,146054,146065],{"__ignoreMap":118},[123,145999,146000],{"class":125,"line":126},[123,146001,146002],{"class":2673},"\u002F* Flex 弹性布局 *\u002F\n",[123,146004,146005,146008],{"class":125,"line":140},[123,146006,146007],{"class":337},".container",[123,146009,137],{"class":129},[123,146011,146012,146014,146016,146018],{"class":125,"line":156},[123,146013,130556],{"class":164},[123,146015,147],{"class":129},[123,146017,53882],{"class":164},[123,146019,3760],{"class":129},[123,146021,146022,146025,146027,146030],{"class":125,"line":168},[123,146023,146024],{"class":164},"  flex-direction",[123,146026,147],{"class":129},[123,146028,146029],{"class":164},"row",[123,146031,3760],{"class":129},[123,146033,146034,146037,146039,146041],{"class":125,"line":268},[123,146035,146036],{"class":164},"  justify-content",[123,146038,147],{"class":129},[123,146040,54073],{"class":164},[123,146042,3760],{"class":129},[123,146044,146045,146048,146050,146052],{"class":125,"line":291},[123,146046,146047],{"class":164},"  align-items",[123,146049,147],{"class":129},[123,146051,53997],{"class":164},[123,146053,3760],{"class":129},[123,146055,146056,146059,146061,146063],{"class":125,"line":300},[123,146057,146058],{"class":164},"  flex-wrap",[123,146060,147],{"class":129},[123,146062,81008],{"class":164},[123,146064,3760],{"class":129},[123,146066,146067],{"class":125,"line":305},[123,146068,171],{"class":129},[19,146070,72853],{},[19,146072,146073],{},".form-item .male-label {",[19,146075,146076],{},"   margin-right: 20px;",[19,146078,146079],{},"   display: inline-flex;",[19,146081,146082],{},"   align-items: center;",[19,146084,3545],{},[3929,146086],{"style":128796,"src":146087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3929,146089],{"style":128796,"src":146090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[2587,146092,146094],{"id":146093},"_2052-常见父项属性","20.5.2 常见父项属性",[26,146096,146097,146100,146103,146106,146109,146112,146115],{},[29,146098,146099],{},"flex-direction：设置主轴的方向",[29,146101,146102],{},"justify-content：设置主轴上的子元素排列方式",[29,146104,146105],{},"flex-wrap：设置子元素是否换行",[29,146107,146108],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,146110,146111],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,146113,146114],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,146116,146099],{},[3929,146118],{"style":128796,"src":146119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3929,146121],{"style":128796,"src":146122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,146124,146125],{"start":140},[29,146126,146102],{},[3929,146128],{"style":128796,"src":146129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146131,146132,146135],{},[120,146133,146134],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146137,146138],{},"跟着主轴走",[26,146140,146141],{"start":156},[29,146142,146105],{},[3929,146144],{"style":128796,"src":146145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146147,146148],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,146150,146151],{"start":168},[29,146152,146108],{},[3929,146154],{"style":128796,"src":146155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146157,146158],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146160,146161],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,146163,146164],{"start":268},[29,146165,146111],{},[3929,146167],{"style":128796,"src":146168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146170,146171],{},"align-items与align-content之间的区别：",[19,146173,146174],{},"单找items，多找content",[3929,146176],{"style":128796,"src":146177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,146179,146180],{"start":291},[29,146181,146114],{},[3929,146183],{"style":128796,"src":146184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[2587,146186,146188],{"id":146187},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,146190,146191],{},[29,146192,146193],{},[2759,146194,146195],{},"flex 属性",[19,146197,146198],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3929,146200],{"style":128796,"src":146201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146203,146204],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146206,146207],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,146209,146210],{"start":140},[29,146211,146212,16225,146215],{},[2759,146213,146214],{},"align-self",[2759,146216,146217],{},"控制子项自己在侧轴上的排列方式",[3929,146219],{"style":128796,"src":146220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146222,146223],{},"单个子盒子在父盒子侧轴上的排列方式",[26,146225,146226],{"start":156},[29,146227,146228,146230],{},[2759,146229,97691],{}," 属性定义项目的排列顺序",[3929,146232],{"style":128796,"src":146233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[2587,146235,146237],{"id":146236},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3929,146239],{"style":128796,"src":146240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146242,146243],{},"必须要添加浏览器的私有前缀",[2587,146245,146247],{"id":146246},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146249,146250],{},"学到最重要的知识：",[19,146252,146253],{},"flex处理这样的布局思路",[3929,146255],{"style":128796,"src":146256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[113,146258,146260],{"className":128940,"code":146259,"language":128942,"meta":118,"style":118},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[120,146261,146262,146268,146278,146288,146298],{"__ignoreMap":118},[123,146263,146264,146266],{"class":125,"line":126},[123,146265,146007],{"class":337},[123,146267,137],{"class":129},[123,146269,146270,146272,146274,146276],{"class":125,"line":140},[123,146271,130556],{"class":164},[123,146273,147],{"class":129},[123,146275,53882],{"class":164},[123,146277,3760],{"class":129},[123,146279,146280,146282,146284,146286],{"class":125,"line":156},[123,146281,146036],{"class":164},[123,146283,147],{"class":129},[123,146285,53997],{"class":164},[123,146287,3760],{"class":129},[123,146289,146290,146292,146294,146296],{"class":125,"line":168},[123,146291,146047],{"class":164},[123,146293,147],{"class":129},[123,146295,53997],{"class":164},[123,146297,3760],{"class":129},[123,146299,146300],{"class":125,"line":268},[123,146301,171],{"class":129},[19,146303,146304],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146306,146307],{},"使用属性选择器",[3929,146309],{"style":128796,"src":146310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146312,71290],{},[113,146314,146316],{"className":129687,"code":146315,"language":129689,"meta":118,"style":118},"\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",[120,146317,146318,146323,146337,146342,146362,146367,146386,146391,146410,146415,146434],{"__ignoreMap":118},[123,146319,146320],{"class":125,"line":126},[123,146321,146322],{"class":2673},"\u003C!-- 携程网移动端案例结构 -->\n",[123,146324,146325,146327,146329,146331,146333,146335],{"class":125,"line":140},[123,146326,3509],{"class":129},[123,146328,54016],{"class":53707},[123,146330,55889],{"class":337},[123,146332,134],{"class":129},[123,146334,94717],{"class":143},[123,146336,53714],{"class":129},[123,146338,146339],{"class":125,"line":156},[123,146340,146341],{"class":2673},"  \u003C!-- 搜索栏 -->\n",[123,146343,146344,146346,146348,146350,146352,146355,146358,146360],{"class":125,"line":168},[123,146345,54548],{"class":129},[123,146347,54016],{"class":53707},[123,146349,55889],{"class":337},[123,146351,134],{"class":129},[123,146353,146354],{"class":143},"\"search-index\"",[123,146356,146357],{"class":129},">...\u003C\u002F",[123,146359,54016],{"class":53707},[123,146361,53714],{"class":129},[123,146363,146364],{"class":125,"line":268},[123,146365,146366],{"class":2673},"  \u003C!-- 焦点图 -->\n",[123,146368,146369,146371,146373,146375,146377,146380,146382,146384],{"class":125,"line":291},[123,146370,54548],{"class":129},[123,146372,54016],{"class":53707},[123,146374,55889],{"class":337},[123,146376,134],{"class":129},[123,146378,146379],{"class":143},"\"focus\"",[123,146381,146357],{"class":129},[123,146383,54016],{"class":53707},[123,146385,53714],{"class":129},[123,146387,146388],{"class":125,"line":300},[123,146389,146390],{"class":2673},"  \u003C!-- 主导航 -->\n",[123,146392,146393,146395,146397,146399,146401,146404,146406,146408],{"class":125,"line":305},[123,146394,54548],{"class":129},[123,146396,54016],{"class":53707},[123,146398,55889],{"class":337},[123,146400,134],{"class":129},[123,146402,146403],{"class":143},"\"local-nav\"",[123,146405,146357],{"class":129},[123,146407,54016],{"class":53707},[123,146409,53714],{"class":129},[123,146411,146412],{"class":125,"line":316},[123,146413,146414],{"class":2673},"  \u003C!-- 子导航 -->\n",[123,146416,146417,146419,146421,146423,146425,146428,146430,146432],{"class":125,"line":673},[123,146418,54548],{"class":129},[123,146420,54016],{"class":53707},[123,146422,55889],{"class":337},[123,146424,134],{"class":129},[123,146426,146427],{"class":143},"\"nav-common\"",[123,146429,146357],{"class":129},[123,146431,54016],{"class":53707},[123,146433,53714],{"class":129},[123,146435,146436,146438,146440],{"class":125,"line":692},[123,146437,54190],{"class":129},[123,146439,54016],{"class":53707},[123,146441,53714],{"class":129},[19,146443,72853],{},[113,146445,146446],{"className":128940,"code":139392,"language":128942,"meta":118,"style":118},[120,146447,146448,146462,146478],{"__ignoreMap":118},[123,146449,146450,146452,146454,146456,146458,146460],{"class":125,"line":126},[123,146451,56224],{"class":53707},[123,146453,839],{"class":129},[123,146455,105497],{"class":337},[123,146457,134],{"class":133},[123,146459,65100],{"class":143},[123,146461,139409],{"class":129},[123,146463,146464,146466,146468,146470,146472,146474,146476],{"class":125,"line":140},[123,146465,73296],{"class":164},[123,146467,147],{"class":129},[123,146469,2825],{"class":164},[123,146471,53897],{"class":133},[123,146473,53926],{"class":164},[123,146475,132520],{"class":164},[123,146477,3760],{"class":129},[123,146479,146480],{"class":125,"line":156},[123,146481,171],{"class":129},[19,146483,146484],{},"总代码和效果展示：",[3929,146486],{"style":128796,"src":146487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146489,71290],{},[113,146491,146492],{"className":129687,"code":146315,"language":129689,"meta":118,"style":118},[120,146493,146494,146498,146512,146516,146534,146538,146556,146560,146578,146582,146600],{"__ignoreMap":118},[123,146495,146496],{"class":125,"line":126},[123,146497,146322],{"class":2673},[123,146499,146500,146502,146504,146506,146508,146510],{"class":125,"line":140},[123,146501,3509],{"class":129},[123,146503,54016],{"class":53707},[123,146505,55889],{"class":337},[123,146507,134],{"class":129},[123,146509,94717],{"class":143},[123,146511,53714],{"class":129},[123,146513,146514],{"class":125,"line":156},[123,146515,146341],{"class":2673},[123,146517,146518,146520,146522,146524,146526,146528,146530,146532],{"class":125,"line":168},[123,146519,54548],{"class":129},[123,146521,54016],{"class":53707},[123,146523,55889],{"class":337},[123,146525,134],{"class":129},[123,146527,146354],{"class":143},[123,146529,146357],{"class":129},[123,146531,54016],{"class":53707},[123,146533,53714],{"class":129},[123,146535,146536],{"class":125,"line":268},[123,146537,146366],{"class":2673},[123,146539,146540,146542,146544,146546,146548,146550,146552,146554],{"class":125,"line":291},[123,146541,54548],{"class":129},[123,146543,54016],{"class":53707},[123,146545,55889],{"class":337},[123,146547,134],{"class":129},[123,146549,146379],{"class":143},[123,146551,146357],{"class":129},[123,146553,54016],{"class":53707},[123,146555,53714],{"class":129},[123,146557,146558],{"class":125,"line":300},[123,146559,146390],{"class":2673},[123,146561,146562,146564,146566,146568,146570,146572,146574,146576],{"class":125,"line":305},[123,146563,54548],{"class":129},[123,146565,54016],{"class":53707},[123,146567,55889],{"class":337},[123,146569,134],{"class":129},[123,146571,146403],{"class":143},[123,146573,146357],{"class":129},[123,146575,54016],{"class":53707},[123,146577,53714],{"class":129},[123,146579,146580],{"class":125,"line":316},[123,146581,146414],{"class":2673},[123,146583,146584,146586,146588,146590,146592,146594,146596,146598],{"class":125,"line":673},[123,146585,54548],{"class":129},[123,146587,54016],{"class":53707},[123,146589,55889],{"class":337},[123,146591,134],{"class":129},[123,146593,146427],{"class":143},[123,146595,146357],{"class":129},[123,146597,54016],{"class":53707},[123,146599,53714],{"class":129},[123,146601,146602,146604,146606],{"class":125,"line":692},[123,146603,54190],{"class":129},[123,146605,54016],{"class":53707},[123,146607,53714],{"class":129},[19,146609,72853],{},[113,146611,146612],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,146613,146614,146618,146632,146636],{"__ignoreMap":118},[123,146615,146616],{"class":125,"line":126},[123,146617,133051],{"class":2673},[123,146619,146620,146622,146624,146626,146628,146630],{"class":125,"line":140},[123,146621,3509],{"class":129},[123,146623,54016],{"class":53707},[123,146625,55889],{"class":337},[123,146627,134],{"class":129},[123,146629,133064],{"class":143},[123,146631,53714],{"class":129},[123,146633,146634],{"class":125,"line":156},[123,146635,133071],{"class":129},[123,146637,146638,146640,146642],{"class":125,"line":168},[123,146639,54190],{"class":129},[123,146641,54016],{"class":53707},[123,146643,53714],{"class":129},[2526,146645,140341],{},{"title":118,"searchDepth":140,"depth":140,"links":146647},[146648,146649,146653,146654,146655],{"id":145792,"depth":140,"text":145793},{"id":145824,"depth":140,"text":145825,"children":146650},[146651,146652],{"id":145828,"depth":156,"text":145829},{"id":145845,"depth":156,"text":145846},{"id":145864,"depth":140,"text":145865},{"id":145871,"depth":140,"text":145872},{"id":145958,"depth":140,"text":145959,"children":146656},[146657,146658,146659,146660,146661],{"id":145965,"depth":156,"text":145966},{"id":146093,"depth":156,"text":146094},{"id":146187,"depth":156,"text":146188},{"id":146236,"depth":156,"text":146237},{"id":146246,"depth":156,"text":146247},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145784,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146668,"title":146669,"body":146670,"description":2544,"extension":2545,"meta":147897,"navigation":231,"path":147898,"seo":147899,"stem":147900,"__hash__":147901},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146671,"toc":147875},[146672,146675,146679,146683,146686,146689,146693,146698,146701,146704,146707,146710,146713,146770,146773,146778,146781,146784,146788,146799,146803,146806,146809,146816,146821,146825,146828,146834,146837,146841,146844,146851,146854,146857,146864,146867,146874,146877,146880,146887,146890,146893,146895,146912,146916,146919,146922,146925,146929,146932,146935,146938,146941,146944,146947,146949,146952,146955,147017,147020,147130,147137,147143,147146,147149,147153,147156,147160,147165,147168,147175,147178,147184,147189,147192,147195,147198,147201,147204,147207,147210,147213,147269,147271,147297,147301,147304,147307,147310,147318,147321,147324,147328,147384,147387,147391,147397,147408,147411,147416,147419,147422,147428,147431,147434,147437,147440,147443,147446,147449,147452,147477,147483,147486,147489,147492,147495,147498,147501,147506,147509,147512,147515,147523,147526,147533,147536,147539,147541,147565,147567,147570,147573,147576,147579,147582,147585,147588,147622,147625,147628,147662,147669,147672,147675,147678,147681,147684,147687,147694,147697,147700,147703,147706,147713,147716,147719,147726,147729,147732,147736,147739,147742,147745,147748,147751,147754,147757,147760,147762,147786,147788,147812,147816,147827,147830,147833,147836,147839,147842,147845,147848,147851,147854,147857,147860,147863,147866,147869,147872],[10,146673,146669],{"id":146674},"_21-移动端布局实战下篇",[14,146676,146678],{"id":146677},"_211-rem适配布局","21.1 rem适配布局",[2587,146680,146682],{"id":146681},"_2111-rem单位","21.1.1 rem单位",[3929,146684],{"style":128796,"src":146685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146687,146688],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[2587,146690,146692],{"id":146691},"_2112-媒体查询","21.1.2 媒体查询",[26,146694,146695],{},[29,146696,146697],{},"参数介绍",[3929,146699],{"style":128796,"src":146700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3929,146702],{"style":128796,"src":146703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3929,146705],{"style":128796,"src":146706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3929,146708],{"style":128796,"src":146709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3929,146711],{"style":128796,"src":146712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[113,146714,146716],{"className":128940,"code":146715,"language":128942,"meta":118,"style":118},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[120,146717,146718,146723,146742,146749,146762,146766],{"__ignoreMap":118},[123,146719,146720],{"class":125,"line":126},[123,146721,146722],{"class":2673},"\u002F* 媒体查询 *\u002F\n",[123,146724,146725,146728,146730,146733,146735,146738,146740],{"class":125,"line":140},[123,146726,146727],{"class":133},"@media",[123,146729,4116],{"class":129},[123,146731,146732],{"class":164},"max-width",[123,146734,147],{"class":129},[123,146736,146737],{"class":164},"768",[123,146739,53897],{"class":133},[123,146741,14873],{"class":129},[123,146743,146744,146747],{"class":125,"line":156},[123,146745,146746],{"class":337},"  .container",[123,146748,137],{"class":129},[123,146750,146751,146754,146756,146758,146760],{"class":125,"line":168},[123,146752,146753],{"class":164},"    width",[123,146755,147],{"class":129},[123,146757,259],{"class":164},[123,146759,2935],{"class":133},[123,146761,3760],{"class":129},[123,146763,146764],{"class":125,"line":268},[123,146765,129736],{"class":129},[123,146767,146768],{"class":125,"line":291},[123,146769,171],{"class":129},[19,146771,146772],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,146774,146775],{"start":140},[29,146776,146777],{},"引入资源",[3929,146779],{"style":128796,"src":146780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146782,146783],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[2587,146785,146787],{"id":146786},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3606,146789,146790,146793,146796],{},[29,146791,146792],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,146794,146795],{},"媒体查询可以根据不同设备宽度来修改样式",[29,146797,146798],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146800,146802],{"id":146801},"_212-less基础","21.2 Less基础",[19,146804,146805],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146807,146808],{},"Less可以解决该问题，它是css的扩展语言",[19,146810,146811,146812],{},"Less中文网址： ",[2846,146813,146814],{"href":146814,"rel":146815},"http:\u002F\u002Flesscss.cn\u002F",[26287],[19,146817,146818],{},[2759,146819,146820],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[2587,146822,146824],{"id":146823},"_2121-less安装","21.2.1 less安装",[19,146826,146827],{},"如果使用vscode，则无需进行下方安装步骤",[19,146829,146830],{},[2846,146831,146832],{"href":146832,"rel":146833},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26287],[3929,146835],{"style":128796,"src":146836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[2587,146838,146840],{"id":146839},"_2122-less使用","21.2.2 less使用",[19,146842,146843],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,146845,146846],{},[29,146847,146848],{},[2759,146849,146850],{},"Less 变量",[3929,146852],{"style":128796,"src":146853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3929,146855],{"style":128796,"src":146856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,146858,146859],{"start":140},[29,146860,146861],{},[2759,146862,146863],{},"Less 编译",[3929,146865],{"style":128796,"src":146866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,146868,146869],{"start":156},[29,146870,146871],{},[2759,146872,146873],{},"Less 嵌套",[3929,146875],{"style":128796,"src":146876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3929,146878],{"style":128796,"src":146879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,146881,146882],{"start":168},[29,146883,146884],{},[2759,146885,146886],{},"Less 运算",[3929,146888],{"style":128796,"src":146889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146891,146892],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146894,2646],{},[3606,146896,146897,146900,146903,146906,146909],{},[29,146898,146899],{},"乘号（*）和除号（\u002F）的写法",[29,146901,146902],{},"运算符中间左右有个空格隔开 1px + 5",[29,146904,146905],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,146907,146908],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,146910,146911],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146913,146915],{"id":146914},"_213-rem-适配方案","21.3 rem 适配方案",[19,146917,146918],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146920,146921],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3929,146923],{"style":128796,"src":146924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[2587,146926,146928],{"id":146927},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146930,146931],{},"rem + 媒体查询 + less 技术",[3929,146933],{"style":128796,"src":146934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146936,146937],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146939,146940],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3929,146942],{"style":128796,"src":146943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146945,146946],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146948,17063],{},[3929,146950],{"style":128796,"src":146951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146953,146954],{},"index.html:",[113,146956,146958],{"className":128940,"code":146957,"language":128942,"meta":118,"style":118},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[120,146959,146960,146965,146971,146987,146991,146997,147013],{"__ignoreMap":118},[123,146961,146962],{"class":125,"line":126},[123,146963,146964],{"class":2673},"\u002F* rem 适配方案 *\u002F\n",[123,146966,146967,146969],{"class":125,"line":140},[123,146968,53042],{"class":53707},[123,146970,137],{"class":129},[123,146972,146973,146975,146977,146980,146982,146984],{"class":125,"line":156},[123,146974,73026],{"class":164},[123,146976,147],{"class":129},[123,146978,146979],{"class":164},"62.5",[123,146981,2935],{"class":133},[123,146983,132803],{"class":129},[123,146985,146986],{"class":2673},"\u002F* 1rem = 10px *\u002F\n",[123,146988,146989],{"class":125,"line":168},[123,146990,171],{"class":129},[123,146992,146993,146995],{"class":125,"line":268},[123,146994,132788],{"class":337},[123,146996,137],{"class":129},[123,146998,146999,147001,147003,147005,147008,147010],{"class":125,"line":291},[123,147000,72968],{"class":164},[123,147002,147],{"class":129},[123,147004,2193],{"class":164},[123,147006,147007],{"class":133},"rem",[123,147009,132803],{"class":129},[123,147011,147012],{"class":2673},"\u002F* 100px *\u002F\n",[123,147014,147015],{"class":125,"line":300},[123,147016,171],{"class":129},[19,147018,147019],{},"common.less",[113,147021,147023],{"className":128940,"code":147022,"language":128942,"meta":118,"style":118},"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",[120,147024,147025,147031,147046,147050,147056,147070,147074,147078,147082,147088,147102,147106,147112,147126],{"__ignoreMap":118},[123,147026,147027,147029],{"class":125,"line":126},[123,147028,53042],{"class":53707},[123,147030,137],{"class":129},[123,147032,147033,147035,147037,147039,147041,147043],{"class":125,"line":140},[123,147034,73026],{"class":164},[123,147036,147],{"class":129},[123,147038,146979],{"class":164},[123,147040,2935],{"class":133},[123,147042,28488],{"class":129},[123,147044,147045],{"class":2673},"\u002F* 10px *\u002F\n",[123,147047,147048],{"class":125,"line":156},[123,147049,171],{"class":129},[123,147051,147052,147054],{"class":125,"line":168},[123,147053,54016],{"class":53707},[123,147055,137],{"class":129},[123,147057,147058,147060,147062,147064,147066,147068],{"class":125,"line":268},[123,147059,72968],{"class":164},[123,147061,147],{"class":129},[123,147063,2193],{"class":164},[123,147065,147007],{"class":133},[123,147067,28488],{"class":129},[123,147069,147012],{"class":2673},[123,147071,147072],{"class":125,"line":291},[123,147073,171],{"class":129},[123,147075,147076],{"class":125,"line":300},[123,147077,138401],{"class":129},[123,147079,147080],{"class":125,"line":305},[123,147081,146964],{"class":2673},[123,147083,147084,147086],{"class":125,"line":316},[123,147085,53042],{"class":53707},[123,147087,137],{"class":129},[123,147089,147090,147092,147094,147096,147098,147100],{"class":125,"line":673},[123,147091,73026],{"class":164},[123,147093,147],{"class":129},[123,147095,146979],{"class":164},[123,147097,2935],{"class":133},[123,147099,132803],{"class":129},[123,147101,146986],{"class":2673},[123,147103,147104],{"class":125,"line":692},[123,147105,171],{"class":129},[123,147107,147108,147110],{"class":125,"line":713},[123,147109,132788],{"class":337},[123,147111,137],{"class":129},[123,147113,147114,147116,147118,147120,147122,147124],{"class":125,"line":718},[123,147115,72968],{"class":164},[123,147117,147],{"class":129},[123,147119,2193],{"class":164},[123,147121,147007],{"class":133},[123,147123,132803],{"class":129},[123,147125,147012],{"class":2673},[123,147127,147128],{"class":125,"line":1138},[123,147129,171],{"class":129},[19,147131,147132,147133,147136],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25980,147134,147135],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[113,147138,147141],{"className":147139,"code":147140,"language":7621},[7619],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[120,147142,147140],{"__ignoreMap":118},[19,147144,147145],{},"less保存时会自动变成.css文件",[19,147147,147148],{},"好好搞懂上述代码写法",[2587,147150,147152],{"id":147151},"_2132-样式导入样式","21.3.2 样式导入样式",[3929,147154],{"style":128796,"src":147155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[2587,147157,147159],{"id":147158},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,147161,147162],{},[29,147163,147164],{},"准备工作",[3929,147166],{"style":128796,"src":147167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147169,147170,147171],{},"github地址：",[2846,147172,147173],{"href":147173,"rel":147174},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26287],[19,147176,147177],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147179,147180,147181],{},"js文件引入到index.html中使用的是",[120,147182,147183],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,147185,147186],{"start":140},[29,147187,147188],{},"vscode插件",[3929,147190],{"style":128796,"src":147191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147193,147194],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147196,147197],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3929,147199],{"style":128796,"src":147200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147202,147203],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3929,147205],{"style":128796,"src":147206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147208,147209],{},"修改成75就可以，alt+z为快捷键",[19,147211,147212],{},"index.css：",[113,147214,147215],{"className":128940,"code":146957,"language":128942,"meta":118,"style":118},[120,147216,147217,147221,147227,147241,147245,147251,147265],{"__ignoreMap":118},[123,147218,147219],{"class":125,"line":126},[123,147220,146964],{"class":2673},[123,147222,147223,147225],{"class":125,"line":140},[123,147224,53042],{"class":53707},[123,147226,137],{"class":129},[123,147228,147229,147231,147233,147235,147237,147239],{"class":125,"line":156},[123,147230,73026],{"class":164},[123,147232,147],{"class":129},[123,147234,146979],{"class":164},[123,147236,2935],{"class":133},[123,147238,132803],{"class":129},[123,147240,146986],{"class":2673},[123,147242,147243],{"class":125,"line":168},[123,147244,171],{"class":129},[123,147246,147247,147249],{"class":125,"line":268},[123,147248,132788],{"class":337},[123,147250,137],{"class":129},[123,147252,147253,147255,147257,147259,147261,147263],{"class":125,"line":291},[123,147254,72968],{"class":164},[123,147256,147],{"class":129},[123,147258,2193],{"class":164},[123,147260,147007],{"class":133},[123,147262,132803],{"class":129},[123,147264,147012],{"class":2673},[123,147266,147267],{"class":125,"line":300},[123,147268,171],{"class":129},[19,147270,146954],{},[113,147272,147273],{"className":128940,"code":129344,"language":128942,"meta":118,"style":118},[120,147274,147275,147281,147293],{"__ignoreMap":118},[123,147276,147277,147279],{"class":125,"line":126},[123,147278,54205],{"class":53707},[123,147280,137],{"class":129},[123,147282,147283,147285,147287,147289,147291],{"class":125,"line":140},[123,147284,73026],{"class":164},[123,147286,147],{"class":129},[123,147288,3204],{"class":164},[123,147290,53897],{"class":133},[123,147292,3760],{"class":129},[123,147294,147295],{"class":125,"line":156},[123,147296,171],{"class":129},[14,147298,147300],{"id":147299},"_214-响应式开发","21.4 响应式开发",[19,147302,147303],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3929,147305],{"style":128796,"src":147306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147308,147309],{},"做法：",[3606,147311,147312,147315],{},[29,147313,147314],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,147316,147317],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3929,147319],{"style":128796,"src":147320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147322,147323],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[2587,147325,147327],{"id":147326},"_2141-简单代码示范","21.4.1 简单代码示范",[113,147329,147330],{"className":128940,"code":146957,"language":128942,"meta":118,"style":118},[120,147331,147332,147336,147342,147356,147360,147366,147380],{"__ignoreMap":118},[123,147333,147334],{"class":125,"line":126},[123,147335,146964],{"class":2673},[123,147337,147338,147340],{"class":125,"line":140},[123,147339,53042],{"class":53707},[123,147341,137],{"class":129},[123,147343,147344,147346,147348,147350,147352,147354],{"class":125,"line":156},[123,147345,73026],{"class":164},[123,147347,147],{"class":129},[123,147349,146979],{"class":164},[123,147351,2935],{"class":133},[123,147353,132803],{"class":129},[123,147355,146986],{"class":2673},[123,147357,147358],{"class":125,"line":168},[123,147359,171],{"class":129},[123,147361,147362,147364],{"class":125,"line":268},[123,147363,132788],{"class":337},[123,147365,137],{"class":129},[123,147367,147368,147370,147372,147374,147376,147378],{"class":125,"line":291},[123,147369,72968],{"class":164},[123,147371,147],{"class":129},[123,147373,2193],{"class":164},[123,147375,147007],{"class":133},[123,147377,132803],{"class":129},[123,147379,147012],{"class":2673},[123,147381,147382],{"class":125,"line":300},[123,147383,171],{"class":129},[19,147385,147386],{},"父盒子一般命名为container",[2587,147388,147390],{"id":147389},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147392,147393,147394],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2759,147395,147396],{},"使得 Web 开发更加快捷",[3606,147398,147399],{},[29,147400,147401,147402],{},"官网：",[2759,147403,147404],{},[2846,147405,147406],{"href":147406,"rel":147407},"http:\u002F\u002Fgetbootstrap.com\u002F",[26287],[19,147409,147410],{},"可以直接去官网拿现成的东西",[26,147412,147413],{},[29,147414,147415],{},"Bootstrap的使用",[19,147417,147418],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147420,147421],{},"Bootstrap 使用四步曲：",[19,147423,147424,147427],{},[2759,147425,147426],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3929,147429],{"style":128796,"src":147430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147432,147433],{},"打开Bootstrap官网，然后下载",[3929,147435],{"style":128796,"src":147436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3929,147438],{"style":128796,"src":147439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147441,147442],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147444,147445],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147447,147448],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3929,147450],{"style":128796,"src":147451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[113,147453,147455],{"className":128940,"code":147454,"language":128942,"meta":118,"style":118},".center {\n  color: red;\n}\n",[120,147456,147457,147463,147473],{"__ignoreMap":118},[123,147458,147459,147461],{"class":125,"line":126},[123,147460,129231],{"class":337},[123,147462,137],{"class":129},[123,147464,147465,147467,147469,147471],{"class":125,"line":140},[123,147466,73305],{"class":164},[123,147468,147],{"class":129},[123,147470,59823],{"class":164},[123,147472,3760],{"class":129},[123,147474,147475],{"class":125,"line":156},[123,147476,171],{"class":129},[19,147478,147479,147482],{},[120,147480,147481],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3929,147484],{"style":128796,"src":147485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3929,147487],{"style":128796,"src":147488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3929,147490],{"style":128796,"src":147491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147493,147494],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3929,147496],{"style":128796,"src":147497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147499,147500],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,147502,147503],{"start":140},[29,147504,147505],{},"布局容器",[3929,147507],{"style":128796,"src":147508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147510,147511],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147513,147514],{},"container-fluid用于移动式布局比较方便",[26,147516,147517],{"start":156},[29,147518,147519,147520],{},"bootstrap ",[2759,147521,147522],{},"栅格系统原理",[3929,147524],{"style":128796,"src":147525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,147527,147528],{"start":168},[29,147529,147530],{},[2759,147531,147532],{},"栅格选项参数",[3929,147534],{"style":128796,"src":147535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147537,147538],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147540,17063],{},[113,147542,147543],{"className":128940,"code":147454,"language":128942,"meta":118,"style":118},[120,147544,147545,147551,147561],{"__ignoreMap":118},[123,147546,147547,147549],{"class":125,"line":126},[123,147548,129231],{"class":337},[123,147550,137],{"class":129},[123,147552,147553,147555,147557,147559],{"class":125,"line":140},[123,147554,73305],{"class":164},[123,147556,147],{"class":129},[123,147558,59823],{"class":164},[123,147560,3760],{"class":129},[123,147562,147563],{"class":125,"line":156},[123,147564,171],{"class":129},[19,147566,137983],{},[3929,147568],{"style":128796,"src":147569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147571,147572],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147574,147575],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147577,147578],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147580,147581],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147583,147584],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147586,147587],{},"汇总展示说明：",[113,147589,147590],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,147591,147592,147596,147610,147614],{"__ignoreMap":118},[123,147593,147594],{"class":125,"line":126},[123,147595,133051],{"class":2673},[123,147597,147598,147600,147602,147604,147606,147608],{"class":125,"line":140},[123,147599,3509],{"class":129},[123,147601,54016],{"class":53707},[123,147603,55889],{"class":337},[123,147605,134],{"class":129},[123,147607,133064],{"class":143},[123,147609,53714],{"class":129},[123,147611,147612],{"class":125,"line":156},[123,147613,133071],{"class":129},[123,147615,147616,147618,147620],{"class":125,"line":168},[123,147617,54190],{"class":129},[123,147619,54016],{"class":53707},[123,147621,53714],{"class":129},[3929,147623],{"style":128796,"src":147624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147626,147627],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[113,147629,147630],{"className":129687,"code":133044,"language":129689,"meta":118,"style":118},[120,147631,147632,147636,147650,147654],{"__ignoreMap":118},[123,147633,147634],{"class":125,"line":126},[123,147635,133051],{"class":2673},[123,147637,147638,147640,147642,147644,147646,147648],{"class":125,"line":140},[123,147639,3509],{"class":129},[123,147641,54016],{"class":53707},[123,147643,55889],{"class":337},[123,147645,134],{"class":129},[123,147647,133064],{"class":143},[123,147649,53714],{"class":129},[123,147651,147652],{"class":125,"line":156},[123,147653,133071],{"class":129},[123,147655,147656,147658,147660],{"class":125,"line":168},[123,147657,54190],{"class":129},[123,147659,54016],{"class":53707},[123,147661,53714],{"class":129},[26,147663,147664],{"start":268},[29,147665,147666],{},[2759,147667,147668],{},"列嵌套",[3929,147670],{"style":128796,"src":147671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147673,147674],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147676,147677],{},"没加row内部这样：",[3929,147679],{"style":128796,"src":147680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147682,147683],{},"加上row之后内部为：",[3929,147685],{"style":128796,"src":147686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,147688,147689],{"start":291},[29,147690,147691],{},[2759,147692,147693],{},"列偏移",[3929,147695],{"style":128796,"src":147696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147698,147699],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147701,147702],{},"要加偏移量，即偏移份数",[19,147704,147705],{},"偏移的份数=12-两个盒子的份数",[26,147707,147708],{"start":300},[29,147709,147710],{},[2759,147711,147712],{},"列排序",[3929,147714],{"style":128796,"src":147715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147717,147718],{},"pull拉左；push推右",[26,147720,147721],{"start":305},[29,147722,147723],{},[2759,147724,147725],{},"响应式工具",[3929,147727],{"style":128796,"src":147728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147730,147731],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[2587,147733,147735],{"id":147734},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147737,147738],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147740,147741],{},"ul {",[19,147743,147744],{},"list-style: none;",[19,147746,147747],{},"margin:0;",[19,147749,147750],{},"padding:0; }",[3929,147752],{"style":128796,"src":147753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3929,147755],{"style":128796,"src":147756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147758,147759],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147761,71290],{},[113,147763,147764],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,147765,147766,147772,147782],{"__ignoreMap":118},[123,147767,147768,147770],{"class":125,"line":126},[123,147769,132788],{"class":337},[123,147771,137],{"class":129},[123,147773,147774,147776,147778,147780],{"class":125,"line":140},[123,147775,133420],{"class":164},[123,147777,147],{"class":129},[123,147779,26163],{"class":164},[123,147781,3760],{"class":129},[123,147783,147784],{"class":125,"line":156},[123,147785,171],{"class":129},[19,147787,72853],{},[113,147789,147790],{"className":128940,"code":141610,"language":128942,"meta":118,"style":118},[120,147791,147792,147798,147808],{"__ignoreMap":118},[123,147793,147794,147796],{"class":125,"line":126},[123,147795,132788],{"class":337},[123,147797,137],{"class":129},[123,147799,147800,147802,147804,147806],{"class":125,"line":140},[123,147801,133420],{"class":164},[123,147803,147],{"class":129},[123,147805,26163],{"class":164},[123,147807,3760],{"class":129},[123,147809,147810],{"class":125,"line":156},[123,147811,171],{"class":129},[14,147813,147815],{"id":147814},"_215-swiper-插件使用","21.5 swiper 插件使用",[3606,147817,147818,147821,147824],{},[29,147819,147820],{},"下载需要的css和js文件html页面中 引入相关文件",[29,147822,147823],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,147825,147826],{},"根据需求定制修改模块",[3929,147828],{"style":128796,"src":147829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147831,147832],{},"解压后将这两部分放到项目中",[3929,147834],{"style":128796,"src":147835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147837,147838],{},"这个插件可以帮助我们实现轮播图效果",[19,147840,147841],{},"用法：",[3929,147843],{"style":128796,"src":147844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147846,147847],{},"找到自己喜欢的",[3929,147849],{"style":128796,"src":147850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147852,147853],{},"右键，查看网页源代码",[3929,147855],{"style":128796,"src":147856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147858,147859],{},"复制人家的结构内容",[19,147861,147862],{},"然后去看API文档：",[3929,147864],{"style":128796,"src":147865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147867,147868],{},"可以看看如何修改样式",[19,147870,147871],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2526,147873,147874],{},"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":118,"searchDepth":140,"depth":140,"links":147876},[147877,147882,147886,147891,147896],{"id":146677,"depth":140,"text":146678,"children":147878},[147879,147880,147881],{"id":146681,"depth":156,"text":146682},{"id":146691,"depth":156,"text":146692},{"id":146786,"depth":156,"text":146787},{"id":146801,"depth":140,"text":146802,"children":147883},[147884,147885],{"id":146823,"depth":156,"text":146824},{"id":146839,"depth":156,"text":146840},{"id":146914,"depth":140,"text":146915,"children":147887},[147888,147889,147890],{"id":146927,"depth":156,"text":146928},{"id":147151,"depth":156,"text":147152},{"id":147158,"depth":156,"text":147159},{"id":147299,"depth":140,"text":147300,"children":147892},[147893,147894,147895],{"id":147326,"depth":156,"text":147327},{"id":147389,"depth":156,"text":147390},{"id":147734,"depth":156,"text":147735},{"id":147814,"depth":140,"text":147815},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146669,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147903,"title":147904,"body":147905,"description":2544,"extension":2545,"meta":148125,"navigation":231,"path":148126,"seo":148127,"stem":148128,"__hash__":148129},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147906,"toc":148121},[147907,147910,147914,147917,147932,147937,147940,147945,147980,147985,147997,148002,148015,148020,148037,148042,148062,148067,148085,148088,148091,148094,148097,148101,148104,148107,148110,148113,148116,148119],[10,147908,147904],{"id":147909},"_22-代码提交与新型相对单位",[14,147911,147913],{"id":147912},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147915,147916],{},"法1：",[26,147918,147919,147926,147929],{},[29,147920,147921,147922],{},"登录网站注册：",[2846,147923,147924],{"href":147924,"rel":147925},"https:\u002F\u002Fgitee.com\u002F",[26287],[29,147927,147928],{},"码云创建新的仓库",[29,147930,147931],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3606,147933,147934],{},[29,147935,147936],{},"在网站根目录右键-- Git Bash Here",[3929,147938],{"style":128796,"src":147939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3606,147941,147942],{},[29,147943,147944],{},"如果是第一次利用git提交，请配置好全局选项",[113,147946,147948],{"className":119684,"code":147947,"language":119686,"meta":118,"style":118},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[120,147949,147950,147966],{"__ignoreMap":118},[123,147951,147952,147955,147957,147960,147963],{"class":125,"line":126},[123,147953,147954],{"class":337},"git",[123,147956,122107],{"class":143},[123,147958,147959],{"class":164}," --global",[123,147961,147962],{"class":143}," user.name",[123,147964,147965],{"class":143}," \"你的名字\"\n",[123,147967,147968,147970,147972,147974,147977],{"class":125,"line":140},[123,147969,147954],{"class":337},[123,147971,122107],{"class":143},[123,147973,147959],{"class":164},[123,147975,147976],{"class":143}," user.email",[123,147978,147979],{"class":143}," \"你的邮箱\"\n",[3606,147981,147982],{},[29,147983,147984],{},"初始化仓库",[113,147986,147988],{"className":119684,"code":147987,"language":119686,"meta":118,"style":118},"git init\n",[120,147989,147990],{"__ignoreMap":118},[123,147991,147992,147994],{"class":125,"line":126},[123,147993,147954],{"class":337},[123,147995,147996],{"class":143}," init\n",[3606,147998,147999],{},[29,148000,148001],{},"把本地文件放到暂存区",[113,148003,148005],{"className":119684,"code":148004,"language":119686,"meta":118,"style":118},"git add .\n",[120,148006,148007],{"__ignoreMap":118},[123,148008,148009,148011,148013],{"class":125,"line":126},[123,148010,147954],{"class":337},[123,148012,7643],{"class":143},[123,148014,31161],{"class":143},[3606,148016,148017],{},[29,148018,148019],{},"把本地文件放到本地仓库里面",[113,148021,148023],{"className":119684,"code":148022,"language":119686,"meta":118,"style":118},"git commit -m \"first commit\"\n",[120,148024,148025],{"__ignoreMap":118},[123,148026,148027,148029,148032,148034],{"class":125,"line":126},[123,148028,147954],{"class":337},[123,148030,148031],{"class":143}," commit",[123,148033,103275],{"class":164},[123,148035,148036],{"class":143}," \"first commit\"\n",[3606,148038,148039],{},[29,148040,148041],{},"链接远程仓库",[113,148043,148045],{"className":119684,"code":148044,"language":119686,"meta":118,"style":118},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[120,148046,148047],{"__ignoreMap":118},[123,148048,148049,148051,148054,148056,148059],{"class":125,"line":126},[123,148050,147954],{"class":337},[123,148052,148053],{"class":143}," remote",[123,148055,7643],{"class":143},[123,148057,148058],{"class":143}," origin",[123,148060,148061],{"class":143}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3606,148063,148064],{},[29,148065,148066],{},"把本地仓库的文件推送到远程仓库 push",[113,148068,148070],{"className":119684,"code":148069,"language":119686,"meta":118,"style":118},"git push -u origin master\n",[120,148071,148072],{"__ignoreMap":118},[123,148073,148074,148076,148078,148080,148082],{"class":125,"line":126},[123,148075,147954],{"class":337},[123,148077,31436],{"class":143},[123,148079,30711],{"class":164},[123,148081,148058],{"class":143},[123,148083,148084],{"class":143}," master\n",[3929,148086],{"style":128796,"src":148087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148089,148090],{},"上方方法暂未实现，后边学完git后在整",[19,148092,148093],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3929,148095],{"style":128796,"src":148096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148098,148100],{"id":148099},"_222-新型相对单位","22.2 新型相对单位",[3929,148102],{"style":128796,"src":148103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3929,148105],{"style":128796,"src":148106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148108,148109],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148111,148112],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3929,148114],{"style":128796,"src":148115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148117,148118],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2526,148120,26380],{},{"title":118,"searchDepth":140,"depth":140,"links":148122},[148123,148124],{"id":147912,"depth":140,"text":147913},{"id":148099,"depth":140,"text":148100},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147904,"description":2544},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148131,"title":148132,"body":148133,"description":148137,"extension":2545,"meta":148138,"navigation":231,"path":148139,"seo":148140,"stem":148141,"__hash__":148142},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148134,"toc":148135},[],{"title":118,"searchDepth":140,"depth":140,"links":148136},[],"自己正经开始学编程的第一门语言！",{"category":95233},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148132,"description":148137},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148144,"title":148145,"body":148146,"description":2544,"extension":2545,"meta":149285,"navigation":231,"path":149286,"seo":149287,"stem":149288,"__hash__":149289},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148147,"toc":149261},[148148,148151,148155,148158,148161,148185,148188,148194,148198,148201,148228,148231,148271,148274,148286,148289,148295,148299,148303,148330,148347,148354,148358,148361,148387,148390,148394,148397,148437,148440,148457,148463,148467,148472,148516,148519,148537,148540,148605,148609,148616,148619,148634,148637,148646,148649,148660,148663,148672,148675,148692,148695,148710,148714,148718,148721,148723,148743,148747,148750,148753,148764,148767,148773,148777,148783,148810,148813,148825,148828,148839,148842,148848,148852,148858,148908,148911,148953,148956,148989,148992,149026,149030,149033,149053,149056,149092,149095,149108,149112,149116,149122,149125,149138,149142,149145,149151,149154,149158,149161,149164,149209,149213,149229,149235,149242,149248,149258],[10,148149,148145],{"id":148150},"_1-python环境与第一个程序",[14,148152,148154],{"id":148153},"_11-什么是python","1.1 什么是Python",[19,148156,148157],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148159,148160],{},"理解 Python 时抓住三个关键词：",[26,148162,148163,148166,148169],{},[29,148164,148165],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,148167,148168],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,148170,148171,148172,2820,148175,2820,148178,2820,148180,2820,148182,2494],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[120,148173,148174],{},"os",[120,148176,148177],{},"sys",[120,148179,179],{},[120,148181,60262],{},[120,148183,148184],{},"datetime",[19,148186,148187],{},"Python 程序的运行链路：",[113,148189,148192],{"className":148190,"code":148191,"language":7621,"meta":118},[7619],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[120,148193,148191],{"__ignoreMap":118},[14,148195,148197],{"id":148196},"_12-python解释器","1.2 Python解释器",[19,148199,148200],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[113,148202,148204],{"className":328,"code":148203,"language":330,"meta":118,"style":118},"python --version\npython3 --version\npython\npython3\n",[120,148205,148206,148212,148218,148223],{"__ignoreMap":118},[123,148207,148208,148210],{"class":125,"line":126},[123,148209,117],{"class":337},[123,148211,28714],{"class":164},[123,148213,148214,148216],{"class":125,"line":140},[123,148215,103272],{"class":337},[123,148217,28714],{"class":164},[123,148219,148220],{"class":125,"line":156},[123,148221,148222],{"class":337},"python\n",[123,148224,148225],{"class":125,"line":168},[123,148226,148227],{"class":337},"python3\n",[19,148229,148230],{},"进入交互模式后，可以直接输入表达式：",[113,148232,148234],{"className":115,"code":148233,"language":117,"meta":118,"style":118},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[120,148235,148236,148247,148252,148266],{"__ignoreMap":118},[123,148237,148238,148241,148243,148245],{"class":125,"line":126},[123,148239,148240],{"class":133},">>>",[123,148242,27540],{"class":164},[123,148244,47973],{"class":133},[123,148246,50130],{"class":164},[123,148248,148249],{"class":125,"line":140},[123,148250,148251],{"class":164},"3\n",[123,148253,148254,148256,148259,148261,148264],{"class":125,"line":156},[123,148255,148240],{"class":133},[123,148257,148258],{"class":164}," print",[123,148260,1315],{"class":129},[123,148262,148263],{"class":143},"\"hello python\"",[123,148265,288],{"class":129},[123,148267,148268],{"class":125,"line":168},[123,148269,148270],{"class":129},"hello python\n",[19,148272,148273],{},"退出交互模式：",[113,148275,148277],{"className":115,"code":148276,"language":117,"meta":118,"style":118},"exit()\n",[120,148278,148279],{"__ignoreMap":118},[123,148280,148281,148284],{"class":125,"line":126},[123,148282,148283],{"class":164},"exit",[123,148285,4420],{"class":129},[19,148287,148288],{},"或使用快捷键：",[113,148290,148293],{"className":148291,"code":148292,"language":7621,"meta":118},[7619],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[120,148294,148292],{"__ignoreMap":118},[14,148296,148298],{"id":148297},"_13-安装python","1.3 安装Python",[2587,148300,148302],{"id":148301},"_131-windows安装","1.3.1 Windows安装",[26,148304,148305,148312,148315,148321,148327],{},[29,148306,148307,148308],{},"打开 Python 官网：",[2846,148309,148310],{"href":148310,"rel":148311},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26287],[29,148313,148314],{},"下载 Windows Installer。",[29,148316,148317,148318,2494],{},"安装时勾选 ",[120,148319,148320],{},"Add Python to PATH",[29,148322,148323,148324,2494],{},"点击 ",[120,148325,148326],{},"Install Now",[29,148328,148329],{},"安装完成后打开命令提示符验证：",[113,148331,148333],{"className":328,"code":148332,"language":330,"meta":118,"style":118},"python --version\npip --version\n",[120,148334,148335,148341],{"__ignoreMap":118},[123,148336,148337,148339],{"class":125,"line":126},[123,148338,117],{"class":337},[123,148340,28714],{"class":164},[123,148342,148343,148345],{"class":125,"line":140},[123,148344,338],{"class":337},[123,148346,28714],{"class":164},[19,148348,148349,148350,148353],{},"如果提示 ",[120,148351,148352],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[2587,148355,148357],{"id":148356},"_132-macos安装","1.3.2 macOS安装",[19,148359,148360],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[113,148362,148364],{"className":328,"code":148363,"language":330,"meta":118,"style":118},"brew install python\npython3 --version\npip3 --version\n",[120,148365,148366,148375,148381],{"__ignoreMap":118},[123,148367,148368,148371,148373],{"class":125,"line":126},[123,148369,148370],{"class":337},"brew",[123,148372,341],{"class":143},[123,148374,126706],{"class":143},[123,148376,148377,148379],{"class":125,"line":140},[123,148378,103272],{"class":337},[123,148380,28714],{"class":164},[123,148382,148383,148385],{"class":125,"line":156},[123,148384,122088],{"class":337},[123,148386,28714],{"class":164},[19,148388,148389],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[2587,148391,148393],{"id":148392},"_133-linux安装","1.3.3 Linux安装",[19,148395,148396],{},"Ubuntu\u002FDebian：",[113,148398,148400],{"className":328,"code":148399,"language":330,"meta":118,"style":118},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[120,148401,148402,148410,148425,148431],{"__ignoreMap":118},[123,148403,148404,148406,148408],{"class":125,"line":126},[123,148405,26999],{"class":337},[123,148407,119705],{"class":143},[123,148409,28663],{"class":143},[123,148411,148412,148414,148416,148418,148420,148422],{"class":125,"line":140},[123,148413,26999],{"class":337},[123,148415,119705],{"class":143},[123,148417,341],{"class":143},[123,148419,106793],{"class":143},[123,148421,103191],{"class":143},[123,148423,148424],{"class":143}," python3-venv\n",[123,148426,148427,148429],{"class":125,"line":156},[123,148428,103272],{"class":337},[123,148430,28714],{"class":164},[123,148432,148433,148435],{"class":125,"line":168},[123,148434,122088],{"class":337},[123,148436,28714],{"class":164},[19,148438,148439],{},"Fedora：",[113,148441,148443],{"className":328,"code":148442,"language":330,"meta":118,"style":118},"sudo dnf install python3 python3-pip\n",[120,148444,148445],{"__ignoreMap":118},[123,148446,148447,148449,148451,148453,148455],{"class":125,"line":126},[123,148448,26999],{"class":337},[123,148450,28736],{"class":143},[123,148452,341],{"class":143},[123,148454,106793],{"class":143},[123,148456,122153],{"class":143},[19,148458,148459,148460,148462],{},"Linux 上通常使用 ",[120,148461,103272],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148464,148466],{"id":148465},"_14-pip包管理器","1.4 pip包管理器",[19,148468,148469,148471],{},[120,148470,338],{}," 用来安装第三方库。",[113,148473,148475],{"className":328,"code":148474,"language":330,"meta":118,"style":118},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[120,148476,148477,148486,148495,148503,148509],{"__ignoreMap":118},[123,148478,148479,148481,148483],{"class":125,"line":126},[123,148480,338],{"class":337},[123,148482,341],{"class":143},[123,148484,148485],{"class":143}," requests\n",[123,148487,148488,148490,148493],{"class":125,"line":140},[123,148489,338],{"class":337},[123,148491,148492],{"class":143}," uninstall",[123,148494,148485],{"class":143},[123,148496,148497,148499,148501],{"class":125,"line":156},[123,148498,338],{"class":337},[123,148500,119962],{"class":143},[123,148502,148485],{"class":143},[123,148504,148505,148507],{"class":125,"line":168},[123,148506,338],{"class":337},[123,148508,121343],{"class":143},[123,148510,148511,148513],{"class":125,"line":268},[123,148512,338],{"class":337},[123,148514,148515],{"class":143}," freeze\n",[19,148517,148518],{},"国内网络较慢时可以临时使用镜像：",[113,148520,148522],{"className":328,"code":148521,"language":330,"meta":118,"style":118},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[120,148523,148524],{"__ignoreMap":118},[123,148525,148526,148528,148530,148533,148535],{"class":125,"line":126},[123,148527,338],{"class":337},[123,148529,341],{"class":143},[123,148531,148532],{"class":143}," requests",[123,148534,28851],{"class":164},[123,148536,122116],{"class":143},[19,148538,148539],{},"常见第三方库：",[48,148541,148542,148550],{},[51,148543,148544],{},[54,148545,148546,148548],{},[57,148547,59],{},[57,148549,739],{},[64,148551,148552,148560,148567,148575,148582,148589,148597],{},[54,148553,148554,148557],{},[69,148555,148556],{},"requests",[69,148558,148559],{},"网络请求",[54,148561,148562,148564],{},[69,148563,103019],{},[69,148565,148566],{},"数值计算",[54,148568,148569,148572],{},[69,148570,148571],{},"pandas",[69,148573,148574],{},"表格数据处理",[54,148576,148577,148579],{},[69,148578,71],{},[69,148580,148581],{},"绘图",[54,148583,148584,148586],{},[69,148585,87],{},[69,148587,148588],{},"ECharts 图表",[54,148590,148591,148594],{},[69,148592,148593],{},"flask",[69,148595,148596],{},"Web 后端",[54,148598,148599,148602],{},[69,148600,148601],{},"pytest",[69,148603,148604],{},"自动化测试",[14,148606,148608],{"id":148607},"_15-虚拟环境","1.5 虚拟环境",[19,148610,148611,148612,148615],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[120,148613,148614],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148617,148618],{},"创建虚拟环境：",[113,148620,148622],{"className":328,"code":148621,"language":330,"meta":118,"style":118},"python -m venv .venv\n",[120,148623,148624],{"__ignoreMap":118},[123,148625,148626,148628,148630,148632],{"class":125,"line":126},[123,148627,117],{"class":337},[123,148629,103275],{"class":164},[123,148631,103278],{"class":143},[123,148633,103281],{"class":143},[19,148635,148636],{},"Windows 激活：",[113,148638,148640],{"className":328,"code":148639,"language":330,"meta":118,"style":118},".venv\\Scripts\\activate\n",[120,148641,148642],{"__ignoreMap":118},[123,148643,148644],{"class":125,"line":126},[123,148645,148639],{"class":337},[19,148647,148648],{},"macOS\u002FLinux 激活：",[113,148650,148652],{"className":328,"code":148651,"language":330,"meta":118,"style":118},"source .venv\u002Fbin\u002Factivate\n",[120,148653,148654],{"__ignoreMap":118},[123,148655,148656,148658],{"class":125,"line":126},[123,148657,103286],{"class":164},[123,148659,103289],{"class":143},[19,148661,148662],{},"退出虚拟环境：",[113,148664,148666],{"className":328,"code":148665,"language":330,"meta":118,"style":118},"deactivate\n",[120,148667,148668],{"__ignoreMap":118},[123,148669,148670],{"class":125,"line":126},[123,148671,148665],{"class":337},[19,148673,148674],{},"保存依赖：",[113,148676,148678],{"className":328,"code":148677,"language":330,"meta":118,"style":118},"pip freeze > requirements.txt\n",[120,148679,148680],{"__ignoreMap":118},[123,148681,148682,148684,148687,148689],{"class":125,"line":126},[123,148683,338],{"class":337},[123,148685,148686],{"class":143}," freeze",[123,148688,28643],{"class":133},[123,148690,148691],{"class":143}," requirements.txt\n",[19,148693,148694],{},"安装依赖：",[113,148696,148698],{"className":328,"code":148697,"language":330,"meta":118,"style":118},"pip install -r requirements.txt\n",[120,148699,148700],{"__ignoreMap":118},[123,148701,148702,148704,148706,148708],{"class":125,"line":126},[123,148703,338],{"class":337},[123,148705,341],{"class":143},[123,148707,122027],{"class":164},[123,148709,148691],{"class":143},[14,148711,148713],{"id":148712},"_16-开发工具","1.6 开发工具",[2587,148715,148717],{"id":148716},"_161-pycharm","1.6.1 PyCharm",[19,148719,148720],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148722,124450],{},[26,148724,148725,148728,148731,148737,148740],{},[29,148726,148727],{},"New Project：创建项目。",[29,148729,148730],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,148732,148733,148734,128371],{},"New Python File：创建 ",[120,148735,148736],{},".py",[29,148738,148739],{},"Run：运行当前文件。",[29,148741,148742],{},"Debug：断点调试。",[2587,148744,148746],{"id":148745},"_162-vs-code","1.6.2 VS Code",[19,148748,148749],{},"VS Code 轻量，适合后续多语言开发。",[19,148751,148752],{},"建议安装插件：",[26,148754,148755,148758,148761],{},[29,148756,148757],{},"Python。",[29,148759,148760],{},"Pylance。",[29,148762,148763],{},"Jupyter。",[19,148765,148766],{},"选择解释器：",[113,148768,148771],{"className":148769,"code":148770,"language":7621,"meta":118},[7619],"Ctrl + Shift + P -> Python: Select Interpreter\n",[120,148772,148770],{"__ignoreMap":118},[14,148774,148776],{"id":148775},"_17-第一个python程序","1.7 第一个Python程序",[19,148778,148779,148780,1159],{},"创建文件 ",[120,148781,148782],{},"hello.py",[113,148784,148786],{"className":115,"code":148785,"language":117,"meta":118,"style":118},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[120,148787,148788,148799],{"__ignoreMap":118},[123,148789,148790,148792,148794,148797],{"class":125,"line":126},[123,148791,294],{"class":164},[123,148793,1315],{"class":129},[123,148795,148796],{"class":143},"\"Hello World\"",[123,148798,288],{"class":129},[123,148800,148801,148803,148805,148808],{"class":125,"line":140},[123,148802,294],{"class":164},[123,148804,1315],{"class":129},[123,148806,148807],{"class":143},"\"你好，Python\"",[123,148809,288],{"class":129},[19,148811,148812],{},"在终端运行：",[113,148814,148816],{"className":328,"code":148815,"language":330,"meta":118,"style":118},"python hello.py\n",[120,148817,148818],{"__ignoreMap":118},[123,148819,148820,148822],{"class":125,"line":126},[123,148821,117],{"class":337},[123,148823,148824],{"class":143}," hello.py\n",[19,148826,148827],{},"或：",[113,148829,148831],{"className":328,"code":148830,"language":330,"meta":118,"style":118},"python3 hello.py\n",[120,148832,148833],{"__ignoreMap":118},[123,148834,148835,148837],{"class":125,"line":126},[123,148836,103272],{"class":337},[123,148838,148824],{"class":143},[19,148840,148841],{},"输出：",[113,148843,148846],{"className":148844,"code":148845,"language":7621,"meta":118},[7619],"Hello World\n你好，Python\n",[120,148847,148845],{"__ignoreMap":118},[14,148849,148851],{"id":148850},"_18-print函数","1.8 print函数",[19,148853,148854,148857],{},[120,148855,148856],{},"print()"," 用来输出内容。",[113,148859,148861],{"className":115,"code":148860,"language":117,"meta":118,"style":118},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[120,148862,148863,148873,148883,148893],{"__ignoreMap":118},[123,148864,148865,148867,148869,148871],{"class":125,"line":126},[123,148866,294],{"class":164},[123,148868,1315],{"class":129},[123,148870,8277],{"class":143},[123,148872,288],{"class":129},[123,148874,148875,148877,148879,148881],{"class":125,"line":140},[123,148876,294],{"class":164},[123,148878,1315],{"class":129},[123,148880,259],{"class":164},[123,148882,288],{"class":129},[123,148884,148885,148887,148889,148891],{"class":125,"line":156},[123,148886,294],{"class":164},[123,148888,1315],{"class":129},[123,148890,2664],{"class":164},[123,148892,288],{"class":129},[123,148894,148895,148897,148899,148902,148904,148906],{"class":125,"line":168},[123,148896,294],{"class":164},[123,148898,1315],{"class":129},[123,148900,148901],{"class":143},"\"年龄:\"",[123,148903,251],{"class":129},[123,148905,3252],{"class":164},[123,148907,288],{"class":129},[19,148909,148910],{},"多个内容用逗号隔开，默认中间加空格：",[113,148912,148914],{"className":115,"code":148913,"language":117,"meta":118,"style":118},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[120,148915,148916,148926,148936],{"__ignoreMap":118},[123,148917,148918,148921,148923],{"class":125,"line":126},[123,148919,148920],{"class":129},"name ",[123,148922,134],{"class":133},[123,148924,148925],{"class":143}," \"张三\"\n",[123,148927,148928,148931,148933],{"class":125,"line":140},[123,148929,148930],{"class":129},"age ",[123,148932,134],{"class":133},[123,148934,148935],{"class":164}," 18\n",[123,148937,148938,148940,148942,148945,148948,148950],{"class":125,"line":156},[123,148939,294],{"class":164},[123,148941,1315],{"class":129},[123,148943,148944],{"class":143},"\"姓名:\"",[123,148946,148947],{"class":129},", name, ",[123,148949,148901],{"class":143},[123,148951,148952],{"class":129},", age)\n",[19,148954,148955],{},"修改分隔符：",[113,148957,148959],{"className":115,"code":148958,"language":117,"meta":118,"style":118},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[120,148960,148961],{"__ignoreMap":118},[123,148962,148963,148965,148967,148970,148972,148974,148976,148978,148980,148983,148985,148987],{"class":125,"line":126},[123,148964,294],{"class":164},[123,148966,1315],{"class":129},[123,148968,148969],{"class":143},"\"2024\"",[123,148971,251],{"class":129},[123,148973,56719],{"class":143},[123,148975,251],{"class":129},[123,148977,56719],{"class":143},[123,148979,251],{"class":129},[123,148981,148982],{"class":279},"sep",[123,148984,134],{"class":133},[123,148986,34895],{"class":143},[123,148988,288],{"class":129},[19,148990,148991],{},"修改结尾符：",[113,148993,148995],{"className":115,"code":148994,"language":117,"meta":118,"style":118},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[120,148996,148997,149015],{"__ignoreMap":118},[123,148998,148999,149001,149003,149005,149007,149009,149011,149013],{"class":125,"line":126},[123,149000,294],{"class":164},[123,149002,1315],{"class":129},[123,149004,8277],{"class":143},[123,149006,251],{"class":129},[123,149008,48208],{"class":279},[123,149010,134],{"class":133},[123,149012,6798],{"class":143},[123,149014,288],{"class":129},[123,149016,149017,149019,149021,149024],{"class":125,"line":140},[123,149018,294],{"class":164},[123,149020,1315],{"class":129},[123,149022,149023],{"class":143},"\"python\"",[123,149025,288],{"class":129},[14,149027,149029],{"id":149028},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149031,149032],{},"交互运行适合临时验证：",[113,149034,149036],{"className":115,"code":149035,"language":117,"meta":118,"style":118},">>> 10 * 3\n30\n",[120,149037,149038,149048],{"__ignoreMap":118},[123,149039,149040,149042,149044,149046],{"class":125,"line":126},[123,149041,148240],{"class":133},[123,149043,4482],{"class":164},[123,149045,8951],{"class":133},[123,149047,122424],{"class":164},[123,149049,149050],{"class":125,"line":140},[123,149051,149052],{"class":164},"30\n",[19,149054,149055],{},"脚本运行适合保存程序：",[113,149057,149059],{"className":115,"code":149058,"language":117,"meta":118,"style":118},"price = 8\ncount = 5\nprint(price * count)\n",[120,149060,149061,149071,149080],{"__ignoreMap":118},[123,149062,149063,149066,149068],{"class":125,"line":126},[123,149064,149065],{"class":129},"price ",[123,149067,134],{"class":133},[123,149069,149070],{"class":164}," 8\n",[123,149072,149073,149076,149078],{"class":125,"line":140},[123,149074,149075],{"class":129},"count ",[123,149077,134],{"class":133},[123,149079,56830],{"class":164},[123,149081,149082,149084,149087,149089],{"class":125,"line":156},[123,149083,294],{"class":164},[123,149085,149086],{"class":129},"(price ",[123,149088,3060],{"class":133},[123,149090,149091],{"class":129}," count)\n",[19,149093,149094],{},"实际学习中推荐：",[26,149096,149097,149100,149105],{},[29,149098,149099],{},"临时试一个语法，用交互模式。",[29,149101,149102,149103,128371],{},"写完整练习，用 ",[120,149104,148736],{},[29,149106,149107],{},"写项目，用独立目录和虚拟环境。",[14,149109,149111],{"id":149110},"_110-常见错误","1.10 常见错误",[2587,149113,149115],{"id":149114},"_1101-命令找不到","1.10.1 命令找不到",[113,149117,149120],{"className":149118,"code":149119,"language":7621,"meta":118},[7619],"python: command not found\n",[120,149121,149119],{"__ignoreMap":118},[19,149123,149124],{},"原因：",[26,149126,149127,149130,149133],{},[29,149128,149129],{},"没安装 Python。",[29,149131,149132],{},"PATH 没配置。",[29,149134,149135,149136,2494],{},"Linux\u002FmacOS 应该使用 ",[120,149137,103272],{},[2587,149139,149141],{"id":149140},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149143,149144],{},"不要把文件命名为：",[113,149146,149149],{"className":149147,"code":149148,"language":7621,"meta":118},[7619],"random.py\njson.py\ntime.py\nrequests.py\n",[120,149150,149148],{"__ignoreMap":118},[19,149152,149153],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[2587,149155,149157],{"id":149156},"_1103-中文乱码","1.10.3 中文乱码",[19,149159,149160],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149162,149163],{},"如果读写文件出现乱码，要明确指定编码：",[113,149165,149167],{"className":115,"code":149166,"language":117,"meta":118,"style":118},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[120,149168,149169,149199],{"__ignoreMap":118},[123,149170,149171,149173,149175,149177,149180,149182,149184,149186,149188,149190,149192,149194,149196],{"class":125,"line":126},[123,149172,1309],{"class":133},[123,149174,1312],{"class":164},[123,149176,1315],{"class":129},[123,149178,149179],{"class":143},"\"data.txt\"",[123,149181,251],{"class":129},[123,149183,1323],{"class":143},[123,149185,251],{"class":129},[123,149187,1328],{"class":279},[123,149189,134],{"class":133},[123,149191,1333],{"class":143},[123,149193,1336],{"class":129},[123,149195,547],{"class":133},[123,149197,149198],{"class":129}," f:\n",[123,149200,149201,149204,149206],{"class":125,"line":140},[123,149202,149203],{"class":129},"    content ",[123,149205,134],{"class":133},[123,149207,149208],{"class":129}," f.read()\n",[14,149210,149212],{"id":149211},"_111-本章练习","1.11 本章练习",[26,149214,149215,149218,149224],{},[29,149216,149217],{},"安装 Python，并在终端输出版本号。",[29,149219,149220,149221,149223],{},"新建 ",[120,149222,148782],{},"，输出自己的姓名、年龄、学习目标。",[29,149225,106756,149226,149228],{},[120,149227,148856],{}," 输出下面格式：",[113,149230,149233],{"className":149231,"code":149232,"language":7621,"meta":118},[7619],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[120,149234,149232],{"__ignoreMap":118},[26,149236,149237],{"start":168},[29,149238,106756,149239,149241],{},[120,149240,148982],{}," 输出日期：",[113,149243,149246],{"className":149244,"code":149245,"language":7621,"meta":118},[7619],"2024-10-10\n",[120,149247,149245],{"__ignoreMap":118},[26,149249,149250],{"start":268},[29,149251,106756,149252,149254,149255,149257],{},[120,149253,48208],{}," 让两次 ",[120,149256,148856],{}," 输出在同一行。",[2526,149259,149260],{},"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":118,"searchDepth":140,"depth":140,"links":149262},[149263,149264,149265,149270,149271,149272,149276,149277,149278,149279,149284],{"id":148153,"depth":140,"text":148154},{"id":148196,"depth":140,"text":148197},{"id":148297,"depth":140,"text":148298,"children":149266},[149267,149268,149269],{"id":148301,"depth":156,"text":148302},{"id":148356,"depth":156,"text":148357},{"id":148392,"depth":156,"text":148393},{"id":148465,"depth":140,"text":148466},{"id":148607,"depth":140,"text":148608},{"id":148712,"depth":140,"text":148713,"children":149273},[149274,149275],{"id":148716,"depth":156,"text":148717},{"id":148745,"depth":156,"text":148746},{"id":148775,"depth":140,"text":148776},{"id":148850,"depth":140,"text":148851},{"id":149028,"depth":140,"text":149029},{"id":149110,"depth":140,"text":149111,"children":149280},[149281,149282,149283],{"id":149114,"depth":156,"text":149115},{"id":149140,"depth":156,"text":149141},{"id":149156,"depth":156,"text":149157},{"id":149211,"depth":140,"text":149212},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148145,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":4,"title":5,"body":149291,"description":2544,"extension":2545,"meta":151434,"navigation":231,"path":2547,"seo":151435,"stem":2549,"__hash__":2550},{"type":7,"value":149292,"toc":151419},[149293,149295,149297,149299,149301,149313,149315,149351,149353,149355,149357,149359,149393,149395,149425,149427,149509,149511,149523,149525,149549,149551,149553,149639,149643,149645,149657,149659,149663,149835,149837,149897,149899,149901,149977,149979,150001,150003,150199,150201,150203,150207,150303,150305,150547,150549,150551,150553,150563,150565,150735,150737,151081,151085,151087,151089,151205,151207,151377,151379,151381,151403,151405,151417],[10,149294,5],{"id":12},[14,149296,17],{"id":16},[19,149298,21],{},[19,149300,24],{},[26,149302,149303,149305,149307,149309,149311],{},[29,149304,31],{},[29,149306,34],{},[29,149308,37],{},[29,149310,40],{},[29,149312,43],{},[19,149314,46],{},[48,149316,149317,149325],{},[51,149318,149319],{},[54,149320,149321,149323],{},[57,149322,59],{},[57,149324,62],{},[64,149326,149327,149333,149339,149345],{},[54,149328,149329,149331],{},[69,149330,71],{},[69,149332,74],{},[54,149334,149335,149337],{},[69,149336,79],{},[69,149338,82],{},[54,149340,149341,149343],{},[69,149342,87],{},[69,149344,90],{},[54,149346,149347,149349],{},[69,149348,95],{},[69,149350,98],{},[19,149352,101],{},[14,149354,105],{"id":104},[19,149356,108],{},[19,149358,111],{},[113,149360,149361],{"className":115,"code":116,"language":117,"meta":118,"style":118},[120,149362,149363,149371,149381,149389],{"__ignoreMap":118},[123,149364,149365,149367,149369],{"class":125,"line":126},[123,149366,130],{"class":129},[123,149368,134],{"class":133},[123,149370,137],{"class":129},[123,149372,149373,149375,149377,149379],{"class":125,"line":140},[123,149374,144],{"class":143},[123,149376,147],{"class":129},[123,149378,150],{"class":143},[123,149380,153],{"class":129},[123,149382,149383,149385,149387],{"class":125,"line":156},[123,149384,159],{"class":143},[123,149386,147],{"class":129},[123,149388,165],{"class":164},[123,149390,149391],{"class":125,"line":168},[123,149392,171],{"class":129},[19,149394,174],{},[113,149396,149397],{"className":177,"code":178,"language":179,"meta":118,"style":118},[120,149398,149399,149403,149413,149421],{"__ignoreMap":118},[123,149400,149401],{"class":125,"line":126},[123,149402,186],{"class":129},[123,149404,149405,149407,149409,149411],{"class":125,"line":140},[123,149406,191],{"class":164},[123,149408,147],{"class":129},[123,149410,150],{"class":143},[123,149412,153],{"class":129},[123,149414,149415,149417,149419],{"class":125,"line":156},[123,149416,202],{"class":164},[123,149418,147],{"class":129},[123,149420,165],{"class":164},[123,149422,149423],{"class":125,"line":168},[123,149424,171],{"class":129},[19,149426,213],{},[113,149428,149429],{"className":115,"code":216,"language":117,"meta":118,"style":118},[120,149430,149431,149437,149441,149465,149469,149485,149491,149495,149503],{"__ignoreMap":118},[123,149432,149433,149435],{"class":125,"line":126},[123,149434,223],{"class":133},[123,149436,226],{"class":129},[123,149438,149439],{"class":125,"line":140},[123,149440,232],{"emptyLinePlaceholder":231},[123,149442,149443,149445,149447,149449,149451,149453,149455,149457,149459,149461,149463],{"class":125,"line":156},[123,149444,130],{"class":129},[123,149446,134],{"class":133},[123,149448,241],{"class":129},[123,149450,244],{"class":143},[123,149452,147],{"class":129},[123,149454,150],{"class":143},[123,149456,251],{"class":129},[123,149458,254],{"class":143},[123,149460,147],{"class":129},[123,149462,259],{"class":164},[123,149464,171],{"class":129},[123,149466,149467],{"class":125,"line":168},[123,149468,232],{"emptyLinePlaceholder":231},[123,149470,149471,149473,149475,149477,149479,149481,149483],{"class":125,"line":268},[123,149472,271],{"class":129},[123,149474,134],{"class":133},[123,149476,276],{"class":129},[123,149478,280],{"class":279},[123,149480,134],{"class":133},[123,149482,285],{"class":164},[123,149484,288],{"class":129},[123,149486,149487,149489],{"class":125,"line":291},[123,149488,294],{"class":164},[123,149490,297],{"class":129},[123,149492,149493],{"class":125,"line":300},[123,149494,232],{"emptyLinePlaceholder":231},[123,149496,149497,149499,149501],{"class":125,"line":305},[123,149498,308],{"class":129},[123,149500,134],{"class":133},[123,149502,313],{"class":129},[123,149504,149505,149507],{"class":125,"line":316},[123,149506,294],{"class":164},[123,149508,321],{"class":129},[14,149510,325],{"id":324},[113,149512,149513],{"className":328,"code":329,"language":330,"meta":118,"style":118},[120,149514,149515],{"__ignoreMap":118},[123,149516,149517,149519,149521],{"class":125,"line":126},[123,149518,338],{"class":337},[123,149520,341],{"class":143},[123,149522,344],{"class":143},[19,149524,347],{},[113,149526,149527],{"className":115,"code":350,"language":117,"meta":118,"style":118},[120,149528,149529,149535,149539],{"__ignoreMap":118},[123,149530,149531,149533],{"class":125,"line":126},[123,149532,223],{"class":133},[123,149534,344],{"class":129},[123,149536,149537],{"class":125,"line":140},[123,149538,232],{"emptyLinePlaceholder":231},[123,149540,149541,149543,149545,149547],{"class":125,"line":156},[123,149542,294],{"class":164},[123,149544,369],{"class":129},[123,149546,372],{"class":164},[123,149548,288],{"class":129},[19,149550,377],{},[14,149552,381],{"id":380},[113,149554,149555],{"className":115,"code":384,"language":117,"meta":118,"style":118},[120,149556,149557,149567,149571,149579,149603,149631],{"__ignoreMap":118},[123,149558,149559,149561,149563,149565],{"class":125,"line":126},[123,149560,391],{"class":133},[123,149562,394],{"class":129},[123,149564,223],{"class":133},[123,149566,399],{"class":129},[123,149568,149569],{"class":125,"line":140},[123,149570,232],{"emptyLinePlaceholder":231},[123,149572,149573,149575,149577],{"class":125,"line":156},[123,149574,408],{"class":129},[123,149576,134],{"class":133},[123,149578,413],{"class":129},[123,149580,149581,149583,149585,149587,149589,149591,149593,149595,149597,149599,149601],{"class":125,"line":168},[123,149582,418],{"class":129},[123,149584,421],{"class":143},[123,149586,251],{"class":129},[123,149588,426],{"class":143},[123,149590,251],{"class":129},[123,149592,431],{"class":143},[123,149594,251],{"class":129},[123,149596,436],{"class":143},[123,149598,251],{"class":129},[123,149600,441],{"class":143},[123,149602,444],{"class":129},[123,149604,149605,149607,149609,149611,149613,149615,149617,149619,149621,149623,149625,149627,149629],{"class":125,"line":268},[123,149606,449],{"class":129},[123,149608,452],{"class":143},[123,149610,455],{"class":129},[123,149612,259],{"class":164},[123,149614,251],{"class":129},[123,149616,462],{"class":164},[123,149618,251],{"class":129},[123,149620,467],{"class":164},[123,149622,251],{"class":129},[123,149624,472],{"class":164},[123,149626,251],{"class":129},[123,149628,477],{"class":164},[123,149630,444],{"class":129},[123,149632,149633,149635,149637],{"class":125,"line":291},[123,149634,484],{"class":129},[123,149636,487],{"class":143},[123,149638,288],{"class":129},[19,149640,492,149641,496],{},[120,149642,495],{},[19,149644,499],{},[26,149646,149647,149649,149651,149653,149655],{},[29,149648,504],{},[29,149650,507],{},[29,149652,510],{},[29,149654,513],{},[29,149656,516],{},[14,149658,520],{"id":519},[19,149660,523,149661,527],{},[120,149662,526],{},[113,149664,149665],{"className":115,"code":530,"language":117,"meta":118,"style":118},[120,149666,149667,149681,149691,149695,149703,149727,149755,149759,149775,149791,149807,149823,149827],{"__ignoreMap":118},[123,149668,149669,149671,149673,149675,149677,149679],{"class":125,"line":126},[123,149670,391],{"class":133},[123,149672,539],{"class":129},[123,149674,223],{"class":133},[123,149676,544],{"class":129},[123,149678,547],{"class":133},[123,149680,550],{"class":129},[123,149682,149683,149685,149687,149689],{"class":125,"line":140},[123,149684,391],{"class":133},[123,149686,394],{"class":129},[123,149688,223],{"class":133},[123,149690,399],{"class":129},[123,149692,149693],{"class":125,"line":156},[123,149694,232],{"emptyLinePlaceholder":231},[123,149696,149697,149699,149701],{"class":125,"line":168},[123,149698,408],{"class":129},[123,149700,134],{"class":133},[123,149702,413],{"class":129},[123,149704,149705,149707,149709,149711,149713,149715,149717,149719,149721,149723,149725],{"class":125,"line":268},[123,149706,418],{"class":129},[123,149708,421],{"class":143},[123,149710,251],{"class":129},[123,149712,426],{"class":143},[123,149714,251],{"class":129},[123,149716,431],{"class":143},[123,149718,251],{"class":129},[123,149720,436],{"class":143},[123,149722,251],{"class":129},[123,149724,441],{"class":143},[123,149726,444],{"class":129},[123,149728,149729,149731,149733,149735,149737,149739,149741,149743,149745,149747,149749,149751,149753],{"class":125,"line":291},[123,149730,449],{"class":129},[123,149732,452],{"class":143},[123,149734,455],{"class":129},[123,149736,259],{"class":164},[123,149738,251],{"class":129},[123,149740,462],{"class":164},[123,149742,251],{"class":129},[123,149744,467],{"class":164},[123,149746,251],{"class":129},[123,149748,472],{"class":164},[123,149750,251],{"class":129},[123,149752,477],{"class":164},[123,149754,444],{"class":129},[123,149756,149757],{"class":125,"line":300},[123,149758,629],{"class":129},[123,149760,149761,149763,149765,149767,149769,149771,149773],{"class":125,"line":305},[123,149762,634],{"class":279},[123,149764,134],{"class":133},[123,149766,639],{"class":129},[123,149768,642],{"class":279},[123,149770,134],{"class":133},[123,149772,647],{"class":143},[123,149774,650],{"class":129},[123,149776,149777,149779,149781,149783,149785,149787,149789],{"class":125,"line":316},[123,149778,655],{"class":279},[123,149780,134],{"class":133},[123,149782,660],{"class":129},[123,149784,663],{"class":279},[123,149786,134],{"class":133},[123,149788,668],{"class":143},[123,149790,650],{"class":129},[123,149792,149793,149795,149797,149799,149801,149803,149805],{"class":125,"line":673},[123,149794,676],{"class":279},[123,149796,134],{"class":133},[123,149798,660],{"class":129},[123,149800,663],{"class":279},[123,149802,134],{"class":133},[123,149804,687],{"class":143},[123,149806,650],{"class":129},[123,149808,149809,149811,149813,149815,149817,149819,149821],{"class":125,"line":692},[123,149810,695],{"class":279},[123,149812,134],{"class":133},[123,149814,700],{"class":129},[123,149816,703],{"class":279},[123,149818,134],{"class":133},[123,149820,708],{"class":143},[123,149822,650],{"class":129},[123,149824,149825],{"class":125,"line":713},[123,149826,288],{"class":129},[123,149828,149829,149831,149833],{"class":125,"line":718},[123,149830,484],{"class":129},[123,149832,487],{"class":143},[123,149834,288],{"class":129},[19,149836,727],{},[48,149838,149839,149847],{},[51,149840,149841],{},[54,149842,149843,149845],{},[57,149844,736],{},[57,149846,739],{},[64,149848,149849,149857,149865,149873,149881,149889],{},[54,149850,149851,149855],{},[69,149852,149853],{},[120,149854,748],{},[69,149856,751],{},[54,149858,149859,149863],{},[69,149860,149861],{},[120,149862,758],{},[69,149864,761],{},[54,149866,149867,149871],{},[69,149868,149869],{},[120,149870,768],{},[69,149872,771],{},[54,149874,149875,149879],{},[69,149876,149877],{},[120,149878,778],{},[69,149880,781],{},[54,149882,149883,149887],{},[69,149884,149885],{},[120,149886,788],{},[69,149888,791],{},[54,149890,149891,149895],{},[69,149892,149893],{},[120,149894,798],{},[69,149896,801],{},[14,149898,805],{"id":804},[19,149900,808],{},[113,149902,149903],{"className":115,"code":811,"language":117,"meta":118,"style":118},[120,149904,149905,149909,149919,149947,149957,149973],{"__ignoreMap":118},[123,149906,149907],{"class":125,"line":126},[123,149908,818],{"class":129},[123,149910,149911,149913,149915,149917],{"class":125,"line":140},[123,149912,823],{"class":279},[123,149914,134],{"class":133},[123,149916,452],{"class":143},[123,149918,153],{"class":129},[123,149920,149921,149923,149925,149927,149929,149931,149933,149935,149937,149939,149941,149943,149945],{"class":125,"line":156},[123,149922,834],{"class":279},[123,149924,134],{"class":133},[123,149926,839],{"class":129},[123,149928,259],{"class":164},[123,149930,251],{"class":129},[123,149932,462],{"class":164},[123,149934,251],{"class":129},[123,149936,467],{"class":164},[123,149938,251],{"class":129},[123,149940,472],{"class":164},[123,149942,251],{"class":129},[123,149944,477],{"class":164},[123,149946,860],{"class":129},[123,149948,149949,149951,149953,149955],{"class":125,"line":168},[123,149950,865],{"class":279},[123,149952,134],{"class":133},[123,149954,870],{"class":164},[123,149956,153],{"class":129},[123,149958,149959,149961,149963,149965,149967,149969,149971],{"class":125,"line":268},[123,149960,877],{"class":279},[123,149962,134],{"class":133},[123,149964,882],{"class":129},[123,149966,885],{"class":279},[123,149968,134],{"class":133},[123,149970,870],{"class":164},[123,149972,650],{"class":129},[123,149974,149975],{"class":125,"line":291},[123,149976,288],{"class":129},[19,149978,898],{},[26,149980,149981,149985,149989,149993,149997],{},[29,149982,149983,906],{},[120,149984,905],{},[29,149986,149987,912],{},[120,149988,911],{},[29,149990,149991,918],{},[120,149992,917],{},[29,149994,149995,924],{},[120,149996,923],{},[29,149998,149999,930],{},[120,150000,929],{},[14,150002,934],{"id":933},[113,150004,150005],{"className":115,"code":937,"language":117,"meta":118,"style":118},[120,150006,150007,150021,150031,150035,150063,150067,150075,150079,150115,150151,150155,150171,150187,150191],{"__ignoreMap":118},[123,150008,150009,150011,150013,150015,150017,150019],{"class":125,"line":126},[123,150010,391],{"class":133},[123,150012,539],{"class":129},[123,150014,223],{"class":133},[123,150016,544],{"class":129},[123,150018,547],{"class":133},[123,150020,550],{"class":129},[123,150022,150023,150025,150027,150029],{"class":125,"line":140},[123,150024,391],{"class":133},[123,150026,394],{"class":129},[123,150028,223],{"class":133},[123,150030,399],{"class":129},[123,150032,150033],{"class":125,"line":156},[123,150034,232],{"emptyLinePlaceholder":231},[123,150036,150037,150039,150041,150043,150045,150047,150049,150051,150053,150055,150057,150059,150061],{"class":125,"line":168},[123,150038,972],{"class":129},[123,150040,134],{"class":133},[123,150042,977],{"class":129},[123,150044,421],{"class":143},[123,150046,251],{"class":129},[123,150048,426],{"class":143},[123,150050,251],{"class":129},[123,150052,431],{"class":143},[123,150054,251],{"class":129},[123,150056,436],{"class":143},[123,150058,251],{"class":129},[123,150060,441],{"class":143},[123,150062,998],{"class":129},[123,150064,150065],{"class":125,"line":268},[123,150066,232],{"emptyLinePlaceholder":231},[123,150068,150069,150071,150073],{"class":125,"line":291},[123,150070,408],{"class":129},[123,150072,134],{"class":133},[123,150074,413],{"class":129},[123,150076,150077],{"class":125,"line":300},[123,150078,1015],{"class":129},[123,150080,150081,150083,150085,150087,150089,150091,150093,150095,150097,150099,150101,150103,150105,150107,150109,150111,150113],{"class":125,"line":305},[123,150082,449],{"class":129},[123,150084,1022],{"class":143},[123,150086,455],{"class":129},[123,150088,259],{"class":164},[123,150090,251],{"class":129},[123,150092,1031],{"class":164},[123,150094,251],{"class":129},[123,150096,462],{"class":164},[123,150098,251],{"class":129},[123,150100,1040],{"class":164},[123,150102,251],{"class":129},[123,150104,1045],{"class":164},[123,150106,1048],{"class":129},[123,150108,917],{"class":279},[123,150110,134],{"class":133},[123,150112,870],{"class":164},[123,150114,288],{"class":129},[123,150116,150117,150119,150121,150123,150125,150127,150129,150131,150133,150135,150137,150139,150141,150143,150145,150147,150149],{"class":125,"line":316},[123,150118,449],{"class":129},[123,150120,1063],{"class":143},[123,150122,455],{"class":129},[123,150124,1068],{"class":164},[123,150126,251],{"class":129},[123,150128,467],{"class":164},[123,150130,251],{"class":129},[123,150132,259],{"class":164},[123,150134,251],{"class":129},[123,150136,462],{"class":164},[123,150138,251],{"class":129},[123,150140,472],{"class":164},[123,150142,1048],{"class":129},[123,150144,917],{"class":279},[123,150146,134],{"class":133},[123,150148,870],{"class":164},[123,150150,288],{"class":129},[123,150152,150153],{"class":125,"line":673},[123,150154,629],{"class":129},[123,150156,150157,150159,150161,150163,150165,150167,150169],{"class":125,"line":692},[123,150158,634],{"class":279},[123,150160,134],{"class":133},[123,150162,639],{"class":129},[123,150164,642],{"class":279},[123,150166,134],{"class":133},[123,150168,1113],{"class":143},[123,150170,650],{"class":129},[123,150172,150173,150175,150177,150179,150181,150183,150185],{"class":125,"line":713},[123,150174,695],{"class":279},[123,150176,134],{"class":133},[123,150178,700],{"class":129},[123,150180,703],{"class":279},[123,150182,134],{"class":133},[123,150184,708],{"class":143},[123,150186,650],{"class":129},[123,150188,150189],{"class":125,"line":718},[123,150190,288],{"class":129},[123,150192,150193,150195,150197],{"class":125,"line":1138},[123,150194,484],{"class":129},[123,150196,1143],{"class":143},[123,150198,288],{"class":129},[19,150200,1148],{},[14,150202,1152],{"id":1151},[19,150204,1155,150205,1159],{},[120,150206,1158],{},[113,150208,150209],{"className":177,"code":1162,"language":179,"meta":118,"style":118},[120,150210,150211,150215,150243,150271,150299],{"__ignoreMap":118},[123,150212,150213],{"class":125,"line":126},[123,150214,1169],{"class":129},[123,150216,150217,150219,150221,150223,150225,150227,150229,150231,150233,150235,150237,150239,150241],{"class":125,"line":140},[123,150218,1174],{"class":129},[123,150220,1177],{"class":164},[123,150222,147],{"class":129},[123,150224,421],{"class":143},[123,150226,251],{"class":129},[123,150228,1186],{"class":164},[123,150230,147],{"class":129},[123,150232,259],{"class":164},[123,150234,251],{"class":129},[123,150236,1195],{"class":164},[123,150238,147],{"class":129},[123,150240,1068],{"class":164},[123,150242,1202],{"class":129},[123,150244,150245,150247,150249,150251,150253,150255,150257,150259,150261,150263,150265,150267,150269],{"class":125,"line":156},[123,150246,1174],{"class":129},[123,150248,1177],{"class":164},[123,150250,147],{"class":129},[123,150252,426],{"class":143},[123,150254,251],{"class":129},[123,150256,1186],{"class":164},[123,150258,147],{"class":129},[123,150260,1031],{"class":164},[123,150262,251],{"class":129},[123,150264,1195],{"class":164},[123,150266,147],{"class":129},[123,150268,467],{"class":164},[123,150270,1202],{"class":129},[123,150272,150273,150275,150277,150279,150281,150283,150285,150287,150289,150291,150293,150295,150297],{"class":125,"line":168},[123,150274,1174],{"class":129},[123,150276,1177],{"class":164},[123,150278,147],{"class":129},[123,150280,431],{"class":143},[123,150282,251],{"class":129},[123,150284,1186],{"class":164},[123,150286,147],{"class":129},[123,150288,462],{"class":164},[123,150290,251],{"class":129},[123,150292,1195],{"class":164},[123,150294,147],{"class":129},[123,150296,259],{"class":164},[123,150298,171],{"class":129},[123,150300,150301],{"class":125,"line":268},[123,150302,998],{"class":129},[19,150304,1265],{},[113,150306,150307],{"className":115,"code":1268,"language":117,"meta":118,"style":118},[120,150308,150309,150315,150329,150339,150343,150373,150385,150389,150397,150405,150413,150417,150427,150435,150443,150451,150455,150463,150467,150483,150499,150503,150519,150535,150539],{"__ignoreMap":118},[123,150310,150311,150313],{"class":125,"line":126},[123,150312,223],{"class":133},[123,150314,226],{"class":129},[123,150316,150317,150319,150321,150323,150325,150327],{"class":125,"line":140},[123,150318,391],{"class":133},[123,150320,539],{"class":129},[123,150322,223],{"class":133},[123,150324,544],{"class":129},[123,150326,547],{"class":133},[123,150328,550],{"class":129},[123,150330,150331,150333,150335,150337],{"class":125,"line":156},[123,150332,391],{"class":133},[123,150334,394],{"class":129},[123,150336,223],{"class":133},[123,150338,399],{"class":129},[123,150340,150341],{"class":125,"line":168},[123,150342,232],{"emptyLinePlaceholder":231},[123,150344,150345,150347,150349,150351,150353,150355,150357,150359,150361,150363,150365,150367,150369,150371],{"class":125,"line":268},[123,150346,1309],{"class":133},[123,150348,1312],{"class":164},[123,150350,1315],{"class":129},[123,150352,1318],{"class":143},[123,150354,251],{"class":129},[123,150356,1323],{"class":143},[123,150358,251],{"class":129},[123,150360,1328],{"class":279},[123,150362,134],{"class":133},[123,150364,1333],{"class":143},[123,150366,1336],{"class":129},[123,150368,547],{"class":133},[123,150370,1341],{"class":279},[123,150372,1344],{"class":129},[123,150374,150375,150377,150379,150381,150383],{"class":125,"line":291},[123,150376,1349],{"class":129},[123,150378,134],{"class":133},[123,150380,1354],{"class":129},[123,150382,1357],{"class":279},[123,150384,288],{"class":129},[123,150386,150387],{"class":125,"line":300},[123,150388,232],{"emptyLinePlaceholder":231},[123,150390,150391,150393,150395],{"class":125,"line":305},[123,150392,972],{"class":129},[123,150394,134],{"class":133},[123,150396,1372],{"class":129},[123,150398,150399,150401,150403],{"class":125,"line":316},[123,150400,1377],{"class":129},[123,150402,134],{"class":133},[123,150404,1372],{"class":129},[123,150406,150407,150409,150411],{"class":125,"line":673},[123,150408,1386],{"class":129},[123,150410,134],{"class":133},[123,150412,1372],{"class":129},[123,150414,150415],{"class":125,"line":692},[123,150416,232],{"emptyLinePlaceholder":231},[123,150418,150419,150421,150423,150425],{"class":125,"line":713},[123,150420,1399],{"class":133},[123,150422,1402],{"class":129},[123,150424,1405],{"class":133},[123,150426,1408],{"class":129},[123,150428,150429,150431,150433],{"class":125,"line":718},[123,150430,1413],{"class":129},[123,150432,1177],{"class":143},[123,150434,444],{"class":129},[123,150436,150437,150439,150441],{"class":125,"line":1138},[123,150438,1422],{"class":129},[123,150440,1186],{"class":143},[123,150442,444],{"class":129},[123,150444,150445,150447,150449],{"class":125,"line":1429},[123,150446,1432],{"class":129},[123,150448,1195],{"class":143},[123,150450,444],{"class":129},[123,150452,150453],{"class":125,"line":1439},[123,150454,232],{"emptyLinePlaceholder":231},[123,150456,150457,150459,150461],{"class":125,"line":1444},[123,150458,408],{"class":129},[123,150460,134],{"class":133},[123,150462,413],{"class":129},[123,150464,150465],{"class":125,"line":1453},[123,150466,1015],{"class":129},[123,150468,150469,150471,150473,150475,150477,150479,150481],{"class":125,"line":1458},[123,150470,449],{"class":129},[123,150472,1022],{"class":143},[123,150474,1465],{"class":129},[123,150476,917],{"class":279},[123,150478,134],{"class":133},[123,150480,870],{"class":164},[123,150482,288],{"class":129},[123,150484,150485,150487,150489,150491,150493,150495,150497],{"class":125,"line":1476},[123,150486,449],{"class":129},[123,150488,1063],{"class":143},[123,150490,1483],{"class":129},[123,150492,917],{"class":279},[123,150494,134],{"class":133},[123,150496,870],{"class":164},[123,150498,288],{"class":129},[123,150500,150501],{"class":125,"line":1494},[123,150502,629],{"class":129},[123,150504,150505,150507,150509,150511,150513,150515,150517],{"class":125,"line":1499},[123,150506,634],{"class":279},[123,150508,134],{"class":133},[123,150510,639],{"class":129},[123,150512,642],{"class":279},[123,150514,134],{"class":133},[123,150516,1512],{"class":143},[123,150518,650],{"class":129},[123,150520,150521,150523,150525,150527,150529,150531,150533],{"class":125,"line":1517},[123,150522,695],{"class":279},[123,150524,134],{"class":133},[123,150526,700],{"class":129},[123,150528,703],{"class":279},[123,150530,134],{"class":133},[123,150532,708],{"class":143},[123,150534,650],{"class":129},[123,150536,150537],{"class":125,"line":1534},[123,150538,288],{"class":129},[123,150540,150541,150543,150545],{"class":125,"line":1539},[123,150542,484],{"class":129},[123,150544,1143],{"class":143},[123,150546,288],{"class":129},[14,150548,1549],{"id":1548},[19,150550,1552],{},[19,150552,1555],{},[26,150554,150555,150557,150559,150561],{},[29,150556,1560],{},[29,150558,1563],{},[29,150560,1566],{},[29,150562,1569],{},[19,150564,1572],{},[113,150566,150567],{"className":115,"code":1575,"language":117,"meta":118,"style":118},[120,150568,150569,150577,150597,150617,150637,150641,150645,150653,150661,150665,150675,150687,150695,150699,150703,150711,150719,150723,150729],{"__ignoreMap":118},[123,150570,150571,150573,150575],{"class":125,"line":126},[123,150572,1582],{"class":129},[123,150574,134],{"class":133},[123,150576,1587],{"class":129},[123,150578,150579,150581,150583,150585,150587,150589,150591,150593,150595],{"class":125,"line":140},[123,150580,1592],{"class":129},[123,150582,1177],{"class":143},[123,150584,147],{"class":129},[123,150586,421],{"class":143},[123,150588,251],{"class":129},[123,150590,1603],{"class":143},[123,150592,147],{"class":129},[123,150594,1608],{"class":143},[123,150596,1202],{"class":129},[123,150598,150599,150601,150603,150605,150607,150609,150611,150613,150615],{"class":125,"line":156},[123,150600,1592],{"class":129},[123,150602,1177],{"class":143},[123,150604,147],{"class":129},[123,150606,426],{"class":143},[123,150608,251],{"class":129},[123,150610,1603],{"class":143},[123,150612,147],{"class":129},[123,150614,1629],{"class":143},[123,150616,1202],{"class":129},[123,150618,150619,150621,150623,150625,150627,150629,150631,150633,150635],{"class":125,"line":168},[123,150620,1592],{"class":129},[123,150622,1177],{"class":143},[123,150624,147],{"class":129},[123,150626,431],{"class":143},[123,150628,251],{"class":129},[123,150630,1603],{"class":143},[123,150632,147],{"class":129},[123,150634,1650],{"class":143},[123,150636,1202],{"class":129},[123,150638,150639],{"class":125,"line":268},[123,150640,998],{"class":129},[123,150642,150643],{"class":125,"line":291},[123,150644,232],{"emptyLinePlaceholder":231},[123,150646,150647,150649,150651],{"class":125,"line":300},[123,150648,972],{"class":129},[123,150650,134],{"class":133},[123,150652,1372],{"class":129},[123,150654,150655,150657,150659],{"class":125,"line":305},[123,150656,1673],{"class":129},[123,150658,134],{"class":133},[123,150660,1372],{"class":129},[123,150662,150663],{"class":125,"line":316},[123,150664,232],{"emptyLinePlaceholder":231},[123,150666,150667,150669,150671,150673],{"class":125,"line":673},[123,150668,1399],{"class":133},[123,150670,1402],{"class":129},[123,150672,1405],{"class":133},[123,150674,1692],{"class":129},[123,150676,150677,150679,150681,150683,150685],{"class":125,"line":692},[123,150678,1697],{"class":129},[123,150680,134],{"class":133},[123,150682,1702],{"class":129},[123,150684,1603],{"class":143},[123,150686,288],{"class":129},[123,150688,150689,150691,150693],{"class":125,"line":713},[123,150690,1711],{"class":133},[123,150692,1714],{"class":133},[123,150694,1717],{"class":129},[123,150696,150697],{"class":125,"line":718},[123,150698,1722],{"class":133},[123,150700,150701],{"class":125,"line":1138},[123,150702,232],{"emptyLinePlaceholder":231},[123,150704,150705,150707,150709],{"class":125,"line":1429},[123,150706,1413],{"class":129},[123,150708,1177],{"class":143},[123,150710,444],{"class":129},[123,150712,150713,150715,150717],{"class":125,"line":1439},[123,150714,1739],{"class":129},[123,150716,1742],{"class":164},[123,150718,1745],{"class":129},[123,150720,150721],{"class":125,"line":1444},[123,150722,232],{"emptyLinePlaceholder":231},[123,150724,150725,150727],{"class":125,"line":1453},[123,150726,294],{"class":164},[123,150728,1756],{"class":129},[123,150730,150731,150733],{"class":125,"line":1458},[123,150732,294],{"class":164},[123,150734,1763],{"class":129},[14,150736,1767],{"id":1766},[113,150738,150739],{"className":115,"code":1770,"language":117,"meta":118,"style":118},[120,150740,150741,150755,150765,150769,150777,150797,150817,150837,150857,150877,150881,150885,150905,150925,150929,150937,150941,150945,150955,150963,150973,150989,150993,150997,151013,151029,151045,151061,151069,151073],{"__ignoreMap":118},[123,150742,150743,150745,150747,150749,150751,150753],{"class":125,"line":126},[123,150744,391],{"class":133},[123,150746,539],{"class":129},[123,150748,223],{"class":133},[123,150750,544],{"class":129},[123,150752,547],{"class":133},[123,150754,550],{"class":129},[123,150756,150757,150759,150761,150763],{"class":125,"line":140},[123,150758,391],{"class":133},[123,150760,394],{"class":129},[123,150762,223],{"class":133},[123,150764,399],{"class":129},[123,150766,150767],{"class":125,"line":156},[123,150768,232],{"emptyLinePlaceholder":231},[123,150770,150771,150773,150775],{"class":125,"line":168},[123,150772,1673],{"class":129},[123,150774,134],{"class":133},[123,150776,1587],{"class":129},[123,150778,150779,150781,150783,150785,150787,150789,150791,150793,150795],{"class":125,"line":268},[123,150780,1592],{"class":129},[123,150782,1177],{"class":143},[123,150784,147],{"class":129},[123,150786,1819],{"class":143},[123,150788,251],{"class":129},[123,150790,1824],{"class":143},[123,150792,147],{"class":129},[123,150794,1829],{"class":164},[123,150796,1202],{"class":129},[123,150798,150799,150801,150803,150805,150807,150809,150811,150813,150815],{"class":125,"line":291},[123,150800,1592],{"class":129},[123,150802,1177],{"class":143},[123,150804,147],{"class":129},[123,150806,1842],{"class":143},[123,150808,251],{"class":129},[123,150810,1824],{"class":143},[123,150812,147],{"class":129},[123,150814,1851],{"class":164},[123,150816,1202],{"class":129},[123,150818,150819,150821,150823,150825,150827,150829,150831,150833,150835],{"class":125,"line":300},[123,150820,1592],{"class":129},[123,150822,1177],{"class":143},[123,150824,147],{"class":129},[123,150826,1864],{"class":143},[123,150828,251],{"class":129},[123,150830,1824],{"class":143},[123,150832,147],{"class":129},[123,150834,1873],{"class":164},[123,150836,1202],{"class":129},[123,150838,150839,150841,150843,150845,150847,150849,150851,150853,150855],{"class":125,"line":305},[123,150840,1592],{"class":129},[123,150842,1177],{"class":143},[123,150844,147],{"class":129},[123,150846,1886],{"class":143},[123,150848,251],{"class":129},[123,150850,1824],{"class":143},[123,150852,147],{"class":129},[123,150854,1895],{"class":164},[123,150856,1202],{"class":129},[123,150858,150859,150861,150863,150865,150867,150869,150871,150873,150875],{"class":125,"line":316},[123,150860,1592],{"class":129},[123,150862,1177],{"class":143},[123,150864,147],{"class":129},[123,150866,1908],{"class":143},[123,150868,251],{"class":129},[123,150870,1824],{"class":143},[123,150872,147],{"class":129},[123,150874,1917],{"class":164},[123,150876,1202],{"class":129},[123,150878,150879],{"class":125,"line":673},[123,150880,998],{"class":129},[123,150882,150883],{"class":125,"line":692},[123,150884,232],{"emptyLinePlaceholder":231},[123,150886,150887,150889,150891,150893,150895,150897,150899,150901,150903],{"class":125,"line":713},[123,150888,972],{"class":129},[123,150890,134],{"class":133},[123,150892,1936],{"class":129},[123,150894,1177],{"class":143},[123,150896,1941],{"class":129},[123,150898,1399],{"class":133},[123,150900,1402],{"class":129},[123,150902,1405],{"class":133},[123,150904,1950],{"class":129},[123,150906,150907,150909,150911,150913,150915,150917,150919,150921,150923],{"class":125,"line":718},[123,150908,1955],{"class":129},[123,150910,134],{"class":133},[123,150912,1936],{"class":129},[123,150914,1824],{"class":143},[123,150916,1941],{"class":129},[123,150918,1399],{"class":133},[123,150920,1402],{"class":129},[123,150922,1405],{"class":133},[123,150924,1950],{"class":129},[123,150926,150927],{"class":125,"line":1138},[123,150928,232],{"emptyLinePlaceholder":231},[123,150930,150931,150933,150935],{"class":125,"line":1429},[123,150932,408],{"class":129},[123,150934,134],{"class":133},[123,150936,413],{"class":129},[123,150938,150939],{"class":125,"line":1439},[123,150940,1015],{"class":129},[123,150942,150943],{"class":125,"line":1444},[123,150944,818],{"class":129},[123,150946,150947,150949,150951,150953],{"class":125,"line":1453},[123,150948,823],{"class":279},[123,150950,134],{"class":133},[123,150952,452],{"class":143},[123,150954,153],{"class":129},[123,150956,150957,150959,150961],{"class":125,"line":1458},[123,150958,834],{"class":279},[123,150960,134],{"class":133},[123,150962,2010],{"class":129},[123,150964,150965,150967,150969,150971],{"class":125,"line":1476},[123,150966,865],{"class":279},[123,150968,134],{"class":133},[123,150970,870],{"class":164},[123,150972,153],{"class":129},[123,150974,150975,150977,150979,150981,150983,150985,150987],{"class":125,"line":1494},[123,150976,877],{"class":279},[123,150978,134],{"class":133},[123,150980,882],{"class":129},[123,150982,885],{"class":279},[123,150984,134],{"class":133},[123,150986,870],{"class":164},[123,150988,650],{"class":129},[123,150990,150991],{"class":125,"line":1499},[123,150992,288],{"class":129},[123,150994,150995],{"class":125,"line":1517},[123,150996,629],{"class":129},[123,150998,150999,151001,151003,151005,151007,151009,151011],{"class":125,"line":1534},[123,151000,634],{"class":279},[123,151002,134],{"class":133},[123,151004,639],{"class":129},[123,151006,642],{"class":279},[123,151008,134],{"class":133},[123,151010,2059],{"class":143},[123,151012,650],{"class":129},[123,151014,151015,151017,151019,151021,151023,151025,151027],{"class":125,"line":1539},[123,151016,655],{"class":279},[123,151018,134],{"class":133},[123,151020,660],{"class":129},[123,151022,663],{"class":279},[123,151024,134],{"class":133},[123,151026,668],{"class":143},[123,151028,650],{"class":129},[123,151030,151031,151033,151035,151037,151039,151041,151043],{"class":125,"line":2080},[123,151032,676],{"class":279},[123,151034,134],{"class":133},[123,151036,660],{"class":129},[123,151038,663],{"class":279},[123,151040,134],{"class":133},[123,151042,687],{"class":143},[123,151044,650],{"class":129},[123,151046,151047,151049,151051,151053,151055,151057,151059],{"class":125,"line":2097},[123,151048,695],{"class":279},[123,151050,134],{"class":133},[123,151052,700],{"class":129},[123,151054,703],{"class":279},[123,151056,134],{"class":133},[123,151058,708],{"class":143},[123,151060,650],{"class":129},[123,151062,151063,151065,151067],{"class":125,"line":2114},[123,151064,2117],{"class":279},[123,151066,134],{"class":133},[123,151068,2122],{"class":129},[123,151070,151071],{"class":125,"line":2125},[123,151072,288],{"class":129},[123,151074,151075,151077,151079],{"class":125,"line":2130},[123,151076,484],{"class":129},[123,151078,2135],{"class":143},[123,151080,288],{"class":129},[19,151082,151083,2143],{},[120,151084,2142],{},[14,151086,2147],{"id":2146},[19,151088,2150],{},[113,151090,151091],{"className":115,"code":2153,"language":117,"meta":118,"style":118},[120,151092,151093,151101,151107,151127,151147,151151,151157,151177,151197,151201],{"__ignoreMap":118},[123,151094,151095,151097,151099],{"class":125,"line":126},[123,151096,130],{"class":129},[123,151098,134],{"class":133},[123,151100,137],{"class":129},[123,151102,151103,151105],{"class":125,"line":140},[123,151104,2168],{"class":143},[123,151106,2171],{"class":129},[123,151108,151109,151111,151113,151115,151117,151119,151121,151123,151125],{"class":125,"line":156},[123,151110,2176],{"class":129},[123,151112,1177],{"class":143},[123,151114,147],{"class":129},[123,151116,2183],{"class":143},[123,151118,251],{"class":129},[123,151120,2188],{"class":143},[123,151122,147],{"class":129},[123,151124,2193],{"class":164},[123,151126,1202],{"class":129},[123,151128,151129,151131,151133,151135,151137,151139,151141,151143,151145],{"class":125,"line":168},[123,151130,2176],{"class":129},[123,151132,1177],{"class":143},[123,151134,147],{"class":129},[123,151136,2206],{"class":143},[123,151138,251],{"class":129},[123,151140,2188],{"class":143},[123,151142,147],{"class":129},[123,151144,2215],{"class":164},[123,151146,1202],{"class":129},[123,151148,151149],{"class":125,"line":268},[123,151150,2222],{"class":129},[123,151152,151153,151155],{"class":125,"line":291},[123,151154,2227],{"class":143},[123,151156,2171],{"class":129},[123,151158,151159,151161,151163,151165,151167,151169,151171,151173,151175],{"class":125,"line":300},[123,151160,2176],{"class":129},[123,151162,1177],{"class":143},[123,151164,147],{"class":129},[123,151166,2183],{"class":143},[123,151168,251],{"class":129},[123,151170,2188],{"class":143},[123,151172,147],{"class":129},[123,151174,2248],{"class":164},[123,151176,1202],{"class":129},[123,151178,151179,151181,151183,151185,151187,151189,151191,151193,151195],{"class":125,"line":305},[123,151180,2176],{"class":129},[123,151182,1177],{"class":143},[123,151184,147],{"class":129},[123,151186,2206],{"class":143},[123,151188,251],{"class":129},[123,151190,2188],{"class":143},[123,151192,147],{"class":129},[123,151194,2269],{"class":164},[123,151196,1202],{"class":129},[123,151198,151199],{"class":125,"line":316},[123,151200,2222],{"class":129},[123,151202,151203],{"class":125,"line":673},[123,151204,171],{"class":129},[19,151206,2282],{},[113,151208,151209],{"className":115,"code":2285,"language":117,"meta":118,"style":118},[120,151210,151211,151225,151235,151239,151263,151267,151275,151279,151283,151293,151313,151325,151329,151333,151349,151365,151369],{"__ignoreMap":118},[123,151212,151213,151215,151217,151219,151221,151223],{"class":125,"line":126},[123,151214,391],{"class":133},[123,151216,539],{"class":129},[123,151218,223],{"class":133},[123,151220,544],{"class":129},[123,151222,547],{"class":133},[123,151224,550],{"class":129},[123,151226,151227,151229,151231,151233],{"class":125,"line":140},[123,151228,391],{"class":133},[123,151230,394],{"class":129},[123,151232,223],{"class":133},[123,151234,399],{"class":129},[123,151236,151237],{"class":125,"line":156},[123,151238,232],{"emptyLinePlaceholder":231},[123,151240,151241,151243,151245,151247,151249,151251,151253,151255,151257,151259,151261],{"class":125,"line":168},[123,151242,972],{"class":129},[123,151244,134],{"class":133},[123,151246,1936],{"class":129},[123,151248,1177],{"class":143},[123,151250,1941],{"class":129},[123,151252,1399],{"class":133},[123,151254,1402],{"class":129},[123,151256,1405],{"class":133},[123,151258,2336],{"class":129},[123,151260,150],{"class":143},[123,151262,2341],{"class":129},[123,151264,151265],{"class":125,"line":268},[123,151266,232],{"emptyLinePlaceholder":231},[123,151268,151269,151271,151273],{"class":125,"line":291},[123,151270,408],{"class":129},[123,151272,134],{"class":133},[123,151274,413],{"class":129},[123,151276,151277],{"class":125,"line":300},[123,151278,1015],{"class":129},[123,151280,151281],{"class":125,"line":305},[123,151282,232],{"emptyLinePlaceholder":231},[123,151284,151285,151287,151289,151291],{"class":125,"line":316},[123,151286,1399],{"class":133},[123,151288,2368],{"class":129},[123,151290,1405],{"class":133},[123,151292,2373],{"class":129},[123,151294,151295,151297,151299,151301,151303,151305,151307,151309,151311],{"class":125,"line":673},[123,151296,2378],{"class":129},[123,151298,134],{"class":133},[123,151300,1936],{"class":129},[123,151302,2188],{"class":143},[123,151304,1941],{"class":129},[123,151306,1399],{"class":133},[123,151308,1402],{"class":129},[123,151310,1405],{"class":133},[123,151312,2395],{"class":129},[123,151314,151315,151317,151319,151321,151323],{"class":125,"line":692},[123,151316,2400],{"class":129},[123,151318,917],{"class":279},[123,151320,134],{"class":133},[123,151322,870],{"class":164},[123,151324,288],{"class":129},[123,151326,151327],{"class":125,"line":713},[123,151328,232],{"emptyLinePlaceholder":231},[123,151330,151331],{"class":125,"line":718},[123,151332,629],{"class":129},[123,151334,151335,151337,151339,151341,151343,151345,151347],{"class":125,"line":1138},[123,151336,634],{"class":279},[123,151338,134],{"class":133},[123,151340,639],{"class":129},[123,151342,642],{"class":279},[123,151344,134],{"class":133},[123,151346,2431],{"class":143},[123,151348,650],{"class":129},[123,151350,151351,151353,151355,151357,151359,151361,151363],{"class":125,"line":1429},[123,151352,695],{"class":279},[123,151354,134],{"class":133},[123,151356,700],{"class":129},[123,151358,703],{"class":279},[123,151360,134],{"class":133},[123,151362,708],{"class":143},[123,151364,650],{"class":129},[123,151366,151367],{"class":125,"line":1439},[123,151368,288],{"class":129},[123,151370,151371,151373,151375],{"class":125,"line":1444},[123,151372,484],{"class":129},[123,151374,2460],{"class":143},[123,151376,288],{"class":129},[19,151378,2465],{},[14,151380,2469],{"id":2468},[26,151382,151383,151387,151391,151397,151401],{},[29,151384,151385,2477],{},[120,151386,2476],{},[29,151388,151389,2483],{},[120,151390,2482],{},[29,151392,2486,151393,2490,151395,2494],{},[120,151394,2489],{},[120,151396,2493],{},[29,151398,2497,151399,2494],{},[120,151400,2500],{},[29,151402,2503],{},[14,151404,2507],{"id":2506},[26,151406,151407,151409,151411,151413,151415],{},[29,151408,2512],{},[29,151410,2515],{},[29,151412,2518],{},[29,151414,2521],{},[29,151416,2524],{},[2526,151418,2528],{},{"title":118,"searchDepth":140,"depth":140,"links":151420},[151421,151422,151423,151424,151425,151426,151427,151428,151429,151430,151431,151432,151433],{"id":16,"depth":140,"text":17},{"id":104,"depth":140,"text":105},{"id":324,"depth":140,"text":325},{"id":380,"depth":140,"text":381},{"id":519,"depth":140,"text":520},{"id":804,"depth":140,"text":805},{"id":933,"depth":140,"text":934},{"id":1151,"depth":140,"text":1152},{"id":1548,"depth":140,"text":1549},{"id":1766,"depth":140,"text":1767},{"id":2146,"depth":140,"text":2147},{"id":2468,"depth":140,"text":2469},{"id":2506,"depth":140,"text":2507},{},{"title":5,"description":2544},{"id":151437,"title":151438,"body":151439,"description":2544,"extension":2545,"meta":153799,"navigation":231,"path":153800,"seo":153801,"stem":153802,"__hash__":153803},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151440,"toc":153776},[151441,151444,151448,151451,151454,151530,151533,151624,151627,151631,151634,151678,151691,151695,151698,151765,151768,151772,151775,151859,151867,151871,151876,152017,152020,152031,152037,152043,152157,152161,152164,152167,152420,152423,152427,152430,152534,152537,152541,152692,152696,152703,152816,152820,152823,152929,152932,152936,152939,152970,152973,153078,153081,153085,153089,153099,153167,153171,153178,153242,153245,153249,153255,153351,153360,153364,153688,153697,153701,153729,153733,153773],[10,151442,151438],{"id":151443},"_11-面向对象基础",[14,151445,151447],{"id":151446},"_111-什么是面向对象","11.1 什么是面向对象",[19,151449,151450],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151452,151453],{},"面向过程：",[113,151455,151457],{"className":115,"code":151456,"language":117,"meta":118,"style":118},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[120,151458,151459,151468,151476,151480,151490,151521,151525],{"__ignoreMap":118},[123,151460,151461,151463,151465],{"class":125,"line":126},[123,151462,148920],{"class":129},[123,151464,134],{"class":133},[123,151466,151467],{"class":143}," \"小明\"\n",[123,151469,151470,151472,151474],{"class":125,"line":140},[123,151471,148930],{"class":129},[123,151473,134],{"class":133},[123,151475,148935],{"class":164},[123,151477,151478],{"class":125,"line":156},[123,151479,232],{"emptyLinePlaceholder":231},[123,151481,151482,151484,151487],{"class":125,"line":168},[123,151483,34359],{"class":133},[123,151485,151486],{"class":337}," introduce",[123,151488,151489],{"class":129},"(name, age):\n",[123,151491,151492,151494,151496,151498,151501,151503,151505,151507,151510,151512,151514,151516,151519],{"class":125,"line":268},[123,151493,33714],{"class":164},[123,151495,1315],{"class":129},[123,151497,2667],{"class":133},[123,151499,151500],{"class":143},"\"我叫",[123,151502,3495],{"class":164},[123,151504,663],{"class":129},[123,151506,3545],{"class":164},[123,151508,151509],{"class":143},"，今年",[123,151511,3495],{"class":164},[123,151513,72621],{"class":129},[123,151515,3545],{"class":164},[123,151517,151518],{"class":143},"岁\"",[123,151520,288],{"class":129},[123,151522,151523],{"class":125,"line":291},[123,151524,232],{"emptyLinePlaceholder":231},[123,151526,151527],{"class":125,"line":300},[123,151528,151529],{"class":129},"introduce(name, age)\n",[19,151531,151532],{},"面向对象：",[113,151534,151536],{"className":115,"code":151535,"language":117,"meta":118,"style":118},"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",[120,151537,151538,151546,151554,151583,151587,151591,151601,151610,151619],{"__ignoreMap":118},[123,151539,151540,151542,151544],{"class":125,"line":126},[123,151541,17124],{"class":133},[123,151543,10330],{"class":337},[123,151545,1344],{"class":129},[123,151547,151548,151550,151552],{"class":125,"line":140},[123,151549,33216],{"class":133},[123,151551,151486],{"class":337},[123,151553,33222],{"class":129},[123,151555,151556,151558,151560,151562,151564,151567,151569,151571,151573,151575,151577,151579,151581],{"class":125,"line":156},[123,151557,34863],{"class":164},[123,151559,1315],{"class":129},[123,151561,2667],{"class":133},[123,151563,151500],{"class":143},[123,151565,151566],{"class":164},"{self",[123,151568,82698],{"class":129},[123,151570,3545],{"class":164},[123,151572,151509],{"class":143},[123,151574,151566],{"class":164},[123,151576,82710],{"class":129},[123,151578,3545],{"class":164},[123,151580,151518],{"class":143},[123,151582,288],{"class":129},[123,151584,151585],{"class":125,"line":168},[123,151586,232],{"emptyLinePlaceholder":231},[123,151588,151589],{"class":125,"line":268},[123,151590,232],{"emptyLinePlaceholder":231},[123,151592,151593,151596,151598],{"class":125,"line":291},[123,151594,151595],{"class":129},"student ",[123,151597,134],{"class":133},[123,151599,151600],{"class":129}," Student()\n",[123,151602,151603,151606,151608],{"class":125,"line":300},[123,151604,151605],{"class":129},"student.name ",[123,151607,134],{"class":133},[123,151609,151467],{"class":143},[123,151611,151612,151615,151617],{"class":125,"line":305},[123,151613,151614],{"class":129},"student.age ",[123,151616,134],{"class":133},[123,151618,148935],{"class":164},[123,151620,151621],{"class":125,"line":316},[123,151622,151623],{"class":129},"student.introduce()\n",[19,151625,151626],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151628,151630],{"id":151629},"_112-类和对象","11.2 类和对象",[19,151632,151633],{},"类是模板，对象是根据模板创建出来的具体实例。",[113,151635,151637],{"className":115,"code":151636,"language":117,"meta":118,"style":118},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[120,151638,151639,151647,151652,151656,151660,151669],{"__ignoreMap":118},[123,151640,151641,151643,151645],{"class":125,"line":126},[123,151642,17124],{"class":133},[123,151644,10330],{"class":337},[123,151646,1344],{"class":129},[123,151648,151649],{"class":125,"line":140},[123,151650,151651],{"class":133},"    pass\n",[123,151653,151654],{"class":125,"line":156},[123,151655,232],{"emptyLinePlaceholder":231},[123,151657,151658],{"class":125,"line":168},[123,151659,232],{"emptyLinePlaceholder":231},[123,151661,151662,151665,151667],{"class":125,"line":268},[123,151663,151664],{"class":129},"student1 ",[123,151666,134],{"class":133},[123,151668,151600],{"class":129},[123,151670,151671,151674,151676],{"class":125,"line":291},[123,151672,151673],{"class":129},"student2 ",[123,151675,134],{"class":133},[123,151677,151600],{"class":129},[19,151679,151680,151683,151684,103411,151687,151690],{},[120,151681,151682],{},"Student"," 是类，",[120,151685,151686],{},"student1",[120,151688,151689],{},"student2"," 是对象。",[14,151692,151694],{"id":151693},"_113-属性","11.3 属性",[19,151696,151697],{},"属性是对象保存的数据。",[113,151699,151701],{"className":115,"code":151700,"language":117,"meta":118,"style":118},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[120,151702,151703,151711,151715,151719,151723,151731,151739,151747,151751,151758],{"__ignoreMap":118},[123,151704,151705,151707,151709],{"class":125,"line":126},[123,151706,17124],{"class":133},[123,151708,10330],{"class":337},[123,151710,1344],{"class":129},[123,151712,151713],{"class":125,"line":140},[123,151714,151651],{"class":133},[123,151716,151717],{"class":125,"line":156},[123,151718,232],{"emptyLinePlaceholder":231},[123,151720,151721],{"class":125,"line":168},[123,151722,232],{"emptyLinePlaceholder":231},[123,151724,151725,151727,151729],{"class":125,"line":268},[123,151726,151595],{"class":129},[123,151728,134],{"class":133},[123,151730,151600],{"class":129},[123,151732,151733,151735,151737],{"class":125,"line":291},[123,151734,151605],{"class":129},[123,151736,134],{"class":133},[123,151738,151467],{"class":143},[123,151740,151741,151743,151745],{"class":125,"line":300},[123,151742,151614],{"class":129},[123,151744,134],{"class":133},[123,151746,148935],{"class":164},[123,151748,151749],{"class":125,"line":305},[123,151750,232],{"emptyLinePlaceholder":231},[123,151752,151753,151755],{"class":125,"line":316},[123,151754,294],{"class":164},[123,151756,151757],{"class":129},"(student.name)\n",[123,151759,151760,151762],{"class":125,"line":673},[123,151761,294],{"class":164},[123,151763,151764],{"class":129},"(student.age)\n",[19,151766,151767],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151769,151771],{"id":151770},"_114-方法","11.4 方法",[19,151773,151774],{},"类中的函数叫方法。",[113,151776,151777],{"className":115,"code":151535,"language":117,"meta":118,"style":118},[120,151778,151779,151787,151795,151823,151827,151831,151839,151847,151855],{"__ignoreMap":118},[123,151780,151781,151783,151785],{"class":125,"line":126},[123,151782,17124],{"class":133},[123,151784,10330],{"class":337},[123,151786,1344],{"class":129},[123,151788,151789,151791,151793],{"class":125,"line":140},[123,151790,33216],{"class":133},[123,151792,151486],{"class":337},[123,151794,33222],{"class":129},[123,151796,151797,151799,151801,151803,151805,151807,151809,151811,151813,151815,151817,151819,151821],{"class":125,"line":156},[123,151798,34863],{"class":164},[123,151800,1315],{"class":129},[123,151802,2667],{"class":133},[123,151804,151500],{"class":143},[123,151806,151566],{"class":164},[123,151808,82698],{"class":129},[123,151810,3545],{"class":164},[123,151812,151509],{"class":143},[123,151814,151566],{"class":164},[123,151816,82710],{"class":129},[123,151818,3545],{"class":164},[123,151820,151518],{"class":143},[123,151822,288],{"class":129},[123,151824,151825],{"class":125,"line":168},[123,151826,232],{"emptyLinePlaceholder":231},[123,151828,151829],{"class":125,"line":268},[123,151830,232],{"emptyLinePlaceholder":231},[123,151832,151833,151835,151837],{"class":125,"line":291},[123,151834,151595],{"class":129},[123,151836,134],{"class":133},[123,151838,151600],{"class":129},[123,151840,151841,151843,151845],{"class":125,"line":300},[123,151842,151605],{"class":129},[123,151844,134],{"class":133},[123,151846,151467],{"class":143},[123,151848,151849,151851,151853],{"class":125,"line":305},[123,151850,151614],{"class":129},[123,151852,134],{"class":133},[123,151854,148935],{"class":164},[123,151856,151857],{"class":125,"line":316},[123,151858,151623],{"class":129},[19,151860,151861,151863,151864,151866],{},[120,151862,33238],{}," 表示当前对象。调用方法时不需要手动传入 ",[120,151865,33238],{},"，Python 会自动传。",[14,151868,151870],{"id":151869},"_115-构造方法__init__","11.5 构造方法__init__",[19,151872,151873,151875],{},[120,151874,33244],{}," 在对象创建时自动执行，用于初始化属性。",[113,151877,151879],{"className":115,"code":151878,"language":117,"meta":118,"style":118},"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",[120,151880,151881,151889,151898,151910,151922,151933,151937,151945,151983,151987,151991,152013],{"__ignoreMap":118},[123,151882,151883,151885,151887],{"class":125,"line":126},[123,151884,17124],{"class":133},[123,151886,10330],{"class":337},[123,151888,1344],{"class":129},[123,151890,151891,151893,151895],{"class":125,"line":140},[123,151892,33216],{"class":133},[123,151894,33219],{"class":164},[123,151896,151897],{"class":129},"(self, name, age, score):\n",[123,151899,151900,151902,151905,151907],{"class":125,"line":156},[123,151901,33260],{"class":164},[123,151903,151904],{"class":129},".name ",[123,151906,134],{"class":133},[123,151908,151909],{"class":129}," name\n",[123,151911,151912,151914,151917,151919],{"class":125,"line":168},[123,151913,33260],{"class":164},[123,151915,151916],{"class":129},".age ",[123,151918,134],{"class":133},[123,151920,151921],{"class":129}," age\n",[123,151923,151924,151926,151929,151931],{"class":125,"line":268},[123,151925,33260],{"class":164},[123,151927,151928],{"class":129},".score ",[123,151930,134],{"class":133},[123,151932,4044],{"class":129},[123,151934,151935],{"class":125,"line":291},[123,151936,232],{"emptyLinePlaceholder":231},[123,151938,151939,151941,151943],{"class":125,"line":300},[123,151940,33216],{"class":133},[123,151942,151486],{"class":337},[123,151944,33222],{"class":129},[123,151946,151947,151949,151951,151953,151955,151957,151959,151961,151963,151965,151967,151969,151972,151974,151977,151979,151981],{"class":125,"line":305},[123,151948,34863],{"class":164},[123,151950,1315],{"class":129},[123,151952,2667],{"class":133},[123,151954,151500],{"class":143},[123,151956,151566],{"class":164},[123,151958,82698],{"class":129},[123,151960,3545],{"class":164},[123,151962,151509],{"class":143},[123,151964,151566],{"class":164},[123,151966,82710],{"class":129},[123,151968,3545],{"class":164},[123,151970,151971],{"class":143},"岁，成绩",[123,151973,151566],{"class":164},[123,151975,151976],{"class":129},".score",[123,151978,3545],{"class":164},[123,151980,2859],{"class":143},[123,151982,288],{"class":129},[123,151984,151985],{"class":125,"line":316},[123,151986,232],{"emptyLinePlaceholder":231},[123,151988,151989],{"class":125,"line":673},[123,151990,232],{"emptyLinePlaceholder":231},[123,151992,151993,151995,151997,152000,152003,152005,152007,152009,152011],{"class":125,"line":692},[123,151994,151595],{"class":129},[123,151996,134],{"class":133},[123,151998,151999],{"class":129}," Student(",[123,152001,152002],{"class":143},"\"小明\"",[123,152004,251],{"class":129},[123,152006,3252],{"class":164},[123,152008,251],{"class":129},[123,152010,3588],{"class":164},[123,152012,288],{"class":129},[123,152014,152015],{"class":125,"line":713},[123,152016,151623],{"class":129},[19,152018,152019],{},"构造方法的好处：",[26,152021,152022,152025,152028],{},[29,152023,152024],{},"创建对象时必须提供必要数据。",[29,152026,152027],{},"属性初始化集中，不容易漏。",[29,152029,152030],{},"对象状态更完整。",[14,152032,152034,152035],{"id":152033},"_116-str","11.6 ",[2759,152036,3769],{},[19,152038,152039,152040,2494],{},"直接打印对象时，默认输出不直观。可以定义 ",[120,152041,152042],{},"__str__",[113,152044,152046],{"className":115,"code":152045,"language":117,"meta":118,"style":118},"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",[120,152047,152048,152056,152065,152075,152085,152089,152098,152126,152130,152134,152150],{"__ignoreMap":118},[123,152049,152050,152052,152054],{"class":125,"line":126},[123,152051,17124],{"class":133},[123,152053,10330],{"class":337},[123,152055,1344],{"class":129},[123,152057,152058,152060,152062],{"class":125,"line":140},[123,152059,33216],{"class":133},[123,152061,33219],{"class":164},[123,152063,152064],{"class":129},"(self, name, age):\n",[123,152066,152067,152069,152071,152073],{"class":125,"line":156},[123,152068,33260],{"class":164},[123,152070,151904],{"class":129},[123,152072,134],{"class":133},[123,152074,151909],{"class":129},[123,152076,152077,152079,152081,152083],{"class":125,"line":168},[123,152078,33260],{"class":164},[123,152080,151916],{"class":129},[123,152082,134],{"class":133},[123,152084,151921],{"class":129},[123,152086,152087],{"class":125,"line":268},[123,152088,232],{"emptyLinePlaceholder":231},[123,152090,152091,152093,152096],{"class":125,"line":291},[123,152092,33216],{"class":133},[123,152094,152095],{"class":164}," __str__",[123,152097,33222],{"class":129},[123,152099,152100,152102,152105,152108,152110,152112,152114,152117,152119,152121,152123],{"class":125,"line":300},[123,152101,17182],{"class":133},[123,152103,152104],{"class":133}," f",[123,152106,152107],{"class":143},"\"Student(name=",[123,152109,151566],{"class":164},[123,152111,82698],{"class":129},[123,152113,3545],{"class":164},[123,152115,152116],{"class":143},", age=",[123,152118,151566],{"class":164},[123,152120,82710],{"class":129},[123,152122,3545],{"class":164},[123,152124,152125],{"class":143},")\"\n",[123,152127,152128],{"class":125,"line":305},[123,152129,232],{"emptyLinePlaceholder":231},[123,152131,152132],{"class":125,"line":316},[123,152133,232],{"emptyLinePlaceholder":231},[123,152135,152136,152138,152140,152142,152144,152146,152148],{"class":125,"line":673},[123,152137,151595],{"class":129},[123,152139,134],{"class":133},[123,152141,151999],{"class":129},[123,152143,152002],{"class":143},[123,152145,251],{"class":129},[123,152147,3252],{"class":164},[123,152149,288],{"class":129},[123,152151,152152,152154],{"class":125,"line":692},[123,152153,294],{"class":164},[123,152155,152156],{"class":129},"(student)\n",[14,152158,152160],{"id":152159},"_117-封装","11.7 封装",[19,152162,152163],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152165,152166],{},"Python 中以双下划线开头的属性通常视为私有属性。",[113,152168,152170],{"className":115,"code":152169,"language":117,"meta":118,"style":118},"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",[120,152171,152172,152181,152190,152202,152214,152218,152227,152236,152240,152250,152263,152274,152279,152290,152294,152303,152315,152326,152330,152343,152354,152358,152369,152373,152377,152395,152404,152413],{"__ignoreMap":118},[123,152173,152174,152176,152179],{"class":125,"line":126},[123,152175,17124],{"class":133},[123,152177,152178],{"class":337}," Account",[123,152180,1344],{"class":129},[123,152182,152183,152185,152187],{"class":125,"line":140},[123,152184,33216],{"class":133},[123,152186,33219],{"class":164},[123,152188,152189],{"class":129},"(self, owner, balance):\n",[123,152191,152192,152194,152197,152199],{"class":125,"line":156},[123,152193,33260],{"class":164},[123,152195,152196],{"class":129},".owner ",[123,152198,134],{"class":133},[123,152200,152201],{"class":129}," owner\n",[123,152203,152204,152206,152209,152211],{"class":125,"line":168},[123,152205,33260],{"class":164},[123,152207,152208],{"class":129},".__balance ",[123,152210,134],{"class":133},[123,152212,152213],{"class":129}," balance\n",[123,152215,152216],{"class":125,"line":268},[123,152217,232],{"emptyLinePlaceholder":231},[123,152219,152220,152222,152225],{"class":125,"line":291},[123,152221,33216],{"class":133},[123,152223,152224],{"class":337}," get_balance",[123,152226,33222],{"class":129},[123,152228,152229,152231,152233],{"class":125,"line":300},[123,152230,17182],{"class":133},[123,152232,41282],{"class":164},[123,152234,152235],{"class":129},".__balance\n",[123,152237,152238],{"class":125,"line":305},[123,152239,232],{"emptyLinePlaceholder":231},[123,152241,152242,152244,152247],{"class":125,"line":316},[123,152243,33216],{"class":133},[123,152245,152246],{"class":337}," deposit",[123,152248,152249],{"class":129},"(self, money):\n",[123,152251,152252,152254,152257,152259,152261],{"class":125,"line":673},[123,152253,4940],{"class":133},[123,152255,152256],{"class":129}," money ",[123,152258,4053],{"class":133},[123,152260,6532],{"class":164},[123,152262,1344],{"class":129},[123,152264,152265,152267,152269,152272],{"class":125,"line":692},[123,152266,37060],{"class":164},[123,152268,1315],{"class":129},[123,152270,152271],{"class":143},"\"存款金额必须大于0\"",[123,152273,288],{"class":129},[123,152275,152276],{"class":125,"line":713},[123,152277,152278],{"class":133},"            return\n",[123,152280,152281,152283,152285,152287],{"class":125,"line":718},[123,152282,33260],{"class":164},[123,152284,152208],{"class":129},[123,152286,11909],{"class":133},[123,152288,152289],{"class":129}," money\n",[123,152291,152292],{"class":125,"line":1138},[123,152293,232],{"emptyLinePlaceholder":231},[123,152295,152296,152298,152301],{"class":125,"line":1429},[123,152297,33216],{"class":133},[123,152299,152300],{"class":337}," withdraw",[123,152302,152249],{"class":129},[123,152304,152305,152307,152309,152311,152313],{"class":125,"line":1439},[123,152306,4940],{"class":133},[123,152308,152256],{"class":129},[123,152310,4053],{"class":133},[123,152312,6532],{"class":164},[123,152314,1344],{"class":129},[123,152316,152317,152319,152321,152324],{"class":125,"line":1444},[123,152318,37060],{"class":164},[123,152320,1315],{"class":129},[123,152322,152323],{"class":143},"\"取款金额必须大于0\"",[123,152325,288],{"class":129},[123,152327,152328],{"class":125,"line":1453},[123,152329,152278],{"class":133},[123,152331,152332,152334,152336,152338,152340],{"class":125,"line":1458},[123,152333,4940],{"class":133},[123,152335,152256],{"class":129},[123,152337,3559],{"class":133},[123,152339,41282],{"class":164},[123,152341,152342],{"class":129},".__balance:\n",[123,152344,152345,152347,152349,152352],{"class":125,"line":1476},[123,152346,37060],{"class":164},[123,152348,1315],{"class":129},[123,152350,152351],{"class":143},"\"余额不足\"",[123,152353,288],{"class":129},[123,152355,152356],{"class":125,"line":1494},[123,152357,152278],{"class":133},[123,152359,152360,152362,152364,152367],{"class":125,"line":1499},[123,152361,33260],{"class":164},[123,152363,152208],{"class":129},[123,152365,152366],{"class":133},"-=",[123,152368,152289],{"class":129},[123,152370,152371],{"class":125,"line":1517},[123,152372,232],{"emptyLinePlaceholder":231},[123,152374,152375],{"class":125,"line":1534},[123,152376,232],{"emptyLinePlaceholder":231},[123,152378,152379,152382,152384,152387,152389,152391,152393],{"class":125,"line":1539},[123,152380,152381],{"class":129},"account ",[123,152383,134],{"class":133},[123,152385,152386],{"class":129}," Account(",[123,152388,152002],{"class":143},[123,152390,251],{"class":129},[123,152392,8843],{"class":164},[123,152394,288],{"class":129},[123,152396,152397,152400,152402],{"class":125,"line":2080},[123,152398,152399],{"class":129},"account.deposit(",[123,152401,1045],{"class":164},[123,152403,288],{"class":129},[123,152405,152406,152409,152411],{"class":125,"line":2097},[123,152407,152408],{"class":129},"account.withdraw(",[123,152410,259],{"class":164},[123,152412,288],{"class":129},[123,152414,152415,152417],{"class":125,"line":2114},[123,152416,294],{"class":164},[123,152418,152419],{"class":129},"(account.get_balance())\n",[19,152421,152422],{},"封装的意义是避免外部随意修改内部状态。",[14,152424,152426],{"id":152425},"_118-继承","11.8 继承",[19,152428,152429],{},"继承可以让子类复用父类的属性和方法。",[113,152431,152433],{"className":115,"code":152432,"language":117,"meta":118,"style":118},"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",[120,152434,152435,152444,152453,152464,152468,152472,152486,152495,152506,152510,152514,152524,152529],{"__ignoreMap":118},[123,152436,152437,152439,152442],{"class":125,"line":126},[123,152438,17124],{"class":133},[123,152440,152441],{"class":337}," Animal",[123,152443,1344],{"class":129},[123,152445,152446,152448,152451],{"class":125,"line":140},[123,152447,33216],{"class":133},[123,152449,152450],{"class":337}," eat",[123,152452,33222],{"class":129},[123,152454,152455,152457,152459,152462],{"class":125,"line":156},[123,152456,34863],{"class":164},[123,152458,1315],{"class":129},[123,152460,152461],{"class":143},"\"吃东西\"",[123,152463,288],{"class":129},[123,152465,152466],{"class":125,"line":168},[123,152467,232],{"emptyLinePlaceholder":231},[123,152469,152470],{"class":125,"line":268},[123,152471,232],{"emptyLinePlaceholder":231},[123,152473,152474,152476,152479,152481,152484],{"class":125,"line":291},[123,152475,17124],{"class":133},[123,152477,152478],{"class":337}," Dog",[123,152480,1315],{"class":129},[123,152482,152483],{"class":337},"Animal",[123,152485,33201],{"class":129},[123,152487,152488,152490,152493],{"class":125,"line":300},[123,152489,33216],{"class":133},[123,152491,152492],{"class":337}," bark",[123,152494,33222],{"class":129},[123,152496,152497,152499,152501,152504],{"class":125,"line":305},[123,152498,34863],{"class":164},[123,152500,1315],{"class":129},[123,152502,152503],{"class":143},"\"汪汪\"",[123,152505,288],{"class":129},[123,152507,152508],{"class":125,"line":316},[123,152509,232],{"emptyLinePlaceholder":231},[123,152511,152512],{"class":125,"line":673},[123,152513,232],{"emptyLinePlaceholder":231},[123,152515,152516,152519,152521],{"class":125,"line":692},[123,152517,152518],{"class":129},"dog ",[123,152520,134],{"class":133},[123,152522,152523],{"class":129}," Dog()\n",[123,152525,152526],{"class":125,"line":713},[123,152527,152528],{"class":129},"dog.eat()\n",[123,152530,152531],{"class":125,"line":718},[123,152532,152533],{"class":129},"dog.bark()\n",[19,152535,152536],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152538,152540],{"id":152539},"_119-方法重写","11.9 方法重写",[113,152542,152544],{"className":115,"code":152543,"language":117,"meta":118,"style":118},"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",[120,152545,152546,152554,152563,152574,152578,152582,152594,152602,152612,152616,152620,152633,152641,152652,152656,152660,152668,152678,152682,152687],{"__ignoreMap":118},[123,152547,152548,152550,152552],{"class":125,"line":126},[123,152549,17124],{"class":133},[123,152551,152441],{"class":337},[123,152553,1344],{"class":129},[123,152555,152556,152558,152561],{"class":125,"line":140},[123,152557,33216],{"class":133},[123,152559,152560],{"class":337}," speak",[123,152562,33222],{"class":129},[123,152564,152565,152567,152569,152572],{"class":125,"line":156},[123,152566,34863],{"class":164},[123,152568,1315],{"class":129},[123,152570,152571],{"class":143},"\"动物叫\"",[123,152573,288],{"class":129},[123,152575,152576],{"class":125,"line":168},[123,152577,232],{"emptyLinePlaceholder":231},[123,152579,152580],{"class":125,"line":268},[123,152581,232],{"emptyLinePlaceholder":231},[123,152583,152584,152586,152588,152590,152592],{"class":125,"line":291},[123,152585,17124],{"class":133},[123,152587,152478],{"class":337},[123,152589,1315],{"class":129},[123,152591,152483],{"class":337},[123,152593,33201],{"class":129},[123,152595,152596,152598,152600],{"class":125,"line":300},[123,152597,33216],{"class":133},[123,152599,152560],{"class":337},[123,152601,33222],{"class":129},[123,152603,152604,152606,152608,152610],{"class":125,"line":305},[123,152605,34863],{"class":164},[123,152607,1315],{"class":129},[123,152609,152503],{"class":143},[123,152611,288],{"class":129},[123,152613,152614],{"class":125,"line":316},[123,152615,232],{"emptyLinePlaceholder":231},[123,152617,152618],{"class":125,"line":673},[123,152619,232],{"emptyLinePlaceholder":231},[123,152621,152622,152624,152627,152629,152631],{"class":125,"line":692},[123,152623,17124],{"class":133},[123,152625,152626],{"class":337}," Cat",[123,152628,1315],{"class":129},[123,152630,152483],{"class":337},[123,152632,33201],{"class":129},[123,152634,152635,152637,152639],{"class":125,"line":713},[123,152636,33216],{"class":133},[123,152638,152560],{"class":337},[123,152640,33222],{"class":129},[123,152642,152643,152645,152647,152650],{"class":125,"line":718},[123,152644,34863],{"class":164},[123,152646,1315],{"class":129},[123,152648,152649],{"class":143},"\"喵喵\"",[123,152651,288],{"class":129},[123,152653,152654],{"class":125,"line":1138},[123,152655,232],{"emptyLinePlaceholder":231},[123,152657,152658],{"class":125,"line":1429},[123,152659,232],{"emptyLinePlaceholder":231},[123,152661,152662,152664,152666],{"class":125,"line":1439},[123,152663,152518],{"class":129},[123,152665,134],{"class":133},[123,152667,152523],{"class":129},[123,152669,152670,152673,152675],{"class":125,"line":1444},[123,152671,152672],{"class":129},"cat ",[123,152674,134],{"class":133},[123,152676,152677],{"class":129}," Cat()\n",[123,152679,152680],{"class":125,"line":1453},[123,152681,232],{"emptyLinePlaceholder":231},[123,152683,152684],{"class":125,"line":1458},[123,152685,152686],{"class":129},"dog.speak()\n",[123,152688,152689],{"class":125,"line":1476},[123,152690,152691],{"class":129},"cat.speak()\n",[14,152693,152695],{"id":152694},"_1110-super","11.10 super",[19,152697,152698,152699,152702],{},"子类可以通过 ",[120,152700,152701],{},"super()"," 调用父类方法。",[113,152704,152706],{"className":115,"code":152705,"language":117,"meta":118,"style":118},"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",[120,152707,152708,152716,152725,152735,152739,152743,152755,152764,152775,152785,152789,152793,152809],{"__ignoreMap":118},[123,152709,152710,152712,152714],{"class":125,"line":126},[123,152711,17124],{"class":133},[123,152713,17998],{"class":337},[123,152715,1344],{"class":129},[123,152717,152718,152720,152722],{"class":125,"line":140},[123,152719,33216],{"class":133},[123,152721,33219],{"class":164},[123,152723,152724],{"class":129},"(self, name):\n",[123,152726,152727,152729,152731,152733],{"class":125,"line":156},[123,152728,33260],{"class":164},[123,152730,151904],{"class":129},[123,152732,134],{"class":133},[123,152734,151909],{"class":129},[123,152736,152737],{"class":125,"line":168},[123,152738,232],{"emptyLinePlaceholder":231},[123,152740,152741],{"class":125,"line":268},[123,152742,232],{"emptyLinePlaceholder":231},[123,152744,152745,152747,152749,152751,152753],{"class":125,"line":291},[123,152746,17124],{"class":133},[123,152748,10330],{"class":337},[123,152750,1315],{"class":129},[123,152752,21474],{"class":337},[123,152754,33201],{"class":129},[123,152756,152757,152759,152761],{"class":125,"line":300},[123,152758,33216],{"class":133},[123,152760,33219],{"class":164},[123,152762,152763],{"class":129},"(self, name, score):\n",[123,152765,152766,152768,152770,152772],{"class":125,"line":305},[123,152767,33232],{"class":164},[123,152769,19689],{"class":129},[123,152771,33244],{"class":164},[123,152773,152774],{"class":129},"(name)\n",[123,152776,152777,152779,152781,152783],{"class":125,"line":316},[123,152778,33260],{"class":164},[123,152780,151928],{"class":129},[123,152782,134],{"class":133},[123,152784,4044],{"class":129},[123,152786,152787],{"class":125,"line":673},[123,152788,232],{"emptyLinePlaceholder":231},[123,152790,152791],{"class":125,"line":692},[123,152792,232],{"emptyLinePlaceholder":231},[123,152794,152795,152797,152799,152801,152803,152805,152807],{"class":125,"line":713},[123,152796,151595],{"class":129},[123,152798,134],{"class":133},[123,152800,151999],{"class":129},[123,152802,152002],{"class":143},[123,152804,251],{"class":129},[123,152806,3588],{"class":164},[123,152808,288],{"class":129},[123,152810,152811,152813],{"class":125,"line":718},[123,152812,294],{"class":164},[123,152814,152815],{"class":129},"(student.name, student.score)\n",[14,152817,152819],{"id":152818},"_1111-多态","11.11 多态",[19,152821,152822],{},"多态指不同对象响应同一个方法，表现出不同结果。",[113,152824,152826],{"className":115,"code":152825,"language":117,"meta":118,"style":118},"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",[120,152827,152828,152836,152844,152854,152858,152862,152870,152878,152888,152892,152896,152906,152911,152915,152919,152924],{"__ignoreMap":118},[123,152829,152830,152832,152834],{"class":125,"line":126},[123,152831,17124],{"class":133},[123,152833,152478],{"class":337},[123,152835,1344],{"class":129},[123,152837,152838,152840,152842],{"class":125,"line":140},[123,152839,33216],{"class":133},[123,152841,152560],{"class":337},[123,152843,33222],{"class":129},[123,152845,152846,152848,152850,152852],{"class":125,"line":156},[123,152847,34863],{"class":164},[123,152849,1315],{"class":129},[123,152851,152503],{"class":143},[123,152853,288],{"class":129},[123,152855,152856],{"class":125,"line":168},[123,152857,232],{"emptyLinePlaceholder":231},[123,152859,152860],{"class":125,"line":268},[123,152861,232],{"emptyLinePlaceholder":231},[123,152863,152864,152866,152868],{"class":125,"line":291},[123,152865,17124],{"class":133},[123,152867,152626],{"class":337},[123,152869,1344],{"class":129},[123,152871,152872,152874,152876],{"class":125,"line":300},[123,152873,33216],{"class":133},[123,152875,152560],{"class":337},[123,152877,33222],{"class":129},[123,152879,152880,152882,152884,152886],{"class":125,"line":305},[123,152881,34863],{"class":164},[123,152883,1315],{"class":129},[123,152885,152649],{"class":143},[123,152887,288],{"class":129},[123,152889,152890],{"class":125,"line":316},[123,152891,232],{"emptyLinePlaceholder":231},[123,152893,152894],{"class":125,"line":673},[123,152895,232],{"emptyLinePlaceholder":231},[123,152897,152898,152900,152903],{"class":125,"line":692},[123,152899,34359],{"class":133},[123,152901,152902],{"class":337}," make_sound",[123,152904,152905],{"class":129},"(animal):\n",[123,152907,152908],{"class":125,"line":713},[123,152909,152910],{"class":129},"    animal.speak()\n",[123,152912,152913],{"class":125,"line":718},[123,152914,232],{"emptyLinePlaceholder":231},[123,152916,152917],{"class":125,"line":1138},[123,152918,232],{"emptyLinePlaceholder":231},[123,152920,152921],{"class":125,"line":1429},[123,152922,152923],{"class":129},"make_sound(Dog())\n",[123,152925,152926],{"class":125,"line":1439},[123,152927,152928],{"class":129},"make_sound(Cat())\n",[19,152930,152931],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152933,152935],{"id":152934},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152937,152938],{},"实例属性属于对象：",[113,152940,152942],{"className":115,"code":152941,"language":117,"meta":118,"style":118},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[120,152943,152944,152952,152960],{"__ignoreMap":118},[123,152945,152946,152948,152950],{"class":125,"line":126},[123,152947,17124],{"class":133},[123,152949,10330],{"class":337},[123,152951,1344],{"class":129},[123,152953,152954,152956,152958],{"class":125,"line":140},[123,152955,33216],{"class":133},[123,152957,33219],{"class":164},[123,152959,152724],{"class":129},[123,152961,152962,152964,152966,152968],{"class":125,"line":156},[123,152963,33260],{"class":164},[123,152965,151904],{"class":129},[123,152967,134],{"class":133},[123,152969,151909],{"class":129},[19,152971,152972],{},"类属性属于类，所有对象共享：",[113,152974,152976],{"className":115,"code":152975,"language":117,"meta":118,"style":118},"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",[120,152977,152978,152986,152996,153000,153008,153018,153022,153026,153039,153053,153057,153064,153071],{"__ignoreMap":118},[123,152979,152980,152982,152984],{"class":125,"line":126},[123,152981,17124],{"class":133},[123,152983,10330],{"class":337},[123,152985,1344],{"class":129},[123,152987,152988,152991,152993],{"class":125,"line":140},[123,152989,152990],{"class":129},"    school ",[123,152992,134],{"class":133},[123,152994,152995],{"class":143}," \"黑马学校\"\n",[123,152997,152998],{"class":125,"line":156},[123,152999,232],{"emptyLinePlaceholder":231},[123,153001,153002,153004,153006],{"class":125,"line":168},[123,153003,33216],{"class":133},[123,153005,33219],{"class":164},[123,153007,152724],{"class":129},[123,153009,153010,153012,153014,153016],{"class":125,"line":268},[123,153011,33260],{"class":164},[123,153013,151904],{"class":129},[123,153015,134],{"class":133},[123,153017,151909],{"class":129},[123,153019,153020],{"class":125,"line":291},[123,153021,232],{"emptyLinePlaceholder":231},[123,153023,153024],{"class":125,"line":300},[123,153025,232],{"emptyLinePlaceholder":231},[123,153027,153028,153031,153033,153035,153037],{"class":125,"line":305},[123,153029,153030],{"class":129},"s1 ",[123,153032,134],{"class":133},[123,153034,151999],{"class":129},[123,153036,152002],{"class":143},[123,153038,288],{"class":129},[123,153040,153041,153044,153046,153048,153051],{"class":125,"line":316},[123,153042,153043],{"class":129},"s2 ",[123,153045,134],{"class":133},[123,153047,151999],{"class":129},[123,153049,153050],{"class":143},"\"小红\"",[123,153052,288],{"class":129},[123,153054,153055],{"class":125,"line":673},[123,153056,232],{"emptyLinePlaceholder":231},[123,153058,153059,153061],{"class":125,"line":692},[123,153060,294],{"class":164},[123,153062,153063],{"class":129},"(s1.school)\n",[123,153065,153066,153068],{"class":125,"line":713},[123,153067,294],{"class":164},[123,153069,153070],{"class":129},"(s2.school)\n",[123,153072,153073,153075],{"class":125,"line":718},[123,153074,294],{"class":164},[123,153076,153077],{"class":129},"(Student.school)\n",[19,153079,153080],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153082,153084],{"id":153083},"_1113-类方法和静态方法","11.13 类方法和静态方法",[2587,153086,153088],{"id":153087},"_11131-类方法","11.13.1 类方法",[19,153090,153091,153092,153095,153096,2494],{},"类方法使用 ",[120,153093,153094],{},"@classmethod","，第一个参数通常是 ",[120,153097,153098],{},"cls",[113,153100,153102],{"className":115,"code":153101,"language":117,"meta":118,"style":118},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[120,153103,153104,153112,153120,153124,153132,153142,153152,153156,153160],{"__ignoreMap":118},[123,153105,153106,153108,153110],{"class":125,"line":126},[123,153107,17124],{"class":133},[123,153109,10330],{"class":337},[123,153111,1344],{"class":129},[123,153113,153114,153116,153118],{"class":125,"line":140},[123,153115,152990],{"class":129},[123,153117,134],{"class":133},[123,153119,152995],{"class":143},[123,153121,153122],{"class":125,"line":156},[123,153123,232],{"emptyLinePlaceholder":231},[123,153125,153126,153129],{"class":125,"line":168},[123,153127,153128],{"class":337},"    @",[123,153130,153131],{"class":164},"classmethod\n",[123,153133,153134,153136,153139],{"class":125,"line":268},[123,153135,33216],{"class":133},[123,153137,153138],{"class":337}," get_school",[123,153140,153141],{"class":129},"(cls):\n",[123,153143,153144,153146,153149],{"class":125,"line":291},[123,153145,17182],{"class":133},[123,153147,153148],{"class":164}," cls",[123,153150,153151],{"class":129},".school\n",[123,153153,153154],{"class":125,"line":300},[123,153155,232],{"emptyLinePlaceholder":231},[123,153157,153158],{"class":125,"line":305},[123,153159,232],{"emptyLinePlaceholder":231},[123,153161,153162,153164],{"class":125,"line":316},[123,153163,294],{"class":164},[123,153165,153166],{"class":129},"(Student.get_school())\n",[2587,153168,153170],{"id":153169},"_11132-静态方法","11.13.2 静态方法",[19,153172,153173,153174,153177],{},"静态方法使用 ",[120,153175,153176],{},"@staticmethod","，不需要访问实例和类。",[113,153179,153181],{"className":115,"code":153180,"language":117,"meta":118,"style":118},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[120,153182,153183,153192,153199,153208,153219,153223,153227],{"__ignoreMap":118},[123,153184,153185,153187,153190],{"class":125,"line":126},[123,153186,17124],{"class":133},[123,153188,153189],{"class":337}," MathUtils",[123,153191,1344],{"class":129},[123,153193,153194,153196],{"class":125,"line":140},[123,153195,153128],{"class":337},[123,153197,153198],{"class":164},"staticmethod\n",[123,153200,153201,153203,153205],{"class":125,"line":156},[123,153202,33216],{"class":133},[123,153204,7643],{"class":337},[123,153206,153207],{"class":129},"(a, b):\n",[123,153209,153210,153212,153214,153216],{"class":125,"line":168},[123,153211,17182],{"class":133},[123,153213,13301],{"class":129},[123,153215,3086],{"class":133},[123,153217,153218],{"class":129}," b\n",[123,153220,153221],{"class":125,"line":268},[123,153222,232],{"emptyLinePlaceholder":231},[123,153224,153225],{"class":125,"line":291},[123,153226,232],{"emptyLinePlaceholder":231},[123,153228,153229,153231,153234,153236,153238,153240],{"class":125,"line":300},[123,153230,294],{"class":164},[123,153232,153233],{"class":129},"(MathUtils.add(",[123,153235,2825],{"class":164},[123,153237,251],{"class":129},[123,153239,2692],{"class":164},[123,153241,32913],{"class":129},[19,153243,153244],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153246,153248],{"id":153247},"_1114-dataclass","11.14 dataclass",[19,153250,153251,153254],{},[120,153252,153253],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[113,153256,153258],{"className":115,"code":153257,"language":117,"meta":118,"style":118},"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",[120,153259,153260,153272,153276,153280,153285,153293,153301,153309,153317,153321,153325,153345],{"__ignoreMap":118},[123,153261,153262,153264,153267,153269],{"class":125,"line":126},[123,153263,391],{"class":133},[123,153265,153266],{"class":129}," dataclasses ",[123,153268,223],{"class":133},[123,153270,153271],{"class":129}," dataclass\n",[123,153273,153274],{"class":125,"line":140},[123,153275,232],{"emptyLinePlaceholder":231},[123,153277,153278],{"class":125,"line":156},[123,153279,232],{"emptyLinePlaceholder":231},[123,153281,153282],{"class":125,"line":168},[123,153283,153284],{"class":337},"@dataclass\n",[123,153286,153287,153289,153291],{"class":125,"line":268},[123,153288,17124],{"class":133},[123,153290,10330],{"class":337},[123,153292,1344],{"class":129},[123,153294,153295,153298],{"class":125,"line":291},[123,153296,153297],{"class":129},"    name: ",[123,153299,153300],{"class":164},"str\n",[123,153302,153303,153306],{"class":125,"line":300},[123,153304,153305],{"class":129},"    age: ",[123,153307,153308],{"class":164},"int\n",[123,153310,153311,153314],{"class":125,"line":305},[123,153312,153313],{"class":129},"    score: ",[123,153315,153316],{"class":164},"float\n",[123,153318,153319],{"class":125,"line":316},[123,153320,232],{"emptyLinePlaceholder":231},[123,153322,153323],{"class":125,"line":673},[123,153324,232],{"emptyLinePlaceholder":231},[123,153326,153327,153329,153331,153333,153335,153337,153339,153341,153343],{"class":125,"line":692},[123,153328,151595],{"class":129},[123,153330,134],{"class":133},[123,153332,151999],{"class":129},[123,153334,152002],{"class":143},[123,153336,251],{"class":129},[123,153338,3252],{"class":164},[123,153340,251],{"class":129},[123,153342,3588],{"class":164},[123,153344,288],{"class":129},[123,153346,153347,153349],{"class":125,"line":713},[123,153348,294],{"class":164},[123,153350,152156],{"class":129},[19,153352,153353,153354,2820,153356,153359],{},"它会自动生成 ",[120,153355,33244],{},[120,153357,153358],{},"__repr__"," 等方法。适合数据模型类。",[14,153361,153363],{"id":153362},"_1115-小案例学生类","11.15 小案例：学生类",[113,153365,153367],{"className":115,"code":153366,"language":117,"meta":118,"style":118},"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",[120,153368,153369,153377,153386,153398,153408,153418,153428,153432,153441,153454,153458,153467,153473,153485,153497,153509,153521,153525,153529,153535,153545,153554,153564,153572,153580,153589,153593,153597,153605,153641,153645,153649,153674,153681],{"__ignoreMap":118},[123,153370,153371,153373,153375],{"class":125,"line":126},[123,153372,17124],{"class":133},[123,153374,10330],{"class":337},[123,153376,1344],{"class":129},[123,153378,153379,153381,153383],{"class":125,"line":140},[123,153380,33216],{"class":133},[123,153382,33219],{"class":164},[123,153384,153385],{"class":129},"(self, student_id, name, age, score):\n",[123,153387,153388,153390,153393,153395],{"class":125,"line":156},[123,153389,33260],{"class":164},[123,153391,153392],{"class":129},".student_id ",[123,153394,134],{"class":133},[123,153396,153397],{"class":129}," student_id\n",[123,153399,153400,153402,153404,153406],{"class":125,"line":168},[123,153401,33260],{"class":164},[123,153403,151904],{"class":129},[123,153405,134],{"class":133},[123,153407,151909],{"class":129},[123,153409,153410,153412,153414,153416],{"class":125,"line":268},[123,153411,33260],{"class":164},[123,153413,151916],{"class":129},[123,153415,134],{"class":133},[123,153417,151921],{"class":129},[123,153419,153420,153422,153424,153426],{"class":125,"line":291},[123,153421,33260],{"class":164},[123,153423,151928],{"class":129},[123,153425,134],{"class":133},[123,153427,4044],{"class":129},[123,153429,153430],{"class":125,"line":300},[123,153431,232],{"emptyLinePlaceholder":231},[123,153433,153434,153436,153439],{"class":125,"line":305},[123,153435,33216],{"class":133},[123,153437,153438],{"class":337}," is_passed",[123,153440,33222],{"class":129},[123,153442,153443,153445,153447,153449,153451],{"class":125,"line":316},[123,153444,17182],{"class":133},[123,153446,41282],{"class":164},[123,153448,151928],{"class":129},[123,153450,4164],{"class":133},[123,153452,153453],{"class":164}," 60\n",[123,153455,153456],{"class":125,"line":673},[123,153457,232],{"emptyLinePlaceholder":231},[123,153459,153460,153462,153465],{"class":125,"line":692},[123,153461,33216],{"class":133},[123,153463,153464],{"class":337}," to_dict",[123,153466,33222],{"class":129},[123,153468,153469,153471],{"class":125,"line":713},[123,153470,17182],{"class":133},[123,153472,137],{"class":129},[123,153474,153475,153478,153480,153482],{"class":125,"line":718},[123,153476,153477],{"class":143},"            \"student_id\"",[123,153479,147],{"class":129},[123,153481,33238],{"class":164},[123,153483,153484],{"class":129},".student_id,\n",[123,153486,153487,153490,153492,153494],{"class":125,"line":1138},[123,153488,153489],{"class":143},"            \"name\"",[123,153491,147],{"class":129},[123,153493,33238],{"class":164},[123,153495,153496],{"class":129},".name,\n",[123,153498,153499,153502,153504,153506],{"class":125,"line":1429},[123,153500,153501],{"class":143},"            \"age\"",[123,153503,147],{"class":129},[123,153505,33238],{"class":164},[123,153507,153508],{"class":129},".age,\n",[123,153510,153511,153514,153516,153518],{"class":125,"line":1439},[123,153512,153513],{"class":143},"            \"score\"",[123,153515,147],{"class":129},[123,153517,33238],{"class":164},[123,153519,153520],{"class":129},".score,\n",[123,153522,153523],{"class":125,"line":1444},[123,153524,4972],{"class":129},[123,153526,153527],{"class":125,"line":1453},[123,153528,232],{"emptyLinePlaceholder":231},[123,153530,153531,153533],{"class":125,"line":1458},[123,153532,153128],{"class":337},[123,153534,153131],{"class":164},[123,153536,153537,153539,153542],{"class":125,"line":1476},[123,153538,33216],{"class":133},[123,153540,153541],{"class":337}," from_dict",[123,153543,153544],{"class":129},"(cls, data):\n",[123,153546,153547,153549,153551],{"class":125,"line":1494},[123,153548,17182],{"class":133},[123,153550,153148],{"class":164},[123,153552,153553],{"class":129},"(\n",[123,153555,153556,153559,153562],{"class":125,"line":1499},[123,153557,153558],{"class":129},"            data[",[123,153560,153561],{"class":143},"\"student_id\"",[123,153563,860],{"class":129},[123,153565,153566,153568,153570],{"class":125,"line":1517},[123,153567,153558],{"class":129},[123,153569,244],{"class":143},[123,153571,860],{"class":129},[123,153573,153574,153576,153578],{"class":125,"line":1534},[123,153575,153558],{"class":129},[123,153577,71525],{"class":143},[123,153579,860],{"class":129},[123,153581,153582,153584,153587],{"class":125,"line":1539},[123,153583,153558],{"class":129},[123,153585,153586],{"class":143},"\"score\"",[123,153588,860],{"class":129},[123,153590,153591],{"class":125,"line":2080},[123,153592,40535],{"class":129},[123,153594,153595],{"class":125,"line":2097},[123,153596,232],{"emptyLinePlaceholder":231},[123,153598,153599,153601,153603],{"class":125,"line":2114},[123,153600,33216],{"class":133},[123,153602,152095],{"class":164},[123,153604,33222],{"class":129},[123,153606,153607,153609,153611,153613,153615,153618,153620,153623,153625,153627,153629,153631,153633,153635,153637,153639],{"class":125,"line":2125},[123,153608,17182],{"class":133},[123,153610,152104],{"class":133},[123,153612,2859],{"class":143},[123,153614,151566],{"class":164},[123,153616,153617],{"class":129},".student_id",[123,153619,3545],{"class":164},[123,153621,153622],{"class":164}," {self",[123,153624,82698],{"class":129},[123,153626,3545],{"class":164},[123,153628,153622],{"class":164},[123,153630,82710],{"class":129},[123,153632,3545],{"class":164},[123,153634,153622],{"class":164},[123,153636,151976],{"class":129},[123,153638,3545],{"class":164},[123,153640,27555],{"class":143},[123,153642,153643],{"class":125,"line":2130},[123,153644,232],{"emptyLinePlaceholder":231},[123,153646,153647],{"class":125,"line":5033},[123,153648,232],{"emptyLinePlaceholder":231},[123,153650,153651,153653,153655,153657,153660,153662,153664,153666,153668,153670,153672],{"class":125,"line":5041},[123,153652,151595],{"class":129},[123,153654,134],{"class":133},[123,153656,151999],{"class":129},[123,153658,153659],{"class":143},"\"001\"",[123,153661,251],{"class":129},[123,153663,152002],{"class":143},[123,153665,251],{"class":129},[123,153667,3252],{"class":164},[123,153669,251],{"class":129},[123,153671,3588],{"class":164},[123,153673,288],{"class":129},[123,153675,153676,153678],{"class":125,"line":5046},[123,153677,294],{"class":164},[123,153679,153680],{"class":129},"(student.is_passed())\n",[123,153682,153683,153685],{"class":125,"line":5052},[123,153684,294],{"class":164},[123,153686,153687],{"class":129},"(student.to_dict())\n",[19,153689,153690,103411,153693,153696],{},[120,153691,153692],{},"to_dict()",[120,153694,153695],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153698,153700],{"id":153699},"_1116-易错点","11.16 易错点",[26,153702,153703,153709,153715,153720,153723,153726],{},[29,153704,153705,153706,2494],{},"类名推荐使用大驼峰，如 ",[120,153707,153708],{},"StudentManager",[29,153710,153711,153712,153714],{},"方法第一个参数必须写 ",[120,153713,33238],{},"，调用时不用传。",[29,153716,153717,153719],{},[120,153718,33244],{}," 不是普通方法，它在创建对象时自动执行。",[29,153721,153722],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,153724,153725],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,153727,153728],{},"类中方法太多时，说明职责可能过重。",[14,153730,153732],{"id":153731},"_1117-本章练习","11.17 本章练习",[26,153734,153735,153741,153747,153752,153765],{},[29,153736,153737,153738,153740],{},"定义 ",[120,153739,151682],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,153742,153737,153743,153746],{},[120,153744,153745],{},"Account"," 类，实现存款、取款、查询余额。",[29,153748,153737,153749,153751],{},[120,153750,19654],{}," 类，计算圆的周长和面积。",[29,153753,153737,153754,2820,153757,153760,153761,153764],{},[120,153755,153756],{},"Dog",[120,153758,153759],{},"Cat"," 类，并用同一个函数调用它们的 ",[120,153762,153763],{},"speak()"," 方法。",[29,153766,106756,153767,153769,153770,2494],{},[120,153768,153253],{}," 定义一个商品类 ",[120,153771,153772],{},"Product",[2526,153774,153775],{},"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":118,"searchDepth":140,"depth":140,"links":153777},[153778,153779,153780,153781,153782,153783,153785,153786,153787,153788,153789,153790,153791,153795,153796,153797,153798],{"id":151446,"depth":140,"text":151447},{"id":151629,"depth":140,"text":151630},{"id":151693,"depth":140,"text":151694},{"id":151770,"depth":140,"text":151771},{"id":151869,"depth":140,"text":151870},{"id":152033,"depth":140,"text":153784},"11.6 str",{"id":152159,"depth":140,"text":152160},{"id":152425,"depth":140,"text":152426},{"id":152539,"depth":140,"text":152540},{"id":152694,"depth":140,"text":152695},{"id":152818,"depth":140,"text":152819},{"id":152934,"depth":140,"text":152935},{"id":153083,"depth":140,"text":153084,"children":153792},[153793,153794],{"id":153087,"depth":156,"text":153088},{"id":153169,"depth":156,"text":153170},{"id":153247,"depth":140,"text":153248},{"id":153362,"depth":140,"text":153363},{"id":153699,"depth":140,"text":153700},{"id":153731,"depth":140,"text":153732},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151438,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153805,"title":153806,"body":153807,"description":2544,"extension":2545,"meta":157120,"navigation":231,"path":157121,"seo":157122,"stem":157123,"__hash__":157124},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153808,"toc":157096},[153809,153812,153816,153819,153822,153851,153854,153862,153866,153870,153873,153896,153899,153905,153909,155355,155358,155379,155383,155386,155398,155401,155585,155588,155714,155717,155721,155725,155861,155865,155951,155955,156037,156041,156078,156082,156271,156275,156278,156508,156512,156515,156696,156699,156703,156706,156712,156715,156741,156745,156748,156762,156765,156790,156793,156807,156810,156827,156830,156847,156850,156867,156871,156897,156901,156924,156928,156931,156933,156939,156941,156962,156965,156971,156977,156981,156984,157060,157063,157067,157093],[10,153810,153806],{"id":153811},"_12-综合案例与复习路线",[14,153813,153815],{"id":153814},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153817,153818],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153820,153821],{},"一个合格的入门综合项目最好覆盖：",[26,153823,153824,153827,153830,153833,153836,153839,153842,153845,153848],{},[29,153825,153826],{},"输入输出。",[29,153828,153829],{},"判断和循环。",[29,153831,153832],{},"函数拆分。",[29,153834,153835],{},"列表、字典等容器。",[29,153837,153838],{},"文件持久化。",[29,153840,153841],{},"异常处理。",[29,153843,153844],{},"模块拆分。",[29,153846,153847],{},"可选：面向对象。",[29,153849,153850],{},"可选：数据可视化。",[19,153852,153853],{},"本章整理两个方向：",[26,153855,153856,153859],{},[29,153857,153858],{},"学生管理系统。",[29,153860,153861],{},"销售数据统计和可视化。",[14,153863,153865],{"id":153864},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[2587,153867,153869],{"id":153868},"_1221-需求","12.2.1 需求",[19,153871,153872],{},"实现一个命令行学生管理系统：",[26,153874,153875,153878,153881,153884,153887,153890,153893],{},[29,153876,153877],{},"添加学生。",[29,153879,153880],{},"删除学生。",[29,153882,153883],{},"修改学生。",[29,153885,153886],{},"查询学生。",[29,153888,153889],{},"显示所有学生。",[29,153891,153892],{},"保存到 JSON 文件。",[29,153894,153895],{},"程序启动时自动读取 JSON 文件。",[19,153897,153898],{},"学生字段：",[113,153900,153903],{"className":153901,"code":153902,"language":7621,"meta":118},[7619],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[120,153904,153902],{"__ignoreMap":118},[14,153906,153908],{"id":153907},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[113,153910,153912],{"className":115,"code":153911,"language":117,"meta":118,"style":118},"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",[120,153913,153914,153920,153930,153934,153948,153952,153956,153965,153977,153983,153987,153993,154024,154034,154041,154052,154058,154062,154066,154076,154107,154133,154137,154141,154150,154161,154172,154183,154194,154205,154216,154227,154231,154235,154245,154257,154273,154280,154287,154291,154295,154305,154313,154320,154333,154343,154354,154358,154362,154371,154379,154385,154397,154405,154416,154420,154424,154433,154449,154453,154460,154471,154476,154480,154496,154511,154526,154530,154535,154543,154551,154559,154567,154571,154576,154587,154591,154595,154604,154619,154629,154633,154645,154656,154660,154664,154669,154673,154684,154688,154692,154701,154716,154724,154728,154740,154750,154754,154758,154773,154786,154799,154803,154816,154828,154840,154844,154848,154859,154863,154867,154876,154891,154899,154903,154915,154925,154929,154933,154938,154942,154946,154956,154962,154984,155003,155022,155041,155046,155050,155054,155063,155071,155082,155086,155090,155116,155126,155131,155135,155139,155147,155157,155161,155169,155174,155190,155194,155208,155213,155227,155232,155245,155250,155263,155268,155281,155286,155299,155310,155314,155320,155331,155335,155339,155351],{"__ignoreMap":118},[123,153915,153916,153918],{"class":125,"line":126},[123,153917,223],{"class":133},[123,153919,226],{"class":129},[123,153921,153922,153924,153926,153928],{"class":125,"line":140},[123,153923,391],{"class":133},[123,153925,110700],{"class":129},[123,153927,223],{"class":133},[123,153929,110705],{"class":129},[123,153931,153932],{"class":125,"line":156},[123,153933,232],{"emptyLinePlaceholder":231},[123,153935,153936,153939,153941,153943,153946],{"class":125,"line":168},[123,153937,153938],{"class":164},"DATA_FILE",[123,153940,15995],{"class":133},[123,153942,110934],{"class":129},[123,153944,153945],{"class":143},"\"students.json\"",[123,153947,288],{"class":129},[123,153949,153950],{"class":125,"line":268},[123,153951,232],{"emptyLinePlaceholder":231},[123,153953,153954],{"class":125,"line":291},[123,153955,232],{"emptyLinePlaceholder":231},[123,153957,153958,153960,153963],{"class":125,"line":300},[123,153959,34359],{"class":133},[123,153961,153962],{"class":337}," load_students",[123,153964,34365],{"class":129},[123,153966,153967,153969,153971,153974],{"class":125,"line":305},[123,153968,1711],{"class":133},[123,153970,1714],{"class":133},[123,153972,153973],{"class":164}," DATA_FILE",[123,153975,153976],{"class":129},".exists():\n",[123,153978,153979,153981],{"class":125,"line":316},[123,153980,17182],{"class":133},[123,153982,1372],{"class":129},[123,153984,153985],{"class":125,"line":673},[123,153986,232],{"emptyLinePlaceholder":231},[123,153988,153989,153991],{"class":125,"line":692},[123,153990,128172],{"class":133},[123,153992,1344],{"class":129},[123,153994,153995,153998,154000,154002,154004,154006,154008,154010,154012,154014,154016,154018,154020,154022],{"class":125,"line":713},[123,153996,153997],{"class":133},"        with",[123,153999,1312],{"class":164},[123,154001,1315],{"class":129},[123,154003,153938],{"class":164},[123,154005,251],{"class":129},[123,154007,1323],{"class":143},[123,154009,251],{"class":129},[123,154011,1328],{"class":279},[123,154013,134],{"class":133},[123,154015,1333],{"class":143},[123,154017,1336],{"class":129},[123,154019,547],{"class":133},[123,154021,1341],{"class":279},[123,154023,1344],{"class":129},[123,154025,154026,154028,154030,154032],{"class":125,"line":718},[123,154027,18160],{"class":133},[123,154029,1354],{"class":129},[123,154031,1357],{"class":279},[123,154033,288],{"class":129},[123,154035,154036,154038],{"class":125,"line":1138},[123,154037,128200],{"class":133},[123,154039,154040],{"class":129}," json.JSONDecodeError:\n",[123,154042,154043,154045,154047,154050],{"class":125,"line":1429},[123,154044,34863],{"class":164},[123,154046,1315],{"class":129},[123,154048,154049],{"class":143},"\"数据文件格式错误，已使用空数据启动\"",[123,154051,288],{"class":129},[123,154053,154054,154056],{"class":125,"line":1439},[123,154055,17182],{"class":133},[123,154057,1372],{"class":129},[123,154059,154060],{"class":125,"line":1444},[123,154061,232],{"emptyLinePlaceholder":231},[123,154063,154064],{"class":125,"line":1453},[123,154065,232],{"emptyLinePlaceholder":231},[123,154067,154068,154070,154073],{"class":125,"line":1458},[123,154069,34359],{"class":133},[123,154071,154072],{"class":337}," save_students",[123,154074,154075],{"class":129},"(students):\n",[123,154077,154078,154080,154082,154084,154086,154088,154091,154093,154095,154097,154099,154101,154103,154105],{"class":125,"line":1476},[123,154079,36588],{"class":133},[123,154081,1312],{"class":164},[123,154083,1315],{"class":129},[123,154085,153938],{"class":164},[123,154087,251],{"class":129},[123,154089,154090],{"class":143},"\"w\"",[123,154092,251],{"class":129},[123,154094,1328],{"class":279},[123,154096,134],{"class":133},[123,154098,1333],{"class":143},[123,154100,1336],{"class":129},[123,154102,547],{"class":133},[123,154104,1341],{"class":279},[123,154106,1344],{"class":129},[123,154108,154109,154112,154114,154116,154118,154120,154122,154124,154127,154129,154131],{"class":125,"line":1494},[123,154110,154111],{"class":129},"        json.dump(students, ",[123,154113,1357],{"class":279},[123,154115,251],{"class":129},[123,154117,280],{"class":279},[123,154119,134],{"class":133},[123,154121,285],{"class":164},[123,154123,251],{"class":129},[123,154125,154126],{"class":279},"indent",[123,154128,134],{"class":133},[123,154130,2692],{"class":164},[123,154132,288],{"class":129},[123,154134,154135],{"class":125,"line":1499},[123,154136,232],{"emptyLinePlaceholder":231},[123,154138,154139],{"class":125,"line":1517},[123,154140,232],{"emptyLinePlaceholder":231},[123,154142,154143,154145,154148],{"class":125,"line":1534},[123,154144,34359],{"class":133},[123,154146,154147],{"class":337}," show_menu",[123,154149,34365],{"class":129},[123,154151,154152,154154,154156,154159],{"class":125,"line":1539},[123,154153,33714],{"class":164},[123,154155,1315],{"class":129},[123,154157,154158],{"class":143},"\"====== 学生管理系统 ======\"",[123,154160,288],{"class":129},[123,154162,154163,154165,154167,154170],{"class":125,"line":2080},[123,154164,33714],{"class":164},[123,154166,1315],{"class":129},[123,154168,154169],{"class":143},"\"1. 添加学生\"",[123,154171,288],{"class":129},[123,154173,154174,154176,154178,154181],{"class":125,"line":2097},[123,154175,33714],{"class":164},[123,154177,1315],{"class":129},[123,154179,154180],{"class":143},"\"2. 删除学生\"",[123,154182,288],{"class":129},[123,154184,154185,154187,154189,154192],{"class":125,"line":2114},[123,154186,33714],{"class":164},[123,154188,1315],{"class":129},[123,154190,154191],{"class":143},"\"3. 修改学生\"",[123,154193,288],{"class":129},[123,154195,154196,154198,154200,154203],{"class":125,"line":2125},[123,154197,33714],{"class":164},[123,154199,1315],{"class":129},[123,154201,154202],{"class":143},"\"4. 查询学生\"",[123,154204,288],{"class":129},[123,154206,154207,154209,154211,154214],{"class":125,"line":2130},[123,154208,33714],{"class":164},[123,154210,1315],{"class":129},[123,154212,154213],{"class":143},"\"5. 显示所有学生\"",[123,154215,288],{"class":129},[123,154217,154218,154220,154222,154225],{"class":125,"line":5033},[123,154219,33714],{"class":164},[123,154221,1315],{"class":129},[123,154223,154224],{"class":143},"\"0. 退出系统\"",[123,154226,288],{"class":129},[123,154228,154229],{"class":125,"line":5041},[123,154230,232],{"emptyLinePlaceholder":231},[123,154232,154233],{"class":125,"line":5046},[123,154234,232],{"emptyLinePlaceholder":231},[123,154236,154237,154239,154242],{"class":125,"line":5052},[123,154238,34359],{"class":133},[123,154240,154241],{"class":337}," find_student",[123,154243,154244],{"class":129},"(students, student_id):\n",[123,154246,154247,154249,154252,154254],{"class":125,"line":5058},[123,154248,5641],{"class":133},[123,154250,154251],{"class":129}," student ",[123,154253,1405],{"class":133},[123,154255,154256],{"class":129}," students:\n",[123,154258,154259,154261,154264,154266,154268,154270],{"class":125,"line":5063},[123,154260,4940],{"class":133},[123,154262,154263],{"class":129}," student[",[123,154265,153561],{"class":143},[123,154267,1941],{"class":129},[123,154269,5391],{"class":133},[123,154271,154272],{"class":129}," student_id:\n",[123,154274,154275,154277],{"class":125,"line":10380},[123,154276,18160],{"class":133},[123,154278,154279],{"class":129}," student\n",[123,154281,154282,154284],{"class":125,"line":10404},[123,154283,6529],{"class":133},[123,154285,154286],{"class":164}," None\n",[123,154288,154289],{"class":125,"line":10409},[123,154290,232],{"emptyLinePlaceholder":231},[123,154292,154293],{"class":125,"line":10415},[123,154294,232],{"emptyLinePlaceholder":231},[123,154296,154297,154299,154302],{"class":125,"line":10442},[123,154298,34359],{"class":133},[123,154300,154301],{"class":337}," input_int",[123,154303,154304],{"class":129},"(prompt):\n",[123,154306,154307,154309,154311],{"class":125,"line":10447},[123,154308,4695],{"class":133},[123,154310,97686],{"class":164},[123,154312,1344],{"class":129},[123,154314,154315,154318],{"class":125,"line":10453},[123,154316,154317],{"class":133},"        try",[123,154319,1344],{"class":129},[123,154321,154322,154324,154326,154328,154330],{"class":125,"line":10465},[123,154323,18160],{"class":133},[123,154325,4826],{"class":164},[123,154327,1315],{"class":129},[123,154329,56224],{"class":164},[123,154331,154332],{"class":129},"(prompt))\n",[123,154334,154335,154338,154341],{"class":125,"line":10477},[123,154336,154337],{"class":133},"        except",[123,154339,154340],{"class":164}," ValueError",[123,154342,1344],{"class":129},[123,154344,154345,154347,154349,154352],{"class":125,"line":10489},[123,154346,37060],{"class":164},[123,154348,1315],{"class":129},[123,154350,154351],{"class":143},"\"请输入整数\"",[123,154353,288],{"class":129},[123,154355,154356],{"class":125,"line":12148},[123,154357,232],{"emptyLinePlaceholder":231},[123,154359,154360],{"class":125,"line":12173},[123,154361,232],{"emptyLinePlaceholder":231},[123,154363,154364,154366,154369],{"class":125,"line":12196},[123,154365,34359],{"class":133},[123,154367,154368],{"class":337}," input_float",[123,154370,154304],{"class":129},[123,154372,154373,154375,154377],{"class":125,"line":12220},[123,154374,4695],{"class":133},[123,154376,97686],{"class":164},[123,154378,1344],{"class":129},[123,154380,154381,154383],{"class":125,"line":12225},[123,154382,154317],{"class":133},[123,154384,1344],{"class":129},[123,154386,154387,154389,154391,154393,154395],{"class":125,"line":12230},[123,154388,18160],{"class":133},[123,154390,112186],{"class":164},[123,154392,1315],{"class":129},[123,154394,56224],{"class":164},[123,154396,154332],{"class":129},[123,154398,154399,154401,154403],{"class":125,"line":12235},[123,154400,154337],{"class":133},[123,154402,154340],{"class":164},[123,154404,1344],{"class":129},[123,154406,154407,154409,154411,154414],{"class":125,"line":12244},[123,154408,37060],{"class":164},[123,154410,1315],{"class":129},[123,154412,154413],{"class":143},"\"请输入数字\"",[123,154415,288],{"class":129},[123,154417,154418],{"class":125,"line":12249},[123,154419,232],{"emptyLinePlaceholder":231},[123,154421,154422],{"class":125,"line":12255},[123,154423,232],{"emptyLinePlaceholder":231},[123,154425,154426,154428,154431],{"class":125,"line":12276},[123,154427,34359],{"class":133},[123,154429,154430],{"class":337}," add_student",[123,154432,154075],{"class":129},[123,154434,154435,154438,154440,154442,154444,154447],{"class":125,"line":12282},[123,154436,154437],{"class":129},"    student_id ",[123,154439,134],{"class":133},[123,154441,63007],{"class":164},[123,154443,1315],{"class":129},[123,154445,154446],{"class":143},"\"请输入学号:\"",[123,154448,288],{"class":129},[123,154450,154451],{"class":125,"line":12296},[123,154452,232],{"emptyLinePlaceholder":231},[123,154454,154455,154457],{"class":125,"line":12302},[123,154456,1711],{"class":133},[123,154458,154459],{"class":129}," find_student(students, student_id):\n",[123,154461,154462,154464,154466,154469],{"class":125,"line":12329},[123,154463,34863],{"class":164},[123,154465,1315],{"class":129},[123,154467,154468],{"class":143},"\"学号已存在\"",[123,154470,288],{"class":129},[123,154472,154473],{"class":125,"line":12338},[123,154474,154475],{"class":133},"        return\n",[123,154477,154478],{"class":125,"line":12344},[123,154479,232],{"emptyLinePlaceholder":231},[123,154481,154482,154485,154487,154489,154491,154494],{"class":125,"line":12352},[123,154483,154484],{"class":129},"    name ",[123,154486,134],{"class":133},[123,154488,63007],{"class":164},[123,154490,1315],{"class":129},[123,154492,154493],{"class":143},"\"请输入姓名:\"",[123,154495,288],{"class":129},[123,154497,154498,154501,154503,154506,154509],{"class":125,"line":12357},[123,154499,154500],{"class":129},"    age ",[123,154502,134],{"class":133},[123,154504,154505],{"class":129}," input_int(",[123,154507,154508],{"class":143},"\"请输入年龄:\"",[123,154510,288],{"class":129},[123,154512,154513,154516,154518,154521,154524],{"class":125,"line":19032},[123,154514,154515],{"class":129},"    score ",[123,154517,134],{"class":133},[123,154519,154520],{"class":129}," input_float(",[123,154522,154523],{"class":143},"\"请输入成绩:\"",[123,154525,288],{"class":129},[123,154527,154528],{"class":125,"line":19038},[123,154529,232],{"emptyLinePlaceholder":231},[123,154531,154532],{"class":125,"line":19061},[123,154533,154534],{"class":129},"    students.append({\n",[123,154536,154537,154540],{"class":125,"line":19067},[123,154538,154539],{"class":143},"        \"student_id\"",[123,154541,154542],{"class":129},": student_id,\n",[123,154544,154545,154548],{"class":125,"line":19090},[123,154546,154547],{"class":143},"        \"name\"",[123,154549,154550],{"class":129},": name,\n",[123,154552,154553,154556],{"class":125,"line":19104},[123,154554,154555],{"class":143},"        \"age\"",[123,154557,154558],{"class":129},": age,\n",[123,154560,154561,154564],{"class":125,"line":19124},[123,154562,154563],{"class":143},"        \"score\"",[123,154565,154566],{"class":129},": score,\n",[123,154568,154569],{"class":125,"line":19130},[123,154570,35872],{"class":129},[123,154572,154573],{"class":125,"line":19141},[123,154574,154575],{"class":129},"    save_students(students)\n",[123,154577,154578,154580,154582,154585],{"class":125,"line":19164},[123,154579,33714],{"class":164},[123,154581,1315],{"class":129},[123,154583,154584],{"class":143},"\"添加成功\"",[123,154586,288],{"class":129},[123,154588,154589],{"class":125,"line":19186},[123,154590,232],{"emptyLinePlaceholder":231},[123,154592,154593],{"class":125,"line":19191},[123,154594,232],{"emptyLinePlaceholder":231},[123,154596,154597,154599,154602],{"class":125,"line":19197},[123,154598,34359],{"class":133},[123,154600,154601],{"class":337}," delete_student",[123,154603,154075],{"class":129},[123,154605,154606,154608,154610,154612,154614,154617],{"class":125,"line":19211},[123,154607,154437],{"class":129},[123,154609,134],{"class":133},[123,154611,63007],{"class":164},[123,154613,1315],{"class":129},[123,154615,154616],{"class":143},"\"请输入要删除的学号:\"",[123,154618,288],{"class":129},[123,154620,154621,154624,154626],{"class":125,"line":19224},[123,154622,154623],{"class":129},"    student ",[123,154625,134],{"class":133},[123,154627,154628],{"class":129}," find_student(students, student_id)\n",[123,154630,154631],{"class":125,"line":19229},[123,154632,232],{"emptyLinePlaceholder":231},[123,154634,154635,154637,154639,154641,154643],{"class":125,"line":19243},[123,154636,1711],{"class":133},[123,154638,154251],{"class":129},[123,154640,41336],{"class":133},[123,154642,41341],{"class":164},[123,154644,1344],{"class":129},[123,154646,154647,154649,154651,154654],{"class":125,"line":19248},[123,154648,34863],{"class":164},[123,154650,1315],{"class":129},[123,154652,154653],{"class":143},"\"学生不存在\"",[123,154655,288],{"class":129},[123,154657,154658],{"class":125,"line":19254},[123,154659,154475],{"class":133},[123,154661,154662],{"class":125,"line":19259},[123,154663,232],{"emptyLinePlaceholder":231},[123,154665,154666],{"class":125,"line":19273},[123,154667,154668],{"class":129},"    students.remove(student)\n",[123,154670,154671],{"class":125,"line":19278},[123,154672,154575],{"class":129},[123,154674,154675,154677,154679,154682],{"class":125,"line":19283},[123,154676,33714],{"class":164},[123,154678,1315],{"class":129},[123,154680,154681],{"class":143},"\"删除成功\"",[123,154683,288],{"class":129},[123,154685,154686],{"class":125,"line":19297},[123,154687,232],{"emptyLinePlaceholder":231},[123,154689,154690],{"class":125,"line":19309},[123,154691,232],{"emptyLinePlaceholder":231},[123,154693,154694,154696,154699],{"class":125,"line":19314},[123,154695,34359],{"class":133},[123,154697,154698],{"class":337}," update_student",[123,154700,154075],{"class":129},[123,154702,154703,154705,154707,154709,154711,154714],{"class":125,"line":19327},[123,154704,154437],{"class":129},[123,154706,134],{"class":133},[123,154708,63007],{"class":164},[123,154710,1315],{"class":129},[123,154712,154713],{"class":143},"\"请输入要修改的学号:\"",[123,154715,288],{"class":129},[123,154717,154718,154720,154722],{"class":125,"line":19332},[123,154719,154623],{"class":129},[123,154721,134],{"class":133},[123,154723,154628],{"class":129},[123,154725,154726],{"class":125,"line":19337},[123,154727,232],{"emptyLinePlaceholder":231},[123,154729,154730,154732,154734,154736,154738],{"class":125,"line":19342},[123,154731,1711],{"class":133},[123,154733,154251],{"class":129},[123,154735,41336],{"class":133},[123,154737,41341],{"class":164},[123,154739,1344],{"class":129},[123,154741,154742,154744,154746,154748],{"class":125,"line":19355},[123,154743,34863],{"class":164},[123,154745,1315],{"class":129},[123,154747,154653],{"class":143},[123,154749,288],{"class":129},[123,154751,154752],{"class":125,"line":19360},[123,154753,154475],{"class":133},[123,154755,154756],{"class":125,"line":35045},[123,154757,232],{"emptyLinePlaceholder":231},[123,154759,154760,154762,154764,154766,154768,154771],{"class":125,"line":35051},[123,154761,154484],{"class":129},[123,154763,134],{"class":133},[123,154765,63007],{"class":164},[123,154767,1315],{"class":129},[123,154769,154770],{"class":143},"\"请输入新姓名:\"",[123,154772,288],{"class":129},[123,154774,154775,154777,154779,154781,154784],{"class":125,"line":35057},[123,154776,154500],{"class":129},[123,154778,134],{"class":133},[123,154780,154505],{"class":129},[123,154782,154783],{"class":143},"\"请输入新年龄:\"",[123,154785,288],{"class":129},[123,154787,154788,154790,154792,154794,154797],{"class":125,"line":35063},[123,154789,154515],{"class":129},[123,154791,134],{"class":133},[123,154793,154520],{"class":129},[123,154795,154796],{"class":143},"\"请输入新成绩:\"",[123,154798,288],{"class":129},[123,154800,154801],{"class":125,"line":35069},[123,154802,232],{"emptyLinePlaceholder":231},[123,154804,154805,154808,154810,154812,154814],{"class":125,"line":35080},[123,154806,154807],{"class":129},"    student[",[123,154809,244],{"class":143},[123,154811,1941],{"class":129},[123,154813,134],{"class":133},[123,154815,151909],{"class":129},[123,154817,154818,154820,154822,154824,154826],{"class":125,"line":35086},[123,154819,154807],{"class":129},[123,154821,71525],{"class":143},[123,154823,1941],{"class":129},[123,154825,134],{"class":133},[123,154827,151921],{"class":129},[123,154829,154830,154832,154834,154836,154838],{"class":125,"line":35106},[123,154831,154807],{"class":129},[123,154833,153586],{"class":143},[123,154835,1941],{"class":129},[123,154837,134],{"class":133},[123,154839,4044],{"class":129},[123,154841,154842],{"class":125,"line":35112},[123,154843,232],{"emptyLinePlaceholder":231},[123,154845,154846],{"class":125,"line":35123},[123,154847,154575],{"class":129},[123,154849,154850,154852,154854,154857],{"class":125,"line":35129},[123,154851,33714],{"class":164},[123,154853,1315],{"class":129},[123,154855,154856],{"class":143},"\"修改成功\"",[123,154858,288],{"class":129},[123,154860,154861],{"class":125,"line":35135},[123,154862,232],{"emptyLinePlaceholder":231},[123,154864,154865],{"class":125,"line":35141},[123,154866,232],{"emptyLinePlaceholder":231},[123,154868,154869,154871,154874],{"class":125,"line":35147},[123,154870,34359],{"class":133},[123,154872,154873],{"class":337}," query_student",[123,154875,154075],{"class":129},[123,154877,154878,154880,154882,154884,154886,154889],{"class":125,"line":35153},[123,154879,154437],{"class":129},[123,154881,134],{"class":133},[123,154883,63007],{"class":164},[123,154885,1315],{"class":129},[123,154887,154888],{"class":143},"\"请输入要查询的学号:\"",[123,154890,288],{"class":129},[123,154892,154893,154895,154897],{"class":125,"line":35159},[123,154894,154623],{"class":129},[123,154896,134],{"class":133},[123,154898,154628],{"class":129},[123,154900,154901],{"class":125,"line":35165},[123,154902,232],{"emptyLinePlaceholder":231},[123,154904,154905,154907,154909,154911,154913],{"class":125,"line":35185},[123,154906,1711],{"class":133},[123,154908,154251],{"class":129},[123,154910,41336],{"class":133},[123,154912,41341],{"class":164},[123,154914,1344],{"class":129},[123,154916,154917,154919,154921,154923],{"class":125,"line":35191},[123,154918,34863],{"class":164},[123,154920,1315],{"class":129},[123,154922,154653],{"class":143},[123,154924,288],{"class":129},[123,154926,154927],{"class":125,"line":35207},[123,154928,154475],{"class":133},[123,154930,154931],{"class":125,"line":35213},[123,154932,232],{"emptyLinePlaceholder":231},[123,154934,154935],{"class":125,"line":35227},[123,154936,154937],{"class":129},"    print_student(student)\n",[123,154939,154940],{"class":125,"line":35233},[123,154941,232],{"emptyLinePlaceholder":231},[123,154943,154944],{"class":125,"line":35248},[123,154945,232],{"emptyLinePlaceholder":231},[123,154947,154948,154950,154953],{"class":125,"line":35254},[123,154949,34359],{"class":133},[123,154951,154952],{"class":337}," print_student",[123,154954,154955],{"class":129},"(student):\n",[123,154957,154958,154960],{"class":125,"line":35263},[123,154959,33714],{"class":164},[123,154961,153553],{"class":129},[123,154963,154964,154967,154969,154971,154974,154977,154979,154982],{"class":125,"line":35269},[123,154965,154966],{"class":133},"        f",[123,154968,2859],{"class":143},[123,154970,3495],{"class":164},[123,154972,154973],{"class":129},"student[",[123,154975,154976],{"class":143},"'student_id'",[123,154978,3539],{"class":129},[123,154980,154981],{"class":164},"}\\t",[123,154983,27555],{"class":143},[123,154985,154986,154988,154990,154992,154994,154997,154999,155001],{"class":125,"line":35278},[123,154987,154966],{"class":133},[123,154989,2859],{"class":143},[123,154991,3495],{"class":164},[123,154993,154973],{"class":129},[123,154995,154996],{"class":143},"'name'",[123,154998,3539],{"class":129},[123,155000,154981],{"class":164},[123,155002,27555],{"class":143},[123,155004,155005,155007,155009,155011,155013,155016,155018,155020],{"class":125,"line":35284},[123,155006,154966],{"class":133},[123,155008,2859],{"class":143},[123,155010,3495],{"class":164},[123,155012,154973],{"class":129},[123,155014,155015],{"class":143},"'age'",[123,155017,3539],{"class":129},[123,155019,154981],{"class":164},[123,155021,27555],{"class":143},[123,155023,155024,155026,155028,155030,155032,155035,155037,155039],{"class":125,"line":35290},[123,155025,154966],{"class":133},[123,155027,2859],{"class":143},[123,155029,3495],{"class":164},[123,155031,154973],{"class":129},[123,155033,155034],{"class":143},"'score'",[123,155036,3539],{"class":129},[123,155038,3545],{"class":164},[123,155040,27555],{"class":143},[123,155042,155043],{"class":125,"line":35299},[123,155044,155045],{"class":129},"    )\n",[123,155047,155048],{"class":125,"line":35305},[123,155049,232],{"emptyLinePlaceholder":231},[123,155051,155052],{"class":125,"line":35316},[123,155053,232],{"emptyLinePlaceholder":231},[123,155055,155056,155058,155061],{"class":125,"line":35322},[123,155057,34359],{"class":133},[123,155059,155060],{"class":337}," show_all_students",[123,155062,154075],{"class":129},[123,155064,155065,155067,155069],{"class":125,"line":35341},[123,155066,1711],{"class":133},[123,155068,1714],{"class":133},[123,155070,154256],{"class":129},[123,155072,155073,155075,155077,155080],{"class":125,"line":35347},[123,155074,34863],{"class":164},[123,155076,1315],{"class":129},[123,155078,155079],{"class":143},"\"暂无学生\"",[123,155081,288],{"class":129},[123,155083,155084],{"class":125,"line":35358},[123,155085,154475],{"class":133},[123,155087,155088],{"class":125,"line":35364},[123,155089,232],{"emptyLinePlaceholder":231},[123,155091,155092,155094,155096,155099,155101,155104,155106,155109,155111,155114],{"class":125,"line":35384},[123,155093,33714],{"class":164},[123,155095,1315],{"class":129},[123,155097,155098],{"class":143},"\"学号",[123,155100,3700],{"class":164},[123,155102,155103],{"class":143},"姓名",[123,155105,3700],{"class":164},[123,155107,155108],{"class":143},"年龄",[123,155110,3700],{"class":164},[123,155112,155113],{"class":143},"成绩\"",[123,155115,288],{"class":129},[123,155117,155118,155120,155122,155124],{"class":125,"line":35400},[123,155119,5641],{"class":133},[123,155121,154251],{"class":129},[123,155123,1405],{"class":133},[123,155125,154256],{"class":129},[123,155127,155128],{"class":125,"line":35406},[123,155129,155130],{"class":129},"        print_student(student)\n",[123,155132,155133],{"class":125,"line":35420},[123,155134,232],{"emptyLinePlaceholder":231},[123,155136,155137],{"class":125,"line":35426},[123,155138,232],{"emptyLinePlaceholder":231},[123,155140,155141,155143,155145],{"class":125,"line":35432},[123,155142,34359],{"class":133},[123,155144,4417],{"class":337},[123,155146,34365],{"class":129},[123,155148,155149,155152,155154],{"class":125,"line":35443},[123,155150,155151],{"class":129},"    students ",[123,155153,134],{"class":133},[123,155155,155156],{"class":129}," load_students()\n",[123,155158,155159],{"class":125,"line":35449},[123,155160,232],{"emptyLinePlaceholder":231},[123,155162,155163,155165,155167],{"class":125,"line":35455},[123,155164,4695],{"class":133},[123,155166,97686],{"class":164},[123,155168,1344],{"class":129},[123,155170,155171],{"class":125,"line":35465},[123,155172,155173],{"class":129},"        show_menu()\n",[123,155175,155176,155179,155181,155183,155185,155188],{"class":125,"line":35471},[123,155177,155178],{"class":129},"        choice ",[123,155180,134],{"class":133},[123,155182,63007],{"class":164},[123,155184,1315],{"class":129},[123,155186,155187],{"class":143},"\"请输入操作:\"",[123,155189,288],{"class":129},[123,155191,155192],{"class":125,"line":35482},[123,155193,232],{"emptyLinePlaceholder":231},[123,155195,155196,155198,155201,155203,155206],{"class":125,"line":35488},[123,155197,4940],{"class":133},[123,155199,155200],{"class":129}," choice ",[123,155202,5391],{"class":133},[123,155204,155205],{"class":143}," \"1\"",[123,155207,1344],{"class":129},[123,155209,155210],{"class":125,"line":35498},[123,155211,155212],{"class":129},"            add_student(students)\n",[123,155214,155215,155218,155220,155222,155225],{"class":125,"line":35503},[123,155216,155217],{"class":133},"        elif",[123,155219,155200],{"class":129},[123,155221,5391],{"class":133},[123,155223,155224],{"class":143}," \"2\"",[123,155226,1344],{"class":129},[123,155228,155229],{"class":125,"line":35509},[123,155230,155231],{"class":129},"            delete_student(students)\n",[123,155233,155234,155236,155238,155240,155243],{"class":125,"line":35558},[123,155235,155217],{"class":133},[123,155237,155200],{"class":129},[123,155239,5391],{"class":133},[123,155241,155242],{"class":143}," \"3\"",[123,155244,1344],{"class":129},[123,155246,155247],{"class":125,"line":35605},[123,155248,155249],{"class":129},"            update_student(students)\n",[123,155251,155252,155254,155256,155258,155261],{"class":125,"line":35610},[123,155253,155217],{"class":133},[123,155255,155200],{"class":129},[123,155257,5391],{"class":133},[123,155259,155260],{"class":143}," \"4\"",[123,155262,1344],{"class":129},[123,155264,155265],{"class":125,"line":35616},[123,155266,155267],{"class":129},"            query_student(students)\n",[123,155269,155270,155272,155274,155276,155279],{"class":125,"line":35635},[123,155271,155217],{"class":133},[123,155273,155200],{"class":129},[123,155275,5391],{"class":133},[123,155277,155278],{"class":143}," \"5\"",[123,155280,1344],{"class":129},[123,155282,155283],{"class":125,"line":35641},[123,155284,155285],{"class":129},"            show_all_students(students)\n",[123,155287,155288,155290,155292,155294,155297],{"class":125,"line":35660},[123,155289,155217],{"class":133},[123,155291,155200],{"class":129},[123,155293,5391],{"class":133},[123,155295,155296],{"class":143}," \"0\"",[123,155298,1344],{"class":129},[123,155300,155301,155303,155305,155308],{"class":125,"line":35666},[123,155302,37060],{"class":164},[123,155304,1315],{"class":129},[123,155306,155307],{"class":143},"\"退出系统\"",[123,155309,288],{"class":129},[123,155311,155312],{"class":125,"line":35672},[123,155313,117486],{"class":133},[123,155315,155316,155318],{"class":125,"line":35682},[123,155317,4977],{"class":133},[123,155319,1344],{"class":129},[123,155321,155322,155324,155326,155329],{"class":125,"line":35687},[123,155323,37060],{"class":164},[123,155325,1315],{"class":129},[123,155327,155328],{"class":143},"\"输入错误\"",[123,155330,288],{"class":129},[123,155332,155333],{"class":125,"line":35693},[123,155334,232],{"emptyLinePlaceholder":231},[123,155336,155337],{"class":125,"line":35709},[123,155338,232],{"emptyLinePlaceholder":231},[123,155340,155341,155343,155345,155347,155349],{"class":125,"line":35754},[123,155342,3998],{"class":133},[123,155344,33635],{"class":164},[123,155346,103951],{"class":133},[123,155348,103954],{"class":143},[123,155350,1344],{"class":129},[123,155352,155353],{"class":125,"line":35760},[123,155354,103961],{"class":129},[19,155356,155357],{},"这个项目串联了：",[26,155359,155360,155363,155366,155369,155372,155374],{},[29,155361,155362],{},"菜单循环。",[29,155364,155365],{},"函数封装。",[29,155367,155368],{},"列表字典。",[29,155370,155371],{},"JSON 读写。",[29,155373,153841],{},[29,155375,155376,2494],{},[120,155377,155378],{},"if __name__ == \"__main__\"",[14,155380,155382],{"id":155381},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155384,155385],{},"可以进一步拆成两个类：",[26,155387,155388,155393],{},[29,155389,155390,155392],{},[120,155391,151682],{},"：表示单个学生。",[29,155394,155395,155397],{},[120,155396,153708],{},"：负责学生增删改查和文件保存。",[19,155399,155400],{},"示意代码：",[113,155402,155404],{"className":115,"code":155403,"language":117,"meta":118,"style":118},"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",[120,155405,155406,155416,155420,155424,155428,155436,155443,155449,155455,155461,155465,155473,155479,155489,155499,155509,155519,155523,155527,155533,155541,155549,155557,155565,155573,155581],{"__ignoreMap":118},[123,155407,155408,155410,155412,155414],{"class":125,"line":126},[123,155409,391],{"class":133},[123,155411,153266],{"class":129},[123,155413,223],{"class":133},[123,155415,153271],{"class":129},[123,155417,155418],{"class":125,"line":140},[123,155419,232],{"emptyLinePlaceholder":231},[123,155421,155422],{"class":125,"line":156},[123,155423,232],{"emptyLinePlaceholder":231},[123,155425,155426],{"class":125,"line":168},[123,155427,153284],{"class":337},[123,155429,155430,155432,155434],{"class":125,"line":268},[123,155431,17124],{"class":133},[123,155433,10330],{"class":337},[123,155435,1344],{"class":129},[123,155437,155438,155441],{"class":125,"line":291},[123,155439,155440],{"class":129},"    student_id: ",[123,155442,153300],{"class":164},[123,155444,155445,155447],{"class":125,"line":300},[123,155446,153297],{"class":129},[123,155448,153300],{"class":164},[123,155450,155451,155453],{"class":125,"line":305},[123,155452,153305],{"class":129},[123,155454,153308],{"class":164},[123,155456,155457,155459],{"class":125,"line":316},[123,155458,153313],{"class":129},[123,155460,153316],{"class":164},[123,155462,155463],{"class":125,"line":673},[123,155464,232],{"emptyLinePlaceholder":231},[123,155466,155467,155469,155471],{"class":125,"line":692},[123,155468,33216],{"class":133},[123,155470,153464],{"class":337},[123,155472,33222],{"class":129},[123,155474,155475,155477],{"class":125,"line":713},[123,155476,17182],{"class":133},[123,155478,137],{"class":129},[123,155480,155481,155483,155485,155487],{"class":125,"line":718},[123,155482,153477],{"class":143},[123,155484,147],{"class":129},[123,155486,33238],{"class":164},[123,155488,153484],{"class":129},[123,155490,155491,155493,155495,155497],{"class":125,"line":1138},[123,155492,153489],{"class":143},[123,155494,147],{"class":129},[123,155496,33238],{"class":164},[123,155498,153496],{"class":129},[123,155500,155501,155503,155505,155507],{"class":125,"line":1429},[123,155502,153501],{"class":143},[123,155504,147],{"class":129},[123,155506,33238],{"class":164},[123,155508,153508],{"class":129},[123,155510,155511,155513,155515,155517],{"class":125,"line":1439},[123,155512,153513],{"class":143},[123,155514,147],{"class":129},[123,155516,33238],{"class":164},[123,155518,153520],{"class":129},[123,155520,155521],{"class":125,"line":1444},[123,155522,4972],{"class":129},[123,155524,155525],{"class":125,"line":1453},[123,155526,232],{"emptyLinePlaceholder":231},[123,155528,155529,155531],{"class":125,"line":1458},[123,155530,153128],{"class":337},[123,155532,153131],{"class":164},[123,155534,155535,155537,155539],{"class":125,"line":1476},[123,155536,33216],{"class":133},[123,155538,153541],{"class":337},[123,155540,153544],{"class":129},[123,155542,155543,155545,155547],{"class":125,"line":1494},[123,155544,17182],{"class":133},[123,155546,153148],{"class":164},[123,155548,153553],{"class":129},[123,155550,155551,155553,155555],{"class":125,"line":1499},[123,155552,153558],{"class":129},[123,155554,153561],{"class":143},[123,155556,860],{"class":129},[123,155558,155559,155561,155563],{"class":125,"line":1517},[123,155560,153558],{"class":129},[123,155562,244],{"class":143},[123,155564,860],{"class":129},[123,155566,155567,155569,155571],{"class":125,"line":1534},[123,155568,153558],{"class":129},[123,155570,71525],{"class":143},[123,155572,860],{"class":129},[123,155574,155575,155577,155579],{"class":125,"line":1539},[123,155576,153558],{"class":129},[123,155578,153586],{"class":143},[123,155580,860],{"class":129},[123,155582,155583],{"class":125,"line":2080},[123,155584,40535],{"class":129},[19,155586,155587],{},"管理器示意：",[113,155589,155591],{"className":115,"code":155590,"language":117,"meta":118,"style":118},"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",[120,155592,155593,155602,155610,155621,155625,155635,155648,155659,155666,155672,155676,155685,155694,155700,155707],{"__ignoreMap":118},[123,155594,155595,155597,155600],{"class":125,"line":126},[123,155596,17124],{"class":133},[123,155598,155599],{"class":337}," StudentManager",[123,155601,1344],{"class":129},[123,155603,155604,155606,155608],{"class":125,"line":140},[123,155605,33216],{"class":133},[123,155607,33219],{"class":164},[123,155609,33222],{"class":129},[123,155611,155612,155614,155617,155619],{"class":125,"line":156},[123,155613,33260],{"class":164},[123,155615,155616],{"class":129},".students ",[123,155618,134],{"class":133},[123,155620,1372],{"class":129},[123,155622,155623],{"class":125,"line":168},[123,155624,232],{"emptyLinePlaceholder":231},[123,155626,155627,155629,155632],{"class":125,"line":268},[123,155628,33216],{"class":133},[123,155630,155631],{"class":337}," find_by_id",[123,155633,155634],{"class":129},"(self, student_id):\n",[123,155636,155637,155639,155641,155643,155645],{"class":125,"line":291},[123,155638,5843],{"class":133},[123,155640,154251],{"class":129},[123,155642,1405],{"class":133},[123,155644,41282],{"class":164},[123,155646,155647],{"class":129},".students:\n",[123,155649,155650,155652,155655,155657],{"class":125,"line":300},[123,155651,7079],{"class":133},[123,155653,155654],{"class":129}," student.student_id ",[123,155656,5391],{"class":133},[123,155658,154272],{"class":129},[123,155660,155661,155664],{"class":125,"line":305},[123,155662,155663],{"class":133},"                return",[123,155665,154279],{"class":129},[123,155667,155668,155670],{"class":125,"line":316},[123,155669,17182],{"class":133},[123,155671,154286],{"class":164},[123,155673,155674],{"class":125,"line":673},[123,155675,232],{"emptyLinePlaceholder":231},[123,155677,155678,155680,155682],{"class":125,"line":692},[123,155679,33216],{"class":133},[123,155681,7643],{"class":337},[123,155683,155684],{"class":129},"(self, student):\n",[123,155686,155687,155689,155691],{"class":125,"line":713},[123,155688,4940],{"class":133},[123,155690,41282],{"class":164},[123,155692,155693],{"class":129},".find_by_id(student.student_id):\n",[123,155695,155696,155698],{"class":125,"line":718},[123,155697,18160],{"class":133},[123,155699,128195],{"class":164},[123,155701,155702,155704],{"class":125,"line":1138},[123,155703,33260],{"class":164},[123,155705,155706],{"class":129},".students.append(student)\n",[123,155708,155709,155711],{"class":125,"line":1429},[123,155710,17182],{"class":133},[123,155712,155713],{"class":164}," True\n",[19,155715,155716],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155718,155720],{"id":155719},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[2587,155722,155724],{"id":155723},"_1251-数据结构","12.5.1 数据结构",[113,155726,155728],{"className":115,"code":155727,"language":117,"meta":118,"style":118},"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",[120,155729,155730,155738,155769,155799,155828,155857],{"__ignoreMap":118},[123,155731,155732,155734,155736],{"class":125,"line":126},[123,155733,1673],{"class":129},[123,155735,134],{"class":133},[123,155737,1587],{"class":129},[123,155739,155740,155742,155744,155746,155748,155750,155753,155755,155758,155760,155762,155764,155767],{"class":125,"line":140},[123,155741,1592],{"class":129},[123,155743,1177],{"class":143},[123,155745,147],{"class":129},[123,155747,1819],{"class":143},[123,155749,251],{"class":129},[123,155751,155752],{"class":143},"\"category\"",[123,155754,147],{"class":129},[123,155756,155757],{"class":143},"\"手机\"",[123,155759,251],{"class":129},[123,155761,1824],{"class":143},[123,155763,147],{"class":129},[123,155765,155766],{"class":164},"12000",[123,155768,1202],{"class":129},[123,155770,155771,155773,155775,155777,155779,155781,155783,155785,155788,155790,155792,155794,155797],{"class":125,"line":156},[123,155772,1592],{"class":129},[123,155774,1177],{"class":143},[123,155776,147],{"class":129},[123,155778,1819],{"class":143},[123,155780,251],{"class":129},[123,155782,155752],{"class":143},[123,155784,147],{"class":129},[123,155786,155787],{"class":143},"\"电脑\"",[123,155789,251],{"class":129},[123,155791,1824],{"class":143},[123,155793,147],{"class":129},[123,155795,155796],{"class":164},"18000",[123,155798,1202],{"class":129},[123,155800,155801,155803,155805,155807,155809,155811,155813,155815,155817,155819,155821,155823,155826],{"class":125,"line":168},[123,155802,1592],{"class":129},[123,155804,1177],{"class":143},[123,155806,147],{"class":129},[123,155808,1842],{"class":143},[123,155810,251],{"class":129},[123,155812,155752],{"class":143},[123,155814,147],{"class":129},[123,155816,155757],{"class":143},[123,155818,251],{"class":129},[123,155820,1824],{"class":143},[123,155822,147],{"class":129},[123,155824,155825],{"class":164},"15000",[123,155827,1202],{"class":129},[123,155829,155830,155832,155834,155836,155838,155840,155842,155844,155846,155848,155850,155852,155855],{"class":125,"line":268},[123,155831,1592],{"class":129},[123,155833,1177],{"class":143},[123,155835,147],{"class":129},[123,155837,1842],{"class":143},[123,155839,251],{"class":129},[123,155841,155752],{"class":143},[123,155843,147],{"class":129},[123,155845,155787],{"class":143},[123,155847,251],{"class":129},[123,155849,1824],{"class":143},[123,155851,147],{"class":129},[123,155853,155854],{"class":164},"16000",[123,155856,1202],{"class":129},[123,155858,155859],{"class":125,"line":291},[123,155860,998],{"class":129},[2587,155862,155864],{"id":155863},"_1252-按日期统计","12.5.2 按日期统计",[113,155866,155868],{"className":115,"code":155867,"language":117,"meta":118,"style":118},"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",[120,155869,155870,155879,155883,155894,155908,155921,155940,155944],{"__ignoreMap":118},[123,155871,155872,155875,155877],{"class":125,"line":126},[123,155873,155874],{"class":129},"daily_total ",[123,155876,134],{"class":133},[123,155878,90263],{"class":129},[123,155880,155881],{"class":125,"line":140},[123,155882,232],{"emptyLinePlaceholder":231},[123,155884,155885,155887,155889,155891],{"class":125,"line":156},[123,155886,1399],{"class":133},[123,155888,1402],{"class":129},[123,155890,1405],{"class":133},[123,155892,155893],{"class":129}," sales:\n",[123,155895,155896,155899,155901,155904,155906],{"class":125,"line":168},[123,155897,155898],{"class":129},"    date ",[123,155900,134],{"class":133},[123,155902,155903],{"class":129}," item[",[123,155905,1177],{"class":143},[123,155907,998],{"class":129},[123,155909,155910,155913,155915,155917,155919],{"class":125,"line":268},[123,155911,155912],{"class":129},"    amount ",[123,155914,134],{"class":133},[123,155916,155903],{"class":129},[123,155918,1824],{"class":143},[123,155920,998],{"class":129},[123,155922,155923,155926,155928,155931,155933,155935,155937],{"class":125,"line":291},[123,155924,155925],{"class":129},"    daily_total[date] ",[123,155927,134],{"class":133},[123,155929,155930],{"class":129}," daily_total.get(date, ",[123,155932,2799],{"class":164},[123,155934,1336],{"class":129},[123,155936,3086],{"class":133},[123,155938,155939],{"class":129}," amount\n",[123,155941,155942],{"class":125,"line":300},[123,155943,232],{"emptyLinePlaceholder":231},[123,155945,155946,155948],{"class":125,"line":305},[123,155947,294],{"class":164},[123,155949,155950],{"class":129},"(daily_total)\n",[2587,155952,155954],{"id":155953},"_1253-按类别统计","12.5.3 按类别统计",[113,155956,155958],{"className":115,"code":155957,"language":117,"meta":118,"style":118},"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",[120,155959,155960,155969,155973,155983,155996,156008,156026,156030],{"__ignoreMap":118},[123,155961,155962,155965,155967],{"class":125,"line":126},[123,155963,155964],{"class":129},"category_total ",[123,155966,134],{"class":133},[123,155968,90263],{"class":129},[123,155970,155971],{"class":125,"line":140},[123,155972,232],{"emptyLinePlaceholder":231},[123,155974,155975,155977,155979,155981],{"class":125,"line":156},[123,155976,1399],{"class":133},[123,155978,1402],{"class":129},[123,155980,1405],{"class":133},[123,155982,155893],{"class":129},[123,155984,155985,155988,155990,155992,155994],{"class":125,"line":168},[123,155986,155987],{"class":129},"    category ",[123,155989,134],{"class":133},[123,155991,155903],{"class":129},[123,155993,155752],{"class":143},[123,155995,998],{"class":129},[123,155997,155998,156000,156002,156004,156006],{"class":125,"line":268},[123,155999,155912],{"class":129},[123,156001,134],{"class":133},[123,156003,155903],{"class":129},[123,156005,1824],{"class":143},[123,156007,998],{"class":129},[123,156009,156010,156013,156015,156018,156020,156022,156024],{"class":125,"line":291},[123,156011,156012],{"class":129},"    category_total[category] ",[123,156014,134],{"class":133},[123,156016,156017],{"class":129}," category_total.get(category, ",[123,156019,2799],{"class":164},[123,156021,1336],{"class":129},[123,156023,3086],{"class":133},[123,156025,155939],{"class":129},[123,156027,156028],{"class":125,"line":300},[123,156029,232],{"emptyLinePlaceholder":231},[123,156031,156032,156034],{"class":125,"line":305},[123,156033,294],{"class":164},[123,156035,156036],{"class":129},"(category_total)\n",[2587,156038,156040],{"id":156039},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[113,156042,156044],{"className":115,"code":156043,"language":117,"meta":118,"style":118},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[120,156045,156046,156071],{"__ignoreMap":118},[123,156047,156048,156051,156053,156055,156058,156061,156064,156067,156069],{"class":125,"line":126},[123,156049,156050],{"class":129},"top_date, top_amount ",[123,156052,134],{"class":133},[123,156054,8384],{"class":164},[123,156056,156057],{"class":129},"(daily_total.items(), ",[123,156059,156060],{"class":279},"key",[123,156062,156063],{"class":133},"=lambda",[123,156065,156066],{"class":129}," item: item[",[123,156068,2825],{"class":164},[123,156070,444],{"class":129},[123,156072,156073,156075],{"class":125,"line":140},[123,156074,294],{"class":164},[123,156076,156077],{"class":129},"(top_date, top_amount)\n",[14,156079,156081],{"id":156080},"_126-绘制柱状图","12.6 绘制柱状图",[113,156083,156085],{"className":115,"code":156084,"language":117,"meta":118,"style":118},"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",[120,156086,156087,156101,156112,156116,156124,156136,156148,156159,156163,156167,156177,156188,156202,156207,156224,156241,156257,156261],{"__ignoreMap":118},[123,156088,156089,156091,156093,156095,156097,156099],{"class":125,"line":126},[123,156090,391],{"class":133},[123,156092,539],{"class":129},[123,156094,223],{"class":133},[123,156096,544],{"class":129},[123,156098,547],{"class":133},[123,156100,550],{"class":129},[123,156102,156103,156105,156107,156109],{"class":125,"line":140},[123,156104,391],{"class":133},[123,156106,394],{"class":129},[123,156108,223],{"class":133},[123,156110,156111],{"class":129}," Bar\n",[123,156113,156114],{"class":125,"line":156},[123,156115,232],{"emptyLinePlaceholder":231},[123,156117,156118,156120,156122],{"class":125,"line":168},[123,156119,155964],{"class":129},[123,156121,134],{"class":133},[123,156123,137],{"class":129},[123,156125,156126,156129,156131,156134],{"class":125,"line":268},[123,156127,156128],{"class":143},"    \"手机\"",[123,156130,147],{"class":129},[123,156132,156133],{"class":164},"27000",[123,156135,153],{"class":129},[123,156137,156138,156141,156143,156146],{"class":125,"line":291},[123,156139,156140],{"class":143},"    \"电脑\"",[123,156142,147],{"class":129},[123,156144,156145],{"class":164},"34000",[123,156147,153],{"class":129},[123,156149,156150,156153,156155,156157],{"class":125,"line":300},[123,156151,156152],{"class":143},"    \"耳机\"",[123,156154,147],{"class":129},[123,156156,126787],{"class":164},[123,156158,153],{"class":129},[123,156160,156161],{"class":125,"line":305},[123,156162,171],{"class":129},[123,156164,156165],{"class":125,"line":316},[123,156166,232],{"emptyLinePlaceholder":231},[123,156168,156169,156172,156174],{"class":125,"line":673},[123,156170,156171],{"class":129},"bar ",[123,156173,134],{"class":133},[123,156175,156176],{"class":129}," Bar()\n",[123,156178,156179,156182,156185],{"class":125,"line":692},[123,156180,156181],{"class":129},"bar.add_xaxis(",[123,156183,156184],{"class":164},"list",[123,156186,156187],{"class":129},"(category_total.keys()))\n",[123,156189,156190,156193,156195,156197,156199],{"class":125,"line":713},[123,156191,156192],{"class":129},"bar.add_yaxis(",[123,156194,452],{"class":143},[123,156196,251],{"class":129},[123,156198,156184],{"class":164},[123,156200,156201],{"class":129},"(category_total.values()))\n",[123,156203,156204],{"class":125,"line":718},[123,156205,156206],{"class":129},"bar.set_global_opts(\n",[123,156208,156209,156211,156213,156215,156217,156219,156222],{"class":125,"line":1138},[123,156210,634],{"class":279},[123,156212,134],{"class":133},[123,156214,639],{"class":129},[123,156216,642],{"class":279},[123,156218,134],{"class":133},[123,156220,156221],{"class":143},"\"品类销售额\"",[123,156223,650],{"class":129},[123,156225,156226,156228,156230,156232,156234,156236,156239],{"class":125,"line":1429},[123,156227,655],{"class":279},[123,156229,134],{"class":133},[123,156231,660],{"class":129},[123,156233,663],{"class":279},[123,156235,134],{"class":133},[123,156237,156238],{"class":143},"\"品类\"",[123,156240,650],{"class":129},[123,156242,156243,156245,156247,156249,156251,156253,156255],{"class":125,"line":1439},[123,156244,676],{"class":279},[123,156246,134],{"class":133},[123,156248,660],{"class":129},[123,156250,663],{"class":279},[123,156252,134],{"class":133},[123,156254,452],{"class":143},[123,156256,650],{"class":129},[123,156258,156259],{"class":125,"line":1444},[123,156260,288],{"class":129},[123,156262,156263,156266,156269],{"class":125,"line":1453},[123,156264,156265],{"class":129},"bar.render(",[123,156267,156268],{"class":143},"\"category_sales.html\"",[123,156270,288],{"class":129},[14,156272,156274],{"id":156273},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156276,156277],{},"时间线适合展示不同日期、月份、年份的数据变化。",[113,156279,156281],{"className":115,"code":156280,"language":117,"meta":118,"style":118},"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",[120,156282,156283,156297,156308,156312,156320,156344,156367,156392,156396,156400,156410,156414,156425,156434,156444,156458,156489,156494,156498],{"__ignoreMap":118},[123,156284,156285,156287,156289,156291,156293,156295],{"class":125,"line":126},[123,156286,391],{"class":133},[123,156288,539],{"class":129},[123,156290,223],{"class":133},[123,156292,544],{"class":129},[123,156294,547],{"class":133},[123,156296,550],{"class":129},[123,156298,156299,156301,156303,156305],{"class":125,"line":140},[123,156300,391],{"class":133},[123,156302,394],{"class":129},[123,156304,223],{"class":133},[123,156306,156307],{"class":129}," Bar, Timeline\n",[123,156309,156310],{"class":125,"line":156},[123,156311,232],{"emptyLinePlaceholder":231},[123,156313,156314,156316,156318],{"class":125,"line":168},[123,156315,130],{"class":129},[123,156317,134],{"class":133},[123,156319,137],{"class":129},[123,156321,156322,156325,156328,156330,156332,156334,156336,156338,156340,156342],{"class":125,"line":268},[123,156323,156324],{"class":143},"    \"2024-10-01\"",[123,156326,156327],{"class":129},": {",[123,156329,155757],{"class":143},[123,156331,147],{"class":129},[123,156333,155766],{"class":164},[123,156335,251],{"class":129},[123,156337,155787],{"class":143},[123,156339,147],{"class":129},[123,156341,155796],{"class":164},[123,156343,1202],{"class":129},[123,156345,156346,156349,156351,156353,156355,156357,156359,156361,156363,156365],{"class":125,"line":291},[123,156347,156348],{"class":143},"    \"2024-10-02\"",[123,156350,156327],{"class":129},[123,156352,155757],{"class":143},[123,156354,147],{"class":129},[123,156356,155825],{"class":164},[123,156358,251],{"class":129},[123,156360,155787],{"class":143},[123,156362,147],{"class":129},[123,156364,155854],{"class":164},[123,156366,1202],{"class":129},[123,156368,156369,156372,156374,156376,156378,156381,156383,156385,156387,156390],{"class":125,"line":300},[123,156370,156371],{"class":143},"    \"2024-10-03\"",[123,156373,156327],{"class":129},[123,156375,155757],{"class":143},[123,156377,147],{"class":129},[123,156379,156380],{"class":164},"17000",[123,156382,251],{"class":129},[123,156384,155787],{"class":143},[123,156386,147],{"class":129},[123,156388,156389],{"class":164},"19000",[123,156391,1202],{"class":129},[123,156393,156394],{"class":125,"line":305},[123,156395,171],{"class":129},[123,156397,156398],{"class":125,"line":316},[123,156399,232],{"emptyLinePlaceholder":231},[123,156401,156402,156405,156407],{"class":125,"line":673},[123,156403,156404],{"class":129},"timeline ",[123,156406,134],{"class":133},[123,156408,156409],{"class":129}," Timeline()\n",[123,156411,156412],{"class":125,"line":692},[123,156413,232],{"emptyLinePlaceholder":231},[123,156415,156416,156418,156421,156423],{"class":125,"line":713},[123,156417,1399],{"class":133},[123,156419,156420],{"class":129}," date, category_data ",[123,156422,1405],{"class":133},[123,156424,2373],{"class":129},[123,156426,156427,156430,156432],{"class":125,"line":718},[123,156428,156429],{"class":129},"    bar ",[123,156431,134],{"class":133},[123,156433,156176],{"class":129},[123,156435,156436,156439,156441],{"class":125,"line":1138},[123,156437,156438],{"class":129},"    bar.add_xaxis(",[123,156440,156184],{"class":164},[123,156442,156443],{"class":129},"(category_data.keys()))\n",[123,156445,156446,156449,156451,156453,156455],{"class":125,"line":1429},[123,156447,156448],{"class":129},"    bar.add_yaxis(",[123,156450,452],{"class":143},[123,156452,251],{"class":129},[123,156454,156184],{"class":164},[123,156456,156457],{"class":129},"(category_data.values()))\n",[123,156459,156460,156463,156466,156468,156470,156472,156474,156476,156478,156480,156482,156484,156487],{"class":125,"line":1439},[123,156461,156462],{"class":129},"    bar.set_global_opts(",[123,156464,156465],{"class":279},"title_opts",[123,156467,134],{"class":133},[123,156469,639],{"class":129},[123,156471,642],{"class":279},[123,156473,134],{"class":133},[123,156475,2667],{"class":133},[123,156477,2859],{"class":143},[123,156479,3495],{"class":164},[123,156481,76326],{"class":129},[123,156483,3545],{"class":164},[123,156485,156486],{"class":143},"销售额\"",[123,156488,32913],{"class":129},[123,156490,156491],{"class":125,"line":1444},[123,156492,156493],{"class":129},"    timeline.add(bar, date)\n",[123,156495,156496],{"class":125,"line":1453},[123,156497,232],{"emptyLinePlaceholder":231},[123,156499,156500,156503,156506],{"class":125,"line":1458},[123,156501,156502],{"class":129},"timeline.render(",[123,156504,156505],{"class":143},"\"timeline_sales.html\"",[123,156507,288],{"class":129},[14,156509,156511],{"id":156510},"_128-绘制地图","12.8 绘制地图",[19,156513,156514],{},"地图适合展示地区数据。",[113,156516,156518],{"className":115,"code":156517,"language":117,"meta":118,"style":118},"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",[120,156519,156520,156534,156545,156549,156557,156570,156582,156595,156608,156612,156616,156626,156641,156646,156663,156682,156686],{"__ignoreMap":118},[123,156521,156522,156524,156526,156528,156530,156532],{"class":125,"line":126},[123,156523,391],{"class":133},[123,156525,539],{"class":129},[123,156527,223],{"class":133},[123,156529,544],{"class":129},[123,156531,547],{"class":133},[123,156533,550],{"class":129},[123,156535,156536,156538,156540,156542],{"class":125,"line":140},[123,156537,391],{"class":133},[123,156539,394],{"class":129},[123,156541,223],{"class":133},[123,156543,156544],{"class":129}," Map\n",[123,156546,156547],{"class":125,"line":156},[123,156548,232],{"emptyLinePlaceholder":231},[123,156550,156551,156553,156555],{"class":125,"line":168},[123,156552,130],{"class":129},[123,156554,134],{"class":133},[123,156556,1587],{"class":129},[123,156558,156559,156562,156564,156566,156568],{"class":125,"line":268},[123,156560,156561],{"class":129},"    (",[123,156563,150],{"class":143},[123,156565,251],{"class":129},[123,156567,462],{"class":164},[123,156569,650],{"class":129},[123,156571,156572,156574,156576,156578,156580],{"class":125,"line":291},[123,156573,156561],{"class":129},[123,156575,71689],{"class":143},[123,156577,251],{"class":129},[123,156579,472],{"class":164},[123,156581,650],{"class":129},[123,156583,156584,156586,156589,156591,156593],{"class":125,"line":300},[123,156585,156561],{"class":129},[123,156587,156588],{"class":143},"\"广东\"",[123,156590,251],{"class":129},[123,156592,1045],{"class":164},[123,156594,650],{"class":129},[123,156596,156597,156599,156602,156604,156606],{"class":125,"line":305},[123,156598,156561],{"class":129},[123,156600,156601],{"class":143},"\"浙江\"",[123,156603,251],{"class":129},[123,156605,477],{"class":164},[123,156607,650],{"class":129},[123,156609,156610],{"class":125,"line":316},[123,156611,998],{"class":129},[123,156613,156614],{"class":125,"line":673},[123,156615,232],{"emptyLinePlaceholder":231},[123,156617,156618,156621,156623],{"class":125,"line":692},[123,156619,156620],{"class":129},"map_chart ",[123,156622,134],{"class":133},[123,156624,156625],{"class":129}," Map()\n",[123,156627,156628,156631,156633,156636,156639],{"class":125,"line":713},[123,156629,156630],{"class":129},"map_chart.add(",[123,156632,452],{"class":143},[123,156634,156635],{"class":129},", data, ",[123,156637,156638],{"class":143},"\"china\"",[123,156640,288],{"class":129},[123,156642,156643],{"class":125,"line":718},[123,156644,156645],{"class":129},"map_chart.set_global_opts(\n",[123,156647,156648,156650,156652,156654,156656,156658,156661],{"class":125,"line":1138},[123,156649,634],{"class":279},[123,156651,134],{"class":133},[123,156653,639],{"class":129},[123,156655,642],{"class":279},[123,156657,134],{"class":133},[123,156659,156660],{"class":143},"\"地区销售额\"",[123,156662,650],{"class":129},[123,156664,156665,156668,156670,156673,156676,156678,156680],{"class":125,"line":1429},[123,156666,156667],{"class":279},"    visualmap_opts",[123,156669,134],{"class":133},[123,156671,156672],{"class":129},"opts.VisualMapOpts(",[123,156674,156675],{"class":279},"max_",[123,156677,134],{"class":133},[123,156679,1045],{"class":164},[123,156681,650],{"class":129},[123,156683,156684],{"class":125,"line":1439},[123,156685,288],{"class":129},[123,156687,156688,156691,156694],{"class":125,"line":1444},[123,156689,156690],{"class":129},"map_chart.render(",[123,156692,156693],{"class":143},"\"map_sales.html\"",[123,156695,288],{"class":129},[19,156697,156698],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156700,156702],{"id":156701},"_129-项目拆分建议","12.9 项目拆分建议",[19,156704,156705],{},"当代码超过一个文件时，可以这样组织：",[113,156707,156710],{"className":156708,"code":156709,"language":7621,"meta":118},[7619],"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",[120,156711,156709],{"__ignoreMap":118},[19,156713,156714],{},"职责：",[26,156716,156717,156723,156729,156735],{},[29,156718,156719,156722],{},[120,156720,156721],{},"main.py","：程序入口。",[29,156724,156725,156728],{},[120,156726,156727],{},"file_utils.py","：读写 JSON。",[29,156730,156731,156734],{},[120,156732,156733],{},"sales_service.py","：统计销售数据。",[29,156736,156737,156740],{},[120,156738,156739],{},"chart_builder.py","：生成图表。",[14,156742,156744],{"id":156743},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156746,156747],{},"语法基础：",[26,156749,156750,156753,156756,156759],{},[29,156751,156752],{},"会写变量、注释、输入输出。",[29,156754,156755],{},"会使用 int、float、str、bool。",[29,156757,156758],{},"会做类型转换。",[29,156760,156761],{},"会使用 f-string 格式化输出。",[19,156763,156764],{},"流程控制：",[26,156766,156767,156773,156779,156787],{},[29,156768,156769,156770,2494],{},"会写 ",[120,156771,156772],{},"if elif else",[29,156774,156769,156775,103411,156777,2494],{},[120,156776,111052],{},[120,156778,1399],{},[29,156780,156781,156782,103411,156784,2494],{},"理解 ",[120,156783,4497],{},[120,156785,156786],{},"continue",[29,156788,156789],{},"能写嵌套循环。",[19,156791,156792],{},"函数：",[26,156794,156795,156798,156801,156804],{},[29,156796,156797],{},"会定义和调用函数。",[29,156799,156800],{},"理解参数和返回值。",[29,156802,156803],{},"知道局部变量和全局变量。",[29,156805,156806],{},"会使用默认参数、关键字参数、不定长参数。",[19,156808,156809],{},"容器：",[26,156811,156812,156815,156818,156821,156824],{},[29,156813,156814],{},"会使用列表增删改查。",[29,156816,156817],{},"会遍历列表、字典。",[29,156819,156820],{},"会使用切片。",[29,156822,156823],{},"会用集合去重。",[29,156825,156826],{},"会处理列表嵌套字典。",[19,156828,156829],{},"文件和模块：",[26,156831,156832,156835,156838,156841,156844],{},[29,156833,156834],{},"会读写文本文件。",[29,156836,156837],{},"会读写 JSON。",[29,156839,156840],{},"会捕获常见异常。",[29,156842,156843],{},"会导入模块和第三方包。",[29,156845,156846],{},"会创建简单包结构。",[19,156848,156849],{},"项目能力：",[26,156851,156852,156855,156858,156861,156864],{},[29,156853,156854],{},"能把代码拆成函数。",[29,156856,156857],{},"能把数据保存到文件。",[29,156859,156860],{},"能处理用户输入错误。",[29,156862,156863],{},"能写一个完整菜单程序。",[29,156865,156866],{},"能用 pyecharts 生成图表。",[14,156868,156870],{"id":156869},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156872,156873,156876,156879,156882,156885,156888,156891,156894],{},[29,156874,156875],{},"猜数字游戏。",[29,156877,156878],{},"ATM 菜单程序。",[29,156880,156881],{},"学生成绩统计。",[29,156883,156884],{},"学生管理系统函数版。",[29,156886,156887],{},"学生管理系统文件持久化版。",[29,156889,156890],{},"学生管理系统面向对象版。",[29,156892,156893],{},"销售数据统计。",[29,156895,156896],{},"销售数据可视化。",[14,156898,156900],{"id":156899},"_1212-常见学习误区","12.12 常见学习误区",[26,156902,156903,156906,156909,156912,156915,156918,156921],{},[29,156904,156905],{},"只看视频不敲代码。",[29,156907,156908],{},"一报错就复制错误去搜，不先读报错位置。",[29,156910,156911],{},"变量名随便写，后续自己看不懂。",[29,156913,156914],{},"所有代码都写在一个文件一个函数里。",[29,156916,156917],{},"不保存练习代码，复习时没有材料。",[29,156919,156920],{},"还没掌握列表字典就急着学框架。",[29,156922,156923],{},"不会读官方文档，只依赖教程。",[14,156925,156927],{"id":156926},"_1213-如何读报错","12.13 如何读报错",[19,156929,156930],{},"报错通常从下往上看最后几行。",[19,156932,1572],{},[113,156934,156937],{"className":156935,"code":156936,"language":7621,"meta":118},[7619],"ValueError: invalid literal for int() with base 10: 'abc'\n",[120,156938,156936],{"__ignoreMap":118},[19,156940,27022],{},[26,156942,156943,156949,156959],{},[29,156944,156945,156946,2494],{},"异常类型是 ",[120,156947,156948],{},"ValueError",[29,156950,109735,156951,156954,156955,156958],{},[120,156952,156953],{},"int()"," 无法把 ",[120,156956,156957],{},"'abc'"," 转成整数。",[29,156960,156961],{},"应该检查输入内容或增加异常处理。",[19,156963,156964],{},"再看文件名和行号：",[113,156966,156969],{"className":156967,"code":156968,"language":7621,"meta":118},[7619],"File \"main.py\", line 10, in \u003Cmodule>\n",[120,156970,156968],{"__ignoreMap":118},[19,156972,156973,156974,156976],{},"表示错误发生在 ",[120,156975,156721],{}," 第 10 行。",[14,156978,156980],{"id":156979},"_1214-后续学习方向","12.14 后续学习方向",[19,156982,156983],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156985,156986,156998,157007,157019,157030,157039,157049],{},[29,156987,156988,156989,2820,156992,2820,156995,2494],{},"自动化办公：",[120,156990,156991],{},"openpyxl",[120,156993,156994],{},"python-docx",[120,156996,156997],{},"pdfplumber",[29,156999,157000,157001,2820,157003,2820,157005,2494],{},"数据分析：",[120,157002,103019],{},[120,157004,148571],{},[120,157006,71],{},[29,157008,157009,157010,2820,157013,2820,157016,2494],{},"Web 后端：",[120,157011,157012],{},"Flask",[120,157014,157015],{},"FastAPI",[120,157017,157018],{},"Django",[29,157020,157021,157022,2820,157024,2820,157027,2494],{},"爬虫：",[120,157023,148556],{},[120,157025,157026],{},"BeautifulSoup",[120,157028,157029],{},"Scrapy",[29,157031,157032,157033,2820,157035,157038],{},"测试开发：",[120,157034,148601],{},[120,157036,157037],{},"selenium","、接口测试。",[29,157040,157041,157042,2820,157044,2820,157046,2494],{},"人工智能：",[120,157043,103019],{},[120,157045,148571],{},[120,157047,157048],{},"pytorch",[29,157050,157051,157052,2820,157054,2820,157057,2494],{},"运维脚本：",[120,157053,148174],{},[120,157055,157056],{},"subprocess",[120,157058,157059],{},"paramiko",[19,157061,157062],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157064,157066],{"id":157065},"_1215-结课练习","12.15 结课练习",[26,157068,157069,157072,157075,157078,157081,157084,157087,157090],{},[29,157070,157071],{},"完成函数版学生管理系统。",[29,157073,157074],{},"给学生管理系统增加 JSON 持久化。",[29,157076,157077],{},"给学生管理系统增加异常处理。",[29,157079,157080],{},"把学生管理系统改成面向对象版。",[29,157082,157083],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,157085,157086],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,157088,157089],{},"按品类统计销售额并绘制柱状图。",[29,157091,157092],{},"写一份自己的 Python 学习路线图。",[2526,157094,157095],{},"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":118,"searchDepth":140,"depth":140,"links":157097},[157098,157099,157102,157103,157104,157110,157111,157112,157113,157114,157115,157116,157117,157118,157119],{"id":153814,"depth":140,"text":153815},{"id":153864,"depth":140,"text":153865,"children":157100},[157101],{"id":153868,"depth":156,"text":153869},{"id":153907,"depth":140,"text":153908},{"id":155381,"depth":140,"text":155382},{"id":155719,"depth":140,"text":155720,"children":157105},[157106,157107,157108,157109],{"id":155723,"depth":156,"text":155724},{"id":155863,"depth":156,"text":155864},{"id":155953,"depth":156,"text":155954},{"id":156039,"depth":156,"text":156040},{"id":156080,"depth":140,"text":156081},{"id":156273,"depth":140,"text":156274},{"id":156510,"depth":140,"text":156511},{"id":156701,"depth":140,"text":156702},{"id":156743,"depth":140,"text":156744},{"id":156869,"depth":140,"text":156870},{"id":156899,"depth":140,"text":156900},{"id":156926,"depth":140,"text":156927},{"id":156979,"depth":140,"text":156980},{"id":157065,"depth":140,"text":157066},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153806,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157126,"title":157127,"body":157128,"description":2544,"extension":2545,"meta":159597,"navigation":231,"path":159598,"seo":159599,"stem":159600,"__hash__":159601},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157129,"toc":159572},[157130,157133,157137,157140,157143,157163,157166,157189,157192,157195,157217,157220,157242,157246,157249,157289,157292,157413,157417,157420,157460,157463,157487,157490,157494,157497,157511,157544,157547,157582,157585,157608,157611,157644,157647,157649,157655,157730,157733,157739,157756,157796,157800,157803,157849,157851,157889,157892,157927,157930,157965,157968,158000,158003,158022,158026,158030,158143,158145,158220,158224,158270,158273,158299,158308,158312,158315,158378,158386,158414,158418,158458,158523,158527,158530,158569,158572,158617,158620,158681,158685,158712,158715,158743,158746,158750,158754,158819,158822,158860,158863,158895,158899,158998,159002,159005,159078,159081,159129,159133,159139,159179,159182,159229,159232,159281,159285,159287,159301,159303,159484,159488,159515,159535,159542,159546,159563,159569],[10,157131,157127],{"id":157132},"_2-基础语法变量与字符串",[14,157134,157136],{"id":157135},"_21-注释","2.1 注释",[19,157138,157139],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157141,157142],{},"单行注释：",[113,157144,157146],{"className":115,"code":157145,"language":117,"meta":118,"style":118},"# 这是单行注释\nprint(\"hello\")\n",[120,157147,157148,157153],{"__ignoreMap":118},[123,157149,157150],{"class":125,"line":126},[123,157151,157152],{"class":2673},"# 这是单行注释\n",[123,157154,157155,157157,157159,157161],{"class":125,"line":140},[123,157156,294],{"class":164},[123,157158,1315],{"class":129},[123,157160,8277],{"class":143},[123,157162,288],{"class":129},[19,157164,157165],{},"多行说明常用三引号：",[113,157167,157169],{"className":115,"code":157168,"language":117,"meta":118,"style":118},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[120,157170,157171,157175,157180,157185],{"__ignoreMap":118},[123,157172,157173],{"class":125,"line":126},[123,157174,98092],{"class":143},[123,157176,157177],{"class":125,"line":140},[123,157178,157179],{"class":143},"这是多行说明。\n",[123,157181,157182],{"class":125,"line":156},[123,157183,157184],{"class":143},"常用于文件顶部说明、函数说明等。\n",[123,157186,157187],{"class":125,"line":168},[123,157188,98092],{"class":143},[19,157190,157191],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157193,157194],{},"不好：",[113,157196,157198],{"className":115,"code":157197,"language":117,"meta":118,"style":118},"# age 加 1\nage = age + 1\n",[120,157199,157200,157205],{"__ignoreMap":118},[123,157201,157202],{"class":125,"line":126},[123,157203,157204],{"class":2673},"# age 加 1\n",[123,157206,157207,157209,157211,157213,157215],{"class":125,"line":140},[123,157208,148930],{"class":129},[123,157210,134],{"class":133},[123,157212,18135],{"class":129},[123,157214,3086],{"class":133},[123,157216,58101],{"class":164},[19,157218,157219],{},"较好：",[113,157221,157223],{"className":115,"code":157222,"language":117,"meta":118,"style":118},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[120,157224,157225,157230],{"__ignoreMap":118},[123,157226,157227],{"class":125,"line":126},[123,157228,157229],{"class":2673},"# 用户过完生日后，年龄增加一岁\n",[123,157231,157232,157234,157236,157238,157240],{"class":125,"line":140},[123,157233,148930],{"class":129},[123,157235,134],{"class":133},[123,157237,18135],{"class":129},[123,157239,3086],{"class":133},[123,157241,58101],{"class":164},[14,157243,157245],{"id":157244},"_22-字面量","2.2 字面量",[19,157247,157248],{},"字面量就是代码中直接写出来的数据。",[113,157250,157252],{"className":115,"code":157251,"language":117,"meta":118,"style":118},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[120,157253,157254,157261,157268,157275,157282],{"__ignoreMap":118},[123,157255,157256,157258],{"class":125,"line":126},[123,157257,259],{"class":164},[123,157259,157260],{"class":2673},"          # 整数\n",[123,157262,157263,157265],{"class":125,"line":140},[123,157264,2664],{"class":164},[123,157266,157267],{"class":2673},"         # 小数\n",[123,157269,157270,157272],{"class":125,"line":156},[123,157271,8277],{"class":143},[123,157273,157274],{"class":2673},"      # 字符串\n",[123,157276,157277,157279],{"class":125,"line":168},[123,157278,870],{"class":164},[123,157280,157281],{"class":2673},"         # 布尔值\n",[123,157283,157284,157286],{"class":125,"line":268},[123,157285,98080],{"class":164},[123,157287,157288],{"class":2673},"         # 空值\n",[19,157290,157291],{},"常见字面量类型：",[48,157293,157294,157304],{},[51,157295,157296],{},[54,157297,157298,157300,157302],{},[57,157299,26164],{},[57,157301,29913],{},[57,157303,28291],{},[64,157305,157306,157317,157328,157339,157351,157363,157375,157388,157400],{},[54,157307,157308,157310,157314],{},[69,157309,1742],{},[69,157311,157312],{},[120,157313,259],{},[69,157315,157316],{},"整数",[54,157318,157319,157321,157325],{},[69,157320,2656],{},[69,157322,157323],{},[120,157324,2664],{},[69,157326,157327],{},"浮点数",[54,157329,157330,157332,157336],{},[69,157331,3769],{},[69,157333,157334],{},[120,157335,8277],{},[69,157337,157338],{},"字符串",[54,157340,157341,157343,157349],{},[69,157342,3821],{},[69,157344,157345,2820,157347],{},[120,157346,870],{},[120,157348,285],{},[69,157350,68416],{},[54,157352,157353,157356,157360],{},[69,157354,157355],{},"NoneType",[69,157357,157358],{},[120,157359,98080],{},[69,157361,157362],{},"空值",[54,157364,157365,157367,157372],{},[69,157366,156184],{},[69,157368,157369],{},[120,157370,157371],{},"[1, 2, 3]",[69,157373,157374],{},"列表",[54,157376,157377,157380,157385],{},[69,157378,157379],{},"tuple",[69,157381,157382],{},[120,157383,157384],{},"(1, 2, 3)",[69,157386,157387],{},"元组",[54,157389,157390,157392,157397],{},[69,157391,116934],{},[69,157393,157394],{},[120,157395,157396],{},"{\"name\": \"张三\"}",[69,157398,157399],{},"字典",[54,157401,157402,157405,157410],{},[69,157403,157404],{},"set",[69,157406,157407],{},[120,157408,157409],{},"{1, 2, 3}",[69,157411,157412],{},"集合",[14,157414,157416],{"id":157415},"_23-变量","2.3 变量",[19,157418,157419],{},"变量是保存数据的名字。",[113,157421,157423],{"className":115,"code":157422,"language":117,"meta":118,"style":118},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[120,157424,157425,157433,157441,157451],{"__ignoreMap":118},[123,157426,157427,157429,157431],{"class":125,"line":126},[123,157428,148920],{"class":129},[123,157430,134],{"class":133},[123,157432,151467],{"class":143},[123,157434,157435,157437,157439],{"class":125,"line":140},[123,157436,148930],{"class":129},[123,157438,134],{"class":133},[123,157440,148935],{"class":164},[123,157442,157443,157446,157448],{"class":125,"line":156},[123,157444,157445],{"class":129},"height ",[123,157447,134],{"class":133},[123,157449,157450],{"class":164}," 1.75\n",[123,157452,157453,157456,157458],{"class":125,"line":168},[123,157454,157455],{"class":129},"is_student ",[123,157457,134],{"class":133},[123,157459,155713],{"class":164},[19,157461,157462],{},"Python 的变量不需要提前声明类型：",[113,157464,157466],{"className":115,"code":157465,"language":117,"meta":118,"style":118},"score = 100\nscore = \"满分\"\n",[120,157467,157468,157478],{"__ignoreMap":118},[123,157469,157470,157473,157475],{"class":125,"line":126},[123,157471,157472],{"class":129},"score ",[123,157474,134],{"class":133},[123,157476,157477],{"class":164}," 100\n",[123,157479,157480,157482,157484],{"class":125,"line":140},[123,157481,157472],{"class":129},[123,157483,134],{"class":133},[123,157485,157486],{"class":143}," \"满分\"\n",[19,157488,157489],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157491,157493],{"id":157492},"_24-变量命名规则","2.4 变量命名规则",[19,157495,157496],{},"硬性规则：",[26,157498,157499,157502,157505,157508],{},[29,157500,157501],{},"只能由字母、数字、下划线组成。",[29,157503,157504],{},"不能以数字开头。",[29,157506,157507],{},"不能使用 Python 关键字。",[29,157509,157510],{},"区分大小写。",[113,157512,157514],{"className":115,"code":157513,"language":117,"meta":118,"style":118},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[120,157515,157516,157525,157534],{"__ignoreMap":118},[123,157517,157518,157521,157523],{"class":125,"line":126},[123,157519,157520],{"class":129},"user_name ",[123,157522,134],{"class":133},[123,157524,148925],{"class":143},[123,157526,157527,157530,157532],{"class":125,"line":140},[123,157528,157529],{"class":129},"age2 ",[123,157531,134],{"class":133},[123,157533,148935],{"class":164},[123,157535,157536,157539,157541],{"class":125,"line":156},[123,157537,157538],{"class":129},"_token ",[123,157540,134],{"class":133},[123,157542,157543],{"class":143}," \"abc\"\n",[19,157545,157546],{},"错误写法：",[113,157548,157550],{"className":115,"code":157549,"language":117,"meta":118,"style":118},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[120,157551,157552,157561,157573],{"__ignoreMap":118},[123,157553,157554,157557,157559],{"class":125,"line":126},[123,157555,157556],{"class":79803},"2age",[123,157558,15995],{"class":133},[123,157560,148935],{"class":164},[123,157562,157563,157565,157567,157569,157571],{"class":125,"line":140},[123,157564,133972],{"class":129},[123,157566,3135],{"class":133},[123,157568,148920],{"class":129},[123,157570,134],{"class":133},[123,157572,148925],{"class":143},[123,157574,157575,157577,157579],{"class":125,"line":156},[123,157576,17124],{"class":133},[123,157578,15995],{"class":133},[123,157580,157581],{"class":143}," \"一班\"\n",[19,157583,157584],{},"查看关键字：",[113,157586,157588],{"className":115,"code":157587,"language":117,"meta":118,"style":118},"import keyword\n\nprint(keyword.kwlist)\n",[120,157589,157590,157597,157601],{"__ignoreMap":118},[123,157591,157592,157594],{"class":125,"line":126},[123,157593,223],{"class":133},[123,157595,157596],{"class":129}," keyword\n",[123,157598,157599],{"class":125,"line":140},[123,157600,232],{"emptyLinePlaceholder":231},[123,157602,157603,157605],{"class":125,"line":156},[123,157604,294],{"class":164},[123,157606,157607],{"class":129},"(keyword.kwlist)\n",[19,157609,157610],{},"推荐命名风格：",[113,157612,157614],{"className":115,"code":157613,"language":117,"meta":118,"style":118},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[120,157615,157616,157625,157635],{"__ignoreMap":118},[123,157617,157618,157621,157623],{"class":125,"line":126},[123,157619,157620],{"class":129},"student_name ",[123,157622,134],{"class":133},[123,157624,151467],{"class":143},[123,157626,157627,157630,157632],{"class":125,"line":140},[123,157628,157629],{"class":129},"total_price ",[123,157631,134],{"class":133},[123,157633,157634],{"class":164}," 99.8\n",[123,157636,157637,157640,157642],{"class":125,"line":156},[123,157638,157639],{"class":129},"is_finished ",[123,157641,134],{"class":133},[123,157643,128195],{"class":164},[19,157645,157646],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157648,53139],{"id":53138},[19,157650,106756,157651,157654],{},[120,157652,157653],{},"type()"," 查看数据类型：",[113,157656,157658],{"className":115,"code":157657,"language":117,"meta":118,"style":118},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[120,157659,157660,157674,157688,157702,157716],{"__ignoreMap":118},[123,157661,157662,157664,157666,157668,157670,157672],{"class":125,"line":126},[123,157663,294],{"class":164},[123,157665,1315],{"class":129},[123,157667,105497],{"class":164},[123,157669,1315],{"class":129},[123,157671,259],{"class":164},[123,157673,32913],{"class":129},[123,157675,157676,157678,157680,157682,157684,157686],{"class":125,"line":140},[123,157677,294],{"class":164},[123,157679,1315],{"class":129},[123,157681,105497],{"class":164},[123,157683,1315],{"class":129},[123,157685,2664],{"class":164},[123,157687,32913],{"class":129},[123,157689,157690,157692,157694,157696,157698,157700],{"class":125,"line":156},[123,157691,294],{"class":164},[123,157693,1315],{"class":129},[123,157695,105497],{"class":164},[123,157697,1315],{"class":129},[123,157699,8277],{"class":143},[123,157701,32913],{"class":129},[123,157703,157704,157706,157708,157710,157712,157714],{"class":125,"line":168},[123,157705,294],{"class":164},[123,157707,1315],{"class":129},[123,157709,105497],{"class":164},[123,157711,1315],{"class":129},[123,157713,870],{"class":164},[123,157715,32913],{"class":129},[123,157717,157718,157720,157722,157724,157726,157728],{"class":125,"line":268},[123,157719,294],{"class":164},[123,157721,1315],{"class":129},[123,157723,105497],{"class":164},[123,157725,1315],{"class":129},[123,157727,98080],{"class":164},[123,157729,32913],{"class":129},[19,157731,157732],{},"输出类似：",[113,157734,157737],{"className":157735,"code":157736,"language":7621,"meta":118},[7619],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[120,157738,157736],{"__ignoreMap":118},[19,157740,11457,157741,109673,157743,157745,157746,157748,157749,23927,157751,157748,157753,157755],{},[120,157742,3821],{},[120,157744,1742],{}," 的子类，",[120,157747,870],{}," 可以当作 ",[120,157750,2825],{},[120,157752,285],{},[120,157754,2799],{},"，但业务代码中不要滥用。",[113,157757,157759],{"className":115,"code":157758,"language":117,"meta":118,"style":118},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[120,157760,157761,157779],{"__ignoreMap":118},[123,157762,157763,157765,157767,157769,157771,157773,157776],{"class":125,"line":126},[123,157764,294],{"class":164},[123,157766,1315],{"class":129},[123,157768,870],{"class":164},[123,157770,47973],{"class":133},[123,157772,27540],{"class":164},[123,157774,157775],{"class":129},")   ",[123,157777,157778],{"class":2673},"# 2\n",[123,157780,157781,157783,157785,157787,157789,157791,157793],{"class":125,"line":140},[123,157782,294],{"class":164},[123,157784,1315],{"class":129},[123,157786,285],{"class":164},[123,157788,47973],{"class":133},[123,157790,27540],{"class":164},[123,157792,48215],{"class":129},[123,157794,157795],{"class":2673},"# 1\n",[14,157797,157799],{"id":157798},"_26-类型转换","2.6 类型转换",[19,157801,157802],{},"常用转换函数：",[113,157804,157806],{"className":115,"code":157805,"language":117,"meta":118,"style":118},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[120,157807,157808,157818,157829,157839],{"__ignoreMap":118},[123,157809,157810,157812,157814,157816],{"class":125,"line":126},[123,157811,1742],{"class":164},[123,157813,1315],{"class":129},[123,157815,56719],{"class":143},[123,157817,288],{"class":129},[123,157819,157820,157822,157824,157827],{"class":125,"line":140},[123,157821,2656],{"class":164},[123,157823,1315],{"class":129},[123,157825,157826],{"class":143},"\"3.14\"",[123,157828,288],{"class":129},[123,157830,157831,157833,157835,157837],{"class":125,"line":156},[123,157832,3769],{"class":164},[123,157834,1315],{"class":129},[123,157836,259],{"class":164},[123,157838,288],{"class":129},[123,157840,157841,157843,157845,157847],{"class":125,"line":168},[123,157842,3821],{"class":164},[123,157844,1315],{"class":129},[123,157846,2825],{"class":164},[123,157848,288],{"class":129},[19,157850,1572],{},[113,157852,157854],{"className":115,"code":157853,"language":117,"meta":118,"style":118},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[120,157855,157856,157865,157876],{"__ignoreMap":118},[123,157857,157858,157860,157862],{"class":125,"line":126},[123,157859,148930],{"class":129},[123,157861,134],{"class":133},[123,157863,157864],{"class":143}," \"18\"\n",[123,157866,157867,157869,157871,157873],{"class":125,"line":140},[123,157868,148930],{"class":129},[123,157870,134],{"class":133},[123,157872,4826],{"class":164},[123,157874,157875],{"class":129},"(age)\n",[123,157877,157878,157880,157883,157885,157887],{"class":125,"line":156},[123,157879,294],{"class":164},[123,157881,157882],{"class":129},"(age ",[123,157884,3086],{"class":133},[123,157886,27540],{"class":164},[123,157888,288],{"class":129},[19,157890,157891],{},"输入得到的内容永远是字符串：",[113,157893,157895],{"className":115,"code":157894,"language":117,"meta":118,"style":118},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[120,157896,157897,157913],{"__ignoreMap":118},[123,157898,157899,157902,157904,157906,157908,157911],{"class":125,"line":126},[123,157900,157901],{"class":129},"num ",[123,157903,134],{"class":133},[123,157905,63007],{"class":164},[123,157907,1315],{"class":129},[123,157909,157910],{"class":143},"\"请输入数字:\"",[123,157912,288],{"class":129},[123,157914,157915,157917,157919,157921,157924],{"class":125,"line":140},[123,157916,294],{"class":164},[123,157918,1315],{"class":129},[123,157920,105497],{"class":164},[123,157922,157923],{"class":129},"(num))  ",[123,157925,157926],{"class":2673},"# str\n",[19,157928,157929],{},"如果要做数学运算，必须转换：",[113,157931,157933],{"className":115,"code":157932,"language":117,"meta":118,"style":118},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[120,157934,157935,157953],{"__ignoreMap":118},[123,157936,157937,157939,157941,157943,157945,157947,157949,157951],{"class":125,"line":126},[123,157938,157901],{"class":129},[123,157940,134],{"class":133},[123,157942,4826],{"class":164},[123,157944,1315],{"class":129},[123,157946,56224],{"class":164},[123,157948,1315],{"class":129},[123,157950,157910],{"class":143},[123,157952,32913],{"class":129},[123,157954,157955,157957,157959,157961,157963],{"class":125,"line":140},[123,157956,294],{"class":164},[123,157958,48026],{"class":129},[123,157960,3086],{"class":133},[123,157962,4482],{"class":164},[123,157964,288],{"class":129},[19,157966,157967],{},"常见错误：",[113,157969,157971],{"className":115,"code":157970,"language":117,"meta":118,"style":118},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[120,157972,157973,157986],{"__ignoreMap":118},[123,157974,157975,157977,157979,157981,157983],{"class":125,"line":126},[123,157976,1742],{"class":164},[123,157978,1315],{"class":129},[123,157980,157826],{"class":143},[123,157982,157775],{"class":129},[123,157984,157985],{"class":2673},"# 错误\n",[123,157987,157988,157990,157992,157995,157998],{"class":125,"line":140},[123,157989,1742],{"class":164},[123,157991,1315],{"class":129},[123,157993,157994],{"class":143},"\"abc\"",[123,157996,157997],{"class":129},")    ",[123,157999,157985],{"class":2673},[19,158001,158002],{},"正确写法：",[113,158004,158006],{"className":115,"code":158005,"language":117,"meta":118,"style":118},"num = float(\"3.14\")\n",[120,158007,158008],{"__ignoreMap":118},[123,158009,158010,158012,158014,158016,158018,158020],{"class":125,"line":126},[123,158011,157901],{"class":129},[123,158013,134],{"class":133},[123,158015,112186],{"class":164},[123,158017,1315],{"class":129},[123,158019,157826],{"class":143},[123,158021,288],{"class":129},[14,158023,158025],{"id":158024},"_27-运算符","2.7 运算符",[2587,158027,158029],{"id":158028},"_271-算术运算符","2.7.1 算术运算符",[48,158031,158032,158043],{},[51,158033,158034],{},[54,158035,158036,158039,158041],{},[57,158037,158038],{},"运算符",[57,158040,28291],{},[57,158042,29913],{},[64,158044,158045,158059,158073,158087,158101,158115,158129],{},[54,158046,158047,158051,158054],{},[69,158048,158049],{},[120,158050,3086],{},[69,158052,158053],{},"加法",[69,158055,158056],{},[120,158057,158058],{},"1 + 2",[54,158060,158061,158065,158068],{},[69,158062,158063],{},[120,158064,3135],{},[69,158066,158067],{},"减法",[69,158069,158070],{},[120,158071,158072],{},"5 - 3",[54,158074,158075,158079,158082],{},[69,158076,158077],{},[120,158078,3060],{},[69,158080,158081],{},"乘法",[69,158083,158084],{},[120,158085,158086],{},"2 * 3",[54,158088,158089,158093,158096],{},[69,158090,158091],{},[120,158092,3187],{},[69,158094,158095],{},"除法，结果是浮点数",[69,158097,158098],{},[120,158099,158100],{},"5 \u002F 2",[54,158102,158103,158107,158110],{},[69,158104,158105],{},[120,158106,35740],{},[69,158108,158109],{},"整除",[69,158111,158112],{},[120,158113,158114],{},"5 \u002F\u002F 2",[54,158116,158117,158121,158124],{},[69,158118,158119],{},[120,158120,2935],{},[69,158122,158123],{},"取余",[69,158125,158126],{},[120,158127,158128],{},"5 % 2",[54,158130,158131,158135,158138],{},[69,158132,158133],{},[120,158134,13093],{},[69,158136,158137],{},"幂运算",[69,158139,158140],{},[120,158141,158142],{},"2 ** 3",[19,158144,1572],{},[113,158146,158148],{"className":115,"code":158147,"language":117,"meta":118,"style":118},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[120,158149,158150,158168,158185,158202],{"__ignoreMap":118},[123,158151,158152,158154,158156,158158,158161,158163,158165],{"class":125,"line":126},[123,158153,294],{"class":164},[123,158155,1315],{"class":129},[123,158157,2926],{"class":164},[123,158159,158160],{"class":133}," \u002F",[123,158162,17185],{"class":164},[123,158164,157775],{"class":129},[123,158166,158167],{"class":2673},"# 2.5\n",[123,158169,158170,158172,158174,158176,158179,158181,158183],{"class":125,"line":140},[123,158171,294],{"class":164},[123,158173,1315],{"class":129},[123,158175,2926],{"class":164},[123,158177,158178],{"class":133}," \u002F\u002F",[123,158180,17185],{"class":164},[123,158182,48215],{"class":129},[123,158184,157778],{"class":2673},[123,158186,158187,158189,158191,158193,158196,158198,158200],{"class":125,"line":156},[123,158188,294],{"class":164},[123,158190,1315],{"class":129},[123,158192,2926],{"class":164},[123,158194,158195],{"class":133}," %",[123,158197,17185],{"class":164},[123,158199,157775],{"class":129},[123,158201,157795],{"class":2673},[123,158203,158204,158206,158208,158210,158213,158215,158217],{"class":125,"line":168},[123,158205,294],{"class":164},[123,158207,1315],{"class":129},[123,158209,2692],{"class":164},[123,158211,158212],{"class":133}," **",[123,158214,80468],{"class":164},[123,158216,48215],{"class":129},[123,158218,158219],{"class":2673},"# 8\n",[2587,158221,158223],{"id":158222},"_272-赋值运算符","2.7.2 赋值运算符",[113,158225,158227],{"className":115,"code":158226,"language":117,"meta":118,"style":118},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[120,158228,158229,158237,158245,158253,158261],{"__ignoreMap":118},[123,158230,158231,158233,158235],{"class":125,"line":126},[123,158232,157901],{"class":129},[123,158234,134],{"class":133},[123,158236,60830],{"class":164},[123,158238,158239,158241,158243],{"class":125,"line":140},[123,158240,157901],{"class":129},[123,158242,11909],{"class":133},[123,158244,56830],{"class":164},[123,158246,158247,158249,158251],{"class":125,"line":156},[123,158248,157901],{"class":129},[123,158250,152366],{"class":133},[123,158252,50130],{"class":164},[123,158254,158255,158257,158259],{"class":125,"line":168},[123,158256,157901],{"class":129},[123,158258,139536],{"class":133},[123,158260,122424],{"class":164},[123,158262,158263,158265,158268],{"class":125,"line":268},[123,158264,157901],{"class":129},[123,158266,158267],{"class":133},"\u002F=",[123,158269,50130],{"class":164},[19,158271,158272],{},"等价关系：",[113,158274,158276],{"className":115,"code":158275,"language":117,"meta":118,"style":118},"num += 1\nnum = num + 1\n",[120,158277,158278,158286],{"__ignoreMap":118},[123,158279,158280,158282,158284],{"class":125,"line":126},[123,158281,157901],{"class":129},[123,158283,11909],{"class":133},[123,158285,58101],{"class":164},[123,158287,158288,158290,158292,158295,158297],{"class":125,"line":140},[123,158289,157901],{"class":129},[123,158291,134],{"class":133},[123,158293,158294],{"class":129}," num ",[123,158296,3086],{"class":133},[123,158298,58101],{"class":164},[19,158300,158301,158302,103411,158305,2494],{},"Python 没有 ",[120,158303,158304],{},"num++",[120,158306,158307],{},"num--",[2587,158309,158311],{"id":158310},"_273-比较运算符","2.7.3 比较运算符",[19,158313,158314],{},"比较运算结果是布尔值。",[113,158316,158318],{"className":115,"code":158317,"language":117,"meta":118,"style":118},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[120,158319,158320,158334,158349,158363],{"__ignoreMap":118},[123,158321,158322,158324,158326,158328,158330,158332],{"class":125,"line":126},[123,158323,294],{"class":164},[123,158325,1315],{"class":129},[123,158327,2193],{"class":164},[123,158329,28643],{"class":133},[123,158331,4592],{"class":164},[123,158333,288],{"class":129},[123,158335,158336,158338,158340,158342,158345,158347],{"class":125,"line":140},[123,158337,294],{"class":164},[123,158339,1315],{"class":129},[123,158341,2193],{"class":164},[123,158343,158344],{"class":133}," >=",[123,158346,4482],{"class":164},[123,158348,288],{"class":129},[123,158350,158351,158353,158355,158357,158359,158361],{"class":125,"line":156},[123,158352,294],{"class":164},[123,158354,1315],{"class":129},[123,158356,2193],{"class":164},[123,158358,103951],{"class":133},[123,158360,4527],{"class":164},[123,158362,288],{"class":129},[123,158364,158365,158367,158369,158371,158374,158376],{"class":125,"line":168},[123,158366,294],{"class":164},[123,158368,1315],{"class":129},[123,158370,2193],{"class":164},[123,158372,158373],{"class":133}," !=",[123,158375,4527],{"class":164},[123,158377,288],{"class":129},[19,158379,158380,158381,158383,158384,2494],{},"注意：判断相等用 ",[120,158382,5391],{},"，赋值用 ",[120,158385,134],{},[113,158387,158389],{"className":115,"code":158388,"language":117,"meta":118,"style":118},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[120,158390,158391,158403],{"__ignoreMap":118},[123,158392,158393,158395,158397,158400],{"class":125,"line":126},[123,158394,148930],{"class":129},[123,158396,134],{"class":133},[123,158398,158399],{"class":164}," 18",[123,158401,158402],{"class":2673},"       # 赋值\n",[123,158404,158405,158407,158409,158411],{"class":125,"line":140},[123,158406,148930],{"class":129},[123,158408,5391],{"class":133},[123,158410,158399],{"class":164},[123,158412,158413],{"class":2673},"      # 判断是否相等\n",[2587,158415,158417],{"id":158416},"_274-逻辑运算符","2.7.4 逻辑运算符",[48,158419,158420,158428],{},[51,158421,158422],{},[54,158423,158424,158426],{},[57,158425,158038],{},[57,158427,28291],{},[64,158429,158430,158439,158448],{},[54,158431,158432,158436],{},[69,158433,158434],{},[120,158435,32878],{},[69,158437,158438],{},"并且",[54,158440,158441,158445],{},[69,158442,158443],{},[120,158444,117478],{},[69,158446,158447],{},"或者",[54,158449,158450,158455],{},[69,158451,158452],{},[120,158453,158454],{},"not",[69,158456,158457],{},"取反",[113,158459,158461],{"className":115,"code":158460,"language":117,"meta":118,"style":118},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[120,158462,158463,158471,158480,158484,158499,158513],{"__ignoreMap":118},[123,158464,158465,158467,158469],{"class":125,"line":126},[123,158466,148930],{"class":129},[123,158468,134],{"class":133},[123,158470,90460],{"class":164},[123,158472,158473,158476,158478],{"class":125,"line":140},[123,158474,158475],{"class":129},"has_ticket ",[123,158477,134],{"class":133},[123,158479,155713],{"class":164},[123,158481,158482],{"class":125,"line":156},[123,158483,232],{"emptyLinePlaceholder":231},[123,158485,158486,158488,158490,158492,158494,158496],{"class":125,"line":168},[123,158487,294],{"class":164},[123,158489,157882],{"class":129},[123,158491,4164],{"class":133},[123,158493,158399],{"class":164},[123,158495,122817],{"class":133},[123,158497,158498],{"class":129}," has_ticket)\n",[123,158500,158501,158503,158505,158507,158509,158511],{"class":125,"line":268},[123,158502,294],{"class":164},[123,158504,157882],{"class":129},[123,158506,3509],{"class":133},[123,158508,158399],{"class":164},[123,158510,116589],{"class":133},[123,158512,158498],{"class":129},[123,158514,158515,158517,158519,158521],{"class":125,"line":291},[123,158516,294],{"class":164},[123,158518,1315],{"class":129},[123,158520,158454],{"class":133},[123,158522,158498],{"class":129},[14,158524,158526],{"id":158525},"_28-字符串定义","2.8 字符串定义",[19,158528,158529],{},"三种常见写法：",[113,158531,158533],{"className":115,"code":158532,"language":117,"meta":118,"style":118},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[120,158534,158535,158545,158554,158564],{"__ignoreMap":118},[123,158536,158537,158540,158542],{"class":125,"line":126},[123,158538,158539],{"class":129},"name1 ",[123,158541,134],{"class":133},[123,158543,158544],{"class":143}," '小明'\n",[123,158546,158547,158550,158552],{"class":125,"line":140},[123,158548,158549],{"class":129},"name2 ",[123,158551,134],{"class":133},[123,158553,151467],{"class":143},[123,158555,158556,158559,158561],{"class":125,"line":156},[123,158557,158558],{"class":129},"text ",[123,158560,134],{"class":133},[123,158562,158563],{"class":143}," \"\"\"这是多行字符串\n",[123,158565,158566],{"class":125,"line":168},[123,158567,158568],{"class":143},"可以换行\"\"\"\n",[19,158570,158571],{},"字符串中包含引号：",[113,158573,158575],{"className":115,"code":158574,"language":117,"meta":118,"style":118},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[120,158576,158577,158587,158597],{"__ignoreMap":118},[123,158578,158579,158582,158584],{"class":125,"line":126},[123,158580,158581],{"class":129},"msg ",[123,158583,134],{"class":133},[123,158585,158586],{"class":143}," \"他说:'你好'\"\n",[123,158588,158589,158592,158594],{"class":125,"line":140},[123,158590,158591],{"class":129},"msg2 ",[123,158593,134],{"class":133},[123,158595,158596],{"class":143}," '他说:\"你好\"'\n",[123,158598,158599,158602,158604,158607,158610,158613,158615],{"class":125,"line":156},[123,158600,158601],{"class":129},"msg3 ",[123,158603,134],{"class":133},[123,158605,158606],{"class":143}," \"他说:",[123,158608,158609],{"class":164},"\\\"",[123,158611,158612],{"class":143},"你好",[123,158614,158609],{"class":164},[123,158616,27555],{"class":143},[19,158618,158619],{},"常见转义字符：",[48,158621,158622,158631],{},[51,158623,158624],{},[54,158625,158626,158629],{},[57,158627,158628],{},"写法",[57,158630,103093],{},[64,158632,158633,158643,158652,158662,158671],{},[54,158634,158635,158640],{},[69,158636,158637],{},[120,158638,158639],{},"\\n",[69,158641,158642],{},"换行",[54,158644,158645,158649],{},[69,158646,158647],{},[120,158648,3700],{},[69,158650,158651],{},"制表符",[54,158653,158654,158659],{},[69,158655,158656],{},[120,158657,158658],{},"\\\\",[69,158660,158661],{},"反斜杠",[54,158663,158664,158668],{},[69,158665,158666],{},[120,158667,158609],{},[69,158669,158670],{},"双引号",[54,158672,158673,158678],{},[69,158674,158675],{},[120,158676,158677],{},"\\'",[69,158679,158680],{},"单引号",[14,158682,158684],{"id":158683},"_29-字符串拼接","2.9 字符串拼接",[113,158686,158688],{"className":115,"code":158687,"language":117,"meta":118,"style":118},"name = \"小明\"\nprint(\"你好，\" + name)\n",[120,158689,158690,158698],{"__ignoreMap":118},[123,158691,158692,158694,158696],{"class":125,"line":126},[123,158693,148920],{"class":129},[123,158695,134],{"class":133},[123,158697,151467],{"class":143},[123,158699,158700,158702,158704,158707,158709],{"class":125,"line":140},[123,158701,294],{"class":164},[123,158703,1315],{"class":129},[123,158705,158706],{"class":143},"\"你好，\"",[123,158708,47973],{"class":133},[123,158710,158711],{"class":129}," name)\n",[19,158713,158714],{},"字符串只能和字符串拼接：",[113,158716,158718],{"className":115,"code":158717,"language":117,"meta":118,"style":118},"age = 18\nprint(\"年龄:\" + str(age))\n",[120,158719,158720,158728],{"__ignoreMap":118},[123,158721,158722,158724,158726],{"class":125,"line":126},[123,158723,148930],{"class":129},[123,158725,134],{"class":133},[123,158727,148935],{"class":164},[123,158729,158730,158732,158734,158736,158738,158740],{"class":125,"line":140},[123,158731,294],{"class":164},[123,158733,1315],{"class":129},[123,158735,148901],{"class":143},[123,158737,47973],{"class":133},[123,158739,76319],{"class":164},[123,158741,158742],{"class":129},"(age))\n",[19,158744,158745],{},"更推荐使用格式化字符串。",[14,158747,158749],{"id":158748},"_210-字符串格式化","2.10 字符串格式化",[2587,158751,158753],{"id":158752},"_2101-百分号格式化","2.10.1 百分号格式化",[113,158755,158757],{"className":115,"code":158756,"language":117,"meta":118,"style":118},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[120,158758,158759,158767,158775,158784,158788],{"__ignoreMap":118},[123,158760,158761,158763,158765],{"class":125,"line":126},[123,158762,148920],{"class":129},[123,158764,134],{"class":133},[123,158766,151467],{"class":143},[123,158768,158769,158771,158773],{"class":125,"line":140},[123,158770,148930],{"class":129},[123,158772,134],{"class":133},[123,158774,148935],{"class":164},[123,158776,158777,158779,158781],{"class":125,"line":156},[123,158778,157472],{"class":129},[123,158780,134],{"class":133},[123,158782,158783],{"class":164}," 95.5\n",[123,158785,158786],{"class":125,"line":168},[123,158787,232],{"emptyLinePlaceholder":231},[123,158789,158790,158792,158794,158797,158800,158803,158806,158809,158812,158814,158816],{"class":125,"line":268},[123,158791,294],{"class":164},[123,158793,1315],{"class":129},[123,158795,158796],{"class":143},"\"姓名:",[123,158798,158799],{"class":164},"%s",[123,158801,158802],{"class":143}," 年龄:",[123,158804,158805],{"class":164},"%d",[123,158807,158808],{"class":143}," 分数:",[123,158810,158811],{"class":164},"%.1f",[123,158813,2859],{"class":143},[123,158815,158195],{"class":133},[123,158817,158818],{"class":129}," (name, age, score))\n",[19,158820,158821],{},"常用占位符：",[48,158823,158824,158833],{},[51,158825,158826],{},[54,158827,158828,158831],{},[57,158829,158830],{},"占位符",[57,158832,28291],{},[64,158834,158835,158843,158851],{},[54,158836,158837,158841],{},[69,158838,158839],{},[120,158840,158799],{},[69,158842,157338],{},[54,158844,158845,158849],{},[69,158846,158847],{},[120,158848,158805],{},[69,158850,157316],{},[54,158852,158853,158858],{},[69,158854,158855],{},[120,158856,158857],{},"%f",[69,158859,157327],{},[19,158861,158862],{},"精度控制：",[113,158864,158866],{"className":115,"code":158865,"language":117,"meta":118,"style":118},"price = 12.3456\nprint(\"%.2f\" % price)\n",[120,158867,158868,158877],{"__ignoreMap":118},[123,158869,158870,158872,158874],{"class":125,"line":126},[123,158871,149065],{"class":129},[123,158873,134],{"class":133},[123,158875,158876],{"class":164}," 12.3456\n",[123,158878,158879,158881,158883,158885,158888,158890,158892],{"class":125,"line":140},[123,158880,294],{"class":164},[123,158882,1315],{"class":129},[123,158884,2859],{"class":143},[123,158886,158887],{"class":164},"%.2f",[123,158889,2859],{"class":143},[123,158891,158195],{"class":133},[123,158893,158894],{"class":129}," price)\n",[2587,158896,158898],{"id":158897},"_2102-format方法","2.10.2 format方法",[113,158900,158902],{"className":115,"code":158901,"language":117,"meta":118,"style":118},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[120,158903,158904,158912,158920,158924,158943,158963],{"__ignoreMap":118},[123,158905,158906,158908,158910],{"class":125,"line":126},[123,158907,148920],{"class":129},[123,158909,134],{"class":133},[123,158911,151467],{"class":143},[123,158913,158914,158916,158918],{"class":125,"line":140},[123,158915,148930],{"class":129},[123,158917,134],{"class":133},[123,158919,148935],{"class":164},[123,158921,158922],{"class":125,"line":156},[123,158923,232],{"emptyLinePlaceholder":231},[123,158925,158926,158928,158930,158932,158934,158936,158938,158940],{"class":125,"line":168},[123,158927,294],{"class":164},[123,158929,1315],{"class":129},[123,158931,158796],{"class":143},[123,158933,34871],{"class":164},[123,158935,158802],{"class":143},[123,158937,34871],{"class":164},[123,158939,2859],{"class":143},[123,158941,158942],{"class":129},".format(name, age))\n",[123,158944,158945,158947,158949,158951,158954,158956,158959,158961],{"class":125,"line":268},[123,158946,294],{"class":164},[123,158948,1315],{"class":129},[123,158950,158796],{"class":143},[123,158952,158953],{"class":164},"{0}",[123,158955,158802],{"class":143},[123,158957,158958],{"class":164},"{1}",[123,158960,2859],{"class":143},[123,158962,158942],{"class":129},[123,158964,158965,158967,158969,158971,158974,158976,158979,158981,158984,158986,158988,158991,158993,158995],{"class":125,"line":291},[123,158966,294],{"class":164},[123,158968,1315],{"class":129},[123,158970,158796],{"class":143},[123,158972,158973],{"class":164},"{name}",[123,158975,158802],{"class":143},[123,158977,158978],{"class":164},"{age}",[123,158980,2859],{"class":143},[123,158982,158983],{"class":129},".format(",[123,158985,663],{"class":279},[123,158987,134],{"class":133},[123,158989,158990],{"class":129},"name, ",[123,158992,72621],{"class":279},[123,158994,134],{"class":133},[123,158996,158997],{"class":129},"age))\n",[2587,158999,159001],{"id":159000},"_2103-f-string","2.10.3 f-string",[19,159003,159004],{},"推荐写法：",[113,159006,159008],{"className":115,"code":159007,"language":117,"meta":118,"style":118},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[120,159009,159010,159018,159026,159034,159038],{"__ignoreMap":118},[123,159011,159012,159014,159016],{"class":125,"line":126},[123,159013,148920],{"class":129},[123,159015,134],{"class":133},[123,159017,151467],{"class":143},[123,159019,159020,159022,159024],{"class":125,"line":140},[123,159021,148930],{"class":129},[123,159023,134],{"class":133},[123,159025,148935],{"class":164},[123,159027,159028,159030,159032],{"class":125,"line":156},[123,159029,157472],{"class":129},[123,159031,134],{"class":133},[123,159033,158783],{"class":164},[123,159035,159036],{"class":125,"line":168},[123,159037,232],{"emptyLinePlaceholder":231},[123,159039,159040,159042,159044,159046,159048,159050,159052,159054,159056,159058,159060,159062,159064,159066,159069,159072,159074,159076],{"class":125,"line":268},[123,159041,294],{"class":164},[123,159043,1315],{"class":129},[123,159045,2667],{"class":133},[123,159047,158796],{"class":143},[123,159049,3495],{"class":164},[123,159051,663],{"class":129},[123,159053,3545],{"class":164},[123,159055,158802],{"class":143},[123,159057,3495],{"class":164},[123,159059,72621],{"class":129},[123,159061,3545],{"class":164},[123,159063,158808],{"class":143},[123,159065,3495],{"class":164},[123,159067,159068],{"class":129},"score",[123,159070,159071],{"class":133},":.1f",[123,159073,3545],{"class":164},[123,159075,2859],{"class":143},[123,159077,288],{"class":129},[19,159079,159080],{},"表达式也可以放进去：",[113,159082,159084],{"className":115,"code":159083,"language":117,"meta":118,"style":118},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[120,159085,159086,159094,159102],{"__ignoreMap":118},[123,159087,159088,159090,159092],{"class":125,"line":126},[123,159089,149065],{"class":129},[123,159091,134],{"class":133},[123,159093,149070],{"class":164},[123,159095,159096,159098,159100],{"class":125,"line":140},[123,159097,149075],{"class":129},[123,159099,134],{"class":133},[123,159101,56830],{"class":164},[123,159103,159104,159106,159108,159110,159113,159115,159117,159119,159122,159124,159127],{"class":125,"line":156},[123,159105,294],{"class":164},[123,159107,1315],{"class":129},[123,159109,2667],{"class":133},[123,159111,159112],{"class":143},"\"总价:",[123,159114,3495],{"class":164},[123,159116,149065],{"class":129},[123,159118,3060],{"class":133},[123,159120,159121],{"class":129}," count",[123,159123,3545],{"class":164},[123,159125,159126],{"class":143},"元\"",[123,159128,288],{"class":129},[14,159130,159132],{"id":159131},"_211-input输入","2.11 input输入",[19,159134,159135,159138],{},[120,159136,159137],{},"input()"," 会暂停程序，等待用户输入。",[113,159140,159142],{"className":115,"code":159141,"language":117,"meta":118,"style":118},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[120,159143,159144,159158],{"__ignoreMap":118},[123,159145,159146,159148,159150,159152,159154,159156],{"class":125,"line":126},[123,159147,148920],{"class":129},[123,159149,134],{"class":133},[123,159151,63007],{"class":164},[123,159153,1315],{"class":129},[123,159155,154493],{"class":143},[123,159157,288],{"class":129},[123,159159,159160,159162,159164,159166,159169,159171,159173,159175,159177],{"class":125,"line":140},[123,159161,294],{"class":164},[123,159163,1315],{"class":129},[123,159165,2667],{"class":133},[123,159167,159168],{"class":143},"\"你好，",[123,159170,3495],{"class":164},[123,159172,663],{"class":129},[123,159174,3545],{"class":164},[123,159176,2859],{"class":143},[123,159178,288],{"class":129},[19,159180,159181],{},"输入整数：",[113,159183,159185],{"className":115,"code":159184,"language":117,"meta":118,"style":118},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[120,159186,159187,159205],{"__ignoreMap":118},[123,159188,159189,159191,159193,159195,159197,159199,159201,159203],{"class":125,"line":126},[123,159190,148930],{"class":129},[123,159192,134],{"class":133},[123,159194,4826],{"class":164},[123,159196,1315],{"class":129},[123,159198,56224],{"class":164},[123,159200,1315],{"class":129},[123,159202,154508],{"class":143},[123,159204,32913],{"class":129},[123,159206,159207,159209,159211,159213,159216,159218,159220,159222,159225,159227],{"class":125,"line":140},[123,159208,294],{"class":164},[123,159210,1315],{"class":129},[123,159212,2667],{"class":133},[123,159214,159215],{"class":143},"\"明年你",[123,159217,3495],{"class":164},[123,159219,148930],{"class":129},[123,159221,3086],{"class":133},[123,159223,159224],{"class":164}," 1}",[123,159226,151518],{"class":143},[123,159228,288],{"class":129},[19,159230,159231],{},"输入小数：",[113,159233,159235],{"className":115,"code":159234,"language":117,"meta":118,"style":118},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[120,159236,159237,159256],{"__ignoreMap":118},[123,159238,159239,159241,159243,159245,159247,159249,159251,159254],{"class":125,"line":126},[123,159240,157445],{"class":129},[123,159242,134],{"class":133},[123,159244,112186],{"class":164},[123,159246,1315],{"class":129},[123,159248,56224],{"class":164},[123,159250,1315],{"class":129},[123,159252,159253],{"class":143},"\"请输入身高:\"",[123,159255,32913],{"class":129},[123,159257,159258,159260,159262,159264,159267,159269,159271,159274,159276,159279],{"class":125,"line":140},[123,159259,294],{"class":164},[123,159261,1315],{"class":129},[123,159263,2667],{"class":133},[123,159265,159266],{"class":143},"\"身高:",[123,159268,3495],{"class":164},[123,159270,27403],{"class":129},[123,159272,159273],{"class":133},":.2f",[123,159275,3545],{"class":164},[123,159277,159278],{"class":143},"米\"",[123,159280,288],{"class":129},[14,159282,159284],{"id":159283},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159286,125680],{},[26,159288,159289,159292,159295,159298],{},[29,159290,159291],{},"输入商品单价。",[29,159293,159294],{},"输入购买数量。",[29,159296,159297],{},"输入折扣，例如 0.8 表示八折。",[29,159299,159300],{},"输出最终金额，保留两位小数。",[19,159302,12467],{},[113,159304,159306],{"className":115,"code":159305,"language":117,"meta":118,"style":118},"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",[120,159307,159308,159327,159346,159366,159370,159390,159394,159417,159438,159460],{"__ignoreMap":118},[123,159309,159310,159312,159314,159316,159318,159320,159322,159325],{"class":125,"line":126},[123,159311,149065],{"class":129},[123,159313,134],{"class":133},[123,159315,112186],{"class":164},[123,159317,1315],{"class":129},[123,159319,56224],{"class":164},[123,159321,1315],{"class":129},[123,159323,159324],{"class":143},"\"请输入商品单价:\"",[123,159326,32913],{"class":129},[123,159328,159329,159331,159333,159335,159337,159339,159341,159344],{"class":125,"line":140},[123,159330,149075],{"class":129},[123,159332,134],{"class":133},[123,159334,4826],{"class":164},[123,159336,1315],{"class":129},[123,159338,56224],{"class":164},[123,159340,1315],{"class":129},[123,159342,159343],{"class":143},"\"请输入购买数量:\"",[123,159345,32913],{"class":129},[123,159347,159348,159351,159353,159355,159357,159359,159361,159364],{"class":125,"line":156},[123,159349,159350],{"class":129},"discount ",[123,159352,134],{"class":133},[123,159354,112186],{"class":164},[123,159356,1315],{"class":129},[123,159358,56224],{"class":164},[123,159360,1315],{"class":129},[123,159362,159363],{"class":143},"\"请输入折扣:\"",[123,159365,32913],{"class":129},[123,159367,159368],{"class":125,"line":168},[123,159369,232],{"emptyLinePlaceholder":231},[123,159371,159372,159375,159377,159380,159382,159385,159387],{"class":125,"line":268},[123,159373,159374],{"class":129},"total ",[123,159376,134],{"class":133},[123,159378,159379],{"class":129}," price ",[123,159381,3060],{"class":133},[123,159383,159384],{"class":129}," count ",[123,159386,3060],{"class":133},[123,159388,159389],{"class":129}," discount\n",[123,159391,159392],{"class":125,"line":291},[123,159393,232],{"emptyLinePlaceholder":231},[123,159395,159396,159398,159400,159402,159405,159407,159409,159411,159413,159415],{"class":125,"line":300},[123,159397,294],{"class":164},[123,159399,1315],{"class":129},[123,159401,2667],{"class":133},[123,159403,159404],{"class":143},"\"商品单价:",[123,159406,3495],{"class":164},[123,159408,82212],{"class":129},[123,159410,159273],{"class":133},[123,159412,3545],{"class":164},[123,159414,2859],{"class":143},[123,159416,288],{"class":129},[123,159418,159419,159421,159423,159425,159428,159430,159432,159434,159436],{"class":125,"line":305},[123,159420,294],{"class":164},[123,159422,1315],{"class":129},[123,159424,2667],{"class":133},[123,159426,159427],{"class":143},"\"购买数量:",[123,159429,3495],{"class":164},[123,159431,86830],{"class":129},[123,159433,3545],{"class":164},[123,159435,2859],{"class":143},[123,159437,288],{"class":129},[123,159439,159440,159442,159444,159446,159449,159451,159454,159456,159458],{"class":125,"line":316},[123,159441,294],{"class":164},[123,159443,1315],{"class":129},[123,159445,2667],{"class":133},[123,159447,159448],{"class":143},"\"折扣:",[123,159450,3495],{"class":164},[123,159452,159453],{"class":129},"discount",[123,159455,3545],{"class":164},[123,159457,2859],{"class":143},[123,159459,288],{"class":129},[123,159461,159462,159464,159466,159468,159471,159473,159476,159478,159480,159482],{"class":125,"line":673},[123,159463,294],{"class":164},[123,159465,1315],{"class":129},[123,159467,2667],{"class":133},[123,159469,159470],{"class":143},"\"应付金额:",[123,159472,3495],{"class":164},[123,159474,159475],{"class":129},"total",[123,159477,159273],{"class":133},[123,159479,3545],{"class":164},[123,159481,159126],{"class":143},[123,159483,288],{"class":129},[14,159485,159487],{"id":159486},"_213-易错点","2.13 易错点",[26,159489,159490,159495,159501,159509,159512],{},[29,159491,159492,159494],{},[120,159493,159137],{}," 的结果是字符串，做运算前要转换。",[29,159496,159497,159498,2494],{},"字符串拼接时，数字要先 ",[120,159499,159500],{},"str()",[29,159502,159503,159505,159506,159508],{},[120,159504,134],{}," 是赋值，",[120,159507,5391],{}," 是比较。",[29,159510,159511],{},"Python 没有自增自减运算符。",[29,159513,159514],{},"浮点数计算可能有精度误差：",[113,159516,159518],{"className":115,"code":159517,"language":117,"meta":118,"style":118},"print(0.1 + 0.2)\n",[120,159519,159520],{"__ignoreMap":118},[123,159521,159522,159524,159526,159528,159530,159533],{"class":125,"line":126},[123,159523,294],{"class":164},[123,159525,1315],{"class":129},[123,159527,88606],{"class":164},[123,159529,47973],{"class":133},[123,159531,159532],{"class":164}," 0.2",[123,159534,288],{"class":129},[19,159536,159537,159538,159541],{},"金额计算如果要求严格，可以后续学习 ",[120,159539,159540],{},"decimal"," 模块。",[14,159543,159545],{"id":159544},"_214-本章练习","2.14 本章练习",[26,159547,159548,159551,159554,159557,159560],{},[29,159549,159550],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,159552,159553],{},"输入圆的半径，计算面积，保留两位小数。",[29,159555,159556],{},"输入工资和奖金，计算总收入。",[29,159558,159559],{},"输入摄氏温度，转换为华氏温度。",[29,159561,159562],{},"写一个 BMI 计算程序：",[113,159564,159567],{"className":159565,"code":159566,"language":7621,"meta":118},[7619],"BMI = 体重kg \u002F 身高m ** 2\n",[120,159568,159566],{"__ignoreMap":118},[2526,159570,159571],{},"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":118,"searchDepth":140,"depth":140,"links":159573},[159574,159575,159576,159577,159578,159579,159580,159586,159587,159588,159593,159594,159595,159596],{"id":157135,"depth":140,"text":157136},{"id":157244,"depth":140,"text":157245},{"id":157415,"depth":140,"text":157416},{"id":157492,"depth":140,"text":157493},{"id":53138,"depth":140,"text":53139},{"id":157798,"depth":140,"text":157799},{"id":158024,"depth":140,"text":158025,"children":159581},[159582,159583,159584,159585],{"id":158028,"depth":156,"text":158029},{"id":158222,"depth":156,"text":158223},{"id":158310,"depth":156,"text":158311},{"id":158416,"depth":156,"text":158417},{"id":158525,"depth":140,"text":158526},{"id":158683,"depth":140,"text":158684},{"id":158748,"depth":140,"text":158749,"children":159589},[159590,159591,159592],{"id":158752,"depth":156,"text":158753},{"id":158897,"depth":156,"text":158898},{"id":159000,"depth":156,"text":159001},{"id":159131,"depth":140,"text":159132},{"id":159283,"depth":140,"text":159284},{"id":159486,"depth":140,"text":159487},{"id":159544,"depth":140,"text":159545},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157127,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159603,"title":159604,"body":159605,"description":2544,"extension":2545,"meta":161241,"navigation":231,"path":161242,"seo":161243,"stem":161244,"__hash__":161245},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159606,"toc":161222},[159607,159610,159614,159617,159632,159635,159663,159667,159717,159719,159735,159738,159764,159767,159771,159838,159841,159857,159861,159864,159982,159985,159992,160041,160047,160051,160054,160167,160170,160174,160178,160181,160231,160235,160238,160288,160292,160295,160333,160337,160340,160386,160389,160424,160428,160433,160436,160482,160484,160551,160555,160561,160672,160681,160685,160687,160698,160700,160866,160870,160872,160886,160888,161102,161106,161125,161142,161145,161191,161195,161219],[10,159608,159604],{"id":159609},"_3-判断语句",[14,159611,159613],{"id":159612},"_31-布尔值","3.1 布尔值",[19,159615,159616],{},"判断语句依赖布尔值：",[113,159618,159620],{"className":115,"code":159619,"language":117,"meta":118,"style":118},"True\nFalse\n",[120,159621,159622,159627],{"__ignoreMap":118},[123,159623,159624],{"class":125,"line":126},[123,159625,159626],{"class":164},"True\n",[123,159628,159629],{"class":125,"line":140},[123,159630,159631],{"class":164},"False\n",[19,159633,159634],{},"比较表达式会产生布尔值：",[113,159636,159638],{"className":115,"code":159637,"language":117,"meta":118,"style":118},"age = 18\nprint(age >= 18)  # True\n",[120,159639,159640,159648],{"__ignoreMap":118},[123,159641,159642,159644,159646],{"class":125,"line":126},[123,159643,148930],{"class":129},[123,159645,134],{"class":133},[123,159647,148935],{"class":164},[123,159649,159650,159652,159654,159656,159658,159660],{"class":125,"line":140},[123,159651,294],{"class":164},[123,159653,157882],{"class":129},[123,159655,4164],{"class":133},[123,159657,158399],{"class":164},[123,159659,48215],{"class":129},[123,159661,159662],{"class":2673},"# True\n",[14,159664,159666],{"id":159665},"_32-if基础语法","3.2 if基础语法",[113,159668,159670],{"className":115,"code":159669,"language":117,"meta":118,"style":118},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[120,159671,159672,159690,159694,159706],{"__ignoreMap":118},[123,159673,159674,159676,159678,159680,159682,159684,159686,159688],{"class":125,"line":126},[123,159675,148930],{"class":129},[123,159677,134],{"class":133},[123,159679,4826],{"class":164},[123,159681,1315],{"class":129},[123,159683,56224],{"class":164},[123,159685,1315],{"class":129},[123,159687,154508],{"class":143},[123,159689,32913],{"class":129},[123,159691,159692],{"class":125,"line":140},[123,159693,232],{"emptyLinePlaceholder":231},[123,159695,159696,159698,159700,159702,159704],{"class":125,"line":156},[123,159697,3998],{"class":133},[123,159699,18135],{"class":129},[123,159701,4164],{"class":133},[123,159703,158399],{"class":164},[123,159705,1344],{"class":129},[123,159707,159708,159710,159712,159715],{"class":125,"line":168},[123,159709,33714],{"class":164},[123,159711,1315],{"class":129},[123,159713,159714],{"class":143},"\"可以进入网吧\"",[123,159716,288],{"class":129},[19,159718,11457],{},[26,159720,159721,159726,159729,159732],{},[29,159722,159723,159725],{},[120,159724,3998],{}," 后面是条件表达式。",[29,159727,159728],{},"条件后面必须写冒号。",[29,159730,159731],{},"条件成立时执行缩进代码块。",[29,159733,159734],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159736,159737],{},"错误示例：",[113,159739,159741],{"className":115,"code":159740,"language":117,"meta":118,"style":118},"if age >= 18\n    print(\"可以进入\")\n",[120,159742,159743,159753],{"__ignoreMap":118},[123,159744,159745,159747,159749,159751],{"class":125,"line":126},[123,159746,3998],{"class":133},[123,159748,18135],{"class":129},[123,159750,4164],{"class":133},[123,159752,148935],{"class":164},[123,159754,159755,159757,159759,159762],{"class":125,"line":140},[123,159756,33714],{"class":164},[123,159758,1315],{"class":129},[123,159760,159761],{"class":143},"\"可以进入\"",[123,159763,288],{"class":129},[19,159765,159766],{},"缺少冒号。",[14,159768,159770],{"id":159769},"_33-if-else","3.3 if else",[113,159772,159774],{"className":115,"code":159773,"language":117,"meta":118,"style":118},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[120,159775,159776,159794,159798,159810,159821,159827],{"__ignoreMap":118},[123,159777,159778,159780,159782,159784,159786,159788,159790,159792],{"class":125,"line":126},[123,159779,148930],{"class":129},[123,159781,134],{"class":133},[123,159783,4826],{"class":164},[123,159785,1315],{"class":129},[123,159787,56224],{"class":164},[123,159789,1315],{"class":129},[123,159791,154508],{"class":143},[123,159793,32913],{"class":129},[123,159795,159796],{"class":125,"line":140},[123,159797,232],{"emptyLinePlaceholder":231},[123,159799,159800,159802,159804,159806,159808],{"class":125,"line":156},[123,159801,3998],{"class":133},[123,159803,18135],{"class":129},[123,159805,4164],{"class":133},[123,159807,158399],{"class":164},[123,159809,1344],{"class":129},[123,159811,159812,159814,159816,159819],{"class":125,"line":168},[123,159813,33714],{"class":164},[123,159815,1315],{"class":129},[123,159817,159818],{"class":143},"\"成年人\"",[123,159820,288],{"class":129},[123,159822,159823,159825],{"class":125,"line":268},[123,159824,4155],{"class":133},[123,159826,1344],{"class":129},[123,159828,159829,159831,159833,159836],{"class":125,"line":291},[123,159830,33714],{"class":164},[123,159832,1315],{"class":129},[123,159834,159835],{"class":143},"\"未成年人\"",[123,159837,288],{"class":129},[19,159839,159840],{},"执行逻辑：",[26,159842,159843,159849,159854],{},[29,159844,159845,159846,159848],{},"条件成立，执行 ",[120,159847,3998],{}," 代码块。",[29,159850,159851,159852,159848],{},"条件不成立，执行 ",[120,159853,4155],{},[29,159855,159856],{},"两个代码块只会执行其中一个。",[14,159858,159860],{"id":159859},"_34-if-elif-else","3.4 if elif else",[19,159862,159863],{},"多条件判断：",[113,159865,159867],{"className":115,"code":159866,"language":117,"meta":118,"style":118},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[120,159868,159869,159887,159891,159905,159916,159930,159941,159954,159965,159971],{"__ignoreMap":118},[123,159870,159871,159873,159875,159877,159879,159881,159883,159885],{"class":125,"line":126},[123,159872,157472],{"class":129},[123,159874,134],{"class":133},[123,159876,4826],{"class":164},[123,159878,1315],{"class":129},[123,159880,56224],{"class":164},[123,159882,1315],{"class":129},[123,159884,154523],{"class":143},[123,159886,32913],{"class":129},[123,159888,159889],{"class":125,"line":140},[123,159890,232],{"emptyLinePlaceholder":231},[123,159892,159893,159895,159898,159900,159903],{"class":125,"line":156},[123,159894,3998],{"class":133},[123,159896,159897],{"class":129}," score ",[123,159899,4164],{"class":133},[123,159901,159902],{"class":164}," 90",[123,159904,1344],{"class":129},[123,159906,159907,159909,159911,159914],{"class":125,"line":168},[123,159908,33714],{"class":164},[123,159910,1315],{"class":129},[123,159912,159913],{"class":143},"\"优秀\"",[123,159915,288],{"class":129},[123,159917,159918,159921,159923,159925,159928],{"class":125,"line":268},[123,159919,159920],{"class":133},"elif",[123,159922,159897],{"class":129},[123,159924,4164],{"class":133},[123,159926,159927],{"class":164}," 80",[123,159929,1344],{"class":129},[123,159931,159932,159934,159936,159939],{"class":125,"line":291},[123,159933,33714],{"class":164},[123,159935,1315],{"class":129},[123,159937,159938],{"class":143},"\"良好\"",[123,159940,288],{"class":129},[123,159942,159943,159945,159947,159949,159952],{"class":125,"line":300},[123,159944,159920],{"class":133},[123,159946,159897],{"class":129},[123,159948,4164],{"class":133},[123,159950,159951],{"class":164}," 60",[123,159953,1344],{"class":129},[123,159955,159956,159958,159960,159963],{"class":125,"line":305},[123,159957,33714],{"class":164},[123,159959,1315],{"class":129},[123,159961,159962],{"class":143},"\"及格\"",[123,159964,288],{"class":129},[123,159966,159967,159969],{"class":125,"line":316},[123,159968,4155],{"class":133},[123,159970,1344],{"class":129},[123,159972,159973,159975,159977,159980],{"class":125,"line":673},[123,159974,33714],{"class":164},[123,159976,1315],{"class":129},[123,159978,159979],{"class":143},"\"不及格\"",[123,159981,288],{"class":129},[19,159983,159984],{},"注意判断顺序很重要。",[19,159986,159987,159988,159991],{},"如果把 ",[120,159989,159990],{},"score >= 60"," 放在最前面：",[113,159993,159995],{"className":115,"code":159994,"language":117,"meta":118,"style":118},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[120,159996,159997,160009,160019,160031],{"__ignoreMap":118},[123,159998,159999,160001,160003,160005,160007],{"class":125,"line":126},[123,160000,3998],{"class":133},[123,160002,159897],{"class":129},[123,160004,4164],{"class":133},[123,160006,159951],{"class":164},[123,160008,1344],{"class":129},[123,160010,160011,160013,160015,160017],{"class":125,"line":140},[123,160012,33714],{"class":164},[123,160014,1315],{"class":129},[123,160016,159962],{"class":143},[123,160018,288],{"class":129},[123,160020,160021,160023,160025,160027,160029],{"class":125,"line":156},[123,160022,159920],{"class":133},[123,160024,159897],{"class":129},[123,160026,4164],{"class":133},[123,160028,159902],{"class":164},[123,160030,1344],{"class":129},[123,160032,160033,160035,160037,160039],{"class":125,"line":168},[123,160034,33714],{"class":164},[123,160036,1315],{"class":129},[123,160038,159913],{"class":143},[123,160040,288],{"class":129},[19,160042,160043,160044,160046],{},"成绩 95 会先满足 ",[120,160045,159990],{},"，后面的优秀分支就不会执行。",[14,160048,160050],{"id":160049},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160052,160053],{},"嵌套判断就是在一个判断内部再写判断。",[113,160055,160057],{"className":115,"code":160056,"language":117,"meta":118,"style":118},"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",[120,160058,160059,160077,160092,160096,160108,160122,160132,160139,160150,160156],{"__ignoreMap":118},[123,160060,160061,160063,160065,160067,160069,160071,160073,160075],{"class":125,"line":126},[123,160062,148930],{"class":129},[123,160064,134],{"class":133},[123,160066,4826],{"class":164},[123,160068,1315],{"class":129},[123,160070,56224],{"class":164},[123,160072,1315],{"class":129},[123,160074,154508],{"class":143},[123,160076,32913],{"class":129},[123,160078,160079,160081,160083,160085,160087,160090],{"class":125,"line":140},[123,160080,158475],{"class":129},[123,160082,134],{"class":133},[123,160084,63007],{"class":164},[123,160086,1315],{"class":129},[123,160088,160089],{"class":143},"\"是否有票(y\u002Fn):\"",[123,160091,288],{"class":129},[123,160093,160094],{"class":125,"line":156},[123,160095,232],{"emptyLinePlaceholder":231},[123,160097,160098,160100,160102,160104,160106],{"class":125,"line":168},[123,160099,3998],{"class":133},[123,160101,18135],{"class":129},[123,160103,4164],{"class":133},[123,160105,158399],{"class":164},[123,160107,1344],{"class":129},[123,160109,160110,160112,160115,160117,160120],{"class":125,"line":268},[123,160111,1711],{"class":133},[123,160113,160114],{"class":129}," has_ticket ",[123,160116,5391],{"class":133},[123,160118,160119],{"class":143}," \"y\"",[123,160121,1344],{"class":129},[123,160123,160124,160126,160128,160130],{"class":125,"line":291},[123,160125,34863],{"class":164},[123,160127,1315],{"class":129},[123,160129,159761],{"class":143},[123,160131,288],{"class":129},[123,160133,160134,160137],{"class":125,"line":300},[123,160135,160136],{"class":133},"    else",[123,160138,1344],{"class":129},[123,160140,160141,160143,160145,160148],{"class":125,"line":305},[123,160142,34863],{"class":164},[123,160144,1315],{"class":129},[123,160146,160147],{"class":143},"\"请先买票\"",[123,160149,288],{"class":129},[123,160151,160152,160154],{"class":125,"line":316},[123,160153,4155],{"class":133},[123,160155,1344],{"class":129},[123,160157,160158,160160,160162,160165],{"class":125,"line":673},[123,160159,33714],{"class":164},[123,160161,1315],{"class":129},[123,160163,160164],{"class":143},"\"未成年人禁止进入\"",[123,160166,288],{"class":129},[19,160168,160169],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160171,160173],{"id":160172},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[2587,160175,160177],{"id":160176},"_361-and","3.6.1 and",[19,160179,160180],{},"两个条件都成立才成立。",[113,160182,160184],{"className":115,"code":160183,"language":117,"meta":118,"style":118},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[120,160185,160186,160194,160202,160206,160221],{"__ignoreMap":118},[123,160187,160188,160190,160192],{"class":125,"line":126},[123,160189,148930],{"class":129},[123,160191,134],{"class":133},[123,160193,90460],{"class":164},[123,160195,160196,160198,160200],{"class":125,"line":140},[123,160197,158475],{"class":129},[123,160199,134],{"class":133},[123,160201,155713],{"class":164},[123,160203,160204],{"class":125,"line":156},[123,160205,232],{"emptyLinePlaceholder":231},[123,160207,160208,160210,160212,160214,160216,160218],{"class":125,"line":168},[123,160209,3998],{"class":133},[123,160211,18135],{"class":129},[123,160213,4164],{"class":133},[123,160215,158399],{"class":164},[123,160217,122817],{"class":133},[123,160219,160220],{"class":129}," has_ticket:\n",[123,160222,160223,160225,160227,160229],{"class":125,"line":268},[123,160224,33714],{"class":164},[123,160226,1315],{"class":129},[123,160228,159761],{"class":143},[123,160230,288],{"class":129},[2587,160232,160234],{"id":160233},"_362-or","3.6.2 or",[19,160236,160237],{},"只要一个条件成立就成立。",[113,160239,160241],{"className":115,"code":160240,"language":117,"meta":118,"style":118},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[120,160242,160243,160252,160261,160265,160277],{"__ignoreMap":118},[123,160244,160245,160248,160250],{"class":125,"line":126},[123,160246,160247],{"class":129},"is_vip ",[123,160249,134],{"class":133},[123,160251,128195],{"class":164},[123,160253,160254,160257,160259],{"class":125,"line":140},[123,160255,160256],{"class":129},"coupon ",[123,160258,134],{"class":133},[123,160260,155713],{"class":164},[123,160262,160263],{"class":125,"line":156},[123,160264,232],{"emptyLinePlaceholder":231},[123,160266,160267,160269,160272,160274],{"class":125,"line":168},[123,160268,3998],{"class":133},[123,160270,160271],{"class":129}," is_vip ",[123,160273,117478],{"class":133},[123,160275,160276],{"class":129}," coupon:\n",[123,160278,160279,160281,160283,160286],{"class":125,"line":268},[123,160280,33714],{"class":164},[123,160282,1315],{"class":129},[123,160284,160285],{"class":143},"\"可以享受优惠\"",[123,160287,288],{"class":129},[2587,160289,160291],{"id":160290},"_363-not","3.6.3 not",[19,160293,160294],{},"取反。",[113,160296,160298],{"className":115,"code":160297,"language":117,"meta":118,"style":118},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[120,160299,160300,160309,160313,160322],{"__ignoreMap":118},[123,160301,160302,160305,160307],{"class":125,"line":126},[123,160303,160304],{"class":129},"is_closed ",[123,160306,134],{"class":133},[123,160308,128195],{"class":164},[123,160310,160311],{"class":125,"line":140},[123,160312,232],{"emptyLinePlaceholder":231},[123,160314,160315,160317,160319],{"class":125,"line":156},[123,160316,3998],{"class":133},[123,160318,1714],{"class":133},[123,160320,160321],{"class":129}," is_closed:\n",[123,160323,160324,160326,160328,160331],{"class":125,"line":168},[123,160325,33714],{"class":164},[123,160327,1315],{"class":129},[123,160329,160330],{"class":143},"\"店铺营业中\"",[123,160332,288],{"class":129},[14,160334,160336],{"id":160335},"_37-链式比较","3.7 链式比较",[19,160338,160339],{},"Python 支持链式比较：",[113,160341,160343],{"className":115,"code":160342,"language":117,"meta":118,"style":118},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[120,160344,160345,160354,160358,160375],{"__ignoreMap":118},[123,160346,160347,160349,160351],{"class":125,"line":126},[123,160348,157472],{"class":129},[123,160350,134],{"class":133},[123,160352,160353],{"class":164}," 85\n",[123,160355,160356],{"class":125,"line":140},[123,160357,232],{"emptyLinePlaceholder":231},[123,160359,160360,160362,160364,160367,160369,160371,160373],{"class":125,"line":156},[123,160361,3998],{"class":133},[123,160363,6532],{"class":164},[123,160365,160366],{"class":133}," \u003C=",[123,160368,159897],{"class":129},[123,160370,4053],{"class":133},[123,160372,8187],{"class":164},[123,160374,1344],{"class":129},[123,160376,160377,160379,160381,160384],{"class":125,"line":168},[123,160378,33714],{"class":164},[123,160380,1315],{"class":129},[123,160382,160383],{"class":143},"\"成绩合法\"",[123,160385,288],{"class":129},[19,160387,160388],{},"等价于：",[113,160390,160392],{"className":115,"code":160391,"language":117,"meta":118,"style":118},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[120,160393,160394,160414],{"__ignoreMap":118},[123,160395,160396,160398,160400,160402,160404,160406,160408,160410,160412],{"class":125,"line":126},[123,160397,3998],{"class":133},[123,160399,159897],{"class":129},[123,160401,4164],{"class":133},[123,160403,6532],{"class":164},[123,160405,122817],{"class":133},[123,160407,159897],{"class":129},[123,160409,4053],{"class":133},[123,160411,8187],{"class":164},[123,160413,1344],{"class":129},[123,160415,160416,160418,160420,160422],{"class":125,"line":140},[123,160417,33714],{"class":164},[123,160419,1315],{"class":129},[123,160421,160383],{"class":143},[123,160423,288],{"class":129},[14,160425,160427],{"id":160426},"_38-真值和假值","3.8 真值和假值",[19,160429,118855,160430,160432],{},[120,160431,3998],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160434,160435],{},"假值：",[113,160437,160439],{"className":115,"code":160438,"language":117,"meta":118,"style":118},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[120,160440,160441,160445,160450,160454,160458,160463,160467,160471,160476],{"__ignoreMap":118},[123,160442,160443],{"class":125,"line":126},[123,160444,159631],{"class":164},[123,160446,160447],{"class":125,"line":140},[123,160448,160449],{"class":164},"None\n",[123,160451,160452],{"class":125,"line":156},[123,160453,5526],{"class":164},[123,160455,160456],{"class":125,"line":168},[123,160457,34754],{"class":164},[123,160459,160460],{"class":125,"line":268},[123,160461,160462],{"class":143},"\"\"\n",[123,160464,160465],{"class":125,"line":291},[123,160466,34769],{"class":129},[123,160468,160469],{"class":125,"line":300},[123,160470,4420],{"class":129},[123,160472,160473],{"class":125,"line":305},[123,160474,160475],{"class":129},"{}\n",[123,160477,160478,160480],{"class":125,"line":316},[123,160479,157404],{"class":164},[123,160481,4420],{"class":129},[19,160483,1572],{},[113,160485,160487],{"className":115,"code":160486,"language":117,"meta":118,"style":118},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[120,160488,160489,160503,160507,160514,160534,160540],{"__ignoreMap":118},[123,160490,160491,160493,160495,160497,160499,160501],{"class":125,"line":126},[123,160492,148920],{"class":129},[123,160494,134],{"class":133},[123,160496,63007],{"class":164},[123,160498,1315],{"class":129},[123,160500,154493],{"class":143},[123,160502,288],{"class":129},[123,160504,160505],{"class":125,"line":140},[123,160506,232],{"emptyLinePlaceholder":231},[123,160508,160509,160511],{"class":125,"line":156},[123,160510,3998],{"class":133},[123,160512,160513],{"class":129}," name:\n",[123,160515,160516,160518,160520,160522,160524,160526,160528,160530,160532],{"class":125,"line":168},[123,160517,33714],{"class":164},[123,160519,1315],{"class":129},[123,160521,2667],{"class":133},[123,160523,159168],{"class":143},[123,160525,3495],{"class":164},[123,160527,663],{"class":129},[123,160529,3545],{"class":164},[123,160531,2859],{"class":143},[123,160533,288],{"class":129},[123,160535,160536,160538],{"class":125,"line":268},[123,160537,4155],{"class":133},[123,160539,1344],{"class":129},[123,160541,160542,160544,160546,160549],{"class":125,"line":291},[123,160543,33714],{"class":164},[123,160545,1315],{"class":129},[123,160547,160548],{"class":143},"\"姓名不能为空\"",[123,160550,288],{"class":129},[14,160552,160554],{"id":160553},"_39-match语句","3.9 match语句",[19,160556,160557,160558,160560],{},"Python 3.10 开始支持 ",[120,160559,73665],{},"。它适合处理固定选项。",[113,160562,160564],{"className":115,"code":160563,"language":117,"meta":118,"style":118},"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",[120,160565,160566,160582,160586,160593,160603,160614,160623,160634,160643,160654,160661],{"__ignoreMap":118},[123,160567,160568,160571,160573,160575,160577,160580],{"class":125,"line":126},[123,160569,160570],{"class":129},"command ",[123,160572,134],{"class":133},[123,160574,63007],{"class":164},[123,160576,1315],{"class":129},[123,160578,160579],{"class":143},"\"请输入命令:\"",[123,160581,288],{"class":129},[123,160583,160584],{"class":125,"line":140},[123,160585,232],{"emptyLinePlaceholder":231},[123,160587,160588,160590],{"class":125,"line":156},[123,160589,73665],{"class":133},[123,160591,160592],{"class":129}," command:\n",[123,160594,160595,160598,160601],{"class":125,"line":168},[123,160596,160597],{"class":133},"    case",[123,160599,160600],{"class":143}," \"start\"",[123,160602,1344],{"class":129},[123,160604,160605,160607,160609,160612],{"class":125,"line":268},[123,160606,34863],{"class":164},[123,160608,1315],{"class":129},[123,160610,160611],{"class":143},"\"启动\"",[123,160613,288],{"class":129},[123,160615,160616,160618,160621],{"class":125,"line":291},[123,160617,160597],{"class":133},[123,160619,160620],{"class":143}," \"stop\"",[123,160622,1344],{"class":129},[123,160624,160625,160627,160629,160632],{"class":125,"line":300},[123,160626,34863],{"class":164},[123,160628,1315],{"class":129},[123,160630,160631],{"class":143},"\"停止\"",[123,160633,288],{"class":129},[123,160635,160636,160638,160641],{"class":125,"line":305},[123,160637,160597],{"class":133},[123,160639,160640],{"class":143}," \"restart\"",[123,160642,1344],{"class":129},[123,160644,160645,160647,160649,160652],{"class":125,"line":316},[123,160646,34863],{"class":164},[123,160648,1315],{"class":129},[123,160650,160651],{"class":143},"\"重启\"",[123,160653,288],{"class":129},[123,160655,160656,160658],{"class":125,"line":673},[123,160657,160597],{"class":133},[123,160659,160660],{"class":129}," _:\n",[123,160662,160663,160665,160667,160670],{"class":125,"line":692},[123,160664,34863],{"class":164},[123,160666,1315],{"class":129},[123,160668,160669],{"class":143},"\"未知命令\"",[123,160671,288],{"class":129},[19,160673,160674,160675,160677,160678,160680],{},"入门阶段掌握 ",[120,160676,156772],{}," 更重要，",[120,160679,73665],{}," 可以作为补充。",[14,160682,160684],{"id":160683},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160686,125680],{},[26,160688,160689,160692,160695],{},[29,160690,160691],{},"输入成绩。",[29,160693,160694],{},"判断成绩是否合法。",[29,160696,160697],{},"输出等级。",[19,160699,12467],{},[113,160701,160703],{"className":115,"code":160702,"language":117,"meta":118,"style":118},"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",[120,160704,160705,160723,160727,160745,160756,160768,160779,160791,160802,160815,160826,160838,160849,160855],{"__ignoreMap":118},[123,160706,160707,160709,160711,160713,160715,160717,160719,160721],{"class":125,"line":126},[123,160708,157472],{"class":129},[123,160710,134],{"class":133},[123,160712,112186],{"class":164},[123,160714,1315],{"class":129},[123,160716,56224],{"class":164},[123,160718,1315],{"class":129},[123,160720,154523],{"class":143},[123,160722,32913],{"class":129},[123,160724,160725],{"class":125,"line":140},[123,160726,232],{"emptyLinePlaceholder":231},[123,160728,160729,160731,160733,160735,160737,160739,160741,160743],{"class":125,"line":156},[123,160730,3998],{"class":133},[123,160732,1714],{"class":133},[123,160734,6532],{"class":164},[123,160736,160366],{"class":133},[123,160738,159897],{"class":129},[123,160740,4053],{"class":133},[123,160742,8187],{"class":164},[123,160744,1344],{"class":129},[123,160746,160747,160749,160751,160754],{"class":125,"line":168},[123,160748,33714],{"class":164},[123,160750,1315],{"class":129},[123,160752,160753],{"class":143},"\"成绩不合法\"",[123,160755,288],{"class":129},[123,160757,160758,160760,160762,160764,160766],{"class":125,"line":268},[123,160759,159920],{"class":133},[123,160761,159897],{"class":129},[123,160763,4164],{"class":133},[123,160765,159902],{"class":164},[123,160767,1344],{"class":129},[123,160769,160770,160772,160774,160777],{"class":125,"line":291},[123,160771,33714],{"class":164},[123,160773,1315],{"class":129},[123,160775,160776],{"class":143},"\"等级:A\"",[123,160778,288],{"class":129},[123,160780,160781,160783,160785,160787,160789],{"class":125,"line":300},[123,160782,159920],{"class":133},[123,160784,159897],{"class":129},[123,160786,4164],{"class":133},[123,160788,159927],{"class":164},[123,160790,1344],{"class":129},[123,160792,160793,160795,160797,160800],{"class":125,"line":305},[123,160794,33714],{"class":164},[123,160796,1315],{"class":129},[123,160798,160799],{"class":143},"\"等级:B\"",[123,160801,288],{"class":129},[123,160803,160804,160806,160808,160810,160813],{"class":125,"line":316},[123,160805,159920],{"class":133},[123,160807,159897],{"class":129},[123,160809,4164],{"class":133},[123,160811,160812],{"class":164}," 70",[123,160814,1344],{"class":129},[123,160816,160817,160819,160821,160824],{"class":125,"line":673},[123,160818,33714],{"class":164},[123,160820,1315],{"class":129},[123,160822,160823],{"class":143},"\"等级:C\"",[123,160825,288],{"class":129},[123,160827,160828,160830,160832,160834,160836],{"class":125,"line":692},[123,160829,159920],{"class":133},[123,160831,159897],{"class":129},[123,160833,4164],{"class":133},[123,160835,159951],{"class":164},[123,160837,1344],{"class":129},[123,160839,160840,160842,160844,160847],{"class":125,"line":713},[123,160841,33714],{"class":164},[123,160843,1315],{"class":129},[123,160845,160846],{"class":143},"\"等级:D\"",[123,160848,288],{"class":129},[123,160850,160851,160853],{"class":125,"line":718},[123,160852,4155],{"class":133},[123,160854,1344],{"class":129},[123,160856,160857,160859,160861,160864],{"class":125,"line":1138},[123,160858,33714],{"class":164},[123,160860,1315],{"class":129},[123,160862,160863],{"class":143},"\"等级:E\"",[123,160865,288],{"class":129},[14,160867,160869],{"id":160868},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160871,125680],{},[26,160873,160874,160877,160880,160883],{},[29,160875,160876],{},"输入消费金额。",[29,160878,160879],{},"输入会员等级，普通、银卡、金卡。",[29,160881,160882],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160884,160885],{},"满 500 再减 50。",[19,160887,12467],{},[113,160889,160891],{"className":115,"code":160890,"language":117,"meta":118,"style":118},"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",[120,160892,160893,160913,160929,160933,160941,160945,160959,160969,160982,160991,161004,161012,161018,161029,161033,161047,161051,161065,161075,161079],{"__ignoreMap":118},[123,160894,160895,160898,160900,160902,160904,160906,160908,160911],{"class":125,"line":126},[123,160896,160897],{"class":129},"amount ",[123,160899,134],{"class":133},[123,160901,112186],{"class":164},[123,160903,1315],{"class":129},[123,160905,56224],{"class":164},[123,160907,1315],{"class":129},[123,160909,160910],{"class":143},"\"请输入消费金额:\"",[123,160912,32913],{"class":129},[123,160914,160915,160918,160920,160922,160924,160927],{"class":125,"line":140},[123,160916,160917],{"class":129},"level ",[123,160919,134],{"class":133},[123,160921,63007],{"class":164},[123,160923,1315],{"class":129},[123,160925,160926],{"class":143},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[123,160928,288],{"class":129},[123,160930,160931],{"class":125,"line":156},[123,160932,232],{"emptyLinePlaceholder":231},[123,160934,160935,160937,160939],{"class":125,"line":168},[123,160936,159350],{"class":129},[123,160938,134],{"class":133},[123,160940,58101],{"class":164},[123,160942,160943],{"class":125,"line":268},[123,160944,232],{"emptyLinePlaceholder":231},[123,160946,160947,160949,160952,160954,160957],{"class":125,"line":291},[123,160948,3998],{"class":133},[123,160950,160951],{"class":129}," level ",[123,160953,5391],{"class":133},[123,160955,160956],{"class":143}," \"银卡\"",[123,160958,1344],{"class":129},[123,160960,160961,160964,160966],{"class":125,"line":300},[123,160962,160963],{"class":129},"    discount ",[123,160965,134],{"class":133},[123,160967,160968],{"class":164}," 0.9\n",[123,160970,160971,160973,160975,160977,160980],{"class":125,"line":305},[123,160972,159920],{"class":133},[123,160974,160951],{"class":129},[123,160976,5391],{"class":133},[123,160978,160979],{"class":143}," \"金卡\"",[123,160981,1344],{"class":129},[123,160983,160984,160986,160988],{"class":125,"line":316},[123,160985,160963],{"class":129},[123,160987,134],{"class":133},[123,160989,160990],{"class":164}," 0.8\n",[123,160992,160993,160995,160997,160999,161002],{"class":125,"line":673},[123,160994,159920],{"class":133},[123,160996,160951],{"class":129},[123,160998,5391],{"class":133},[123,161000,161001],{"class":143}," \"普通\"",[123,161003,1344],{"class":129},[123,161005,161006,161008,161010],{"class":125,"line":692},[123,161007,160963],{"class":129},[123,161009,134],{"class":133},[123,161011,58101],{"class":164},[123,161013,161014,161016],{"class":125,"line":713},[123,161015,4155],{"class":133},[123,161017,1344],{"class":129},[123,161019,161020,161022,161024,161027],{"class":125,"line":718},[123,161021,33714],{"class":164},[123,161023,1315],{"class":129},[123,161025,161026],{"class":143},"\"会员等级输入错误，按普通会员计算\"",[123,161028,288],{"class":129},[123,161030,161031],{"class":125,"line":1138},[123,161032,232],{"emptyLinePlaceholder":231},[123,161034,161035,161038,161040,161043,161045],{"class":125,"line":1429},[123,161036,161037],{"class":129},"pay ",[123,161039,134],{"class":133},[123,161041,161042],{"class":129}," amount ",[123,161044,3060],{"class":133},[123,161046,159389],{"class":129},[123,161048,161049],{"class":125,"line":1439},[123,161050,232],{"emptyLinePlaceholder":231},[123,161052,161053,161055,161058,161060,161063],{"class":125,"line":1444},[123,161054,3998],{"class":133},[123,161056,161057],{"class":129}," pay ",[123,161059,4164],{"class":133},[123,161061,161062],{"class":164}," 500",[123,161064,1344],{"class":129},[123,161066,161067,161070,161072],{"class":125,"line":1453},[123,161068,161069],{"class":129},"    pay ",[123,161071,152366],{"class":133},[123,161073,161074],{"class":164}," 50\n",[123,161076,161077],{"class":125,"line":1458},[123,161078,232],{"emptyLinePlaceholder":231},[123,161080,161081,161083,161085,161087,161089,161091,161094,161096,161098,161100],{"class":125,"line":1476},[123,161082,294],{"class":164},[123,161084,1315],{"class":129},[123,161086,2667],{"class":133},[123,161088,159470],{"class":143},[123,161090,3495],{"class":164},[123,161092,161093],{"class":129},"pay",[123,161095,159273],{"class":133},[123,161097,3545],{"class":164},[123,161099,159126],{"class":143},[123,161101,288],{"class":129},[14,161103,161105],{"id":161104},"_312-易错点","3.12 易错点",[26,161107,161108,161111,161114,161117,161122],{},[29,161109,161110],{},"冒号不能漏。",[29,161112,161113],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,161115,161116],{},"多分支判断要注意顺序。",[29,161118,161119,161120,2494],{},"判断相等用 ",[120,161121,5391],{},[29,161123,161124],{},"字符串比较区分大小写：",[113,161126,161128],{"className":115,"code":161127,"language":117,"meta":118,"style":118},"\"Y\" == \"y\"  # False\n",[120,161129,161130],{"__ignoreMap":118},[123,161131,161132,161135,161137,161139],{"class":125,"line":126},[123,161133,161134],{"class":143},"\"Y\"",[123,161136,103951],{"class":133},[123,161138,160119],{"class":143},[123,161140,161141],{"class":2673},"  # False\n",[19,161143,161144],{},"可转换后再判断：",[113,161146,161148],{"className":115,"code":161147,"language":117,"meta":118,"style":118},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[120,161149,161150,161167,161180],{"__ignoreMap":118},[123,161151,161152,161155,161157,161159,161161,161164],{"class":125,"line":126},[123,161153,161154],{"class":129},"answer ",[123,161156,134],{"class":133},[123,161158,63007],{"class":164},[123,161160,1315],{"class":129},[123,161162,161163],{"class":143},"\"是否继续(y\u002Fn):\"",[123,161165,161166],{"class":129},").lower()\n",[123,161168,161169,161171,161174,161176,161178],{"class":125,"line":140},[123,161170,3998],{"class":133},[123,161172,161173],{"class":129}," answer ",[123,161175,5391],{"class":133},[123,161177,160119],{"class":143},[123,161179,1344],{"class":129},[123,161181,161182,161184,161186,161189],{"class":125,"line":156},[123,161183,33714],{"class":164},[123,161185,1315],{"class":129},[123,161187,161188],{"class":143},"\"继续\"",[123,161190,288],{"class":129},[14,161192,161194],{"id":161193},"_313-本章练习","3.13 本章练习",[26,161196,161197,161200,161203,161206,161216],{},[29,161198,161199],{},"输入年龄，判断是否成年。",[29,161201,161202],{},"输入年份，判断是否为闰年。",[29,161204,161205],{},"输入三个数字，输出最大值。",[29,161207,161208,161209,161212,161213,161215],{},"写登录判断：用户名是 ",[120,161210,161211],{},"admin"," 且密码是 ",[120,161214,17514],{}," 才登录成功。",[29,161217,161218],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2526,161220,161221],{},"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":118,"searchDepth":140,"depth":140,"links":161223},[161224,161225,161226,161227,161228,161229,161234,161235,161236,161237,161238,161239,161240],{"id":159612,"depth":140,"text":159613},{"id":159665,"depth":140,"text":159666},{"id":159769,"depth":140,"text":159770},{"id":159859,"depth":140,"text":159860},{"id":160049,"depth":140,"text":160050},{"id":160172,"depth":140,"text":160173,"children":161230},[161231,161232,161233],{"id":160176,"depth":156,"text":160177},{"id":160233,"depth":156,"text":160234},{"id":160290,"depth":156,"text":160291},{"id":160335,"depth":140,"text":160336},{"id":160426,"depth":140,"text":160427},{"id":160553,"depth":140,"text":160554},{"id":160683,"depth":140,"text":160684},{"id":160868,"depth":140,"text":160869},{"id":161104,"depth":140,"text":161105},{"id":161193,"depth":140,"text":161194},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159604,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161247,"title":161248,"body":161249,"description":2544,"extension":2545,"meta":163018,"navigation":231,"path":163019,"seo":163020,"stem":163021,"__hash__":163022},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161250,"toc":162998},[161251,161254,161258,161264,161267,161284,161288,161290,161307,161309,161354,161356,161373,161377,161380,161446,161449,161467,161471,161632,161641,161645,161649,161654,161701,161703,161709,161713,161718,161765,161767,161773,161777,161782,161818,161821,161868,161872,161878,161936,161941,161972,161977,161981,162036,162039,162111,162114,162173,162177,162180,162255,162258,162262,162368,162371,162397,162401,162413,162482,162485,162577,162581,162583,162594,162596,162726,162730,162932,162940,162944,162974,162978,162995],[10,161252,161248],{"id":161253},"_4-循环语句",[14,161255,161257],{"id":161256},"_41-为什么需要循环","4.1 为什么需要循环",[19,161259,161260,161261,161263],{},"如果要输出 1 到 100，不应该写 100 行 ",[120,161262,148856],{},"，而应该用循环。",[19,161265,161266],{},"循环适合处理重复任务：",[26,161268,161269,161272,161275,161278,161281],{},[29,161270,161271],{},"重复输出。",[29,161273,161274],{},"重复输入。",[29,161276,161277],{},"遍历数据。",[29,161279,161280],{},"持续执行菜单。",[29,161282,161283],{},"批量处理文件或数据。",[14,161285,161287],{"id":161286},"_42-while循环","4.2 while循环",[19,161289,7615],{},[113,161291,161293],{"className":115,"code":161292,"language":117,"meta":118,"style":118},"while 条件:\n    循环体\n",[120,161294,161295,161302],{"__ignoreMap":118},[123,161296,161297,161299],{"class":125,"line":126},[123,161298,111052],{"class":133},[123,161300,161301],{"class":129}," 条件:\n",[123,161303,161304],{"class":125,"line":140},[123,161305,161306],{"class":129},"    循环体\n",[19,161308,1572],{},[113,161310,161312],{"className":115,"code":161311,"language":117,"meta":118,"style":118},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[120,161313,161314,161322,161326,161338,161345],{"__ignoreMap":118},[123,161315,161316,161318,161320],{"class":125,"line":126},[123,161317,102541],{"class":129},[123,161319,134],{"class":133},[123,161321,58101],{"class":164},[123,161323,161324],{"class":125,"line":140},[123,161325,232],{"emptyLinePlaceholder":231},[123,161327,161328,161330,161332,161334,161336],{"class":125,"line":156},[123,161329,111052],{"class":133},[123,161331,11870],{"class":129},[123,161333,4053],{"class":133},[123,161335,4592],{"class":164},[123,161337,1344],{"class":129},[123,161339,161340,161342],{"class":125,"line":168},[123,161341,33714],{"class":164},[123,161343,161344],{"class":129},"(i)\n",[123,161346,161347,161350,161352],{"class":125,"line":268},[123,161348,161349],{"class":129},"    i ",[123,161351,11909],{"class":133},[123,161353,58101],{"class":164},[19,161355,83326],{},[26,161357,161358,161364,161367,161370],{},[29,161359,161360,161361,2494],{},"判断条件 ",[120,161362,161363],{},"i \u003C= 5",[29,161365,161366],{},"条件成立，执行循环体。",[29,161368,161369],{},"执行完后回到条件判断。",[29,161371,161372],{},"条件不成立，退出循环。",[14,161374,161376],{"id":161375},"_43-while累加","4.3 while累加",[19,161378,161379],{},"计算 1 到 100 的和：",[113,161381,161383],{"className":115,"code":161382,"language":117,"meta":118,"style":118},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[120,161384,161385,161393,161401,161405,161417,161427,161435,161439],{"__ignoreMap":118},[123,161386,161387,161389,161391],{"class":125,"line":126},[123,161388,102541],{"class":129},[123,161390,134],{"class":133},[123,161392,58101],{"class":164},[123,161394,161395,161397,161399],{"class":125,"line":140},[123,161396,159374],{"class":129},[123,161398,134],{"class":133},[123,161400,49740],{"class":164},[123,161402,161403],{"class":125,"line":156},[123,161404,232],{"emptyLinePlaceholder":231},[123,161406,161407,161409,161411,161413,161415],{"class":125,"line":168},[123,161408,111052],{"class":133},[123,161410,11870],{"class":129},[123,161412,4053],{"class":133},[123,161414,8187],{"class":164},[123,161416,1344],{"class":129},[123,161418,161419,161422,161424],{"class":125,"line":268},[123,161420,161421],{"class":129},"    total ",[123,161423,11909],{"class":133},[123,161425,161426],{"class":129}," i\n",[123,161428,161429,161431,161433],{"class":125,"line":291},[123,161430,161349],{"class":129},[123,161432,11909],{"class":133},[123,161434,58101],{"class":164},[123,161436,161437],{"class":125,"line":300},[123,161438,232],{"emptyLinePlaceholder":231},[123,161440,161441,161443],{"class":125,"line":305},[123,161442,294],{"class":164},[123,161444,161445],{"class":129},"(total)\n",[19,161447,161448],{},"核心思想：",[26,161450,161451,161456,161461],{},[29,161452,161453,161455],{},[120,161454,3047],{}," 控制循环次数。",[29,161457,161458,161460],{},[120,161459,159475],{}," 保存累加结果。",[29,161462,161463,161464,161466],{},"每轮循环都要更新 ",[120,161465,3047],{},"，否则可能死循环。",[14,161468,161470],{"id":161469},"_44-while猜数字","4.4 while猜数字",[113,161472,161474],{"className":115,"code":161473,"language":117,"meta":118,"style":118},"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",[120,161475,161476,161482,161486,161503,161511,161515,161523,161543,161552,161556,161568,161579,161589,161600,161606,161628],{"__ignoreMap":118},[123,161477,161478,161480],{"class":125,"line":126},[123,161479,223],{"class":133},[123,161481,47736],{"class":129},[123,161483,161484],{"class":125,"line":140},[123,161485,232],{"emptyLinePlaceholder":231},[123,161487,161488,161490,161492,161495,161497,161499,161501],{"class":125,"line":156},[123,161489,161154],{"class":129},[123,161491,134],{"class":133},[123,161493,161494],{"class":129}," random.randint(",[123,161496,2825],{"class":164},[123,161498,251],{"class":129},[123,161500,259],{"class":164},[123,161502,288],{"class":129},[123,161504,161505,161507,161509],{"class":125,"line":168},[123,161506,149075],{"class":129},[123,161508,134],{"class":133},[123,161510,49740],{"class":164},[123,161512,161513],{"class":125,"line":268},[123,161514,232],{"emptyLinePlaceholder":231},[123,161516,161517,161519,161521],{"class":125,"line":291},[123,161518,111052],{"class":133},[123,161520,97686],{"class":164},[123,161522,1344],{"class":129},[123,161524,161525,161528,161530,161532,161534,161536,161538,161541],{"class":125,"line":300},[123,161526,161527],{"class":129},"    guess ",[123,161529,134],{"class":133},[123,161531,4826],{"class":164},[123,161533,1315],{"class":129},[123,161535,56224],{"class":164},[123,161537,1315],{"class":129},[123,161539,161540],{"class":143},"\"请输入1到100之间的数字:\"",[123,161542,32913],{"class":129},[123,161544,161545,161548,161550],{"class":125,"line":305},[123,161546,161547],{"class":129},"    count ",[123,161549,11909],{"class":133},[123,161551,58101],{"class":164},[123,161553,161554],{"class":125,"line":316},[123,161555,232],{"emptyLinePlaceholder":231},[123,161557,161558,161560,161563,161565],{"class":125,"line":673},[123,161559,1711],{"class":133},[123,161561,161562],{"class":129}," guess ",[123,161564,3559],{"class":133},[123,161566,161567],{"class":129}," answer:\n",[123,161569,161570,161572,161574,161577],{"class":125,"line":692},[123,161571,34863],{"class":164},[123,161573,1315],{"class":129},[123,161575,161576],{"class":143},"\"猜大了\"",[123,161578,288],{"class":129},[123,161580,161581,161583,161585,161587],{"class":125,"line":713},[123,161582,41701],{"class":133},[123,161584,161562],{"class":129},[123,161586,3509],{"class":133},[123,161588,161567],{"class":129},[123,161590,161591,161593,161595,161598],{"class":125,"line":718},[123,161592,34863],{"class":164},[123,161594,1315],{"class":129},[123,161596,161597],{"class":143},"\"猜小了\"",[123,161599,288],{"class":129},[123,161601,161602,161604],{"class":125,"line":1138},[123,161603,160136],{"class":133},[123,161605,1344],{"class":129},[123,161607,161608,161610,161612,161614,161617,161619,161621,161623,161626],{"class":125,"line":1429},[123,161609,34863],{"class":164},[123,161611,1315],{"class":129},[123,161613,2667],{"class":133},[123,161615,161616],{"class":143},"\"猜对了，一共猜了",[123,161618,3495],{"class":164},[123,161620,86830],{"class":129},[123,161622,3545],{"class":164},[123,161624,161625],{"class":143},"次\"",[123,161627,288],{"class":129},[123,161629,161630],{"class":125,"line":1439},[123,161631,34039],{"class":133},[19,161633,161634,161637,161638,161640],{},[120,161635,161636],{},"while True"," 表示无限循环，通常配合 ",[120,161639,4497],{}," 使用。",[14,161642,161644],{"id":161643},"_45-break和continue","4.5 break和continue",[2587,161646,161648],{"id":161647},"_451-break","4.5.1 break",[19,161650,161651,161653],{},[120,161652,4497],{}," 直接结束整个循环。",[113,161655,161657],{"className":115,"code":161656,"language":117,"meta":118,"style":118},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[120,161658,161659,161679,161691,161695],{"__ignoreMap":118},[123,161660,161661,161663,161665,161667,161669,161671,161673,161675,161677],{"class":125,"line":126},[123,161662,1399],{"class":133},[123,161664,11870],{"class":129},[123,161666,1405],{"class":133},[123,161668,34855],{"class":164},[123,161670,1315],{"class":129},[123,161672,2825],{"class":164},[123,161674,251],{"class":129},[123,161676,2951],{"class":164},[123,161678,33201],{"class":129},[123,161680,161681,161683,161685,161687,161689],{"class":125,"line":140},[123,161682,1711],{"class":133},[123,161684,11870],{"class":129},[123,161686,5391],{"class":133},[123,161688,80468],{"class":164},[123,161690,1344],{"class":129},[123,161692,161693],{"class":125,"line":156},[123,161694,34039],{"class":133},[123,161696,161697,161699],{"class":125,"line":168},[123,161698,33714],{"class":164},[123,161700,161344],{"class":129},[19,161702,148841],{},[113,161704,161707],{"className":161705,"code":161706,"language":7621,"meta":118},[7619],"1\n2\n",[120,161708,161706],{"__ignoreMap":118},[2587,161710,161712],{"id":161711},"_452-continue","4.5.2 continue",[19,161714,161715,161717],{},[120,161716,156786],{}," 跳过本轮剩余代码，进入下一轮循环。",[113,161719,161721],{"className":115,"code":161720,"language":117,"meta":118,"style":118},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[120,161722,161723,161743,161755,161759],{"__ignoreMap":118},[123,161724,161725,161727,161729,161731,161733,161735,161737,161739,161741],{"class":125,"line":126},[123,161726,1399],{"class":133},[123,161728,11870],{"class":129},[123,161730,1405],{"class":133},[123,161732,34855],{"class":164},[123,161734,1315],{"class":129},[123,161736,2825],{"class":164},[123,161738,251],{"class":129},[123,161740,2951],{"class":164},[123,161742,33201],{"class":129},[123,161744,161745,161747,161749,161751,161753],{"class":125,"line":140},[123,161746,1711],{"class":133},[123,161748,11870],{"class":129},[123,161750,5391],{"class":133},[123,161752,80468],{"class":164},[123,161754,1344],{"class":129},[123,161756,161757],{"class":125,"line":156},[123,161758,1722],{"class":133},[123,161760,161761,161763],{"class":125,"line":168},[123,161762,33714],{"class":164},[123,161764,161344],{"class":129},[19,161766,148841],{},[113,161768,161771],{"className":161769,"code":161770,"language":7621,"meta":118},[7619],"1\n2\n4\n5\n",[120,161772,161770],{"__ignoreMap":118},[14,161774,161776],{"id":161775},"_46-for循环","4.6 for循环",[19,161778,161779,161781],{},[120,161780,1399],{}," 常用于遍历序列。",[113,161783,161785],{"className":115,"code":161784,"language":117,"meta":118,"style":118},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[120,161786,161787,161796,161800,161811],{"__ignoreMap":118},[123,161788,161789,161791,161793],{"class":125,"line":126},[123,161790,148920],{"class":129},[123,161792,134],{"class":133},[123,161794,161795],{"class":143}," \"python\"\n",[123,161797,161798],{"class":125,"line":140},[123,161799,232],{"emptyLinePlaceholder":231},[123,161801,161802,161804,161807,161809],{"class":125,"line":156},[123,161803,1399],{"class":133},[123,161805,161806],{"class":129}," ch ",[123,161808,1405],{"class":133},[123,161810,160513],{"class":129},[123,161812,161813,161815],{"class":125,"line":168},[123,161814,33714],{"class":164},[123,161816,161817],{"class":129},"(ch)\n",[19,161819,161820],{},"遍历列表：",[113,161822,161824],{"className":115,"code":161823,"language":117,"meta":118,"style":118},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[120,161825,161826,161848,161852,161862],{"__ignoreMap":118},[123,161827,161828,161831,161833,161835,161837,161839,161841,161843,161846],{"class":125,"line":126},[123,161829,161830],{"class":129},"students ",[123,161832,134],{"class":133},[123,161834,977],{"class":129},[123,161836,152002],{"class":143},[123,161838,251],{"class":129},[123,161840,153050],{"class":143},[123,161842,251],{"class":129},[123,161844,161845],{"class":143},"\"小刚\"",[123,161847,998],{"class":129},[123,161849,161850],{"class":125,"line":140},[123,161851,232],{"emptyLinePlaceholder":231},[123,161853,161854,161856,161858,161860],{"class":125,"line":156},[123,161855,1399],{"class":133},[123,161857,154251],{"class":129},[123,161859,1405],{"class":133},[123,161861,154256],{"class":129},[123,161863,161864,161866],{"class":125,"line":168},[123,161865,33714],{"class":164},[123,161867,152156],{"class":129},[14,161869,161871],{"id":161870},"_47-range函数","4.7 range函数",[19,161873,161874,161877],{},[120,161875,161876],{},"range()"," 用于生成整数序列。",[113,161879,161881],{"className":115,"code":161880,"language":117,"meta":118,"style":118},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[120,161882,161883,161897,161915],{"__ignoreMap":118},[123,161884,161885,161887,161889,161891,161894],{"class":125,"line":126},[123,161886,35827],{"class":164},[123,161888,1315],{"class":129},[123,161890,2926],{"class":164},[123,161892,161893],{"class":129},")          ",[123,161895,161896],{"class":2673},"# 0,1,2,3,4\n",[123,161898,161899,161901,161903,161905,161907,161909,161912],{"class":125,"line":140},[123,161900,35827],{"class":164},[123,161902,1315],{"class":129},[123,161904,2825],{"class":164},[123,161906,251],{"class":129},[123,161908,2926],{"class":164},[123,161910,161911],{"class":129},")       ",[123,161913,161914],{"class":2673},"# 1,2,3,4\n",[123,161916,161917,161919,161921,161923,161925,161927,161929,161931,161933],{"class":125,"line":156},[123,161918,35827],{"class":164},[123,161920,1315],{"class":129},[123,161922,2825],{"class":164},[123,161924,251],{"class":129},[123,161926,2193],{"class":164},[123,161928,251],{"class":129},[123,161930,2692],{"class":164},[123,161932,157775],{"class":129},[123,161934,161935],{"class":2673},"# 1,3,5,7,9\n",[19,161937,161938,161939,1159],{},"配合 ",[120,161940,1399],{},[113,161942,161944],{"className":115,"code":161943,"language":117,"meta":118,"style":118},"for i in range(1, 6):\n    print(i)\n",[120,161945,161946,161966],{"__ignoreMap":118},[123,161947,161948,161950,161952,161954,161956,161958,161960,161962,161964],{"class":125,"line":126},[123,161949,1399],{"class":133},[123,161951,11870],{"class":129},[123,161953,1405],{"class":133},[123,161955,34855],{"class":164},[123,161957,1315],{"class":129},[123,161959,2825],{"class":164},[123,161961,251],{"class":129},[123,161963,2951],{"class":164},[123,161965,33201],{"class":129},[123,161967,161968,161970],{"class":125,"line":140},[123,161969,33714],{"class":164},[123,161971,161344],{"class":129},[19,161973,11457,161974,161976],{},[120,161975,35827],{}," 的结束值不包含在内。",[14,161978,161980],{"id":161979},"_48-for循环求和","4.8 for循环求和",[113,161982,161984],{"className":115,"code":161983,"language":117,"meta":118,"style":118},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[120,161985,161986,161994,161998,162018,162026,162030],{"__ignoreMap":118},[123,161987,161988,161990,161992],{"class":125,"line":126},[123,161989,159374],{"class":129},[123,161991,134],{"class":133},[123,161993,49740],{"class":164},[123,161995,161996],{"class":125,"line":140},[123,161997,232],{"emptyLinePlaceholder":231},[123,161999,162000,162002,162004,162006,162008,162010,162012,162014,162016],{"class":125,"line":156},[123,162001,1399],{"class":133},[123,162003,11870],{"class":129},[123,162005,1405],{"class":133},[123,162007,34855],{"class":164},[123,162009,1315],{"class":129},[123,162011,2825],{"class":164},[123,162013,251],{"class":129},[123,162015,2944],{"class":164},[123,162017,33201],{"class":129},[123,162019,162020,162022,162024],{"class":125,"line":168},[123,162021,161421],{"class":129},[123,162023,11909],{"class":133},[123,162025,161426],{"class":129},[123,162027,162028],{"class":125,"line":268},[123,162029,232],{"emptyLinePlaceholder":231},[123,162031,162032,162034],{"class":125,"line":291},[123,162033,294],{"class":164},[123,162035,161445],{"class":129},[19,162037,162038],{},"求偶数和：",[113,162040,162042],{"className":115,"code":162041,"language":117,"meta":118,"style":118},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[120,162043,162044,162052,162056,162076,162092,162101,162105],{"__ignoreMap":118},[123,162045,162046,162048,162050],{"class":125,"line":126},[123,162047,159374],{"class":129},[123,162049,134],{"class":133},[123,162051,49740],{"class":164},[123,162053,162054],{"class":125,"line":140},[123,162055,232],{"emptyLinePlaceholder":231},[123,162057,162058,162060,162062,162064,162066,162068,162070,162072,162074],{"class":125,"line":156},[123,162059,1399],{"class":133},[123,162061,11870],{"class":129},[123,162063,1405],{"class":133},[123,162065,34855],{"class":164},[123,162067,1315],{"class":129},[123,162069,2825],{"class":164},[123,162071,251],{"class":129},[123,162073,2944],{"class":164},[123,162075,33201],{"class":129},[123,162077,162078,162080,162082,162084,162086,162088,162090],{"class":125,"line":168},[123,162079,1711],{"class":133},[123,162081,11870],{"class":129},[123,162083,2935],{"class":133},[123,162085,17185],{"class":164},[123,162087,103951],{"class":133},[123,162089,6532],{"class":164},[123,162091,1344],{"class":129},[123,162093,162094,162097,162099],{"class":125,"line":268},[123,162095,162096],{"class":129},"        total ",[123,162098,11909],{"class":133},[123,162100,161426],{"class":129},[123,162102,162103],{"class":125,"line":291},[123,162104,232],{"emptyLinePlaceholder":231},[123,162106,162107,162109],{"class":125,"line":300},[123,162108,294],{"class":164},[123,162110,161445],{"class":129},[19,162112,162113],{},"也可以：",[113,162115,162117],{"className":115,"code":162116,"language":117,"meta":118,"style":118},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[120,162118,162119,162127,162131,162155,162163,162167],{"__ignoreMap":118},[123,162120,162121,162123,162125],{"class":125,"line":126},[123,162122,159374],{"class":129},[123,162124,134],{"class":133},[123,162126,49740],{"class":164},[123,162128,162129],{"class":125,"line":140},[123,162130,232],{"emptyLinePlaceholder":231},[123,162132,162133,162135,162137,162139,162141,162143,162145,162147,162149,162151,162153],{"class":125,"line":156},[123,162134,1399],{"class":133},[123,162136,11870],{"class":129},[123,162138,1405],{"class":133},[123,162140,34855],{"class":164},[123,162142,1315],{"class":129},[123,162144,2692],{"class":164},[123,162146,251],{"class":129},[123,162148,2944],{"class":164},[123,162150,251],{"class":129},[123,162152,2692],{"class":164},[123,162154,33201],{"class":129},[123,162156,162157,162159,162161],{"class":125,"line":168},[123,162158,161421],{"class":129},[123,162160,11909],{"class":133},[123,162162,161426],{"class":129},[123,162164,162165],{"class":125,"line":268},[123,162166,232],{"emptyLinePlaceholder":231},[123,162168,162169,162171],{"class":125,"line":291},[123,162170,294],{"class":164},[123,162172,161445],{"class":129},[14,162174,162176],{"id":162175},"_49-循环嵌套","4.9 循环嵌套",[19,162178,162179],{},"嵌套循环就是循环里面再写循环。",[113,162181,162183],{"className":115,"code":162182,"language":117,"meta":118,"style":118},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[120,162184,162185,162205,162225],{"__ignoreMap":118},[123,162186,162187,162189,162191,162193,162195,162197,162199,162201,162203],{"class":125,"line":126},[123,162188,1399],{"class":133},[123,162190,11870],{"class":129},[123,162192,1405],{"class":133},[123,162194,34855],{"class":164},[123,162196,1315],{"class":129},[123,162198,2825],{"class":164},[123,162200,251],{"class":129},[123,162202,2901],{"class":164},[123,162204,33201],{"class":129},[123,162206,162207,162209,162211,162213,162215,162217,162219,162221,162223],{"class":125,"line":140},[123,162208,5641],{"class":133},[123,162210,11932],{"class":129},[123,162212,1405],{"class":133},[123,162214,34855],{"class":164},[123,162216,1315],{"class":129},[123,162218,2825],{"class":164},[123,162220,251],{"class":129},[123,162222,2901],{"class":164},[123,162224,33201],{"class":129},[123,162226,162227,162229,162231,162233,162236,162238,162240,162242,162245,162247,162249,162251,162253],{"class":125,"line":156},[123,162228,34863],{"class":164},[123,162230,1315],{"class":129},[123,162232,2667],{"class":133},[123,162234,162235],{"class":143},"\"i=",[123,162237,3495],{"class":164},[123,162239,3047],{"class":129},[123,162241,3545],{"class":164},[123,162243,162244],{"class":143},", j=",[123,162246,3495],{"class":164},[123,162248,3072],{"class":129},[123,162250,3545],{"class":164},[123,162252,2859],{"class":143},[123,162254,288],{"class":129},[19,162256,162257],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162259,162261],{"id":162260},"_410-九九乘法表","4.10 九九乘法表",[113,162263,162265],{"className":115,"code":162264,"language":117,"meta":118,"style":118},"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",[120,162266,162267,162287,162310,162362],{"__ignoreMap":118},[123,162268,162269,162271,162273,162275,162277,162279,162281,162283,162285],{"class":125,"line":126},[123,162270,1399],{"class":133},[123,162272,11870],{"class":129},[123,162274,1405],{"class":133},[123,162276,34855],{"class":164},[123,162278,1315],{"class":129},[123,162280,2825],{"class":164},[123,162282,251],{"class":129},[123,162284,2193],{"class":164},[123,162286,33201],{"class":129},[123,162288,162289,162291,162293,162295,162297,162299,162301,162304,162306,162308],{"class":125,"line":140},[123,162290,5641],{"class":133},[123,162292,11932],{"class":129},[123,162294,1405],{"class":133},[123,162296,34855],{"class":164},[123,162298,1315],{"class":129},[123,162300,2825],{"class":164},[123,162302,162303],{"class":129},", i ",[123,162305,3086],{"class":133},[123,162307,27540],{"class":164},[123,162309,33201],{"class":129},[123,162311,162312,162314,162316,162318,162320,162322,162324,162326,162328,162330,162332,162334,162336,162338,162340,162342,162344,162346,162348,162350,162352,162354,162356,162358,162360],{"class":125,"line":156},[123,162313,34863],{"class":164},[123,162315,1315],{"class":129},[123,162317,2667],{"class":133},[123,162319,2859],{"class":143},[123,162321,3495],{"class":164},[123,162323,3072],{"class":129},[123,162325,3545],{"class":164},[123,162327,3060],{"class":143},[123,162329,3495],{"class":164},[123,162331,3047],{"class":129},[123,162333,3545],{"class":164},[123,162335,134],{"class":143},[123,162337,3495],{"class":164},[123,162339,102541],{"class":129},[123,162341,3060],{"class":133},[123,162343,5850],{"class":129},[123,162345,3545],{"class":164},[123,162347,2859],{"class":143},[123,162349,251],{"class":129},[123,162351,48208],{"class":279},[123,162353,134],{"class":133},[123,162355,2859],{"class":143},[123,162357,3700],{"class":164},[123,162359,2859],{"class":143},[123,162361,288],{"class":129},[123,162363,162364,162366],{"class":125,"line":168},[123,162365,33714],{"class":164},[123,162367,4420],{"class":129},[19,162369,162370],{},"关键点：",[26,162372,162373,162379,162385,162391],{},[29,162374,162375,162376,162378],{},"外层 ",[120,162377,3047],{}," 控制行。",[29,162380,162381,162382,162384],{},"内层 ",[120,162383,3072],{}," 控制列。",[29,162386,162387,162388,162390],{},"每行结束后用 ",[120,162389,148856],{}," 换行。",[29,162392,162393,162396],{},[120,162394,162395],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162398,162400],{"id":162399},"_411-循环else","4.11 循环else",[19,162402,162403,162404,162406,162407,162409,162410,162412],{},"Python 的循环可以带 ",[120,162405,4155],{},"。当循环正常结束时执行 ",[120,162408,4155],{},"，如果被 ",[120,162411,4497],{}," 打断，则不执行。",[113,162414,162416],{"className":115,"code":162415,"language":117,"meta":118,"style":118},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[120,162417,162418,162438,162450,162461,162465,162471],{"__ignoreMap":118},[123,162419,162420,162422,162424,162426,162428,162430,162432,162434,162436],{"class":125,"line":126},[123,162421,1399],{"class":133},[123,162423,11870],{"class":129},[123,162425,1405],{"class":133},[123,162427,34855],{"class":164},[123,162429,1315],{"class":129},[123,162431,2825],{"class":164},[123,162433,251],{"class":129},[123,162435,2951],{"class":164},[123,162437,33201],{"class":129},[123,162439,162440,162442,162444,162446,162448],{"class":125,"line":140},[123,162441,1711],{"class":133},[123,162443,11870],{"class":129},[123,162445,5391],{"class":133},[123,162447,4482],{"class":164},[123,162449,1344],{"class":129},[123,162451,162452,162454,162456,162459],{"class":125,"line":156},[123,162453,34863],{"class":164},[123,162455,1315],{"class":129},[123,162457,162458],{"class":143},"\"找到了\"",[123,162460,288],{"class":129},[123,162462,162463],{"class":125,"line":168},[123,162464,34039],{"class":133},[123,162466,162467,162469],{"class":125,"line":268},[123,162468,4155],{"class":133},[123,162470,1344],{"class":129},[123,162472,162473,162475,162477,162480],{"class":125,"line":291},[123,162474,33714],{"class":164},[123,162476,1315],{"class":129},[123,162478,162479],{"class":143},"\"没找到\"",[123,162481,288],{"class":129},[19,162483,162484],{},"常用于搜索。",[113,162486,162488],{"className":115,"code":162487,"language":117,"meta":118,"style":118},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[120,162489,162490,162511,162520,162524,162536,162547,162557,162561,162567],{"__ignoreMap":118},[123,162491,162492,162495,162497,162499,162501,162503,162505,162507,162509],{"class":125,"line":126},[123,162493,162494],{"class":129},"names ",[123,162496,134],{"class":133},[123,162498,977],{"class":129},[123,162500,152002],{"class":143},[123,162502,251],{"class":129},[123,162504,153050],{"class":143},[123,162506,251],{"class":129},[123,162508,161845],{"class":143},[123,162510,998],{"class":129},[123,162512,162513,162515,162517],{"class":125,"line":140},[123,162514,113967],{"class":129},[123,162516,134],{"class":133},[123,162518,162519],{"class":143}," \"小李\"\n",[123,162521,162522],{"class":125,"line":156},[123,162523,232],{"emptyLinePlaceholder":231},[123,162525,162526,162528,162531,162533],{"class":125,"line":168},[123,162527,1399],{"class":133},[123,162529,162530],{"class":129}," name ",[123,162532,1405],{"class":133},[123,162534,162535],{"class":129}," names:\n",[123,162537,162538,162540,162542,162544],{"class":125,"line":268},[123,162539,1711],{"class":133},[123,162541,162530],{"class":129},[123,162543,5391],{"class":133},[123,162545,162546],{"class":129}," target:\n",[123,162548,162549,162551,162553,162555],{"class":125,"line":291},[123,162550,34863],{"class":164},[123,162552,1315],{"class":129},[123,162554,162458],{"class":143},[123,162556,288],{"class":129},[123,162558,162559],{"class":125,"line":300},[123,162560,34039],{"class":133},[123,162562,162563,162565],{"class":125,"line":305},[123,162564,4155],{"class":133},[123,162566,1344],{"class":129},[123,162568,162569,162571,162573,162575],{"class":125,"line":316},[123,162570,33714],{"class":164},[123,162572,1315],{"class":129},[123,162574,162479],{"class":143},[123,162576,288],{"class":129},[14,162578,162580],{"id":162579},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162582,125680],{},[26,162584,162585,162588,162591],{},[29,162586,162587],{},"用户最多输入 3 次密码。",[29,162589,162590],{},"密码正确则登录成功。",[29,162592,162593],{},"3 次都错误则锁定账号。",[19,162595,12467],{},[113,162597,162599],{"className":115,"code":162598,"language":117,"meta":118,"style":118},"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",[120,162600,162601,162611,162615,162631,162647,162651,162663,162674,162678,162684,162709,162715],{"__ignoreMap":118},[123,162602,162603,162606,162608],{"class":125,"line":126},[123,162604,162605],{"class":129},"password ",[123,162607,134],{"class":133},[123,162609,162610],{"class":143}," \"123456\"\n",[123,162612,162613],{"class":125,"line":140},[123,162614,232],{"emptyLinePlaceholder":231},[123,162616,162617,162619,162621,162623,162625,162627,162629],{"class":125,"line":156},[123,162618,1399],{"class":133},[123,162620,11870],{"class":129},[123,162622,1405],{"class":133},[123,162624,34855],{"class":164},[123,162626,1315],{"class":129},[123,162628,2686],{"class":164},[123,162630,33201],{"class":129},[123,162632,162633,162636,162638,162640,162642,162645],{"class":125,"line":168},[123,162634,162635],{"class":129},"    user_password ",[123,162637,134],{"class":133},[123,162639,63007],{"class":164},[123,162641,1315],{"class":129},[123,162643,162644],{"class":143},"\"请输入密码:\"",[123,162646,288],{"class":129},[123,162648,162649],{"class":125,"line":268},[123,162650,232],{"emptyLinePlaceholder":231},[123,162652,162653,162655,162658,162660],{"class":125,"line":291},[123,162654,1711],{"class":133},[123,162656,162657],{"class":129}," user_password ",[123,162659,5391],{"class":133},[123,162661,162662],{"class":129}," password:\n",[123,162664,162665,162667,162669,162672],{"class":125,"line":300},[123,162666,34863],{"class":164},[123,162668,1315],{"class":129},[123,162670,162671],{"class":143},"\"登录成功\"",[123,162673,288],{"class":129},[123,162675,162676],{"class":125,"line":305},[123,162677,34039],{"class":133},[123,162679,162680,162682],{"class":125,"line":316},[123,162681,160136],{"class":133},[123,162683,1344],{"class":129},[123,162685,162686,162688,162690,162692,162695,162698,162700,162702,162704,162707],{"class":125,"line":673},[123,162687,34863],{"class":164},[123,162689,1315],{"class":129},[123,162691,2667],{"class":133},[123,162693,162694],{"class":143},"\"密码错误，还剩",[123,162696,162697],{"class":164},"{2",[123,162699,54674],{"class":133},[123,162701,5473],{"class":129},[123,162703,3545],{"class":164},[123,162705,162706],{"class":143},"次机会\"",[123,162708,288],{"class":129},[123,162710,162711,162713],{"class":125,"line":692},[123,162712,4155],{"class":133},[123,162714,1344],{"class":129},[123,162716,162717,162719,162721,162724],{"class":125,"line":713},[123,162718,33714],{"class":164},[123,162720,1315],{"class":129},[123,162722,162723],{"class":143},"\"账号已锁定\"",[123,162725,288],{"class":129},[14,162727,162729],{"id":162728},"_413-小案例菜单程序","4.13 小案例：菜单程序",[113,162731,162733],{"className":115,"code":162732,"language":117,"meta":118,"style":118},"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",[120,162734,162735,162743,162754,162765,162776,162787,162798,162802,162817,162821,162833,162844,162856,162867,162879,162890,162902,162912,162916,162922],{"__ignoreMap":118},[123,162736,162737,162739,162741],{"class":125,"line":126},[123,162738,111052],{"class":133},[123,162740,97686],{"class":164},[123,162742,1344],{"class":129},[123,162744,162745,162747,162749,162752],{"class":125,"line":140},[123,162746,33714],{"class":164},[123,162748,1315],{"class":129},[123,162750,162751],{"class":143},"\"====== 菜单 ======\"",[123,162753,288],{"class":129},[123,162755,162756,162758,162760,162763],{"class":125,"line":156},[123,162757,33714],{"class":164},[123,162759,1315],{"class":129},[123,162761,162762],{"class":143},"\"1. 查询余额\"",[123,162764,288],{"class":129},[123,162766,162767,162769,162771,162774],{"class":125,"line":168},[123,162768,33714],{"class":164},[123,162770,1315],{"class":129},[123,162772,162773],{"class":143},"\"2. 存款\"",[123,162775,288],{"class":129},[123,162777,162778,162780,162782,162785],{"class":125,"line":268},[123,162779,33714],{"class":164},[123,162781,1315],{"class":129},[123,162783,162784],{"class":143},"\"3. 取款\"",[123,162786,288],{"class":129},[123,162788,162789,162791,162793,162796],{"class":125,"line":291},[123,162790,33714],{"class":164},[123,162792,1315],{"class":129},[123,162794,162795],{"class":143},"\"0. 退出\"",[123,162797,288],{"class":129},[123,162799,162800],{"class":125,"line":300},[123,162801,232],{"emptyLinePlaceholder":231},[123,162803,162804,162807,162809,162811,162813,162815],{"class":125,"line":305},[123,162805,162806],{"class":129},"    choice ",[123,162808,134],{"class":133},[123,162810,63007],{"class":164},[123,162812,1315],{"class":129},[123,162814,155187],{"class":143},[123,162816,288],{"class":129},[123,162818,162819],{"class":125,"line":316},[123,162820,232],{"emptyLinePlaceholder":231},[123,162822,162823,162825,162827,162829,162831],{"class":125,"line":673},[123,162824,1711],{"class":133},[123,162826,155200],{"class":129},[123,162828,5391],{"class":133},[123,162830,155205],{"class":143},[123,162832,1344],{"class":129},[123,162834,162835,162837,162839,162842],{"class":125,"line":692},[123,162836,34863],{"class":164},[123,162838,1315],{"class":129},[123,162840,162841],{"class":143},"\"余额为1000元\"",[123,162843,288],{"class":129},[123,162845,162846,162848,162850,162852,162854],{"class":125,"line":713},[123,162847,41701],{"class":133},[123,162849,155200],{"class":129},[123,162851,5391],{"class":133},[123,162853,155224],{"class":143},[123,162855,1344],{"class":129},[123,162857,162858,162860,162862,162865],{"class":125,"line":718},[123,162859,34863],{"class":164},[123,162861,1315],{"class":129},[123,162863,162864],{"class":143},"\"存款功能\"",[123,162866,288],{"class":129},[123,162868,162869,162871,162873,162875,162877],{"class":125,"line":1138},[123,162870,41701],{"class":133},[123,162872,155200],{"class":129},[123,162874,5391],{"class":133},[123,162876,155242],{"class":143},[123,162878,1344],{"class":129},[123,162880,162881,162883,162885,162888],{"class":125,"line":1429},[123,162882,34863],{"class":164},[123,162884,1315],{"class":129},[123,162886,162887],{"class":143},"\"取款功能\"",[123,162889,288],{"class":129},[123,162891,162892,162894,162896,162898,162900],{"class":125,"line":1439},[123,162893,41701],{"class":133},[123,162895,155200],{"class":129},[123,162897,5391],{"class":133},[123,162899,155296],{"class":143},[123,162901,1344],{"class":129},[123,162903,162904,162906,162908,162910],{"class":125,"line":1444},[123,162905,34863],{"class":164},[123,162907,1315],{"class":129},[123,162909,155307],{"class":143},[123,162911,288],{"class":129},[123,162913,162914],{"class":125,"line":1453},[123,162915,34039],{"class":133},[123,162917,162918,162920],{"class":125,"line":1458},[123,162919,160136],{"class":133},[123,162921,1344],{"class":129},[123,162923,162924,162926,162928,162930],{"class":125,"line":1476},[123,162925,34863],{"class":164},[123,162927,1315],{"class":129},[123,162929,155328],{"class":143},[123,162931,288],{"class":129},[19,162933,162934,162935,162937,162938,2494],{},"菜单类程序通常使用 ",[120,162936,161636],{},"，用户选择退出时 ",[120,162939,4497],{},[14,162941,162943],{"id":162942},"_414-易错点","4.14 易错点",[26,162945,162946,162951,162957,162965,162971],{},[29,162947,162948,162950],{},[120,162949,111052],{}," 循环必须更新控制变量。",[29,162952,162953,162956],{},[120,162954,162955],{},"range(1, 10)"," 不包含 10。",[29,162958,162959,162961,162962,162964],{},[120,162960,4497],{}," 结束整个循环，",[120,162963,156786],{}," 只跳过本轮。",[29,162966,162967,162968,162970],{},"嵌套循环中，",[120,162969,4497],{}," 只跳出当前所在的一层循环。",[29,162972,162973],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162975,162977],{"id":162976},"_415-本章练习","4.15 本章练习",[26,162979,162980,162983,162986,162989,162992],{},[29,162981,162982],{},"输出 1 到 100。",[29,162984,162985],{},"计算 1 到 100 的偶数和。",[29,162987,162988],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162990,162991],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162993,162994],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2526,162996,162997],{},"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":118,"searchDepth":140,"depth":140,"links":162999},[163000,163001,163002,163003,163004,163008,163009,163010,163011,163012,163013,163014,163015,163016,163017],{"id":161256,"depth":140,"text":161257},{"id":161286,"depth":140,"text":161287},{"id":161375,"depth":140,"text":161376},{"id":161469,"depth":140,"text":161470},{"id":161643,"depth":140,"text":161644,"children":163005},[163006,163007],{"id":161647,"depth":156,"text":161648},{"id":161711,"depth":156,"text":161712},{"id":161775,"depth":140,"text":161776},{"id":161870,"depth":140,"text":161871},{"id":161979,"depth":140,"text":161980},{"id":162175,"depth":140,"text":162176},{"id":162260,"depth":140,"text":162261},{"id":162399,"depth":140,"text":162400},{"id":162579,"depth":140,"text":162580},{"id":162728,"depth":140,"text":162729},{"id":162942,"depth":140,"text":162943},{"id":162976,"depth":140,"text":162977},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161248,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163024,"title":163025,"body":163026,"description":2544,"extension":2545,"meta":165031,"navigation":231,"path":165032,"seo":165033,"stem":165034,"__hash__":165035},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163027,"toc":165011},[163028,163031,163035,163038,163041,163055,163058,163072,163076,163078,163097,163099,163146,163148,163162,163166,163240,163243,163247,163250,163309,163317,163320,163373,163376,163380,163385,163440,163448,163498,163502,163507,163515,163614,163620,163624,163629,163632,163643,163684,163697,163701,163704,163740,163743,163756,163759,163819,163823,163827,163830,163881,163885,163888,163935,163941,164007,164010,164014,164017,164133,164136,164140,164143,164249,164253,164256,164294,164297,164339,164342,164402,164405,164409,164873,164876,164880,164907,164913,164974,164978,165008],[10,163029,163025],{"id":163030},"_5-函数基础",[14,163032,163034],{"id":163033},"_51-为什么需要函数","5.1 为什么需要函数",[19,163036,163037],{},"函数用于封装一段可以重复使用的代码。",[19,163039,163040],{},"不使用函数的问题：",[26,163042,163043,163046,163049,163052],{},[29,163044,163045],{},"重复代码多。",[29,163047,163048],{},"修改逻辑时容易漏改。",[29,163050,163051],{},"主流程不清晰。",[29,163053,163054],{},"程序越写越长，难以维护。",[19,163056,163057],{},"使用函数后的好处：",[26,163059,163060,163063,163066,163069],{},[29,163061,163062],{},"提高复用性。",[29,163064,163065],{},"提高可读性。",[29,163067,163068],{},"便于调试。",[29,163070,163071],{},"便于分工。",[14,163073,163075],{"id":163074},"_52-函数定义","5.2 函数定义",[19,163077,7615],{},[113,163079,163081],{"className":115,"code":163080,"language":117,"meta":118,"style":118},"def 函数名():\n    函数体\n",[120,163082,163083,163092],{"__ignoreMap":118},[123,163084,163085,163087,163090],{"class":125,"line":126},[123,163086,34359],{"class":133},[123,163088,163089],{"class":337}," 函数名",[123,163091,34365],{"class":129},[123,163093,163094],{"class":125,"line":140},[123,163095,163096],{"class":129},"    函数体\n",[19,163098,1572],{},[113,163100,163102],{"className":115,"code":163101,"language":117,"meta":118,"style":118},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[120,163103,163104,163113,163123,163133,163137,163141],{"__ignoreMap":118},[123,163105,163106,163108,163111],{"class":125,"line":126},[123,163107,34359],{"class":133},[123,163109,163110],{"class":337}," say_hello",[123,163112,34365],{"class":129},[123,163114,163115,163117,163119,163121],{"class":125,"line":140},[123,163116,33714],{"class":164},[123,163118,1315],{"class":129},[123,163120,8277],{"class":143},[123,163122,288],{"class":129},[123,163124,163125,163127,163129,163131],{"class":125,"line":156},[123,163126,33714],{"class":164},[123,163128,1315],{"class":129},[123,163130,149023],{"class":143},[123,163132,288],{"class":129},[123,163134,163135],{"class":125,"line":168},[123,163136,232],{"emptyLinePlaceholder":231},[123,163138,163139],{"class":125,"line":268},[123,163140,232],{"emptyLinePlaceholder":231},[123,163142,163143],{"class":125,"line":291},[123,163144,163145],{"class":129},"say_hello()\n",[19,163147,11457],{},[26,163149,163150,163153,163156,163159],{},[29,163151,163152],{},"函数必须先定义，再调用。",[29,163154,163155],{},"函数名遵循变量命名规则。",[29,163157,163158],{},"函数体需要缩进。",[29,163160,163161],{},"函数不调用就不会执行。",[14,163163,163165],{"id":163164},"_53-函数调用","5.3 函数调用",[113,163167,163169],{"className":115,"code":163168,"language":117,"meta":118,"style":118},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[120,163170,163171,163180,163191,163202,163213,163223,163227,163231,163236],{"__ignoreMap":118},[123,163172,163173,163175,163178],{"class":125,"line":126},[123,163174,34359],{"class":133},[123,163176,163177],{"class":337}," print_menu",[123,163179,34365],{"class":129},[123,163181,163182,163184,163186,163189],{"class":125,"line":140},[123,163183,33714],{"class":164},[123,163185,1315],{"class":129},[123,163187,163188],{"class":143},"\"1. 查询\"",[123,163190,288],{"class":129},[123,163192,163193,163195,163197,163200],{"class":125,"line":156},[123,163194,33714],{"class":164},[123,163196,1315],{"class":129},[123,163198,163199],{"class":143},"\"2. 添加\"",[123,163201,288],{"class":129},[123,163203,163204,163206,163208,163211],{"class":125,"line":168},[123,163205,33714],{"class":164},[123,163207,1315],{"class":129},[123,163209,163210],{"class":143},"\"3. 删除\"",[123,163212,288],{"class":129},[123,163214,163215,163217,163219,163221],{"class":125,"line":268},[123,163216,33714],{"class":164},[123,163218,1315],{"class":129},[123,163220,162795],{"class":143},[123,163222,288],{"class":129},[123,163224,163225],{"class":125,"line":291},[123,163226,232],{"emptyLinePlaceholder":231},[123,163228,163229],{"class":125,"line":300},[123,163230,232],{"emptyLinePlaceholder":231},[123,163232,163233],{"class":125,"line":305},[123,163234,163235],{"class":129},"print_menu()\n",[123,163237,163238],{"class":125,"line":316},[123,163239,163235],{"class":129},[19,163241,163242],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163244,163246],{"id":163245},"_54-参数","5.4 参数",[19,163248,163249],{},"参数用于向函数传递数据。",[113,163251,163253],{"className":115,"code":163252,"language":117,"meta":118,"style":118},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[120,163254,163255,163264,163284,163288,163292,163301],{"__ignoreMap":118},[123,163256,163257,163259,163261],{"class":125,"line":126},[123,163258,34359],{"class":133},[123,163260,163110],{"class":337},[123,163262,163263],{"class":129},"(name):\n",[123,163265,163266,163268,163270,163272,163274,163276,163278,163280,163282],{"class":125,"line":140},[123,163267,33714],{"class":164},[123,163269,1315],{"class":129},[123,163271,2667],{"class":133},[123,163273,159168],{"class":143},[123,163275,3495],{"class":164},[123,163277,663],{"class":129},[123,163279,3545],{"class":164},[123,163281,2859],{"class":143},[123,163283,288],{"class":129},[123,163285,163286],{"class":125,"line":156},[123,163287,232],{"emptyLinePlaceholder":231},[123,163289,163290],{"class":125,"line":168},[123,163291,232],{"emptyLinePlaceholder":231},[123,163293,163294,163297,163299],{"class":125,"line":268},[123,163295,163296],{"class":129},"say_hello(",[123,163298,152002],{"class":143},[123,163300,288],{"class":129},[123,163302,163303,163305,163307],{"class":125,"line":291},[123,163304,163296],{"class":129},[123,163306,153050],{"class":143},[123,163308,288],{"class":129},[19,163310,163311,163313,163314,163316],{},[120,163312,663],{}," 是形参，",[120,163315,152002],{}," 是实参。",[19,163318,163319],{},"多个参数：",[113,163321,163323],{"className":115,"code":163322,"language":117,"meta":118,"style":118},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[120,163324,163325,163333,163346,163352,163356,163360],{"__ignoreMap":118},[123,163326,163327,163329,163331],{"class":125,"line":126},[123,163328,34359],{"class":133},[123,163330,7643],{"class":337},[123,163332,153207],{"class":129},[123,163334,163335,163338,163340,163342,163344],{"class":125,"line":140},[123,163336,163337],{"class":129},"    result ",[123,163339,134],{"class":133},[123,163341,13301],{"class":129},[123,163343,3086],{"class":133},[123,163345,153218],{"class":129},[123,163347,163348,163350],{"class":125,"line":156},[123,163349,33714],{"class":164},[123,163351,78985],{"class":129},[123,163353,163354],{"class":125,"line":168},[123,163355,232],{"emptyLinePlaceholder":231},[123,163357,163358],{"class":125,"line":268},[123,163359,232],{"emptyLinePlaceholder":231},[123,163361,163362,163365,163367,163369,163371],{"class":125,"line":291},[123,163363,163364],{"class":129},"add(",[123,163366,2193],{"class":164},[123,163368,251],{"class":129},[123,163370,3302],{"class":164},[123,163372,288],{"class":129},[19,163374,163375],{},"调用时参数数量必须匹配。",[14,163377,163379],{"id":163378},"_55-返回值","5.5 返回值",[19,163381,163382,163384],{},[120,163383,19474],{}," 用于把函数内部的结果返回给调用者。",[113,163386,163388],{"className":115,"code":163387,"language":117,"meta":118,"style":118},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[120,163389,163390,163398,163408,163412,163416,163434],{"__ignoreMap":118},[123,163391,163392,163394,163396],{"class":125,"line":126},[123,163393,34359],{"class":133},[123,163395,7643],{"class":337},[123,163397,153207],{"class":129},[123,163399,163400,163402,163404,163406],{"class":125,"line":140},[123,163401,6529],{"class":133},[123,163403,13301],{"class":129},[123,163405,3086],{"class":133},[123,163407,153218],{"class":129},[123,163409,163410],{"class":125,"line":156},[123,163411,232],{"emptyLinePlaceholder":231},[123,163413,163414],{"class":125,"line":168},[123,163415,232],{"emptyLinePlaceholder":231},[123,163417,163418,163421,163423,163426,163428,163430,163432],{"class":125,"line":268},[123,163419,163420],{"class":129},"result ",[123,163422,134],{"class":133},[123,163424,163425],{"class":129}," add(",[123,163427,2193],{"class":164},[123,163429,251],{"class":129},[123,163431,3302],{"class":164},[123,163433,288],{"class":129},[123,163435,163436,163438],{"class":125,"line":291},[123,163437,294],{"class":164},[123,163439,78985],{"class":129},[19,163441,163442,163443,163445,163446,2494],{},"如果函数没有写 ",[120,163444,19474],{},"，默认返回 ",[120,163447,98080],{},[113,163449,163451],{"className":115,"code":163450,"language":117,"meta":118,"style":118},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[120,163452,163453,163461,163471,163475,163479,163488],{"__ignoreMap":118},[123,163454,163455,163457,163459],{"class":125,"line":126},[123,163456,34359],{"class":133},[123,163458,163110],{"class":337},[123,163460,34365],{"class":129},[123,163462,163463,163465,163467,163469],{"class":125,"line":140},[123,163464,33714],{"class":164},[123,163466,1315],{"class":129},[123,163468,8277],{"class":143},[123,163470,288],{"class":129},[123,163472,163473],{"class":125,"line":156},[123,163474,232],{"emptyLinePlaceholder":231},[123,163476,163477],{"class":125,"line":168},[123,163478,232],{"emptyLinePlaceholder":231},[123,163480,163481,163483,163485],{"class":125,"line":268},[123,163482,163420],{"class":129},[123,163484,134],{"class":133},[123,163486,163487],{"class":129}," say_hello()\n",[123,163489,163490,163492,163495],{"class":125,"line":291},[123,163491,294],{"class":164},[123,163493,163494],{"class":129},"(result)  ",[123,163496,163497],{"class":2673},"# None\n",[14,163499,163501],{"id":163500},"_56-return的作用","5.6 return的作用",[19,163503,163504,163506],{},[120,163505,19474],{}," 有两个作用：",[26,163508,163509,163512],{},[29,163510,163511],{},"返回结果。",[29,163513,163514],{},"结束函数。",[113,163516,163518],{"className":115,"code":163517,"language":117,"meta":118,"style":118},"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",[120,163519,163520,163530,163542,163549,163553,163565,163572,163576,163583,163587,163591,163602],{"__ignoreMap":118},[123,163521,163522,163524,163527],{"class":125,"line":126},[123,163523,34359],{"class":133},[123,163525,163526],{"class":337}," check_age",[123,163528,163529],{"class":129},"(age):\n",[123,163531,163532,163534,163536,163538,163540],{"class":125,"line":140},[123,163533,1711],{"class":133},[123,163535,18135],{"class":129},[123,163537,3509],{"class":133},[123,163539,6532],{"class":164},[123,163541,1344],{"class":129},[123,163543,163544,163546],{"class":125,"line":156},[123,163545,17182],{"class":133},[123,163547,163548],{"class":143}," \"年龄不合法\"\n",[123,163550,163551],{"class":125,"line":168},[123,163552,232],{"emptyLinePlaceholder":231},[123,163554,163555,163557,163559,163561,163563],{"class":125,"line":268},[123,163556,1711],{"class":133},[123,163558,18135],{"class":129},[123,163560,4164],{"class":133},[123,163562,158399],{"class":164},[123,163564,1344],{"class":129},[123,163566,163567,163569],{"class":125,"line":291},[123,163568,17182],{"class":133},[123,163570,163571],{"class":143}," \"成年人\"\n",[123,163573,163574],{"class":125,"line":300},[123,163575,232],{"emptyLinePlaceholder":231},[123,163577,163578,163580],{"class":125,"line":305},[123,163579,6529],{"class":133},[123,163581,163582],{"class":143}," \"未成年人\"\n",[123,163584,163585],{"class":125,"line":316},[123,163586,232],{"emptyLinePlaceholder":231},[123,163588,163589],{"class":125,"line":673},[123,163590,232],{"emptyLinePlaceholder":231},[123,163592,163593,163595,163598,163600],{"class":125,"line":692},[123,163594,294],{"class":164},[123,163596,163597],{"class":129},"(check_age(",[123,163599,3302],{"class":164},[123,163601,32913],{"class":129},[123,163603,163604,163606,163608,163610,163612],{"class":125,"line":713},[123,163605,294],{"class":164},[123,163607,163597],{"class":129},[123,163609,3135],{"class":133},[123,163611,2825],{"class":164},[123,163613,32913],{"class":129},[19,163615,163616,163617,163619],{},"函数执行到 ",[120,163618,19474],{}," 后，后面的代码不会继续执行。",[14,163621,163623],{"id":163622},"_57-none","5.7 None",[19,163625,163626,163628],{},[120,163627,98080],{}," 表示空值或没有结果。",[19,163630,163631],{},"常见使用场景：",[26,163633,163634,163637,163640],{},[29,163635,163636],{},"函数没有返回值。",[29,163638,163639],{},"变量暂时没有具体值。",[29,163641,163642],{},"表示查询不到结果。",[113,163644,163646],{"className":115,"code":163645,"language":117,"meta":118,"style":118},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[120,163647,163648,163656,163660,163673],{"__ignoreMap":118},[123,163649,163650,163652,163654],{"class":125,"line":126},[123,163651,163420],{"class":129},[123,163653,134],{"class":133},[123,163655,154286],{"class":164},[123,163657,163658],{"class":125,"line":140},[123,163659,232],{"emptyLinePlaceholder":231},[123,163661,163662,163664,163667,163669,163671],{"class":125,"line":156},[123,163663,3998],{"class":133},[123,163665,163666],{"class":129}," result ",[123,163668,41336],{"class":133},[123,163670,41341],{"class":164},[123,163672,1344],{"class":129},[123,163674,163675,163677,163679,163682],{"class":125,"line":168},[123,163676,33714],{"class":164},[123,163678,1315],{"class":129},[123,163680,163681],{"class":143},"\"没有数据\"",[123,163683,288],{"class":129},[19,163685,163686,163687,163689,163690,163693,163694,2494],{},"判断 ",[120,163688,98080],{}," 推荐使用 ",[120,163691,163692],{},"is None","，不要写成 ",[120,163695,163696],{},"== None",[14,163698,163700],{"id":163699},"_58-函数文档字符串","5.8 函数文档字符串",[19,163702,163703],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[113,163705,163707],{"className":115,"code":163706,"language":117,"meta":118,"style":118},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[120,163708,163709,163719,163724],{"__ignoreMap":118},[123,163710,163711,163713,163716],{"class":125,"line":126},[123,163712,34359],{"class":133},[123,163714,163715],{"class":337}," calculate_bmi",[123,163717,163718],{"class":129},"(weight, height):\n",[123,163720,163721],{"class":125,"line":140},[123,163722,163723],{"class":143},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[123,163725,163726,163728,163731,163733,163736,163738],{"class":125,"line":156},[123,163727,6529],{"class":133},[123,163729,163730],{"class":129}," weight ",[123,163732,3187],{"class":133},[123,163734,163735],{"class":129}," height ",[123,163737,13093],{"class":133},[123,163739,50130],{"class":164},[19,163741,163742],{},"查看说明：",[113,163744,163746],{"className":115,"code":163745,"language":117,"meta":118,"style":118},"help(calculate_bmi)\n",[120,163747,163748],{"__ignoreMap":118},[123,163749,163750,163753],{"class":125,"line":126},[123,163751,163752],{"class":164},"help",[123,163754,163755],{"class":129},"(calculate_bmi)\n",[19,163757,163758],{},"较完整的写法：",[113,163760,163762],{"className":115,"code":163761,"language":117,"meta":118,"style":118},"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",[120,163763,163764,163772,163777,163782,163786,163791,163796,163801,163805],{"__ignoreMap":118},[123,163765,163766,163768,163770],{"class":125,"line":126},[123,163767,34359],{"class":133},[123,163769,163715],{"class":337},[123,163771,163718],{"class":129},[123,163773,163774],{"class":125,"line":140},[123,163775,163776],{"class":143},"    \"\"\"\n",[123,163778,163779],{"class":125,"line":156},[123,163780,163781],{"class":143},"    计算BMI。\n",[123,163783,163784],{"class":125,"line":168},[123,163785,232],{"emptyLinePlaceholder":231},[123,163787,163788],{"class":125,"line":268},[123,163789,163790],{"class":143},"    :param weight: 体重，单位kg\n",[123,163792,163793],{"class":125,"line":291},[123,163794,163795],{"class":143},"    :param height: 身高，单位m\n",[123,163797,163798],{"class":125,"line":300},[123,163799,163800],{"class":143},"    :return: BMI数值\n",[123,163802,163803],{"class":125,"line":305},[123,163804,163776],{"class":143},[123,163806,163807,163809,163811,163813,163815,163817],{"class":125,"line":316},[123,163808,6529],{"class":133},[123,163810,163730],{"class":129},[123,163812,3187],{"class":133},[123,163814,163735],{"class":129},[123,163816,13093],{"class":133},[123,163818,50130],{"class":164},[14,163820,163822],{"id":163821},"_59-变量作用域","5.9 变量作用域",[2587,163824,163826],{"id":163825},"_591-局部变量","5.9.1 局部变量",[19,163828,163829],{},"在函数内部定义的变量，只能在函数内部使用。",[113,163831,163833],{"className":115,"code":163832,"language":117,"meta":118,"style":118},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[120,163834,163835,163844,163852,163858,163862,163866,163871],{"__ignoreMap":118},[123,163836,163837,163839,163842],{"class":125,"line":126},[123,163838,34359],{"class":133},[123,163840,163841],{"class":337}," test",[123,163843,34365],{"class":129},[123,163845,163846,163848,163850],{"class":125,"line":140},[123,163847,48000],{"class":129},[123,163849,134],{"class":133},[123,163851,60830],{"class":164},[123,163853,163854,163856],{"class":125,"line":156},[123,163855,33714],{"class":164},[123,163857,2630],{"class":129},[123,163859,163860],{"class":125,"line":168},[123,163861,232],{"emptyLinePlaceholder":231},[123,163863,163864],{"class":125,"line":268},[123,163865,232],{"emptyLinePlaceholder":231},[123,163867,163868],{"class":125,"line":291},[123,163869,163870],{"class":129},"test()\n",[123,163872,163873,163875,163878],{"class":125,"line":300},[123,163874,294],{"class":164},[123,163876,163877],{"class":129},"(num)  ",[123,163879,163880],{"class":2673},"# 报错\n",[2587,163882,163884],{"id":163883},"_592-全局变量","5.9.2 全局变量",[19,163886,163887],{},"在函数外部定义的变量，可以在函数内部读取。",[113,163889,163891],{"className":115,"code":163890,"language":117,"meta":118,"style":118},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[120,163892,163893,163901,163905,163909,163917,163923,163927,163931],{"__ignoreMap":118},[123,163894,163895,163897,163899],{"class":125,"line":126},[123,163896,148920],{"class":129},[123,163898,134],{"class":133},[123,163900,151467],{"class":143},[123,163902,163903],{"class":125,"line":140},[123,163904,232],{"emptyLinePlaceholder":231},[123,163906,163907],{"class":125,"line":156},[123,163908,232],{"emptyLinePlaceholder":231},[123,163910,163911,163913,163915],{"class":125,"line":168},[123,163912,34359],{"class":133},[123,163914,163110],{"class":337},[123,163916,34365],{"class":129},[123,163918,163919,163921],{"class":125,"line":268},[123,163920,33714],{"class":164},[123,163922,152774],{"class":129},[123,163924,163925],{"class":125,"line":291},[123,163926,232],{"emptyLinePlaceholder":231},[123,163928,163929],{"class":125,"line":300},[123,163930,232],{"emptyLinePlaceholder":231},[123,163932,163933],{"class":125,"line":305},[123,163934,163145],{"class":129},[19,163936,163937,163938,2494],{},"如果要在函数内部修改全局变量，需要 ",[120,163939,163940],{},"global",[113,163942,163944],{"className":115,"code":163943,"language":117,"meta":118,"style":118},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[120,163945,163946,163954,163958,163962,163971,163979,163987,163991,163995,164000],{"__ignoreMap":118},[123,163947,163948,163950,163952],{"class":125,"line":126},[123,163949,149075],{"class":129},[123,163951,134],{"class":133},[123,163953,49740],{"class":164},[123,163955,163956],{"class":125,"line":140},[123,163957,232],{"emptyLinePlaceholder":231},[123,163959,163960],{"class":125,"line":156},[123,163961,232],{"emptyLinePlaceholder":231},[123,163963,163964,163966,163969],{"class":125,"line":168},[123,163965,34359],{"class":133},[123,163967,163968],{"class":337}," add_count",[123,163970,34365],{"class":129},[123,163972,163973,163976],{"class":125,"line":268},[123,163974,163975],{"class":133},"    global",[123,163977,163978],{"class":129}," count\n",[123,163980,163981,163983,163985],{"class":125,"line":291},[123,163982,161547],{"class":129},[123,163984,11909],{"class":133},[123,163986,58101],{"class":164},[123,163988,163989],{"class":125,"line":300},[123,163990,232],{"emptyLinePlaceholder":231},[123,163992,163993],{"class":125,"line":305},[123,163994,232],{"emptyLinePlaceholder":231},[123,163996,163997],{"class":125,"line":316},[123,163998,163999],{"class":129},"add_count()\n",[123,164001,164002,164004],{"class":125,"line":673},[123,164003,294],{"class":164},[123,164005,164006],{"class":129},"(count)\n",[19,164008,164009],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164011,164013],{"id":164012},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164015,164016],{},"一个函数中可以调用另一个函数。",[113,164018,164020],{"className":115,"code":164019,"language":117,"meta":118,"style":118},"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",[120,164021,164022,164031,164045,164049,164053,164062,164067,164087,164108,164112,164116,164120],{"__ignoreMap":118},[123,164023,164024,164026,164029],{"class":125,"line":126},[123,164025,34359],{"class":133},[123,164027,164028],{"class":337}," print_line",[123,164030,34365],{"class":129},[123,164032,164033,164035,164037,164039,164041,164043],{"class":125,"line":140},[123,164034,33714],{"class":164},[123,164036,1315],{"class":129},[123,164038,34895],{"class":143},[123,164040,8951],{"class":133},[123,164042,81063],{"class":164},[123,164044,288],{"class":129},[123,164046,164047],{"class":125,"line":156},[123,164048,232],{"emptyLinePlaceholder":231},[123,164050,164051],{"class":125,"line":168},[123,164052,232],{"emptyLinePlaceholder":231},[123,164054,164055,164057,164060],{"class":125,"line":268},[123,164056,34359],{"class":133},[123,164058,164059],{"class":337}," print_info",[123,164061,151489],{"class":129},[123,164063,164064],{"class":125,"line":291},[123,164065,164066],{"class":129},"    print_line()\n",[123,164068,164069,164071,164073,164075,164077,164079,164081,164083,164085],{"class":125,"line":300},[123,164070,33714],{"class":164},[123,164072,1315],{"class":129},[123,164074,2667],{"class":133},[123,164076,158796],{"class":143},[123,164078,3495],{"class":164},[123,164080,663],{"class":129},[123,164082,3545],{"class":164},[123,164084,2859],{"class":143},[123,164086,288],{"class":129},[123,164088,164089,164091,164093,164095,164098,164100,164102,164104,164106],{"class":125,"line":305},[123,164090,33714],{"class":164},[123,164092,1315],{"class":129},[123,164094,2667],{"class":133},[123,164096,164097],{"class":143},"\"年龄:",[123,164099,3495],{"class":164},[123,164101,72621],{"class":129},[123,164103,3545],{"class":164},[123,164105,2859],{"class":143},[123,164107,288],{"class":129},[123,164109,164110],{"class":125,"line":316},[123,164111,164066],{"class":129},[123,164113,164114],{"class":125,"line":673},[123,164115,232],{"emptyLinePlaceholder":231},[123,164117,164118],{"class":125,"line":692},[123,164119,232],{"emptyLinePlaceholder":231},[123,164121,164122,164125,164127,164129,164131],{"class":125,"line":713},[123,164123,164124],{"class":129},"print_info(",[123,164126,152002],{"class":143},[123,164128,251],{"class":129},[123,164130,3252],{"class":164},[123,164132,288],{"class":129},[19,164134,164135],{},"这种方式可以把小功能组合成大功能。",[14,164137,164139],{"id":164138},"_511-参数检查","5.11 参数检查",[19,164141,164142],{},"函数内部可以检查参数是否合法。",[113,164144,164146],{"className":115,"code":164145,"language":117,"meta":118,"style":118},"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",[120,164147,164148,164157,164169,164175,164185,164189,164193,164210,164214,164226,164237,164243],{"__ignoreMap":118},[123,164149,164150,164152,164155],{"class":125,"line":126},[123,164151,34359],{"class":133},[123,164153,164154],{"class":337}," divide",[123,164156,153207],{"class":129},[123,164158,164159,164161,164163,164165,164167],{"class":125,"line":140},[123,164160,1711],{"class":133},[123,164162,13314],{"class":129},[123,164164,5391],{"class":133},[123,164166,6532],{"class":164},[123,164168,1344],{"class":129},[123,164170,164171,164173],{"class":125,"line":156},[123,164172,17182],{"class":133},[123,164174,154286],{"class":164},[123,164176,164177,164179,164181,164183],{"class":125,"line":168},[123,164178,6529],{"class":133},[123,164180,13301],{"class":129},[123,164182,3187],{"class":133},[123,164184,153218],{"class":129},[123,164186,164187],{"class":125,"line":268},[123,164188,232],{"emptyLinePlaceholder":231},[123,164190,164191],{"class":125,"line":291},[123,164192,232],{"emptyLinePlaceholder":231},[123,164194,164195,164197,164199,164202,164204,164206,164208],{"class":125,"line":300},[123,164196,163420],{"class":129},[123,164198,134],{"class":133},[123,164200,164201],{"class":129}," divide(",[123,164203,2193],{"class":164},[123,164205,251],{"class":129},[123,164207,2799],{"class":164},[123,164209,288],{"class":129},[123,164211,164212],{"class":125,"line":305},[123,164213,232],{"emptyLinePlaceholder":231},[123,164215,164216,164218,164220,164222,164224],{"class":125,"line":316},[123,164217,3998],{"class":133},[123,164219,163666],{"class":129},[123,164221,41336],{"class":133},[123,164223,41341],{"class":164},[123,164225,1344],{"class":129},[123,164227,164228,164230,164232,164235],{"class":125,"line":673},[123,164229,33714],{"class":164},[123,164231,1315],{"class":129},[123,164233,164234],{"class":143},"\"除数不能为0\"",[123,164236,288],{"class":129},[123,164238,164239,164241],{"class":125,"line":692},[123,164240,4155],{"class":133},[123,164242,1344],{"class":129},[123,164244,164245,164247],{"class":125,"line":713},[123,164246,33714],{"class":164},[123,164248,78985],{"class":129},[14,164250,164252],{"id":164251},"_512-类型提示","5.12 类型提示",[19,164254,164255],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[113,164257,164259],{"className":115,"code":164258,"language":117,"meta":118,"style":118},"def add(a: int, b: int) -> int:\n    return a + b\n",[120,164260,164261,164284],{"__ignoreMap":118},[123,164262,164263,164265,164267,164270,164272,164275,164277,164280,164282],{"class":125,"line":126},[123,164264,34359],{"class":133},[123,164266,7643],{"class":337},[123,164268,164269],{"class":129},"(a: ",[123,164271,1742],{"class":164},[123,164273,164274],{"class":129},", b: ",[123,164276,1742],{"class":164},[123,164278,164279],{"class":129},") -> ",[123,164281,1742],{"class":164},[123,164283,1344],{"class":129},[123,164285,164286,164288,164290,164292],{"class":125,"line":140},[123,164287,6529],{"class":133},[123,164289,13301],{"class":129},[123,164291,3086],{"class":133},[123,164293,153218],{"class":129},[19,164295,164296],{},"字符串参数：",[113,164298,164300],{"className":115,"code":164299,"language":117,"meta":118,"style":118},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[120,164301,164302,164319],{"__ignoreMap":118},[123,164303,164304,164306,164308,164311,164313,164315,164317],{"class":125,"line":126},[123,164305,34359],{"class":133},[123,164307,163110],{"class":337},[123,164309,164310],{"class":129},"(name: ",[123,164312,3769],{"class":164},[123,164314,164279],{"class":129},[123,164316,98080],{"class":164},[123,164318,1344],{"class":129},[123,164320,164321,164323,164325,164327,164329,164331,164333,164335,164337],{"class":125,"line":140},[123,164322,33714],{"class":164},[123,164324,1315],{"class":129},[123,164326,2667],{"class":133},[123,164328,159168],{"class":143},[123,164330,3495],{"class":164},[123,164332,663],{"class":129},[123,164334,3545],{"class":164},[123,164336,2859],{"class":143},[123,164338,288],{"class":129},[19,164340,164341],{},"列表参数：",[113,164343,164345],{"className":115,"code":164344,"language":117,"meta":118,"style":118},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[120,164346,164347,164366,164374,164386,164395],{"__ignoreMap":118},[123,164348,164349,164351,164354,164357,164359,164362,164364],{"class":125,"line":126},[123,164350,34359],{"class":133},[123,164352,164353],{"class":337}," get_total",[123,164355,164356],{"class":129},"(numbers: list[",[123,164358,1742],{"class":164},[123,164360,164361],{"class":129},"]) -> ",[123,164363,1742],{"class":164},[123,164365,1344],{"class":129},[123,164367,164368,164370,164372],{"class":125,"line":140},[123,164369,161421],{"class":129},[123,164371,134],{"class":133},[123,164373,49740],{"class":164},[123,164375,164376,164378,164381,164383],{"class":125,"line":156},[123,164377,5641],{"class":133},[123,164379,164380],{"class":129}," number ",[123,164382,1405],{"class":133},[123,164384,164385],{"class":129}," numbers:\n",[123,164387,164388,164390,164392],{"class":125,"line":168},[123,164389,162096],{"class":129},[123,164391,11909],{"class":133},[123,164393,164394],{"class":129}," number\n",[123,164396,164397,164399],{"class":125,"line":268},[123,164398,6529],{"class":133},[123,164400,164401],{"class":129}," total\n",[19,164403,164404],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164406,164408],{"id":164407},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[113,164410,164412],{"className":115,"code":164411,"language":117,"meta":118,"style":118},"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",[120,164413,164414,164424,164428,164432,164440,164451,164461,164471,164481,164491,164495,164499,164508,164530,164534,164538,164547,164553,164573,164585,164596,164600,164609,164620,164625,164629,164633,164642,164648,164667,164679,164689,164693,164704,164714,164718,164726,164737,164741,164745,164749,164757,164762,164776,164780,164792,164797,164809,164814,164826,164831,164843,164853,164857,164863],{"__ignoreMap":118},[123,164415,164416,164419,164421],{"class":125,"line":126},[123,164417,164418],{"class":129},"balance ",[123,164420,134],{"class":133},[123,164422,164423],{"class":164}," 1000\n",[123,164425,164426],{"class":125,"line":140},[123,164427,232],{"emptyLinePlaceholder":231},[123,164429,164430],{"class":125,"line":156},[123,164431,232],{"emptyLinePlaceholder":231},[123,164433,164434,164436,164438],{"class":125,"line":168},[123,164435,34359],{"class":133},[123,164437,154147],{"class":337},[123,164439,34365],{"class":129},[123,164441,164442,164444,164446,164449],{"class":125,"line":268},[123,164443,33714],{"class":164},[123,164445,1315],{"class":129},[123,164447,164448],{"class":143},"\"====== ATM ======\"",[123,164450,288],{"class":129},[123,164452,164453,164455,164457,164459],{"class":125,"line":291},[123,164454,33714],{"class":164},[123,164456,1315],{"class":129},[123,164458,162762],{"class":143},[123,164460,288],{"class":129},[123,164462,164463,164465,164467,164469],{"class":125,"line":300},[123,164464,33714],{"class":164},[123,164466,1315],{"class":129},[123,164468,162773],{"class":143},[123,164470,288],{"class":129},[123,164472,164473,164475,164477,164479],{"class":125,"line":305},[123,164474,33714],{"class":164},[123,164476,1315],{"class":129},[123,164478,162784],{"class":143},[123,164480,288],{"class":129},[123,164482,164483,164485,164487,164489],{"class":125,"line":316},[123,164484,33714],{"class":164},[123,164486,1315],{"class":129},[123,164488,162795],{"class":143},[123,164490,288],{"class":129},[123,164492,164493],{"class":125,"line":673},[123,164494,232],{"emptyLinePlaceholder":231},[123,164496,164497],{"class":125,"line":692},[123,164498,232],{"emptyLinePlaceholder":231},[123,164500,164501,164503,164506],{"class":125,"line":713},[123,164502,34359],{"class":133},[123,164504,164505],{"class":337}," show_balance",[123,164507,34365],{"class":129},[123,164509,164510,164512,164514,164516,164519,164521,164524,164526,164528],{"class":125,"line":718},[123,164511,33714],{"class":164},[123,164513,1315],{"class":129},[123,164515,2667],{"class":133},[123,164517,164518],{"class":143},"\"当前余额:",[123,164520,3495],{"class":164},[123,164522,164523],{"class":129},"balance",[123,164525,3545],{"class":164},[123,164527,159126],{"class":143},[123,164529,288],{"class":129},[123,164531,164532],{"class":125,"line":1138},[123,164533,232],{"emptyLinePlaceholder":231},[123,164535,164536],{"class":125,"line":1429},[123,164537,232],{"emptyLinePlaceholder":231},[123,164539,164540,164542,164545],{"class":125,"line":1439},[123,164541,34359],{"class":133},[123,164543,164544],{"class":337}," save_money",[123,164546,34365],{"class":129},[123,164548,164549,164551],{"class":125,"line":1444},[123,164550,163975],{"class":133},[123,164552,152213],{"class":129},[123,164554,164555,164558,164560,164562,164564,164566,164568,164571],{"class":125,"line":1453},[123,164556,164557],{"class":129},"    money ",[123,164559,134],{"class":133},[123,164561,112186],{"class":164},[123,164563,1315],{"class":129},[123,164565,56224],{"class":164},[123,164567,1315],{"class":129},[123,164569,164570],{"class":143},"\"请输入存款金额:\"",[123,164572,32913],{"class":129},[123,164574,164575,164577,164579,164581,164583],{"class":125,"line":1458},[123,164576,1711],{"class":133},[123,164578,152256],{"class":129},[123,164580,4053],{"class":133},[123,164582,6532],{"class":164},[123,164584,1344],{"class":129},[123,164586,164587,164589,164591,164594],{"class":125,"line":1476},[123,164588,34863],{"class":164},[123,164590,1315],{"class":129},[123,164592,164593],{"class":143},"\"金额必须大于0\"",[123,164595,288],{"class":129},[123,164597,164598],{"class":125,"line":1494},[123,164599,154475],{"class":133},[123,164601,164602,164605,164607],{"class":125,"line":1499},[123,164603,164604],{"class":129},"    balance ",[123,164606,11909],{"class":133},[123,164608,152289],{"class":129},[123,164610,164611,164613,164615,164618],{"class":125,"line":1517},[123,164612,33714],{"class":164},[123,164614,1315],{"class":129},[123,164616,164617],{"class":143},"\"存款成功\"",[123,164619,288],{"class":129},[123,164621,164622],{"class":125,"line":1534},[123,164623,164624],{"class":129},"    show_balance()\n",[123,164626,164627],{"class":125,"line":1539},[123,164628,232],{"emptyLinePlaceholder":231},[123,164630,164631],{"class":125,"line":2080},[123,164632,232],{"emptyLinePlaceholder":231},[123,164634,164635,164637,164640],{"class":125,"line":2097},[123,164636,34359],{"class":133},[123,164638,164639],{"class":337}," withdraw_money",[123,164641,34365],{"class":129},[123,164643,164644,164646],{"class":125,"line":2114},[123,164645,163975],{"class":133},[123,164647,152213],{"class":129},[123,164649,164650,164652,164654,164656,164658,164660,164662,164665],{"class":125,"line":2125},[123,164651,164557],{"class":129},[123,164653,134],{"class":133},[123,164655,112186],{"class":164},[123,164657,1315],{"class":129},[123,164659,56224],{"class":164},[123,164661,1315],{"class":129},[123,164663,164664],{"class":143},"\"请输入取款金额:\"",[123,164666,32913],{"class":129},[123,164668,164669,164671,164673,164675,164677],{"class":125,"line":2130},[123,164670,1711],{"class":133},[123,164672,152256],{"class":129},[123,164674,4053],{"class":133},[123,164676,6532],{"class":164},[123,164678,1344],{"class":129},[123,164680,164681,164683,164685,164687],{"class":125,"line":5033},[123,164682,34863],{"class":164},[123,164684,1315],{"class":129},[123,164686,164593],{"class":143},[123,164688,288],{"class":129},[123,164690,164691],{"class":125,"line":5041},[123,164692,154475],{"class":133},[123,164694,164695,164697,164699,164701],{"class":125,"line":5046},[123,164696,1711],{"class":133},[123,164698,152256],{"class":129},[123,164700,3559],{"class":133},[123,164702,164703],{"class":129}," balance:\n",[123,164705,164706,164708,164710,164712],{"class":125,"line":5052},[123,164707,34863],{"class":164},[123,164709,1315],{"class":129},[123,164711,152351],{"class":143},[123,164713,288],{"class":129},[123,164715,164716],{"class":125,"line":5058},[123,164717,154475],{"class":133},[123,164719,164720,164722,164724],{"class":125,"line":5063},[123,164721,164604],{"class":129},[123,164723,152366],{"class":133},[123,164725,152289],{"class":129},[123,164727,164728,164730,164732,164735],{"class":125,"line":10380},[123,164729,33714],{"class":164},[123,164731,1315],{"class":129},[123,164733,164734],{"class":143},"\"取款成功\"",[123,164736,288],{"class":129},[123,164738,164739],{"class":125,"line":10404},[123,164740,164624],{"class":129},[123,164742,164743],{"class":125,"line":10409},[123,164744,232],{"emptyLinePlaceholder":231},[123,164746,164747],{"class":125,"line":10415},[123,164748,232],{"emptyLinePlaceholder":231},[123,164750,164751,164753,164755],{"class":125,"line":10442},[123,164752,111052],{"class":133},[123,164754,97686],{"class":164},[123,164756,1344],{"class":129},[123,164758,164759],{"class":125,"line":10447},[123,164760,164761],{"class":129},"    show_menu()\n",[123,164763,164764,164766,164768,164770,164772,164774],{"class":125,"line":10453},[123,164765,162806],{"class":129},[123,164767,134],{"class":133},[123,164769,63007],{"class":164},[123,164771,1315],{"class":129},[123,164773,155187],{"class":143},[123,164775,288],{"class":129},[123,164777,164778],{"class":125,"line":10465},[123,164779,232],{"emptyLinePlaceholder":231},[123,164781,164782,164784,164786,164788,164790],{"class":125,"line":10477},[123,164783,1711],{"class":133},[123,164785,155200],{"class":129},[123,164787,5391],{"class":133},[123,164789,155205],{"class":143},[123,164791,1344],{"class":129},[123,164793,164794],{"class":125,"line":10489},[123,164795,164796],{"class":129},"        show_balance()\n",[123,164798,164799,164801,164803,164805,164807],{"class":125,"line":12148},[123,164800,41701],{"class":133},[123,164802,155200],{"class":129},[123,164804,5391],{"class":133},[123,164806,155224],{"class":143},[123,164808,1344],{"class":129},[123,164810,164811],{"class":125,"line":12173},[123,164812,164813],{"class":129},"        save_money()\n",[123,164815,164816,164818,164820,164822,164824],{"class":125,"line":12196},[123,164817,41701],{"class":133},[123,164819,155200],{"class":129},[123,164821,5391],{"class":133},[123,164823,155242],{"class":143},[123,164825,1344],{"class":129},[123,164827,164828],{"class":125,"line":12220},[123,164829,164830],{"class":129},"        withdraw_money()\n",[123,164832,164833,164835,164837,164839,164841],{"class":125,"line":12225},[123,164834,41701],{"class":133},[123,164836,155200],{"class":129},[123,164838,5391],{"class":133},[123,164840,155296],{"class":143},[123,164842,1344],{"class":129},[123,164844,164845,164847,164849,164851],{"class":125,"line":12230},[123,164846,34863],{"class":164},[123,164848,1315],{"class":129},[123,164850,155307],{"class":143},[123,164852,288],{"class":129},[123,164854,164855],{"class":125,"line":12235},[123,164856,34039],{"class":133},[123,164858,164859,164861],{"class":125,"line":12244},[123,164860,160136],{"class":133},[123,164862,1344],{"class":129},[123,164864,164865,164867,164869,164871],{"class":125,"line":12249},[123,164866,34863],{"class":164},[123,164868,1315],{"class":129},[123,164870,155328],{"class":143},[123,164872,288],{"class":129},[19,164874,164875],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164877,164879],{"id":164878},"_514-易错点","5.14 易错点",[26,164881,164882,164885,164888,164893,164898,164901],{},[29,164883,164884],{},"函数定义后必须调用才会执行。",[29,164886,164887],{},"函数名后面有括号才是调用。",[29,164889,164890,164892],{},[120,164891,19474],{}," 后面的代码不会执行。",[29,164894,164895,164896,2494],{},"没有返回值的函数默认返回 ",[120,164897,98080],{},[29,164899,164900],{},"局部变量不能在函数外部访问。",[29,164902,164903,164904,164906],{},"不要滥用 ",[120,164905,163940],{},"，更好的方式是让函数返回新值。",[19,164908,164909,164910,164912],{},"例如不用 ",[120,164911,163940],{}," 改写存款：",[113,164914,164916],{"className":115,"code":164915,"language":117,"meta":118,"style":118},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[120,164917,164918,164927,164938,164942,164946,164954,164967],{"__ignoreMap":118},[123,164919,164920,164922,164924],{"class":125,"line":126},[123,164921,34359],{"class":133},[123,164923,164544],{"class":337},[123,164925,164926],{"class":129},"(balance, money):\n",[123,164928,164929,164931,164934,164936],{"class":125,"line":140},[123,164930,6529],{"class":133},[123,164932,164933],{"class":129}," balance ",[123,164935,3086],{"class":133},[123,164937,152289],{"class":129},[123,164939,164940],{"class":125,"line":156},[123,164941,232],{"emptyLinePlaceholder":231},[123,164943,164944],{"class":125,"line":168},[123,164945,232],{"emptyLinePlaceholder":231},[123,164947,164948,164950,164952],{"class":125,"line":268},[123,164949,164418],{"class":129},[123,164951,134],{"class":133},[123,164953,164423],{"class":164},[123,164955,164956,164958,164960,164963,164965],{"class":125,"line":291},[123,164957,164418],{"class":129},[123,164959,134],{"class":133},[123,164961,164962],{"class":129}," save_money(balance, ",[123,164964,1045],{"class":164},[123,164966,288],{"class":129},[123,164968,164969,164971],{"class":125,"line":300},[123,164970,294],{"class":164},[123,164972,164973],{"class":129},"(balance)\n",[14,164975,164977],{"id":164976},"_515-本章练习","5.15 本章练习",[26,164979,164980,164987,164993,164999,165005],{},[29,164981,164982,164983,164986],{},"定义函数 ",[120,164984,164985],{},"print_student(name, age)","，输出学生信息。",[29,164988,164982,164989,164992],{},[120,164990,164991],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,164994,164982,164995,164998],{},[120,164996,164997],{},"is_even(num)","，判断一个数是否为偶数。",[29,165000,164982,165001,165004],{},[120,165002,165003],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,165006,165007],{},"把第 4 章的菜单程序拆分成多个函数。",[2526,165009,165010],{},"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":118,"searchDepth":140,"depth":140,"links":165012},[165013,165014,165015,165016,165017,165018,165019,165020,165021,165025,165026,165027,165028,165029,165030],{"id":163033,"depth":140,"text":163034},{"id":163074,"depth":140,"text":163075},{"id":163164,"depth":140,"text":163165},{"id":163245,"depth":140,"text":163246},{"id":163378,"depth":140,"text":163379},{"id":163500,"depth":140,"text":163501},{"id":163622,"depth":140,"text":163623},{"id":163699,"depth":140,"text":163700},{"id":163821,"depth":140,"text":163822,"children":165022},[165023,165024],{"id":163825,"depth":156,"text":163826},{"id":163883,"depth":156,"text":163884},{"id":164012,"depth":140,"text":164013},{"id":164138,"depth":140,"text":164139},{"id":164251,"depth":140,"text":164252},{"id":164407,"depth":140,"text":164408},{"id":164878,"depth":140,"text":164879},{"id":164976,"depth":140,"text":164977},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163025,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165037,"title":165038,"body":165039,"description":2544,"extension":2545,"meta":168083,"navigation":231,"path":168084,"seo":168085,"stem":168086,"__hash__":168087},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165040,"toc":168064},[165041,165044,165048,165051,165054,165158,165161,165165,165168,165248,165251,165255,165258,165318,165321,165357,165360,165375,165379,165452,165455,165510,165513,165583,165586,165670,165680,165738,165742,165787,165790,165816,165819,165925,165929,165932,165974,165977,166041,166044,166048,166051,166112,166115,166145,166148,166186,166190,166193,166202,166205,166329,166332,166373,166377,166380,166391,166431,166434,166449,166454,166457,166524,166527,166617,166621,166624,166672,166675,166702,166704,166734,166737,166757,166760,166791,166794,166827,166831,166834,166858,166861,166885,166888,166912,166916,166919,167049,167052,167132,167135,167210,167214,167217,167267,167270,167312,167315,167339,167341,167365,167368,167423,167426,167492,167496,167499,167502,167540,167543,167596,167599,167645,167648,167681,167684,167688,168007,168011,168040,168044,168061],[10,165042,165038],{"id":165043},"_6-数据容器",[14,165045,165047],{"id":165046},"_61-什么是数据容器","6.1 什么是数据容器",[19,165049,165050],{},"数据容器用于一次保存多个数据。",[19,165052,165053],{},"常见容器：",[48,165055,165056,165073],{},[51,165057,165058],{},[54,165059,165060,165062,165065,165068,165071],{},[57,165061,28193],{},[57,165063,165064],{},"是否有序",[57,165066,165067],{},"是否可变",[57,165069,165070],{},"是否允许重复",[57,165072,29913],{},[64,165074,165075,165093,165109,165124,165141],{},[54,165076,165077,165080,165083,165086,165089],{},[69,165078,165079],{},"list列表",[69,165081,165082],{},"有序",[69,165084,165085],{},"可变",[69,165087,165088],{},"允许",[69,165090,165091],{},[120,165092,157371],{},[54,165094,165095,165098,165100,165103,165105],{},[69,165096,165097],{},"tuple元组",[69,165099,165082],{},[69,165101,165102],{},"不可变",[69,165104,165088],{},[69,165106,165107],{},[120,165108,157384],{},[54,165110,165111,165114,165116,165118,165120],{},[69,165112,165113],{},"str字符串",[69,165115,165082],{},[69,165117,165102],{},[69,165119,165088],{},[69,165121,165122],{},[120,165123,157994],{},[54,165125,165126,165129,165132,165134,165137],{},[69,165127,165128],{},"set集合",[69,165130,165131],{},"无序",[69,165133,165085],{},[69,165135,165136],{},"不允许",[69,165138,165139],{},[120,165140,157409],{},[54,165142,165143,165146,165148,165150,165153],{},[69,165144,165145],{},"dict字典",[69,165147,165082],{},[69,165149,165085],{},[69,165151,165152],{},"key不允许重复",[69,165154,165155],{},[120,165156,165157],{},"{\"name\": \"小明\"}",[19,165159,165160],{},"Python 3.7 之后，字典保持插入顺序。",[14,165162,165164],{"id":165163},"_62-列表list","6.2 列表list",[19,165166,165167],{},"列表用于保存一组有顺序的数据。",[113,165169,165171],{"className":115,"code":165170,"language":117,"meta":118,"style":118},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[120,165172,165173,165193,165218,165239],{"__ignoreMap":118},[123,165174,165175,165177,165179,165181,165183,165185,165187,165189,165191],{"class":125,"line":126},[123,165176,162494],{"class":129},[123,165178,134],{"class":133},[123,165180,977],{"class":129},[123,165182,152002],{"class":143},[123,165184,251],{"class":129},[123,165186,153050],{"class":143},[123,165188,251],{"class":129},[123,165190,161845],{"class":143},[123,165192,998],{"class":129},[123,165194,165195,165198,165200,165202,165204,165206,165208,165210,165212,165214,165216],{"class":125,"line":140},[123,165196,165197],{"class":129},"numbers ",[123,165199,134],{"class":133},[123,165201,977],{"class":129},[123,165203,2825],{"class":164},[123,165205,251],{"class":129},[123,165207,2692],{"class":164},[123,165209,251],{"class":129},[123,165211,2686],{"class":164},[123,165213,251],{"class":129},[123,165215,2901],{"class":164},[123,165217,998],{"class":129},[123,165219,165220,165223,165225,165227,165229,165231,165233,165235,165237],{"class":125,"line":156},[123,165221,165222],{"class":129},"mixed ",[123,165224,134],{"class":133},[123,165226,977],{"class":129},[123,165228,152002],{"class":143},[123,165230,251],{"class":129},[123,165232,3252],{"class":164},[123,165234,251],{"class":129},[123,165236,870],{"class":164},[123,165238,998],{"class":129},[123,165240,165241,165244,165246],{"class":125,"line":168},[123,165242,165243],{"class":129},"empty ",[123,165245,134],{"class":133},[123,165247,1372],{"class":129},[19,165249,165250],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165252,165254],{"id":165253},"_63-列表索引","6.3 列表索引",[19,165256,165257],{},"正向索引从 0 开始：",[113,165259,165261],{"className":115,"code":165260,"language":117,"meta":118,"style":118},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[120,165262,165263,165283,165287,165298,165308],{"__ignoreMap":118},[123,165264,165265,165267,165269,165271,165273,165275,165277,165279,165281],{"class":125,"line":126},[123,165266,162494],{"class":129},[123,165268,134],{"class":133},[123,165270,977],{"class":129},[123,165272,152002],{"class":143},[123,165274,251],{"class":129},[123,165276,153050],{"class":143},[123,165278,251],{"class":129},[123,165280,161845],{"class":143},[123,165282,998],{"class":129},[123,165284,165285],{"class":125,"line":140},[123,165286,232],{"emptyLinePlaceholder":231},[123,165288,165289,165291,165294,165296],{"class":125,"line":156},[123,165290,294],{"class":164},[123,165292,165293],{"class":129},"(names[",[123,165295,2799],{"class":164},[123,165297,444],{"class":129},[123,165299,165300,165302,165304,165306],{"class":125,"line":168},[123,165301,294],{"class":164},[123,165303,165293],{"class":129},[123,165305,2825],{"class":164},[123,165307,444],{"class":129},[123,165309,165310,165312,165314,165316],{"class":125,"line":268},[123,165311,294],{"class":164},[123,165313,165293],{"class":129},[123,165315,2692],{"class":164},[123,165317,444],{"class":129},[19,165319,165320],{},"反向索引从 -1 开始：",[113,165322,165324],{"className":115,"code":165323,"language":117,"meta":118,"style":118},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[120,165325,165326,165342],{"__ignoreMap":118},[123,165327,165328,165330,165332,165334,165336,165339],{"class":125,"line":126},[123,165329,294],{"class":164},[123,165331,165293],{"class":129},[123,165333,3135],{"class":133},[123,165335,2825],{"class":164},[123,165337,165338],{"class":129},"])  ",[123,165340,165341],{"class":2673},"# 小刚\n",[123,165343,165344,165346,165348,165350,165352,165354],{"class":125,"line":140},[123,165345,294],{"class":164},[123,165347,165293],{"class":129},[123,165349,3135],{"class":133},[123,165351,2692],{"class":164},[123,165353,165338],{"class":129},[123,165355,165356],{"class":2673},"# 小红\n",[19,165358,165359],{},"索引越界会报错：",[113,165361,165363],{"className":115,"code":165362,"language":117,"meta":118,"style":118},"print(names[3])\n",[120,165364,165365],{"__ignoreMap":118},[123,165366,165367,165369,165371,165373],{"class":125,"line":126},[123,165368,294],{"class":164},[123,165370,165293],{"class":129},[123,165372,2686],{"class":164},[123,165374,444],{"class":129},[14,165376,165378],{"id":165377},"_64-列表常用方法","6.4 列表常用方法",[113,165380,165382],{"className":115,"code":165381,"language":117,"meta":118,"style":118},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[120,165383,165384,165400,165404,165413,165427,165441,165445],{"__ignoreMap":118},[123,165385,165386,165388,165390,165392,165394,165396,165398],{"class":125,"line":126},[123,165387,162494],{"class":129},[123,165389,134],{"class":133},[123,165391,977],{"class":129},[123,165393,152002],{"class":143},[123,165395,251],{"class":129},[123,165397,153050],{"class":143},[123,165399,998],{"class":129},[123,165401,165402],{"class":125,"line":140},[123,165403,232],{"emptyLinePlaceholder":231},[123,165405,165406,165409,165411],{"class":125,"line":156},[123,165407,165408],{"class":129},"names.append(",[123,165410,161845],{"class":143},[123,165412,288],{"class":129},[123,165414,165415,165418,165420,165422,165425],{"class":125,"line":168},[123,165416,165417],{"class":129},"names.insert(",[123,165419,2825],{"class":164},[123,165421,251],{"class":129},[123,165423,165424],{"class":143},"\"小李\"",[123,165426,288],{"class":129},[123,165428,165429,165432,165434,165436,165439],{"class":125,"line":268},[123,165430,165431],{"class":129},"names.extend([",[123,165433,11115],{"class":143},[123,165435,251],{"class":129},[123,165437,165438],{"class":143},"\"小赵\"",[123,165440,444],{"class":129},[123,165442,165443],{"class":125,"line":291},[123,165444,232],{"emptyLinePlaceholder":231},[123,165446,165447,165449],{"class":125,"line":300},[123,165448,294],{"class":164},[123,165450,165451],{"class":129},"(names)\n",[19,165453,165454],{},"删除元素：",[113,165456,165458],{"className":115,"code":165457,"language":117,"meta":118,"style":118},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[120,165459,165460,165469,165479,165493,165505],{"__ignoreMap":118},[123,165461,165462,165465,165467],{"class":125,"line":126},[123,165463,165464],{"class":129},"names.remove(",[123,165466,153050],{"class":143},[123,165468,288],{"class":129},[123,165470,165471,165474,165476],{"class":125,"line":140},[123,165472,165473],{"class":129},"last ",[123,165475,134],{"class":133},[123,165477,165478],{"class":129}," names.pop()\n",[123,165480,165481,165484,165486,165489,165491],{"class":125,"line":156},[123,165482,165483],{"class":129},"first ",[123,165485,134],{"class":133},[123,165487,165488],{"class":129}," names.pop(",[123,165490,2799],{"class":164},[123,165492,288],{"class":129},[123,165494,165495,165498,165501,165503],{"class":125,"line":168},[123,165496,165497],{"class":133},"del",[123,165499,165500],{"class":129}," names[",[123,165502,2799],{"class":164},[123,165504,998],{"class":129},[123,165506,165507],{"class":125,"line":268},[123,165508,165509],{"class":129},"names.clear()\n",[19,165511,165512],{},"查询和统计：",[113,165514,165516],{"className":115,"code":165515,"language":117,"meta":118,"style":118},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[120,165517,165518,165546,165550,165561,165572],{"__ignoreMap":118},[123,165519,165520,165522,165524,165526,165528,165530,165532,165534,165536,165538,165540,165542,165544],{"class":125,"line":126},[123,165521,165197],{"class":129},[123,165523,134],{"class":133},[123,165525,977],{"class":129},[123,165527,2825],{"class":164},[123,165529,251],{"class":129},[123,165531,2692],{"class":164},[123,165533,251],{"class":129},[123,165535,2686],{"class":164},[123,165537,251],{"class":129},[123,165539,2692],{"class":164},[123,165541,251],{"class":129},[123,165543,2901],{"class":164},[123,165545,998],{"class":129},[123,165547,165548],{"class":125,"line":140},[123,165549,232],{"emptyLinePlaceholder":231},[123,165551,165552,165554,165557,165559],{"class":125,"line":156},[123,165553,294],{"class":164},[123,165555,165556],{"class":129},"(numbers.index(",[123,165558,2686],{"class":164},[123,165560,32913],{"class":129},[123,165562,165563,165565,165568,165570],{"class":125,"line":168},[123,165564,294],{"class":164},[123,165566,165567],{"class":129},"(numbers.count(",[123,165569,2692],{"class":164},[123,165571,32913],{"class":129},[123,165573,165574,165576,165578,165580],{"class":125,"line":268},[123,165575,294],{"class":164},[123,165577,1315],{"class":129},[123,165579,9791],{"class":164},[123,165581,165582],{"class":129},"(numbers))\n",[19,165584,165585],{},"排序：",[113,165587,165589],{"className":115,"code":165588,"language":117,"meta":118,"style":118},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[120,165590,165591,165615,165619,165624,165631,165635,165649,165655,165659,165664],{"__ignoreMap":118},[123,165592,165593,165595,165597,165599,165601,165603,165605,165607,165609,165611,165613],{"class":125,"line":126},[123,165594,165197],{"class":129},[123,165596,134],{"class":133},[123,165598,977],{"class":129},[123,165600,2686],{"class":164},[123,165602,251],{"class":129},[123,165604,2825],{"class":164},[123,165606,251],{"class":129},[123,165608,2926],{"class":164},[123,165610,251],{"class":129},[123,165612,2692],{"class":164},[123,165614,998],{"class":129},[123,165616,165617],{"class":125,"line":140},[123,165618,232],{"emptyLinePlaceholder":231},[123,165620,165621],{"class":125,"line":156},[123,165622,165623],{"class":129},"numbers.sort()\n",[123,165625,165626,165628],{"class":125,"line":168},[123,165627,294],{"class":164},[123,165629,165630],{"class":129},"(numbers)\n",[123,165632,165633],{"class":125,"line":268},[123,165634,232],{"emptyLinePlaceholder":231},[123,165636,165637,165640,165643,165645,165647],{"class":125,"line":291},[123,165638,165639],{"class":129},"numbers.sort(",[123,165641,165642],{"class":279},"reverse",[123,165644,134],{"class":133},[123,165646,870],{"class":164},[123,165648,288],{"class":129},[123,165650,165651,165653],{"class":125,"line":300},[123,165652,294],{"class":164},[123,165654,165630],{"class":129},[123,165656,165657],{"class":125,"line":305},[123,165658,232],{"emptyLinePlaceholder":231},[123,165660,165661],{"class":125,"line":316},[123,165662,165663],{"class":129},"numbers.reverse()\n",[123,165665,165666,165668],{"class":125,"line":673},[123,165667,294],{"class":164},[123,165669,165630],{"class":129},[19,165671,165672,165675,165676,165679],{},[120,165673,165674],{},"sort()"," 会修改原列表，",[120,165677,165678],{},"sorted()"," 返回新列表。",[113,165681,165683],{"className":115,"code":165682,"language":117,"meta":118,"style":118},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[120,165684,165685,165709,165721,165725,165731],{"__ignoreMap":118},[123,165686,165687,165689,165691,165693,165695,165697,165699,165701,165703,165705,165707],{"class":125,"line":126},[123,165688,165197],{"class":129},[123,165690,134],{"class":133},[123,165692,977],{"class":129},[123,165694,2686],{"class":164},[123,165696,251],{"class":129},[123,165698,2825],{"class":164},[123,165700,251],{"class":129},[123,165702,2926],{"class":164},[123,165704,251],{"class":129},[123,165706,2692],{"class":164},[123,165708,998],{"class":129},[123,165710,165711,165714,165716,165719],{"class":125,"line":140},[123,165712,165713],{"class":129},"new_numbers ",[123,165715,134],{"class":133},[123,165717,165718],{"class":164}," sorted",[123,165720,165630],{"class":129},[123,165722,165723],{"class":125,"line":156},[123,165724,232],{"emptyLinePlaceholder":231},[123,165726,165727,165729],{"class":125,"line":168},[123,165728,294],{"class":164},[123,165730,165630],{"class":129},[123,165732,165733,165735],{"class":125,"line":268},[123,165734,294],{"class":164},[123,165736,165737],{"class":129},"(new_numbers)\n",[14,165739,165741],{"id":165740},"_65-列表遍历","6.5 列表遍历",[113,165743,165745],{"className":115,"code":165744,"language":117,"meta":118,"style":118},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[120,165746,165747,165767,165771,165781],{"__ignoreMap":118},[123,165748,165749,165751,165753,165755,165757,165759,165761,165763,165765],{"class":125,"line":126},[123,165750,162494],{"class":129},[123,165752,134],{"class":133},[123,165754,977],{"class":129},[123,165756,152002],{"class":143},[123,165758,251],{"class":129},[123,165760,153050],{"class":143},[123,165762,251],{"class":129},[123,165764,161845],{"class":143},[123,165766,998],{"class":129},[123,165768,165769],{"class":125,"line":140},[123,165770,232],{"emptyLinePlaceholder":231},[123,165772,165773,165775,165777,165779],{"class":125,"line":156},[123,165774,1399],{"class":133},[123,165776,162530],{"class":129},[123,165778,1405],{"class":133},[123,165780,162535],{"class":129},[123,165782,165783,165785],{"class":125,"line":168},[123,165784,33714],{"class":164},[123,165786,152774],{"class":129},[19,165788,165789],{},"需要索引时：",[113,165791,165793],{"className":115,"code":165792,"language":117,"meta":118,"style":118},"for index, name in enumerate(names):\n    print(index, name)\n",[120,165794,165795,165809],{"__ignoreMap":118},[123,165796,165797,165799,165802,165804,165806],{"class":125,"line":126},[123,165798,1399],{"class":133},[123,165800,165801],{"class":129}," index, name ",[123,165803,1405],{"class":133},[123,165805,34018],{"class":164},[123,165807,165808],{"class":129},"(names):\n",[123,165810,165811,165813],{"class":125,"line":140},[123,165812,33714],{"class":164},[123,165814,165815],{"class":129},"(index, name)\n",[19,165817,165818],{},"统计总分：",[113,165820,165822],{"className":115,"code":165821,"language":117,"meta":118,"style":118},"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",[120,165823,165824,165849,165857,165861,165872,165880,165884,165901],{"__ignoreMap":118},[123,165825,165826,165829,165831,165833,165835,165837,165839,165841,165843,165845,165847],{"class":125,"line":126},[123,165827,165828],{"class":129},"scores ",[123,165830,134],{"class":133},[123,165832,977],{"class":129},[123,165834,467],{"class":164},[123,165836,251],{"class":129},[123,165838,3338],{"class":164},[123,165840,251],{"class":129},[123,165842,2862],{"class":164},[123,165844,251],{"class":129},[123,165846,3164],{"class":164},[123,165848,998],{"class":129},[123,165850,165851,165853,165855],{"class":125,"line":140},[123,165852,159374],{"class":129},[123,165854,134],{"class":133},[123,165856,49740],{"class":164},[123,165858,165859],{"class":125,"line":156},[123,165860,232],{"emptyLinePlaceholder":231},[123,165862,165863,165865,165867,165869],{"class":125,"line":168},[123,165864,1399],{"class":133},[123,165866,159897],{"class":129},[123,165868,1405],{"class":133},[123,165870,165871],{"class":129}," scores:\n",[123,165873,165874,165876,165878],{"class":125,"line":268},[123,165875,161421],{"class":129},[123,165877,11909],{"class":133},[123,165879,4044],{"class":129},[123,165881,165882],{"class":125,"line":291},[123,165883,232],{"emptyLinePlaceholder":231},[123,165885,165886,165889,165891,165894,165896,165898],{"class":125,"line":300},[123,165887,165888],{"class":129},"avg ",[123,165890,134],{"class":133},[123,165892,165893],{"class":129}," total ",[123,165895,3187],{"class":133},[123,165897,9764],{"class":164},[123,165899,165900],{"class":129},"(scores)\n",[123,165902,165903,165905,165907,165909,165912,165914,165917,165919,165921,165923],{"class":125,"line":305},[123,165904,294],{"class":164},[123,165906,1315],{"class":129},[123,165908,2667],{"class":133},[123,165910,165911],{"class":143},"\"平均分:",[123,165913,3495],{"class":164},[123,165915,165916],{"class":129},"avg",[123,165918,159273],{"class":133},[123,165920,3545],{"class":164},[123,165922,2859],{"class":143},[123,165924,288],{"class":129},[14,165926,165928],{"id":165927},"_66-元组tuple","6.6 元组tuple",[19,165930,165931],{},"元组和列表类似，但不可修改。",[113,165933,165935],{"className":115,"code":165934,"language":117,"meta":118,"style":118},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[120,165936,165937,165954],{"__ignoreMap":118},[123,165938,165939,165942,165944,165946,165948,165950,165952],{"class":125,"line":126},[123,165940,165941],{"class":129},"point ",[123,165943,134],{"class":133},[123,165945,4116],{"class":129},[123,165947,2193],{"class":164},[123,165949,251],{"class":129},[123,165951,3302],{"class":164},[123,165953,288],{"class":129},[123,165955,165956,165958,165960,165962,165964,165966,165968,165970,165972],{"class":125,"line":140},[123,165957,118702],{"class":129},[123,165959,134],{"class":133},[123,165961,4116],{"class":129},[123,165963,152002],{"class":143},[123,165965,251],{"class":129},[123,165967,3252],{"class":164},[123,165969,251],{"class":129},[123,165971,150],{"class":143},[123,165973,288],{"class":129},[19,165975,165976],{},"单元素元组必须加逗号：",[113,165978,165980],{"className":115,"code":165979,"language":117,"meta":118,"style":118},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[120,165981,165982,165996,166009,166013,166027],{"__ignoreMap":118},[123,165983,165984,165987,165989,165991,165993],{"class":125,"line":126},[123,165985,165986],{"class":129},"t1 ",[123,165988,134],{"class":133},[123,165990,4116],{"class":129},[123,165992,2193],{"class":164},[123,165994,165995],{"class":129},",)\n",[123,165997,165998,166001,166003,166005,166007],{"class":125,"line":140},[123,165999,166000],{"class":129},"t2 ",[123,166002,134],{"class":133},[123,166004,4116],{"class":129},[123,166006,2193],{"class":164},[123,166008,288],{"class":129},[123,166010,166011],{"class":125,"line":156},[123,166012,232],{"emptyLinePlaceholder":231},[123,166014,166015,166017,166019,166021,166024],{"class":125,"line":168},[123,166016,294],{"class":164},[123,166018,1315],{"class":129},[123,166020,105497],{"class":164},[123,166022,166023],{"class":129},"(t1))  ",[123,166025,166026],{"class":2673},"# tuple\n",[123,166028,166029,166031,166033,166035,166038],{"class":125,"line":268},[123,166030,294],{"class":164},[123,166032,1315],{"class":129},[123,166034,105497],{"class":164},[123,166036,166037],{"class":129},"(t2))  ",[123,166039,166040],{"class":2673},"# int\n",[19,166042,166043],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166045,166047],{"id":166046},"_67-字符串str","6.7 字符串str",[19,166049,166050],{},"字符串也是序列，可以索引、切片和遍历。",[113,166052,166054],{"className":115,"code":166053,"language":117,"meta":118,"style":118},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[120,166055,166056,166064,166068,166079,166091,166095,166106],{"__ignoreMap":118},[123,166057,166058,166060,166062],{"class":125,"line":126},[123,166059,158558],{"class":129},[123,166061,134],{"class":133},[123,166063,161795],{"class":143},[123,166065,166066],{"class":125,"line":140},[123,166067,232],{"emptyLinePlaceholder":231},[123,166069,166070,166072,166075,166077],{"class":125,"line":156},[123,166071,294],{"class":164},[123,166073,166074],{"class":129},"(text[",[123,166076,2799],{"class":164},[123,166078,444],{"class":129},[123,166080,166081,166083,166085,166087,166089],{"class":125,"line":168},[123,166082,294],{"class":164},[123,166084,166074],{"class":129},[123,166086,3135],{"class":133},[123,166088,2825],{"class":164},[123,166090,444],{"class":129},[123,166092,166093],{"class":125,"line":268},[123,166094,232],{"emptyLinePlaceholder":231},[123,166096,166097,166099,166101,166103],{"class":125,"line":291},[123,166098,1399],{"class":133},[123,166100,161806],{"class":129},[123,166102,1405],{"class":133},[123,166104,166105],{"class":129}," text:\n",[123,166107,166108,166110],{"class":125,"line":300},[123,166109,33714],{"class":164},[123,166111,161817],{"class":129},[19,166113,166114],{},"字符串不可变：",[113,166116,166118],{"className":115,"code":166117,"language":117,"meta":118,"style":118},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[120,166119,166120,166128],{"__ignoreMap":118},[123,166121,166122,166124,166126],{"class":125,"line":126},[123,166123,158558],{"class":129},[123,166125,134],{"class":133},[123,166127,161795],{"class":143},[123,166129,166130,166133,166135,166137,166139,166142],{"class":125,"line":140},[123,166131,166132],{"class":129},"text[",[123,166134,2799],{"class":164},[123,166136,1941],{"class":129},[123,166138,134],{"class":133},[123,166140,166141],{"class":143}," \"P\"",[123,166143,166144],{"class":2673},"  # 报错\n",[19,166146,166147],{},"如果要得到新字符串：",[113,166149,166151],{"className":115,"code":166150,"language":117,"meta":118,"style":118},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[120,166152,166153,166161,166179],{"__ignoreMap":118},[123,166154,166155,166157,166159],{"class":125,"line":126},[123,166156,158558],{"class":129},[123,166158,134],{"class":133},[123,166160,161795],{"class":143},[123,166162,166163,166165,166167,166169,166171,166174,166176],{"class":125,"line":140},[123,166164,158558],{"class":129},[123,166166,134],{"class":133},[123,166168,166141],{"class":143},[123,166170,47973],{"class":133},[123,166172,166173],{"class":129}," text[",[123,166175,2825],{"class":164},[123,166177,166178],{"class":129},":]\n",[123,166180,166181,166183],{"class":125,"line":156},[123,166182,294],{"class":164},[123,166184,166185],{"class":129},"(text)\n",[14,166187,166189],{"id":166188},"_68-切片","6.8 切片",[19,166191,166192],{},"切片用于从序列中取一部分。",[113,166194,166196],{"className":115,"code":166195,"language":117,"meta":118,"style":118},"序列[开始:结束:步长]\n",[120,166197,166198],{"__ignoreMap":118},[123,166199,166200],{"class":125,"line":126},[123,166201,166195],{"class":129},[19,166203,166204],{},"结束位置不包含。",[113,166206,166208],{"className":115,"code":166207,"language":117,"meta":118,"style":118},"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",[120,166209,166210,166247,166251,166270,166285,166299,166313],{"__ignoreMap":118},[123,166211,166212,166215,166217,166219,166221,166223,166225,166227,166229,166231,166233,166235,166237,166239,166241,166243,166245],{"class":125,"line":126},[123,166213,166214],{"class":129},"nums ",[123,166216,134],{"class":133},[123,166218,977],{"class":129},[123,166220,2799],{"class":164},[123,166222,251],{"class":129},[123,166224,2825],{"class":164},[123,166226,251],{"class":129},[123,166228,2692],{"class":164},[123,166230,251],{"class":129},[123,166232,2686],{"class":164},[123,166234,251],{"class":129},[123,166236,2901],{"class":164},[123,166238,251],{"class":129},[123,166240,2926],{"class":164},[123,166242,251],{"class":129},[123,166244,2951],{"class":164},[123,166246,998],{"class":129},[123,166248,166249],{"class":125,"line":140},[123,166250,232],{"emptyLinePlaceholder":231},[123,166252,166253,166255,166258,166260,166262,166264,166267],{"class":125,"line":156},[123,166254,294],{"class":164},[123,166256,166257],{"class":129},"(nums[",[123,166259,2825],{"class":164},[123,166261,3460],{"class":129},[123,166263,2901],{"class":164},[123,166265,166266],{"class":129},"])    ",[123,166268,166269],{"class":2673},"# [1, 2, 3]\n",[123,166271,166272,166274,166277,166279,166282],{"class":125,"line":168},[123,166273,294],{"class":164},[123,166275,166276],{"class":129},"(nums[:",[123,166278,2686],{"class":164},[123,166280,166281],{"class":129},"])     ",[123,166283,166284],{"class":2673},"# [0, 1, 2]\n",[123,166286,166287,166289,166291,166293,166296],{"class":125,"line":268},[123,166288,294],{"class":164},[123,166290,166257],{"class":129},[123,166292,2686],{"class":164},[123,166294,166295],{"class":129},":])     ",[123,166297,166298],{"class":2673},"# [3, 4, 5, 6]\n",[123,166300,166301,166303,166306,166308,166310],{"class":125,"line":291},[123,166302,294],{"class":164},[123,166304,166305],{"class":129},"(nums[::",[123,166307,2692],{"class":164},[123,166309,166266],{"class":129},[123,166311,166312],{"class":2673},"# [0, 2, 4, 6]\n",[123,166314,166315,166317,166319,166321,166323,166326],{"class":125,"line":300},[123,166316,294],{"class":164},[123,166318,166305],{"class":129},[123,166320,3135],{"class":133},[123,166322,2825],{"class":164},[123,166324,166325],{"class":129},"])   ",[123,166327,166328],{"class":2673},"# 反转\n",[19,166330,166331],{},"字符串切片：",[113,166333,166335],{"className":115,"code":166334,"language":117,"meta":118,"style":118},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[120,166336,166337,166346,166360],{"__ignoreMap":118},[123,166338,166339,166341,166343],{"class":125,"line":126},[123,166340,158558],{"class":129},[123,166342,134],{"class":133},[123,166344,166345],{"class":143}," \"abcdef\"\n",[123,166347,166348,166350,166352,166354,166356,166358],{"class":125,"line":140},[123,166349,294],{"class":164},[123,166351,166074],{"class":129},[123,166353,2825],{"class":164},[123,166355,3460],{"class":129},[123,166357,2901],{"class":164},[123,166359,444],{"class":129},[123,166361,166362,166364,166367,166369,166371],{"class":125,"line":156},[123,166363,294],{"class":164},[123,166365,166366],{"class":129},"(text[::",[123,166368,3135],{"class":133},[123,166370,2825],{"class":164},[123,166372,444],{"class":129},[14,166374,166376],{"id":166375},"_69-集合set","6.9 集合set",[19,166378,166379],{},"集合特点：",[26,166381,166382,166385,166388],{},[29,166383,166384],{},"无序。",[29,166386,166387],{},"元素不重复。",[29,166389,166390],{},"可以做交集、并集、差集。",[113,166392,166394],{"className":115,"code":166393,"language":117,"meta":118,"style":118},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[120,166395,166396,166424],{"__ignoreMap":118},[123,166397,166398,166400,166402,166404,166406,166408,166410,166412,166414,166416,166418,166420,166422],{"class":125,"line":126},[123,166399,166214],{"class":129},[123,166401,134],{"class":133},[123,166403,241],{"class":129},[123,166405,2825],{"class":164},[123,166407,251],{"class":129},[123,166409,2692],{"class":164},[123,166411,251],{"class":129},[123,166413,2686],{"class":164},[123,166415,251],{"class":129},[123,166417,2686],{"class":164},[123,166419,251],{"class":129},[123,166421,2901],{"class":164},[123,166423,171],{"class":129},[123,166425,166426,166428],{"class":125,"line":140},[123,166427,294],{"class":164},[123,166429,166430],{"class":129},"(nums)\n",[19,166432,166433],{},"创建空集合：",[113,166435,166437],{"className":115,"code":166436,"language":117,"meta":118,"style":118},"s = set()\n",[120,166438,166439],{"__ignoreMap":118},[123,166440,166441,166443,166445,166447],{"class":125,"line":126},[123,166442,13011],{"class":129},[123,166444,134],{"class":133},[123,166446,122110],{"class":164},[123,166448,4420],{"class":129},[19,166450,11457,166451,166453],{},[120,166452,34871],{}," 是空字典，不是空集合。",[19,166455,166456],{},"集合常用操作：",[113,166458,166460],{"className":115,"code":166459,"language":117,"meta":118,"style":118},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[120,166461,166462,166482,166486,166495,166504,166513],{"__ignoreMap":118},[123,166463,166464,166466,166468,166470,166472,166474,166476,166478,166480],{"class":125,"line":126},[123,166465,13011],{"class":129},[123,166467,134],{"class":133},[123,166469,241],{"class":129},[123,166471,2825],{"class":164},[123,166473,251],{"class":129},[123,166475,2692],{"class":164},[123,166477,251],{"class":129},[123,166479,2686],{"class":164},[123,166481,171],{"class":129},[123,166483,166484],{"class":125,"line":140},[123,166485,232],{"emptyLinePlaceholder":231},[123,166487,166488,166491,166493],{"class":125,"line":156},[123,166489,166490],{"class":129},"s.add(",[123,166492,2901],{"class":164},[123,166494,288],{"class":129},[123,166496,166497,166500,166502],{"class":125,"line":168},[123,166498,166499],{"class":129},"s.remove(",[123,166501,2692],{"class":164},[123,166503,288],{"class":129},[123,166505,166506,166509,166511],{"class":125,"line":268},[123,166507,166508],{"class":129},"s.discard(",[123,166510,2193],{"class":164},[123,166512,288],{"class":129},[123,166514,166515,166517,166519,166521],{"class":125,"line":291},[123,166516,294],{"class":164},[123,166518,1315],{"class":129},[123,166520,9791],{"class":164},[123,166522,166523],{"class":129},"(s))\n",[19,166525,166526],{},"交并差：",[113,166528,166530],{"className":115,"code":166529,"language":117,"meta":118,"style":118},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[120,166531,166532,166552,166572,166576,166591,166604],{"__ignoreMap":118},[123,166533,166534,166536,166538,166540,166542,166544,166546,166548,166550],{"class":125,"line":126},[123,166535,13351],{"class":129},[123,166537,134],{"class":133},[123,166539,241],{"class":129},[123,166541,2825],{"class":164},[123,166543,251],{"class":129},[123,166545,2692],{"class":164},[123,166547,251],{"class":129},[123,166549,2686],{"class":164},[123,166551,171],{"class":129},[123,166553,166554,166556,166558,166560,166562,166564,166566,166568,166570],{"class":125,"line":140},[123,166555,13377],{"class":129},[123,166557,134],{"class":133},[123,166559,241],{"class":129},[123,166561,2686],{"class":164},[123,166563,251],{"class":129},[123,166565,2901],{"class":164},[123,166567,251],{"class":129},[123,166569,2926],{"class":164},[123,166571,171],{"class":129},[123,166573,166574],{"class":125,"line":156},[123,166575,232],{"emptyLinePlaceholder":231},[123,166577,166578,166580,166583,166585,166588],{"class":125,"line":168},[123,166579,294],{"class":164},[123,166581,166582],{"class":129},"(a ",[123,166584,2960],{"class":133},[123,166586,166587],{"class":129}," b)  ",[123,166589,166590],{"class":2673},"# 交集\n",[123,166592,166593,166595,166597,166599,166601],{"class":125,"line":268},[123,166594,294],{"class":164},[123,166596,166582],{"class":129},[123,166598,3520],{"class":133},[123,166600,166587],{"class":129},[123,166602,166603],{"class":2673},"# 并集\n",[123,166605,166606,166608,166610,166612,166614],{"class":125,"line":291},[123,166607,294],{"class":164},[123,166609,166582],{"class":129},[123,166611,3135],{"class":133},[123,166613,166587],{"class":129},[123,166615,166616],{"class":2673},"# 差集\n",[14,166618,166620],{"id":166619},"_610-字典dict","6.10 字典dict",[19,166622,166623],{},"字典通过 key-value 保存数据。",[113,166625,166627],{"className":115,"code":166626,"language":117,"meta":118,"style":118},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[120,166628,166629,166637,166647,166658,166668],{"__ignoreMap":118},[123,166630,166631,166633,166635],{"class":125,"line":126},[123,166632,151595],{"class":129},[123,166634,134],{"class":133},[123,166636,137],{"class":129},[123,166638,166639,166641,166643,166645],{"class":125,"line":140},[123,166640,144],{"class":143},[123,166642,147],{"class":129},[123,166644,152002],{"class":143},[123,166646,153],{"class":129},[123,166648,166649,166652,166654,166656],{"class":125,"line":156},[123,166650,166651],{"class":143},"    \"age\"",[123,166653,147],{"class":129},[123,166655,3252],{"class":164},[123,166657,153],{"class":129},[123,166659,166660,166663,166665],{"class":125,"line":168},[123,166661,166662],{"class":143},"    \"score\"",[123,166664,147],{"class":129},[123,166666,166667],{"class":164},"95\n",[123,166669,166670],{"class":125,"line":268},[123,166671,171],{"class":129},[19,166673,166674],{},"获取值：",[113,166676,166678],{"className":115,"code":166677,"language":117,"meta":118,"style":118},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[120,166679,166680,166691],{"__ignoreMap":118},[123,166681,166682,166684,166687,166689],{"class":125,"line":126},[123,166683,294],{"class":164},[123,166685,166686],{"class":129},"(student[",[123,166688,244],{"class":143},[123,166690,444],{"class":129},[123,166692,166693,166695,166698,166700],{"class":125,"line":140},[123,166694,294],{"class":164},[123,166696,166697],{"class":129},"(student.get(",[123,166699,244],{"class":143},[123,166701,32913],{"class":129},[19,166703,17817],{},[113,166705,166707],{"className":115,"code":166706,"language":117,"meta":118,"style":118},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[120,166708,166709,166722],{"__ignoreMap":118},[123,166710,166711,166713,166716,166719],{"class":125,"line":126},[123,166712,154973],{"class":129},[123,166714,166715],{"class":143},"\"address\"",[123,166717,166718],{"class":129},"]     ",[123,166720,166721],{"class":2673},"# key不存在会报错\n",[123,166723,166724,166727,166729,166731],{"class":125,"line":140},[123,166725,166726],{"class":129},"student.get(",[123,166728,166715],{"class":143},[123,166730,1336],{"class":129},[123,166732,166733],{"class":2673},"# key不存在返回None\n",[19,166735,166736],{},"设置默认值：",[113,166738,166740],{"className":115,"code":166739,"language":117,"meta":118,"style":118},"print(student.get(\"address\", \"未知\"))\n",[120,166741,166742],{"__ignoreMap":118},[123,166743,166744,166746,166748,166750,166752,166755],{"class":125,"line":126},[123,166745,294],{"class":164},[123,166747,166697],{"class":129},[123,166749,166715],{"class":143},[123,166751,251],{"class":129},[123,166753,166754],{"class":143},"\"未知\"",[123,166756,32913],{"class":129},[19,166758,166759],{},"新增和修改：",[113,166761,166763],{"className":115,"code":166762,"language":117,"meta":118,"style":118},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[120,166764,166765,166778],{"__ignoreMap":118},[123,166766,166767,166769,166771,166773,166775],{"class":125,"line":126},[123,166768,154973],{"class":129},[123,166770,71525],{"class":143},[123,166772,1941],{"class":129},[123,166774,134],{"class":133},[123,166776,166777],{"class":164}," 19\n",[123,166779,166780,166782,166784,166786,166788],{"class":125,"line":140},[123,166781,154973],{"class":129},[123,166783,166715],{"class":143},[123,166785,1941],{"class":129},[123,166787,134],{"class":133},[123,166789,166790],{"class":143}," \"北京\"\n",[19,166792,166793],{},"删除：",[113,166795,166797],{"className":115,"code":166796,"language":117,"meta":118,"style":118},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[120,166798,166799,166812,166822],{"__ignoreMap":118},[123,166800,166801,166803,166805,166808,166810],{"class":125,"line":126},[123,166802,157472],{"class":129},[123,166804,134],{"class":133},[123,166806,166807],{"class":129}," student.pop(",[123,166809,153586],{"class":143},[123,166811,288],{"class":129},[123,166813,166814,166816,166818,166820],{"class":125,"line":140},[123,166815,165497],{"class":133},[123,166817,154263],{"class":129},[123,166819,71525],{"class":143},[123,166821,998],{"class":129},[123,166823,166824],{"class":125,"line":156},[123,166825,166826],{"class":129},"student.clear()\n",[14,166828,166830],{"id":166829},"_611-字典遍历","6.11 字典遍历",[19,166832,166833],{},"遍历 key：",[113,166835,166837],{"className":115,"code":166836,"language":117,"meta":118,"style":118},"for key in student:\n    print(key, student[key])\n",[120,166838,166839,166851],{"__ignoreMap":118},[123,166840,166841,166843,166846,166848],{"class":125,"line":126},[123,166842,1399],{"class":133},[123,166844,166845],{"class":129}," key ",[123,166847,1405],{"class":133},[123,166849,166850],{"class":129}," student:\n",[123,166852,166853,166855],{"class":125,"line":140},[123,166854,33714],{"class":164},[123,166856,166857],{"class":129},"(key, student[key])\n",[19,166859,166860],{},"遍历 value：",[113,166862,166864],{"className":115,"code":166863,"language":117,"meta":118,"style":118},"for value in student.values():\n    print(value)\n",[120,166865,166866,166878],{"__ignoreMap":118},[123,166867,166868,166870,166873,166875],{"class":125,"line":126},[123,166869,1399],{"class":133},[123,166871,166872],{"class":129}," value ",[123,166874,1405],{"class":133},[123,166876,166877],{"class":129}," student.values():\n",[123,166879,166880,166882],{"class":125,"line":140},[123,166881,33714],{"class":164},[123,166883,166884],{"class":129},"(value)\n",[19,166886,166887],{},"遍历 key 和 value：",[113,166889,166891],{"className":115,"code":166890,"language":117,"meta":118,"style":118},"for key, value in student.items():\n    print(key, value)\n",[120,166892,166893,166905],{"__ignoreMap":118},[123,166894,166895,166897,166900,166902],{"class":125,"line":126},[123,166896,1399],{"class":133},[123,166898,166899],{"class":129}," key, value ",[123,166901,1405],{"class":133},[123,166903,166904],{"class":129}," student.items():\n",[123,166906,166907,166909],{"class":125,"line":140},[123,166908,33714],{"class":164},[123,166910,166911],{"class":129},"(key, value)\n",[14,166913,166915],{"id":166914},"_612-嵌套容器","6.12 嵌套容器",[19,166917,166918],{},"列表中保存字典，是项目中最常见的结构之一。",[113,166920,166922],{"className":115,"code":166921,"language":117,"meta":118,"style":118},"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",[120,166923,166924,166932,166960,166988,167016,167020,167024,167034],{"__ignoreMap":118},[123,166925,166926,166928,166930],{"class":125,"line":126},[123,166927,161830],{"class":129},[123,166929,134],{"class":133},[123,166931,1587],{"class":129},[123,166933,166934,166936,166938,166940,166942,166944,166946,166948,166950,166952,166954,166956,166958],{"class":125,"line":140},[123,166935,1592],{"class":129},[123,166937,244],{"class":143},[123,166939,147],{"class":129},[123,166941,152002],{"class":143},[123,166943,251],{"class":129},[123,166945,71525],{"class":143},[123,166947,147],{"class":129},[123,166949,3252],{"class":164},[123,166951,251],{"class":129},[123,166953,153586],{"class":143},[123,166955,147],{"class":129},[123,166957,3588],{"class":164},[123,166959,1202],{"class":129},[123,166961,166962,166964,166966,166968,166970,166972,166974,166976,166978,166980,166982,166984,166986],{"class":125,"line":156},[123,166963,1592],{"class":129},[123,166965,244],{"class":143},[123,166967,147],{"class":129},[123,166969,153050],{"class":143},[123,166971,251],{"class":129},[123,166973,71525],{"class":143},[123,166975,147],{"class":129},[123,166977,3227],{"class":164},[123,166979,251],{"class":129},[123,166981,153586],{"class":143},[123,166983,147],{"class":129},[123,166985,3413],{"class":164},[123,166987,1202],{"class":129},[123,166989,166990,166992,166994,166996,166998,167000,167002,167004,167006,167008,167010,167012,167014],{"class":125,"line":168},[123,166991,1592],{"class":129},[123,166993,244],{"class":143},[123,166995,147],{"class":129},[123,166997,161845],{"class":143},[123,166999,251],{"class":129},[123,167001,71525],{"class":143},[123,167003,147],{"class":129},[123,167005,3277],{"class":164},[123,167007,251],{"class":129},[123,167009,153586],{"class":143},[123,167011,147],{"class":129},[123,167013,3012],{"class":164},[123,167015,1202],{"class":129},[123,167017,167018],{"class":125,"line":268},[123,167019,998],{"class":129},[123,167021,167022],{"class":125,"line":291},[123,167023,232],{"emptyLinePlaceholder":231},[123,167025,167026,167028,167030,167032],{"class":125,"line":300},[123,167027,1399],{"class":133},[123,167029,154251],{"class":129},[123,167031,1405],{"class":133},[123,167033,154256],{"class":129},[123,167035,167036,167038,167040,167042,167045,167047],{"class":125,"line":305},[123,167037,33714],{"class":164},[123,167039,166686],{"class":129},[123,167041,244],{"class":143},[123,167043,167044],{"class":129},"], student[",[123,167046,153586],{"class":143},[123,167048,444],{"class":129},[19,167050,167051],{},"统计平均分：",[113,167053,167055],{"className":115,"code":167054,"language":117,"meta":118,"style":118},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[120,167056,167057,167065,167069,167079,167091,167095,167110],{"__ignoreMap":118},[123,167058,167059,167061,167063],{"class":125,"line":126},[123,167060,159374],{"class":129},[123,167062,134],{"class":133},[123,167064,49740],{"class":164},[123,167066,167067],{"class":125,"line":140},[123,167068,232],{"emptyLinePlaceholder":231},[123,167070,167071,167073,167075,167077],{"class":125,"line":156},[123,167072,1399],{"class":133},[123,167074,154251],{"class":129},[123,167076,1405],{"class":133},[123,167078,154256],{"class":129},[123,167080,167081,167083,167085,167087,167089],{"class":125,"line":168},[123,167082,161421],{"class":129},[123,167084,11909],{"class":133},[123,167086,154263],{"class":129},[123,167088,153586],{"class":143},[123,167090,998],{"class":129},[123,167092,167093],{"class":125,"line":268},[123,167094,232],{"emptyLinePlaceholder":231},[123,167096,167097,167099,167101,167103,167105,167107],{"class":125,"line":291},[123,167098,165888],{"class":129},[123,167100,134],{"class":133},[123,167102,165893],{"class":129},[123,167104,3187],{"class":133},[123,167106,9764],{"class":164},[123,167108,167109],{"class":129},"(students)\n",[123,167111,167112,167114,167116,167118,167120,167122,167124,167126,167128,167130],{"class":125,"line":300},[123,167113,294],{"class":164},[123,167115,1315],{"class":129},[123,167117,2667],{"class":133},[123,167119,165911],{"class":143},[123,167121,3495],{"class":164},[123,167123,165916],{"class":129},[123,167125,159273],{"class":133},[123,167127,3545],{"class":164},[123,167129,2859],{"class":143},[123,167131,288],{"class":129},[19,167133,167134],{},"查找学生：",[113,167136,167138],{"className":115,"code":167137,"language":117,"meta":118,"style":118},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[120,167139,167140,167155,167159,167169,167183,167189,167193,167199],{"__ignoreMap":118},[123,167141,167142,167144,167146,167148,167150,167153],{"class":125,"line":126},[123,167143,113967],{"class":129},[123,167145,134],{"class":133},[123,167147,63007],{"class":164},[123,167149,1315],{"class":129},[123,167151,167152],{"class":143},"\"请输入学生姓名:\"",[123,167154,288],{"class":129},[123,167156,167157],{"class":125,"line":140},[123,167158,232],{"emptyLinePlaceholder":231},[123,167160,167161,167163,167165,167167],{"class":125,"line":156},[123,167162,1399],{"class":133},[123,167164,154251],{"class":129},[123,167166,1405],{"class":133},[123,167168,154256],{"class":129},[123,167170,167171,167173,167175,167177,167179,167181],{"class":125,"line":168},[123,167172,1711],{"class":133},[123,167174,154263],{"class":129},[123,167176,244],{"class":143},[123,167178,1941],{"class":129},[123,167180,5391],{"class":133},[123,167182,162546],{"class":129},[123,167184,167185,167187],{"class":125,"line":268},[123,167186,34863],{"class":164},[123,167188,152156],{"class":129},[123,167190,167191],{"class":125,"line":291},[123,167192,34039],{"class":133},[123,167194,167195,167197],{"class":125,"line":300},[123,167196,4155],{"class":133},[123,167198,1344],{"class":129},[123,167200,167201,167203,167205,167208],{"class":125,"line":305},[123,167202,33714],{"class":164},[123,167204,1315],{"class":129},[123,167206,167207],{"class":143},"\"没有找到\"",[123,167209,288],{"class":129},[14,167211,167213],{"id":167212},"_613-容器通用操作","6.13 容器通用操作",[19,167215,167216],{},"长度：",[113,167218,167220],{"className":115,"code":167219,"language":117,"meta":118,"style":118},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[120,167221,167222,167241,167251],{"__ignoreMap":118},[123,167223,167224,167226,167229,167231,167233,167235,167237,167239],{"class":125,"line":126},[123,167225,9791],{"class":164},[123,167227,167228],{"class":129},"([",[123,167230,2825],{"class":164},[123,167232,251],{"class":129},[123,167234,2692],{"class":164},[123,167236,251],{"class":129},[123,167238,2686],{"class":164},[123,167240,444],{"class":129},[123,167242,167243,167245,167247,167249],{"class":125,"line":140},[123,167244,9791],{"class":164},[123,167246,1315],{"class":129},[123,167248,157994],{"class":143},[123,167250,288],{"class":129},[123,167252,167253,167255,167258,167260,167262,167264],{"class":125,"line":156},[123,167254,9791],{"class":164},[123,167256,167257],{"class":129},"({",[123,167259,244],{"class":143},[123,167261,147],{"class":129},[123,167263,152002],{"class":143},[123,167265,167266],{"class":129},"})\n",[19,167268,167269],{},"最大最小：",[113,167271,167273],{"className":115,"code":167272,"language":117,"meta":118,"style":118},"max([1, 2, 3])\nmin([1, 2, 3])\n",[120,167274,167275,167293],{"__ignoreMap":118},[123,167276,167277,167279,167281,167283,167285,167287,167289,167291],{"class":125,"line":126},[123,167278,8448],{"class":164},[123,167280,167228],{"class":129},[123,167282,2825],{"class":164},[123,167284,251],{"class":129},[123,167286,2692],{"class":164},[123,167288,251],{"class":129},[123,167290,2686],{"class":164},[123,167292,444],{"class":129},[123,167294,167295,167298,167300,167302,167304,167306,167308,167310],{"class":125,"line":140},[123,167296,167297],{"class":164},"min",[123,167299,167228],{"class":129},[123,167301,2825],{"class":164},[123,167303,251],{"class":129},[123,167305,2692],{"class":164},[123,167307,251],{"class":129},[123,167309,2686],{"class":164},[123,167311,444],{"class":129},[19,167313,167314],{},"求和：",[113,167316,167318],{"className":115,"code":167317,"language":117,"meta":118,"style":118},"sum([1, 2, 3])\n",[120,167319,167320],{"__ignoreMap":118},[123,167321,167322,167325,167327,167329,167331,167333,167335,167337],{"class":125,"line":126},[123,167323,167324],{"class":164},"sum",[123,167326,167228],{"class":129},[123,167328,2825],{"class":164},[123,167330,251],{"class":129},[123,167332,2692],{"class":164},[123,167334,251],{"class":129},[123,167336,2686],{"class":164},[123,167338,444],{"class":129},[19,167340,165585],{},[113,167342,167344],{"className":115,"code":167343,"language":117,"meta":118,"style":118},"sorted([3, 1, 2])\n",[120,167345,167346],{"__ignoreMap":118},[123,167347,167348,167351,167353,167355,167357,167359,167361,167363],{"class":125,"line":126},[123,167349,167350],{"class":164},"sorted",[123,167352,167228],{"class":129},[123,167354,2686],{"class":164},[123,167356,251],{"class":129},[123,167358,2825],{"class":164},[123,167360,251],{"class":129},[123,167362,2692],{"class":164},[123,167364,444],{"class":129},[19,167366,167367],{},"类型转换：",[113,167369,167371],{"className":115,"code":167370,"language":117,"meta":118,"style":118},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[120,167372,167373,167383,167401],{"__ignoreMap":118},[123,167374,167375,167377,167379,167381],{"class":125,"line":126},[123,167376,156184],{"class":164},[123,167378,1315],{"class":129},[123,167380,157994],{"class":143},[123,167382,288],{"class":129},[123,167384,167385,167387,167389,167391,167393,167395,167397,167399],{"class":125,"line":140},[123,167386,157379],{"class":164},[123,167388,167228],{"class":129},[123,167390,2825],{"class":164},[123,167392,251],{"class":129},[123,167394,2692],{"class":164},[123,167396,251],{"class":129},[123,167398,2686],{"class":164},[123,167400,444],{"class":129},[123,167402,167403,167405,167407,167409,167411,167413,167415,167417,167419,167421],{"class":125,"line":156},[123,167404,157404],{"class":164},[123,167406,167228],{"class":129},[123,167408,2825],{"class":164},[123,167410,251],{"class":129},[123,167412,2825],{"class":164},[123,167414,251],{"class":129},[123,167416,2692],{"class":164},[123,167418,251],{"class":129},[123,167420,2686],{"class":164},[123,167422,444],{"class":129},[19,167424,167425],{},"成员判断：",[113,167427,167429],{"className":115,"code":167428,"language":117,"meta":118,"style":118},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[120,167430,167431,167448,167472],{"__ignoreMap":118},[123,167432,167433,167435,167437,167440,167443,167446],{"class":125,"line":126},[123,167434,294],{"class":164},[123,167436,1315],{"class":129},[123,167438,167439],{"class":143},"\"a\"",[123,167441,167442],{"class":133}," in",[123,167444,167445],{"class":143}," \"abc\"",[123,167447,288],{"class":129},[123,167449,167450,167452,167454,167456,167458,167460,167462,167464,167466,167468,167470],{"class":125,"line":140},[123,167451,294],{"class":164},[123,167453,1315],{"class":129},[123,167455,2825],{"class":164},[123,167457,167442],{"class":133},[123,167459,977],{"class":129},[123,167461,2825],{"class":164},[123,167463,251],{"class":129},[123,167465,2692],{"class":164},[123,167467,251],{"class":129},[123,167469,2686],{"class":164},[123,167471,444],{"class":129},[123,167473,167474,167476,167478,167480,167482,167484,167486,167488,167490],{"class":125,"line":156},[123,167475,294],{"class":164},[123,167477,1315],{"class":129},[123,167479,244],{"class":143},[123,167481,167442],{"class":133},[123,167483,241],{"class":129},[123,167485,244],{"class":143},[123,167487,147],{"class":129},[123,167489,152002],{"class":143},[123,167491,167266],{"class":129},[14,167493,167495],{"id":167494},"_614-推导式","6.14 推导式",[19,167497,167498],{},"推导式用于快速生成容器。",[19,167500,167501],{},"列表推导式：",[113,167503,167505],{"className":115,"code":167504,"language":117,"meta":118,"style":118},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[120,167506,167507,167534],{"__ignoreMap":118},[123,167508,167509,167511,167513,167516,167518,167520,167522,167524,167526,167528,167530,167532],{"class":125,"line":126},[123,167510,166214],{"class":129},[123,167512,134],{"class":133},[123,167514,167515],{"class":129}," [i ",[123,167517,1399],{"class":133},[123,167519,11870],{"class":129},[123,167521,1405],{"class":133},[123,167523,34855],{"class":164},[123,167525,1315],{"class":129},[123,167527,2825],{"class":164},[123,167529,251],{"class":129},[123,167531,2951],{"class":164},[123,167533,99694],{"class":129},[123,167535,167536,167538],{"class":125,"line":140},[123,167537,294],{"class":164},[123,167539,166430],{"class":129},[19,167541,167542],{},"带条件：",[113,167544,167546],{"className":115,"code":167545,"language":117,"meta":118,"style":118},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[120,167547,167548,167589],{"__ignoreMap":118},[123,167549,167550,167553,167555,167557,167559,167561,167563,167565,167567,167569,167571,167573,167575,167577,167579,167581,167583,167585,167587],{"class":125,"line":126},[123,167551,167552],{"class":129},"even_nums ",[123,167554,134],{"class":133},[123,167556,167515],{"class":129},[123,167558,1399],{"class":133},[123,167560,11870],{"class":129},[123,167562,1405],{"class":133},[123,167564,34855],{"class":164},[123,167566,1315],{"class":129},[123,167568,2825],{"class":164},[123,167570,251],{"class":129},[123,167572,2944],{"class":164},[123,167574,1336],{"class":129},[123,167576,3998],{"class":133},[123,167578,11870],{"class":129},[123,167580,2935],{"class":133},[123,167582,17185],{"class":164},[123,167584,103951],{"class":133},[123,167586,6532],{"class":164},[123,167588,998],{"class":129},[123,167590,167591,167593],{"class":125,"line":140},[123,167592,294],{"class":164},[123,167594,167595],{"class":129},"(even_nums)\n",[19,167597,167598],{},"字典推导式：",[113,167600,167602],{"className":115,"code":167601,"language":117,"meta":118,"style":118},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[120,167603,167604,167638],{"__ignoreMap":118},[123,167605,167606,167609,167611,167614,167616,167618,167621,167623,167625,167627,167629,167631,167633,167635],{"class":125,"line":126},[123,167607,167608],{"class":129},"squares ",[123,167610,134],{"class":133},[123,167612,167613],{"class":129}," {i: i ",[123,167615,13093],{"class":133},[123,167617,17185],{"class":164},[123,167619,167620],{"class":133}," for",[123,167622,11870],{"class":129},[123,167624,1405],{"class":133},[123,167626,34855],{"class":164},[123,167628,1315],{"class":129},[123,167630,2825],{"class":164},[123,167632,251],{"class":129},[123,167634,2951],{"class":164},[123,167636,167637],{"class":129},")}\n",[123,167639,167640,167642],{"class":125,"line":140},[123,167641,294],{"class":164},[123,167643,167644],{"class":129},"(squares)\n",[19,167646,167647],{},"集合推导式：",[113,167649,167651],{"className":115,"code":167650,"language":117,"meta":118,"style":118},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[120,167652,167653,167674],{"__ignoreMap":118},[123,167654,167655,167658,167660,167663,167665,167667,167669,167672],{"class":125,"line":126},[123,167656,167657],{"class":129},"chars ",[123,167659,134],{"class":133},[123,167661,167662],{"class":129}," {ch ",[123,167664,1399],{"class":133},[123,167666,161806],{"class":129},[123,167668,1405],{"class":133},[123,167670,167671],{"class":143}," \"hello\"",[123,167673,171],{"class":129},[123,167675,167676,167678],{"class":125,"line":140},[123,167677,294],{"class":164},[123,167679,167680],{"class":129},"(chars)\n",[19,167682,167683],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167685,167687],{"id":167686},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[113,167689,167691],{"className":115,"code":167690,"language":117,"meta":118,"style":118},"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",[120,167692,167693,167701,167721,167741,167761,167781,167785,167789,167797,167811,167820,167824,167834,167846,167850,167870,167879,167883,167899,167904,167908,167922,167926,167948,167984],{"__ignoreMap":118},[123,167694,167695,167697,167699],{"class":125,"line":126},[123,167696,161830],{"class":129},[123,167698,134],{"class":133},[123,167700,1587],{"class":129},[123,167702,167703,167705,167707,167709,167711,167713,167715,167717,167719],{"class":125,"line":140},[123,167704,1592],{"class":129},[123,167706,244],{"class":143},[123,167708,147],{"class":129},[123,167710,152002],{"class":143},[123,167712,251],{"class":129},[123,167714,153586],{"class":143},[123,167716,147],{"class":129},[123,167718,3588],{"class":164},[123,167720,1202],{"class":129},[123,167722,167723,167725,167727,167729,167731,167733,167735,167737,167739],{"class":125,"line":156},[123,167724,1592],{"class":129},[123,167726,244],{"class":143},[123,167728,147],{"class":129},[123,167730,153050],{"class":143},[123,167732,251],{"class":129},[123,167734,153586],{"class":143},[123,167736,147],{"class":129},[123,167738,3413],{"class":164},[123,167740,1202],{"class":129},[123,167742,167743,167745,167747,167749,167751,167753,167755,167757,167759],{"class":125,"line":168},[123,167744,1592],{"class":129},[123,167746,244],{"class":143},[123,167748,147],{"class":129},[123,167750,161845],{"class":143},[123,167752,251],{"class":129},[123,167754,153586],{"class":143},[123,167756,147],{"class":129},[123,167758,3012],{"class":164},[123,167760,1202],{"class":129},[123,167762,167763,167765,167767,167769,167771,167773,167775,167777,167779],{"class":125,"line":268},[123,167764,1592],{"class":129},[123,167766,244],{"class":143},[123,167768,147],{"class":129},[123,167770,165424],{"class":143},[123,167772,251],{"class":129},[123,167774,153586],{"class":143},[123,167776,147],{"class":129},[123,167778,3482],{"class":164},[123,167780,1202],{"class":129},[123,167782,167783],{"class":125,"line":291},[123,167784,998],{"class":129},[123,167786,167787],{"class":125,"line":300},[123,167788,232],{"emptyLinePlaceholder":231},[123,167790,167791,167793,167795],{"class":125,"line":305},[123,167792,159374],{"class":129},[123,167794,134],{"class":133},[123,167796,49740],{"class":164},[123,167798,167799,167802,167804,167807,167809],{"class":125,"line":316},[123,167800,167801],{"class":129},"max_student ",[123,167803,134],{"class":133},[123,167805,167806],{"class":129}," students[",[123,167808,2799],{"class":164},[123,167810,998],{"class":129},[123,167812,167813,167816,167818],{"class":125,"line":673},[123,167814,167815],{"class":129},"passed ",[123,167817,134],{"class":133},[123,167819,1372],{"class":129},[123,167821,167822],{"class":125,"line":692},[123,167823,232],{"emptyLinePlaceholder":231},[123,167825,167826,167828,167830,167832],{"class":125,"line":713},[123,167827,1399],{"class":133},[123,167829,154251],{"class":129},[123,167831,1405],{"class":133},[123,167833,154256],{"class":129},[123,167835,167836,167838,167840,167842,167844],{"class":125,"line":718},[123,167837,161421],{"class":129},[123,167839,11909],{"class":133},[123,167841,154263],{"class":129},[123,167843,153586],{"class":143},[123,167845,998],{"class":129},[123,167847,167848],{"class":125,"line":1138},[123,167849,232],{"emptyLinePlaceholder":231},[123,167851,167852,167854,167856,167858,167860,167862,167865,167867],{"class":125,"line":1429},[123,167853,1711],{"class":133},[123,167855,154263],{"class":129},[123,167857,153586],{"class":143},[123,167859,1941],{"class":129},[123,167861,3559],{"class":133},[123,167863,167864],{"class":129}," max_student[",[123,167866,153586],{"class":143},[123,167868,167869],{"class":129},"]:\n",[123,167871,167872,167875,167877],{"class":125,"line":1439},[123,167873,167874],{"class":129},"        max_student ",[123,167876,134],{"class":133},[123,167878,154279],{"class":129},[123,167880,167881],{"class":125,"line":1444},[123,167882,232],{"emptyLinePlaceholder":231},[123,167884,167885,167887,167889,167891,167893,167895,167897],{"class":125,"line":1453},[123,167886,1711],{"class":133},[123,167888,154263],{"class":129},[123,167890,153586],{"class":143},[123,167892,1941],{"class":129},[123,167894,4164],{"class":133},[123,167896,159951],{"class":164},[123,167898,1344],{"class":129},[123,167900,167901],{"class":125,"line":1458},[123,167902,167903],{"class":129},"        passed.append(student)\n",[123,167905,167906],{"class":125,"line":1476},[123,167907,232],{"emptyLinePlaceholder":231},[123,167909,167910,167912,167914,167916,167918,167920],{"class":125,"line":1494},[123,167911,165888],{"class":129},[123,167913,134],{"class":133},[123,167915,165893],{"class":129},[123,167917,3187],{"class":133},[123,167919,9764],{"class":164},[123,167921,167109],{"class":129},[123,167923,167924],{"class":125,"line":1499},[123,167925,232],{"emptyLinePlaceholder":231},[123,167927,167928,167930,167932,167934,167936,167938,167940,167942,167944,167946],{"class":125,"line":1517},[123,167929,294],{"class":164},[123,167931,1315],{"class":129},[123,167933,2667],{"class":133},[123,167935,165911],{"class":143},[123,167937,3495],{"class":164},[123,167939,165916],{"class":129},[123,167941,159273],{"class":133},[123,167943,3545],{"class":164},[123,167945,2859],{"class":143},[123,167947,288],{"class":129},[123,167949,167950,167952,167954,167956,167959,167961,167964,167966,167968,167970,167972,167974,167976,167978,167980,167982],{"class":125,"line":1534},[123,167951,294],{"class":164},[123,167953,1315],{"class":129},[123,167955,2667],{"class":133},[123,167957,167958],{"class":143},"\"最高分学生:",[123,167960,3495],{"class":164},[123,167962,167963],{"class":129},"max_student[",[123,167965,154996],{"class":143},[123,167967,3539],{"class":129},[123,167969,3545],{"class":164},[123,167971,241],{"class":164},[123,167973,167963],{"class":129},[123,167975,155034],{"class":143},[123,167977,3539],{"class":129},[123,167979,3545],{"class":164},[123,167981,2859],{"class":143},[123,167983,288],{"class":129},[123,167985,167986,167988,167990,167992,167995,167998,168001,168003,168005],{"class":125,"line":1539},[123,167987,294],{"class":164},[123,167989,1315],{"class":129},[123,167991,2667],{"class":133},[123,167993,167994],{"class":143},"\"及格人数:",[123,167996,167997],{"class":164},"{len",[123,167999,168000],{"class":129},"(passed)",[123,168002,3545],{"class":164},[123,168004,2859],{"class":143},[123,168006,288],{"class":129},[14,168008,168010],{"id":168009},"_616-易错点","6.16 易错点",[26,168012,168013,168016,168019,168022,168028,168037],{},[29,168014,168015],{},"列表可变，元组和字符串不可变。",[29,168017,168018],{},"切片结束位置不包含。",[29,168020,168021],{},"字典通过 key 取值，不是通过索引。",[29,168023,168024,168025,2494],{},"空集合要用 ",[120,168026,168027],{},"set()",[29,168029,106756,168030,168033,168034,2494],{},[120,168031,168032],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[120,168035,168036],{},"get()",[29,168038,168039],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168041,168043],{"id":168042},"_617-本章练习","6.17 本章练习",[26,168045,168046,168049,168052,168055,168058],{},[29,168047,168048],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,168050,168051],{},"输入一句话，统计每个字符出现次数。",[29,168053,168054],{},"使用集合去除列表中的重复元素。",[29,168056,168057],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,168059,168060],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2526,168062,168063],{},"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":118,"searchDepth":140,"depth":140,"links":168065},[168066,168067,168068,168069,168070,168071,168072,168073,168074,168075,168076,168077,168078,168079,168080,168081,168082],{"id":165046,"depth":140,"text":165047},{"id":165163,"depth":140,"text":165164},{"id":165253,"depth":140,"text":165254},{"id":165377,"depth":140,"text":165378},{"id":165740,"depth":140,"text":165741},{"id":165927,"depth":140,"text":165928},{"id":166046,"depth":140,"text":166047},{"id":166188,"depth":140,"text":166189},{"id":166375,"depth":140,"text":166376},{"id":166619,"depth":140,"text":166620},{"id":166829,"depth":140,"text":166830},{"id":166914,"depth":140,"text":166915},{"id":167212,"depth":140,"text":167213},{"id":167494,"depth":140,"text":167495},{"id":167686,"depth":140,"text":167687},{"id":168009,"depth":140,"text":168010},{"id":168042,"depth":140,"text":168043},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165038,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168089,"title":168090,"body":168091,"description":2544,"extension":2545,"meta":170263,"navigation":231,"path":170264,"seo":170265,"stem":170266,"__hash__":170267},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168092,"toc":170238},[168093,168096,168100,168103,168183,168186,168207,168210,168214,168217,168279,168282,168299,168303,168306,168351,168353,168361,168365,168368,168450,168453,168456,168481,168484,168507,168511,168514,168516,168578,168581,168583,168634,168638,168642,168648,168753,168757,168763,168834,168838,168841,168909,168912,168992,168996,169002,169038,169041,169044,169154,169160,169164,169167,169239,169242,169246,169250,169255,169317,169321,169326,169394,169398,169403,169519,169523,169526,169606,169609,169613,169616,169720,169722,169737,169740,169744,169882,169890,169894,169896,169907,169909,170167,170171,170203,170207,170235],[10,168094,168090],{"id":168095},"_7-函数进阶",[14,168097,168099],{"id":168098},"_71-多返回值","7.1 多返回值",[19,168101,168102],{},"Python 函数可以返回多个值，本质上返回的是元组。",[113,168104,168106],{"className":115,"code":168105,"language":117,"meta":118,"style":118},"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",[120,168107,168108,168117,168125,168133,168142,168149,168153,168157,168166,168172],{"__ignoreMap":118},[123,168109,168110,168112,168115],{"class":125,"line":126},[123,168111,34359],{"class":133},[123,168113,168114],{"class":337}," get_info",[123,168116,34365],{"class":129},[123,168118,168119,168121,168123],{"class":125,"line":140},[123,168120,154484],{"class":129},[123,168122,134],{"class":133},[123,168124,151467],{"class":143},[123,168126,168127,168129,168131],{"class":125,"line":156},[123,168128,154500],{"class":129},[123,168130,134],{"class":133},[123,168132,148935],{"class":164},[123,168134,168135,168137,168139],{"class":125,"line":168},[123,168136,154515],{"class":129},[123,168138,134],{"class":133},[123,168140,168141],{"class":164}," 95\n",[123,168143,168144,168146],{"class":125,"line":268},[123,168145,6529],{"class":133},[123,168147,168148],{"class":129}," name, age, score\n",[123,168150,168151],{"class":125,"line":291},[123,168152,232],{"emptyLinePlaceholder":231},[123,168154,168155],{"class":125,"line":300},[123,168156,232],{"emptyLinePlaceholder":231},[123,168158,168159,168161,168163],{"class":125,"line":305},[123,168160,163420],{"class":129},[123,168162,134],{"class":133},[123,168164,168165],{"class":129}," get_info()\n",[123,168167,168168,168170],{"class":125,"line":316},[123,168169,294],{"class":164},[123,168171,78985],{"class":129},[123,168173,168174,168176,168178,168180],{"class":125,"line":673},[123,168175,294],{"class":164},[123,168177,1315],{"class":129},[123,168179,105497],{"class":164},[123,168181,168182],{"class":129},"(result))\n",[19,168184,168185],{},"可以直接解包：",[113,168187,168189],{"className":115,"code":168188,"language":117,"meta":118,"style":118},"name, age, score = get_info()\nprint(name, age, score)\n",[120,168190,168191,168200],{"__ignoreMap":118},[123,168192,168193,168196,168198],{"class":125,"line":126},[123,168194,168195],{"class":129},"name, age, score ",[123,168197,134],{"class":133},[123,168199,168165],{"class":129},[123,168201,168202,168204],{"class":125,"line":140},[123,168203,294],{"class":164},[123,168205,168206],{"class":129},"(name, age, score)\n",[19,168208,168209],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168211,168213],{"id":168212},"_72-位置参数","7.2 位置参数",[19,168215,168216],{},"位置参数按顺序传递。",[113,168218,168220],{"className":115,"code":168219,"language":117,"meta":118,"style":118},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[120,168221,168222,168230,168258,168262,168266],{"__ignoreMap":118},[123,168223,168224,168226,168228],{"class":125,"line":126},[123,168225,34359],{"class":133},[123,168227,151486],{"class":337},[123,168229,151489],{"class":129},[123,168231,168232,168234,168236,168238,168240,168242,168244,168246,168248,168250,168252,168254,168256],{"class":125,"line":140},[123,168233,33714],{"class":164},[123,168235,1315],{"class":129},[123,168237,2667],{"class":133},[123,168239,151500],{"class":143},[123,168241,3495],{"class":164},[123,168243,663],{"class":129},[123,168245,3545],{"class":164},[123,168247,151509],{"class":143},[123,168249,3495],{"class":164},[123,168251,72621],{"class":129},[123,168253,3545],{"class":164},[123,168255,151518],{"class":143},[123,168257,288],{"class":129},[123,168259,168260],{"class":125,"line":156},[123,168261,232],{"emptyLinePlaceholder":231},[123,168263,168264],{"class":125,"line":168},[123,168265,232],{"emptyLinePlaceholder":231},[123,168267,168268,168271,168273,168275,168277],{"class":125,"line":268},[123,168269,168270],{"class":129},"introduce(",[123,168272,152002],{"class":143},[123,168274,251],{"class":129},[123,168276,3252],{"class":164},[123,168278,288],{"class":129},[19,168280,168281],{},"顺序错了就会得到错误含义：",[113,168283,168285],{"className":115,"code":168284,"language":117,"meta":118,"style":118},"introduce(18, \"小明\")\n",[120,168286,168287],{"__ignoreMap":118},[123,168288,168289,168291,168293,168295,168297],{"class":125,"line":126},[123,168290,168270],{"class":129},[123,168292,3252],{"class":164},[123,168294,251],{"class":129},[123,168296,152002],{"class":143},[123,168298,288],{"class":129},[14,168300,168302],{"id":168301},"_73-关键字参数","7.3 关键字参数",[19,168304,168305],{},"关键字参数按参数名传递。",[113,168307,168309],{"className":115,"code":168308,"language":117,"meta":118,"style":118},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[120,168310,168311,168331],{"__ignoreMap":118},[123,168312,168313,168315,168317,168319,168321,168323,168325,168327,168329],{"class":125,"line":126},[123,168314,168270],{"class":129},[123,168316,663],{"class":279},[123,168318,134],{"class":133},[123,168320,152002],{"class":143},[123,168322,251],{"class":129},[123,168324,72621],{"class":279},[123,168326,134],{"class":133},[123,168328,3252],{"class":164},[123,168330,288],{"class":129},[123,168332,168333,168335,168337,168339,168341,168343,168345,168347,168349],{"class":125,"line":140},[123,168334,168270],{"class":129},[123,168336,72621],{"class":279},[123,168338,134],{"class":133},[123,168340,3252],{"class":164},[123,168342,251],{"class":129},[123,168344,663],{"class":279},[123,168346,134],{"class":133},[123,168348,152002],{"class":143},[123,168350,288],{"class":129},[19,168352,120322],{},[26,168354,168355,168358],{},[29,168356,168357],{},"顺序不容易错。",[29,168359,168360],{},"调用时可读性更强。",[14,168362,168364],{"id":168363},"_74-默认参数","7.4 默认参数",[19,168366,168367],{},"默认参数给参数设置默认值。",[113,168369,168371],{"className":115,"code":168370,"language":117,"meta":118,"style":118},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[120,168372,168373,168389,168419,168423,168427,168437],{"__ignoreMap":118},[123,168374,168375,168377,168379,168382,168384,168387],{"class":125,"line":126},[123,168376,34359],{"class":133},[123,168378,124481],{"class":337},[123,168380,168381],{"class":129},"(host, port",[123,168383,134],{"class":133},[123,168385,168386],{"class":164},"3306",[123,168388,33201],{"class":129},[123,168390,168391,168393,168395,168397,168400,168402,168404,168406,168408,168410,168413,168415,168417],{"class":125,"line":140},[123,168392,33714],{"class":164},[123,168394,1315],{"class":129},[123,168396,2667],{"class":133},[123,168398,168399],{"class":143},"\"连接",[123,168401,3495],{"class":164},[123,168403,29816],{"class":129},[123,168405,3545],{"class":164},[123,168407,3460],{"class":143},[123,168409,3495],{"class":164},[123,168411,168412],{"class":129},"port",[123,168414,3545],{"class":164},[123,168416,2859],{"class":143},[123,168418,288],{"class":129},[123,168420,168421],{"class":125,"line":156},[123,168422,232],{"emptyLinePlaceholder":231},[123,168424,168425],{"class":125,"line":168},[123,168426,232],{"emptyLinePlaceholder":231},[123,168428,168429,168432,168435],{"class":125,"line":268},[123,168430,168431],{"class":129},"connect(",[123,168433,168434],{"class":143},"\"localhost\"",[123,168436,288],{"class":129},[123,168438,168439,168441,168443,168445,168448],{"class":125,"line":291},[123,168440,168431],{"class":129},[123,168442,168434],{"class":143},[123,168444,251],{"class":129},[123,168446,168447],{"class":164},"6379",[123,168449,288],{"class":129},[19,168451,168452],{},"注意：默认参数必须放在非默认参数后面。",[19,168454,168455],{},"错误：",[113,168457,168459],{"className":115,"code":168458,"language":117,"meta":118,"style":118},"def connect(port=3306, host):\n    pass\n",[120,168460,168461,168477],{"__ignoreMap":118},[123,168462,168463,168465,168467,168470,168472,168474],{"class":125,"line":126},[123,168464,34359],{"class":133},[123,168466,124481],{"class":337},[123,168468,168469],{"class":129},"(port",[123,168471,134],{"class":133},[123,168473,168386],{"class":164},[123,168475,168476],{"class":129},", host):\n",[123,168478,168479],{"class":125,"line":140},[123,168480,151651],{"class":133},[19,168482,168483],{},"正确：",[113,168485,168487],{"className":115,"code":168486,"language":117,"meta":118,"style":118},"def connect(host, port=3306):\n    pass\n",[120,168488,168489,168503],{"__ignoreMap":118},[123,168490,168491,168493,168495,168497,168499,168501],{"class":125,"line":126},[123,168492,34359],{"class":133},[123,168494,124481],{"class":337},[123,168496,168381],{"class":129},[123,168498,134],{"class":133},[123,168500,168386],{"class":164},[123,168502,33201],{"class":129},[123,168504,168505],{"class":125,"line":140},[123,168506,151651],{"class":133},[14,168508,168510],{"id":168509},"_75-默认参数的坑","7.5 默认参数的坑",[19,168512,168513],{},"不要使用可变对象作为默认参数。",[19,168515,159737],{},[113,168517,168519],{"className":115,"code":168518,"language":117,"meta":118,"style":118},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[120,168520,168521,168536,168541,168548,168552,168556,168567],{"__ignoreMap":118},[123,168522,168523,168525,168528,168531,168533],{"class":125,"line":126},[123,168524,34359],{"class":133},[123,168526,168527],{"class":337}," add_item",[123,168529,168530],{"class":129},"(item, items",[123,168532,134],{"class":133},[123,168534,168535],{"class":129},"[]):\n",[123,168537,168538],{"class":125,"line":140},[123,168539,168540],{"class":129},"    items.append(item)\n",[123,168542,168543,168545],{"class":125,"line":156},[123,168544,6529],{"class":133},[123,168546,168547],{"class":129}," items\n",[123,168549,168550],{"class":125,"line":168},[123,168551,232],{"emptyLinePlaceholder":231},[123,168553,168554],{"class":125,"line":268},[123,168555,232],{"emptyLinePlaceholder":231},[123,168557,168558,168560,168563,168565],{"class":125,"line":291},[123,168559,294],{"class":164},[123,168561,168562],{"class":129},"(add_item(",[123,168564,167439],{"class":143},[123,168566,32913],{"class":129},[123,168568,168569,168571,168573,168576],{"class":125,"line":300},[123,168570,294],{"class":164},[123,168572,168562],{"class":129},[123,168574,168575],{"class":143},"\"b\"",[123,168577,32913],{"class":129},[19,168579,168580],{},"第二次调用会复用第一次的列表。",[19,168582,158002],{},[113,168584,168586],{"className":115,"code":168585,"language":117,"meta":118,"style":118},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[120,168587,168588,168602,168615,168624,168628],{"__ignoreMap":118},[123,168589,168590,168592,168594,168596,168598,168600],{"class":125,"line":126},[123,168591,34359],{"class":133},[123,168593,168527],{"class":337},[123,168595,168530],{"class":129},[123,168597,134],{"class":133},[123,168599,98080],{"class":164},[123,168601,33201],{"class":129},[123,168603,168604,168606,168609,168611,168613],{"class":125,"line":140},[123,168605,1711],{"class":133},[123,168607,168608],{"class":129}," items ",[123,168610,41336],{"class":133},[123,168612,41341],{"class":164},[123,168614,1344],{"class":129},[123,168616,168617,168620,168622],{"class":125,"line":156},[123,168618,168619],{"class":129},"        items ",[123,168621,134],{"class":133},[123,168623,1372],{"class":129},[123,168625,168626],{"class":125,"line":168},[123,168627,168540],{"class":129},[123,168629,168630,168632],{"class":125,"line":268},[123,168631,6529],{"class":133},[123,168633,168547],{"class":129},[14,168635,168637],{"id":168636},"_76-不定长参数","7.6 不定长参数",[2587,168639,168641],{"id":168640},"_761-args","7.6.1 *args",[19,168643,168644,168647],{},[120,168645,168646],{},"*args"," 接收任意数量的位置参数，得到元组。",[113,168649,168651],{"className":115,"code":168650,"language":117,"meta":118,"style":118},"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",[120,168652,168653,168666,168674,168685,168694,168700,168704,168708,168727],{"__ignoreMap":118},[123,168654,168655,168657,168659,168661,168663],{"class":125,"line":126},[123,168656,34359],{"class":133},[123,168658,7643],{"class":337},[123,168660,1315],{"class":129},[123,168662,3060],{"class":133},[123,168664,168665],{"class":129},"args):\n",[123,168667,168668,168670,168672],{"class":125,"line":140},[123,168669,161421],{"class":129},[123,168671,134],{"class":133},[123,168673,49740],{"class":164},[123,168675,168676,168678,168680,168682],{"class":125,"line":156},[123,168677,5641],{"class":133},[123,168679,158294],{"class":129},[123,168681,1405],{"class":133},[123,168683,168684],{"class":129}," args:\n",[123,168686,168687,168689,168691],{"class":125,"line":168},[123,168688,162096],{"class":129},[123,168690,11909],{"class":133},[123,168692,168693],{"class":129}," num\n",[123,168695,168696,168698],{"class":125,"line":268},[123,168697,6529],{"class":133},[123,168699,164401],{"class":129},[123,168701,168702],{"class":125,"line":291},[123,168703,232],{"emptyLinePlaceholder":231},[123,168705,168706],{"class":125,"line":300},[123,168707,232],{"emptyLinePlaceholder":231},[123,168709,168710,168712,168715,168717,168719,168721,168723,168725],{"class":125,"line":305},[123,168711,294],{"class":164},[123,168713,168714],{"class":129},"(add(",[123,168716,2825],{"class":164},[123,168718,251],{"class":129},[123,168720,2692],{"class":164},[123,168722,251],{"class":129},[123,168724,2686],{"class":164},[123,168726,32913],{"class":129},[123,168728,168729,168731,168733,168735,168737,168739,168741,168743,168745,168747,168749,168751],{"class":125,"line":316},[123,168730,294],{"class":164},[123,168732,168714],{"class":129},[123,168734,2825],{"class":164},[123,168736,251],{"class":129},[123,168738,2692],{"class":164},[123,168740,251],{"class":129},[123,168742,2686],{"class":164},[123,168744,251],{"class":129},[123,168746,2901],{"class":164},[123,168748,251],{"class":129},[123,168750,2926],{"class":164},[123,168752,32913],{"class":129},[2587,168754,168756],{"id":168755},"_762-kwargs","7.6.2 **kwargs",[19,168758,168759,168762],{},[120,168760,168761],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[113,168764,168766],{"className":115,"code":168765,"language":117,"meta":118,"style":118},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[120,168767,168768,168781,168792,168798,168802,168806],{"__ignoreMap":118},[123,168769,168770,168772,168774,168776,168778],{"class":125,"line":126},[123,168771,34359],{"class":133},[123,168773,164059],{"class":337},[123,168775,1315],{"class":129},[123,168777,13093],{"class":133},[123,168779,168780],{"class":129},"kwargs):\n",[123,168782,168783,168785,168787,168789],{"class":125,"line":140},[123,168784,5641],{"class":133},[123,168786,166899],{"class":129},[123,168788,1405],{"class":133},[123,168790,168791],{"class":129}," kwargs.items():\n",[123,168793,168794,168796],{"class":125,"line":156},[123,168795,34863],{"class":164},[123,168797,166911],{"class":129},[123,168799,168800],{"class":125,"line":168},[123,168801,232],{"emptyLinePlaceholder":231},[123,168803,168804],{"class":125,"line":268},[123,168805,232],{"emptyLinePlaceholder":231},[123,168807,168808,168810,168812,168814,168816,168818,168820,168822,168824,168826,168828,168830,168832],{"class":125,"line":291},[123,168809,164124],{"class":129},[123,168811,663],{"class":279},[123,168813,134],{"class":133},[123,168815,152002],{"class":143},[123,168817,251],{"class":129},[123,168819,72621],{"class":279},[123,168821,134],{"class":133},[123,168823,3252],{"class":164},[123,168825,251],{"class":129},[123,168827,72672],{"class":279},[123,168829,134],{"class":133},[123,168831,150],{"class":143},[123,168833,288],{"class":129},[14,168835,168837],{"id":168836},"_77-参数解包","7.7 参数解包",[19,168839,168840],{},"列表或元组解包为位置参数：",[113,168842,168844],{"className":115,"code":168843,"language":117,"meta":118,"style":118},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[120,168845,168846,168855,168870,168874,168878,168898],{"__ignoreMap":118},[123,168847,168848,168850,168852],{"class":125,"line":126},[123,168849,34359],{"class":133},[123,168851,7643],{"class":337},[123,168853,168854],{"class":129},"(a, b, c):\n",[123,168856,168857,168859,168861,168863,168865,168867],{"class":125,"line":140},[123,168858,6529],{"class":133},[123,168860,13301],{"class":129},[123,168862,3086],{"class":133},[123,168864,13314],{"class":129},[123,168866,3086],{"class":133},[123,168868,168869],{"class":129}," c\n",[123,168871,168872],{"class":125,"line":156},[123,168873,232],{"emptyLinePlaceholder":231},[123,168875,168876],{"class":125,"line":168},[123,168877,232],{"emptyLinePlaceholder":231},[123,168879,168880,168882,168884,168886,168888,168890,168892,168894,168896],{"class":125,"line":268},[123,168881,166214],{"class":129},[123,168883,134],{"class":133},[123,168885,977],{"class":129},[123,168887,2825],{"class":164},[123,168889,251],{"class":129},[123,168891,2692],{"class":164},[123,168893,251],{"class":129},[123,168895,2686],{"class":164},[123,168897,998],{"class":129},[123,168899,168900,168902,168904,168906],{"class":125,"line":291},[123,168901,294],{"class":164},[123,168903,168714],{"class":129},[123,168905,3060],{"class":133},[123,168907,168908],{"class":129},"nums))\n",[19,168910,168911],{},"字典解包为关键字参数：",[113,168913,168915],{"className":115,"code":168914,"language":117,"meta":118,"style":118},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[120,168916,168917,168925,168951,168955,168959,168983],{"__ignoreMap":118},[123,168918,168919,168921,168923],{"class":125,"line":126},[123,168920,34359],{"class":133},[123,168922,151486],{"class":337},[123,168924,151489],{"class":129},[123,168926,168927,168929,168931,168933,168935,168937,168939,168941,168943,168945,168947,168949],{"class":125,"line":140},[123,168928,33714],{"class":164},[123,168930,1315],{"class":129},[123,168932,2667],{"class":133},[123,168934,2859],{"class":143},[123,168936,3495],{"class":164},[123,168938,663],{"class":129},[123,168940,3545],{"class":164},[123,168942,241],{"class":164},[123,168944,72621],{"class":129},[123,168946,3545],{"class":164},[123,168948,2859],{"class":143},[123,168950,288],{"class":129},[123,168952,168953],{"class":125,"line":156},[123,168954,232],{"emptyLinePlaceholder":231},[123,168956,168957],{"class":125,"line":168},[123,168958,232],{"emptyLinePlaceholder":231},[123,168960,168961,168963,168965,168967,168969,168971,168973,168975,168977,168979,168981],{"class":125,"line":268},[123,168962,118702],{"class":129},[123,168964,134],{"class":133},[123,168966,241],{"class":129},[123,168968,244],{"class":143},[123,168970,147],{"class":129},[123,168972,152002],{"class":143},[123,168974,251],{"class":129},[123,168976,71525],{"class":143},[123,168978,147],{"class":129},[123,168980,3252],{"class":164},[123,168982,171],{"class":129},[123,168984,168985,168987,168989],{"class":125,"line":291},[123,168986,168270],{"class":129},[123,168988,13093],{"class":133},[123,168990,168991],{"class":129},"info)\n",[14,168993,168995],{"id":168994},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168997,168998,169001],{},[120,168999,169000],{},"lambda"," 用于定义简单匿名函数。",[113,169003,169005],{"className":115,"code":169004,"language":117,"meta":118,"style":118},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[120,169006,169007,169024],{"__ignoreMap":118},[123,169008,169009,169012,169014,169017,169020,169022],{"class":125,"line":126},[123,169010,169011],{"class":129},"add ",[123,169013,134],{"class":133},[123,169015,169016],{"class":133}," lambda",[123,169018,169019],{"class":129}," a, b: a ",[123,169021,3086],{"class":133},[123,169023,153218],{"class":129},[123,169025,169026,169028,169030,169032,169034,169036],{"class":125,"line":140},[123,169027,294],{"class":164},[123,169029,168714],{"class":129},[123,169031,2825],{"class":164},[123,169033,251],{"class":129},[123,169035,2692],{"class":164},[123,169037,32913],{"class":129},[19,169039,169040],{},"常和排序、过滤等函数一起使用。",[19,169042,169043],{},"按分数排序：",[113,169045,169047],{"className":115,"code":169046,"language":117,"meta":118,"style":118},"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",[120,169048,169049,169057,169077,169097,169117,169121,169125,169148],{"__ignoreMap":118},[123,169050,169051,169053,169055],{"class":125,"line":126},[123,169052,161830],{"class":129},[123,169054,134],{"class":133},[123,169056,1587],{"class":129},[123,169058,169059,169061,169063,169065,169067,169069,169071,169073,169075],{"class":125,"line":140},[123,169060,1592],{"class":129},[123,169062,244],{"class":143},[123,169064,147],{"class":129},[123,169066,152002],{"class":143},[123,169068,251],{"class":129},[123,169070,153586],{"class":143},[123,169072,147],{"class":129},[123,169074,3588],{"class":164},[123,169076,1202],{"class":129},[123,169078,169079,169081,169083,169085,169087,169089,169091,169093,169095],{"class":125,"line":156},[123,169080,1592],{"class":129},[123,169082,244],{"class":143},[123,169084,147],{"class":129},[123,169086,153050],{"class":143},[123,169088,251],{"class":129},[123,169090,153586],{"class":143},[123,169092,147],{"class":129},[123,169094,3413],{"class":164},[123,169096,1202],{"class":129},[123,169098,169099,169101,169103,169105,169107,169109,169111,169113,169115],{"class":125,"line":168},[123,169100,1592],{"class":129},[123,169102,244],{"class":143},[123,169104,147],{"class":129},[123,169106,161845],{"class":143},[123,169108,251],{"class":129},[123,169110,153586],{"class":143},[123,169112,147],{"class":129},[123,169114,3012],{"class":164},[123,169116,1202],{"class":129},[123,169118,169119],{"class":125,"line":268},[123,169120,998],{"class":129},[123,169122,169123],{"class":125,"line":291},[123,169124,232],{"emptyLinePlaceholder":231},[123,169126,169127,169130,169132,169134,169136,169138,169140,169142,169144,169146],{"class":125,"line":300},[123,169128,169129],{"class":129},"students.sort(",[123,169131,156060],{"class":279},[123,169133,156063],{"class":133},[123,169135,156066],{"class":129},[123,169137,153586],{"class":143},[123,169139,1048],{"class":129},[123,169141,165642],{"class":279},[123,169143,134],{"class":133},[123,169145,870],{"class":164},[123,169147,288],{"class":129},[123,169149,169150,169152],{"class":125,"line":305},[123,169151,294],{"class":164},[123,169153,167109],{"class":129},[19,169155,169156,169157,169159],{},"如果逻辑复杂，不要硬写 ",[120,169158,169000],{},"，定义普通函数更清晰。",[14,169161,169163],{"id":169162},"_79-函数作为参数","7.9 函数作为参数",[19,169165,169166],{},"函数可以作为参数传给另一个函数。",[113,169168,169170],{"className":115,"code":169169,"language":117,"meta":118,"style":118},"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",[120,169171,169172,169180,169190,169194,169198,169208,169215,169219,169223],{"__ignoreMap":118},[123,169173,169174,169176,169178],{"class":125,"line":126},[123,169175,34359],{"class":133},[123,169177,7643],{"class":337},[123,169179,153207],{"class":129},[123,169181,169182,169184,169186,169188],{"class":125,"line":140},[123,169183,6529],{"class":133},[123,169185,13301],{"class":129},[123,169187,3086],{"class":133},[123,169189,153218],{"class":129},[123,169191,169192],{"class":125,"line":156},[123,169193,232],{"emptyLinePlaceholder":231},[123,169195,169196],{"class":125,"line":168},[123,169197,232],{"emptyLinePlaceholder":231},[123,169199,169200,169202,169205],{"class":125,"line":268},[123,169201,34359],{"class":133},[123,169203,169204],{"class":337}," calculate",[123,169206,169207],{"class":129},"(a, b, func):\n",[123,169209,169210,169212],{"class":125,"line":291},[123,169211,6529],{"class":133},[123,169213,169214],{"class":129}," func(a, b)\n",[123,169216,169217],{"class":125,"line":300},[123,169218,232],{"emptyLinePlaceholder":231},[123,169220,169221],{"class":125,"line":305},[123,169222,232],{"emptyLinePlaceholder":231},[123,169224,169225,169227,169230,169232,169234,169236],{"class":125,"line":316},[123,169226,294],{"class":164},[123,169228,169229],{"class":129},"(calculate(",[123,169231,2193],{"class":164},[123,169233,251],{"class":129},[123,169235,3302],{"class":164},[123,169237,169238],{"class":129},", add))\n",[19,169240,169241],{},"这种思想在排序、回调、框架中经常出现。",[14,169243,169245],{"id":169244},"_710-mapfiltersorted","7.10 map、filter、sorted",[2587,169247,169249],{"id":169248},"_7101-map","7.10.1 map",[19,169251,169252,169254],{},[120,169253,76444],{}," 对每个元素执行函数。",[113,169256,169258],{"className":115,"code":169257,"language":117,"meta":118,"style":118},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[120,169259,169260,169284,169307],{"__ignoreMap":118},[123,169261,169262,169264,169266,169268,169270,169272,169274,169276,169278,169280,169282],{"class":125,"line":126},[123,169263,166214],{"class":129},[123,169265,134],{"class":133},[123,169267,977],{"class":129},[123,169269,2825],{"class":164},[123,169271,251],{"class":129},[123,169273,2692],{"class":164},[123,169275,251],{"class":129},[123,169277,2686],{"class":164},[123,169279,251],{"class":129},[123,169281,2901],{"class":164},[123,169283,998],{"class":129},[123,169285,169286,169288,169290,169293,169295,169297,169300,169302,169304],{"class":125,"line":140},[123,169287,163420],{"class":129},[123,169289,134],{"class":133},[123,169291,169292],{"class":164}," map",[123,169294,1315],{"class":129},[123,169296,169000],{"class":133},[123,169298,169299],{"class":129}," x: x ",[123,169301,3060],{"class":133},[123,169303,17185],{"class":164},[123,169305,169306],{"class":129},", nums)\n",[123,169308,169309,169311,169313,169315],{"class":125,"line":156},[123,169310,294],{"class":164},[123,169312,1315],{"class":129},[123,169314,156184],{"class":164},[123,169316,168182],{"class":129},[2587,169318,169320],{"id":169319},"_7102-filter","7.10.2 filter",[19,169322,169323,169325],{},[120,169324,82448],{}," 保留满足条件的元素。",[113,169327,169329],{"className":115,"code":169328,"language":117,"meta":118,"style":118},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[120,169330,169331,169359,169384],{"__ignoreMap":118},[123,169332,169333,169335,169337,169339,169341,169343,169345,169347,169349,169351,169353,169355,169357],{"class":125,"line":126},[123,169334,166214],{"class":129},[123,169336,134],{"class":133},[123,169338,977],{"class":129},[123,169340,2825],{"class":164},[123,169342,251],{"class":129},[123,169344,2692],{"class":164},[123,169346,251],{"class":129},[123,169348,2686],{"class":164},[123,169350,251],{"class":129},[123,169352,2901],{"class":164},[123,169354,251],{"class":129},[123,169356,2926],{"class":164},[123,169358,998],{"class":129},[123,169360,169361,169363,169365,169368,169370,169372,169374,169376,169378,169380,169382],{"class":125,"line":140},[123,169362,163420],{"class":129},[123,169364,134],{"class":133},[123,169366,169367],{"class":164}," filter",[123,169369,1315],{"class":129},[123,169371,169000],{"class":133},[123,169373,169299],{"class":129},[123,169375,2935],{"class":133},[123,169377,17185],{"class":164},[123,169379,103951],{"class":133},[123,169381,6532],{"class":164},[123,169383,169306],{"class":129},[123,169385,169386,169388,169390,169392],{"class":125,"line":156},[123,169387,294],{"class":164},[123,169389,1315],{"class":129},[123,169391,156184],{"class":164},[123,169393,168182],{"class":129},[2587,169395,169397],{"id":169396},"_7103-sorted","7.10.3 sorted",[19,169399,169400,169402],{},[120,169401,167350],{}," 返回排序后的新列表。",[113,169404,169406],{"className":115,"code":169405,"language":117,"meta":118,"style":118},"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",[120,169407,169408,169416,169436,169456,169476,169480,169484,169513],{"__ignoreMap":118},[123,169409,169410,169412,169414],{"class":125,"line":126},[123,169411,161830],{"class":129},[123,169413,134],{"class":133},[123,169415,1587],{"class":129},[123,169417,169418,169420,169422,169424,169426,169428,169430,169432,169434],{"class":125,"line":140},[123,169419,1592],{"class":129},[123,169421,244],{"class":143},[123,169423,147],{"class":129},[123,169425,152002],{"class":143},[123,169427,251],{"class":129},[123,169429,153586],{"class":143},[123,169431,147],{"class":129},[123,169433,3588],{"class":164},[123,169435,1202],{"class":129},[123,169437,169438,169440,169442,169444,169446,169448,169450,169452,169454],{"class":125,"line":156},[123,169439,1592],{"class":129},[123,169441,244],{"class":143},[123,169443,147],{"class":129},[123,169445,153050],{"class":143},[123,169447,251],{"class":129},[123,169449,153586],{"class":143},[123,169451,147],{"class":129},[123,169453,3413],{"class":164},[123,169455,1202],{"class":129},[123,169457,169458,169460,169462,169464,169466,169468,169470,169472,169474],{"class":125,"line":168},[123,169459,1592],{"class":129},[123,169461,244],{"class":143},[123,169463,147],{"class":129},[123,169465,161845],{"class":143},[123,169467,251],{"class":129},[123,169469,153586],{"class":143},[123,169471,147],{"class":129},[123,169473,3012],{"class":164},[123,169475,1202],{"class":129},[123,169477,169478],{"class":125,"line":268},[123,169479,998],{"class":129},[123,169481,169482],{"class":125,"line":291},[123,169483,232],{"emptyLinePlaceholder":231},[123,169485,169486,169488,169490,169492,169495,169497,169499,169501,169503,169505,169507,169509,169511],{"class":125,"line":300},[123,169487,163420],{"class":129},[123,169489,134],{"class":133},[123,169491,165718],{"class":164},[123,169493,169494],{"class":129},"(students, ",[123,169496,156060],{"class":279},[123,169498,156063],{"class":133},[123,169500,156066],{"class":129},[123,169502,153586],{"class":143},[123,169504,1048],{"class":129},[123,169506,165642],{"class":279},[123,169508,134],{"class":133},[123,169510,870],{"class":164},[123,169512,288],{"class":129},[123,169514,169515,169517],{"class":125,"line":305},[123,169516,294],{"class":164},[123,169518,78985],{"class":129},[14,169520,169522],{"id":169521},"_711-闭包入门","7.11 闭包入门",[19,169524,169525],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[113,169527,169529],{"className":115,"code":169528,"language":117,"meta":118,"style":118},"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",[120,169530,169531,169541,169551,169562,169566,169573,169577,169581,169595],{"__ignoreMap":118},[123,169532,169533,169535,169538],{"class":125,"line":126},[123,169534,34359],{"class":133},[123,169536,169537],{"class":337}," outer",[123,169539,169540],{"class":129},"(base):\n",[123,169542,169543,169545,169548],{"class":125,"line":140},[123,169544,33216],{"class":133},[123,169546,169547],{"class":337}," inner",[123,169549,169550],{"class":129},"(num):\n",[123,169552,169553,169555,169558,169560],{"class":125,"line":156},[123,169554,17182],{"class":133},[123,169556,169557],{"class":129}," base ",[123,169559,3086],{"class":133},[123,169561,168693],{"class":129},[123,169563,169564],{"class":125,"line":168},[123,169565,232],{"emptyLinePlaceholder":231},[123,169567,169568,169570],{"class":125,"line":268},[123,169569,6529],{"class":133},[123,169571,169572],{"class":129}," inner\n",[123,169574,169575],{"class":125,"line":291},[123,169576,232],{"emptyLinePlaceholder":231},[123,169578,169579],{"class":125,"line":300},[123,169580,232],{"emptyLinePlaceholder":231},[123,169582,169583,169586,169588,169591,169593],{"class":125,"line":305},[123,169584,169585],{"class":129},"add_10 ",[123,169587,134],{"class":133},[123,169589,169590],{"class":129}," outer(",[123,169592,2193],{"class":164},[123,169594,288],{"class":129},[123,169596,169597,169599,169602,169604],{"class":125,"line":316},[123,169598,294],{"class":164},[123,169600,169601],{"class":129},"(add_10(",[123,169603,2926],{"class":164},[123,169605,32913],{"class":129},[19,169607,169608],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169610,169612],{"id":169611},"_712-装饰器入门","7.12 装饰器入门",[19,169614,169615],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[113,169617,169619],{"className":115,"code":169618,"language":117,"meta":118,"style":118},"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",[120,169620,169621,169630,169639,169650,169655,169666,169670,169677,169681,169685,169690,169698,169708,169712,169716],{"__ignoreMap":118},[123,169622,169623,169625,169627],{"class":125,"line":126},[123,169624,34359],{"class":133},[123,169626,89587],{"class":337},[123,169628,169629],{"class":129},"(func):\n",[123,169631,169632,169634,169637],{"class":125,"line":140},[123,169633,33216],{"class":133},[123,169635,169636],{"class":337}," wrapper",[123,169638,34365],{"class":129},[123,169640,169641,169643,169645,169648],{"class":125,"line":156},[123,169642,34863],{"class":164},[123,169644,1315],{"class":129},[123,169646,169647],{"class":143},"\"函数开始执行\"",[123,169649,288],{"class":129},[123,169651,169652],{"class":125,"line":168},[123,169653,169654],{"class":129},"        func()\n",[123,169656,169657,169659,169661,169664],{"class":125,"line":268},[123,169658,34863],{"class":164},[123,169660,1315],{"class":129},[123,169662,169663],{"class":143},"\"函数执行结束\"",[123,169665,288],{"class":129},[123,169667,169668],{"class":125,"line":291},[123,169669,232],{"emptyLinePlaceholder":231},[123,169671,169672,169674],{"class":125,"line":300},[123,169673,6529],{"class":133},[123,169675,169676],{"class":129}," wrapper\n",[123,169678,169679],{"class":125,"line":305},[123,169680,232],{"emptyLinePlaceholder":231},[123,169682,169683],{"class":125,"line":316},[123,169684,232],{"emptyLinePlaceholder":231},[123,169686,169687],{"class":125,"line":673},[123,169688,169689],{"class":337},"@log\n",[123,169691,169692,169694,169696],{"class":125,"line":692},[123,169693,34359],{"class":133},[123,169695,163110],{"class":337},[123,169697,34365],{"class":129},[123,169699,169700,169702,169704,169706],{"class":125,"line":713},[123,169701,33714],{"class":164},[123,169703,1315],{"class":129},[123,169705,8277],{"class":143},[123,169707,288],{"class":129},[123,169709,169710],{"class":125,"line":718},[123,169711,232],{"emptyLinePlaceholder":231},[123,169713,169714],{"class":125,"line":1138},[123,169715,232],{"emptyLinePlaceholder":231},[123,169717,169718],{"class":125,"line":1429},[123,169719,163145],{"class":129},[19,169721,160388],{},[113,169723,169725],{"className":115,"code":169724,"language":117,"meta":118,"style":118},"say_hello = log(say_hello)\n",[120,169726,169727],{"__ignoreMap":118},[123,169728,169729,169732,169734],{"class":125,"line":126},[123,169730,169731],{"class":129},"say_hello ",[123,169733,134],{"class":133},[123,169735,169736],{"class":129}," log(say_hello)\n",[19,169738,169739],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169741,169743],{"id":169742},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[113,169745,169747],{"className":115,"code":169746,"language":117,"meta":118,"style":118},"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",[120,169748,169749,169757,169774,169784,169803,169813,169820,169824,169830,169834,169838,169842,169850,169860,169864,169868],{"__ignoreMap":118},[123,169750,169751,169753,169755],{"class":125,"line":126},[123,169752,34359],{"class":133},[123,169754,89587],{"class":337},[123,169756,169629],{"class":129},[123,169758,169759,169761,169763,169765,169767,169770,169772],{"class":125,"line":140},[123,169760,33216],{"class":133},[123,169762,169636],{"class":337},[123,169764,1315],{"class":129},[123,169766,3060],{"class":133},[123,169768,169769],{"class":129},"args, ",[123,169771,13093],{"class":133},[123,169773,168780],{"class":129},[123,169775,169776,169778,169780,169782],{"class":125,"line":156},[123,169777,34863],{"class":164},[123,169779,1315],{"class":129},[123,169781,169647],{"class":143},[123,169783,288],{"class":129},[123,169785,169786,169789,169791,169794,169796,169798,169800],{"class":125,"line":168},[123,169787,169788],{"class":129},"        result ",[123,169790,134],{"class":133},[123,169792,169793],{"class":129}," func(",[123,169795,3060],{"class":133},[123,169797,169769],{"class":129},[123,169799,13093],{"class":133},[123,169801,169802],{"class":129},"kwargs)\n",[123,169804,169805,169807,169809,169811],{"class":125,"line":268},[123,169806,34863],{"class":164},[123,169808,1315],{"class":129},[123,169810,169663],{"class":143},[123,169812,288],{"class":129},[123,169814,169815,169817],{"class":125,"line":291},[123,169816,17182],{"class":133},[123,169818,169819],{"class":129}," result\n",[123,169821,169822],{"class":125,"line":300},[123,169823,232],{"emptyLinePlaceholder":231},[123,169825,169826,169828],{"class":125,"line":305},[123,169827,6529],{"class":133},[123,169829,169676],{"class":129},[123,169831,169832],{"class":125,"line":316},[123,169833,232],{"emptyLinePlaceholder":231},[123,169835,169836],{"class":125,"line":673},[123,169837,232],{"emptyLinePlaceholder":231},[123,169839,169840],{"class":125,"line":692},[123,169841,169689],{"class":337},[123,169843,169844,169846,169848],{"class":125,"line":713},[123,169845,34359],{"class":133},[123,169847,7643],{"class":337},[123,169849,153207],{"class":129},[123,169851,169852,169854,169856,169858],{"class":125,"line":718},[123,169853,6529],{"class":133},[123,169855,13301],{"class":129},[123,169857,3086],{"class":133},[123,169859,153218],{"class":129},[123,169861,169862],{"class":125,"line":1138},[123,169863,232],{"emptyLinePlaceholder":231},[123,169865,169866],{"class":125,"line":1429},[123,169867,232],{"emptyLinePlaceholder":231},[123,169869,169870,169872,169874,169876,169878,169880],{"class":125,"line":1439},[123,169871,294],{"class":164},[123,169873,168714],{"class":129},[123,169875,2193],{"class":164},[123,169877,251],{"class":129},[123,169879,3302],{"class":164},[123,169881,32913],{"class":129},[19,169883,169884,169885,103411,169887,169889],{},"这个写法使用 ",[120,169886,168646],{},[120,169888,168761],{}," 接收原函数的所有参数。",[14,169891,169893],{"id":169892},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169895,125680],{},[26,169897,169898,169901,169904],{},[29,169899,169900],{},"给定一组学生数据。",[29,169902,169903],{},"封装函数，根据传入规则筛选学生。",[29,169905,169906],{},"筛选及格、优秀、未成年学生。",[19,169908,12467],{},[113,169910,169912],{"className":115,"code":169911,"language":117,"meta":118,"style":118},"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",[120,169913,169914,169922,169950,169978,170006,170010,170014,170018,170028,170036,170046,170053,170058,170064,170068,170072,170096,170119,170142,170146,170153,170160],{"__ignoreMap":118},[123,169915,169916,169918,169920],{"class":125,"line":126},[123,169917,161830],{"class":129},[123,169919,134],{"class":133},[123,169921,1587],{"class":129},[123,169923,169924,169926,169928,169930,169932,169934,169936,169938,169940,169942,169944,169946,169948],{"class":125,"line":140},[123,169925,1592],{"class":129},[123,169927,244],{"class":143},[123,169929,147],{"class":129},[123,169931,152002],{"class":143},[123,169933,251],{"class":129},[123,169935,71525],{"class":143},[123,169937,147],{"class":129},[123,169939,3252],{"class":164},[123,169941,251],{"class":129},[123,169943,153586],{"class":143},[123,169945,147],{"class":129},[123,169947,3588],{"class":164},[123,169949,1202],{"class":129},[123,169951,169952,169954,169956,169958,169960,169962,169964,169966,169968,169970,169972,169974,169976],{"class":125,"line":156},[123,169953,1592],{"class":129},[123,169955,244],{"class":143},[123,169957,147],{"class":129},[123,169959,153050],{"class":143},[123,169961,251],{"class":129},[123,169963,71525],{"class":143},[123,169965,147],{"class":129},[123,169967,3227],{"class":164},[123,169969,251],{"class":129},[123,169971,153586],{"class":143},[123,169973,147],{"class":129},[123,169975,3413],{"class":164},[123,169977,1202],{"class":129},[123,169979,169980,169982,169984,169986,169988,169990,169992,169994,169996,169998,170000,170002,170004],{"class":125,"line":168},[123,169981,1592],{"class":129},[123,169983,244],{"class":143},[123,169985,147],{"class":129},[123,169987,161845],{"class":143},[123,169989,251],{"class":129},[123,169991,71525],{"class":143},[123,169993,147],{"class":129},[123,169995,3277],{"class":164},[123,169997,251],{"class":129},[123,169999,153586],{"class":143},[123,170001,147],{"class":129},[123,170003,3482],{"class":164},[123,170005,1202],{"class":129},[123,170007,170008],{"class":125,"line":268},[123,170009,998],{"class":129},[123,170011,170012],{"class":125,"line":291},[123,170013,232],{"emptyLinePlaceholder":231},[123,170015,170016],{"class":125,"line":300},[123,170017,232],{"emptyLinePlaceholder":231},[123,170019,170020,170022,170025],{"class":125,"line":305},[123,170021,34359],{"class":133},[123,170023,170024],{"class":337}," filter_students",[123,170026,170027],{"class":129},"(students, condition):\n",[123,170029,170030,170032,170034],{"class":125,"line":316},[123,170031,163337],{"class":129},[123,170033,134],{"class":133},[123,170035,1372],{"class":129},[123,170037,170038,170040,170042,170044],{"class":125,"line":673},[123,170039,5641],{"class":133},[123,170041,154251],{"class":129},[123,170043,1405],{"class":133},[123,170045,154256],{"class":129},[123,170047,170048,170050],{"class":125,"line":692},[123,170049,4940],{"class":133},[123,170051,170052],{"class":129}," condition(student):\n",[123,170054,170055],{"class":125,"line":713},[123,170056,170057],{"class":129},"            result.append(student)\n",[123,170059,170060,170062],{"class":125,"line":718},[123,170061,6529],{"class":133},[123,170063,169819],{"class":129},[123,170065,170066],{"class":125,"line":1138},[123,170067,232],{"emptyLinePlaceholder":231},[123,170069,170070],{"class":125,"line":1429},[123,170071,232],{"emptyLinePlaceholder":231},[123,170073,170074,170076,170078,170081,170083,170086,170088,170090,170092,170094],{"class":125,"line":1439},[123,170075,167815],{"class":129},[123,170077,134],{"class":133},[123,170079,170080],{"class":129}," filter_students(students, ",[123,170082,169000],{"class":133},[123,170084,170085],{"class":129}," s: s[",[123,170087,153586],{"class":143},[123,170089,1941],{"class":129},[123,170091,4164],{"class":133},[123,170093,159951],{"class":164},[123,170095,288],{"class":129},[123,170097,170098,170101,170103,170105,170107,170109,170111,170113,170115,170117],{"class":125,"line":1444},[123,170099,170100],{"class":129},"excellent ",[123,170102,134],{"class":133},[123,170104,170080],{"class":129},[123,170106,169000],{"class":133},[123,170108,170085],{"class":129},[123,170110,153586],{"class":143},[123,170112,1941],{"class":129},[123,170114,4164],{"class":133},[123,170116,159902],{"class":164},[123,170118,288],{"class":129},[123,170120,170121,170124,170126,170128,170130,170132,170134,170136,170138,170140],{"class":125,"line":1453},[123,170122,170123],{"class":129},"under_age ",[123,170125,134],{"class":133},[123,170127,170080],{"class":129},[123,170129,169000],{"class":133},[123,170131,170085],{"class":129},[123,170133,71525],{"class":143},[123,170135,1941],{"class":129},[123,170137,3509],{"class":133},[123,170139,158399],{"class":164},[123,170141,288],{"class":129},[123,170143,170144],{"class":125,"line":1458},[123,170145,232],{"emptyLinePlaceholder":231},[123,170147,170148,170150],{"class":125,"line":1476},[123,170149,294],{"class":164},[123,170151,170152],{"class":129},"(passed)\n",[123,170154,170155,170157],{"class":125,"line":1494},[123,170156,294],{"class":164},[123,170158,170159],{"class":129},"(excellent)\n",[123,170161,170162,170164],{"class":125,"line":1499},[123,170163,294],{"class":164},[123,170165,170166],{"class":129},"(under_age)\n",[14,170168,170170],{"id":170169},"_715-易错点","7.15 易错点",[26,170172,170173,170176,170184,170189,170200],{},[29,170174,170175],{},"默认参数不要写可变对象。",[29,170177,170178,170180,170181,170183],{},[120,170179,168646],{}," 是元组，",[120,170182,168761],{}," 是字典。",[29,170185,170186,170188],{},[120,170187,169000],{}," 只适合简单表达式。",[29,170190,170191,103411,170193,170195,170196,170199],{},[120,170192,76444],{},[120,170194,82448],{}," 的结果是迭代器，常用 ",[120,170197,170198],{},"list()"," 转换查看。",[29,170201,170202],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170204,170206],{"id":170205},"_716-本章练习","7.16 本章练习",[26,170208,170209,170216,170222,170227,170232],{},[29,170210,170211,170212,170215],{},"写函数 ",[120,170213,170214],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,170217,170211,170218,170221],{},[120,170219,170220],{},"print_user(**kwargs)","，输出用户所有字段。",[29,170223,106756,170224,170226],{},[120,170225,169000],{}," 对学生列表按年龄排序。",[29,170228,106756,170229,170231],{},[120,170230,82448],{}," 找出成绩不及格的学生。",[29,170233,170234],{},"写一个装饰器，统计函数执行前后的提示信息。",[2526,170236,170237],{},"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":118,"searchDepth":140,"depth":140,"links":170239},[170240,170241,170242,170243,170244,170245,170249,170250,170251,170252,170257,170258,170259,170260,170261,170262],{"id":168098,"depth":140,"text":168099},{"id":168212,"depth":140,"text":168213},{"id":168301,"depth":140,"text":168302},{"id":168363,"depth":140,"text":168364},{"id":168509,"depth":140,"text":168510},{"id":168636,"depth":140,"text":168637,"children":170246},[170247,170248],{"id":168640,"depth":156,"text":168641},{"id":168755,"depth":156,"text":168756},{"id":168836,"depth":140,"text":168837},{"id":168994,"depth":140,"text":168995},{"id":169162,"depth":140,"text":169163},{"id":169244,"depth":140,"text":169245,"children":170253},[170254,170255,170256],{"id":169248,"depth":156,"text":169249},{"id":169319,"depth":156,"text":169320},{"id":169396,"depth":156,"text":169397},{"id":169521,"depth":140,"text":169522},{"id":169611,"depth":140,"text":169612},{"id":169742,"depth":140,"text":169743},{"id":169892,"depth":140,"text":169893},{"id":170169,"depth":140,"text":170170},{"id":170205,"depth":140,"text":170206},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168090,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170269,"title":170270,"body":170271,"description":2544,"extension":2545,"meta":172790,"navigation":231,"path":172791,"seo":172792,"stem":172793,"__hash__":172794},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170272,"toc":172765},[170273,170276,170280,170283,170286,170317,170321,170325,170328,170355,170359,170362,170413,170416,170431,170434,170469,170473,170475,170499,170502,170562,170566,170570,170573,170630,170633,170653,170657,170660,170723,170727,170730,170786,170793,170817,170821,170824,170887,170891,170896,170947,170950,170954,170959,171026,171029,171111,171115,171120,171171,171174,171178,171181,171184,171192,171195,171241,171244,171290,171294,171300,171344,171347,171393,171396,171436,171439,171500,171504,171507,171597,171600,171742,171745,171812,171816,171819,171822,171963,171966,172044,172047,172223,172227,172229,172240,172242,172441,172445,172689,172693,172727,172731,172762],[10,170274,170270],{"id":170275},"_8-文件操作",[14,170277,170279],{"id":170278},"_81-文件操作的意义","8.1 文件操作的意义",[19,170281,170282],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170284,170285],{},"常见文件类型：",[26,170287,170288,170294,170300,170306,170312],{},[29,170289,170290,170293],{},[120,170291,170292],{},".txt","：普通文本。",[29,170295,170296,170299],{},[120,170297,170298],{},".csv","：表格文本。",[29,170301,170302,170305],{},[120,170303,170304],{},".json","：结构化数据。",[29,170307,170308,170311],{},[120,170309,170310],{},".log","：日志文件。",[29,170313,170314,170316],{},[120,170315,148736],{},"：Python 源代码。",[14,170318,170320],{"id":170319},"_82-路径","8.2 路径",[2587,170322,170324],{"id":170323},"_821-相对路径","8.2.1 相对路径",[19,170326,170327],{},"相对当前运行目录：",[113,170329,170331],{"className":115,"code":170330,"language":117,"meta":118,"style":118},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[120,170332,170333],{"__ignoreMap":118},[123,170334,170335,170337,170339,170341,170343,170345,170347,170349,170351,170353],{"class":125,"line":126},[123,170336,89311],{"class":164},[123,170338,1315],{"class":129},[123,170340,149179],{"class":143},[123,170342,251],{"class":129},[123,170344,1323],{"class":143},[123,170346,251],{"class":129},[123,170348,1328],{"class":279},[123,170350,134],{"class":133},[123,170352,1333],{"class":143},[123,170354,288],{"class":129},[2587,170356,170358],{"id":170357},"_822-绝对路径","8.2.2 绝对路径",[19,170360,170361],{},"从根目录或盘符开始：",[113,170363,170365],{"className":115,"code":170364,"language":117,"meta":118,"style":118},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[120,170366,170367,170390],{"__ignoreMap":118},[123,170368,170369,170371,170373,170376,170378,170380,170382,170384,170386,170388],{"class":125,"line":126},[123,170370,89311],{"class":164},[123,170372,1315],{"class":129},[123,170374,170375],{"class":143},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[123,170377,251],{"class":129},[123,170379,1323],{"class":143},[123,170381,251],{"class":129},[123,170383,1328],{"class":279},[123,170385,134],{"class":133},[123,170387,1333],{"class":143},[123,170389,288],{"class":129},[123,170391,170392,170394,170396,170399,170401,170403,170405,170407,170409,170411],{"class":125,"line":140},[123,170393,89311],{"class":164},[123,170395,1315],{"class":129},[123,170397,170398],{"class":143},"\"D:\u002Fdata\u002Fdata.txt\"",[123,170400,251],{"class":129},[123,170402,1323],{"class":143},[123,170404,251],{"class":129},[123,170406,1328],{"class":279},[123,170408,134],{"class":133},[123,170410,1333],{"class":143},[123,170412,288],{"class":129},[19,170414,170415],{},"Windows 路径建议写成：",[113,170417,170419],{"className":115,"code":170418,"language":117,"meta":118,"style":118},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[120,170420,170421],{"__ignoreMap":118},[123,170422,170423,170426,170428],{"class":125,"line":126},[123,170424,170425],{"class":129},"path ",[123,170427,134],{"class":133},[123,170429,170430],{"class":143}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170432,170433],{},"或原始字符串：",[113,170435,170437],{"className":115,"code":170436,"language":117,"meta":118,"style":118},"path = r\"D:\\data\\data.txt\"\n",[120,170438,170439],{"__ignoreMap":118},[123,170440,170441,170443,170445,170447,170449,170452,170455,170458,170460,170462,170464,170467],{"class":125,"line":126},[123,170442,170425],{"class":129},[123,170444,134],{"class":133},[123,170446,19549],{"class":133},[123,170448,2859],{"class":143},[123,170450,170451],{"class":50384},"D:",[123,170453,170454],{"class":164},"\\d",[123,170456,170457],{"class":50384},"ata",[123,170459,170454],{"class":164},[123,170461,170457],{"class":50384},[123,170463,3161],{"class":164},[123,170465,170466],{"class":50384},"txt",[123,170468,27555],{"class":143},[14,170470,170472],{"id":170471},"_83-open函数","8.3 open函数",[19,170474,7615],{},[113,170476,170478],{"className":115,"code":170477,"language":117,"meta":118,"style":118},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[120,170479,170480],{"__ignoreMap":118},[123,170481,170482,170484,170486,170488,170491,170493,170495,170497],{"class":125,"line":126},[123,170483,1357],{"class":279},[123,170485,15995],{"class":133},[123,170487,1312],{"class":164},[123,170489,170490],{"class":129},"(文件路径, 打开模式, ",[123,170492,1328],{"class":279},[123,170494,134],{"class":133},[123,170496,1333],{"class":143},[123,170498,288],{"class":129},[19,170500,170501],{},"常见模式：",[48,170503,170504,170513],{},[51,170505,170506],{},[54,170507,170508,170511],{},[57,170509,170510],{},"模式",[57,170512,28291],{},[64,170514,170515,170524,170533,170542,170552],{},[54,170516,170517,170521],{},[69,170518,170519],{},[120,170520,3272],{},[69,170522,170523],{},"只读，文件不存在会报错",[54,170525,170526,170530],{},[69,170527,170528],{},[120,170529,3397],{},[69,170531,170532],{},"只写，文件不存在会创建，存在会清空",[54,170534,170535,170539],{},[69,170536,170537],{},[120,170538,2846],{},[69,170540,170541],{},"追加，文件不存在会创建",[54,170543,170544,170549],{},[69,170545,170546],{},[120,170547,170548],{},"rb",[69,170550,170551],{},"二进制只读",[54,170553,170554,170559],{},[69,170555,170556],{},[120,170557,170558],{},"wb",[69,170560,170561],{},"二进制只写",[14,170563,170565],{"id":170564},"_84-读取文件","8.4 读取文件",[2587,170567,170569],{"id":170568},"_841-read","8.4.1 read",[19,170571,170572],{},"一次读取全部内容：",[113,170574,170576],{"className":115,"code":170575,"language":117,"meta":118,"style":118},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[120,170577,170578,170604,170616,170623],{"__ignoreMap":118},[123,170579,170580,170582,170584,170586,170588,170590,170592,170594,170596,170598,170600,170602],{"class":125,"line":126},[123,170581,1357],{"class":279},[123,170583,15995],{"class":133},[123,170585,1312],{"class":164},[123,170587,1315],{"class":129},[123,170589,149179],{"class":143},[123,170591,251],{"class":129},[123,170593,1323],{"class":143},[123,170595,251],{"class":129},[123,170597,1328],{"class":279},[123,170599,134],{"class":133},[123,170601,1333],{"class":143},[123,170603,288],{"class":129},[123,170605,170606,170609,170611,170613],{"class":125,"line":140},[123,170607,170608],{"class":129},"content ",[123,170610,134],{"class":133},[123,170612,1341],{"class":279},[123,170614,170615],{"class":129},".read()\n",[123,170617,170618,170620],{"class":125,"line":156},[123,170619,294],{"class":164},[123,170621,170622],{"class":129},"(content)\n",[123,170624,170625,170627],{"class":125,"line":168},[123,170626,1357],{"class":279},[123,170628,170629],{"class":129},".close()\n",[19,170631,170632],{},"可以指定读取字符数：",[113,170634,170636],{"className":115,"code":170635,"language":117,"meta":118,"style":118},"content = file.read(10)\n",[120,170637,170638],{"__ignoreMap":118},[123,170639,170640,170642,170644,170646,170649,170651],{"class":125,"line":126},[123,170641,170608],{"class":129},[123,170643,134],{"class":133},[123,170645,1341],{"class":279},[123,170647,170648],{"class":129},".read(",[123,170650,2193],{"class":164},[123,170652,288],{"class":129},[2587,170654,170656],{"id":170655},"_842-readline","8.4.2 readline",[19,170658,170659],{},"一次读取一行：",[113,170661,170663],{"className":115,"code":170662,"language":117,"meta":118,"style":118},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[120,170664,170665,170691,170695,170706,170713,170717],{"__ignoreMap":118},[123,170666,170667,170669,170671,170673,170675,170677,170679,170681,170683,170685,170687,170689],{"class":125,"line":126},[123,170668,1357],{"class":279},[123,170670,15995],{"class":133},[123,170672,1312],{"class":164},[123,170674,1315],{"class":129},[123,170676,149179],{"class":143},[123,170678,251],{"class":129},[123,170680,1323],{"class":143},[123,170682,251],{"class":129},[123,170684,1328],{"class":279},[123,170686,134],{"class":133},[123,170688,1333],{"class":143},[123,170690,288],{"class":129},[123,170692,170693],{"class":125,"line":140},[123,170694,232],{"emptyLinePlaceholder":231},[123,170696,170697,170699,170701,170703],{"class":125,"line":156},[123,170698,408],{"class":129},[123,170700,134],{"class":133},[123,170702,1341],{"class":279},[123,170704,170705],{"class":129},".readline()\n",[123,170707,170708,170710],{"class":125,"line":168},[123,170709,294],{"class":164},[123,170711,170712],{"class":129},"(line)\n",[123,170714,170715],{"class":125,"line":268},[123,170716,232],{"emptyLinePlaceholder":231},[123,170718,170719,170721],{"class":125,"line":291},[123,170720,1357],{"class":279},[123,170722,170629],{"class":129},[2587,170724,170726],{"id":170725},"_843-readlines","8.4.3 readlines",[19,170728,170729],{},"读取所有行，返回列表：",[113,170731,170733],{"className":115,"code":170732,"language":117,"meta":118,"style":118},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[120,170734,170735,170761,170773,170780],{"__ignoreMap":118},[123,170736,170737,170739,170741,170743,170745,170747,170749,170751,170753,170755,170757,170759],{"class":125,"line":126},[123,170738,1357],{"class":279},[123,170740,15995],{"class":133},[123,170742,1312],{"class":164},[123,170744,1315],{"class":129},[123,170746,149179],{"class":143},[123,170748,251],{"class":129},[123,170750,1323],{"class":143},[123,170752,251],{"class":129},[123,170754,1328],{"class":279},[123,170756,134],{"class":133},[123,170758,1333],{"class":143},[123,170760,288],{"class":129},[123,170762,170763,170766,170768,170770],{"class":125,"line":140},[123,170764,170765],{"class":129},"lines ",[123,170767,134],{"class":133},[123,170769,1341],{"class":279},[123,170771,170772],{"class":129},".readlines()\n",[123,170774,170775,170777],{"class":125,"line":156},[123,170776,294],{"class":164},[123,170778,170779],{"class":129},"(lines)\n",[123,170781,170782,170784],{"class":125,"line":168},[123,170783,1357],{"class":279},[123,170785,170629],{"class":129},[19,170787,170788,170789,170792],{},"每一行通常带有换行符，可以用 ",[120,170790,170791],{},"strip()"," 去掉：",[113,170794,170796],{"className":115,"code":170795,"language":117,"meta":118,"style":118},"for line in lines:\n    print(line.strip())\n",[120,170797,170798,170810],{"__ignoreMap":118},[123,170799,170800,170802,170805,170807],{"class":125,"line":126},[123,170801,1399],{"class":133},[123,170803,170804],{"class":129}," line ",[123,170806,1405],{"class":133},[123,170808,170809],{"class":129}," lines:\n",[123,170811,170812,170814],{"class":125,"line":140},[123,170813,33714],{"class":164},[123,170815,170816],{"class":129},"(line.strip())\n",[2587,170818,170820],{"id":170819},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170822,170823],{},"推荐读取大文件时使用：",[113,170825,170827],{"className":115,"code":170826,"language":117,"meta":118,"style":118},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[120,170828,170829,170855,170859,170871,170877,170881],{"__ignoreMap":118},[123,170830,170831,170833,170835,170837,170839,170841,170843,170845,170847,170849,170851,170853],{"class":125,"line":126},[123,170832,1357],{"class":279},[123,170834,15995],{"class":133},[123,170836,1312],{"class":164},[123,170838,1315],{"class":129},[123,170840,149179],{"class":143},[123,170842,251],{"class":129},[123,170844,1323],{"class":143},[123,170846,251],{"class":129},[123,170848,1328],{"class":279},[123,170850,134],{"class":133},[123,170852,1333],{"class":143},[123,170854,288],{"class":129},[123,170856,170857],{"class":125,"line":140},[123,170858,232],{"emptyLinePlaceholder":231},[123,170860,170861,170863,170865,170867,170869],{"class":125,"line":156},[123,170862,1399],{"class":133},[123,170864,170804],{"class":129},[123,170866,1405],{"class":133},[123,170868,1341],{"class":279},[123,170870,1344],{"class":129},[123,170872,170873,170875],{"class":125,"line":168},[123,170874,33714],{"class":164},[123,170876,170816],{"class":129},[123,170878,170879],{"class":125,"line":268},[123,170880,232],{"emptyLinePlaceholder":231},[123,170882,170883,170885],{"class":125,"line":291},[123,170884,1357],{"class":279},[123,170886,170629],{"class":129},[14,170888,170890],{"id":170889},"_85-with语句","8.5 with语句",[19,170892,170893,170895],{},[120,170894,1309],{}," 会自动关闭文件，推荐使用。",[113,170897,170899],{"className":115,"code":170898,"language":117,"meta":118,"style":118},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[120,170900,170901,170931,170941],{"__ignoreMap":118},[123,170902,170903,170905,170907,170909,170911,170913,170915,170917,170919,170921,170923,170925,170927,170929],{"class":125,"line":126},[123,170904,1309],{"class":133},[123,170906,1312],{"class":164},[123,170908,1315],{"class":129},[123,170910,149179],{"class":143},[123,170912,251],{"class":129},[123,170914,1323],{"class":143},[123,170916,251],{"class":129},[123,170918,1328],{"class":279},[123,170920,134],{"class":133},[123,170922,1333],{"class":143},[123,170924,1336],{"class":129},[123,170926,547],{"class":133},[123,170928,1341],{"class":279},[123,170930,1344],{"class":129},[123,170932,170933,170935,170937,170939],{"class":125,"line":140},[123,170934,149203],{"class":129},[123,170936,134],{"class":133},[123,170938,1341],{"class":279},[123,170940,170615],{"class":129},[123,170942,170943,170945],{"class":125,"line":156},[123,170944,33714],{"class":164},[123,170946,170622],{"class":129},[19,170948,170949],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170951,170953],{"id":170952},"_86-写入文件","8.6 写入文件",[19,170955,170956,170958],{},[120,170957,3397],{}," 模式会清空原文件。",[113,170960,170962],{"className":115,"code":170961,"language":117,"meta":118,"style":118},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[120,170963,170964,170994,171011],{"__ignoreMap":118},[123,170965,170966,170968,170970,170972,170974,170976,170978,170980,170982,170984,170986,170988,170990,170992],{"class":125,"line":126},[123,170967,1309],{"class":133},[123,170969,1312],{"class":164},[123,170971,1315],{"class":129},[123,170973,149179],{"class":143},[123,170975,251],{"class":129},[123,170977,154090],{"class":143},[123,170979,251],{"class":129},[123,170981,1328],{"class":279},[123,170983,134],{"class":133},[123,170985,1333],{"class":143},[123,170987,1336],{"class":129},[123,170989,547],{"class":133},[123,170991,1341],{"class":279},[123,170993,1344],{"class":129},[123,170995,170996,170999,171002,171005,171007,171009],{"class":125,"line":140},[123,170997,170998],{"class":279},"    file",[123,171000,171001],{"class":129},".write(",[123,171003,171004],{"class":143},"\"hello",[123,171006,158639],{"class":164},[123,171008,2859],{"class":143},[123,171010,288],{"class":129},[123,171012,171013,171015,171017,171020,171022,171024],{"class":125,"line":156},[123,171014,170998],{"class":279},[123,171016,171001],{"class":129},[123,171018,171019],{"class":143},"\"python",[123,171021,158639],{"class":164},[123,171023,2859],{"class":143},[123,171025,288],{"class":129},[19,171027,171028],{},"写入多行：",[113,171030,171032],{"className":115,"code":171031,"language":117,"meta":118,"style":118},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[120,171033,171034,171069,171073,171104],{"__ignoreMap":118},[123,171035,171036,171038,171040,171042,171045,171047,171049,171051,171054,171056,171058,171060,171063,171065,171067],{"class":125,"line":126},[123,171037,170765],{"class":129},[123,171039,134],{"class":133},[123,171041,977],{"class":129},[123,171043,171044],{"class":143},"\"小明,18",[123,171046,158639],{"class":164},[123,171048,2859],{"class":143},[123,171050,251],{"class":129},[123,171052,171053],{"class":143},"\"小红,17",[123,171055,158639],{"class":164},[123,171057,2859],{"class":143},[123,171059,251],{"class":129},[123,171061,171062],{"class":143},"\"小刚,19",[123,171064,158639],{"class":164},[123,171066,2859],{"class":143},[123,171068,998],{"class":129},[123,171070,171071],{"class":125,"line":140},[123,171072,232],{"emptyLinePlaceholder":231},[123,171074,171075,171077,171079,171081,171084,171086,171088,171090,171092,171094,171096,171098,171100,171102],{"class":125,"line":156},[123,171076,1309],{"class":133},[123,171078,1312],{"class":164},[123,171080,1315],{"class":129},[123,171082,171083],{"class":143},"\"students.txt\"",[123,171085,251],{"class":129},[123,171087,154090],{"class":143},[123,171089,251],{"class":129},[123,171091,1328],{"class":279},[123,171093,134],{"class":133},[123,171095,1333],{"class":143},[123,171097,1336],{"class":129},[123,171099,547],{"class":133},[123,171101,1341],{"class":279},[123,171103,1344],{"class":129},[123,171105,171106,171108],{"class":125,"line":168},[123,171107,170998],{"class":279},[123,171109,171110],{"class":129},".writelines(lines)\n",[14,171112,171114],{"id":171113},"_87-追加文件","8.7 追加文件",[19,171116,171117,171119],{},[120,171118,2846],{}," 模式不会清空原内容，而是在末尾追加。",[113,171121,171123],{"className":115,"code":171122,"language":117,"meta":118,"style":118},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[120,171124,171125,171156],{"__ignoreMap":118},[123,171126,171127,171129,171131,171133,171136,171138,171140,171142,171144,171146,171148,171150,171152,171154],{"class":125,"line":126},[123,171128,1309],{"class":133},[123,171130,1312],{"class":164},[123,171132,1315],{"class":129},[123,171134,171135],{"class":143},"\"log.txt\"",[123,171137,251],{"class":129},[123,171139,167439],{"class":143},[123,171141,251],{"class":129},[123,171143,1328],{"class":279},[123,171145,134],{"class":133},[123,171147,1333],{"class":143},[123,171149,1336],{"class":129},[123,171151,547],{"class":133},[123,171153,1341],{"class":279},[123,171155,1344],{"class":129},[123,171157,171158,171160,171162,171165,171167,171169],{"class":125,"line":140},[123,171159,170998],{"class":279},[123,171161,171001],{"class":129},[123,171163,171164],{"class":143},"\"程序启动",[123,171166,158639],{"class":164},[123,171168,2859],{"class":143},[123,171170,288],{"class":129},[19,171172,171173],{},"日志类文件常用追加模式。",[14,171175,171177],{"id":171176},"_88-文件编码","8.8 文件编码",[19,171179,171180],{},"编码决定文字如何保存为字节。",[19,171182,171183],{},"常见编码：",[26,171185,171186,171189],{},[29,171187,171188],{},"UTF-8：推荐。",[29,171190,171191],{},"GBK：部分 Windows 中文文件常见。",[19,171193,171194],{},"读取文件乱码时，可以尝试：",[113,171196,171198],{"className":115,"code":171197,"language":117,"meta":118,"style":118},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[120,171199,171200,171231],{"__ignoreMap":118},[123,171201,171202,171204,171206,171208,171210,171212,171214,171216,171218,171220,171223,171225,171227,171229],{"class":125,"line":126},[123,171203,1309],{"class":133},[123,171205,1312],{"class":164},[123,171207,1315],{"class":129},[123,171209,149179],{"class":143},[123,171211,251],{"class":129},[123,171213,1323],{"class":143},[123,171215,251],{"class":129},[123,171217,1328],{"class":279},[123,171219,134],{"class":133},[123,171221,171222],{"class":143},"\"gbk\"",[123,171224,1336],{"class":129},[123,171226,547],{"class":133},[123,171228,1341],{"class":279},[123,171230,1344],{"class":129},[123,171232,171233,171235,171237,171239],{"class":125,"line":140},[123,171234,149203],{"class":129},[123,171236,134],{"class":133},[123,171238,1341],{"class":279},[123,171240,170615],{"class":129},[19,171242,171243],{},"写文件时建议统一 UTF-8：",[113,171245,171247],{"className":115,"code":171246,"language":117,"meta":118,"style":118},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[120,171248,171249,171279],{"__ignoreMap":118},[123,171250,171251,171253,171255,171257,171259,171261,171263,171265,171267,171269,171271,171273,171275,171277],{"class":125,"line":126},[123,171252,1309],{"class":133},[123,171254,1312],{"class":164},[123,171256,1315],{"class":129},[123,171258,149179],{"class":143},[123,171260,251],{"class":129},[123,171262,154090],{"class":143},[123,171264,251],{"class":129},[123,171266,1328],{"class":279},[123,171268,134],{"class":133},[123,171270,1333],{"class":143},[123,171272,1336],{"class":129},[123,171274,547],{"class":133},[123,171276,1341],{"class":279},[123,171278,1344],{"class":129},[123,171280,171281,171283,171285,171288],{"class":125,"line":140},[123,171282,170998],{"class":279},[123,171284,171001],{"class":129},[123,171286,171287],{"class":143},"\"中文内容\"",[123,171289,288],{"class":129},[14,171291,171293],{"id":171292},"_89-pathlib","8.9 pathlib",[19,171295,171296,171299],{},[120,171297,171298],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[113,171301,171303],{"className":115,"code":171302,"language":117,"meta":118,"style":118},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[120,171304,171305,171315,171319,171337],{"__ignoreMap":118},[123,171306,171307,171309,171311,171313],{"class":125,"line":126},[123,171308,391],{"class":133},[123,171310,110700],{"class":129},[123,171312,223],{"class":133},[123,171314,110705],{"class":129},[123,171316,171317],{"class":125,"line":140},[123,171318,232],{"emptyLinePlaceholder":231},[123,171320,171321,171323,171325,171327,171330,171332,171334],{"class":125,"line":156},[123,171322,170425],{"class":129},[123,171324,134],{"class":133},[123,171326,110934],{"class":129},[123,171328,171329],{"class":143},"\"data\"",[123,171331,1336],{"class":129},[123,171333,3187],{"class":133},[123,171335,171336],{"class":143}," \"students.txt\"\n",[123,171338,171339,171341],{"class":125,"line":168},[123,171340,294],{"class":164},[123,171342,171343],{"class":129},"(path)\n",[19,171345,171346],{},"创建目录：",[113,171348,171350],{"className":115,"code":171349,"language":117,"meta":118,"style":118},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[120,171351,171352,171362,171366,171379],{"__ignoreMap":118},[123,171353,171354,171356,171358,171360],{"class":125,"line":126},[123,171355,391],{"class":133},[123,171357,110700],{"class":129},[123,171359,223],{"class":133},[123,171361,110705],{"class":129},[123,171363,171364],{"class":125,"line":140},[123,171365,232],{"emptyLinePlaceholder":231},[123,171367,171368,171371,171373,171375,171377],{"class":125,"line":156},[123,171369,171370],{"class":129},"data_dir ",[123,171372,134],{"class":133},[123,171374,110934],{"class":129},[123,171376,171329],{"class":143},[123,171378,288],{"class":129},[123,171380,171381,171384,171387,171389,171391],{"class":125,"line":168},[123,171382,171383],{"class":129},"data_dir.mkdir(",[123,171385,171386],{"class":279},"exist_ok",[123,171388,134],{"class":133},[123,171390,870],{"class":164},[123,171392,288],{"class":129},[19,171394,171395],{},"判断文件是否存在：",[113,171397,171399],{"className":115,"code":171398,"language":117,"meta":118,"style":118},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[120,171400,171401,171414,171418,171425],{"__ignoreMap":118},[123,171402,171403,171405,171407,171409,171412],{"class":125,"line":126},[123,171404,170425],{"class":129},[123,171406,134],{"class":133},[123,171408,110934],{"class":129},[123,171410,171411],{"class":143},"\"data\u002Fstudents.txt\"",[123,171413,288],{"class":129},[123,171415,171416],{"class":125,"line":140},[123,171417,232],{"emptyLinePlaceholder":231},[123,171419,171420,171422],{"class":125,"line":156},[123,171421,3998],{"class":133},[123,171423,171424],{"class":129}," path.exists():\n",[123,171426,171427,171429,171431,171434],{"class":125,"line":168},[123,171428,33714],{"class":164},[123,171430,1315],{"class":129},[123,171432,171433],{"class":143},"\"文件存在\"",[123,171435,288],{"class":129},[19,171437,171438],{},"读写文本：",[113,171440,171442],{"className":115,"code":171441,"language":117,"meta":118,"style":118},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[120,171443,171444,171456,171460,171477,171494],{"__ignoreMap":118},[123,171445,171446,171448,171450,171452,171454],{"class":125,"line":126},[123,171447,170425],{"class":129},[123,171449,134],{"class":133},[123,171451,110934],{"class":129},[123,171453,149179],{"class":143},[123,171455,288],{"class":129},[123,171457,171458],{"class":125,"line":140},[123,171459,232],{"emptyLinePlaceholder":231},[123,171461,171462,171465,171467,171469,171471,171473,171475],{"class":125,"line":156},[123,171463,171464],{"class":129},"path.write_text(",[123,171466,148263],{"class":143},[123,171468,251],{"class":129},[123,171470,1328],{"class":279},[123,171472,134],{"class":133},[123,171474,1333],{"class":143},[123,171476,288],{"class":129},[123,171478,171479,171481,171483,171486,171488,171490,171492],{"class":125,"line":168},[123,171480,170608],{"class":129},[123,171482,134],{"class":133},[123,171484,171485],{"class":129}," path.read_text(",[123,171487,1328],{"class":279},[123,171489,134],{"class":133},[123,171491,1333],{"class":143},[123,171493,288],{"class":129},[123,171495,171496,171498],{"class":125,"line":268},[123,171497,294],{"class":164},[123,171499,170622],{"class":129},[14,171501,171503],{"id":171502},"_810-json文件","8.10 JSON文件",[19,171505,171506],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[113,171508,171510],{"className":115,"code":171509,"language":117,"meta":118,"style":118},"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",[120,171511,171512,171518,171522,171530,171540,171550,171558,171562,171566,171591],{"__ignoreMap":118},[123,171513,171514,171516],{"class":125,"line":126},[123,171515,223],{"class":133},[123,171517,226],{"class":129},[123,171519,171520],{"class":125,"line":140},[123,171521,232],{"emptyLinePlaceholder":231},[123,171523,171524,171526,171528],{"class":125,"line":156},[123,171525,151595],{"class":129},[123,171527,134],{"class":133},[123,171529,137],{"class":129},[123,171531,171532,171534,171536,171538],{"class":125,"line":168},[123,171533,144],{"class":143},[123,171535,147],{"class":129},[123,171537,152002],{"class":143},[123,171539,153],{"class":129},[123,171541,171542,171544,171546,171548],{"class":125,"line":268},[123,171543,166651],{"class":143},[123,171545,147],{"class":129},[123,171547,3252],{"class":164},[123,171549,153],{"class":129},[123,171551,171552,171554,171556],{"class":125,"line":291},[123,171553,166662],{"class":143},[123,171555,147],{"class":129},[123,171557,166667],{"class":164},[123,171559,171560],{"class":125,"line":300},[123,171561,171],{"class":129},[123,171563,171564],{"class":125,"line":305},[123,171565,232],{"emptyLinePlaceholder":231},[123,171567,171568,171570,171572,171575,171577,171579,171581,171583,171585,171587,171589],{"class":125,"line":316},[123,171569,158558],{"class":129},[123,171571,134],{"class":133},[123,171573,171574],{"class":129}," json.dumps(student, ",[123,171576,280],{"class":279},[123,171578,134],{"class":133},[123,171580,285],{"class":164},[123,171582,251],{"class":129},[123,171584,154126],{"class":279},[123,171586,134],{"class":133},[123,171588,2692],{"class":164},[123,171590,288],{"class":129},[123,171592,171593,171595],{"class":125,"line":673},[123,171594,294],{"class":164},[123,171596,166185],{"class":129},[19,171598,171599],{},"写入 JSON 文件：",[113,171601,171603],{"className":115,"code":171602,"language":117,"meta":118,"style":118},"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",[120,171604,171605,171611,171615,171623,171651,171679,171683,171687,171717],{"__ignoreMap":118},[123,171606,171607,171609],{"class":125,"line":126},[123,171608,223],{"class":133},[123,171610,226],{"class":129},[123,171612,171613],{"class":125,"line":140},[123,171614,232],{"emptyLinePlaceholder":231},[123,171616,171617,171619,171621],{"class":125,"line":156},[123,171618,161830],{"class":129},[123,171620,134],{"class":133},[123,171622,1587],{"class":129},[123,171624,171625,171627,171629,171631,171633,171635,171637,171639,171641,171643,171645,171647,171649],{"class":125,"line":168},[123,171626,1592],{"class":129},[123,171628,244],{"class":143},[123,171630,147],{"class":129},[123,171632,152002],{"class":143},[123,171634,251],{"class":129},[123,171636,71525],{"class":143},[123,171638,147],{"class":129},[123,171640,3252],{"class":164},[123,171642,251],{"class":129},[123,171644,153586],{"class":143},[123,171646,147],{"class":129},[123,171648,3588],{"class":164},[123,171650,1202],{"class":129},[123,171652,171653,171655,171657,171659,171661,171663,171665,171667,171669,171671,171673,171675,171677],{"class":125,"line":268},[123,171654,1592],{"class":129},[123,171656,244],{"class":143},[123,171658,147],{"class":129},[123,171660,153050],{"class":143},[123,171662,251],{"class":129},[123,171664,71525],{"class":143},[123,171666,147],{"class":129},[123,171668,3227],{"class":164},[123,171670,251],{"class":129},[123,171672,153586],{"class":143},[123,171674,147],{"class":129},[123,171676,3413],{"class":164},[123,171678,1202],{"class":129},[123,171680,171681],{"class":125,"line":291},[123,171682,998],{"class":129},[123,171684,171685],{"class":125,"line":300},[123,171686,232],{"emptyLinePlaceholder":231},[123,171688,171689,171691,171693,171695,171697,171699,171701,171703,171705,171707,171709,171711,171713,171715],{"class":125,"line":305},[123,171690,1309],{"class":133},[123,171692,1312],{"class":164},[123,171694,1315],{"class":129},[123,171696,153945],{"class":143},[123,171698,251],{"class":129},[123,171700,154090],{"class":143},[123,171702,251],{"class":129},[123,171704,1328],{"class":279},[123,171706,134],{"class":133},[123,171708,1333],{"class":143},[123,171710,1336],{"class":129},[123,171712,547],{"class":133},[123,171714,1341],{"class":279},[123,171716,1344],{"class":129},[123,171718,171719,171722,171724,171726,171728,171730,171732,171734,171736,171738,171740],{"class":125,"line":316},[123,171720,171721],{"class":129},"    json.dump(students, ",[123,171723,1357],{"class":279},[123,171725,251],{"class":129},[123,171727,280],{"class":279},[123,171729,134],{"class":133},[123,171731,285],{"class":164},[123,171733,251],{"class":129},[123,171735,154126],{"class":279},[123,171737,134],{"class":133},[123,171739,2692],{"class":164},[123,171741,288],{"class":129},[19,171743,171744],{},"读取 JSON 文件：",[113,171746,171748],{"className":115,"code":171747,"language":117,"meta":118,"style":118},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[120,171749,171750,171756,171760,171790,171802,171806],{"__ignoreMap":118},[123,171751,171752,171754],{"class":125,"line":126},[123,171753,223],{"class":133},[123,171755,226],{"class":129},[123,171757,171758],{"class":125,"line":140},[123,171759,232],{"emptyLinePlaceholder":231},[123,171761,171762,171764,171766,171768,171770,171772,171774,171776,171778,171780,171782,171784,171786,171788],{"class":125,"line":156},[123,171763,1309],{"class":133},[123,171765,1312],{"class":164},[123,171767,1315],{"class":129},[123,171769,153945],{"class":143},[123,171771,251],{"class":129},[123,171773,1323],{"class":143},[123,171775,251],{"class":129},[123,171777,1328],{"class":279},[123,171779,134],{"class":133},[123,171781,1333],{"class":143},[123,171783,1336],{"class":129},[123,171785,547],{"class":133},[123,171787,1341],{"class":279},[123,171789,1344],{"class":129},[123,171791,171792,171794,171796,171798,171800],{"class":125,"line":168},[123,171793,155151],{"class":129},[123,171795,134],{"class":133},[123,171797,1354],{"class":129},[123,171799,1357],{"class":279},[123,171801,288],{"class":129},[123,171803,171804],{"class":125,"line":268},[123,171805,232],{"emptyLinePlaceholder":231},[123,171807,171808,171810],{"class":125,"line":291},[123,171809,294],{"class":164},[123,171811,167109],{"class":129},[14,171813,171815],{"id":171814},"_811-csv文件","8.11 CSV文件",[19,171817,171818],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171820,171821],{},"写入 CSV：",[113,171823,171825],{"className":115,"code":171824,"language":117,"meta":118,"style":118},"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",[120,171826,171827,171834,171838,171846,171864,171880,171896,171900,171904,171944,171958],{"__ignoreMap":118},[123,171828,171829,171831],{"class":125,"line":126},[123,171830,223],{"class":133},[123,171832,171833],{"class":129}," csv\n",[123,171835,171836],{"class":125,"line":140},[123,171837,232],{"emptyLinePlaceholder":231},[123,171839,171840,171842,171844],{"class":125,"line":156},[123,171841,161830],{"class":129},[123,171843,134],{"class":133},[123,171845,1587],{"class":129},[123,171847,171848,171851,171853,171855,171857,171859,171862],{"class":125,"line":168},[123,171849,171850],{"class":129},"    [",[123,171852,75499],{"class":143},[123,171854,251],{"class":129},[123,171856,75532],{"class":143},[123,171858,251],{"class":129},[123,171860,171861],{"class":143},"\"成绩\"",[123,171863,860],{"class":129},[123,171865,171866,171868,171870,171872,171874,171876,171878],{"class":125,"line":268},[123,171867,171850],{"class":129},[123,171869,152002],{"class":143},[123,171871,251],{"class":129},[123,171873,3252],{"class":164},[123,171875,251],{"class":129},[123,171877,3588],{"class":164},[123,171879,860],{"class":129},[123,171881,171882,171884,171886,171888,171890,171892,171894],{"class":125,"line":291},[123,171883,171850],{"class":129},[123,171885,153050],{"class":143},[123,171887,251],{"class":129},[123,171889,3227],{"class":164},[123,171891,251],{"class":129},[123,171893,3413],{"class":164},[123,171895,860],{"class":129},[123,171897,171898],{"class":125,"line":300},[123,171899,998],{"class":129},[123,171901,171902],{"class":125,"line":305},[123,171903,232],{"emptyLinePlaceholder":231},[123,171905,171906,171908,171910,171912,171915,171917,171919,171921,171923,171925,171927,171929,171932,171934,171936,171938,171940,171942],{"class":125,"line":316},[123,171907,1309],{"class":133},[123,171909,1312],{"class":164},[123,171911,1315],{"class":129},[123,171913,171914],{"class":143},"\"students.csv\"",[123,171916,251],{"class":129},[123,171918,154090],{"class":143},[123,171920,251],{"class":129},[123,171922,1328],{"class":279},[123,171924,134],{"class":133},[123,171926,1333],{"class":143},[123,171928,251],{"class":129},[123,171930,171931],{"class":279},"newline",[123,171933,134],{"class":133},[123,171935,1629],{"class":143},[123,171937,1336],{"class":129},[123,171939,547],{"class":133},[123,171941,1341],{"class":279},[123,171943,1344],{"class":129},[123,171945,171946,171949,171951,171954,171956],{"class":125,"line":673},[123,171947,171948],{"class":129},"    writer ",[123,171950,134],{"class":133},[123,171952,171953],{"class":129}," csv.writer(",[123,171955,1357],{"class":279},[123,171957,288],{"class":129},[123,171959,171960],{"class":125,"line":692},[123,171961,171962],{"class":129},"    writer.writerows(students)\n",[19,171964,171965],{},"读取 CSV：",[113,171967,171969],{"className":115,"code":171968,"language":117,"meta":118,"style":118},"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",[120,171970,171971,171977,171981,172011,172025,172037],{"__ignoreMap":118},[123,171972,171973,171975],{"class":125,"line":126},[123,171974,223],{"class":133},[123,171976,171833],{"class":129},[123,171978,171979],{"class":125,"line":140},[123,171980,232],{"emptyLinePlaceholder":231},[123,171982,171983,171985,171987,171989,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009],{"class":125,"line":156},[123,171984,1309],{"class":133},[123,171986,1312],{"class":164},[123,171988,1315],{"class":129},[123,171990,171914],{"class":143},[123,171992,251],{"class":129},[123,171994,1323],{"class":143},[123,171996,251],{"class":129},[123,171998,1328],{"class":279},[123,172000,134],{"class":133},[123,172002,1333],{"class":143},[123,172004,1336],{"class":129},[123,172006,547],{"class":133},[123,172008,1341],{"class":279},[123,172010,1344],{"class":129},[123,172012,172013,172016,172018,172021,172023],{"class":125,"line":168},[123,172014,172015],{"class":129},"    reader ",[123,172017,134],{"class":133},[123,172019,172020],{"class":129}," csv.reader(",[123,172022,1357],{"class":279},[123,172024,288],{"class":129},[123,172026,172027,172029,172032,172034],{"class":125,"line":268},[123,172028,5641],{"class":133},[123,172030,172031],{"class":129}," row ",[123,172033,1405],{"class":133},[123,172035,172036],{"class":129}," reader:\n",[123,172038,172039,172041],{"class":125,"line":291},[123,172040,34863],{"class":164},[123,172042,172043],{"class":129},"(row)\n",[19,172045,172046],{},"使用字典写入：",[113,172048,172050],{"className":115,"code":172049,"language":117,"meta":118,"style":118},"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",[120,172051,172052,172058,172062,172070,172098,172126,172130,172134,172172,172193,172214,172219],{"__ignoreMap":118},[123,172053,172054,172056],{"class":125,"line":126},[123,172055,223],{"class":133},[123,172057,171833],{"class":129},[123,172059,172060],{"class":125,"line":140},[123,172061,232],{"emptyLinePlaceholder":231},[123,172063,172064,172066,172068],{"class":125,"line":156},[123,172065,161830],{"class":129},[123,172067,134],{"class":133},[123,172069,1587],{"class":129},[123,172071,172072,172074,172076,172078,172080,172082,172084,172086,172088,172090,172092,172094,172096],{"class":125,"line":168},[123,172073,1592],{"class":129},[123,172075,244],{"class":143},[123,172077,147],{"class":129},[123,172079,152002],{"class":143},[123,172081,251],{"class":129},[123,172083,71525],{"class":143},[123,172085,147],{"class":129},[123,172087,3252],{"class":164},[123,172089,251],{"class":129},[123,172091,153586],{"class":143},[123,172093,147],{"class":129},[123,172095,3588],{"class":164},[123,172097,1202],{"class":129},[123,172099,172100,172102,172104,172106,172108,172110,172112,172114,172116,172118,172120,172122,172124],{"class":125,"line":268},[123,172101,1592],{"class":129},[123,172103,244],{"class":143},[123,172105,147],{"class":129},[123,172107,153050],{"class":143},[123,172109,251],{"class":129},[123,172111,71525],{"class":143},[123,172113,147],{"class":129},[123,172115,3227],{"class":164},[123,172117,251],{"class":129},[123,172119,153586],{"class":143},[123,172121,147],{"class":129},[123,172123,3413],{"class":164},[123,172125,1202],{"class":129},[123,172127,172128],{"class":125,"line":291},[123,172129,998],{"class":129},[123,172131,172132],{"class":125,"line":300},[123,172133,232],{"emptyLinePlaceholder":231},[123,172135,172136,172138,172140,172142,172144,172146,172148,172150,172152,172154,172156,172158,172160,172162,172164,172166,172168,172170],{"class":125,"line":305},[123,172137,1309],{"class":133},[123,172139,1312],{"class":164},[123,172141,1315],{"class":129},[123,172143,171914],{"class":143},[123,172145,251],{"class":129},[123,172147,154090],{"class":143},[123,172149,251],{"class":129},[123,172151,1328],{"class":279},[123,172153,134],{"class":133},[123,172155,1333],{"class":143},[123,172157,251],{"class":129},[123,172159,171931],{"class":279},[123,172161,134],{"class":133},[123,172163,1629],{"class":143},[123,172165,1336],{"class":129},[123,172167,547],{"class":133},[123,172169,1341],{"class":279},[123,172171,1344],{"class":129},[123,172173,172174,172177,172179,172181,172183,172185,172187,172189,172191],{"class":125,"line":316},[123,172175,172176],{"class":129},"    fieldnames ",[123,172178,134],{"class":133},[123,172180,977],{"class":129},[123,172182,244],{"class":143},[123,172184,251],{"class":129},[123,172186,71525],{"class":143},[123,172188,251],{"class":129},[123,172190,153586],{"class":143},[123,172192,998],{"class":129},[123,172194,172195,172197,172199,172202,172204,172206,172209,172211],{"class":125,"line":673},[123,172196,171948],{"class":129},[123,172198,134],{"class":133},[123,172200,172201],{"class":129}," csv.DictWriter(",[123,172203,1357],{"class":279},[123,172205,251],{"class":129},[123,172207,172208],{"class":279},"fieldnames",[123,172210,134],{"class":133},[123,172212,172213],{"class":129},"fieldnames)\n",[123,172215,172216],{"class":125,"line":692},[123,172217,172218],{"class":129},"    writer.writeheader()\n",[123,172220,172221],{"class":125,"line":713},[123,172222,171962],{"class":129},[14,172224,172226],{"id":172225},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172228,125680],{},[26,172230,172231,172234,172237],{},[29,172232,172233],{},"读取文本文件。",[29,172235,172236],{},"统计每个单词出现次数。",[29,172238,172239],{},"输出出现次数最多的前 10 个单词。",[19,172241,12467],{},[113,172243,172245],{"className":115,"code":172244,"language":117,"meta":118,"style":118},"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",[120,172246,172247,172257,172261,172274,172290,172294,172304,172313,172317,172329,172349,172358,172362,172380,172384,172414,172418,172434],{"__ignoreMap":118},[123,172248,172249,172251,172253,172255],{"class":125,"line":126},[123,172250,391],{"class":133},[123,172252,110700],{"class":129},[123,172254,223],{"class":133},[123,172256,110705],{"class":129},[123,172258,172259],{"class":125,"line":140},[123,172260,232],{"emptyLinePlaceholder":231},[123,172262,172263,172265,172267,172269,172272],{"class":125,"line":156},[123,172264,170425],{"class":129},[123,172266,134],{"class":133},[123,172268,110934],{"class":129},[123,172270,172271],{"class":143},"\"article.txt\"",[123,172273,288],{"class":129},[123,172275,172276,172278,172280,172282,172284,172286,172288],{"class":125,"line":168},[123,172277,170608],{"class":129},[123,172279,134],{"class":133},[123,172281,171485],{"class":129},[123,172283,1328],{"class":279},[123,172285,134],{"class":133},[123,172287,1333],{"class":143},[123,172289,288],{"class":129},[123,172291,172292],{"class":125,"line":268},[123,172293,232],{"emptyLinePlaceholder":231},[123,172295,172296,172299,172301],{"class":125,"line":291},[123,172297,172298],{"class":129},"words ",[123,172300,134],{"class":133},[123,172302,172303],{"class":129}," content.lower().split()\n",[123,172305,172306,172309,172311],{"class":125,"line":300},[123,172307,172308],{"class":129},"counter ",[123,172310,134],{"class":133},[123,172312,90263],{"class":129},[123,172314,172315],{"class":125,"line":305},[123,172316,232],{"emptyLinePlaceholder":231},[123,172318,172319,172321,172324,172326],{"class":125,"line":316},[123,172320,1399],{"class":133},[123,172322,172323],{"class":129}," word ",[123,172325,1405],{"class":133},[123,172327,172328],{"class":129}," words:\n",[123,172330,172331,172334,172336,172339,172342,172344,172347],{"class":125,"line":673},[123,172332,172333],{"class":129},"    word ",[123,172335,134],{"class":133},[123,172337,172338],{"class":129}," word.strip(",[123,172340,172341],{"class":143},"\".,!?;:",[123,172343,158609],{"class":164},[123,172345,172346],{"class":143},"'()[]\"",[123,172348,288],{"class":129},[123,172350,172351,172353,172355],{"class":125,"line":692},[123,172352,1711],{"class":133},[123,172354,1714],{"class":133},[123,172356,172357],{"class":129}," word:\n",[123,172359,172360],{"class":125,"line":713},[123,172361,1722],{"class":133},[123,172363,172364,172367,172369,172372,172374,172376,172378],{"class":125,"line":718},[123,172365,172366],{"class":129},"    counter[word] ",[123,172368,134],{"class":133},[123,172370,172371],{"class":129}," counter.get(word, ",[123,172373,2799],{"class":164},[123,172375,1336],{"class":129},[123,172377,3086],{"class":133},[123,172379,58101],{"class":164},[123,172381,172382],{"class":125,"line":1138},[123,172383,232],{"emptyLinePlaceholder":231},[123,172385,172386,172389,172391,172393,172396,172398,172400,172402,172404,172406,172408,172410,172412],{"class":125,"line":1429},[123,172387,172388],{"class":129},"items ",[123,172390,134],{"class":133},[123,172392,165718],{"class":164},[123,172394,172395],{"class":129},"(counter.items(), ",[123,172397,156060],{"class":279},[123,172399,156063],{"class":133},[123,172401,156066],{"class":129},[123,172403,2825],{"class":164},[123,172405,1048],{"class":129},[123,172407,165642],{"class":279},[123,172409,134],{"class":133},[123,172411,870],{"class":164},[123,172413,288],{"class":129},[123,172415,172416],{"class":125,"line":1439},[123,172417,232],{"emptyLinePlaceholder":231},[123,172419,172420,172422,172425,172427,172430,172432],{"class":125,"line":1444},[123,172421,1399],{"class":133},[123,172423,172424],{"class":129}," word, count ",[123,172426,1405],{"class":133},[123,172428,172429],{"class":129}," items[:",[123,172431,2193],{"class":164},[123,172433,167869],{"class":129},[123,172435,172436,172438],{"class":125,"line":1453},[123,172437,33714],{"class":164},[123,172439,172440],{"class":129},"(word, count)\n",[14,172442,172444],{"id":172443},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[113,172446,172448],{"className":115,"code":172447,"language":117,"meta":118,"style":118},"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",[120,172449,172450,172456,172466,172470,172482,172486,172490,172498,172508,172514,172518,172548,172558,172562,172566,172574,172604,172628,172632,172636,172644,172673,172678],{"__ignoreMap":118},[123,172451,172452,172454],{"class":125,"line":126},[123,172453,223],{"class":133},[123,172455,226],{"class":129},[123,172457,172458,172460,172462,172464],{"class":125,"line":140},[123,172459,391],{"class":133},[123,172461,110700],{"class":129},[123,172463,223],{"class":133},[123,172465,110705],{"class":129},[123,172467,172468],{"class":125,"line":156},[123,172469,232],{"emptyLinePlaceholder":231},[123,172471,172472,172474,172476,172478,172480],{"class":125,"line":168},[123,172473,153938],{"class":164},[123,172475,15995],{"class":133},[123,172477,110934],{"class":129},[123,172479,153945],{"class":143},[123,172481,288],{"class":129},[123,172483,172484],{"class":125,"line":268},[123,172485,232],{"emptyLinePlaceholder":231},[123,172487,172488],{"class":125,"line":291},[123,172489,232],{"emptyLinePlaceholder":231},[123,172491,172492,172494,172496],{"class":125,"line":300},[123,172493,34359],{"class":133},[123,172495,153962],{"class":337},[123,172497,34365],{"class":129},[123,172499,172500,172502,172504,172506],{"class":125,"line":305},[123,172501,1711],{"class":133},[123,172503,1714],{"class":133},[123,172505,153973],{"class":164},[123,172507,153976],{"class":129},[123,172509,172510,172512],{"class":125,"line":316},[123,172511,17182],{"class":133},[123,172513,1372],{"class":129},[123,172515,172516],{"class":125,"line":673},[123,172517,232],{"emptyLinePlaceholder":231},[123,172519,172520,172522,172524,172526,172528,172530,172532,172534,172536,172538,172540,172542,172544,172546],{"class":125,"line":692},[123,172521,36588],{"class":133},[123,172523,1312],{"class":164},[123,172525,1315],{"class":129},[123,172527,153938],{"class":164},[123,172529,251],{"class":129},[123,172531,1323],{"class":143},[123,172533,251],{"class":129},[123,172535,1328],{"class":279},[123,172537,134],{"class":133},[123,172539,1333],{"class":143},[123,172541,1336],{"class":129},[123,172543,547],{"class":133},[123,172545,1341],{"class":279},[123,172547,1344],{"class":129},[123,172549,172550,172552,172554,172556],{"class":125,"line":713},[123,172551,17182],{"class":133},[123,172553,1354],{"class":129},[123,172555,1357],{"class":279},[123,172557,288],{"class":129},[123,172559,172560],{"class":125,"line":718},[123,172561,232],{"emptyLinePlaceholder":231},[123,172563,172564],{"class":125,"line":1138},[123,172565,232],{"emptyLinePlaceholder":231},[123,172567,172568,172570,172572],{"class":125,"line":1429},[123,172569,34359],{"class":133},[123,172571,154072],{"class":337},[123,172573,154075],{"class":129},[123,172575,172576,172578,172580,172582,172584,172586,172588,172590,172592,172594,172596,172598,172600,172602],{"class":125,"line":1439},[123,172577,36588],{"class":133},[123,172579,1312],{"class":164},[123,172581,1315],{"class":129},[123,172583,153938],{"class":164},[123,172585,251],{"class":129},[123,172587,154090],{"class":143},[123,172589,251],{"class":129},[123,172591,1328],{"class":279},[123,172593,134],{"class":133},[123,172595,1333],{"class":143},[123,172597,1336],{"class":129},[123,172599,547],{"class":133},[123,172601,1341],{"class":279},[123,172603,1344],{"class":129},[123,172605,172606,172608,172610,172612,172614,172616,172618,172620,172622,172624,172626],{"class":125,"line":1444},[123,172607,154111],{"class":129},[123,172609,1357],{"class":279},[123,172611,251],{"class":129},[123,172613,280],{"class":279},[123,172615,134],{"class":133},[123,172617,285],{"class":164},[123,172619,251],{"class":129},[123,172621,154126],{"class":279},[123,172623,134],{"class":133},[123,172625,2692],{"class":164},[123,172627,288],{"class":129},[123,172629,172630],{"class":125,"line":1453},[123,172631,232],{"emptyLinePlaceholder":231},[123,172633,172634],{"class":125,"line":1458},[123,172635,232],{"emptyLinePlaceholder":231},[123,172637,172638,172640,172642],{"class":125,"line":1476},[123,172639,161830],{"class":129},[123,172641,134],{"class":133},[123,172643,155156],{"class":129},[123,172645,172646,172649,172651,172653,172655,172657,172659,172661,172663,172665,172667,172669,172671],{"class":125,"line":1494},[123,172647,172648],{"class":129},"students.append({",[123,172650,244],{"class":143},[123,172652,147],{"class":129},[123,172654,152002],{"class":143},[123,172656,251],{"class":129},[123,172658,71525],{"class":143},[123,172660,147],{"class":129},[123,172662,3252],{"class":164},[123,172664,251],{"class":129},[123,172666,153586],{"class":143},[123,172668,147],{"class":129},[123,172670,3588],{"class":164},[123,172672,167266],{"class":129},[123,172674,172675],{"class":125,"line":1499},[123,172676,172677],{"class":129},"save_students(students)\n",[123,172679,172680,172682,172684,172687],{"class":125,"line":1517},[123,172681,294],{"class":164},[123,172683,1315],{"class":129},[123,172685,172686],{"class":143},"\"保存成功\"",[123,172688,288],{"class":129},[14,172690,172692],{"id":172691},"_814-易错点","8.14 易错点",[26,172694,172695,172699,172705,172710,172717,172724],{},[29,172696,172697,170958],{},[120,172698,3397],{},[29,172700,172701,172702,2494],{},"读写中文要指定 ",[120,172703,172704],{},"encoding=\"utf-8\"",[29,172706,172707,172708,2494],{},"打开文件后要关闭，推荐使用 ",[120,172709,1309],{},[29,172711,172712,172713,172716],{},"读取大文件不要直接 ",[120,172714,172715],{},"read()"," 全部内容。",[29,172718,172719,172720,172723],{},"Windows 写 CSV 时建议加 ",[120,172721,172722],{},"newline=\"\"","，避免空行。",[29,172725,172726],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172728,172730],{"id":172729},"_815-本章练习","8.15 本章练习",[26,172732,172733,172740,172745,172748,172751],{},[29,172734,172735,172736,172739],{},"写入一个 ",[120,172737,172738],{},"students.txt","，每行保存一个学生姓名。",[29,172741,106745,172742,172744],{},[120,172743,172738],{}," 并输出所有学生。",[29,172746,172747],{},"把学生列表保存为 JSON 文件。",[29,172749,172750],{},"从 JSON 文件读取学生数据，计算平均分。",[29,172752,172753,172754,172757,172758,172761],{},"写一个日志函数 ",[120,172755,172756],{},"write_log(message)","，每次调用向 ",[120,172759,172760],{},"app.log"," 追加一行。",[2526,172763,172764],{},"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":118,"searchDepth":140,"depth":140,"links":172766},[172767,172768,172772,172773,172779,172780,172781,172782,172783,172784,172785,172786,172787,172788,172789],{"id":170278,"depth":140,"text":170279},{"id":170319,"depth":140,"text":170320,"children":172769},[172770,172771],{"id":170323,"depth":156,"text":170324},{"id":170357,"depth":156,"text":170358},{"id":170471,"depth":140,"text":170472},{"id":170564,"depth":140,"text":170565,"children":172774},[172775,172776,172777,172778],{"id":170568,"depth":156,"text":170569},{"id":170655,"depth":156,"text":170656},{"id":170725,"depth":156,"text":170726},{"id":170819,"depth":156,"text":170820},{"id":170889,"depth":140,"text":170890},{"id":170952,"depth":140,"text":170953},{"id":171113,"depth":140,"text":171114},{"id":171176,"depth":140,"text":171177},{"id":171292,"depth":140,"text":171293},{"id":171502,"depth":140,"text":171503},{"id":171814,"depth":140,"text":171815},{"id":172225,"depth":140,"text":172226},{"id":172443,"depth":140,"text":172444},{"id":172691,"depth":140,"text":172692},{"id":172729,"depth":140,"text":172730},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170270,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172796,"title":172797,"body":172798,"description":2544,"extension":2545,"meta":174984,"navigation":231,"path":174985,"seo":174986,"stem":174987,"__hash__":174988},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172799,"toc":174951},[172800,172803,172807,172810,172813,172905,172907,172926,172931,172935,172938,172941,172970,172977,172980,172984,172987,173016,173018,173070,173076,173129,173133,173231,173234,173301,173305,173362,173364,173370,173374,173379,173385,173476,173481,173485,173488,173566,173569,173607,173611,173729,173732,173736,173739,173784,173787,173791,173796,173802,173852,173855,173886,173890,173894,173924,173928,173963,173967,174002,174042,174046,174062,174065,174069,174073,174152,174156,174197,174201,174256,174260,174294,174298,174328,174337,174344,174350,174407,174410,174418,174421,174425,174432,174435,174441,174444,174461,174466,174470,174476,174489,174492,174529,174532,174543,174546,174560,174563,174577,174581,174588,174621,174624,174626,174632,174635,174639,174641,174647,174652,174825,174829,174892,174896,174920,174924,174948],[10,172801,172797],{"id":172802},"_9-异常模块与包",[14,172804,172806],{"id":172805},"_91-什么是异常","9.1 什么是异常",[19,172808,172809],{},"异常是程序运行过程中出现的错误。",[19,172811,172812],{},"常见异常：",[48,172814,172815,172824],{},[51,172816,172817],{},[54,172818,172819,172822],{},[57,172820,172821],{},"异常",[57,172823,28291],{},[64,172825,172826,172836,172846,172855,172865,172875,172885,172895],{},[54,172827,172828,172833],{},[69,172829,172830],{},[120,172831,172832],{},"NameError",[69,172834,172835],{},"使用了未定义变量",[54,172837,172838,172843],{},[69,172839,172840],{},[120,172841,172842],{},"TypeError",[69,172844,172845],{},"类型不匹配",[54,172847,172848,172852],{},[69,172849,172850],{},[120,172851,156948],{},[69,172853,172854],{},"值不合法",[54,172856,172857,172862],{},[69,172858,172859],{},[120,172860,172861],{},"IndexError",[69,172863,172864],{},"列表索引越界",[54,172866,172867,172872],{},[69,172868,172869],{},[120,172870,172871],{},"KeyError",[69,172873,172874],{},"字典 key 不存在",[54,172876,172877,172882],{},[69,172878,172879],{},[120,172880,172881],{},"FileNotFoundError",[69,172883,172884],{},"文件不存在",[54,172886,172887,172892],{},[69,172888,172889],{},[120,172890,172891],{},"ZeroDivisionError",[69,172893,172894],{},"除数为 0",[54,172896,172897,172902],{},[69,172898,172899],{},[120,172900,172901],{},"ImportError",[69,172903,172904],{},"导入失败",[19,172906,1572],{},[113,172908,172910],{"className":115,"code":172909,"language":117,"meta":118,"style":118},"num = int(\"abc\")\n",[120,172911,172912],{"__ignoreMap":118},[123,172913,172914,172916,172918,172920,172922,172924],{"class":125,"line":126},[123,172915,157901],{"class":129},[123,172917,134],{"class":133},[123,172919,4826],{"class":164},[123,172921,1315],{"class":129},[123,172923,157994],{"class":143},[123,172925,288],{"class":129},[19,172927,172928,172929,2494],{},"会触发 ",[120,172930,156948],{},[14,172932,172934],{"id":172933},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172936,172937],{},"如果不处理异常，程序会直接终止。",[19,172939,172940],{},"例如用户输入年龄：",[113,172942,172944],{"className":115,"code":172943,"language":117,"meta":118,"style":118},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[120,172945,172946,172964],{"__ignoreMap":118},[123,172947,172948,172950,172952,172954,172956,172958,172960,172962],{"class":125,"line":126},[123,172949,148930],{"class":129},[123,172951,134],{"class":133},[123,172953,4826],{"class":164},[123,172955,1315],{"class":129},[123,172957,56224],{"class":164},[123,172959,1315],{"class":129},[123,172961,154508],{"class":143},[123,172963,32913],{"class":129},[123,172965,172966,172968],{"class":125,"line":140},[123,172967,294],{"class":164},[123,172969,157875],{"class":129},[19,172971,172972,172973,172976],{},"用户输入 ",[120,172974,172975],{},"abc","，程序就会报错退出。",[19,172978,172979],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172981,172983],{"id":172982},"_93-try-except","9.3 try except",[19,172985,172986],{},"基础语法：",[113,172988,172990],{"className":115,"code":172989,"language":117,"meta":118,"style":118},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[120,172991,172992,172999,173004,173011],{"__ignoreMap":118},[123,172993,172994,172997],{"class":125,"line":126},[123,172995,172996],{"class":133},"try",[123,172998,1344],{"class":129},[123,173000,173001],{"class":125,"line":140},[123,173002,173003],{"class":129},"    可能出错的代码\n",[123,173005,173006,173009],{"class":125,"line":156},[123,173007,173008],{"class":133},"except",[123,173010,1344],{"class":129},[123,173012,173013],{"class":125,"line":168},[123,173014,173015],{"class":129},"    出错后的处理代码\n",[19,173017,1572],{},[113,173019,173021],{"className":115,"code":173020,"language":117,"meta":118,"style":118},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[120,173022,173023,173029,173047,173053,173059],{"__ignoreMap":118},[123,173024,173025,173027],{"class":125,"line":126},[123,173026,172996],{"class":133},[123,173028,1344],{"class":129},[123,173030,173031,173033,173035,173037,173039,173041,173043,173045],{"class":125,"line":140},[123,173032,154500],{"class":129},[123,173034,134],{"class":133},[123,173036,4826],{"class":164},[123,173038,1315],{"class":129},[123,173040,56224],{"class":164},[123,173042,1315],{"class":129},[123,173044,154508],{"class":143},[123,173046,32913],{"class":129},[123,173048,173049,173051],{"class":125,"line":156},[123,173050,33714],{"class":164},[123,173052,157875],{"class":129},[123,173054,173055,173057],{"class":125,"line":168},[123,173056,173008],{"class":133},[123,173058,1344],{"class":129},[123,173060,173061,173063,173065,173068],{"class":125,"line":268},[123,173062,33714],{"class":164},[123,173064,1315],{"class":129},[123,173066,173067],{"class":143},"\"年龄必须是数字\"",[123,173069,288],{"class":129},[19,173071,173072,173073,173075],{},"不建议裸写 ",[120,173074,173008],{},"，最好指定异常类型。",[113,173077,173079],{"className":115,"code":173078,"language":117,"meta":118,"style":118},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[120,173080,173081,173087,173105,173111,173119],{"__ignoreMap":118},[123,173082,173083,173085],{"class":125,"line":126},[123,173084,172996],{"class":133},[123,173086,1344],{"class":129},[123,173088,173089,173091,173093,173095,173097,173099,173101,173103],{"class":125,"line":140},[123,173090,154500],{"class":129},[123,173092,134],{"class":133},[123,173094,4826],{"class":164},[123,173096,1315],{"class":129},[123,173098,56224],{"class":164},[123,173100,1315],{"class":129},[123,173102,154508],{"class":143},[123,173104,32913],{"class":129},[123,173106,173107,173109],{"class":125,"line":156},[123,173108,33714],{"class":164},[123,173110,157875],{"class":129},[123,173112,173113,173115,173117],{"class":125,"line":168},[123,173114,173008],{"class":133},[123,173116,154340],{"class":164},[123,173118,1344],{"class":129},[123,173120,173121,173123,173125,173127],{"class":125,"line":268},[123,173122,33714],{"class":164},[123,173124,1315],{"class":129},[123,173126,173067],{"class":143},[123,173128,288],{"class":129},[14,173130,173132],{"id":173131},"_94-捕获多个异常","9.4 捕获多个异常",[113,173134,173136],{"className":115,"code":173135,"language":117,"meta":118,"style":118},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[120,173137,173138,173144,173165,173185,173192,173200,173211,173220],{"__ignoreMap":118},[123,173139,173140,173142],{"class":125,"line":126},[123,173141,172996],{"class":133},[123,173143,1344],{"class":129},[123,173145,173146,173149,173151,173153,173155,173157,173159,173161,173163],{"class":125,"line":140},[123,173147,173148],{"class":129},"    nums ",[123,173150,134],{"class":133},[123,173152,977],{"class":129},[123,173154,2825],{"class":164},[123,173156,251],{"class":129},[123,173158,2692],{"class":164},[123,173160,251],{"class":129},[123,173162,2686],{"class":164},[123,173164,998],{"class":129},[123,173166,173167,173170,173172,173174,173176,173178,173180,173183],{"class":125,"line":156},[123,173168,173169],{"class":129},"    index ",[123,173171,134],{"class":133},[123,173173,4826],{"class":164},[123,173175,1315],{"class":129},[123,173177,56224],{"class":164},[123,173179,1315],{"class":129},[123,173181,173182],{"class":143},"\"请输入索引:\"",[123,173184,32913],{"class":129},[123,173186,173187,173189],{"class":125,"line":168},[123,173188,33714],{"class":164},[123,173190,173191],{"class":129},"(nums[index])\n",[123,173193,173194,173196,173198],{"class":125,"line":268},[123,173195,173008],{"class":133},[123,173197,154340],{"class":164},[123,173199,1344],{"class":129},[123,173201,173202,173204,173206,173209],{"class":125,"line":291},[123,173203,33714],{"class":164},[123,173205,1315],{"class":129},[123,173207,173208],{"class":143},"\"索引必须是整数\"",[123,173210,288],{"class":129},[123,173212,173213,173215,173218],{"class":125,"line":300},[123,173214,173008],{"class":133},[123,173216,173217],{"class":164}," IndexError",[123,173219,1344],{"class":129},[123,173221,173222,173224,173226,173229],{"class":125,"line":305},[123,173223,33714],{"class":164},[123,173225,1315],{"class":129},[123,173227,173228],{"class":143},"\"索引越界\"",[123,173230,288],{"class":129},[19,173232,173233],{},"多个异常使用相同处理逻辑：",[113,173235,173237],{"className":115,"code":173236,"language":117,"meta":118,"style":118},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[120,173238,173239,173245,173263,173276,173290],{"__ignoreMap":118},[123,173240,173241,173243],{"class":125,"line":126},[123,173242,172996],{"class":133},[123,173244,1344],{"class":129},[123,173246,173247,173249,173251,173253,173255,173257,173259,173261],{"class":125,"line":140},[123,173248,48000],{"class":129},[123,173250,134],{"class":133},[123,173252,4826],{"class":164},[123,173254,1315],{"class":129},[123,173256,56224],{"class":164},[123,173258,1315],{"class":129},[123,173260,157910],{"class":143},[123,173262,32913],{"class":129},[123,173264,173265,173267,173269,173271,173273],{"class":125,"line":156},[123,173266,33714],{"class":164},[123,173268,1315],{"class":129},[123,173270,2193],{"class":164},[123,173272,158160],{"class":133},[123,173274,173275],{"class":129}," num)\n",[123,173277,173278,173280,173282,173284,173286,173288],{"class":125,"line":168},[123,173279,173008],{"class":133},[123,173281,4116],{"class":129},[123,173283,156948],{"class":164},[123,173285,251],{"class":129},[123,173287,172891],{"class":164},[123,173289,33201],{"class":129},[123,173291,173292,173294,173296,173299],{"class":125,"line":268},[123,173293,33714],{"class":164},[123,173295,1315],{"class":129},[123,173297,173298],{"class":143},"\"输入不合法\"",[123,173300,288],{"class":129},[14,173302,173304],{"id":173303},"_95-获取异常信息","9.5 获取异常信息",[113,173306,173308],{"className":115,"code":173307,"language":117,"meta":118,"style":118},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[120,173309,173310,173316,173330,173341],{"__ignoreMap":118},[123,173311,173312,173314],{"class":125,"line":126},[123,173313,172996],{"class":133},[123,173315,1344],{"class":129},[123,173317,173318,173320,173322,173324,173326,173328],{"class":125,"line":140},[123,173319,48000],{"class":129},[123,173321,134],{"class":133},[123,173323,4826],{"class":164},[123,173325,1315],{"class":129},[123,173327,157994],{"class":143},[123,173329,288],{"class":129},[123,173331,173332,173334,173336,173338],{"class":125,"line":156},[123,173333,173008],{"class":133},[123,173335,154340],{"class":164},[123,173337,67005],{"class":133},[123,173339,173340],{"class":129}," e:\n",[123,173342,173343,173345,173347,173349,173352,173354,173356,173358,173360],{"class":125,"line":168},[123,173344,33714],{"class":164},[123,173346,1315],{"class":129},[123,173348,2667],{"class":133},[123,173350,173351],{"class":143},"\"出错了:",[123,173353,3495],{"class":164},[123,173355,2689],{"class":129},[123,173357,3545],{"class":164},[123,173359,2859],{"class":143},[123,173361,288],{"class":129},[19,173363,148841],{},[113,173365,173368],{"className":173366,"code":173367,"language":7621,"meta":118},[7619],"出错了:invalid literal for int() with base 10: 'abc'\n",[120,173369,173367],{"__ignoreMap":118},[14,173371,173373],{"id":173372},"_96-else和finally","9.6 else和finally",[19,173375,173376,173378],{},[120,173377,4155],{},"：没有异常时执行。",[19,173380,173381,173384],{},[120,173382,173383],{},"finally","：无论是否异常都会执行。",[113,173386,173388],{"className":115,"code":173387,"language":117,"meta":118,"style":118},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[120,173389,173390,173396,173414,173422,173432,173438,173459,173465],{"__ignoreMap":118},[123,173391,173392,173394],{"class":125,"line":126},[123,173393,172996],{"class":133},[123,173395,1344],{"class":129},[123,173397,173398,173400,173402,173404,173406,173408,173410,173412],{"class":125,"line":140},[123,173399,48000],{"class":129},[123,173401,134],{"class":133},[123,173403,4826],{"class":164},[123,173405,1315],{"class":129},[123,173407,56224],{"class":164},[123,173409,1315],{"class":129},[123,173411,157910],{"class":143},[123,173413,32913],{"class":129},[123,173415,173416,173418,173420],{"class":125,"line":156},[123,173417,173008],{"class":133},[123,173419,154340],{"class":164},[123,173421,1344],{"class":129},[123,173423,173424,173426,173428,173430],{"class":125,"line":168},[123,173425,33714],{"class":164},[123,173427,1315],{"class":129},[123,173429,155328],{"class":143},[123,173431,288],{"class":129},[123,173433,173434,173436],{"class":125,"line":268},[123,173435,4155],{"class":133},[123,173437,1344],{"class":129},[123,173439,173440,173442,173444,173446,173449,173451,173453,173455,173457],{"class":125,"line":291},[123,173441,33714],{"class":164},[123,173443,1315],{"class":129},[123,173445,2667],{"class":133},[123,173447,173448],{"class":143},"\"输入正确:",[123,173450,3495],{"class":164},[123,173452,4123],{"class":129},[123,173454,3545],{"class":164},[123,173456,2859],{"class":143},[123,173458,288],{"class":129},[123,173460,173461,173463],{"class":125,"line":300},[123,173462,173383],{"class":133},[123,173464,1344],{"class":129},[123,173466,173467,173469,173471,173474],{"class":125,"line":305},[123,173468,33714],{"class":164},[123,173470,1315],{"class":129},[123,173472,173473],{"class":143},"\"程序结束\"",[123,173475,288],{"class":129},[19,173477,173478,173480],{},[120,173479,173383],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173482,173484],{"id":173483},"_97-抛出异常","9.7 抛出异常",[19,173486,173487],{},"程序可以主动抛出异常。",[113,173489,173491],{"className":115,"code":173490,"language":117,"meta":118,"style":118},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[120,173492,173493,173502,173514,173527,173547,173551,173555],{"__ignoreMap":118},[123,173494,173495,173497,173500],{"class":125,"line":126},[123,173496,34359],{"class":133},[123,173498,173499],{"class":337}," set_age",[123,173501,163529],{"class":129},[123,173503,173504,173506,173508,173510,173512],{"class":125,"line":140},[123,173505,1711],{"class":133},[123,173507,18135],{"class":129},[123,173509,3509],{"class":133},[123,173511,6532],{"class":164},[123,173513,1344],{"class":129},[123,173515,173516,173518,173520,173522,173525],{"class":125,"line":156},[123,173517,105822],{"class":133},[123,173519,154340],{"class":164},[123,173521,1315],{"class":129},[123,173523,173524],{"class":143},"\"年龄不能为负数\"",[123,173526,288],{"class":129},[123,173528,173529,173531,173533,173535,173537,173539,173541,173543,173545],{"class":125,"line":168},[123,173530,33714],{"class":164},[123,173532,1315],{"class":129},[123,173534,2667],{"class":133},[123,173536,164097],{"class":143},[123,173538,3495],{"class":164},[123,173540,72621],{"class":129},[123,173542,3545],{"class":164},[123,173544,2859],{"class":143},[123,173546,288],{"class":129},[123,173548,173549],{"class":125,"line":268},[123,173550,232],{"emptyLinePlaceholder":231},[123,173552,173553],{"class":125,"line":291},[123,173554,232],{"emptyLinePlaceholder":231},[123,173556,173557,173560,173562,173564],{"class":125,"line":300},[123,173558,173559],{"class":129},"set_age(",[123,173561,3135],{"class":133},[123,173563,2825],{"class":164},[123,173565,288],{"class":129},[19,173567,173568],{},"调用者可以捕获：",[113,173570,173572],{"className":115,"code":173571,"language":117,"meta":118,"style":118},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[120,173573,173574,173580,173591,173601],{"__ignoreMap":118},[123,173575,173576,173578],{"class":125,"line":126},[123,173577,172996],{"class":133},[123,173579,1344],{"class":129},[123,173581,173582,173585,173587,173589],{"class":125,"line":140},[123,173583,173584],{"class":129},"    set_age(",[123,173586,3135],{"class":133},[123,173588,2825],{"class":164},[123,173590,288],{"class":129},[123,173592,173593,173595,173597,173599],{"class":125,"line":156},[123,173594,173008],{"class":133},[123,173596,154340],{"class":164},[123,173598,67005],{"class":133},[123,173600,173340],{"class":129},[123,173602,173603,173605],{"class":125,"line":168},[123,173604,33714],{"class":164},[123,173606,69400],{"class":129},[14,173608,173610],{"id":173609},"_98-自定义异常","9.8 自定义异常",[113,173612,173614],{"className":115,"code":173613,"language":117,"meta":118,"style":118},"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",[120,173615,173616,173630,173634,173638,173642,173650,173660,173671,173681,173685,173689,173695,173712,173723],{"__ignoreMap":118},[123,173617,173618,173620,173623,173625,173628],{"class":125,"line":126},[123,173619,17124],{"class":133},[123,173621,173622],{"class":337}," BalanceNotEnoughError",[123,173624,1315],{"class":129},[123,173626,173627],{"class":164},"Exception",[123,173629,33201],{"class":129},[123,173631,173632],{"class":125,"line":140},[123,173633,151651],{"class":133},[123,173635,173636],{"class":125,"line":156},[123,173637,232],{"emptyLinePlaceholder":231},[123,173639,173640],{"class":125,"line":168},[123,173641,232],{"emptyLinePlaceholder":231},[123,173643,173644,173646,173648],{"class":125,"line":268},[123,173645,34359],{"class":133},[123,173647,152300],{"class":337},[123,173649,164926],{"class":129},[123,173651,173652,173654,173656,173658],{"class":125,"line":291},[123,173653,1711],{"class":133},[123,173655,152256],{"class":129},[123,173657,3559],{"class":133},[123,173659,164703],{"class":129},[123,173661,173662,173664,173667,173669],{"class":125,"line":300},[123,173663,105822],{"class":133},[123,173665,173666],{"class":129}," BalanceNotEnoughError(",[123,173668,152351],{"class":143},[123,173670,288],{"class":129},[123,173672,173673,173675,173677,173679],{"class":125,"line":305},[123,173674,6529],{"class":133},[123,173676,164933],{"class":129},[123,173678,3135],{"class":133},[123,173680,152289],{"class":129},[123,173682,173683],{"class":125,"line":316},[123,173684,232],{"emptyLinePlaceholder":231},[123,173686,173687],{"class":125,"line":673},[123,173688,232],{"emptyLinePlaceholder":231},[123,173690,173691,173693],{"class":125,"line":692},[123,173692,172996],{"class":133},[123,173694,1344],{"class":129},[123,173696,173697,173699,173701,173704,173706,173708,173710],{"class":125,"line":713},[123,173698,164604],{"class":129},[123,173700,134],{"class":133},[123,173702,173703],{"class":129}," withdraw(",[123,173705,259],{"class":164},[123,173707,251],{"class":129},[123,173709,1045],{"class":164},[123,173711,288],{"class":129},[123,173713,173714,173716,173719,173721],{"class":125,"line":718},[123,173715,173008],{"class":133},[123,173717,173718],{"class":129}," BalanceNotEnoughError ",[123,173720,547],{"class":133},[123,173722,173340],{"class":129},[123,173724,173725,173727],{"class":125,"line":1138},[123,173726,33714],{"class":164},[123,173728,69400],{"class":129},[19,173730,173731],{},"入门阶段大多数情况使用内置异常即可。",[14,173733,173735],{"id":173734},"_99-traceback","9.9 traceback",[19,173737,173738],{},"调试时可以输出完整异常堆栈。",[113,173740,173742],{"className":115,"code":173741,"language":117,"meta":118,"style":118},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[120,173743,173744,173751,173755,173761,173771,173779],{"__ignoreMap":118},[123,173745,173746,173748],{"class":125,"line":126},[123,173747,223],{"class":133},[123,173749,173750],{"class":129}," traceback\n",[123,173752,173753],{"class":125,"line":140},[123,173754,232],{"emptyLinePlaceholder":231},[123,173756,173757,173759],{"class":125,"line":156},[123,173758,172996],{"class":133},[123,173760,1344],{"class":129},[123,173762,173763,173765,173767,173769],{"class":125,"line":168},[123,173764,4429],{"class":164},[123,173766,1315],{"class":129},[123,173768,157994],{"class":143},[123,173770,288],{"class":129},[123,173772,173773,173775,173777],{"class":125,"line":268},[123,173774,173008],{"class":133},[123,173776,154340],{"class":164},[123,173778,1344],{"class":129},[123,173780,173781],{"class":125,"line":291},[123,173782,173783],{"class":129},"    traceback.print_exc()\n",[19,173785,173786],{},"日志系统中常把异常堆栈记录到文件。",[14,173788,173790],{"id":173789},"_910-什么是模块","9.10 什么是模块",[19,173792,173793,173794,128371],{},"模块就是一个 ",[120,173795,148736],{},[19,173797,173798,173799,1159],{},"例如创建 ",[120,173800,173801],{},"my_math.py",[113,173803,173805],{"className":115,"code":173804,"language":117,"meta":118,"style":118},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[120,173806,173807,173815,173825,173829,173833,173842],{"__ignoreMap":118},[123,173808,173809,173811,173813],{"class":125,"line":126},[123,173810,34359],{"class":133},[123,173812,7643],{"class":337},[123,173814,153207],{"class":129},[123,173816,173817,173819,173821,173823],{"class":125,"line":140},[123,173818,6529],{"class":133},[123,173820,13301],{"class":129},[123,173822,3086],{"class":133},[123,173824,153218],{"class":129},[123,173826,173827],{"class":125,"line":156},[123,173828,232],{"emptyLinePlaceholder":231},[123,173830,173831],{"class":125,"line":168},[123,173832,232],{"emptyLinePlaceholder":231},[123,173834,173835,173837,173840],{"class":125,"line":268},[123,173836,34359],{"class":133},[123,173838,173839],{"class":337}," sub",[123,173841,153207],{"class":129},[123,173843,173844,173846,173848,173850],{"class":125,"line":291},[123,173845,6529],{"class":133},[123,173847,13301],{"class":129},[123,173849,3135],{"class":133},[123,173851,153218],{"class":129},[19,173853,173854],{},"在另一个文件中导入：",[113,173856,173858],{"className":115,"code":173857,"language":117,"meta":118,"style":118},"import my_math\n\nprint(my_math.add(1, 2))\n",[120,173859,173860,173867,173871],{"__ignoreMap":118},[123,173861,173862,173864],{"class":125,"line":126},[123,173863,223],{"class":133},[123,173865,173866],{"class":129}," my_math\n",[123,173868,173869],{"class":125,"line":140},[123,173870,232],{"emptyLinePlaceholder":231},[123,173872,173873,173875,173878,173880,173882,173884],{"class":125,"line":156},[123,173874,294],{"class":164},[123,173876,173877],{"class":129},"(my_math.add(",[123,173879,2825],{"class":164},[123,173881,251],{"class":129},[123,173883,2692],{"class":164},[123,173885,32913],{"class":129},[14,173887,173889],{"id":173888},"_911-import导入","9.11 import导入",[2587,173891,173893],{"id":173892},"_9111-导入模块","9.11.1 导入模块",[113,173895,173897],{"className":115,"code":173896,"language":117,"meta":118,"style":118},"import random\n\nprint(random.randint(1, 10))\n",[120,173898,173899,173905,173909],{"__ignoreMap":118},[123,173900,173901,173903],{"class":125,"line":126},[123,173902,223],{"class":133},[123,173904,47736],{"class":129},[123,173906,173907],{"class":125,"line":140},[123,173908,232],{"emptyLinePlaceholder":231},[123,173910,173911,173913,173916,173918,173920,173922],{"class":125,"line":156},[123,173912,294],{"class":164},[123,173914,173915],{"class":129},"(random.randint(",[123,173917,2825],{"class":164},[123,173919,251],{"class":129},[123,173921,2193],{"class":164},[123,173923,32913],{"class":129},[2587,173925,173927],{"id":173926},"_9112-导入指定内容","9.11.2 导入指定内容",[113,173929,173931],{"className":115,"code":173930,"language":117,"meta":118,"style":118},"from random import randint\n\nprint(randint(1, 10))\n",[120,173932,173933,173944,173948],{"__ignoreMap":118},[123,173934,173935,173937,173939,173941],{"class":125,"line":126},[123,173936,391],{"class":133},[123,173938,60198],{"class":129},[123,173940,223],{"class":133},[123,173942,173943],{"class":129}," randint\n",[123,173945,173946],{"class":125,"line":140},[123,173947,232],{"emptyLinePlaceholder":231},[123,173949,173950,173952,173955,173957,173959,173961],{"class":125,"line":156},[123,173951,294],{"class":164},[123,173953,173954],{"class":129},"(randint(",[123,173956,2825],{"class":164},[123,173958,251],{"class":129},[123,173960,2193],{"class":164},[123,173962,32913],{"class":129},[2587,173964,173966],{"id":173965},"_9113-起别名","9.11.3 起别名",[113,173968,173970],{"className":115,"code":173969,"language":117,"meta":118,"style":118},"import random as rd\n\nprint(rd.randint(1, 10))\n",[120,173971,173972,173983,173987],{"__ignoreMap":118},[123,173973,173974,173976,173978,173980],{"class":125,"line":126},[123,173975,223],{"class":133},[123,173977,60198],{"class":129},[123,173979,547],{"class":133},[123,173981,173982],{"class":129}," rd\n",[123,173984,173985],{"class":125,"line":140},[123,173986,232],{"emptyLinePlaceholder":231},[123,173988,173989,173991,173994,173996,173998,174000],{"class":125,"line":156},[123,173990,294],{"class":164},[123,173992,173993],{"class":129},"(rd.randint(",[123,173995,2825],{"class":164},[123,173997,251],{"class":129},[123,173999,2193],{"class":164},[123,174001,32913],{"class":129},[113,174003,174005],{"className":115,"code":174004,"language":117,"meta":118,"style":118},"from random import randint as rint\n\nprint(rint(1, 10))\n",[120,174006,174007,174023,174027],{"__ignoreMap":118},[123,174008,174009,174011,174013,174015,174018,174020],{"class":125,"line":126},[123,174010,391],{"class":133},[123,174012,60198],{"class":129},[123,174014,223],{"class":133},[123,174016,174017],{"class":129}," randint ",[123,174019,547],{"class":133},[123,174021,174022],{"class":129}," rint\n",[123,174024,174025],{"class":125,"line":140},[123,174026,232],{"emptyLinePlaceholder":231},[123,174028,174029,174031,174034,174036,174038,174040],{"class":125,"line":156},[123,174030,294],{"class":164},[123,174032,174033],{"class":129},"(rint(",[123,174035,2825],{"class":164},[123,174037,251],{"class":129},[123,174039,2193],{"class":164},[123,174041,32913],{"class":129},[2587,174043,174045],{"id":174044},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[113,174047,174049],{"className":115,"code":174048,"language":117,"meta":118,"style":118},"from random import *\n",[120,174050,174051],{"__ignoreMap":118},[123,174052,174053,174055,174057,174059],{"class":125,"line":126},[123,174054,391],{"class":133},[123,174056,60198],{"class":129},[123,174058,223],{"class":133},[123,174060,174061],{"class":133}," *\n",[19,174063,174064],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174066,174068],{"id":174067},"_912-常用内置模块","9.12 常用内置模块",[2587,174070,174072],{"id":174071},"_9121-random","9.12.1 random",[113,174074,174076],{"className":115,"code":174075,"language":117,"meta":118,"style":118},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[120,174077,174078,174084,174088,174102,174121],{"__ignoreMap":118},[123,174079,174080,174082],{"class":125,"line":126},[123,174081,223],{"class":133},[123,174083,47736],{"class":129},[123,174085,174086],{"class":125,"line":140},[123,174087,232],{"emptyLinePlaceholder":231},[123,174089,174090,174092,174094,174096,174098,174100],{"class":125,"line":156},[123,174091,294],{"class":164},[123,174093,173915],{"class":129},[123,174095,2825],{"class":164},[123,174097,251],{"class":129},[123,174099,2193],{"class":164},[123,174101,32913],{"class":129},[123,174103,174104,174106,174109,174111,174113,174115,174117,174119],{"class":125,"line":168},[123,174105,294],{"class":164},[123,174107,174108],{"class":129},"(random.choice([",[123,174110,152002],{"class":143},[123,174112,251],{"class":129},[123,174114,153050],{"class":143},[123,174116,251],{"class":129},[123,174118,161845],{"class":143},[123,174120,35555],{"class":129},[123,174122,174123,174125,174128,174130,174132,174134,174136,174138,174140,174142,174144,174146,174148,174150],{"class":125,"line":268},[123,174124,294],{"class":164},[123,174126,174127],{"class":129},"(random.sample([",[123,174129,2825],{"class":164},[123,174131,251],{"class":129},[123,174133,2692],{"class":164},[123,174135,251],{"class":129},[123,174137,2686],{"class":164},[123,174139,251],{"class":129},[123,174141,2901],{"class":164},[123,174143,251],{"class":129},[123,174145,2926],{"class":164},[123,174147,1048],{"class":129},[123,174149,2692],{"class":164},[123,174151,32913],{"class":129},[2587,174153,174155],{"id":174154},"_9122-time","9.12.2 time",[113,174157,174159],{"className":115,"code":174158,"language":117,"meta":118,"style":118},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[120,174160,174161,174167,174171,174178,174186],{"__ignoreMap":118},[123,174162,174163,174165],{"class":125,"line":126},[123,174164,223],{"class":133},[123,174166,34241],{"class":129},[123,174168,174169],{"class":125,"line":140},[123,174170,232],{"emptyLinePlaceholder":231},[123,174172,174173,174175],{"class":125,"line":156},[123,174174,294],{"class":164},[123,174176,174177],{"class":129},"(time.time())\n",[123,174179,174180,174182,174184],{"class":125,"line":168},[123,174181,97465],{"class":129},[123,174183,2825],{"class":164},[123,174185,288],{"class":129},[123,174187,174188,174190,174192,174195],{"class":125,"line":268},[123,174189,294],{"class":164},[123,174191,1315],{"class":129},[123,174193,174194],{"class":143},"\"1秒后执行\"",[123,174196,288],{"class":129},[2587,174198,174200],{"id":174199},"_9123-datetime","9.12.3 datetime",[113,174202,174204],{"className":115,"code":174203,"language":117,"meta":118,"style":118},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[120,174205,174206,174218,174222,174232,174239],{"__ignoreMap":118},[123,174207,174208,174210,174213,174215],{"class":125,"line":126},[123,174209,391],{"class":133},[123,174211,174212],{"class":129}," datetime ",[123,174214,223],{"class":133},[123,174216,174217],{"class":129}," datetime\n",[123,174219,174220],{"class":125,"line":140},[123,174221,232],{"emptyLinePlaceholder":231},[123,174223,174224,174227,174229],{"class":125,"line":156},[123,174225,174226],{"class":129},"now ",[123,174228,134],{"class":133},[123,174230,174231],{"class":129}," datetime.now()\n",[123,174233,174234,174236],{"class":125,"line":168},[123,174235,294],{"class":164},[123,174237,174238],{"class":129},"(now)\n",[123,174240,174241,174243,174246,174249,174251,174254],{"class":125,"line":268},[123,174242,294],{"class":164},[123,174244,174245],{"class":129},"(now.strftime(",[123,174247,174248],{"class":143},"\"%Y-%m-",[123,174250,158805],{"class":164},[123,174252,174253],{"class":143}," %H:%M:%S\"",[123,174255,32913],{"class":129},[2587,174257,174259],{"id":174258},"_9124-os","9.12.4 os",[113,174261,174263],{"className":115,"code":174262,"language":117,"meta":118,"style":118},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[120,174264,174265,174271,174275,174282],{"__ignoreMap":118},[123,174266,174267,174269],{"class":125,"line":126},[123,174268,223],{"class":133},[123,174270,47713],{"class":129},[123,174272,174273],{"class":125,"line":140},[123,174274,232],{"emptyLinePlaceholder":231},[123,174276,174277,174279],{"class":125,"line":156},[123,174278,294],{"class":164},[123,174280,174281],{"class":129},"(os.getcwd())\n",[123,174283,174284,174286,174289,174292],{"class":125,"line":168},[123,174285,294],{"class":164},[123,174287,174288],{"class":129},"(os.listdir(",[123,174290,174291],{"class":143},"\".\"",[123,174293,32913],{"class":129},[2587,174295,174297],{"id":174296},"_9125-sys","9.12.5 sys",[113,174299,174301],{"className":115,"code":174300,"language":117,"meta":118,"style":118},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[120,174302,174303,174310,174314,174321],{"__ignoreMap":118},[123,174304,174305,174307],{"class":125,"line":126},[123,174306,223],{"class":133},[123,174308,174309],{"class":129}," sys\n",[123,174311,174312],{"class":125,"line":140},[123,174313,232],{"emptyLinePlaceholder":231},[123,174315,174316,174318],{"class":125,"line":156},[123,174317,294],{"class":164},[123,174319,174320],{"class":129},"(sys.version)\n",[123,174322,174323,174325],{"class":125,"line":168},[123,174324,294],{"class":164},[123,174326,174327],{"class":129},"(sys.path)\n",[14,174329,174331,174332,174334,174335,2859],{"id":174330},"_913-if-name-main","9.13 if ",[2759,174333,663],{}," == \"",[2759,174336,104449],{},[19,174338,174339,174340,174343],{},"模块被直接运行和被导入时，",[120,174341,174342],{},"__name__"," 的值不同。",[19,174345,174346,174347,1159],{},"创建 ",[120,174348,174349],{},"my_module.py",[113,174351,174353],{"className":115,"code":174352,"language":117,"meta":118,"style":118},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[120,174354,174355,174363,174373,174377,174381,174393],{"__ignoreMap":118},[123,174356,174357,174359,174361],{"class":125,"line":126},[123,174358,34359],{"class":133},[123,174360,7643],{"class":337},[123,174362,153207],{"class":129},[123,174364,174365,174367,174369,174371],{"class":125,"line":140},[123,174366,6529],{"class":133},[123,174368,13301],{"class":129},[123,174370,3086],{"class":133},[123,174372,153218],{"class":129},[123,174374,174375],{"class":125,"line":156},[123,174376,232],{"emptyLinePlaceholder":231},[123,174378,174379],{"class":125,"line":168},[123,174380,232],{"emptyLinePlaceholder":231},[123,174382,174383,174385,174387,174389,174391],{"class":125,"line":268},[123,174384,3998],{"class":133},[123,174386,33635],{"class":164},[123,174388,103951],{"class":133},[123,174390,103954],{"class":143},[123,174392,1344],{"class":129},[123,174394,174395,174397,174399,174401,174403,174405],{"class":125,"line":291},[123,174396,33714],{"class":164},[123,174398,168714],{"class":129},[123,174400,2825],{"class":164},[123,174402,251],{"class":129},[123,174404,2692],{"class":164},[123,174406,32913],{"class":129},[19,174408,174409],{},"作用：",[26,174411,174412,174415],{},[29,174413,174414],{},"直接运行该文件时，执行测试代码。",[29,174416,174417],{},"被其他文件导入时，不执行测试代码。",[19,174419,174420],{},"这是写模块时很常用的习惯。",[14,174422,174424],{"id":174423},"_914-包","9.14 包",[19,174426,174427,174428,174431],{},"包是包含 ",[120,174429,174430],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174433,174434],{},"目录结构：",[113,174436,174439],{"className":174437,"code":174438,"language":7621,"meta":118},[7619],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[120,174440,174438],{"__ignoreMap":118},[19,174442,174443],{},"导入：",[113,174445,174447],{"className":115,"code":174446,"language":117,"meta":118,"style":118},"from utils.file_utils import read_file\n",[120,174448,174449],{"__ignoreMap":118},[123,174450,174451,174453,174456,174458],{"class":125,"line":126},[123,174452,391],{"class":133},[123,174454,174455],{"class":129}," utils.file_utils ",[123,174457,223],{"class":133},[123,174459,174460],{"class":129}," read_file\n",[19,174462,174463,174465],{},[120,174464,174430],{}," 可以为空，也可以写包初始化逻辑。",[14,174467,174469],{"id":174468},"_915-第三方包","9.15 第三方包",[19,174471,174472,174473,174475],{},"第三方包通过 ",[120,174474,338],{}," 安装。",[113,174477,174479],{"className":328,"code":174478,"language":330,"meta":118,"style":118},"pip install requests\n",[120,174480,174481],{"__ignoreMap":118},[123,174482,174483,174485,174487],{"class":125,"line":126},[123,174484,338],{"class":337},[123,174486,341],{"class":143},[123,174488,148485],{"class":143},[19,174490,174491],{},"使用：",[113,174493,174495],{"className":115,"code":174494,"language":117,"meta":118,"style":118},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[120,174496,174497,174503,174507,174522],{"__ignoreMap":118},[123,174498,174499,174501],{"class":125,"line":126},[123,174500,223],{"class":133},[123,174502,148485],{"class":129},[123,174504,174505],{"class":125,"line":140},[123,174506,232],{"emptyLinePlaceholder":231},[123,174508,174509,174512,174514,174517,174520],{"class":125,"line":156},[123,174510,174511],{"class":129},"response ",[123,174513,134],{"class":133},[123,174515,174516],{"class":129}," requests.get(",[123,174518,174519],{"class":143},"\"https:\u002F\u002Fwww.example.com\"",[123,174521,288],{"class":129},[123,174523,174524,174526],{"class":125,"line":168},[123,174525,294],{"class":164},[123,174527,174528],{"class":129},"(response.status_code)\n",[19,174530,174531],{},"查看已安装包：",[113,174533,174535],{"className":328,"code":174534,"language":330,"meta":118,"style":118},"pip list\n",[120,174536,174537],{"__ignoreMap":118},[123,174538,174539,174541],{"class":125,"line":126},[123,174540,338],{"class":337},[123,174542,121343],{"class":143},[19,174544,174545],{},"导出项目依赖：",[113,174547,174548],{"className":328,"code":148677,"language":330,"meta":118,"style":118},[120,174549,174550],{"__ignoreMap":118},[123,174551,174552,174554,174556,174558],{"class":125,"line":126},[123,174553,338],{"class":337},[123,174555,148686],{"class":143},[123,174557,28643],{"class":133},[123,174559,148691],{"class":143},[19,174561,174562],{},"安装项目依赖：",[113,174564,174565],{"className":328,"code":148697,"language":330,"meta":118,"style":118},[120,174566,174567],{"__ignoreMap":118},[123,174568,174569,174571,174573,174575],{"class":125,"line":126},[123,174570,338],{"class":337},[123,174572,341],{"class":143},[123,174574,122027],{"class":164},[123,174576,148691],{"class":143},[14,174578,174580],{"id":174579},"_916-模块搜索路径","9.16 模块搜索路径",[19,174582,174583,174584,174587],{},"Python 导入模块时会在 ",[120,174585,174586],{},"sys.path"," 中查找。",[113,174589,174591],{"className":115,"code":174590,"language":117,"meta":118,"style":118},"import sys\n\nfor path in sys.path:\n    print(path)\n",[120,174592,174593,174599,174603,174615],{"__ignoreMap":118},[123,174594,174595,174597],{"class":125,"line":126},[123,174596,223],{"class":133},[123,174598,174309],{"class":129},[123,174600,174601],{"class":125,"line":140},[123,174602,232],{"emptyLinePlaceholder":231},[123,174604,174605,174607,174610,174612],{"class":125,"line":156},[123,174606,1399],{"class":133},[123,174608,174609],{"class":129}," path ",[123,174611,1405],{"class":133},[123,174613,174614],{"class":129}," sys.path:\n",[123,174616,174617,174619],{"class":125,"line":168},[123,174618,33714],{"class":164},[123,174620,171343],{"class":129},[19,174622,174623],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174625,159737],{},[113,174627,174630],{"className":174628,"code":174629,"language":7621,"meta":118},[7619],"random.py\njson.py\ntime.py\n",[120,174631,174629],{"__ignoreMap":118},[19,174633,174634],{},"这些文件名可能导致导入异常。",[14,174636,174638],{"id":174637},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174640,174434],{},[113,174642,174645],{"className":174643,"code":174644,"language":7621,"meta":118},[7619],"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",[120,174646,174644],{"__ignoreMap":118},[19,174648,174649,1159],{},[120,174650,174651],{},"utils\u002Ffile_utils.py",[113,174653,174655],{"className":115,"code":174654,"language":117,"meta":118,"style":118},"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",[120,174656,174657,174663,174673,174677,174681,174691,174701,174709,174715,174719,174746,174756,174760,174764,174774,174800],{"__ignoreMap":118},[123,174658,174659,174661],{"class":125,"line":126},[123,174660,223],{"class":133},[123,174662,226],{"class":129},[123,174664,174665,174667,174669,174671],{"class":125,"line":140},[123,174666,391],{"class":133},[123,174668,110700],{"class":129},[123,174670,223],{"class":133},[123,174672,110705],{"class":129},[123,174674,174675],{"class":125,"line":156},[123,174676,232],{"emptyLinePlaceholder":231},[123,174678,174679],{"class":125,"line":168},[123,174680,232],{"emptyLinePlaceholder":231},[123,174682,174683,174685,174688],{"class":125,"line":268},[123,174684,34359],{"class":133},[123,174686,174687],{"class":337}," read_json",[123,174689,174690],{"class":129},"(path):\n",[123,174692,174693,174696,174698],{"class":125,"line":291},[123,174694,174695],{"class":129},"    path ",[123,174697,134],{"class":133},[123,174699,174700],{"class":129}," Path(path)\n",[123,174702,174703,174705,174707],{"class":125,"line":300},[123,174704,1711],{"class":133},[123,174706,1714],{"class":133},[123,174708,171424],{"class":129},[123,174710,174711,174713],{"class":125,"line":305},[123,174712,17182],{"class":133},[123,174714,1372],{"class":129},[123,174716,174717],{"class":125,"line":316},[123,174718,232],{"emptyLinePlaceholder":231},[123,174720,174721,174723,174725,174728,174730,174732,174734,174736,174738,174740,174742,174744],{"class":125,"line":673},[123,174722,36588],{"class":133},[123,174724,1312],{"class":164},[123,174726,174727],{"class":129},"(path, ",[123,174729,1323],{"class":143},[123,174731,251],{"class":129},[123,174733,1328],{"class":279},[123,174735,134],{"class":133},[123,174737,1333],{"class":143},[123,174739,1336],{"class":129},[123,174741,547],{"class":133},[123,174743,1341],{"class":279},[123,174745,1344],{"class":129},[123,174747,174748,174750,174752,174754],{"class":125,"line":692},[123,174749,17182],{"class":133},[123,174751,1354],{"class":129},[123,174753,1357],{"class":279},[123,174755,288],{"class":129},[123,174757,174758],{"class":125,"line":713},[123,174759,232],{"emptyLinePlaceholder":231},[123,174761,174762],{"class":125,"line":718},[123,174763,232],{"emptyLinePlaceholder":231},[123,174765,174766,174768,174771],{"class":125,"line":1138},[123,174767,34359],{"class":133},[123,174769,174770],{"class":337}," write_json",[123,174772,174773],{"class":129},"(path, data):\n",[123,174775,174776,174778,174780,174782,174784,174786,174788,174790,174792,174794,174796,174798],{"class":125,"line":1429},[123,174777,36588],{"class":133},[123,174779,1312],{"class":164},[123,174781,174727],{"class":129},[123,174783,154090],{"class":143},[123,174785,251],{"class":129},[123,174787,1328],{"class":279},[123,174789,134],{"class":133},[123,174791,1333],{"class":143},[123,174793,1336],{"class":129},[123,174795,547],{"class":133},[123,174797,1341],{"class":279},[123,174799,1344],{"class":129},[123,174801,174802,174805,174807,174809,174811,174813,174815,174817,174819,174821,174823],{"class":125,"line":1439},[123,174803,174804],{"class":129},"        json.dump(data, ",[123,174806,1357],{"class":279},[123,174808,251],{"class":129},[123,174810,280],{"class":279},[123,174812,134],{"class":133},[123,174814,285],{"class":164},[123,174816,251],{"class":129},[123,174818,154126],{"class":279},[123,174820,134],{"class":133},[123,174822,2692],{"class":164},[123,174824,288],{"class":129},[19,174826,174827,1159],{},[120,174828,156721],{},[113,174830,174832],{"className":115,"code":174831,"language":117,"meta":118,"style":118},"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",[120,174833,174834,174845,174849,174862,174882],{"__ignoreMap":118},[123,174835,174836,174838,174840,174842],{"class":125,"line":126},[123,174837,391],{"class":133},[123,174839,174455],{"class":129},[123,174841,223],{"class":133},[123,174843,174844],{"class":129}," read_json, write_json\n",[123,174846,174847],{"class":125,"line":140},[123,174848,232],{"emptyLinePlaceholder":231},[123,174850,174851,174853,174855,174858,174860],{"class":125,"line":156},[123,174852,161830],{"class":129},[123,174854,134],{"class":133},[123,174856,174857],{"class":129}," read_json(",[123,174859,153945],{"class":143},[123,174861,288],{"class":129},[123,174863,174864,174866,174868,174870,174872,174874,174876,174878,174880],{"class":125,"line":168},[123,174865,172648],{"class":129},[123,174867,244],{"class":143},[123,174869,147],{"class":129},[123,174871,152002],{"class":143},[123,174873,251],{"class":129},[123,174875,153586],{"class":143},[123,174877,147],{"class":129},[123,174879,3588],{"class":164},[123,174881,167266],{"class":129},[123,174883,174884,174887,174889],{"class":125,"line":268},[123,174885,174886],{"class":129},"write_json(",[123,174888,153945],{"class":143},[123,174890,174891],{"class":129},", students)\n",[14,174893,174895],{"id":174894},"_918-易错点","9.18 易错点",[26,174897,174898,174901,174906,174911,174914,174917],{},[29,174899,174900],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174902,174903,174904,2494],{},"能指定异常类型就不要裸写 ",[120,174905,173008],{},[29,174907,174908,174910],{},[120,174909,173383],{}," 无论是否出错都会执行。",[29,174912,174913],{},"模块文件名不要和标准库重名。",[29,174915,174916],{},"导入自己写的模块时，要注意运行目录。",[29,174918,174919],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174921,174923],{"id":174922},"_919-本章练习","9.19 本章练习",[26,174925,174926,174929,174932,174938,174945],{},[29,174927,174928],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174930,174931],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174933,174346,174934,174937],{},[120,174935,174936],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174939,174940,174941,174944],{},"创建一个 ",[120,174942,174943],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174946,174947],{},"写一个程序，捕获除零异常和输入格式异常。",[2526,174949,174950],{},"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":118,"searchDepth":140,"depth":140,"links":174952},[174953,174954,174955,174956,174957,174958,174959,174960,174961,174962,174963,174969,174976,174978,174979,174980,174981,174982,174983],{"id":172805,"depth":140,"text":172806},{"id":172933,"depth":140,"text":172934},{"id":172982,"depth":140,"text":172983},{"id":173131,"depth":140,"text":173132},{"id":173303,"depth":140,"text":173304},{"id":173372,"depth":140,"text":173373},{"id":173483,"depth":140,"text":173484},{"id":173609,"depth":140,"text":173610},{"id":173734,"depth":140,"text":173735},{"id":173789,"depth":140,"text":173790},{"id":173888,"depth":140,"text":173889,"children":174964},[174965,174966,174967,174968],{"id":173892,"depth":156,"text":173893},{"id":173926,"depth":156,"text":173927},{"id":173965,"depth":156,"text":173966},{"id":174044,"depth":156,"text":174045},{"id":174067,"depth":140,"text":174068,"children":174970},[174971,174972,174973,174974,174975],{"id":174071,"depth":156,"text":174072},{"id":174154,"depth":156,"text":174155},{"id":174199,"depth":156,"text":174200},{"id":174258,"depth":156,"text":174259},{"id":174296,"depth":156,"text":174297},{"id":174330,"depth":140,"text":174977},"9.13 if name == \"main\"",{"id":174423,"depth":140,"text":174424},{"id":174468,"depth":140,"text":174469},{"id":174579,"depth":140,"text":174580},{"id":174637,"depth":140,"text":174638},{"id":174894,"depth":140,"text":174895},{"id":174922,"depth":140,"text":174923},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172797,"description":2544},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174990,"title":174991,"body":174992,"description":175155,"extension":2545,"meta":175156,"navigation":231,"path":175157,"seo":175158,"stem":175159,"__hash__":175160},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174993,"toc":175150},[174994,174997,175000,175003,175014,175016,175090,175093,175096,175099,175102,175105,175108,175111,175114,175117,175120],[10,174995,174991],{"id":174996},"python教程",[19,174998,174999],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175001,175002],{},"建议学习环境：",[26,175004,175005,175008,175011],{},[29,175006,175007],{},"Python 版本：Python 3.10 及以上。",[29,175009,175010],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,175012,175013],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175015,119466],{"id":119466},[26,175017,175018,175024,175030,175036,175042,175048,175054,175060,175066,175072,175078,175084],{},[29,175019,175020],{},[2846,175021,175023],{"href":175022},".\u002Fch1-Python","Python环境与第一个程序",[29,175025,175026],{},[2846,175027,175029],{"href":175028},".\u002Fch2","基础语法、变量与字符串",[29,175031,175032],{},[2846,175033,175035],{"href":175034},".\u002Fch3","判断语句",[29,175037,175038],{},[2846,175039,175041],{"href":175040},".\u002Fch4","循环语句",[29,175043,175044],{},[2846,175045,175047],{"href":175046},".\u002Fch5","函数基础",[29,175049,175050],{},[2846,175051,175053],{"href":175052},".\u002Fch6","数据容器",[29,175055,175056],{},[2846,175057,175059],{"href":175058},".\u002Fch7","函数进阶",[29,175061,175062],{},[2846,175063,175065],{"href":175064},".\u002Fch8","文件操作",[29,175067,175068],{},[2846,175069,175071],{"href":175070},".\u002Fch9","异常、模块与包",[29,175073,175074],{},[2846,175075,175077],{"href":175076},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,175079,175080],{},[2846,175081,175083],{"href":175082},".\u002Fch11","面向对象基础",[29,175085,175086],{},[2846,175087,175089],{"href":175088},".\u002Fch12","综合案例与复习路线",[14,175091,175092],{"id":175092},"学习路线",[19,175094,175095],{},"第一阶段：能运行程序。",[19,175097,175098],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175100,175101],{},"第二阶段：能组织数据。",[19,175103,175104],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175106,175107],{},"第三阶段：能封装逻辑。",[19,175109,175110],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175112,175113],{},"第四阶段：能做小项目。",[19,175115,175116],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175118,175119],{"id":175119},"参考资料",[26,175121,175122,175129,175136,175143],{},[29,175123,175124,175125],{},"黑马程序员 Python 入门教程推荐：",[2846,175126,175127],{"href":175127,"rel":175128},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26287],[29,175130,175131,175132],{},"Python 官方中文教程：",[2846,175133,175134],{"href":175134,"rel":175135},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26287],[29,175137,175138,175139],{},"Python 标准库文档：",[2846,175140,175141],{"href":175141,"rel":175142},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26287],[29,175144,175145,175146],{},"pyecharts 文档：",[2846,175147,175148],{"href":175148,"rel":175149},"https:\u002F\u002Fpyecharts.org\u002F",[26287],{"title":118,"searchDepth":140,"depth":140,"links":175151},[175152,175153,175154],{"id":119466,"depth":140,"text":119466},{"id":175092,"depth":140,"text":175092},{"id":175119,"depth":140,"text":175119},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25805},"\u002Fwiki\u002F2024-10-10-python",{"title":174991,"description":175155},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331481012]